NEWS
Variable "flackert" zw. true und false
-
Hallo liebes Forum,
ich habe eine Instar-Kamera, die per MQTT eine Nachricht an IoBroker sendet, sobald eine Bewegung erkannt wird.
Im einem Skipt lasse ich bei Änderung des MQTT-Objekts eine Variable auf "true" (Bewegung erkannt) bzw. "false" setzen (sobald nach 10 Sekunden keine Bewegung mehr erkannt wurde).
Die Boolean-Variable steuern dabei eine VIS, die dann das Kamerabild anzeigt.
Das Skript ist folgendes:
var timer = null; setState("0_userdata.0.vis.showHaustuerCam2", false); on({id: "mqtt.1.instar.***.status.alarm.triggered", change: 'any'}, function (obj) { console.log("HaustürCam-Event-Trigger"); if(!getState("0_userdata.0.vis.showHaustuerCam2").val){ console.log("showHaustuerCam auf true"); setState("0_userdata.0.vis.showHaustuerCam2", true); } if(timer){ console.log("Reset Timer"); clearTimeout(timer); } timer = setTimeout(function() { timer = null; // Timer abgelaufen, jetzt löschen setState("0_userdata.0.vis.showHaustuerCam2", false); console.log("showHaustuerCam durch Timer auf false"); }, 10000); });
Bis vor kurzem hat alles bestimmt mehr als ein halbes Jahr wie gewünscht funktioniert.
Seit kurzem (ich habe eigentliche keine Updates gemacht und das System nicht verändert) ist es jedoch so, dass die Boolean-Variable "showHaustuerCam2" endlos lange flackert, sobald sich jemand länger vor der Kamera bewegt.Die Kamera sendet bei jeder Bewegung eine Nachricht, aber das Skript ist ja so programmiert, dass der Timer, der die Variable auf true setzt, immer wieder resettet wird.
Aus irgendeinem Grund funktioniert dies aber nicht (mehr).
Es wird dann stundenlang die Variable "showHaustuerCam2" zwischen true und false hin und her gesetzt, die Variable flackert also. Das hin und her setzen passiert dabei jede Sekunde. Es ist auf jeden Fall nicht das MQTT-Objekt, dass sich dann noch verändert (wie man am LOG gut sehen kann).
Ich habe überhaupt keine Erklärung, warum dies nun plötzlich so ist. Zunächst dachte ich, das vielleicht mein gesamtes System (ioBroker läuft auf einem NAS) überlastet ist und daher das "True-Setzen" des Timers stundenlang "nachgeholt" wird und das Löschen des Timers nicht funktioniert. Aber ein Neustart des Systems etc. hat zu keiner Verbesserung geführt.Interessant ist auch, dass im LOG nichts von dem "Flackern" der Variable zu sehen ist:
2020-11-18 12:03:33.442 - [32minfo[39m: javascript.0 (165) script.js.common.Haustuerkamera: HaustürCam-Event-Trigger 2020-11-18 12:03:33.443 - [32minfo[39m: javascript.0 (165) script.js.common.Haustuerkamera: showHaustuerCam auf true 2020-11-18 12:03:34.474 - [32minfo[39m: javascript.0 (165) script.js.common.Haustuerkamera: HaustürCam-Event-Trigger 2020-11-18 12:03:34.474 - [32minfo[39m: javascript.0 (165) script.js.common.Haustuerkamera: Reset Timer 2020-11-18 12:03:35.488 - [32minfo[39m: javascript.0 (165) script.js.common.Haustuerkamera: HaustürCam-Event-Trigger 2020-11-18 12:03:35.488 - [32minfo[39m: javascript.0 (165) script.js.common.Haustuerkamera: Reset Timer 2020-11-18 12:03:36.505 - [32minfo[39m: javascript.0 (165) script.js.common.Haustuerkamera: HaustürCam-Event-Trigger 2020-11-18 12:03:36.506 - [32minfo[39m: javascript.0 (165) script.js.common.Haustuerkamera: Reset Timer 2020-11-18 12:03:37.526 - [32minfo[39m: javascript.0 (165) script.js.common.Haustuerkamera: HaustürCam-Event-Trigger 2020-11-18 12:03:37.527 - [32minfo[39m: javascript.0 (165) script.js.common.Haustuerkamera: Reset Timer 2020-11-18 12:03:38.560 - [32minfo[39m: javascript.0 (165) script.js.common.Haustuerkamera: HaustürCam-Event-Trigger 2020-11-18 12:03:38.560 - [32minfo[39m: javascript.0 (165) script.js.common.Haustuerkamera: Reset Timer 2020-11-18 12:03:48.561 - [32minfo[39m: javascript.0 (165) script.js.common.Haustuerkamera: showHaustuerCam durch Timer auf false
Wie man im Log sehen kann, funktioniert eigentlich alles wie gewünscht:
Sobald die Kamera nichts mehr triggert, wird die Variable auf False gesetzt.Ich habe außerdem das Ändern der Variable einmal mit flot getracket.
Auch da kann man schön sehen, dass der Wert flackert.Ich habe leider überhaupt keine Idee, warum das alles so ist, vor allem weil es bis vor zwei bis drei Wochen noch alles problemlos funktioniert hat.
Vielleicht hat jemand ja eine Idee????
-
@gender sagte:
on({id: "mqtt.1.instar.***.status.alarm.triggered", change: 'any'}, function (obj) {
Eine ID darf keine Sterne * enthalten.
-
@paul53
Die Sterne stehen da eigentlich nicht. Das steht sonst die kryptische Referenz zur Kamera. -
@gender sagte:
Das steht sonst die kryptische Referenz zur Kamera.
Dann ändere mal den Trigger auf: change: 'gt'
-
Die Instar sendet als Trigger verschiedene Zahlen, die einzelnen Bildbereichen zugeordnet sind (z.B die Zahlen 1 bis 4). Es kann also sein, dass sich die Zahl nicht ändert (da im gleichen Bildbereich getriggert wurde) oder sie z.B. größer oder kleiner wird.
Daher wird "gt" nichts bringen. Aber mit "ne" kann ich es mal ausprobieren... (wobei ich mir ein darauf unterschiedliches Verhalten auch nicht erklären könnte).
Wie gesagt: Grundsätzlich scheint es auch kein Problem des Triggers zu sein, denn die Kamera triggert schon lange nicht mehr während die Variabe "showHaustuerCam2" immernoch zwischen true und false hin und her springt.
Einfach sehr seltsam... -
@gender sagte:
Grundsätzlich scheint es auch kein Problem des Triggers zu sein, denn die Kamera triggert schon lange nicht mehr während die Variabe "showHaustuerCam2" immernoch zwischen true und false hin und her springt.
Ohne Trigger würden nicht jede Sekunde die Log-Ausgaben erzeugt.
-
@paul53
Das stimmt, aber man sieht ja im Log, dass das Triggern um 12:03:38 aufhört und dann 10 Sekunden später (gemäß Script) der Timer ausgelaufen ist und die Variable um 12:03:48 auf "false" gesetzt wird.Das verrückt ist ja nun, dass die Variable ihren Wert trotzdem (ohne dass sie vom Script getriggert wird) noch Ewigkeiten ihren Wert zw. True und False ändert. Das kann man gut in dem Flot-Ausschnitt sehen, den ich gepostet habe. Der Ausschnitt geht nur bis 12:16:00 aber der Wert ändert sich dann noch ewig (in dem Beispiel bis bestimmt 13:30 Uhr).
Verrückt, oder?!
-
Möchte dieses Thema hier nochmal hochziehen, da ich immer noch keine Lösung gefunden habe.
Ich habe inzwischen zumindest den Workarround entdeckt, dass alles wieder funktioniert, wenn ich das "materialdesign - DialogView"-Widget, dass ja angezeigt wird, sobald die Variable auf true geht, lösche und wieder neu anlege (bzw. eine Kopie erzeuge und das "flackernde" Dialog-Widget lösche. Dann hört das oben beschriebene Verhalten (das Flackern der Variablen) auf.
Irgendwann (nach einem Tag, oder auch mal nach einer Woche) taucht es dann wieder auf.Vielleicht kannst du @Scrounger dir das irgendwie erklären, welches Zusammenhang es mit dem Dialog-Widget geben könnte, daher habe ich dich hier einmal verlinkt.
Danke.