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. Timeout in JS einbinden

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    22
    1
    1.2k

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.5k

Timeout in JS einbinden

Geplant Angeheftet Gesperrt Verschoben JavaScript
24 Beiträge 6 Kommentatoren 1.8k Aufrufe 5 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.
  • OliverIOO OliverIO

    @ubecker

    zunächst mal durch ki formatiert und erklärt

    Gerne! Hier ist dein Skript strukturiert, korrekt eingerückt und mit Kommentaren erklärt. Es handelt sich um ein JavaScript-Skript für ioBroker (Blockly/JavaScript Adapter), das prüft, ob die Heizungsanforderung durch verschiedene Quellen hoch genug ist, um den Heizkessel einzuschalten – oder nach 5 Stunden auszuschalten.


    ✨ Formatierter und erklärter Code

    // 🔥 Heizung ein-/ausschalten bei Energieanforderung
    
    const ids = 'javascript.0.Array_IDs_Heizung_level'; // Array mit allen Level-IDs
    const ID_Liste_Level = getState(ids).val;           // Liest die Array-IDs aus dem Datenpunkt
    const level_value = 20.1;                            // Schwellenwert für Aktivierung der Heizung
    
    // ⏱ Trigger auf Änderungen in einem der Level-Werte
    on({ id: [].concat(ID_Liste_Level), change: 'ne' }, async (obj) => {
        let value = obj.state.val;
        let oldValue = obj.oldState.val;
    
        // 🔁 Schleife über alle Heiz-Level IDs
        let x_end = ID_Liste_Level.length - 1;
        let x_inc = 1;
        let gesamt_value = 0.0;
        let timeout;
    
        if (x_end < 0) {
            x_inc = -x_inc;
        }
    
        for (let x = 0; x_inc >= 0 ? x <= x_end : x >= x_end; x += x_inc) {
            gesamt_value += getState(ID_Liste_Level[x]).val;
        }
    
        // ✅ Wenn die Gesamtleistung über dem Schwellwert liegt
        if (gesamt_value >= level_value) {
            // Heizung aktivieren
            setState('javascript.0.Heizung_Kessel_aktiv', true, true);
    
            // Eventuell vorhandenen Ausschalt-Timer löschen
            clearTimeout(timeout);
        } else {
            // ❄️ Heizung erst nach 5 Stunden deaktivieren
            timeout = setTimeout(() => {
                setState('javascript.0.Heizung_Kessel_aktiv', false, true);
            }, 300 * 60 * 1000); // 300 Minuten = 5 Stunden
        }
    
        // 🧾 Debug-Ausgabe
        console.log(gesamt_value);
    });
    

    🧠 Was macht das Skript genau?

    Abschnitt Funktion
    getState(ids).val Holt die Liste der IDs, deren Werte überwacht werden sollen
    on({...}) Reagiert auf jede Änderung eines Werts in dieser Liste
    for-Schleife Summiert alle aktuellen Werte der IDs (z. B. Heizkreise)
    if gesamt_value >= ... Wenn genug Anforderung vorhanden ist → Heizung an
    else mit setTimeout Sonst: nach 5 Stunden (300 Minuten) → Heizung aus
    clearTimeout(timeout) Wenn vorher ein Ausschalten geplant war, aber jetzt wieder Anforderung kommt, wird der Timer gelöscht

    🛠 Hinweise

    • timeout ist aktuell lokal in der Funktion definiert – wird aber bei jedem Trigger neu gesetzt. Damit der Ausschalt-Timer persistiert, muss timeout außerhalb des Event-Handlers deklariert werden (sonst funktioniert clearTimeout() nicht wie gewünscht).

    Mögliche Verbesserung:

    let timeout; // globale Variable außerhalb des Event-Handlers
    
    on({...}) {
        ...
    }
    

    Wenn du willst, kann ich das für dich gleich verbessern.

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

    nächster schritt

    Perfekt! Hier ist dein Skript mit korrekt implementiertem Timeout-Handling, sodass clearTimeout(timeout) wie gewünscht funktioniert und nicht bei jedem Trigger-Ereignis verloren geht:


    ✅ Finale Version mit persistentem Timeout

    // 🔥 Heizung ein-/ausschalten bei Energieanforderung
    
    const ids = 'javascript.0.Array_IDs_Heizung_level';       // Datenpunkt mit Array von Level-IDs
    const level_value = 20.1;                                  // Schwellenwert zur Aktivierung der Heizung
    const ID_Liste_Level = getState(ids).val;                  // Array der zu überwachenden IDs
    
    let timeout = null; // ⏱ Timeout-Variable global definieren
    
    // 📡 Trigger bei jeder Änderung eines Wertes in der Liste
    on({ id: [].concat(ID_Liste_Level), change: 'ne' }, async (obj) => {
        let gesamt_value = 0.0;
    
        // 🔁 Summiere alle aktuellen Werte
        for (let i = 0; i < ID_Liste_Level.length; i++) {
            let val = getState(ID_Liste_Level[i]).val;
            gesamt_value += val;
        }
    
        // ✅ Wenn Schwelle erreicht oder überschritten → Heizung AN
        if (gesamt_value >= level_value) {
            setState('javascript.0.Heizung_Kessel_aktiv', true, true);
    
            // ⛔ Bereits laufenden Ausschalt-Timer abbrechen
            if (timeout !== null) {
                clearTimeout(timeout);
                timeout = null;
            }
        }
        // ❄️ Wenn unter Schwelle → Heizung AUS (nach 5 Stunden)
        else {
            if (timeout === null) {
                timeout = setTimeout(() => {
                    setState('javascript.0.Heizung_Kessel_aktiv', false, true);
                    timeout = null; // Timer zurücksetzen
                }, 300 * 60 * 1000); // 300 Minuten = 5 Stunden
            }
        }
    
        // 📋 Protokolliere aktuellen Summenwert
        console.log('Gesamtanforderung:', gesamt_value);
    });
    

    🧠 Vorteil der Änderung

    Durch die globale timeout-Variable wird verhindert, dass mehrere setTimeout()-Aufrufe gleichzeitig laufen. Stattdessen gibt es genau einen Ausschalt-Timer, der bei Bedarf neu gesetzt oder gelöscht wird.

    Wenn du möchtest, kann ich auch eine erweiterte Version mit Logging, Telegram-Benachrichtigung oder Visualisierung vorbereiten.

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

    paul53P ubeckerU 2 Antworten Letzte Antwort
    0
    • ubeckerU ubecker

      @oliverio
      alles ok, mir ging es nur um die syntax zu den Befehlen. Hab das nirgendwo gefunden.
      und danke für die links
      Zur weiteren Info:
      ich teste mittels Array Werte von (ca 20) Heizkörperventilen
      Wenn die Raumtemperatur abfällt öffnen die Ventile = Energieanforderung.
      Dann schalte ich die Heizung ein
      Der Timeout macht nur eine Verzögerung des ausschalten der Heizung

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

      @ubecker
      das geht auch schon in der kostenlosen version mit chatgpt

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

      ubeckerU 1 Antwort Letzte Antwort
      0
      • OliverIOO OliverIO

        nächster schritt

        Perfekt! Hier ist dein Skript mit korrekt implementiertem Timeout-Handling, sodass clearTimeout(timeout) wie gewünscht funktioniert und nicht bei jedem Trigger-Ereignis verloren geht:


        ✅ Finale Version mit persistentem Timeout

        // 🔥 Heizung ein-/ausschalten bei Energieanforderung
        
        const ids = 'javascript.0.Array_IDs_Heizung_level';       // Datenpunkt mit Array von Level-IDs
        const level_value = 20.1;                                  // Schwellenwert zur Aktivierung der Heizung
        const ID_Liste_Level = getState(ids).val;                  // Array der zu überwachenden IDs
        
        let timeout = null; // ⏱ Timeout-Variable global definieren
        
        // 📡 Trigger bei jeder Änderung eines Wertes in der Liste
        on({ id: [].concat(ID_Liste_Level), change: 'ne' }, async (obj) => {
            let gesamt_value = 0.0;
        
            // 🔁 Summiere alle aktuellen Werte
            for (let i = 0; i < ID_Liste_Level.length; i++) {
                let val = getState(ID_Liste_Level[i]).val;
                gesamt_value += val;
            }
        
            // ✅ Wenn Schwelle erreicht oder überschritten → Heizung AN
            if (gesamt_value >= level_value) {
                setState('javascript.0.Heizung_Kessel_aktiv', true, true);
        
                // ⛔ Bereits laufenden Ausschalt-Timer abbrechen
                if (timeout !== null) {
                    clearTimeout(timeout);
                    timeout = null;
                }
            }
            // ❄️ Wenn unter Schwelle → Heizung AUS (nach 5 Stunden)
            else {
                if (timeout === null) {
                    timeout = setTimeout(() => {
                        setState('javascript.0.Heizung_Kessel_aktiv', false, true);
                        timeout = null; // Timer zurücksetzen
                    }, 300 * 60 * 1000); // 300 Minuten = 5 Stunden
                }
            }
        
            // 📋 Protokolliere aktuellen Summenwert
            console.log('Gesamtanforderung:', gesamt_value);
        });
        

        🧠 Vorteil der Änderung

        Durch die globale timeout-Variable wird verhindert, dass mehrere setTimeout()-Aufrufe gleichzeitig laufen. Stattdessen gibt es genau einen Ausschalt-Timer, der bei Bedarf neu gesetzt oder gelöscht wird.

        Wenn du möchtest, kann ich auch eine erweiterte Version mit Logging, Telegram-Benachrichtigung oder Visualisierung vorbereiten.

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

        @oliverio sagte: Durch die globale timeout-Variable wird verhindert, dass mehrere setTimeout()-Aufrufe gleichzeitig laufen.

        Das ist bei analogen Vergleichswerten auch erforderlich, da andernfalls clearTimeout(timeout) nicht funktioniert.
        Prinzip:

            if (Vergleich von Analogwerten) {
                setState('javascript.0.Heizung_Kessel_aktiv', true, true);
                // ⛔ Bereits laufenden Ausschalt-Timer abbrechen
                if (timeout) {
                    clearTimeout(timeout);
                    timeout = null;
                }
            } else if (!timeout) {
                timeout = setTimeout(() => {
                    setState('javascript.0.Heizung_Kessel_aktiv', false, true);
                }, 300 * 60 * 1000); // 300 Minuten = 5 Stunden
            }
        

        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

        OliverIOO 1 Antwort Letzte Antwort
        0
        • paul53P paul53

          @oliverio sagte: Durch die globale timeout-Variable wird verhindert, dass mehrere setTimeout()-Aufrufe gleichzeitig laufen.

          Das ist bei analogen Vergleichswerten auch erforderlich, da andernfalls clearTimeout(timeout) nicht funktioniert.
          Prinzip:

              if (Vergleich von Analogwerten) {
                  setState('javascript.0.Heizung_Kessel_aktiv', true, true);
                  // ⛔ Bereits laufenden Ausschalt-Timer abbrechen
                  if (timeout) {
                      clearTimeout(timeout);
                      timeout = null;
                  }
              } else if (!timeout) {
                  timeout = setTimeout(() => {
                      setState('javascript.0.Heizung_Kessel_aktiv', false, true);
                  }, 300 * 60 * 1000); // 300 Minuten = 5 Stunden
              }
          
          OliverIOO Offline
          OliverIOO Offline
          OliverIO
          schrieb am zuletzt editiert von
          #15

          @paul53 das was copy/paste aus chatgpt

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

          1 Antwort Letzte Antwort
          0
          • OliverIOO OliverIO

            nächster schritt

            Perfekt! Hier ist dein Skript mit korrekt implementiertem Timeout-Handling, sodass clearTimeout(timeout) wie gewünscht funktioniert und nicht bei jedem Trigger-Ereignis verloren geht:


            ✅ Finale Version mit persistentem Timeout

            // 🔥 Heizung ein-/ausschalten bei Energieanforderung
            
            const ids = 'javascript.0.Array_IDs_Heizung_level';       // Datenpunkt mit Array von Level-IDs
            const level_value = 20.1;                                  // Schwellenwert zur Aktivierung der Heizung
            const ID_Liste_Level = getState(ids).val;                  // Array der zu überwachenden IDs
            
            let timeout = null; // ⏱ Timeout-Variable global definieren
            
            // 📡 Trigger bei jeder Änderung eines Wertes in der Liste
            on({ id: [].concat(ID_Liste_Level), change: 'ne' }, async (obj) => {
                let gesamt_value = 0.0;
            
                // 🔁 Summiere alle aktuellen Werte
                for (let i = 0; i < ID_Liste_Level.length; i++) {
                    let val = getState(ID_Liste_Level[i]).val;
                    gesamt_value += val;
                }
            
                // ✅ Wenn Schwelle erreicht oder überschritten → Heizung AN
                if (gesamt_value >= level_value) {
                    setState('javascript.0.Heizung_Kessel_aktiv', true, true);
            
                    // ⛔ Bereits laufenden Ausschalt-Timer abbrechen
                    if (timeout !== null) {
                        clearTimeout(timeout);
                        timeout = null;
                    }
                }
                // ❄️ Wenn unter Schwelle → Heizung AUS (nach 5 Stunden)
                else {
                    if (timeout === null) {
                        timeout = setTimeout(() => {
                            setState('javascript.0.Heizung_Kessel_aktiv', false, true);
                            timeout = null; // Timer zurücksetzen
                        }, 300 * 60 * 1000); // 300 Minuten = 5 Stunden
                    }
                }
            
                // 📋 Protokolliere aktuellen Summenwert
                console.log('Gesamtanforderung:', gesamt_value);
            });
            

            🧠 Vorteil der Änderung

            Durch die globale timeout-Variable wird verhindert, dass mehrere setTimeout()-Aufrufe gleichzeitig laufen. Stattdessen gibt es genau einen Ausschalt-Timer, der bei Bedarf neu gesetzt oder gelöscht wird.

            Wenn du möchtest, kann ich auch eine erweiterte Version mit Logging, Telegram-Benachrichtigung oder Visualisierung vorbereiten.

            ubeckerU Offline
            ubeckerU Offline
            ubecker
            schrieb am zuletzt editiert von
            #16

            @oliverio said in Timeout in JS einbinden:

            nächster schritt

            Perfekt! Hier ist dein Skript mit korrekt implementiertem Timeout-Handling, sodass clearTimeout(timeout) wie gewünscht funktioniert und nicht bei jedem Trigger-Ereignis verloren geht:


            ✅ Finale Version mit persistentem Timeout

            // 🔥 Heizung ein-/ausschalten bei Energieanforderung
            
            const ids = 'javascript.0.Array_IDs_Heizung_level';       // Datenpunkt mit Array von Level-IDs
            const level_value = 20.1;                                  // Schwellenwert zur Aktivierung der Heizung
            const ID_Liste_Level = getState(ids).val;                  // Array der zu überwachenden IDs
            
            let timeout = null; // ⏱ Timeout-Variable global definieren
            
            // 📡 Trigger bei jeder Änderung eines Wertes in der Liste
            on({ id: [].concat(ID_Liste_Level), change: 'ne' }, async (obj) => {
                let gesamt_value = 0.0;
            
                // 🔁 Summiere alle aktuellen Werte
                for (let i = 0; i < ID_Liste_Level.length; i++) {
                    let val = getState(ID_Liste_Level[i]).val;
                    gesamt_value += val;
                }
            
                // ✅ Wenn Schwelle erreicht oder überschritten → Heizung AN
                if (gesamt_value >= level_value) {
                    setState('javascript.0.Heizung_Kessel_aktiv', true, true);
            
                    // ⛔ Bereits laufenden Ausschalt-Timer abbrechen
                    if (timeout !== null) {
                        clearTimeout(timeout);
                        timeout = null;
                    }
                }
                // ❄️ Wenn unter Schwelle → Heizung AUS (nach 5 Stunden)
                else {
                    if (timeout === null) {
                        timeout = setTimeout(() => {
                            setState('javascript.0.Heizung_Kessel_aktiv', false, true);
                            timeout = null; // Timer zurücksetzen
                        }, 300 * 60 * 1000); // 300 Minuten = 5 Stunden
                    }
                }
            
                // 📋 Protokolliere aktuellen Summenwert
                console.log('Gesamtanforderung:', gesamt_value);
            });
            

            🧠 Vorteil der Änderung

            Durch die globale timeout-Variable wird verhindert, dass mehrere setTimeout()-Aufrufe gleichzeitig laufen. Stattdessen gibt es genau einen Ausschalt-Timer, der bei Bedarf neu gesetzt oder gelöscht wird.

            Wenn du möchtest, kann ich auch eine erweiterte Version mit Logging, Telegram-Benachrichtigung oder Visualisierung vorbereiten.


            super; einzig was noch fehlt sind die Bedingungen wenn Heizug schon auf true steht braucht nicht wieder gesetzt zu werden, auch beim ausschalten. sind aber nur 2 if Bedingungen.

            Gruß Udo

            1 Antwort Letzte Antwort
            0
            • OliverIOO OliverIO

              @ubecker
              das geht auch schon in der kostenlosen version mit chatgpt

              ubeckerU Offline
              ubeckerU Offline
              ubecker
              schrieb am zuletzt editiert von
              #17

              @oliverio
              kleiner Fehler in dem Script:
              console.log('Gesamtanforderung:', gesamt_value);
              funktioniert so nicht da erst ein String und dann eine Zahl.
              Zahl nach String konvertieren oder einfach den String 'Gesamtanforderung:' weglassen

              sonst alles ok, meine if Bedingung zum setzen hab ich auch eingebaut.

              nochmals Danke.

              Gruß Udo

              M paul53P OliverIOO 3 Antworten Letzte Antwort
              0
              • ubeckerU ubecker

                @oliverio
                kleiner Fehler in dem Script:
                console.log('Gesamtanforderung:', gesamt_value);
                funktioniert so nicht da erst ein String und dann eine Zahl.
                Zahl nach String konvertieren oder einfach den String 'Gesamtanforderung:' weglassen

                sonst alles ok, meine if Bedingung zum setzen hab ich auch eingebaut.

                nochmals Danke.

                M Online
                M Online
                MCU
                schrieb am zuletzt editiert von
                #18

                @ubecker sagte in Timeout in JS einbinden:

                console.log('Gesamtanforderung:', gesamt_value);

                console.log('Gesamtanforderung: '+ gesamt_value);
                

                NUC i7 64GB mit Proxmox ---- Jarvis Infos Aktualisierungen der Doku auf Instagram verfolgen -> mcuiobroker Instagram
                Wenn Euch mein Vorschlag geholfen hat, bitte rechts "^" klicken.

                1 Antwort Letzte Antwort
                0
                • ubeckerU ubecker

                  @oliverio
                  kleiner Fehler in dem Script:
                  console.log('Gesamtanforderung:', gesamt_value);
                  funktioniert so nicht da erst ein String und dann eine Zahl.
                  Zahl nach String konvertieren oder einfach den String 'Gesamtanforderung:' weglassen

                  sonst alles ok, meine if Bedingung zum setzen hab ich auch eingebaut.

                  nochmals Danke.

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

                  @ubecker sagte: funktioniert so nicht da erst ein String und dann eine Zahl.

                  Funktioniert, wenn das Komma durch ein Plus ersetzt wird.

                  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
                  1
                  • ubeckerU ubecker

                    @oliverio
                    kleiner Fehler in dem Script:
                    console.log('Gesamtanforderung:', gesamt_value);
                    funktioniert so nicht da erst ein String und dann eine Zahl.
                    Zahl nach String konvertieren oder einfach den String 'Gesamtanforderung:' weglassen

                    sonst alles ok, meine if Bedingung zum setzen hab ich auch eingebaut.

                    nochmals Danke.

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

                    @ubecker sagte in Timeout in JS einbinden:

                    console.log('Gesamtanforderung:', gesamt_value);

                    wie gesagt, das skript ist nicht von mir überarbeitet worden, sondern von chatGPT
                    nach Definition ist das richtig
                    https://developer.mozilla.org/en-US/docs/Web/API/console/log_static
                    https://nodejs.org/api/console.html#consolelogdata-args
                    console.log nimmt 1 bis N parameter. jeder parameter wird gemäß typ so ausgegeben

                    mit + wird automatisch von javascript der typ aus gesamt_value nach string gewandelt und dann das ergebnis angehängt.

                    da scheint es im javascript adapter noch was geben
                    hier die ausgabe aus der browser console
                    4e69704f-ced3-4f57-b243-1db1d37289bd-image.png

                    und aus der node repl (einfach node starten)
                    d774bb97-a55f-42fd-a7be-ae1477382e26-image.png

                    habe mal geschaut.
                    da ist die typdefinition im javascript adapter nicht ganz korrekt.
                    die console befehle kennen alle nur einen parameter.
                    allerdings ist das auch nicht die priorität, ist ja eh nur für debugging
                    https://github.com/ioBroker/ioBroker.javascript/blob/64c375ea0e0840f21a7cc12582c970022f061fa2/src/types.d.ts#L570

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

                    P ubeckerU 2 Antworten Letzte Antwort
                    0
                    • OliverIOO OliverIO

                      @ubecker sagte in Timeout in JS einbinden:

                      console.log('Gesamtanforderung:', gesamt_value);

                      wie gesagt, das skript ist nicht von mir überarbeitet worden, sondern von chatGPT
                      nach Definition ist das richtig
                      https://developer.mozilla.org/en-US/docs/Web/API/console/log_static
                      https://nodejs.org/api/console.html#consolelogdata-args
                      console.log nimmt 1 bis N parameter. jeder parameter wird gemäß typ so ausgegeben

                      mit + wird automatisch von javascript der typ aus gesamt_value nach string gewandelt und dann das ergebnis angehängt.

                      da scheint es im javascript adapter noch was geben
                      hier die ausgabe aus der browser console
                      4e69704f-ced3-4f57-b243-1db1d37289bd-image.png

                      und aus der node repl (einfach node starten)
                      d774bb97-a55f-42fd-a7be-ae1477382e26-image.png

                      habe mal geschaut.
                      da ist die typdefinition im javascript adapter nicht ganz korrekt.
                      die console befehle kennen alle nur einen parameter.
                      allerdings ist das auch nicht die priorität, ist ja eh nur für debugging
                      https://github.com/ioBroker/ioBroker.javascript/blob/64c375ea0e0840f21a7cc12582c970022f061fa2/src/types.d.ts#L570

                      P Offline
                      P Offline
                      peterfido
                      schrieb am zuletzt editiert von
                      #21

                      @oliverio Für solche Zeitspannen setze ich auf einen Datenpunkt, welcher minutiös heruntergezählt wird. Arbeitet man am ioBroker innerhalb der fünf Stunden, kann es sonst passieren, dass das Timeout verlorengeht.

                      Gruß

                      Peterfido


                      Proxmox auf Intel NUC12WSHi5
                      ioBroker: Debian (VM)
                      CCU: Debmatic (VM)
                      Influx: Debian (VM)
                      Grafana: Debian (VM)
                      eBus: Debian (VM)
                      Zigbee: Debian (VM) mit zigbee2mqtt

                      OliverIOO 1 Antwort Letzte Antwort
                      0
                      • P peterfido

                        @oliverio Für solche Zeitspannen setze ich auf einen Datenpunkt, welcher minutiös heruntergezählt wird. Arbeitet man am ioBroker innerhalb der fünf Stunden, kann es sonst passieren, dass das Timeout verlorengeht.

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

                        @peterfido
                        Besser:
                        Den Ende timestamp in einem datenpunkt merken und dann regelmäßig prüfen, ob er erreicht wird. Bzw. der datenpunkt existiert nur falls der Adapter neu gestartet wird, damit man wieder neu aufsetzen kann.
                        Dann schreibt man nicht so oft in der Datenbank herum.

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

                        1 Antwort Letzte Antwort
                        0
                        • P Offline
                          P Offline
                          peterfido
                          schrieb am zuletzt editiert von
                          #23

                          @oliverio Der Schreibzyklen wegen vielleicht schon. Darüber habe ich mir zu Raspi-Zeiten tatsächlich Gedanken gemacht.Also, wie so oft, ein "kommt darauf an".

                          Gruß

                          Peterfido


                          Proxmox auf Intel NUC12WSHi5
                          ioBroker: Debian (VM)
                          CCU: Debmatic (VM)
                          Influx: Debian (VM)
                          Grafana: Debian (VM)
                          eBus: Debian (VM)
                          Zigbee: Debian (VM) mit zigbee2mqtt

                          1 Antwort Letzte Antwort
                          0
                          • OliverIOO OliverIO

                            @ubecker sagte in Timeout in JS einbinden:

                            console.log('Gesamtanforderung:', gesamt_value);

                            wie gesagt, das skript ist nicht von mir überarbeitet worden, sondern von chatGPT
                            nach Definition ist das richtig
                            https://developer.mozilla.org/en-US/docs/Web/API/console/log_static
                            https://nodejs.org/api/console.html#consolelogdata-args
                            console.log nimmt 1 bis N parameter. jeder parameter wird gemäß typ so ausgegeben

                            mit + wird automatisch von javascript der typ aus gesamt_value nach string gewandelt und dann das ergebnis angehängt.

                            da scheint es im javascript adapter noch was geben
                            hier die ausgabe aus der browser console
                            4e69704f-ced3-4f57-b243-1db1d37289bd-image.png

                            und aus der node repl (einfach node starten)
                            d774bb97-a55f-42fd-a7be-ae1477382e26-image.png

                            habe mal geschaut.
                            da ist die typdefinition im javascript adapter nicht ganz korrekt.
                            die console befehle kennen alle nur einen parameter.
                            allerdings ist das auch nicht die priorität, ist ja eh nur für debugging
                            https://github.com/ioBroker/ioBroker.javascript/blob/64c375ea0e0840f21a7cc12582c970022f061fa2/src/types.d.ts#L570

                            ubeckerU Offline
                            ubeckerU Offline
                            ubecker
                            schrieb am zuletzt editiert von
                            #24

                            @oliverio said in Timeout in JS einbinden:

                            allerdings ist das auch nicht die priorität, ist ja eh nur für debugging

                            genau.

                            @oliverio said in Timeout in JS einbinden:

                            Den Ende timestamp in einem datenpunkt merken und dann regelmäßig prüfen, ob er erreicht wird. Bzw. der datenpunkt existiert nur falls der Adapter neu gestartet wird, damit man wieder neu aufsetzen kann.
                            Dann schreibt man nicht so oft in der Datenbank herum

                            hier eigentlich unkritisch. Dann bleibt die Heizung weitere 5 Std. an.
                            ich lass es erst mal beim normalen Teimout und werde das beobachten.

                            danke an alle

                            Gruß Udo

                            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

                            569

                            Online

                            32.5k

                            Benutzer

                            81.7k

                            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