NEWS
GetObject nach setObject zum Hinzufügen von Members in Aufzählung (enums) schlägt fehl
-
Ich hab ein kleines Script geschrieben, was mir für alle Geräte ein paar Enums selbst zuweist.
Leider speichert es immer nur den letzten Eintrag ab.
Starte ich das Script immer wieder sind irgendwann alle Werte drin.
Ich habe mal eingebaut, dass nach dem setObject ein getObject gemacht wird.
Dieses meldet dann auch bei allen Einträgen, die Anzahl der Members nicht gleich ist.
Auch beim letzten Datensatz.
Schaue ich aber in die Aufzählung rein, ist der letzte vorhanden.
Vielleicht dauert es einen bis der Wert vorhanden ist, aber ein delay Kommando habe ich nicht gefunden.
Ggf. geht das hinzufügen ja auch viel einfacher.
Hier der Auszug der Speichern soll:
function setCapability(device, target, capability) { var enumName = "enum.capability." + capability; var capabilityObj = getObject(enumName); var memberName = device + "." + target; capabilityObj.common.members.push(memberName) ; setObject(enumName, capabilityObj, function (err) { if (err) { console.error('Kann Objekt nicht schreiben: ' + err); } }); var capabilityObjCheck = getObject(enumName); if (capabilityObjCheck.common.members.length != capabilityObj.common.members.length) { console.error("Werte wurde nicht via setObject gespeichert " + capabilityObjCheck.common.members.length + ":" + capabilityObj.common.members.length); } }
-
Ein getObject() nach setObject() funktioniert wegen der asynchronen Abarbeitung von setObject() nicht.
Vorschlag: Lesen einmal das Objekt ein, füge <u>alle</u> neuen Members hinzu (.push) und schreibe das geänderte Objekt zurück (setObject()). In der <u>Callback-Funktion</u> von setObject() kannst Du getObject() aufrufen, um den Erfolg zu überprüfen.
-
Ja, das habe ich mir schon gedacht, dass es asyncron läuft.
Sowas wie await geht nicht, oder?
Mein Problem ist, dass ich nicht Enumweise durchgehe, sondern alle ZWave Objekte.
Und jedes Objekt hat ggf. mehrere Enums die geändert werden.
Dadurch müsste ich mir ja alle Enum-Members aller Enums von enum.capability merken.
Wäre sicher möglich, aber anders schon schöner
Ein Javascript Funktion addObjectToEnum gibts es auch nicht, oder?
Ich bin doch nicht der Einzige, der Objekte zu Enums nicht immer manuell hinzufügen möchte
-