Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. [gelöst] Alarm Skript mit Timer

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    2.4k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    961

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

[gelöst] Alarm Skript mit Timer

Geplant Angeheftet Gesperrt Verschoben JavaScript
5 Beiträge 3 Kommentatoren 446 Aufrufe 2 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • X Offline
    X Offline
    xdelta
    schrieb am zuletzt editiert von xdelta
    #1

    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

    paul53P 1 Antwort Letzte Antwort
    0
    • X 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

      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von
      #2

      @xdelta
      Ändere besser Zeilen 6 bis 9 in

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

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      X 1 Antwort Letzte Antwort
      1
      • paul53P paul53

        @xdelta
        Ändere besser Zeilen 6 bis 9 in

        on(hmId, function(dp) { // triggert bei Wertänderung
            if (dp.state.val) {
        
        X Offline
        X Offline
        xdelta
        schrieb am zuletzt editiert von
        #3

        @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 Antwort Letzte Antwort
        0
        • X xdelta

          @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 Offline
          T Offline
          ticaki
          schrieb am zuletzt editiert von ticaki
          #4

          @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

          Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

          Spenden

          X 1 Antwort Letzte Antwort
          1
          • T 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 Offline
            X Offline
            xdelta
            schrieb am zuletzt editiert von xdelta
            #5

            @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 Antwort Letzte Antwort
            0
            Antworten
            • In einem neuen Thema antworten
            Anmelden zum Antworten
            • Älteste zuerst
            • Neuste zuerst
            • Meiste Stimmen


            Support us

            ioBroker
            Community Adapters
            Donate

            389

            Online

            32.6k

            Benutzer

            82.2k

            Themen

            1.3m

            Beiträge
            Community
            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
            ioBroker Community 2014-2025
            logo
            • Anmelden

            • Du hast noch kein Konto? Registrieren

            • Anmelden oder registrieren, um zu suchen
            • Erster Beitrag
              Letzter Beitrag
            0
            • Home
            • Aktuell
            • Tags
            • Ungelesen 0
            • Kategorien
            • Unreplied
            • Beliebt
            • GitHub
            • Docu
            • Hilfe