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. Alarm Script mit ON/OFF einer Steckdose

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    15
    1
    621

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    1.9k

Alarm Script mit ON/OFF einer Steckdose

Geplant Angeheftet Gesperrt Verschoben JavaScript
4 Beiträge 2 Kommentatoren 378 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

    Folgende Thematik:

    Ich habe eine Netatmo Station, die in eine externe SQL-DB ihre Werte speichert, dank der Netatmo API. Gelegentlich kommt es aber vor, dass das Teil sich aufhängt oder was auch immer und keine Daten mehr sendet. Unglücklicherweise bekome ich das manchmal erst Stunden später mit und ärgere mich dann über fehlende Daten in der Datenbank.. ;)

    Nun lasse ich mir alle 2 Minuten mittels Node-Red den Zeitstempel des letzten DB Eintrages in einen Datenpunkt packen. Dieser wird mit meinem kleinen Script mit dem Zeitstempel der aktuellen Zeit verglichen. Wenn der Abstand zu groß ist, wird eine Email an mich versendet und die Tasmota Steckdose wo die Netatmo dran hängt, ausgeschaltet und 10 Sekunden später wieder angeschaltet.

    So weit so gut. Mein Problem ist aber, dass die Netatmo mitunter 10 Minuten später erst ihren ersten Datensatz ausspuckt. In dieser Zeit bekomme ich also mehrere Mails und die Netatmo wird mehrmals an und aus geschaltet und ist in einer Art Dauer-AN/AUS. Mein Script reagiert auf den von Node-Red geholten Timestamp...

    Wie kann man so eine Dauerschleife vermeiden? Muss ich mir einen zusätzlichen Datenpunkt einbauen, der so eine Art "Wartungsmodus" darstellt, welcher von dem Script vor Ablauf zuerst geprüft wird? Natürlich könnte ich auch die ganzen Zeiten so anpassen, dass das Script nicht mehrmals läuft, aber das klingt wenig elegant...

    Wie macht Ihr so etwas?

    
    const id_Netatmo_ts = 'node-red.0.Netatmo_LastEntry'; 
    const id_Netatmo_diff = 'node-red.0.Netatmo_LastEntry_Diff'; 
    
    on({id: id_Netatmo_ts, change: 'any'}, function (obj) {
        let ts_now = Math.round(new Date().getTime() / 1000)
        let ts_netatmo = getState(id_Netatmo_ts).val;
    
        let diff_minuten = Math.round(((ts_now - ts_netatmo) / 60));
        //console.log("Diffenrenz in Minuten: " + diff_minuten);
        setState(id_Netatmo_diff, diff_minuten, true);
    
        function wiederAN () {
           setState("sonoff.0.Tasmota-Netatmo.POWER",true);   
        }
        
        if (diff_minuten > 1) {
            setState("sonoff.0.Tasmota-Netatmo.POWER",false); 
            setTimeout(wiederAN, 10000); // 10 Sekunden
            
            sendTo("email", {
                to:      "blub@gmx.net",
                subject: "Alaaaarm",
                text:    "Letzter Netatmo Datensatz wurde vor " + diff_minuten + " Minuten in die Datenbank geschrieben. \n Neustart! \n"
            });
        };       
    });
    
    

    Grüße
    Kai

    mickymM 2 Antworten Letzte Antwort
    0
    • X xdelta

      Folgende Thematik:

      Ich habe eine Netatmo Station, die in eine externe SQL-DB ihre Werte speichert, dank der Netatmo API. Gelegentlich kommt es aber vor, dass das Teil sich aufhängt oder was auch immer und keine Daten mehr sendet. Unglücklicherweise bekome ich das manchmal erst Stunden später mit und ärgere mich dann über fehlende Daten in der Datenbank.. ;)

      Nun lasse ich mir alle 2 Minuten mittels Node-Red den Zeitstempel des letzten DB Eintrages in einen Datenpunkt packen. Dieser wird mit meinem kleinen Script mit dem Zeitstempel der aktuellen Zeit verglichen. Wenn der Abstand zu groß ist, wird eine Email an mich versendet und die Tasmota Steckdose wo die Netatmo dran hängt, ausgeschaltet und 10 Sekunden später wieder angeschaltet.

      So weit so gut. Mein Problem ist aber, dass die Netatmo mitunter 10 Minuten später erst ihren ersten Datensatz ausspuckt. In dieser Zeit bekomme ich also mehrere Mails und die Netatmo wird mehrmals an und aus geschaltet und ist in einer Art Dauer-AN/AUS. Mein Script reagiert auf den von Node-Red geholten Timestamp...

      Wie kann man so eine Dauerschleife vermeiden? Muss ich mir einen zusätzlichen Datenpunkt einbauen, der so eine Art "Wartungsmodus" darstellt, welcher von dem Script vor Ablauf zuerst geprüft wird? Natürlich könnte ich auch die ganzen Zeiten so anpassen, dass das Script nicht mehrmals läuft, aber das klingt wenig elegant...

      Wie macht Ihr so etwas?

      
      const id_Netatmo_ts = 'node-red.0.Netatmo_LastEntry'; 
      const id_Netatmo_diff = 'node-red.0.Netatmo_LastEntry_Diff'; 
      
      on({id: id_Netatmo_ts, change: 'any'}, function (obj) {
          let ts_now = Math.round(new Date().getTime() / 1000)
          let ts_netatmo = getState(id_Netatmo_ts).val;
      
          let diff_minuten = Math.round(((ts_now - ts_netatmo) / 60));
          //console.log("Diffenrenz in Minuten: " + diff_minuten);
          setState(id_Netatmo_diff, diff_minuten, true);
      
          function wiederAN () {
             setState("sonoff.0.Tasmota-Netatmo.POWER",true);   
          }
          
          if (diff_minuten > 1) {
              setState("sonoff.0.Tasmota-Netatmo.POWER",false); 
              setTimeout(wiederAN, 10000); // 10 Sekunden
              
              sendTo("email", {
                  to:      "blub@gmx.net",
                  subject: "Alaaaarm",
                  text:    "Letzter Netatmo Datensatz wurde vor " + diff_minuten + " Minuten in die Datenbank geschrieben. \n Neustart! \n"
              });
          };       
      });
      
      

      Grüße
      Kai

      mickymM Online
      mickymM Online
      mickym
      Most Active
      schrieb am zuletzt editiert von mickym
      #2

      @xdelta Ich überprüfe Inaktivität meist super simpel mit der trigger Node. Da brauch ich keine Zeitstempel und nichts. Die trigger Node ist so konfiguriert, dass sei am Anfang also bei der 1. Nachricht "true" rausschickt (kann man auch sein lassen), dann nach der Zeitspanne die ich überwachen will "false", falls keine neue Nachricht kommt. Damit gibts keine Schleifen und der ganze Mechanismus wird erst dann angetriggert, wenn einmal eine Nachricht angekommen ist.

      In Deinem Fall würde also nach 2 Minuten eine Mail getriggert, wenn das der zu überwachende Zeitraum ist. Sobald dann aber keine Aktivität mehr stattfindet wird auch nichts mehr getriggert.

      So das ist alles:

      3882845b-b6d2-4f4e-abbd-437327bd105c-image.png

      Der Inaktivitätszeitraum, ab dem Alarm geschlagen wird, ist natürlich beliebig. ;)

      Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

      1 Antwort Letzte Antwort
      0
      • X xdelta

        Folgende Thematik:

        Ich habe eine Netatmo Station, die in eine externe SQL-DB ihre Werte speichert, dank der Netatmo API. Gelegentlich kommt es aber vor, dass das Teil sich aufhängt oder was auch immer und keine Daten mehr sendet. Unglücklicherweise bekome ich das manchmal erst Stunden später mit und ärgere mich dann über fehlende Daten in der Datenbank.. ;)

        Nun lasse ich mir alle 2 Minuten mittels Node-Red den Zeitstempel des letzten DB Eintrages in einen Datenpunkt packen. Dieser wird mit meinem kleinen Script mit dem Zeitstempel der aktuellen Zeit verglichen. Wenn der Abstand zu groß ist, wird eine Email an mich versendet und die Tasmota Steckdose wo die Netatmo dran hängt, ausgeschaltet und 10 Sekunden später wieder angeschaltet.

        So weit so gut. Mein Problem ist aber, dass die Netatmo mitunter 10 Minuten später erst ihren ersten Datensatz ausspuckt. In dieser Zeit bekomme ich also mehrere Mails und die Netatmo wird mehrmals an und aus geschaltet und ist in einer Art Dauer-AN/AUS. Mein Script reagiert auf den von Node-Red geholten Timestamp...

        Wie kann man so eine Dauerschleife vermeiden? Muss ich mir einen zusätzlichen Datenpunkt einbauen, der so eine Art "Wartungsmodus" darstellt, welcher von dem Script vor Ablauf zuerst geprüft wird? Natürlich könnte ich auch die ganzen Zeiten so anpassen, dass das Script nicht mehrmals läuft, aber das klingt wenig elegant...

        Wie macht Ihr so etwas?

        
        const id_Netatmo_ts = 'node-red.0.Netatmo_LastEntry'; 
        const id_Netatmo_diff = 'node-red.0.Netatmo_LastEntry_Diff'; 
        
        on({id: id_Netatmo_ts, change: 'any'}, function (obj) {
            let ts_now = Math.round(new Date().getTime() / 1000)
            let ts_netatmo = getState(id_Netatmo_ts).val;
        
            let diff_minuten = Math.round(((ts_now - ts_netatmo) / 60));
            //console.log("Diffenrenz in Minuten: " + diff_minuten);
            setState(id_Netatmo_diff, diff_minuten, true);
        
            function wiederAN () {
               setState("sonoff.0.Tasmota-Netatmo.POWER",true);   
            }
            
            if (diff_minuten > 1) {
                setState("sonoff.0.Tasmota-Netatmo.POWER",false); 
                setTimeout(wiederAN, 10000); // 10 Sekunden
                
                sendTo("email", {
                    to:      "blub@gmx.net",
                    subject: "Alaaaarm",
                    text:    "Letzter Netatmo Datensatz wurde vor " + diff_minuten + " Minuten in die Datenbank geschrieben. \n Neustart! \n"
                });
            };       
        });
        
        

        Grüße
        Kai

        mickymM Online
        mickymM Online
        mickym
        Most Active
        schrieb am zuletzt editiert von mickym
        #3

        Ich bin davon ausgegangen, dass Netatmo auch direkt was in einen Datenpunkt (node-red.0.Netatmo_LastEntry) schreibt - deshalb die Idee mit dem Trigger.
        Wenn ich Dein Skript richtig interpretiere, wird dies ja angetriggert, wenn sich in dem Datenpunkt was ändert. Und wie gesagt, das kannst ja dann auch mit einer iobroker IN node überwachen.

        Theoretisch kannst Du den Trigger auch umdrehen. In dem Fall würde Deine Funktion immer wegen Zeitüberschreitung Alarm schlagen. Der Trigger sendet nur einmal eine Nachricht zu Beginn/Start und würde erst wieder zurückgesetzt, wenn keine Nachrichten mehr kommen (also keine Zeitüberschreitungen mehr stattfinden). Ist beides möglich.

        Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

        X 1 Antwort Letzte Antwort
        0
        • mickymM mickym

          Ich bin davon ausgegangen, dass Netatmo auch direkt was in einen Datenpunkt (node-red.0.Netatmo_LastEntry) schreibt - deshalb die Idee mit dem Trigger.
          Wenn ich Dein Skript richtig interpretiere, wird dies ja angetriggert, wenn sich in dem Datenpunkt was ändert. Und wie gesagt, das kannst ja dann auch mit einer iobroker IN node überwachen.

          Theoretisch kannst Du den Trigger auch umdrehen. In dem Fall würde Deine Funktion immer wegen Zeitüberschreitung Alarm schlagen. Der Trigger sendet nur einmal eine Nachricht zu Beginn/Start und würde erst wieder zurückgesetzt, wenn keine Nachrichten mehr kommen (also keine Zeitüberschreitungen mehr stattfinden). Ist beides möglich.

          X Offline
          X Offline
          xdelta
          schrieb am zuletzt editiert von
          #4

          @mickym

          Besten Dank für den Ansatz! Das node sehe ich mir direkt mal an. Klingt auf jeden Fall deutlich eleganter als immer mehr Variablen hin und her zu setzen... ;)

          Grüße
          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

          727

          Online

          32.6k

          Benutzer

          81.9k

          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