Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
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

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    17
    1
    381

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

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

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

Scheduled Pinned Locked Moved JavaScript
6 Posts 2 Posters 532 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • W Offline
    W Offline
    WurstDLX
    wrote on last edited by 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 Reply Last reply
    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
      wrote on last edited by
      #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 Reply Last reply
      2
      • paul53P paul53

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

        W Offline
        W Offline
        WurstDLX
        wrote on last edited by
        #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 Reply Last reply
        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
          wrote on last edited by
          #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 Reply Last reply
          0
          • paul53P paul53

            @wurstdlx sagte:

            if (variable=="string"){}
            

            sein, oder?

            Ja.

            W Offline
            W Offline
            WurstDLX
            wrote on last edited by
            #5

            @paul53 Danke, klappt jetzt!

            paul53P 1 Reply Last reply
            0
            • W WurstDLX

              @paul53 Danke, klappt jetzt!

              paul53P Offline
              paul53P Offline
              paul53
              wrote on last edited by 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 Reply Last reply
              0
              Reply
              • Reply as topic
              Log in to reply
              • Oldest to Newest
              • Newest to Oldest
              • Most Votes


              Support us

              ioBroker
              Community Adapters
              Donate

              648

              Online

              32.7k

              Users

              82.5k

              Topics

              1.3m

              Posts
              Community
              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
              ioBroker Community 2014-2025
              logo
              • Login

              • Don't have an account? Register

              • Login or register to search.
              • First post
                Last post
              0
              • Home
              • Recent
              • Tags
              • Unread 0
              • Categories
              • Unreplied
              • Popular
              • GitHub
              • Docu
              • Hilfe