Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Probleme mit set Object beim theObject.common.custom Bereich

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Probleme mit set Object beim theObject.common.custom Bereich

    This topic has been deleted. Only users with topic management privileges can see it.
    • R
      Ralf 2 last edited by

      Was ich will: Ich habe früher mit einigen Adaptern gespielt, setze diese jedoch nicht mehr ein. Adapter wie "influxdb.0" und "lovelace.0" haben sich dadurch in vielen Datenpunkten verewigt. Beim löschen der Adapter wurden diese Einträge jedoch nicht gelöscht. Ich möchte nun diese Einträge mit einem Script bereinigen.

      Mein Problem: Beim Speichern mittels "setObject" werden zwar Werte wie theObject.common.role = "state"; korrekt übernommen, aber der Bereich theObject.common.custom; wird nach dem löschen des entsprechenden Eintrags nicht in der DP-Datenbank aktualisiert. Was ich seltsam finde: Starte ich das Script ein zweites mal, dann hat der Javascript-Adapter den geänderten Wert, im Reiter Objekte ist jedoch keine Änderung zu sehen. Nach Neustart des Javascript-Adapters hat auch dieser wieder seinen alten Wert. Er cached also den korrekten Wert, aber transportiert diesen nicht in die State-Datenbank.

      Wo habe ich hier einen Denkfehler?
      Weiß einer, wie ich das am sinnvollsten erledigen kann?

      Das Script:

      var anzahl = 0;
      var treffer = 0;
      var theKey = "sql.0";
      
      //var SelectorALL = $('channel[state.id=*]');
      var SelectorALL = $('channel[state.id=0_userdata.0.Temp.*]');
      SelectorALL.each(function (id, i) {
          anzahl++;
          let theObject = getObject(id);
          theObject.common.role = "state";// +++++ dieser Wert wird übernommen
          //extendObject(id, theObject);
          //setObject(id, theObject, (err) => {
          //    if (err) log('Cannot write object: ' + err);
          //});
          console.debug("ID: " + id);
          //console.debug("TheObject ####-> " + JSON.stringify(theObject));
          let theObjectKeys1 = Object.keys(theObject);
          if (theObjectKeys1.includes("common")) {
              let theObjectKeys2 = Object.keys(theObject.common);
              //log(theObjectKeys2);
              if (theObjectKeys2.includes("custom")) {
                  let theObjectKeys3 = Object.keys(theObject.common.custom);
                  //log(theObjectKeys3);
                  //if theObjectKeys3.includes("influxdb.0"){
                  if (theObjectKeys3.includes(theKey)) {
                      treffer++;
                      let customwert = theObject.common.custom;
                      console.debug("Customwert: " + JSON.stringify(customwert));
                      delete theObject.common.custom[theKey];// ++++++ diese Änderung wird nicht übernommen
                      customwert = theObject.common.custom;
                      console.debug("Customwert nach delete: " + JSON.stringify(customwert));
                      console.debug("ID: " + id);
                      //extendObject(id, theObject); 
      
                      //setObject(id, theObject);
                      console.debug("TheID: " + id);
                      setObject(id, theObject, (err) => {
                          if (err) log('Cannot write object: ' + err);
                      });
                      console.debug("--> " + JSON.stringify(theObject));
                  }
              }
          }
      });
      console.debug("Anzahl: " + anzahl + " Treffer: " + treffer);
      
      
      
      /*
      Beispiele aus dem Forum:
      
      const obj = getObject('knx.0.Multimedia(MM).Gar__Wkst_.MM_-WS-HifiBerry-Favorit_Set-_(cmdPlayFavorite)');
      obj.common.type = 'number';
      obj.common.read = false;
      obj.common.min = 3;
      obj.common.max = 253;
      setObject('knx.0.Multimedia(MM).Gar__Wkst_.MM_-WS-HifiBerry-Favorit_Set-_(cmdPlayFavorite)', obj);
      
      
      Warum nicht alles einfach in einem einzigen extendObject Aufruf?
      
      extendObject('...id...', {
        common: {
          read: false,
          write: true,
          role: "ICH333",
          // ... rest
        }
      });
      Das ursprüngliche Problem ist, dass extendObject asynchron arbeitet und die ersten Aufrufe noch gar nicht abgearbeitet sind, wenn der letzte zuschlägt (und letztendlich gewinnt).
      
      Wenn es wirklich nacheinander sein muss:
      
      await extendObjectAsync('...id', { common: {read: false} } );
      await extendObjectAsync('...id', { common: {write: true} } );
      // ...
      aber das ist nicht zu empfehlen, da es in deinem Fall 6x das Objekt ändert, statt nur 1x.
      */
      

      und hier das formatierte Log-File, erster Lauf:

      19.12.2024, 19:14:05.513	[info ]: javascript.1 (81151) Stopping script script.js.System.RI-RepairCommonData_MissingAdapter2
      19.12.2024, 19:14:48.101	[info ]: javascript.1 (81151) Stopping script script.js.System.RI-RepairCommonData_MissingAdapter2
      19.12.2024, 19:14:54.551	[info ]: javascript.3 (81510) Start JavaScript script.js.System.RI-RepairCommonData_MissingAdapter2 (JavaScript/js)
      19.12.2024, 19:14:54.800	[debug]: javascript.3 (81510) script.js.System.RI-RepairCommonData_MissingAdapter2: ID: 0_userdata.0.Temp.BaumAusString
      19.12.2024, 19:14:54.800	[debug]: javascript.3 (81510) script.js.System.RI-RepairCommonData_MissingAdapter2: ID: 0_userdata.0.Temp.BaumEinString
      19.12.2024, 19:14:54.800	[debug]: javascript.3 (81510) script.js.System.RI-RepairCommonData_MissingAdapter2: ID: 0_userdata.0.Temp.testzahl
      19.12.2024, 19:14:54.800	[debug]: javascript.3 (81510) script.js.System.RI-RepairCommonData_MissingAdapter2: 
      Customwert: 
      {
          "statistics.0": {
              "enabled": true,
              "count": false,
              "fiveMin": false,
              "sumCount": false,
              "impUnitPerImpulse": 1,
              "impUnit": "",
              "timeCount": false,
              "avg": false,
              "minmax": false,
              "sumDelta": false,
              "sumIgnoreMinus": false,
              "groupFactor": 1,
              "logName": "testzahl"
          },
          "sql.0": {
              "enabled": true,
              "storageType": "",
              "counter": false,
              "aliasId": "",
              "debounceTime": 0,
              "blockTime": 60000,
              "changesOnly": true,
              "changesRelogInterval": 0,
              "changesMinDelta": 0,
              "ignoreBelowNumber": "",
              "disableSkippedValueLogging": false,
              "retention": 31536000,
              "customRetentionDuration": 365,
              "maxLength": 0,
              "enableDebugLogs": false,
              "debounce": 1000
          }
      }
      
      19.12.2024, 19:14:54.800	[debug]: javascript.3 (81510) script.js.System.RI-RepairCommonData_MissingAdapter2: 
      Customwert nach delete: 
      {
          "statistics.0": {
              "enabled": true,
              "count": false,
              "fiveMin": false,
              "sumCount": false,
              "impUnitPerImpulse": 1,
              "impUnit": "",
              "timeCount": false,
              "avg": false,
              "minmax": false,
              "sumDelta": false,
              "sumIgnoreMinus": false,
              "groupFactor": 1,
              "logName": "testzahl"
          }
      }
      
      
      19.12.2024, 19:14:54.800	[debug]: javascript.3 (81510) script.js.System.RI-RepairCommonData_MissingAdapter2: ID: 0_userdata.0.Temp.testzahl
      19.12.2024, 19:14:54.800	[debug]: javascript.3 (81510) script.js.System.RI-RepairCommonData_MissingAdapter2: TheID: 0_userdata.0.Temp.testzahl
      19.12.2024, 19:14:54.800	[debug]: javascript.3 (81510) script.js.System.RI-RepairCommonData_MissingAdapter2: --> 
      {
          "common": {
              "name": "testzahl",
              "desc": "Manuell erzeugt",
              "role": "state",
              "type": "number",
              "read": true,
              "write": true,
              "def": 0,
              "custom": {
                  "statistics.0": {
                      "enabled": true,
                      "count": false,
                      "fiveMin": false,
                      "sumCount": false,
                      "impUnitPerImpulse": 1,
                      "impUnit": "",
                      "timeCount": false,
                      "avg": false,
                      "minmax": false,
                      "sumDelta": false,
                      "sumIgnoreMinus": false,
                      "groupFactor": 1,
                      "logName": "testzahl"
                  }
              }
          },
          "type": "state",
          "native": {},
          "_id": "0_userdata.0.Temp.testzahl",
          "acl": {
              "object": 1638,
              "state": 1638,
              "owner": "system.user.admin",
              "ownerGroup": "system.group.administrator"
          },
          "from": "system.adapter.admin.0",
          "user": "system.user.admin",
          "ts": 1734611500825
      }
      
      
      19.12.2024, 19:14:54.801	[debug]: javascript.3 (81510) script.js.System.RI-RepairCommonData_MissingAdapter2: Anzahl: 3 Treffer: 1
      19.12.2024, 19:14:54.801	[info ]: javascript.3 (81510) script.js.System.RI-RepairCommonData_MissingAdapter2: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
      

      Beim zweiten Lauf findet er keinen Treffer mehr.

      1 Reply Last reply Reply Quote 0
      • First post
        Last post

      Support us

      ioBroker
      Community Adapters
      Donate

      660
      Online

      31.8k
      Users

      80.0k
      Topics

      1.3m
      Posts

      1
      1
      85
      Loading More Posts
      • Oldest to Newest
      • Newest to Oldest
      • Most Votes
      Reply
      • Reply as topic
      Log in to reply
      Community
      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
      The ioBroker Community 2014-2023
      logo