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

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

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

Scheduled Pinned Locked Moved JavaScript
8 Posts 4 Posters 1.0k Views 2 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.
  • XenonX Offline
    XenonX Offline
    Xenon
    Forum Testing Developer
    wrote on last edited by 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 Replies Last reply
    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
      wrote on last edited by
      #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 Reply Last reply
      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
        wrote on last edited by
        #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 Reply Last reply
        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
          wrote on last edited by
          #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 Reply Last reply
          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
            wrote on last edited by
            #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 Reply Last reply
            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
              wrote on last edited by
              #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 Replies Last reply
              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
                wrote on last edited by
                #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 Reply Last reply
                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
                  wrote on last edited by
                  #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 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

                  638

                  Online

                  32.6k

                  Users

                  82.1k

                  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