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. Waschmaschine settimeout funktioniert nicht

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.8k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.2k

Waschmaschine settimeout funktioniert nicht

Geplant Angeheftet Gesperrt Verschoben JavaScript
9 Beiträge 3 Kommentatoren 249 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.
  • H Offline
    H Offline
    hydro21
    schrieb am zuletzt editiert von
    #1

    Hallo, ich hatte gedacht ich schreibe eine ganz einfaches Javascript Programm. Ziel war es das ich eine Nachricht bekomme wenn die Waschmaschine gestartet wird und eine weitere Nachricht wenn die Waschmaschine beendet ist.

    Das wollte ich so lösen das wenn die Leitsung größer als 60 ist wird die Funktion FUWMistan ausgeführt.
    Wenn die Leistung kleiner als 45 ist wird ein Timer gestartet von 300000 msec = 5 Minuten
    Wenn der Timer abgelaufen ist soll dann die Funktion FUWMistaus ausgeführt werden.
    Da die Waschmaschine immer wieder Phasen hat in dem sie wenig Strom verbraucht dann aber wieder viel Strom verbraucht, möchte ich den Timer wieder löschen wenn die Leistung größer 45 Watt ist.

    Aber es funktiniert nicht zuverlässig, obwohl der Timer eigentlich wieder gelöscht sein sollte bekomme ich trotzdem die Meldung das die Funktion FUWMistaus ausgeführt wurde. Was mache ich hier falsch?

    Für Hilfe wäre ich dankbar.
    Gruß Ralf

    var TimeWMan, WMistan;
    
    on({ id: [].concat(['shelly.1.SHPLG2-1#083A8DF43AE5#1.Relay0.Power']), change: 'ne' }, async (obj) => {
      let value = obj.state.val;
      let oldValue = obj.oldState.val;
      
      WMistan = getState('0_userdata.0.Zustand.Waschmaschine_ist_an').val
      
      if (value > 60 && WMistan == false ) {
          FUWMistan();
      }  
    
      if (value >= 45) {   
         if (TimeWMan) {
             clearTimeout(TimeWMan); 
             TimeWMan = null;
         };
      };
     
        if (value < 45) {
            TimeWMan = setTimeout(async () =>   { //Verzögerungszeit von 5 Minute
            TimeWMan = null;
                FUWMistaus();
            },300000);
        }
    });
    
    function FUWMistan(){
        setState('0_userdata.0.Zustand.Waschmaschine_ist_an', true);
        console.log('WM### FUWMistan Waschmaschine ist gestartet');
    }
    
    function FUWMistaus(){
        setState('0_userdata.0.Zustand.Waschmaschine_ist_an', false);
        console.log('WM### FUWMistaus Waschmaschine wurde gestoppt')
    }
    
    
    
    paul53P 1 Antwort Letzte Antwort
    0
    • H hydro21

      Hallo, ich hatte gedacht ich schreibe eine ganz einfaches Javascript Programm. Ziel war es das ich eine Nachricht bekomme wenn die Waschmaschine gestartet wird und eine weitere Nachricht wenn die Waschmaschine beendet ist.

      Das wollte ich so lösen das wenn die Leitsung größer als 60 ist wird die Funktion FUWMistan ausgeführt.
      Wenn die Leistung kleiner als 45 ist wird ein Timer gestartet von 300000 msec = 5 Minuten
      Wenn der Timer abgelaufen ist soll dann die Funktion FUWMistaus ausgeführt werden.
      Da die Waschmaschine immer wieder Phasen hat in dem sie wenig Strom verbraucht dann aber wieder viel Strom verbraucht, möchte ich den Timer wieder löschen wenn die Leistung größer 45 Watt ist.

      Aber es funktiniert nicht zuverlässig, obwohl der Timer eigentlich wieder gelöscht sein sollte bekomme ich trotzdem die Meldung das die Funktion FUWMistaus ausgeführt wurde. Was mache ich hier falsch?

      Für Hilfe wäre ich dankbar.
      Gruß Ralf

      var TimeWMan, WMistan;
      
      on({ id: [].concat(['shelly.1.SHPLG2-1#083A8DF43AE5#1.Relay0.Power']), change: 'ne' }, async (obj) => {
        let value = obj.state.val;
        let oldValue = obj.oldState.val;
        
        WMistan = getState('0_userdata.0.Zustand.Waschmaschine_ist_an').val
        
        if (value > 60 && WMistan == false ) {
            FUWMistan();
        }  
      
        if (value >= 45) {   
           if (TimeWMan) {
               clearTimeout(TimeWMan); 
               TimeWMan = null;
           };
        };
       
          if (value < 45) {
              TimeWMan = setTimeout(async () =>   { //Verzögerungszeit von 5 Minute
              TimeWMan = null;
                  FUWMistaus();
              },300000);
          }
      });
      
      function FUWMistan(){
          setState('0_userdata.0.Zustand.Waschmaschine_ist_an', true);
          console.log('WM### FUWMistan Waschmaschine ist gestartet');
      }
      
      function FUWMistaus(){
          setState('0_userdata.0.Zustand.Waschmaschine_ist_an', false);
          console.log('WM### FUWMistaus Waschmaschine wurde gestoppt')
      }
      
      
      
      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von
      #2

      @hydro21
      Ändere mal Zeilen 18 bis 20 in

        } else if (oldValue >= 45) {
      

      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

      H 1 Antwort Letzte Antwort
      0
      • paul53P paul53

        @hydro21
        Ändere mal Zeilen 18 bis 20 in

          } else if (oldValue >= 45) {
        
        H Offline
        H Offline
        hydro21
        schrieb am zuletzt editiert von
        #3

        @paul53

        Meinst du so?

          if (value >= 45) {   
             if (TimeWMan) {
                 clearTimeout(TimeWMan); 
                 TimeWMan = null;
             };
          
          } else if (oldValue >= 45) { 
         };
        
        paul53P 1 Antwort Letzte Antwort
        0
        • H hydro21

          @paul53

          Meinst du so?

            if (value >= 45) {   
               if (TimeWMan) {
                   clearTimeout(TimeWMan); 
                   TimeWMan = null;
               };
            
            } else if (oldValue >= 45) { 
           };
          
          paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von paul53
          #4

          @hydro21 sagte: Meinst du so?

          Ja.

            if (value >= 45) {   
               if (TimeWMan) {
                   clearTimeout(TimeWMan); 
                   TimeWMan = null;
               }
            } else if (oldValue >= 45) { 
               TimeWMan = setTimeout(FUWMistaus, 300000); //Verzögerungszeit von 5 Minuten
            }
          });
          

          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

          1 Antwort Letzte Antwort
          0
          • H Offline
            H Offline
            hydro21
            schrieb am zuletzt editiert von
            #5

            @paul53 said in Waschmaschine settimeout funktioniert nicht:
            Ich habe es jetzt einmal so implementiert. Mal sehen ob es beim nächsten mal funktioniert. Was mir nicht klar ist warum du den oldvalue nimmst und nicht den value?

            Was ist da der Hintergrund?

            if (value >= 45) {
            if (TimeWMan) {
            clearTimeout(TimeWMan);
            TimeWMan = null;
            }
            } else if (oldValue >= 45) {
            TimeWMan = setTimeout(FUWMistaus, 300000); //Verzögerungszeit von 5 Minuten
            }
            });

            paul53P 1 Antwort Letzte Antwort
            0
            • H hydro21

              @paul53 said in Waschmaschine settimeout funktioniert nicht:
              Ich habe es jetzt einmal so implementiert. Mal sehen ob es beim nächsten mal funktioniert. Was mir nicht klar ist warum du den oldvalue nimmst und nicht den value?

              Was ist da der Hintergrund?

              if (value >= 45) {
              if (TimeWMan) {
              clearTimeout(TimeWMan);
              TimeWMan = null;
              }
              } else if (oldValue >= 45) {
              TimeWMan = setTimeout(FUWMistaus, 300000); //Verzögerungszeit von 5 Minuten
              }
              });

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

              @hydro21 sagte: Was ist da der Hintergrund?

              Wenn man nur value prüft, werden Timeouts bei jedem Trigger mit Wert < 45 gestartet. Sie lassen sich dann nicht mehr stoppen.
              Mit der zusätzlichen Prüfung von oldValue wird nur ein Timeout beim erstmaligen Unterschreiten von 45 gestartet.

              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

              H 1 Antwort Letzte Antwort
              0
              • paul53P paul53

                @hydro21 sagte: Was ist da der Hintergrund?

                Wenn man nur value prüft, werden Timeouts bei jedem Trigger mit Wert < 45 gestartet. Sie lassen sich dann nicht mehr stoppen.
                Mit der zusätzlichen Prüfung von oldValue wird nur ein Timeout beim erstmaligen Unterschreiten von 45 gestartet.

                H Offline
                H Offline
                hydro21
                schrieb am zuletzt editiert von
                #7

                @paul53
                Anscheinend funktioniert das.

                Du hast geschrieben "Sie lassen sich dann nicht mehr stoppen" Warum ist das so?

                Könnte man stattdessen auch in der If Abfrage einbauen das nur ein Timer gestartet wird wenn der Wert unter 45 ist und noch kein Timer gestartet ist? Also die Variable TimeWMan auf nicht null überprüfen?

                Sollte das auch funktionieren, oder kann man die Variable nicht abfragen?

                Gruß Ralf

                CodierknechtC paul53P 2 Antworten Letzte Antwort
                0
                • H hydro21

                  @paul53
                  Anscheinend funktioniert das.

                  Du hast geschrieben "Sie lassen sich dann nicht mehr stoppen" Warum ist das so?

                  Könnte man stattdessen auch in der If Abfrage einbauen das nur ein Timer gestartet wird wenn der Wert unter 45 ist und noch kein Timer gestartet ist? Also die Variable TimeWMan auf nicht null überprüfen?

                  Sollte das auch funktionieren, oder kann man die Variable nicht abfragen?

                  Gruß Ralf

                  CodierknechtC Offline
                  CodierknechtC Offline
                  Codierknecht
                  Developer Most Active
                  schrieb am zuletzt editiert von
                  #8

                  @hydro21 sagte in Waschmaschine settimeout funktioniert nicht:

                  Warum ist das so?

                  Weil die alle in der gleichen Variablen gespeichert werden.
                  Die enthält dann nur den letzten. Den kann man stoppen - alle anderen nicht mehr.

                  "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

                  Proxmox 9.1.1 LXC|8 GB|Core i7-6700
                  HmIP|ZigBee|Tasmota|Unifi
                  Zabbix Certified Specialist
                  Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

                  1 Antwort Letzte Antwort
                  0
                  • H hydro21

                    @paul53
                    Anscheinend funktioniert das.

                    Du hast geschrieben "Sie lassen sich dann nicht mehr stoppen" Warum ist das so?

                    Könnte man stattdessen auch in der If Abfrage einbauen das nur ein Timer gestartet wird wenn der Wert unter 45 ist und noch kein Timer gestartet ist? Also die Variable TimeWMan auf nicht null überprüfen?

                    Sollte das auch funktionieren, oder kann man die Variable nicht abfragen?

                    Gruß Ralf

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

                    @hydro21 sagte: Variable TimeWMan auf nicht null überprüfen?

                    Das kann man auch.

                      if (value >= 45) {   
                         if (TimeWMan) {
                             clearTimeout(TimeWMan); 
                             TimeWMan = null;
                         }
                      } else if (!TimeWMan) { 
                         TimeWMan = setTimeout(FUWMistaus, 300000); //Verzögerungszeit von 5 Minuten
                      }
                    });
                    

                    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

                    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

                    918

                    Online

                    32.4k

                    Benutzer

                    81.5k

                    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