NEWS
setState mit eigenem Kennzeichen versehen
-
Hallo
wie kann man dem Wert eines Objektes mitgeben (eigene ID) wer den Wert geschrieben hat?Hintergrund ist ein allgemeiner Alarm-Auslöser, der von mehreren Scripten beschrieben werden kann.
Wenn der Alarmzustand eines Scriptes beendet ist, dann soll der Alarm nur dann gelöscht werden können,
wenn der letzte Alarmauslöser auch von diesem Script gesetzt wurde.Oder gibt es hierzu eine elegantere Methode, z.B. dass der letzte Alarm angezeigt wird, bis
alle Auslöser ihren Alarm auch wieder gelöscht haben, das wäre ideal.
Wobei der Alarm verschiedene Typen haben soll, z.B. Alarm 4 von ID 333, Alarm 1 von ID 555 usw.setState("javascript.0.zigbee.0.AlarmLicht", {val: 3, ID: xyz})
-
Hallo
wie kann man dem Wert eines Objektes mitgeben (eigene ID) wer den Wert geschrieben hat?Hintergrund ist ein allgemeiner Alarm-Auslöser, der von mehreren Scripten beschrieben werden kann.
Wenn der Alarmzustand eines Scriptes beendet ist, dann soll der Alarm nur dann gelöscht werden können,
wenn der letzte Alarmauslöser auch von diesem Script gesetzt wurde.Oder gibt es hierzu eine elegantere Methode, z.B. dass der letzte Alarm angezeigt wird, bis
alle Auslöser ihren Alarm auch wieder gelöscht haben, das wäre ideal.
Wobei der Alarm verschiedene Typen haben soll, z.B. Alarm 4 von ID 333, Alarm 1 von ID 555 usw.setState("javascript.0.zigbee.0.AlarmLicht", {val: 3, ID: xyz})
-
@hanss sagte:
setState("javascript.0.zigbee.0.AlarmLicht", {val: 3, ID: xyz})
Datenpunkte vom Typ "Objekt" können es aufnehmen. Aber nicht den Bezeichner val im Objekt verwenden, denn val hat in Datenpunkten eine besondere Bedeutung.
@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) -
@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) -
@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 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); }); -
@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 -
@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" } } -
@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" } } -
@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.

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) -
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 ?
-
@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.
-
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:
setState("javascript.0.zigbee.0.Test", Alarm)
Hat auch bei mir nicht funktioniert.
setState("javascript.0.zigbee.0.Test", Alarm, true);funktioniert.