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 ;-)
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden