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 falsch aufgelöst?

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.9k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.3k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.5k

[gelöst] setTimeout falsch aufgelöst?

Geplant Angeheftet Gesperrt Verschoben JavaScript
15 Beiträge 3 Kommentatoren 936 Aufrufe 3 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.
  • bjoernbB Offline
    bjoernbB Offline
    bjoernb
    schrieb am zuletzt editiert von bjoernb
    #1

    Lösung: PEBKAC, irgendwie dachte ich der return type von setTimeout wäre number, aber das war wohl eine Halluzination.

    Ich habe ein Typescript Script mit setTimeout, bei dem ich den returnWert speichere, um es abzubrechen.

    Screenshot 2023-01-04 at 13.17.37.png

    this.timeoutId ist vom Type number und das hat mal funktioniert, aber ich habe heute allgemein meine Scripts mal aufgeräumt und auch mit dem VSCode Plugin gearbeitet und irgendwo in dem Prozess ging das kaputt. Jetzt wird das zur native NodeJS Methode aufgelöst und nicht zu dem iobroker override.

    Ich habe in dem Script keine Imports, alle anderen calls wie setState und getState funktionieren. Bevor ich jetzt zu Holzhammermethoden greife und irgendwie den ganzen Adapter lösche / zurücksetze, hat ja vielleicht jemand einen Tipp, was ich verbockt habe? Ich kann auch ein leeres Javascript Script erstellen und das wird auch schon falsch aufgelöst:

    Screenshot 2023-01-04 at 13.33.38.png

    Ich könnte das natürlich auch einfach umbauen, dass es halt den NodeJS Type nimmt, aber ich habe die Befürchtung, dass die Optimierungen rundum setTimeout halt auch nicht aufgerufen werden.

    So viel zu meinem System:

    NodeJS: 16.19.0
    npm: 8.19.3
    JavaScript Adapter: 6.1.4
    js-controller: 4.0.24

    Danke für jeden Tipp und einfach sagen, wenn es noch mehr Info braucht.

    Hier noch das ganze File zum Nachstellen:

    class Feeder {
    
        private delay: number = 60000;
        private iterations: number = 0;
        private timeoutId: number = 0;
    
        constructor() {
            on('mqtt.0.dog.feeder', this.dispense.bind(this))
        }
    
        dispense(data: iobJS.ChangedStateObject<any, any>): void {
            if (data.state.val === false) {
                if (this.timeoutId != 0) {
                    clearTimeout(this.timeoutId);
                    this.timeoutId = 0;
                }
    
                this.delay = 60000;
                this.iterations = 0;
            }
            else if (data.state.val === true) {
                const dispenseWithDelay = () => {
                    console.log('Food dispensed.');
    
                    // trigger the actual Futterautomat
                    setState('broadlink2.0.BroadlinkRM-Pro.L.Futterautomat Einmal', true);
    
                    this.iterations++;
    
                    // Increase the delay after every 5 iterations
                    if (this.iterations % 5 === 0) {
                        this.delay += 60000; // increase the delay by 1 minute
                        // If the delay has reached 15 minutes, set it to 15 minutes
                        if (this.delay > 900000) {
                            this.delay = 900000;
                        }
                    }
    
                    // Use the setTimeout function to call the 'dispenseWithDelay' function again after the specified delay
                    this.timeoutId = setTimeout(dispenseWithDelay, this.delay);
                };
    
                // Start the loop by calling the 'dispenseWithDelay' function
                dispenseWithDelay();
            }
        }
    }
    
    const feeder = new Feeder();
    
    OliverIOO 1 Antwort Letzte Antwort
    0
    • bjoernbB bjoernb

      Lösung: PEBKAC, irgendwie dachte ich der return type von setTimeout wäre number, aber das war wohl eine Halluzination.

      Ich habe ein Typescript Script mit setTimeout, bei dem ich den returnWert speichere, um es abzubrechen.

      Screenshot 2023-01-04 at 13.17.37.png

      this.timeoutId ist vom Type number und das hat mal funktioniert, aber ich habe heute allgemein meine Scripts mal aufgeräumt und auch mit dem VSCode Plugin gearbeitet und irgendwo in dem Prozess ging das kaputt. Jetzt wird das zur native NodeJS Methode aufgelöst und nicht zu dem iobroker override.

      Ich habe in dem Script keine Imports, alle anderen calls wie setState und getState funktionieren. Bevor ich jetzt zu Holzhammermethoden greife und irgendwie den ganzen Adapter lösche / zurücksetze, hat ja vielleicht jemand einen Tipp, was ich verbockt habe? Ich kann auch ein leeres Javascript Script erstellen und das wird auch schon falsch aufgelöst:

      Screenshot 2023-01-04 at 13.33.38.png

      Ich könnte das natürlich auch einfach umbauen, dass es halt den NodeJS Type nimmt, aber ich habe die Befürchtung, dass die Optimierungen rundum setTimeout halt auch nicht aufgerufen werden.

      So viel zu meinem System:

      NodeJS: 16.19.0
      npm: 8.19.3
      JavaScript Adapter: 6.1.4
      js-controller: 4.0.24

      Danke für jeden Tipp und einfach sagen, wenn es noch mehr Info braucht.

      Hier noch das ganze File zum Nachstellen:

      class Feeder {
      
          private delay: number = 60000;
          private iterations: number = 0;
          private timeoutId: number = 0;
      
          constructor() {
              on('mqtt.0.dog.feeder', this.dispense.bind(this))
          }
      
          dispense(data: iobJS.ChangedStateObject<any, any>): void {
              if (data.state.val === false) {
                  if (this.timeoutId != 0) {
                      clearTimeout(this.timeoutId);
                      this.timeoutId = 0;
                  }
      
                  this.delay = 60000;
                  this.iterations = 0;
              }
              else if (data.state.val === true) {
                  const dispenseWithDelay = () => {
                      console.log('Food dispensed.');
      
                      // trigger the actual Futterautomat
                      setState('broadlink2.0.BroadlinkRM-Pro.L.Futterautomat Einmal', true);
      
                      this.iterations++;
      
                      // Increase the delay after every 5 iterations
                      if (this.iterations % 5 === 0) {
                          this.delay += 60000; // increase the delay by 1 minute
                          // If the delay has reached 15 minutes, set it to 15 minutes
                          if (this.delay > 900000) {
                              this.delay = 900000;
                          }
                      }
      
                      // Use the setTimeout function to call the 'dispenseWithDelay' function again after the specified delay
                      this.timeoutId = setTimeout(dispenseWithDelay, this.delay);
                  };
      
                  // Start the loop by calling the 'dispenseWithDelay' function
                  dispenseWithDelay();
              }
          }
      }
      
      const feeder = new Feeder();
      
      OliverIOO Offline
      OliverIOO Offline
      OliverIO
      schrieb am zuletzt editiert von OliverIO
      #2

      @bjoernb

      und wie lautet die Fehlermeldung?
      Bei mir wird das genau so angezeigt? Auch NodeJS.timeout
      Was funktioniert nicht mehr so wie früher?
      Der Scriptadapter fängt setTimeout eigentlich nur ab um zur Sicherheit das timeout-handle zu speichern, damit wenn du das Skript stoppst, aber selbst den timer nicht stoppst, macht das der skriptadapter für dich. sonst würden die timer immer weiterlaufen.

      Meine Adapter und Widgets
      TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
      Links im Profil

      bjoernbB 1 Antwort Letzte Antwort
      0
      • OliverIOO OliverIO

        @bjoernb

        und wie lautet die Fehlermeldung?
        Bei mir wird das genau so angezeigt? Auch NodeJS.timeout
        Was funktioniert nicht mehr so wie früher?
        Der Scriptadapter fängt setTimeout eigentlich nur ab um zur Sicherheit das timeout-handle zu speichern, damit wenn du das Skript stoppst, aber selbst den timer nicht stoppst, macht das der skriptadapter für dich. sonst würden die timer immer weiterlaufen.

        bjoernbB Offline
        bjoernbB Offline
        bjoernb
        schrieb am zuletzt editiert von
        #3

        @oliverio

        TypeScript compilation failed: this.timeoutId = setTimeout(dispenseWithDelay, this.delay); ^ ERROR: Type 'Timeout' is not assignable to type 'number'.

        OliverIOO 1 Antwort Letzte Antwort
        0
        • bjoernbB bjoernb

          @oliverio

          TypeScript compilation failed: this.timeoutId = setTimeout(dispenseWithDelay, this.delay); ^ ERROR: Type 'Timeout' is not assignable to type 'number'.

          OliverIOO Offline
          OliverIOO Offline
          OliverIO
          schrieb am zuletzt editiert von OliverIO
          #4

          @bjoernb

          aber das ist ja wieder eine andere Funktionssignatur für setTimeout.
          Bist du sicher, das du nicht irgendwo selbst setTimeout nochmal überschrieben hast?

          Meine Adapter und Widgets
          TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
          Links im Profil

          bjoernbB 1 Antwort Letzte Antwort
          0
          • OliverIOO OliverIO

            @bjoernb

            aber das ist ja wieder eine andere Funktionssignatur für setTimeout.
            Bist du sicher, das du nicht irgendwo selbst setTimeout nochmal überschrieben hast?

            bjoernbB Offline
            bjoernbB Offline
            bjoernb
            schrieb am zuletzt editiert von
            #5

            @oliverio es wird in allen anderen Scripts noch 2 mal aufgerufen, aber nicht überschrieben. Bei den anderen beiden Aufrufen kommt es auf den Returnvalue nicht an, drum ist es dort einfach nur var.

            der ganze Block mit dem Fehler sieht so aus:

            // Define a recursive function to execute the 'dispense' method with a delay
            const dispenseWithDelay = () => {
                console.log('Food dispensed.');
            
                // trigger the actual Futterautomat
                setState('broadlink2.0.BroadlinkRM-Pro.L.Futterautomat Einmal', true);
            
                this.iterations++;
            
                // Increase the delay after every 5 iterations
                if (this.iterations % 5 === 0) {
                    this.delay += 60000; // increase the delay by 1 minute
                    // If the delay has reached 15 minutes, set it to 15 minutes
                    if (this.delay > 900000) {
                        this.delay = 900000;
                    }
                }
            
                // Use the setTimeout function to call the 'dispenseWithDelay' function again after the specified delay
                this.timeoutId = setTimeout(dispenseWithDelay, this.delay);
            };
            
            OliverIOO 1 Antwort Letzte Antwort
            0
            • bjoernbB bjoernb

              @oliverio es wird in allen anderen Scripts noch 2 mal aufgerufen, aber nicht überschrieben. Bei den anderen beiden Aufrufen kommt es auf den Returnvalue nicht an, drum ist es dort einfach nur var.

              der ganze Block mit dem Fehler sieht so aus:

              // Define a recursive function to execute the 'dispense' method with a delay
              const dispenseWithDelay = () => {
                  console.log('Food dispensed.');
              
                  // trigger the actual Futterautomat
                  setState('broadlink2.0.BroadlinkRM-Pro.L.Futterautomat Einmal', true);
              
                  this.iterations++;
              
                  // Increase the delay after every 5 iterations
                  if (this.iterations % 5 === 0) {
                      this.delay += 60000; // increase the delay by 1 minute
                      // If the delay has reached 15 minutes, set it to 15 minutes
                      if (this.delay > 900000) {
                          this.delay = 900000;
                      }
                  }
              
                  // Use the setTimeout function to call the 'dispenseWithDelay' function again after the specified delay
                  this.timeoutId = setTimeout(dispenseWithDelay, this.delay);
              };
              
              OliverIOO Offline
              OliverIOO Offline
              OliverIO
              schrieb am zuletzt editiert von OliverIO
              #6

              @bjoernb
              ich habe mal versucht das nachzuvollziehen.
              Leider ist es ja nicht der komplette code.
              wenn du da auf this.delay und this.iterations dich beziehst, müsste
              es dann bei setTimeout nicht auch this.dispenseWithDelay heißen?

              noch eine Anmekrung zu der meldung mit dem auflösen.
              Das wird deswegen nur so angezeigt, weil sich niemand die Mühe gemacht hat, nochmal für den script-adapter eine eigene typedefinition für settimeout anzufertigen.
              aber ist eigentlich auch irrelevant, da es an der eigentlichen ur-funktion ja nix verändert.

              Meine Adapter und Widgets
              TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
              Links im Profil

              bjoernbB 1 Antwort Letzte Antwort
              0
              • OliverIOO OliverIO

                @bjoernb
                ich habe mal versucht das nachzuvollziehen.
                Leider ist es ja nicht der komplette code.
                wenn du da auf this.delay und this.iterations dich beziehst, müsste
                es dann bei setTimeout nicht auch this.dispenseWithDelay heißen?

                noch eine Anmekrung zu der meldung mit dem auflösen.
                Das wird deswegen nur so angezeigt, weil sich niemand die Mühe gemacht hat, nochmal für den script-adapter eine eigene typedefinition für settimeout anzufertigen.
                aber ist eigentlich auch irrelevant, da es an der eigentlichen ur-funktion ja nix verändert.

                bjoernbB Offline
                bjoernbB Offline
                bjoernb
                schrieb am zuletzt editiert von
                #7

                @oliverio ok, sorry für den Geiz, hier das ganze File, vielleicht ist es damit verständlicher:

                class Feeder {
                
                    private delay: number = 60000;
                    private iterations: number = 0;
                    private timeoutId: number = 0;
                
                    constructor() {
                        on('mqtt.0.dog.feeder', this.dispense.bind(this))
                    }
                
                    dispense(data: iobJS.ChangedStateObject<any, any>): void {
                        if (data.state.val === false) {
                            if (this.timeoutId != 0) {
                                clearTimeout(this.timeoutId);
                                this.timeoutId = 0;
                            }
                
                            this.delay = 60000;
                            this.iterations = 0;
                        }
                        else if (data.state.val === true) {
                            const dispenseWithDelay = () => {
                                console.log('Food dispensed.');
                
                                // trigger the actual Futterautomat
                                setState('broadlink2.0.BroadlinkRM-Pro.L.Futterautomat Einmal', true);
                
                                this.iterations++;
                
                                // Increase the delay after every 5 iterations
                                if (this.iterations % 5 === 0) {
                                    this.delay += 60000; // increase the delay by 1 minute
                                    // If the delay has reached 15 minutes, set it to 15 minutes
                                    if (this.delay > 900000) {
                                        this.delay = 900000;
                                    }
                                }
                
                                // Use the setTimeout function to call the 'dispenseWithDelay' function again after the specified delay
                                this.timeoutId = setTimeout(dispenseWithDelay, this.delay);
                            };
                
                            // Start the loop by calling the 'dispenseWithDelay' function
                            dispenseWithDelay();
                        }
                    }
                }
                
                const feeder = new Feeder();
                
                1 Antwort Letzte Antwort
                0
                • bjoernbB Offline
                  bjoernbB Offline
                  bjoernb
                  schrieb am zuletzt editiert von
                  #8

                  Wahrscheinlich habe ich geträumt. Selbst in der Doku vom js-controller steht die Methode würde Timeout als type zurückliefern. Keine Ahnung, wie das mal funktioniert hat...

                  OliverIOO 1 Antwort Letzte Antwort
                  0
                  • bjoernbB bjoernb

                    Wahrscheinlich habe ich geträumt. Selbst in der Doku vom js-controller steht die Methode würde Timeout als type zurückliefern. Keine Ahnung, wie das mal funktioniert hat...

                    OliverIOO Offline
                    OliverIOO Offline
                    OliverIO
                    schrieb am zuletzt editiert von OliverIO
                    #9

                    @bjoernb

                    ich habe es mal anhand des folgenden skripts probiert.
                    allerdings musste ich auf javascript umschreiben, da ich mit ts ein wenig schwierigkeiten hatte.
                    die Zeiten habe ich ebenfalls stark verkürzt und ein paar Log-Zeilen hinzugefügt.

                    ja, korrekt, der syntax-checker zeigt weiterhin in Zeile 50 einen Fehler an.
                    Allerdings gibt es keinen Fehler bei der Abarbeitung.
                    Der syntax checker ist auch unabhängig davon was nachher die Ausführung macht.
                    Daher kommen Situationen vor, bei der er einen fehler anzeigt, das Skript aber dennoch läuft.
                    Diesen "Fehler" würde ich mal ignorieren.
                    Die Start-Methode habe ich so gestaltet, das sie in gleicher Weise wie on die Methode dispense aufruft.

                    class Feeder {
                     
                      delay = 6000;
                      iterations = 0;
                      timeoutId = 0;
                    
                      constructor() {
                          //on('mqtt.0.dog.feeder', this.dispense.bind(this))
                      }
                      start() {
                        setTimeout(this.dispense.bind(this),100);
                      }
                    
                      dispense(data) {
                        data={
                          state: {
                            val:true
                          }
                        }
                          if (data.state.val === false) {
                              if (this.timeoutId != 0) {
                                  clearTimeout(this.timeoutId);
                                  this.timeoutId = 0;
                              }
                    
                              this.delay = 6000;
                              this.iterations = 0;
                          }
                          else if (data.state.val === true) {
                              const dispenseWithDelay = () => {
                                  console.log('Food dispensed.');
                    
                                  // trigger the actual Futterautomat
                                  //setState('broadlink2.0.BroadlinkRM-Pro.L.Futterautomat Einmal', true);
                    
                                  this.iterations++;
                                  console.log('Iterations.'+this.iterations);
                    
                                  // Increase the delay after every 5 iterations
                                  if (this.iterations % 5 === 0) {
                                    console.log('Iterations mod 5');
                                    this.delay += 6000; // increase the delay by 1 minute
                                      // If the delay has reached 15 minutes, set it to 15 minutes
                                      if (this.delay > 9000) {
                                          this.delay = 9000;
                                      }
                                  }
                    
                                  // Use the setTimeout function to call the 'dispenseWithDelay' function again after the specified delay
                                  this.timeoutId = setTimeout(dispenseWithDelay, this.delay);
                              };
                    
                              // Start the loop by calling the 'dispenseWithDelay' function
                              dispenseWithDelay();
                          }
                      }
                    }
                    
                    let feeder = new Feeder();
                    feeder.start();
                    
                    
                    

                    Anmerkung als Ex-Hundebesitzer:
                    Du willst dem Hund alle 15 Minuten was in den Napf geben?
                    Da lauert er doch nur noch am Napf.

                    Meine Adapter und Widgets
                    TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                    Links im Profil

                    bjoernbB 1 Antwort Letzte Antwort
                    1
                    • OliverIOO OliverIO

                      @bjoernb

                      ich habe es mal anhand des folgenden skripts probiert.
                      allerdings musste ich auf javascript umschreiben, da ich mit ts ein wenig schwierigkeiten hatte.
                      die Zeiten habe ich ebenfalls stark verkürzt und ein paar Log-Zeilen hinzugefügt.

                      ja, korrekt, der syntax-checker zeigt weiterhin in Zeile 50 einen Fehler an.
                      Allerdings gibt es keinen Fehler bei der Abarbeitung.
                      Der syntax checker ist auch unabhängig davon was nachher die Ausführung macht.
                      Daher kommen Situationen vor, bei der er einen fehler anzeigt, das Skript aber dennoch läuft.
                      Diesen "Fehler" würde ich mal ignorieren.
                      Die Start-Methode habe ich so gestaltet, das sie in gleicher Weise wie on die Methode dispense aufruft.

                      class Feeder {
                       
                        delay = 6000;
                        iterations = 0;
                        timeoutId = 0;
                      
                        constructor() {
                            //on('mqtt.0.dog.feeder', this.dispense.bind(this))
                        }
                        start() {
                          setTimeout(this.dispense.bind(this),100);
                        }
                      
                        dispense(data) {
                          data={
                            state: {
                              val:true
                            }
                          }
                            if (data.state.val === false) {
                                if (this.timeoutId != 0) {
                                    clearTimeout(this.timeoutId);
                                    this.timeoutId = 0;
                                }
                      
                                this.delay = 6000;
                                this.iterations = 0;
                            }
                            else if (data.state.val === true) {
                                const dispenseWithDelay = () => {
                                    console.log('Food dispensed.');
                      
                                    // trigger the actual Futterautomat
                                    //setState('broadlink2.0.BroadlinkRM-Pro.L.Futterautomat Einmal', true);
                      
                                    this.iterations++;
                                    console.log('Iterations.'+this.iterations);
                      
                                    // Increase the delay after every 5 iterations
                                    if (this.iterations % 5 === 0) {
                                      console.log('Iterations mod 5');
                                      this.delay += 6000; // increase the delay by 1 minute
                                        // If the delay has reached 15 minutes, set it to 15 minutes
                                        if (this.delay > 9000) {
                                            this.delay = 9000;
                                        }
                                    }
                      
                                    // Use the setTimeout function to call the 'dispenseWithDelay' function again after the specified delay
                                    this.timeoutId = setTimeout(dispenseWithDelay, this.delay);
                                };
                      
                                // Start the loop by calling the 'dispenseWithDelay' function
                                dispenseWithDelay();
                            }
                        }
                      }
                      
                      let feeder = new Feeder();
                      feeder.start();
                      
                      
                      

                      Anmerkung als Ex-Hundebesitzer:
                      Du willst dem Hund alle 15 Minuten was in den Napf geben?
                      Da lauert er doch nur noch am Napf.

                      bjoernbB Offline
                      bjoernbB Offline
                      bjoernb
                      schrieb am zuletzt editiert von
                      #10

                      @oliverio Aber wenn du es auf Javascript umbaust, dann gibt es ja eben nur noch den syntax checker, aber keinen compile check mehr. Der Typescript compile verhindert ja dann mit dem compile, dass das Script überhaupt gestartet wird.

                      Ich habe es jetzt umgebaut auf Timeout. Ich bin nicht sicher, woher ich die Information hatte, dass es eine number zurückliefern sollte, muss das geträumt haben.

                      Bzgl. der 15 Minuten, ja, das ist im Moment schon so Absicht, weil der Hund sich manchmal mit allein bleiben schwer tut und mit dem Futterautomat klappt es gut und da möchte ich jetzt gerne die Zeiten ausdehnen. 15 Minuten ist jetzt mal das Maximum, mal schauen, was er davon hält...

                      H 1 Antwort Letzte Antwort
                      1
                      • bjoernbB bjoernb

                        @oliverio Aber wenn du es auf Javascript umbaust, dann gibt es ja eben nur noch den syntax checker, aber keinen compile check mehr. Der Typescript compile verhindert ja dann mit dem compile, dass das Script überhaupt gestartet wird.

                        Ich habe es jetzt umgebaut auf Timeout. Ich bin nicht sicher, woher ich die Information hatte, dass es eine number zurückliefern sollte, muss das geträumt haben.

                        Bzgl. der 15 Minuten, ja, das ist im Moment schon so Absicht, weil der Hund sich manchmal mit allein bleiben schwer tut und mit dem Futterautomat klappt es gut und da möchte ich jetzt gerne die Zeiten ausdehnen. 15 Minuten ist jetzt mal das Maximum, mal schauen, was er davon hält...

                        H Offline
                        H Offline
                        homecineplexx
                        schrieb am zuletzt editiert von
                        #11

                        @bjoernb was ist das für ein Futterautomat, den man so verwenden kann?

                        bjoernbB 1 Antwort Letzte Antwort
                        0
                        • OliverIOO Offline
                          OliverIOO Offline
                          OliverIO
                          schrieb am zuletzt editiert von
                          #12

                          @bjoernb
                          setTimeout liefert ja auch ein number zurück.
                          Wahrscheinlich hat man das aber als Typ Timer dann definiert um das von einer reinen number zu differenzieren . Evtl. musst du die variable dann mit dem selben Typ deklarieren

                          Du weißt was compile bei typescript genau bedeutet?
                          Es ist der Prozess bei dem der typescript Text in JavaScript konvertiert und die entsprechenden sourcemaps erzeugt werden.
                          Typescript wird nicht nativ ausgeführt immer nur JavaScript

                          Meine Adapter und Widgets
                          TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                          Links im Profil

                          bjoernbB 1 Antwort Letzte Antwort
                          0
                          • H homecineplexx

                            @bjoernb was ist das für ein Futterautomat, den man so verwenden kann?

                            bjoernbB Offline
                            bjoernbB Offline
                            bjoernb
                            schrieb am zuletzt editiert von
                            #13

                            @homecineplexx @homecineplexx Sorry, hab die Notification nicht bekommen, dass noch eine Antwort kam. Das ist ein Treat & Train (https://intl.petsafe.net/de-ch/support/treat-train-remote-reward-dog-trainer). Hat eine Fernbedienung auf 433 MHz und das konnte ich mit einem Broadlink RM Pro auslesen und so besser automatisieren.

                            H 1 Antwort Letzte Antwort
                            0
                            • OliverIOO OliverIO

                              @bjoernb
                              setTimeout liefert ja auch ein number zurück.
                              Wahrscheinlich hat man das aber als Typ Timer dann definiert um das von einer reinen number zu differenzieren . Evtl. musst du die variable dann mit dem selben Typ deklarieren

                              Du weißt was compile bei typescript genau bedeutet?
                              Es ist der Prozess bei dem der typescript Text in JavaScript konvertiert und die entsprechenden sourcemaps erzeugt werden.
                              Typescript wird nicht nativ ausgeführt immer nur JavaScript

                              bjoernbB Offline
                              bjoernbB Offline
                              bjoernb
                              schrieb am zuletzt editiert von
                              #14

                              @oliverio ja, das er nur transpiliert ist mir klar, aber trotzdem verhindert der Check im Editor, dass das Script gestartet wird.

                              1 Antwort Letzte Antwort
                              0
                              • bjoernbB bjoernb

                                @homecineplexx @homecineplexx Sorry, hab die Notification nicht bekommen, dass noch eine Antwort kam. Das ist ein Treat & Train (https://intl.petsafe.net/de-ch/support/treat-train-remote-reward-dog-trainer). Hat eine Fernbedienung auf 433 MHz und das konnte ich mit einem Broadlink RM Pro auslesen und so besser automatisieren.

                                H Offline
                                H Offline
                                homecineplexx
                                schrieb am zuletzt editiert von
                                #15

                                @bjoernb das klingt ja voll super...muss ich mal mit meiner frau besprechen bezüglich unseres Wufzis...danke

                                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

                                786

                                Online

                                32.5k

                                Benutzer

                                81.6k

                                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