Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • 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. Blockly
  5. Telegram wenn Bedingung eine bestimmte Zeit wahr

NEWS

  • Neuer ioBroker-Blog online: Monatsrückblick März/April 2026
    BluefoxB
    Bluefox
    8
    1
    371

  • Verwendung von KI bitte immer deutlich kennzeichnen
    HomoranH
    Homoran
    10
    1
    327

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    946

Telegram wenn Bedingung eine bestimmte Zeit wahr

Geplant Angeheftet Gesperrt Verschoben Blockly
10 Beiträge 4 Kommentatoren 428 Aufrufe 3 Beobachtet
  • Ä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.
  • M Offline
    M Offline
    markusn78
    schrieb am zuletzt editiert von markusn78
    #1

    Hallo zusammen,
    ich habe da ein kleines Verständnissproblem bei den Verzögerungen:

    Folgende Situation:
    Ich messe per Steckdose die Leistung meiner Spülmaschine, wenn die >10W ist dann setze ich mir
    eine Variable: Spuelmaschine_aktiv
    Nun möchte ich, dass wenn die Spülmaschine 10 Minuten <5W ist, mir eine Telegramnachricht geschickt wird.

    Der einfache Part ist der mit <5W, nun meine Frage: Wie setze ich das mit den 10 Minuten um?
    Mein Ansatz ist folgender, ich bin mir aber nicht sicher ob das so richtig ist:

    var Spuelmaschine_aktiv, timeout;
    
    
    Spuelmaschine_aktiv = false;
    on({id: 'alias.0.Steckdosen.Spuelmaschine.ENERGY_Power', change: "ne"}, async function (obj) {
      var value = obj.state.val;
      var oldValue = obj.oldState.val;
      if ((obj.state ? obj.state.val : "") > 10 && Spuelmaschine_aktiv == false) {
        Spuelmaschine_aktiv = true;
      } else if ((obj.state ? obj.state.val : "") < 5 && Spuelmaschine_aktiv == true) {
        timeout = setTimeout(async function () {
          sendTo("telegram", "send", {
              text: 'Die Spülmaschine ist fertig!'
          });
          Spuelmaschine_aktiv = false;
        }, 300000);
      } else if ((obj.state ? obj.state.val : "") >= 5) {
        (function () {if (timeout) {clearTimeout(timeout); timeout = null;}})();
      }
    });
    

    Screenshot 2021-12-14 155612.png

    Mein Problem aktuell ist, dass ich Mehrfachmeldungen bekomme, und da könnten es halt zwei Verursacher sein:

    1. Die Timeoutzeit ist zu kurz gewählt
    2. Ein Denkfehler im Script

    Vielleicht habt ihr ja eine Idee?

    B HomoranH 2 Antworten Letzte Antwort
    0
    • M markusn78

      Hallo zusammen,
      ich habe da ein kleines Verständnissproblem bei den Verzögerungen:

      Folgende Situation:
      Ich messe per Steckdose die Leistung meiner Spülmaschine, wenn die >10W ist dann setze ich mir
      eine Variable: Spuelmaschine_aktiv
      Nun möchte ich, dass wenn die Spülmaschine 10 Minuten <5W ist, mir eine Telegramnachricht geschickt wird.

      Der einfache Part ist der mit <5W, nun meine Frage: Wie setze ich das mit den 10 Minuten um?
      Mein Ansatz ist folgender, ich bin mir aber nicht sicher ob das so richtig ist:

      var Spuelmaschine_aktiv, timeout;
      
      
      Spuelmaschine_aktiv = false;
      on({id: 'alias.0.Steckdosen.Spuelmaschine.ENERGY_Power', change: "ne"}, async function (obj) {
        var value = obj.state.val;
        var oldValue = obj.oldState.val;
        if ((obj.state ? obj.state.val : "") > 10 && Spuelmaschine_aktiv == false) {
          Spuelmaschine_aktiv = true;
        } else if ((obj.state ? obj.state.val : "") < 5 && Spuelmaschine_aktiv == true) {
          timeout = setTimeout(async function () {
            sendTo("telegram", "send", {
                text: 'Die Spülmaschine ist fertig!'
            });
            Spuelmaschine_aktiv = false;
          }, 300000);
        } else if ((obj.state ? obj.state.val : "") >= 5) {
          (function () {if (timeout) {clearTimeout(timeout); timeout = null;}})();
        }
      });
      

      Screenshot 2021-12-14 155612.png

      Mein Problem aktuell ist, dass ich Mehrfachmeldungen bekomme, und da könnten es halt zwei Verursacher sein:

      1. Die Timeoutzeit ist zu kurz gewählt
      2. Ein Denkfehler im Script

      Vielleicht habt ihr ja eine Idee?

      B Offline
      B Offline
      badsnoopy667
      schrieb am zuletzt editiert von badsnoopy667
      #2

      @markusn78
      Ich glaube Du bekommst aktuell immer eine Nachricht, wenn der Wert unter 5W fällt...nur halt mit 5 Minuten Verzögerung.
      Nimm mal den telegram-Block aus dem timeout-Block raus und pack es separat mit einer if-Abfrage auf spuelmaschine aktiv = false, dann telegram senden (außerhalt deiner if-Abfragen). In dem timeout Block musst du dann nur noch das spuelmaschine = false setzen drinn lassen. Und ich würde innerhalb des timeout-Blocks nochmal abfragen, ob der Wert immer noch <5W ist und danach erst spuelmaschine auf false setzen.
      So kriegst Du nur eine Nachricht, wenn die Spuelmaschine wirklich fertig ist und nciht jedesmal wenn der Wert unter 5W fällt.

      M 1 Antwort Letzte Antwort
      0
      • B badsnoopy667

        @markusn78
        Ich glaube Du bekommst aktuell immer eine Nachricht, wenn der Wert unter 5W fällt...nur halt mit 5 Minuten Verzögerung.
        Nimm mal den telegram-Block aus dem timeout-Block raus und pack es separat mit einer if-Abfrage auf spuelmaschine aktiv = false, dann telegram senden (außerhalt deiner if-Abfragen). In dem timeout Block musst du dann nur noch das spuelmaschine = false setzen drinn lassen. Und ich würde innerhalb des timeout-Blocks nochmal abfragen, ob der Wert immer noch <5W ist und danach erst spuelmaschine auf false setzen.
        So kriegst Du nur eine Nachricht, wenn die Spuelmaschine wirklich fertig ist und nciht jedesmal wenn der Wert unter 5W fällt.

        M Offline
        M Offline
        markusn78
        schrieb am zuletzt editiert von
        #3

        @badsnoopy667
        Ich dachte eigentlich der else if block, der auf >5 abfragt, würde den Timeout wieder löschen, und er würde dann wieder von neuem starten, solange bis halt irgendwann der Time-out mal abgelaufen ist?

        B 2 Antworten Letzte Antwort
        0
        • M markusn78

          @badsnoopy667
          Ich dachte eigentlich der else if block, der auf >5 abfragt, würde den Timeout wieder löschen, und er würde dann wieder von neuem starten, solange bis halt irgendwann der Time-out mal abgelaufen ist?

          B Offline
          B Offline
          badsnoopy667
          schrieb am zuletzt editiert von
          #4

          @markusn78
          Ja, da kann ich jetzt gar nicht so viel gegen sagen... das sehe ich auch so... sorry, hab den letzten Teil irgendwie "übersehen". ;)

          1 Antwort Letzte Antwort
          0
          • M markusn78

            @badsnoopy667
            Ich dachte eigentlich der else if block, der auf >5 abfragt, würde den Timeout wieder löschen, und er würde dann wieder von neuem starten, solange bis halt irgendwann der Time-out mal abgelaufen ist?

            B Offline
            B Offline
            badsnoopy667
            schrieb am zuletzt editiert von
            #5

            @markusn78 Achso, kannst Du das Blockly mal als Blockly-Export posten? Du hast nur das Javascrip gepostet, das kann man nicht wieder importieren. Würd mal gerne was testen!

            1 Antwort Letzte Antwort
            0
            • M markusn78

              Hallo zusammen,
              ich habe da ein kleines Verständnissproblem bei den Verzögerungen:

              Folgende Situation:
              Ich messe per Steckdose die Leistung meiner Spülmaschine, wenn die >10W ist dann setze ich mir
              eine Variable: Spuelmaschine_aktiv
              Nun möchte ich, dass wenn die Spülmaschine 10 Minuten <5W ist, mir eine Telegramnachricht geschickt wird.

              Der einfache Part ist der mit <5W, nun meine Frage: Wie setze ich das mit den 10 Minuten um?
              Mein Ansatz ist folgender, ich bin mir aber nicht sicher ob das so richtig ist:

              var Spuelmaschine_aktiv, timeout;
              
              
              Spuelmaschine_aktiv = false;
              on({id: 'alias.0.Steckdosen.Spuelmaschine.ENERGY_Power', change: "ne"}, async function (obj) {
                var value = obj.state.val;
                var oldValue = obj.oldState.val;
                if ((obj.state ? obj.state.val : "") > 10 && Spuelmaschine_aktiv == false) {
                  Spuelmaschine_aktiv = true;
                } else if ((obj.state ? obj.state.val : "") < 5 && Spuelmaschine_aktiv == true) {
                  timeout = setTimeout(async function () {
                    sendTo("telegram", "send", {
                        text: 'Die Spülmaschine ist fertig!'
                    });
                    Spuelmaschine_aktiv = false;
                  }, 300000);
                } else if ((obj.state ? obj.state.val : "") >= 5) {
                  (function () {if (timeout) {clearTimeout(timeout); timeout = null;}})();
                }
              });
              

              Screenshot 2021-12-14 155612.png

              Mein Problem aktuell ist, dass ich Mehrfachmeldungen bekomme, und da könnten es halt zwei Verursacher sein:

              1. Die Timeoutzeit ist zu kurz gewählt
              2. Ein Denkfehler im Script

              Vielleicht habt ihr ja eine Idee?

              HomoranH Nicht stören
              HomoranH Nicht stören
              Homoran
              Global Moderator Administrators
              schrieb am zuletzt editiert von
              #6

              @markusn78 du hast ein ganz großes Problem:

              Dein Timeout kann mehrfach gestartet werden, ohne dass der Timeout vorher beendet wird.
              Danach kann der Timeout nicht mehr gestoppt werden, weil er mehrfach läuft

              Bei zwei (und mehr) unterschiedlichen Messungen <5 kommt es jedesmal zum Start des Timeouts

              kein Support per PN! - Fragen im Forum stellen -
              Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
              Das Forum freut sich über eine Spende. Benutzt dazu den Spendenbutton oben rechts. Danke!
              der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

              M 1 Antwort Letzte Antwort
              0
              • HomoranH Homoran

                @markusn78 du hast ein ganz großes Problem:

                Dein Timeout kann mehrfach gestartet werden, ohne dass der Timeout vorher beendet wird.
                Danach kann der Timeout nicht mehr gestoppt werden, weil er mehrfach läuft

                Bei zwei (und mehr) unterschiedlichen Messungen <5 kommt es jedesmal zum Start des Timeouts

                M Offline
                M Offline
                markusn78
                schrieb am zuletzt editiert von
                #7

                @homoran
                Danke, das ist auf jedenfall schon mal richtig.
                Ich habe das nun wie folgt geändert:

                var Spuelmaschine_aktiv, Timeout_laeuft, timeout;
                
                
                Spuelmaschine_aktiv = false;
                on({id: 'alias.0.Steckdosen.Spuelmaschine.ENERGY_Power', change: "ne"}, async function (obj) {
                  var value = obj.state.val;
                  var oldValue = obj.oldState.val;
                  if ((obj.state ? obj.state.val : "") > 10 && Spuelmaschine_aktiv == false) {
                    Spuelmaschine_aktiv = true;
                  } else if ((obj.state ? obj.state.val : "") < 5 && Spuelmaschine_aktiv == true && Timeout_laeuft == false) {
                    Timeout_laeuft = true;
                    timeout = setTimeout(async function () {
                      sendTo("telegram", "send", {
                          text: 'Die Spülmaschine ist fertig!'
                      });
                      Spuelmaschine_aktiv = false;
                    }, 300000);
                  } else if ((obj.state ? obj.state.val : "") >= 5 && Timeout_laeuft == true) {
                    (function () {if (timeout) {clearTimeout(timeout); timeout = null;}})();
                    Timeout_laeuft = false;
                  }
                });
                

                Screenshot 2021-12-14 164432.png

                Damit startet der Timeout nur einmalig.

                Mal schauen ob es dass jetzt war... erstmal die Spülmaschine voll bekommen :)

                HomoranH 1 Antwort Letzte Antwort
                0
                • M markusn78

                  @homoran
                  Danke, das ist auf jedenfall schon mal richtig.
                  Ich habe das nun wie folgt geändert:

                  var Spuelmaschine_aktiv, Timeout_laeuft, timeout;
                  
                  
                  Spuelmaschine_aktiv = false;
                  on({id: 'alias.0.Steckdosen.Spuelmaschine.ENERGY_Power', change: "ne"}, async function (obj) {
                    var value = obj.state.val;
                    var oldValue = obj.oldState.val;
                    if ((obj.state ? obj.state.val : "") > 10 && Spuelmaschine_aktiv == false) {
                      Spuelmaschine_aktiv = true;
                    } else if ((obj.state ? obj.state.val : "") < 5 && Spuelmaschine_aktiv == true && Timeout_laeuft == false) {
                      Timeout_laeuft = true;
                      timeout = setTimeout(async function () {
                        sendTo("telegram", "send", {
                            text: 'Die Spülmaschine ist fertig!'
                        });
                        Spuelmaschine_aktiv = false;
                      }, 300000);
                    } else if ((obj.state ? obj.state.val : "") >= 5 && Timeout_laeuft == true) {
                      (function () {if (timeout) {clearTimeout(timeout); timeout = null;}})();
                      Timeout_laeuft = false;
                    }
                  });
                  

                  Screenshot 2021-12-14 164432.png

                  Damit startet der Timeout nur einmalig.

                  Mal schauen ob es dass jetzt war... erstmal die Spülmaschine voll bekommen :)

                  HomoranH Nicht stören
                  HomoranH Nicht stören
                  Homoran
                  Global Moderator Administrators
                  schrieb am zuletzt editiert von
                  #8

                  @markusn78 sagte in Telegram wenn Bedingung eine bestimmte Zeit wahr:

                  Mal schauen ob es dass jetzt war... erstmal die Spülmaschine voll bekommen

                  sieht gut aus

                  kein Support per PN! - Fragen im Forum stellen -
                  Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
                  Das Forum freut sich über eine Spende. Benutzt dazu den Spendenbutton oben rechts. Danke!
                  der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                  paul53P 1 Antwort Letzte Antwort
                  0
                  • HomoranH Homoran

                    @markusn78 sagte in Telegram wenn Bedingung eine bestimmte Zeit wahr:

                    Mal schauen ob es dass jetzt war... erstmal die Spülmaschine voll bekommen

                    sieht gut aus

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

                    @homoran sagte: sieht gut aus

                    Aber sehr kompliziert. Es sollte auch so funktionieren:

                    Bild_2021-12-14_165231.png

                    Anmerkung: Wichtig ist

                    else if not timer-variable
                    

                    um den Mehrfachstart des Timers zu verhindern.

                    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

                    HomoranH 1 Antwort Letzte Antwort
                    1
                    • paul53P paul53

                      @homoran sagte: sieht gut aus

                      Aber sehr kompliziert. Es sollte auch so funktionieren:

                      Bild_2021-12-14_165231.png

                      Anmerkung: Wichtig ist

                      else if not timer-variable
                      

                      um den Mehrfachstart des Timers zu verhindern.

                      HomoranH Nicht stören
                      HomoranH Nicht stören
                      Homoran
                      Global Moderator Administrators
                      schrieb am zuletzt editiert von
                      #10

                      @paul53 sagte:

                      Aber sehr kompliziert.

                      richtig. Aber ich wollte erst einmal nicht zu viel auf einmal ändern.

                      @paul53 sagte in Telegram wenn Bedingung eine bestimmte Zeit wahr:

                      Es sollte auch so funktionieren:

                      Ist das eine Witz? :-)

                      kein Support per PN! - Fragen im Forum stellen -
                      Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
                      Das Forum freut sich über eine Spende. Benutzt dazu den Spendenbutton oben rechts. Danke!
                      der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                      1 Antwort Letzte Antwort
                      0

                      Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

                      Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

                      Mit deinem Input könnte dieser Beitrag noch besser werden 💗

                      Registrieren Anmelden
                      Antworten
                      • In einem neuen Thema antworten
                      Anmelden zum Antworten
                      • Älteste zuerst
                      • Neuste zuerst
                      • Meiste Stimmen


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      363

                      Online

                      32.8k

                      Benutzer

                      82.8k

                      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