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. Entwicklung
  4. [gelöst] setTimout / clearTimeout iobroker.feiertage

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.4k

[gelöst] setTimout / clearTimeout iobroker.feiertage

Geplant Angeheftet Gesperrt Verschoben Entwicklung
adapterfeiertagejavascriptscriptsettimeouttimer
6 Beiträge 2 Kommentatoren 601 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.
  • P Offline
    P Offline
    pix
    schrieb am zuletzt editiert von pix
    #1

    Hallo,

    der Adapter Checker hat mir einen Fehler ausgeworfen:

    [W505] setTimeout found in "main.js", but no clearTimeout detected
    

    Betroffener Code in Github (Link):

    
    adapter.on("ready", function () {
        adapter.getForeignObject("system.config", function (err, data) {
            if (data && data.common) {
                lang = data.common.language;
            }
    
            adapter.log.debug("adapter feiertage initializing objects");
            checkHolidays();
            adapter.log.info("adapter feiertage objects written");
    
            setTimeout(function () {
                adapter.log.info("force terminating after 1 minute");
                adapter.stop();
            }, 60000);
    
        });
    });
    

    Ich bin nicht sicher, wie ich es ändern sollte. Meine Idee:

    var terminating_timer;
    
    function forceTerminating () {
        adapter.log.info("force terminating after 1 minute");
        clearTimeout(terminating_timer);
        adapter.stop();
    }
    
    adapter.on("ready", function () {
        adapter.getForeignObject("system.config", function (err, data) {
            if (data && data.common) {
                lang = data.common.language;
            }
    
            adapter.log.debug("adapter feiertage initializing objects");
            checkHolidays();
            adapter.log.info("adapter feiertage objects written");
            
            clearTimeout(terminating_timer);
            terminating_timer = setTimeout(forceTerminating, 60000);
    
        });
    });
    

    Richtig so?

    Gruß
    Pix

    ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

    crycodeC 1 Antwort Letzte Antwort
    0
    • P Offline
      P Offline
      pix
      schrieb am zuletzt editiert von
      #2

      Schiebe nach oben

      ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

      1 Antwort Letzte Antwort
      0
      • P pix

        Hallo,

        der Adapter Checker hat mir einen Fehler ausgeworfen:

        [W505] setTimeout found in "main.js", but no clearTimeout detected
        

        Betroffener Code in Github (Link):

        
        adapter.on("ready", function () {
            adapter.getForeignObject("system.config", function (err, data) {
                if (data && data.common) {
                    lang = data.common.language;
                }
        
                adapter.log.debug("adapter feiertage initializing objects");
                checkHolidays();
                adapter.log.info("adapter feiertage objects written");
        
                setTimeout(function () {
                    adapter.log.info("force terminating after 1 minute");
                    adapter.stop();
                }, 60000);
        
            });
        });
        

        Ich bin nicht sicher, wie ich es ändern sollte. Meine Idee:

        var terminating_timer;
        
        function forceTerminating () {
            adapter.log.info("force terminating after 1 minute");
            clearTimeout(terminating_timer);
            adapter.stop();
        }
        
        adapter.on("ready", function () {
            adapter.getForeignObject("system.config", function (err, data) {
                if (data && data.common) {
                    lang = data.common.language;
                }
        
                adapter.log.debug("adapter feiertage initializing objects");
                checkHolidays();
                adapter.log.info("adapter feiertage objects written");
                
                clearTimeout(terminating_timer);
                terminating_timer = setTimeout(forceTerminating, 60000);
        
            });
        });
        

        Richtig so?

        Gruß
        Pix

        crycodeC Offline
        crycodeC Offline
        crycode
        Developer
        schrieb am zuletzt editiert von
        #3

        @pix Nicht ganz...

        Zuerst ein mal brauchst den clearTimeout nicht mehr extra in deiner forceTerminating Funktion aufrufen, da die ja eh nur aufgerufen wird, wenn der Timeout bereits zugeschlagen hat.

        Wenn ich das richtig sehe, dann willst du mit dem Timeout sicherstellen, dass der Adapter auch wirklich nach der einen Minute wieder beendet wird.
        In dem Fall solltest du setTimeout direkt am Anfang von der on ready Funktion aufrufen um den Timeout zu starten und dann clearTimeout an der Stelle, wo du sicher sagen kannst, dass alles abgearbeitet wurde und der Adapter sich beenden soll.

        Da du mehrere adapter.stop() Aufrufe drin hast, könnte man das evlt. in eine eigene stop() Funktion auslagern und in dieser clearTimeout(...) und adapter.stop() nacheinander aufrufen.

        Meine Adapter: discord | canbus | ds18b20 | odl | radiohead

        P 1 Antwort Letzte Antwort
        1
        • crycodeC crycode

          @pix Nicht ganz...

          Zuerst ein mal brauchst den clearTimeout nicht mehr extra in deiner forceTerminating Funktion aufrufen, da die ja eh nur aufgerufen wird, wenn der Timeout bereits zugeschlagen hat.

          Wenn ich das richtig sehe, dann willst du mit dem Timeout sicherstellen, dass der Adapter auch wirklich nach der einen Minute wieder beendet wird.
          In dem Fall solltest du setTimeout direkt am Anfang von der on ready Funktion aufrufen um den Timeout zu starten und dann clearTimeout an der Stelle, wo du sicher sagen kannst, dass alles abgearbeitet wurde und der Adapter sich beenden soll.

          Da du mehrere adapter.stop() Aufrufe drin hast, könnte man das evlt. in eine eigene stop() Funktion auslagern und in dieser clearTimeout(...) und adapter.stop() nacheinander aufrufen.

          P Offline
          P Offline
          pix
          schrieb am zuletzt editiert von pix
          #4

          @crycode Danke für die Unterstützung.

          Die Funktion forceTerminationg() hat ja schon den adapter.stop() drin. Das sollte damit gehen.

          var terminating_timer;
           
          function forceTerminating () {  // soll statt adapter.stop() aufgerufen werden
              adapter.log.info("force terminating after 1 minute");
              clearTimeout(terminating_timer);
              adapter.stop();
          }
           
          adapter.on("ready", function () {
              terminating_timer = setTimeout({
                  adapter.getForeignObject("system.config", function (err, data) {
                      if (data && data.common) {
                          lang = data.common.language;
                      }
                   
                      adapter.log.debug("adapter feiertage initializing objects");
                      checkHolidays();
                      adapter.log.info("adapter feiertage objects written");
                          
                      forceTerminating();
                  });
              }, 60000);
          });
          
          

          Ist es das, was du meintest?

          Gruß
          Pix

          EDIT: Jetzt beim Drüberlesen, kommt mit das falsch vor. Der Code im Timeout soll ja nicht erst nach 1min ausgeführt werden, sondern das Beenden des Adapters soll spätestens 1min nach Durchlaufen des Codes erfolgen. Hmmm...

          ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

          crycodeC 1 Antwort Letzte Antwort
          0
          • P pix

            @crycode Danke für die Unterstützung.

            Die Funktion forceTerminationg() hat ja schon den adapter.stop() drin. Das sollte damit gehen.

            var terminating_timer;
             
            function forceTerminating () {  // soll statt adapter.stop() aufgerufen werden
                adapter.log.info("force terminating after 1 minute");
                clearTimeout(terminating_timer);
                adapter.stop();
            }
             
            adapter.on("ready", function () {
                terminating_timer = setTimeout({
                    adapter.getForeignObject("system.config", function (err, data) {
                        if (data && data.common) {
                            lang = data.common.language;
                        }
                     
                        adapter.log.debug("adapter feiertage initializing objects");
                        checkHolidays();
                        adapter.log.info("adapter feiertage objects written");
                            
                        forceTerminating();
                    });
                }, 60000);
            });
            
            

            Ist es das, was du meintest?

            Gruß
            Pix

            EDIT: Jetzt beim Drüberlesen, kommt mit das falsch vor. Der Code im Timeout soll ja nicht erst nach 1min ausgeführt werden, sondern das Beenden des Adapters soll spätestens 1min nach Durchlaufen des Codes erfolgen. Hmmm...

            crycodeC Offline
            crycodeC Offline
            crycode
            Developer
            schrieb am zuletzt editiert von
            #5

            @pix sagte in [Frage] setTimout / clearTimeout iobroker.feiertage:

            Ist es das, was du meintest?

            Nein, das sieht irgendwie seltsam aus...

            Ich meinte eher so z.B.:

            var terminating_timer;
            
            function stopAdapter (isTimeout) {
              clearTimeout(terminating_timer);
              if (isTimeout) {
                adapter.log.info("force terminating after 1 minute");
              }
              adapter.stop();
            }
            
            adapter.on("ready", function () {
              terminating_timer = setTimeout(() => stopAdapter(true), 60000);
            
              adapter.getForeignObject("system.config", function (err, data) {
                if (data && data.common) {
                  lang = data.common.language;
                }
            
                adapter.log.debug("adapter feiertage initializing objects");
                checkHolidays();
                adapter.log.info("adapter feiertage objects written");
              });
            });
            

            Zusätzlich solltest du dann alle Aufrufe von adapter.stop(); in deinem Code durch stopAdapter(); ersetzen, damit der Timeout gelöscht wird.

            Meine Adapter: discord | canbus | ds18b20 | odl | radiohead

            P 1 Antwort Letzte Antwort
            1
            • crycodeC crycode

              @pix sagte in [Frage] setTimout / clearTimeout iobroker.feiertage:

              Ist es das, was du meintest?

              Nein, das sieht irgendwie seltsam aus...

              Ich meinte eher so z.B.:

              var terminating_timer;
              
              function stopAdapter (isTimeout) {
                clearTimeout(terminating_timer);
                if (isTimeout) {
                  adapter.log.info("force terminating after 1 minute");
                }
                adapter.stop();
              }
              
              adapter.on("ready", function () {
                terminating_timer = setTimeout(() => stopAdapter(true), 60000);
              
                adapter.getForeignObject("system.config", function (err, data) {
                  if (data && data.common) {
                    lang = data.common.language;
                  }
              
                  adapter.log.debug("adapter feiertage initializing objects");
                  checkHolidays();
                  adapter.log.info("adapter feiertage objects written");
                });
              });
              

              Zusätzlich solltest du dann alle Aufrufe von adapter.stop(); in deinem Code durch stopAdapter(); ersetzen, damit der Timeout gelöscht wird.

              P Offline
              P Offline
              pix
              schrieb am zuletzt editiert von
              #6

              @crycode Vielen Dank für die Unterstützung. Habe nun die Verbesserungen schon mal im Adapter Feiertage eingepflegt. Der Adapter-Checker meckert nicht mehr :)

              Weitere folgen.

              Gruß
              Pix

              ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

              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

              587

              Online

              32.7k

              Benutzer

              82.3k

              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