NEWS
Unerklärliches Verhalten meiner Scripte
-
Screenshot von den Blockly Skripten.............wenn es dir möglich ist.
-
Alles klar, reiche ich nach.
-
Moin allerseits,
ich bin aktuell dabei meine Wohnung ein wenig smarter zu machen. Dazu zählt auch die Lichtsteuerung im Flur.
Funktioniert auch soweit, allerdings fast zu gut. Teilweise schalten die Lampen zu Zeitpunkten, die das Script eigentlich nicht zulässt.Bespiel 1 (bin auf der Arbeit, deswegen keine Screenshots):
Lampe soll zwischen 2 Zeitpunkten UND bei geringer Außenhelligkeit einschalten. Funktioniert. Nur schaltet diese Lampe sich auch außerhalb dieser Zeiten ein, vermutlich getriggert durch eine Aktualisierung des Helligeitswertes.Beispiel 2: Im langen Flurgang registrieren 2 Bewegungsmelder die Bewegung. Die Beleuchtung soll auch hier nur während bestimmter Zeiten einschalten. Tut sie aber manchmal auch außerhalb dieser Zeiten.
Ich steh ein wenig auf dem Schlauch, da mir auch keine Methode einfällt systematisch auf Fehlersuche zu gehen.
@UltraJochen sagte:
da mir auch keine Methode einfällt systematisch auf Fehlersuche zu gehen.
Zum Testen Logs mit Blöcken "debug output" einfügen.
-
So, hier das Script:

