NEWS
extendObject - Problem bzw funktioniert nicht
-
extendObject - Problem bzw funktioniert nicht
Ich möchte mit extendObject mehrere Attribute in einem Datenpunkt ändern.
Dazu rufe ich je zu ändernden Attribut extendObject auf.
Leider funktioniert dies nicht, die Attribute werden nicht geändertHier mein Beispiel:
-
Attribute des Objekts VOR den Aufrufen:
+++++++ SCREENSHOT Vorher.jpg+++++++
-
Mein Script:
+++++++ SCREENSHOT DerScript.jpg+++++++
-
Attribute des Objekts NACH den Aufrufen:
+++++++ SCREENSHOT Nachher.jpg+++++++
Von den vielen Aufrufen scheint nur der Letzte tatsächlich das Attribut zu ändern.
Was mache ich falsch bzw. wo ist das Problem? -
-
@automatisierer-0 sagte: mit extendObject mehrere Attribute in einem Datenpunkt ändern.
Wenn mehrere Attribute zu ändern sind, würde ich mit getObject(id) das Objekt einlesen, die Attribute im eingelesenen Objekt ändern und anschließend das geänderte Objekt mit setObject(id, obj) speichern. Das ist auf jeden Fall effektiver.
@automatisierer-0 sagte: wo ist das Problem?
Vermutung: Da extendObject() im Hintergrund getObject(id) und setObject() ausführt, wird jedes Mal mit getObject(id) noch das alte Objekt eingelesen, da das vorangegangene setObject() noch nicht fertig ist.
Anmerkung:
"role": "ICH333"
ist ungültig.
-
@paul53
Könntest du mir bitte ein kleines Beispiel schreiben, in dem die Attribute "type", "read" und "max" gesetzt werden.
Ich bringe das leider nicht zusammen.Vielen Dank im Voraus!
{
"id": "knx.0.Multimedia(MM).Gar__Wkst_.MM_-WS-HifiBerry-Favorit_Set-_(cmdPlayFavorite)",
"type": "state",
"common": {
"name": "MM - WS - HifiBerry - Favorit Set - (cmdPlayFavorite)",
"type": "BURLI111",
"role": "ICH111",
"read": false,
"write": true,
"max": 253,
"min": 3
},
"native": {
"dpt": "DPT5.000",
"address": "17/4/18",
"addressRefId": "P-0480-0_GA-1762",
"statusGARefId": "P-0480-0_GA-1763",
"actGARefId": "",
"update": true,
"objRef": "O-29_R-29",
"devName": "M-000C_A-7104-10-5844-O000A",
"devInst": "P-0480-0_DI-57",
"objectSize": "1 Byte"
},
"acl": {
"object": 1636,
"state": 1636,
"owner": "system.user.admin",
"ownerGroup": "system.group.administrator"
},
"from": "system.adapter.javascript.0",
"user": "system.user.admin",
"ts": 1635795393308
} -
@automatisierer-0 sagte: Beispiel schreiben, in dem die Attribute "type", "read" und "max" gesetzt werden.
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);
-
@paul53 said in extendObject - Problem bzw funktioniert nicht:
const obj = getObject('knx.0.Multimedia(MM).Gar__Wkst_.MM_-WS-HifiBerry-Favorit_Set-_(cmdPlayFavorite)');
Hallo,
Sorry, ich gebe das genau so ein, aber es funktioniert nicht:
Irgend etwas mache ich scheinbar falsch.
-
@automatisierer-0 sagte: aber es funktioniert nicht:
Was funktioniert nicht? Werden die Attribute im Datenpunkt nicht geändert? Liefert die Log-Ausgabe Fehlermeldungen?
Die roten Wellenlinien des Javascript-Editors sollte man ignorieren. -
kann es sein, dass der cache da mit rein "murkst" ?
-
@paul53
Fehlermeldung kommt keine.
Wenn ich mir das Ergebnis im Objektbaum anschaue, dann sehe ich dass nichts geändert wurde.{
"id": "knx.0.Multimedia(MM).Gar__Wkst_.MM_-WS-HifiBerry-Favorit_Set-_(cmdPlayFavorite)",
"type": "state",
"common": {
"name": "MM - WS - HifiBerry - Favorit Set - (cmdPlayFavorite)",
"type": "BURLI111",
"role": "NEU",
"read": false,
"write": true,
"max": 253,
"min": 3
}, -
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.
-
@alcalzone said in extendObject - Problem bzw funktioniert nicht:
extendObject('...id...', {
Super, super und nocheimal Super!!!!
So funktioniert es bestens!Vielen Dank !!!!!