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] setTimeout() um Toggeln von DP zu ignorieren

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.0k

[Gelöst] setTimeout() um Toggeln von DP zu ignorieren

Geplant Angeheftet Gesperrt Verschoben JavaScript
6 Beiträge 2 Kommentatoren 514 Aufrufe 1 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.
  • W Offline
    W Offline
    WurstDLX
    schrieb am zuletzt editiert von WurstDLX
    #1

    Hallo,

    ich bin eigentlich der Meinung, dass ich settimeout verstanden habe. Aber scheinbar doch nicht.
    Hintergrund ist folgender: Ich habe eine NUKI Bridge auf einem ESP86. Die Bridge startet (warum auch immer) alle 2h neu, vermutlich ist das Wifi zu instabil. Bei jedem "offline" oder "online" sende ich mir eine Nachricht. Nun möchte ich aber die kurzen Restarts nicht ständig signalisiert bekommen. Da ein Neustart ca. 1min dauert hatte ich folgende Überlegung:
    Wechselt der Status der Connection zur Bridge auf "offline", warte 1min und sende erst dann ein "Ja die Bridge ist offline", wenn sie immer noch nach Ablauf des Timers offline ist.

    Die settimeout Funktion setzt ja erst asynchron nach Ablauf des Timers ein, daher wusste ich nicht, welchen Wert denn eigentlich in obj.state.val verbleibt und muss vmtl neu Auslesen. Es kann ja nämlich sein, dass der Wert in der Zwischenzeit sich ändert bzw die Funktion aufgrund dessen wieder aufgerufen wird.

    on({id:idNUKIConnectionState, change:"ne"},function(obj){
        // check if old value was not connected for more than 1 minute
        var wait_ms=60*1000;              // wait ms to check for state
        if (!timeoutVar){                 //check if timer is set
            clearTimeout(timeoutVar);     //reset timer
            if (obj.state.val="offline"){
                //sendTo('telegram.0','Timerstart.');
                timeoutVar=setTimeout(function(){
                    // wait for possible restart
                    var newState=getState(idNUKIConnectionState).val;
                    if (newState="online"){
                        //sendTo('telegram.0','NUKI Bridge ist wieder '+ newState +' nach Ablauf des Timers.');
                        }
                    else{
                        sendTo('telegram.0','NUKI Bridge ist immer noch '+ newState +' nach Ablauf des Timers.');
                        }
                    timeoutVar=null;
                },wait_ms);
            }
            else{
                 // online w/o timer
                 sendTo('telegram.0','NUKI Bridge ist '+ obj.state.val +'.');
             }
        }
        else {
            //sendTo('telegram.0','NUKI Bridge wurde während des Timers '+ obj.state.val +'.');
        }
    });
    

    Also die Abfrage während des Timers funktionierte, aber als ich die Bridge ausgemacht habe und nie wieder an, kam keine Meldung. Kurz gesagt, ich würde gerne ein Toggeln für 1-2min ignorieren.

    Wie wäre das denn richtig?
    Danke euch im Voraus!

    paul53P 1 Antwort Letzte Antwort
    0
    • W WurstDLX

      Hallo,

      ich bin eigentlich der Meinung, dass ich settimeout verstanden habe. Aber scheinbar doch nicht.
      Hintergrund ist folgender: Ich habe eine NUKI Bridge auf einem ESP86. Die Bridge startet (warum auch immer) alle 2h neu, vermutlich ist das Wifi zu instabil. Bei jedem "offline" oder "online" sende ich mir eine Nachricht. Nun möchte ich aber die kurzen Restarts nicht ständig signalisiert bekommen. Da ein Neustart ca. 1min dauert hatte ich folgende Überlegung:
      Wechselt der Status der Connection zur Bridge auf "offline", warte 1min und sende erst dann ein "Ja die Bridge ist offline", wenn sie immer noch nach Ablauf des Timers offline ist.

      Die settimeout Funktion setzt ja erst asynchron nach Ablauf des Timers ein, daher wusste ich nicht, welchen Wert denn eigentlich in obj.state.val verbleibt und muss vmtl neu Auslesen. Es kann ja nämlich sein, dass der Wert in der Zwischenzeit sich ändert bzw die Funktion aufgrund dessen wieder aufgerufen wird.

      on({id:idNUKIConnectionState, change:"ne"},function(obj){
          // check if old value was not connected for more than 1 minute
          var wait_ms=60*1000;              // wait ms to check for state
          if (!timeoutVar){                 //check if timer is set
              clearTimeout(timeoutVar);     //reset timer
              if (obj.state.val="offline"){
                  //sendTo('telegram.0','Timerstart.');
                  timeoutVar=setTimeout(function(){
                      // wait for possible restart
                      var newState=getState(idNUKIConnectionState).val;
                      if (newState="online"){
                          //sendTo('telegram.0','NUKI Bridge ist wieder '+ newState +' nach Ablauf des Timers.');
                          }
                      else{
                          sendTo('telegram.0','NUKI Bridge ist immer noch '+ newState +' nach Ablauf des Timers.');
                          }
                      timeoutVar=null;
                  },wait_ms);
              }
              else{
                   // online w/o timer
                   sendTo('telegram.0','NUKI Bridge ist '+ obj.state.val +'.');
               }
          }
          else {
              //sendTo('telegram.0','NUKI Bridge wurde während des Timers '+ obj.state.val +'.');
          }
      });
      

      Also die Abfrage während des Timers funktionierte, aber als ich die Bridge ausgemacht habe und nie wieder an, kam keine Meldung. Kurz gesagt, ich würde gerne ein Toggeln für 1-2min ignorieren.

      Wie wäre das denn richtig?
      Danke euch im Voraus!

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

      @wurstdlx
      Zeilen 6 und 11 enthalten keinen Vergleich, sondern eine Zuweisung.

      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

      W 1 Antwort Letzte Antwort
      2
      • paul53P paul53

        @wurstdlx
        Zeilen 6 und 11 enthalten keinen Vergleich, sondern eine Zuweisung.

        W Offline
        W Offline
        WurstDLX
        schrieb am zuletzt editiert von
        #3

        @paul53 Oh, ja ich habe so meine Schwierigkeiten mit dem if-statement in js.
        Es müsste:

        if (variable=="string"){}
        

        sein, oder?

        paul53P 1 Antwort Letzte Antwort
        0
        • W WurstDLX

          @paul53 Oh, ja ich habe so meine Schwierigkeiten mit dem if-statement in js.
          Es müsste:

          if (variable=="string"){}
          

          sein, oder?

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

          @wurstdlx sagte:

          if (variable=="string"){}
          

          sein, oder?

          Ja.

          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

          W 1 Antwort Letzte Antwort
          0
          • paul53P paul53

            @wurstdlx sagte:

            if (variable=="string"){}
            

            sein, oder?

            Ja.

            W Offline
            W Offline
            WurstDLX
            schrieb am zuletzt editiert von
            #5

            @paul53 Danke, klappt jetzt!

            paul53P 1 Antwort Letzte Antwort
            0
            • W WurstDLX

              @paul53 Danke, klappt jetzt!

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

              @wurstdlx sagte: klappt jetzt!

              Weniger komplizierte Version:

              const debug = true;
              const idNUKIConnectionState = '';
              const wait_ms = 60*1000;              // wait ms to check for state
              var timeoutVar = null;
              var offline = false;
              
              on(idNUKIConnectionState, function(obj){
                  // check if old value was not connected for more than 1 minute
                  clearTimeout(timeoutVar);     //reset timer
                  if (obj.state.val == "offline") {
                      timeoutVar=setTimeout(function(){
                          sendTo('telegram.0','NUKI Bridge ist offline nach Ablauf des Timers.');
                          offline = true;
                      }, wait_ms);
                  } else if(offline) {
                      sendTo('telegram.0','NUKI Bridge ist wieder online.');
                      offline = false;
                  }
                  if(debug) log('NUKI Bridge ist ' + obj.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

              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

              403

              Online

              32.6k

              Benutzer

              82.0k

              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