NEWS
setState mit eigenem Kennzeichen versehen
-
@paul53
Ich kriegs einfach nicht hin.
Wann verwendet man denn getState und getObject?createState("javascript.0.zigbee.0.Test", { name: "objekt", type: 'object', }); var Alarm = { Wert: 0, Last: '' }; Alarm.Wert = 5 Alarm.Last = "Heizung" setState("javascript.0.zigbee.0.Test", Alarm) Alarm = getObject("javascript.0.zigbee.0.Test") var x = Alarm.Wert var y = Alarm.Last log("Lesen- Wert: " + x + " Last: "+y)
-
@hanss
createState() und setState() arbeiten asynchron, was bedeutet, dass man nicht sofort den Wert mit getState() einlesen kann. Man erhält den "alten" Wert. -
@hanss sagte:
Alarm = getObject("javascript.0.zigbee.0.Test")
ist falsch. Richtig:
Alarm = getState("javascript.0.zigbee.0.Test").val;
Besser:
on("javascript.0.zigbee.0.Test", function(dp) { Alarm = dp.state.val; log("Lesen- Wert: " + Alarm.Wert + " Last: " + Alarm.Last); });
-
@paul53 sagte in setState mit eigenem Kennzeichen versehen:
@hanss sagte:
Alarm = getObject("javascript.0.zigbee.0.Test")
ist falsch. Richtig:
Alarm = getState("javascript.0.zigbee.0.Test").val;
Und wie erhalte ich dann:
var x = Alarm.Wert // Fehlermeldung -
@hanss sagte:
Und wie erhalte ich dann:
var x = Alarm.Wert // FehlermeldungGenau so. Bringt der Compiler eine Fehlermeldung, Javascript zur Laufzeit oder der Editor ? Eine rote Wellenlinie im Editor kannst Du ignorieren.
-
@paul53
zur Laufzeit: TypeError: Cannot read property 'Wert' of nullEs ist auch im Objekt nichts von Alarm oder Wert oder Last eingetragen:
{ "common": { "name": "objekt", "type": "object", "unit": "", "role": "state" }, "native": {}, "type": "state", "from": "system.adapter.javascript.0", "user": "system.user.admin", "ts": 1584874455228, "_id": "javascript.0.zigbee.0.Test", "acl": { "object": 1636, "state": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" } }
-
@hanss sagte:
Cannot read property 'Wert' of null
Nach einem 2. Script-Start sollte der Fehler nicht mehr kommen, da dann setState() den Wert geschrieben hat.
-
@hanss sagte:
Es ist auch im Objekt nichts von Alarm oder Wert oder Last eingetragen:
Das darf auch nicht im statischen Objekt erscheinen, sondern im Zustand (state) des Datenpunktes.
-
Egal wie oft ich dieses Script starte, der Fehler erscheint immer:
createState("javascript.0.zigbee.0.Test", { name: "objekt", type: 'object', }); var Alarm = { Wert: 0, Last: '' }; Alarm.Wert = 4 Alarm.Last = "Heizung" setState("javascript.0.zigbee.0.Test", Alarm) Alarm = getState("javascript.0.zigbee.0.Test").val; var x = Alarm.Wert var y = Alarm.Last log("Lesen-Wert: " + x + " Last: "+y)
-
@hanss sagte:
Egal wie oft ich dieses Script starte, der Fehler erscheint immer:
Das Script läuft unter der Instanz javascript.0 ?
-
@paul53
Jawohl -
@hanss
Welche Javascript-Version ? -
Wenn du der einzige bist, der den State beschreibt, dann schreib doch einfach Ein JSON Objekt mit zwei Attributen rein (Value und Source)
Dann musst du nicht so viel rum experimentieren -
@paul53
Node.js: v10.19.0 Script Engine 4.4.3 -
@hanss sagte:
Node.js: v10.19.0 Script Engine 4.4.3
Damit muss es funktionieren so wie mit meiner Version 4.4.0.
-
@paul53
Könntest Du freundlicherweise einmal das Script von oben einmal bei Dir laufen lassen?
(Egal wie oft ich dieses Script starte, der Fehler erscheint immer:)Jetzt funktionierts, ich weis aber nicht warum, ich habe nur die Kommentare aus dem
Script gelöscht.Vielen, vielen Dank.
-
@hanss sagte:
setState("javascript.0.zigbee.0.Test", Alarm)
Hat auch bei mir nicht funktioniert.
setState("javascript.0.zigbee.0.Test", Alarm, true);
funktioniert.
-
@paul53
Du hast recht, das true macht´s aus.
Mann, da war die MSBasic Syntax ja richtig einfach dagegen.