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. settimeout() id an obj binden [gelöst]

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

settimeout() id an obj binden [gelöst]

Geplant Angeheftet Gesperrt Verschoben JavaScript
8 Beiträge 4 Kommentatoren 1.0k 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.
  • XenonX Offline
    XenonX Offline
    Xenon
    Forum Testing Developer
    schrieb am zuletzt editiert von Xenon
    #1

    Hallo zusammen,
    ich habe mir mit "class" ein Objekt erschaffen. Dieses Objekt liegt mehrfach in einem Array und beinhaltet jedes mal unterschiedliche Datenpunkte. Überschreitet nun ein Wert "10" startet das script, wird der Wert "10" unterschritten soll ein timeout laufen. Wird der Wert "10" wieder überschritten, dann muss der timeout abbrechen. Und genau das macht das script leider nicht.
    Ich bin jetzt seit 2 Tagen dabei rauszufinden, wie man in iobroker JS die timer ID rausfinden kann. Entweder kommt als Fehler im Log "TypeError: Converting circular structure to JSON" ,sonst "undefined" oder "[object Object]". Damit kann ich aber nicht arbeiten.

    class Geraet {
      constructor (obj, index ){
        //Attribute
        this.geraeteName = obj.geraeteName ;
        this.energyMessure = obj.energyMessure;
        this.timeout = null;
        // Methode
        };
      };
    
    on({id: obj.energyMessure, change: "any"}, function (obj, index) {
      if (obj.wert >= 10) {
        (function () {if (obj.timeout != null) {clearTimeout(obj.timeout); obj.timeout = null;}})();
      } else if (wert < 10) {
        obj.timeout = setTimeout(function () {
          console.log("Geraet unter 10W")
        }, 20000);
      };
    };
    };
    

    Es muss doch eine Möglichkeit geben, diese ID rauszubekommen und zu speichern.

    Ich hoffe mir kann jemand helfen.. Danke!

    wenn euch mein Beitrag geholfen hat, bewertet ihn bitte unten rechts :)

    paul53P DutchmanD 2 Antworten Letzte Antwort
    0
    • XenonX Xenon

      Hallo zusammen,
      ich habe mir mit "class" ein Objekt erschaffen. Dieses Objekt liegt mehrfach in einem Array und beinhaltet jedes mal unterschiedliche Datenpunkte. Überschreitet nun ein Wert "10" startet das script, wird der Wert "10" unterschritten soll ein timeout laufen. Wird der Wert "10" wieder überschritten, dann muss der timeout abbrechen. Und genau das macht das script leider nicht.
      Ich bin jetzt seit 2 Tagen dabei rauszufinden, wie man in iobroker JS die timer ID rausfinden kann. Entweder kommt als Fehler im Log "TypeError: Converting circular structure to JSON" ,sonst "undefined" oder "[object Object]". Damit kann ich aber nicht arbeiten.

      class Geraet {
        constructor (obj, index ){
          //Attribute
          this.geraeteName = obj.geraeteName ;
          this.energyMessure = obj.energyMessure;
          this.timeout = null;
          // Methode
          };
        };
      
      on({id: obj.energyMessure, change: "any"}, function (obj, index) {
        if (obj.wert >= 10) {
          (function () {if (obj.timeout != null) {clearTimeout(obj.timeout); obj.timeout = null;}})();
        } else if (wert < 10) {
          obj.timeout = setTimeout(function () {
            console.log("Geraet unter 10W")
          }, 20000);
        };
      };
      };
      

      Es muss doch eine Möglichkeit geben, diese ID rauszubekommen und zu speichern.

      Ich hoffe mir kann jemand helfen.. Danke!

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

      @Xenon
      Doku zu on().

      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
      • XenonX Xenon

        Hallo zusammen,
        ich habe mir mit "class" ein Objekt erschaffen. Dieses Objekt liegt mehrfach in einem Array und beinhaltet jedes mal unterschiedliche Datenpunkte. Überschreitet nun ein Wert "10" startet das script, wird der Wert "10" unterschritten soll ein timeout laufen. Wird der Wert "10" wieder überschritten, dann muss der timeout abbrechen. Und genau das macht das script leider nicht.
        Ich bin jetzt seit 2 Tagen dabei rauszufinden, wie man in iobroker JS die timer ID rausfinden kann. Entweder kommt als Fehler im Log "TypeError: Converting circular structure to JSON" ,sonst "undefined" oder "[object Object]". Damit kann ich aber nicht arbeiten.

        class Geraet {
          constructor (obj, index ){
            //Attribute
            this.geraeteName = obj.geraeteName ;
            this.energyMessure = obj.energyMessure;
            this.timeout = null;
            // Methode
            };
          };
        
        on({id: obj.energyMessure, change: "any"}, function (obj, index) {
          if (obj.wert >= 10) {
            (function () {if (obj.timeout != null) {clearTimeout(obj.timeout); obj.timeout = null;}})();
          } else if (wert < 10) {
            obj.timeout = setTimeout(function () {
              console.log("Geraet unter 10W")
            }, 20000);
          };
        };
        };
        

        Es muss doch eine Möglichkeit geben, diese ID rauszubekommen und zu speichern.

        Ich hoffe mir kann jemand helfen.. Danke!

        DutchmanD Offline
        DutchmanD Offline
        Dutchman
        Developer Most Active Administrators
        schrieb am zuletzt editiert von
        #3

        @Xenon sagte in settimeout() id an obj binden:

        Ich bin jetzt seit 2 Tagen dabei rauszufinden, wie man in iobroker JS die timer ID rausfinden kann.

        Ich schreibe meine timer immer in eine array und verteile so selber die id das lauft super.
        Hier mal beispiel code einer meiner adapter :

        			// Timer  to set online state to  FALSE when not uppdated during  2 time-sync intervals
        			if (name === 'online') {
        				// Clear running timer
        				(function () { if (stateExpire[stateName]) { clearTimeout(stateExpire[stateName]); 								    stateExpire[stateName] = null; } })();
        				// timer
        				stateExpire[stateName] = setTimeout(async () => {
        					// Set value to state including expiration time
        					await this.setState(stateName, {
        						val: false,
        						ack: true,
        					});
        					this.log.debug('Online state expired for ' + stateName);
        				}, this.config.Time_Sync * 2000);
        				this.log.debug('Expire time set for state : ' + name + ' with time in seconds : ' + this.config.Time_Sync * 2);
        			}
        

        https://github.com/iobroker-community-adapters/ioBroker.wled/blob/master/main.js#L745-L759

        stateExpire[stateName] is meine array mit Timern und stateName meine variable

        XenonX 1 Antwort Letzte Antwort
        0
        • DutchmanD Dutchman

          @Xenon sagte in settimeout() id an obj binden:

          Ich bin jetzt seit 2 Tagen dabei rauszufinden, wie man in iobroker JS die timer ID rausfinden kann.

          Ich schreibe meine timer immer in eine array und verteile so selber die id das lauft super.
          Hier mal beispiel code einer meiner adapter :

          			// Timer  to set online state to  FALSE when not uppdated during  2 time-sync intervals
          			if (name === 'online') {
          				// Clear running timer
          				(function () { if (stateExpire[stateName]) { clearTimeout(stateExpire[stateName]); 								    stateExpire[stateName] = null; } })();
          				// timer
          				stateExpire[stateName] = setTimeout(async () => {
          					// Set value to state including expiration time
          					await this.setState(stateName, {
          						val: false,
          						ack: true,
          					});
          					this.log.debug('Online state expired for ' + stateName);
          				}, this.config.Time_Sync * 2000);
          				this.log.debug('Expire time set for state : ' + name + ' with time in seconds : ' + this.config.Time_Sync * 2);
          			}
          

          https://github.com/iobroker-community-adapters/ioBroker.wled/blob/master/main.js#L745-L759

          stateExpire[stateName] is meine array mit Timern und stateName meine variable

          XenonX Offline
          XenonX Offline
          Xenon
          Forum Testing Developer
          schrieb am zuletzt editiert von
          #4

          @Dutchman

          danke dir, ich würde die aber gerne am objekt speichern. Ich habe nun eine Lösung gefunden, ich habe nämlich im timeout nicht das Obj übergeben ..

          wenn euch mein Beitrag geholfen hat, bewertet ihn bitte unten rechts :)

          DutchmanD 1 Antwort Letzte Antwort
          0
          • XenonX Xenon

            @Dutchman

            danke dir, ich würde die aber gerne am objekt speichern. Ich habe nun eine Lösung gefunden, ich habe nämlich im timeout nicht das Obj übergeben ..

            DutchmanD Offline
            DutchmanD Offline
            Dutchman
            Developer Most Active Administrators
            schrieb am zuletzt editiert von
            #5

            @Xenon sagte in settimeout() id an obj binden:

            @Dutchman

            danke dir, ich würde die aber gerne am objekt speichern. Ich habe nun eine Lösung gefunden, ich habe nämlich im timeout nicht das Obj übergeben ..

            verstehe nicht ganz was du meinst :) mit am object Speichern ? obj ist keine offenen variable davon solltest du dir bewusst sein es kommt aus dem trigger.
            Ergo ist die function beendet ist die variable obj wieder lehr bis zum nächsten trigger

            genau aus dem Grund erstelle ich eine separate variable als array, und schreibe da meine timer mit einer id rein.
            Da dies eine global variable ist kann ich immer den timer finden und resetten.

            XenonX 1 Antwort Letzte Antwort
            0
            • DutchmanD Dutchman

              @Xenon sagte in settimeout() id an obj binden:

              @Dutchman

              danke dir, ich würde die aber gerne am objekt speichern. Ich habe nun eine Lösung gefunden, ich habe nämlich im timeout nicht das Obj übergeben ..

              verstehe nicht ganz was du meinst :) mit am object Speichern ? obj ist keine offenen variable davon solltest du dir bewusst sein es kommt aus dem trigger.
              Ergo ist die function beendet ist die variable obj wieder lehr bis zum nächsten trigger

              genau aus dem Grund erstelle ich eine separate variable als array, und schreibe da meine timer mit einer id rein.
              Da dies eine global variable ist kann ich immer den timer finden und resetten.

              XenonX Offline
              XenonX Offline
              Xenon
              Forum Testing Developer
              schrieb am zuletzt editiert von
              #6

              @Dutchman
              ich habe mir eine klasse erstellt, die beinhaltet das attribut this.timeout und genau darein muss der timeout. Wie gesagt, ich habe es mittlerweile hinbekommen :) danke dir trotzdem

              wenn euch mein Beitrag geholfen hat, bewertet ihn bitte unten rechts :)

              DutchmanD iPhilBlnI 2 Antworten Letzte Antwort
              1
              • XenonX Xenon

                @Dutchman
                ich habe mir eine klasse erstellt, die beinhaltet das attribut this.timeout und genau darein muss der timeout. Wie gesagt, ich habe es mittlerweile hinbekommen :) danke dir trotzdem

                DutchmanD Offline
                DutchmanD Offline
                Dutchman
                Developer Most Active Administrators
                schrieb am zuletzt editiert von
                #7

                @Xenon sagte in settimeout() id an obj binden [gelöst]:

                @Dutchman
                ich habe mir eine klasse erstellt, die beinhaltet das attribut this.timeout und genau darein muss der timeout. Wie gesagt, ich habe es mittlerweile hinbekommen :) danke dir trotzdem

                na dan teile deine Lösung doch auch mal der anderen :)

                1 Antwort Letzte Antwort
                0
                • XenonX Xenon

                  @Dutchman
                  ich habe mir eine klasse erstellt, die beinhaltet das attribut this.timeout und genau darein muss der timeout. Wie gesagt, ich habe es mittlerweile hinbekommen :) danke dir trotzdem

                  iPhilBlnI Offline
                  iPhilBlnI Offline
                  iPhilBln
                  schrieb am zuletzt editiert von
                  #8

                  @xenon sagte in settimeout() id an obj binden [gelöst]:

                  Wie gesagt, ich habe es mittlerweile hinbekommen

                  Auch vor dem Wissen, dass dieser Thread nun fast 4 Jahre alt ist, wie sieht denn deine Lösung für dieses Problem aus?
                  Ich stehe aktuell vor genau derselben Problematik und wäre über eine Lösung dankbar.

                  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

                  714

                  Online

                  32.6k

                  Benutzer

                  82.1k

                  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