-
@UltraJochen sagte:
da mir auch keine Methode einfällt systematisch auf Fehlersuche zu gehen.
Zum Testen Logs mit Blöcken "debug output" einfügen.
@paul53
Kann ich mir über die Debug-Module auch anzeigen lassen, wer für eine Aktion verantwortlich ist? Rein zu sehen, ob eine Lampe geschaltet wird oder nicht ist ja nicht wirklich zielführend.Gibt es vielleicht noch andere Parameter (außerhalb vom JS-Adapter) die ich zur Beurteilung hinzuziehen sollte?
Kommt der iobroker vielleicht mit den Uhrzeiten durcheinander? -
Das Script funktioniert ja.
Es wird dunkel -> Licht an
Wird wieder heller -> Licht geht ausDie Sache ist die, das Licht geht auch einfach mal außerhalb der definierten Zeiten an.
-
Das Script funktioniert ja.
Es wird dunkel -> Licht an
Wird wieder heller -> Licht geht ausDie Sache ist die, das Licht geht auch einfach mal außerhalb der definierten Zeiten an.
@UltraJochen
Ich kann @Adnim nur zustimmen. Du musst ein paar Debug ausgaben machen. Ich wuerde folgendes ausgeben lassen, wenn das Licht eingeschaltet wird:Den Wert von Sonnenuntergang -120, Den wert der Aktuellen Zeit, sowie den wert der ersten Hälfte des falls blocks. Wenn du das in einen String verpackst und ausgibst solltest du sehen warum das licht angegangen ist, sprich welcher Teil nicht 100% sauber ist.
Nur zur Erinnerung - du kannst im Log (wo du die ausgaben sehen kannst) nach Adapter Filtern, und dir so am Ende eines Tages alle Schaltvorgänge anschauen, zusammen mit dem dazu gehörigen Timestamp.
A.
-
Ok, ich mache ich. :)
-
Hier ist ein Ausschnitt aus dem log von heute Nacht.
2019-08-20 05:00:51.711 - info: javascript.0 script.js.common.Licht.NachtlichtKommode: getAstroDate(pattern=sunset, date=Tue Aug 20 2019 05:00:51 GMT+0200 (CEST)) => Tue Aug 20 2019 20:37:33 GMT+0200 (CEST) 2019-08-20 05:00:51.711 - info: javascript.0 script.js.common.Licht.NachtlichtKommode: setForeignState(id=deconz.0.Lights.5.on, state=false) 2019-08-20 05:00:51.716 - info: deconz.0 setLightState: {"on": false} 5 deconz.0.Lights.5.onJeweils im 5-Minuten-Turnus (der Aktualisierungsintervall vom Helligkeitssensor) schaltet das Licht. wohl weil das System denkt es wäre 20:37.
-
Hier ist ein Ausschnitt aus dem log von heute Nacht.
2019-08-20 05:00:51.711 - info: javascript.0 script.js.common.Licht.NachtlichtKommode: getAstroDate(pattern=sunset, date=Tue Aug 20 2019 05:00:51 GMT+0200 (CEST)) => Tue Aug 20 2019 20:37:33 GMT+0200 (CEST) 2019-08-20 05:00:51.711 - info: javascript.0 script.js.common.Licht.NachtlichtKommode: setForeignState(id=deconz.0.Lights.5.on, state=false) 2019-08-20 05:00:51.716 - info: deconz.0 setLightState: {"on": false} 5 deconz.0.Lights.5.onJeweils im 5-Minuten-Turnus (der Aktualisierungsintervall vom Helligkeitssensor) schaltet das Licht. wohl weil das System denkt es wäre 20:37.
-
Du meinst als Export?
<xml xmlns="http://www.w3.org/1999/xhtml"> <block type="on" id="g+UhoA,!24M((63y#zPd" x="-1712" y="-1012"> <field name="OID">mqtt.0.LuxWinterG.Sensor_BH1750.Lux</field> <field name="CONDITION">any</field> <field name="ACK_CONDITION"></field> <statement name="STATEMENT"> <block type="controls_if" id="X@[;x,?{pO.p-rY_l-]B"> <mutation else="1"></mutation> <value name="IF0"> <block type="logic_operation" id="zR-Jz8s|9-?2K-[U$t2O" inline="false"> <field name="OP">AND</field> <value name="A"> <block type="time_compare_ex" id="m7w`Wn:88^2ZpJUUT(eW"> <mutation end_time="true" actual_time="true"></mutation> <field name="USE_ACTUAL_TIME">TRUE</field> <field name="OPTION">between</field> <value name="START_TIME"> <shadow type="text" id="lSP%zSv}GiqI1Gmos-Q3"> <field name="TEXT">22:08</field> </shadow> <block type="time_astro" id="0dVzfV*R]+A;nZBqnNup"> <field name="TYPE">sunset</field> <field name="OFFSET">-120</field> </block> </value> <value name="END_TIME"> <shadow type="text" id="]a=5lhd4JFW2$k6J/Bhz"> <field name="TEXT">22:00</field> </shadow> </value> </block> </value> <value name="B"> <block type="logic_compare" id="10M^V;LR.mi/yD[kfT}c"> <field name="OP">LTE</field> <value name="A"> <block type="get_value" id="K9zR)-$`w*uIAliM/XZ;"> <field name="ATTR">val</field> <field name="OID">mqtt.0.LuxWinterG.Sensor_BH1750.Lux</field> </block> </value> <value name="B"> <block type="math_number" id="4@/~7.+9Nx$|2@^!d?Ej"> <field name="NUM">10</field> </block> </value> </block> </value> </block> </value> <statement name="DO0"> <block type="control" id="wWbT4++85c$Gd4MwLTOk"> <mutation delay_input="false"></mutation> <field name="OID">deconz.0.Lights.5.bri</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_number" id="PD@Pr:0Uk7dG}I9oVccp"> <field name="NUM">80</field> </block> </value> </block> </statement> <statement name="ELSE"> <block type="control" id="B6([GexicV$OB6r33jLI"> <mutation delay_input="false"></mutation> <field name="OID">deconz.0.Lights.5.on</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="e.61YfNps%r2P`16LJR+"> <field name="BOOL">FALSE</field> </block> </value> </block> </statement> </block> </statement> </block> </xml> -
Du meinst als Export?
<xml xmlns="http://www.w3.org/1999/xhtml"> <block type="on" id="g+UhoA,!24M((63y#zPd" x="-1712" y="-1012"> <field name="OID">mqtt.0.LuxWinterG.Sensor_BH1750.Lux</field> <field name="CONDITION">any</field> <field name="ACK_CONDITION"></field> <statement name="STATEMENT"> <block type="controls_if" id="X@[;x,?{pO.p-rY_l-]B"> <mutation else="1"></mutation> <value name="IF0"> <block type="logic_operation" id="zR-Jz8s|9-?2K-[U$t2O" inline="false"> <field name="OP">AND</field> <value name="A"> <block type="time_compare_ex" id="m7w`Wn:88^2ZpJUUT(eW"> <mutation end_time="true" actual_time="true"></mutation> <field name="USE_ACTUAL_TIME">TRUE</field> <field name="OPTION">between</field> <value name="START_TIME"> <shadow type="text" id="lSP%zSv}GiqI1Gmos-Q3"> <field name="TEXT">22:08</field> </shadow> <block type="time_astro" id="0dVzfV*R]+A;nZBqnNup"> <field name="TYPE">sunset</field> <field name="OFFSET">-120</field> </block> </value> <value name="END_TIME"> <shadow type="text" id="]a=5lhd4JFW2$k6J/Bhz"> <field name="TEXT">22:00</field> </shadow> </value> </block> </value> <value name="B"> <block type="logic_compare" id="10M^V;LR.mi/yD[kfT}c"> <field name="OP">LTE</field> <value name="A"> <block type="get_value" id="K9zR)-$`w*uIAliM/XZ;"> <field name="ATTR">val</field> <field name="OID">mqtt.0.LuxWinterG.Sensor_BH1750.Lux</field> </block> </value> <value name="B"> <block type="math_number" id="4@/~7.+9Nx$|2@^!d?Ej"> <field name="NUM">10</field> </block> </value> </block> </value> </block> </value> <statement name="DO0"> <block type="control" id="wWbT4++85c$Gd4MwLTOk"> <mutation delay_input="false"></mutation> <field name="OID">deconz.0.Lights.5.bri</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_number" id="PD@Pr:0Uk7dG}I9oVccp"> <field name="NUM">80</field> </block> </value> </block> </statement> <statement name="ELSE"> <block type="control" id="B6([GexicV$OB6r33jLI"> <mutation delay_input="false"></mutation> <field name="OID">deconz.0.Lights.5.on</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="e.61YfNps%r2P`16LJR+"> <field name="BOOL">FALSE</field> </block> </value> </block> </statement> </block> </statement> </block> </xml> -
@UltraJochen Nein, du kannst oben rechts auf den Knopf
drücken um den JS code zu lesenA.
ahh, ok
on({id: "mqtt.0.LuxWinterG.Sensor_BH1750.Lux"/*/LuxWinterG/Sensor_BH1750/Lux*/, change: "any"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if (compareTime(getAstroDate("sunset", undefined, -120), '22:00', "between", null) && getState("mqtt.0.LuxWinterG.Sensor_BH1750.Lux").val <= 10) { setState("deconz.0.Lights.5.bri"/*Kommode bri*/, 80); } else { setState("deconz.0.Lights.5.on"/*Kommode on*/, false); } }); -
ahh, ok
on({id: "mqtt.0.LuxWinterG.Sensor_BH1750.Lux"/*/LuxWinterG/Sensor_BH1750/Lux*/, change: "any"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if (compareTime(getAstroDate("sunset", undefined, -120), '22:00', "between", null) && getState("mqtt.0.LuxWinterG.Sensor_BH1750.Lux").val <= 10) { setState("deconz.0.Lights.5.bri"/*Kommode bri*/, 80); } else { setState("deconz.0.Lights.5.on"/*Kommode on*/, false); } }); -
Achso, die Debug-Option habe ich noch nicht gebaut.
Das Script sieht für mich auch ok aus. Um es realistisch zu testen, müsste das angepasste Script dann ja auch die Nacht durchlaufen. Tagsüber (bzw. bis 22:00 funzt es super).Wie ist denn diese Angabe im Log zu verstehen:
date=Tue Aug 20 2019 05:00:51 GMT+0200 (CEST)) => Tue Aug 20 2019 20:37:33 GMT+0200 (CEST) -
Achso, die Debug-Option habe ich noch nicht gebaut.
Das Script sieht für mich auch ok aus. Um es realistisch zu testen, müsste das angepasste Script dann ja auch die Nacht durchlaufen. Tagsüber (bzw. bis 22:00 funzt es super).Wie ist denn diese Angabe im Log zu verstehen:
date=Tue Aug 20 2019 05:00:51 GMT+0200 (CEST)) => Tue Aug 20 2019 20:37:33 GMT+0200 (CEST) -
Achso, die Debug-Option habe ich noch nicht gebaut.
Das Script sieht für mich auch ok aus. Um es realistisch zu testen, müsste das angepasste Script dann ja auch die Nacht durchlaufen. Tagsüber (bzw. bis 22:00 funzt es super).Wie ist denn diese Angabe im Log zu verstehen:
date=Tue Aug 20 2019 05:00:51 GMT+0200 (CEST)) => Tue Aug 20 2019 20:37:33 GMT+0200 (CEST)Wie ist denn diese Angabe im Log zu verstehen:
getAstroDate() liefert um 5:00 Uhr den Zeitpunkt des Sonnenuntergangs: 20:37:33 MESZ.
-
Ok, hier ist ein Eintrag wo sich die Lampe einschaltet:
2019-08-20 01:20:38.333 - info: javascript.0 script.js.common.Licht.NachtlichtKommode: getAstroDate(pattern=sunset, date=Tue Aug 20 2019 01:20:38 GMT+0200 (CEST)) => Mon Aug 19 2019 20:39:39 GMT+0200 (CEST) 2019-08-20 01:20:38.334 - info: javascript.0 script.js.common.Licht.NachtlichtKommode: getState(id=mqtt.0.LuxWinterG.Sensor_BH1750.Lux, timerId=undefined) => {"val":0,"ack":true,"ts":1566256838332,"q":0,"from":"system.adapter.mqtt.0","user":"system.user.admin","lc":1566240922188} 2019-08-20 01:20:38.334 - info: javascript.0 script.js.common.Licht.NachtlichtKommode: setForeignState(id=deconz.0.Lights.5.bri, state=80) 2019-08-20 01:20:38.339 - info: deconz.0 setLightState: {"bri": 80, "on": true} 5 deconz.0.Lights.5.bri 2019-08-20 01:20:38.341 - info: deconz.0 options: {"url":"http://192.168.178.34:8077/api/80A7A3FC4A/lights/5/state","method":"PUT","headers":"Content-Type\" : \"application/json","body":"{\"bri\": 80, \"on\": true}"} -
Ok, hier ist ein Eintrag wo sich die Lampe einschaltet:
2019-08-20 01:20:38.333 - info: javascript.0 script.js.common.Licht.NachtlichtKommode: getAstroDate(pattern=sunset, date=Tue Aug 20 2019 01:20:38 GMT+0200 (CEST)) => Mon Aug 19 2019 20:39:39 GMT+0200 (CEST) 2019-08-20 01:20:38.334 - info: javascript.0 script.js.common.Licht.NachtlichtKommode: getState(id=mqtt.0.LuxWinterG.Sensor_BH1750.Lux, timerId=undefined) => {"val":0,"ack":true,"ts":1566256838332,"q":0,"from":"system.adapter.mqtt.0","user":"system.user.admin","lc":1566240922188} 2019-08-20 01:20:38.334 - info: javascript.0 script.js.common.Licht.NachtlichtKommode: setForeignState(id=deconz.0.Lights.5.bri, state=80) 2019-08-20 01:20:38.339 - info: deconz.0 setLightState: {"bri": 80, "on": true} 5 deconz.0.Lights.5.bri 2019-08-20 01:20:38.341 - info: deconz.0 options: {"url":"http://192.168.178.34:8077/api/80A7A3FC4A/lights/5/state","method":"PUT","headers":"Content-Type\" : \"application/json","body":"{\"bri\": 80, \"on\": true}"}