NEWS


  • 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  - info: javascript.0 (165) script.js.common.Haustuerkamera: HaustürCam-Event-Trigger
    2020-11-18 12:03:33.443  - info: javascript.0 (165) script.js.common.Haustuerkamera: showHaustuerCam auf true
    2020-11-18 12:03:34.474  - info: javascript.0 (165) script.js.common.Haustuerkamera: HaustürCam-Event-Trigger
    2020-11-18 12:03:34.474  - info: javascript.0 (165) script.js.common.Haustuerkamera: Reset Timer
    2020-11-18 12:03:35.488  - info: javascript.0 (165) script.js.common.Haustuerkamera: HaustürCam-Event-Trigger
    2020-11-18 12:03:35.488  - info: javascript.0 (165) script.js.common.Haustuerkamera: Reset Timer
    2020-11-18 12:03:36.505  - info: javascript.0 (165) script.js.common.Haustuerkamera: HaustürCam-Event-Trigger
    2020-11-18 12:03:36.506  - info: javascript.0 (165) script.js.common.Haustuerkamera: Reset Timer
    2020-11-18 12:03:37.526  - info: javascript.0 (165) script.js.common.Haustuerkamera: HaustürCam-Event-Trigger
    2020-11-18 12:03:37.527  - info: javascript.0 (165) script.js.common.Haustuerkamera: Reset Timer
    2020-11-18 12:03:38.560  - info: javascript.0 (165) script.js.common.Haustuerkamera: HaustürCam-Event-Trigger
    2020-11-18 12:03:38.560  - info: javascript.0 (165) script.js.common.Haustuerkamera: Reset Timer
    2020-11-18 12:03:48.561  - info: 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.

    fd319ed6-ad52-477a-bc5e-1098a68855e3-grafik.png

    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'


  • paul53

    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?!

Suggested Topics

  • 16
  • 3
  • 34
  • 10
  • 2
  • 14
  • 56
  • 5

1.5k
Online

34.6k
Users

40.7k
Topics

557.2k
Posts