NEWS
Probleme mit set Object beim theObject.common.custom Bereich
-
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.