Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [gelöst] Alarm Skript mit Timer

    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

    [gelöst] Alarm Skript mit Timer

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

      Hi,
      ich versuche mich gerade an einem Alarm Script für Türen, was mir nach Ablauf des Timers eine Mail senden soll (egal wie lange die Tür auf bleibt). Wird die Tür wieder vorher wieder verschlossen, soll der Timer gestoppt werden. Letztendlich will ich ein Script pro Fenster-/Türkontakt einsetzen und nur die ersten 2 Zeilen ändern.

      Das Script verhält sich aber etwas "magisch" - mal sendet es mehrmals eine Mail in nicht nachvollziehbaren Abständen - obwohl keine erneute Änderung des dp.states, mal nur einmal (wie gewollt). Magisch halt 😉

      Habe ich hier irgendwo einen (Denk-)Fehler drin? Beissen sich evtl. identisch benannte timerVariablen in verschiedenen Skripten?

      var hmId = "hm-rpc.2.0000DBE99D0D53.1.STATE";
      var alarmTimerMinuten = 2;   
      
      var timeoutVar = null;
      
      on({id: hmId, change: "any"}, function(obj) {
          var status = getState(hmId).val;
      
          if (status === 1 || status === true) {
              timeoutVar = setTimeout(function() {
                  sendTo("email", "Alarm!");
                  timeoutVar = null;
              }, (alarmTimerMinuten*60000));    
          } 
          else if(timeoutVar) {
              clearTimeout(timeoutVar);
              timeoutVar = null;
          }
      
      });
      
      

      Grüße
      Kai

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

        @xdelta
        Ändere besser Zeilen 6 bis 9 in

        on(hmId, function(dp) { // triggert bei Wertänderung
            if (dp.state.val) {
        
        X 1 Reply Last reply Reply Quote 1
        • X
          xdelta @paul53 last edited by

          @paul53 said in Alarm Skript mit Timer:

          @xdelta
          Ändere besser Zeilen 6 bis 9 in

          on(hmId, function(dp) { // triggert bei Wertänderung
              if (dp.state.val) {
          

          Ok, vielen Dank Paul!

          Also so:

          
          var hmId = "hm-rpc.2.0000DBE99D0D53.1.STATE";
          var alarmTimerMinuten = 0.1; 
          var timeoutVar = null;
          
          on(hmId, function(dp) {
          
              if (dp.state.val === 1 || dp.state.val === true) { 
          
                  timeoutVar = setTimeout(function() {
                      sendTo("email", "Alarm - Testtür");
                      timeoutVar = null;
                  }, (alarmTimerMinuten*60000));    
          
              } 
              else if (timeoutVar) {
                  clearTimeout(timeoutVar);
                  timeoutVar = null;
              }
          
          });
          
          T 1 Reply Last reply Reply Quote 0
          • T
            ticaki Developer @xdelta last edited by ticaki

            @xdelta
            Ja, du hast auf any reagiert und das ist jede Änderung des Datenpunktes, auch wenn es nur der Zeitstempel ist.

            Dein Vorhaben sollte sich als einfacher herausstellen wenn du dich mit folgenden Begriffen vertraut machst

            selector, Aufzählungen, Funktionen

            Unter Aufzählungen eine Funktion hinzufügen die für Fenster offen steht. Dann die dortige id ohne enum.functions. dort eintragen wo ich online stehen habe und den DP in der Objektübersicht diese Funktion zu weisen.
            Bildschirmfoto 2023-08-08 um 20.17.07.png

            Nur ein Beispiel

            const devices = $('state(functions=online)')
            for (let d of devices) log(d)
            

            In deinem Fall wäre d dann das was in deinem Skript hmId ist

            X 1 Reply Last reply Reply Quote 1
            • X
              xdelta @ticaki last edited by xdelta

              @ticaki said in Alarm Skript mit Timer:

              @xdelta
              Ja, du hast auf any reagiert und das ist jede Änderung des Datenpunktes, auch wenn es nur der Zeitstempel ist.

              Ahh! Ich dachte mir schon so etwas in der Art, weil auf irgendetwas musste ja reagiert worden sein - wusste aber nicht, dass auch der TS dazu gehört usw.!
              Daher die "Magie" des Scripts 😉

              Wieder was gelernt - danke! Auch für die Hausaufgaben - werde ich mich mit befassen!

              vG
              Kai

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

              Support us

              ioBroker
              Community Adapters
              Donate

              941
              Online

              31.8k
              Users

              80.0k
              Topics

              1.3m
              Posts

              3
              5
              221
              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