NEWS
Über SetState geänderte Werte werden auf dem objects-Tab nicht korrekt angezeigt
-
Ich teste gerade ein Java-Skript mit dem ich den Status von Hue/Tradfri Lampen abfrage und in Objekten in der Javascript-Instanz speichere. Dazu habe ich zunächst über
createState("thorstd.E27_Wohnz_1", 0, {read: true, write: true, desc: "Lampe 1 Wohnzimmer", type: "number" });
einen 'State' angelegt. Wenn das Skript erkennt daß eine Lampe an ist und der gespeicherte Status 0 ist (über GetState() ausgelesen) dann wird die aktuelle Uhrzeit mit SetState() gespeichert. Erkennt das Skript daß eine Lampe aus ist und der gespeicherte Status ist nicht 0 (ebenfalls über GetState() ausgelesen) dann setze ich den Status über SetState() auf 0.
Das Skript funktioniert soweit einwandfrei. Da ich in jedem der if/else-Blöcke console.log verwende sehe ich, daß der Status korrekt erkannt und SetState() aufgerufen wurde. Hier die Ausgabe:
19:07:20.651 [info] javascript.0 script.js.common.Skript4: Lampe ist aus 19:07:25.649 [info] javascript.0 script.js.common.Skript4: Lampe ist aus 19:07:30.647 [info] javascript.0 script.js.common.Skript4: Lampe ist aus 19:07:35.651 [info] javascript.0 script.js.common.Skript4: Sichere Einschaltzeit 19:07:45.649 [info] javascript.0 script.js.common.Skript4: Einschaltdauer 4 19:07:50.650 [info] javascript.0 script.js.common.Skript4: Einschaltdauer 9 19:07:55.649 [info] javascript.0 script.js.common.Skript4: Einschaltdauer 14 19:08:00.649 [info] javascript.0 script.js.common.Skript4: Einschaltdauer 19 19:08:05.649 [info] javascript.0 script.js.common.Skript4: Einschaltdauer 24 19:08:10.648 [info] javascript.0 script.js.common.Skript4: Lampe ist aus 19:08:10.648 [info] javascript.0 script.js.common.Skript4: Setze Einschaltzeit auf 0 19:08:15.652 [info] javascript.0 script.js.common.Skript4: Lampe ist aus 19:08:20.649 [info] javascript.0 script.js.common.Skript4: Lampe ist aus 19:08:25.649 [info] javascript.0 script.js.common.Skript4: Lampe ist aus 19:08:26.643 [info] javascript.0 Stop script script.js.common.Skript4
Das Problem ist nur, daß der Wert für das Statusobjekt auf dem Tab Objekte (meist) nicht korrekt angezeigt wird. Ist die Lampe aus und lt. Skript wurde die Einschaltzeit auf 0 gesetzt zeigt das Objekt immer noch die Einschaltzeit (bzw. umgekehrt). Siehe Bildschirmphoto.
Mache ich hier etwas falsch oder laufe ich in einen Bug?
function ManageLight(lamp) { var name_saved_state_lamp = "javascript.0.thorstd." + lamp; var name_lamp = "deconz.0.RaspBee-GW." + lamp; if (getState(name_lamp + ".on").val === true) { // Lampe ist an // console.log('Lampe ist an'); if (getState(name_saved_state_lamp).val === 0) { console.log('Sichere Einschaltzeit'); setState(name_saved_state_lamp, new Date().getTime()); } else { // Prüfe wie lange die Lampe schon an ist var y2 = getState(name_saved_state_lamp).val; console.log((String('Einschaltdauer ') + String((function () {var v = getDateObject(((new Date().getTime()) - y2)); return v.getHours() * 3600 + v.getMinutes() * 60 + v.getSeconds();})()))); } } else { // Lampe ist aus, also Statusobjekt auf 0 setzen console.log('Lampe ist aus'); if (getState(name_saved_state_lamp).val !== 0) { console.log("Setze Einschaltzeit auf 0") setState(name_saved_state_lamp, 0, true) } } } // Einschaltdauer speichern schedule("*/5 * * * * *", function () { ManageLight("E27_Wohnz_1"); // ManageLight("E27_Wohnz_2"); } );
-
Niemand?
-
Ich hab die Lösung:
setState(name_saved_state_lamp, new Date().getTime());
funktioniert nicht. Hier liefert getState() zwar den korrekten Wert zurück, aber auf dem objects-Tab wird der geänderte Wert nicht angezeigt. Wenn ich aber Datum/Zeit nach Int konvertiere
setState(name_saved_state_lamp, parseInt(new Date().getTime()));
funktioniert es. <size size="150">Warum?</size>