Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Pushover senden mit zeitlichem Versatz

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Pushover senden mit zeitlichem Versatz

    This topic has been deleted. Only users with topic management privileges can see it.
    • B
      baluderbär last edited by

      Hallo zusammen,

      momentan nutze ich ein Skript, das mir eine Pushover-Nachricht sendet, wenn die Alarmanlage scharf ist und eine Bewegung festgestellt wird.

      var idMotion = "hm-rpc.0.KEQ084xxxx.1.MOTION"; // Bewegungsmelder Diele Datenpunkt MOTION
      var idAlarm = "hm-rega.0.26xxx"/*Alarmanlage*/;   
      
      on({id:idAlarm, change:'ne', val: true}, function () {
          warten();  
          });
      
      function warten() {                      
          setTimeout(waittime, 1 * 500);    // Warteschleife, 1 * 500 Millisekunden und rufe dann waittime auf
      }
      
      function waittime() {                       
          var Alarm = getState(idAlarm).val;
          if (Alarm === true) sendTo("pushover.0", "Alarmanlage AKTIVIERT"); 
      }
      
      on({id:idMotion, val: true}, function () {
          var Alarm = getState(idAlarm).val;
          if (Alarm === true) sendTo("pushover.1", "Alarmanlage AKTIVIERT und Diele: Motion");   
      });
      

      Jetzt würde ich das Skript gerne so umbauen, dass folgendes passiert.

      Wenn Alarmanlage scharf und Bewegung entdeckt, warte x Sekunden. Wird die Alarmanlage innerhalb von x Sekunden deaktiviert sende keine Pushover-Nachricht. Bleibt die Alarmanlage nach x Sekunden noch scharf, sende eine Pushover-Nachricht.

      Hat jemand eine Idee, wie ich das Skript abändern muss?

      Vielen Dank im Voraus.

      Martin

      1 Reply Last reply Reply Quote 0
      • P
        pix last edited by

        Hallo,

        abgesehen von dem umständlichen Konstrukt mit den Funktionen warten() und waittime() kannst du ein setTimeout von X Sekunden vor die pushover-Sendung setzen. Wenn dann die Alarmanlagen in der Zwischenzeit auf false geht, kannst du den Timeout mit clearTimeout löschen.

        Hier mal mein Versuch:

        var idMotion = "hm-rpc.0.KEQ084xxxx.1.MOTION"; // Bewegungsmelder Diele Datenpunkt MOTION
        var idAlarm = "hm-rega.0.26xxx"/*Alarmanlage*/;   
        
        var timer = null; // Timervariable setzen und nullen (bei jedem Skriptstart)
        
        on({
            id:idAlarm, 
            change:'ne'
        }, function (obj) {
            setTimeout(function() {
                if (obj.state.val) sendTo("pushover.0", "Alarmanlage AKTIVIERT"); // verzögerte Meldung
                if (!obj.state.val) {
                    sendTo("pushover.0", "Alarmanlage DEAKTIVIERT"); // optionale Verzögerte Meldung
                    if(timer) clearTimeout(timer); // anderen Timer aus Motion löschen
                    timer = null; // anderen Timer nullen
                }
            }, 1000 * 0.5); // halbe Sekunde bis Ausführung
        });
        
        on({
            id:idMotion, 
            val: true
        }, function () {
            var alarm = getState(idAlarm).val; // Zustand Alarmanlage aktuell abholen
            timer = setTimeout(function() {  // Verzögerung starten (alles in geschweiften Klammern wird verzögert)
                timer = null;  // verzögert Timer nullen
                if (alarm) sendTo("pushover.1", "Alarmanlage AKTIVIERT und Diele: Motion");   // verzögert Nachricht senden
            }, 1000 * 10); // Verzögerungseinstellungen; Meldung über Bewegung erst nach 10s     
        });
        
        

        Wenn die Alarmanlage eingeschaltet wird (vermutlich bei true von Boolean Typ Homematic-Variable), dann wird verzögert eine Meldung über das EInschalten geschickt (0.5 Sekunden oder 500ms später). Ebenso beim Ausschalten (kannst du auskommentieren).

        Wenn bei aktivierter Alarmanlage eine Bewegung erkannt wird, dann startet in der zweiten on-Subscription ein Timer (10s oder 10000 Millisekunden). Wenn diese Zeit abgelaufen ist, wird der Timer sicherheitshalber genullt und eine Pushnachricht geschickt, dass eine Bewegung erkannt wurde. Statt 10s kannste natürlich auch eine kürzere Zeit nehmen. Wenn nun während dieser 10s die Alarmanlage deaktiviert wird, dann wird der gestartete Timer abgebrochen und die eigentlich anstehenden Aufgaben aus den geschweiften Klammern werden nicht abgearbeitet.

        Damit beide on-Subscriptions auf die timer-Variable zugreifen können, wird sie ganz oben im Skript deklariert (var timer = null).

        Das Skript bitte nicht in "global", sondern in "common" speichern. Nenne es doch einfach "Alarmanlage".

        Man kann es später einfach erweitern, um weitere Bewegungsmelder einzubauen oder zB die Zeiten mitzuschicken, wann der Alarm ausgelöst wurde ("Alarmanlage EIN und Bewegung in Diele (vor 10s)"). Ich gehe davon aus, es dient dazu, keinen Fehlalarm zu provozieren, wenn man selbst beim Betreten der Wohnung in den Bewegungsmelderbereich kommt.

        Gib mal Feedback

        Gruß

        Pix

        1 Reply Last reply Reply Quote 0
        • B
          baluderbär last edited by

          Hallo Pix,

          du bist mein Held, was würde ich dafür tun programmieren zu können. Dein Skript hat zu 100% meinen Vorstellungen entsprochen.

          Der Grund weshalb ich eine Verzögerung möchte ist in der Tat, die Vermeidung eines Fehlalarms.

          Echt unglaublich wie einem hier geholfen wird …. tausend Dank.

          <u>Anderes Thema:</u>

          Momentan habe ich für jeden TFK (Tür-Fenster-Kontakt) ein eigenes Skript (das gleiche wie beim Motion-Alarm in der Diele), um bei einem offenen Kontakt auch eine Pushover zu senden.

          Mit Sicherheit kann man alle TFK in einem Skript zusammenfassen, richtig? Wenn es keine Umstände machen sollte, würde ich mich freuen wenn du mir noch einmal unter die Arme greifen könntest.

          Wichtig wäre, dass der auslösende TFK auch mit seinem Namen in der Pushover mitgeschickt wird.

          z.B. Alarmanlage AKTIVIERT und Gästebad: Fenster OFFEN

          Schönen Abend und Gruß

          Martin

          1 Reply Last reply Reply Quote 0
          • P
            pix last edited by

            Hallo,

            schön, dass es läuft.

            Sind die TFK alle einem Gewerk zugeordnet? Dann ist es einfach und man muss keine Ausnahmen festlegen (Ausnahme können umgebaute TFK für sonstige Aufgaben oder so sein). Notfalls leg in der HM ein Gewerk an. Bespielname: "Alarmsensor".

            Pix

            1 Reply Last reply Reply Quote 0
            • B
              baluderbär last edited by

              @pix:

              Hallo,

              schön, dass es läuft.

              Sind die TFK alle einem Gewerk zugeordnet? Dann ist es einfach und man muss keine Ausnahmen festlegen (Ausnahme können umgebaute TFK für sonstige Aufgaben oder so sein). Notfalls leg in der HM ein Gewerk an. Bespielname: "Alarmsensor".

              Pix `
              Hallo Pix,

              Bisher verwende ich die TFK nur an Türen und Fenstern. Also kein "Fremdeinsatz". Alle TFK sind einem Gewerk zugeordnet.

              Gruß Martin

              Gesendet von iPhone mit Tapatalk

              1 Reply Last reply Reply Quote 0
              • T
                tempestas last edited by

                Suchfunktion nutzen, dann muss pix das nicht für dich machen.

                Er hat hier ein komplettes Skript gepostet.

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

                Support us

                ioBroker
                Community Adapters
                Donate

                729
                Online

                31.7k
                Users

                79.8k
                Topics

                1.3m
                Posts

                3
                6
                1091
                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