Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Variable "flackert" zw. true und false

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Variable "flackert" zw. true und false

    This topic has been deleted. Only users with topic management privileges can see it.
    • G
      gender last edited by

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

      paul53 1 Reply Last reply Reply Quote 0
      • paul53
        paul53 @gender last edited by

        @gender sagte:

        on({id: "mqtt.1.instar.***.status.alarm.triggered", change: 'any'}, function (obj) {

        Eine ID darf keine Sterne * enthalten.

        G 1 Reply Last reply Reply Quote 0
        • G
          gender @paul53 last edited by

          @paul53
          Die Sterne stehen da eigentlich nicht. Das steht sonst die kryptische Referenz zur Kamera.

          paul53 1 Reply Last reply Reply Quote 0
          • paul53
            paul53 @gender last edited by paul53

            @gender sagte:

            Das steht sonst die kryptische Referenz zur Kamera.

            Dann ändere mal den Trigger auf: change: 'gt'

            G 1 Reply Last reply Reply Quote 0
            • G
              gender @paul53 last edited by gender

              @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...

              paul53 1 Reply Last reply Reply Quote 0
              • paul53
                paul53 @gender last edited by

                @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.

                G 1 Reply Last reply Reply Quote 0
                • G
                  gender @paul53 last edited by

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

                  G 1 Reply Last reply Reply Quote 0
                  • G
                    gender @gender last edited by

                    @gender

                    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.

                    1 Reply Last reply Reply Quote 0
                    • First post
                      Last post

                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    743
                    Online

                    31.8k
                    Users

                    80.0k
                    Topics

                    1.3m
                    Posts

                    javascript
                    2
                    8
                    448
                    Loading More Posts
                    • Oldest to Newest
                    • Newest to Oldest
                    • Most Votes
                    Reply
                    • Reply as topic
                    Log in to reply
                    Community
                    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                    The ioBroker Community 2014-2023
                    logo