Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. maximum of 1000 setState during boot

    NEWS

    • 15. 05. Wartungsarbeiten am ioBroker Forum

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    maximum of 1000 setState during boot

    This topic has been deleted. Only users with topic management privileges can see it.
    • H
      hschief @hschief last edited by

      @hschief
      Ich habe nun mal folgendes Testscript angelegt

      function Test1() {
          log('In Function','error');
          //var Modulation = getState('ems-esp.0.heatSources.hs1.curburnpow').val;
          //var currentConsumption = Math.round(6.94 * Modulation) / 10; // 1 Nachkommastelle
          setState('0_userdata.0.Allgemein.TestBoot', 'test', false);
      };
       
      log('Script Test1 aufgerufen','error');
      schedule("*/10 * * * * *", Test1 );
      

      Im normalen Betrieb erhalte ich alle 10s nun die Meldung "In Function", wie es zu erwarten war.

      Beim Boot passtiert im Log aber Folgendes:
      Ich erhalte mehr als 1000 Einträge mir folgender Meldung
      2024-04-16 14:25:31.532 - error: javascript.0 (726) script.js.Technik.Heizung.BootTestScript: In Function
      2024-04-16 14:25:31.553 - error: javascript.0 (726) script.js.Technik.Heizung.BootTestScript: In Function
      2024-04-16 14:25:31.559 - error: javascript.0 (726) script.js.Technik.Heizung.BootTestScript: In Function
      2024-04-16 14:25:31.573 - error: javascript.0 (726) script.js.Technik.Heizung.BootTestScript: In Function
      2024-04-16 14:25:31.580 - error: javascript.0 (726) script.js.Technik.Heizung.BootTestScript: In Function
      2024-04-16 14:25:31.591 - error: javascript.0 (726) script.js.Technik.Heizung.BootTestScript: In Function
      2024-04-16 14:25:31.598 - error: javascript.0 (726) script.js.Technik.Heizung.BootTestScript: In Function
      2024-04-16 14:25:31.610 - error: javascript.0 (726) script.js.Technik.Heizung.BootTestScript: In Function
      2024-04-16 14:25:31.622 - error: javascript.0 (726) script.js.Technik.Heizung.BootTestScript: In Function
      2024-04-16 14:25:31.634 - error: javascript.0 (726) script.js.Technik.Heizung.BootTestScript: In Function
      2024-04-16 14:25:31.642 - error: javascript.0 (726) script.js.Technik.Heizung.BootTestScript: In Function

      Könnte evtl. mal jemand versuchen dies bei sich nachzustellen? Wenn das Verhalten bei einer anderen Installation beim boot reproduzierbar ist, dann würde ich einen Fehlerbericht erstellen

      Asgothian 1 Reply Last reply Reply Quote 0
      • Thomas Braun
        Thomas Braun Most Active @hschief last edited by

        @hschief sagte in maximum of 1000 setState during boot:

        node 18.17.1

        Zu alt, updaten.

        iob nodejs-update
        

        Wenn das nicht funktioniert

        iob stop
        iob fix
        

        und dann nochmal nodejs-update.

        H 1 Reply Last reply Reply Quote 0
        • arteck
          arteck Developer Most Active @hschief last edited by arteck

          @hschief die 2 höher setzten
          302732fe-a79c-4a0b-ae50-a52768c9b92b-grafik.png

          das ist eine Sicherheitseinstellung damit der iobroker nbicht stehenbeleibt wenn javascript adapter einen von dir erzeugten Fehler hat (dauerschleife)

          aber wozu fragt man alle 10 sek den dp ab.. ?? das ist doch der Verbrauch oder ?

          trigger mal auf dessen Änderung von diesem .. lass allgemein die finger von cronjobs..

          on({id: 'ems-esp.0.heatSources.hs1.curburnpow', change: "any"}, function (obj) { 
              let currentConsumption = Math.round(6.94 * obj.state.val) / 10; // 1 Nachkommastelle
              setState('0_userdata.0.Technik.Heizung.24hVerbrauch', currentConsumption, true);
          });
          
          David G. H 2 Replies Last reply Reply Quote 0
          • David G.
            David G. @arteck last edited by

            @arteck sagte in maximum of 1000 setState during boot:

            lass allgemein die finger von cronjobs..

            Warum denn das?
            Gibt dich kaum einen Weg auf cron zu verzichten.
            Im genannten Fall hier ja, aber noch nicht allgemein.

            W arteck 2 Replies Last reply Reply Quote 0
            • W
              Wildbill @David G. last edited by

              @david-g Vermutlich, weil CRON-Jobs gerne von unbedarfteren Usern, die (noch) nicht genau wissen, wie Javascript/Blockly funktioniert, um dann eben alle x Sekunden auf irgendwas zu prüfen, anstatt einfach einen passenden Trigger zu verwenden.

              Ja, CRON hat seine Berechtigung, auch innerhalb von Scripten, wo es Sinn macht. Aber das System mit zig CRON-Jobs zuzuballern, nur um Datenpunkte zu überprüfen ist eben genau der falsche Weg.

              Ich denke @arteck hat das genau in diese Richtung gedacht.

              Gruss, Jürgen

              1 Reply Last reply Reply Quote 1
              • arteck
                arteck Developer Most Active @David G. last edited by arteck

                @david-g sagte in maximum of 1000 setState during boot:

                Gibt dich kaum einen Weg auf cron zu verzichten.

                gib mir ein Beispiel wo es nicht geht .. im Sekundenbereich
                wir reden nicht von letzte Werte speichern. am Tagesende.. oder starte um X Uhr
                sondern von einem ständig wiederkehrenden schedule im sekunden/minuten Bereich

                Im genannten Fall hier ja, aber noch nicht allgemein.

                es gibt Fälle ja.. aber meistens regeirt man auf einen Trigger(eine Wertänderung) und nicht auf ein loop(alle x sekunden noch dazu)..

                @hschief und wozu der doppelpost
                https://forum.iobroker.net/topic/74144/problem-during-boot-with-schedule-command-in-the-script

                H 1 Reply Last reply Reply Quote 0
                • Asgothian
                  Asgothian Developer @hschief last edited by Asgothian

                  @hschief sagte in maximum of 1000 setState during boot:

                  @hschief
                  Ich habe nun mal folgendes Testscript angelegt

                  function Test1() {
                      log('In Function','error');
                      //var Modulation = getState('ems-esp.0.heatSources.hs1.curburnpow').val;
                      //var currentConsumption = Math.round(6.94 * Modulation) / 10; // 1 Nachkommastelle
                      setState('0_userdata.0.Allgemein.TestBoot', 'test', false);
                  };
                   
                  log('Script Test1 aufgerufen','error');
                  schedule("*/10 * * * * *", Test1 );
                  

                  Im normalen Betrieb erhalte ich alle 10s nun die Meldung "In Function", wie es zu erwarten war.

                  Beim Boot passtiert im Log aber Folgendes:
                  Ich erhalte mehr als 1000 Einträge mir folgender Meldung
                  2024-04-16 14:25:31.532 - error: javascript.0 (726) script.js.Technik.Heizung.BootTestScript: In Function
                  2024-04-16 14:25:31.553 - error: javascript.0 (726) script.js.Technik.Heizung.BootTestScript: In Function
                  2024-04-16 14:25:31.559 - error: javascript.0 (726) script.js.Technik.Heizung.BootTestScript: In Function
                  2024-04-16 14:25:31.573 - error: javascript.0 (726) script.js.Technik.Heizung.BootTestScript: In Function
                  2024-04-16 14:25:31.580 - error: javascript.0 (726) script.js.Technik.Heizung.BootTestScript: In Function
                  2024-04-16 14:25:31.591 - error: javascript.0 (726) script.js.Technik.Heizung.BootTestScript: In Function
                  2024-04-16 14:25:31.598 - error: javascript.0 (726) script.js.Technik.Heizung.BootTestScript: In Function
                  2024-04-16 14:25:31.610 - error: javascript.0 (726) script.js.Technik.Heizung.BootTestScript: In Function
                  2024-04-16 14:25:31.622 - error: javascript.0 (726) script.js.Technik.Heizung.BootTestScript: In Function
                  2024-04-16 14:25:31.634 - error: javascript.0 (726) script.js.Technik.Heizung.BootTestScript: In Function
                  2024-04-16 14:25:31.642 - error: javascript.0 (726) script.js.Technik.Heizung.BootTestScript: In Function

                  Könnte evtl. mal jemand versuchen dies bei sich nachzustellen? Wenn das Verhalten bei einer anderen Installation beim boot reproduzierbar ist, dann würde ich einen Fehlerbericht erstellen

                  Poste doch bitte auch 1 mal die vollständige Fehlermeldung. Der interessante Teil ist bei deinem Post abgeschnitten.

                  A.

                  H 1 Reply Last reply Reply Quote 0
                  • H
                    hschief @arteck last edited by

                    @arteck
                    Hi, erstmal vielen Dank für die Tipps, nach meiner Meinung macht eine Erhöhung hier keinen Sinn. Die setstates werden ja nur duch ein Fehlverhalten des schedules ausgelöst und dürften eigentlich gar nicht entstehen.
                    Da ich noch andere Dinge zyklisch prüfe (ja, ich kenne auch die Triggerfunkion), würde ich lieber die Ursache in dem Schedulerproblem finden.

                    Zu dem Verbrauchswert: Ja ich würde auch lieber den 24h Wert abprüfen, leider wird dieser aber von der Heizung nicht sauber geliefert... Frag mich nicht warum ... wäre dann ein andere Thread hier.

                    1 Reply Last reply Reply Quote 0
                    • H
                      hschief @arteck last edited by

                      @arteck
                      .. ja, gerne ein Beispiel... ich habe einen Datenpunkt der liefert im Sekundenbereich Telegramme von den Kollektoren, da möchte ich überhaupt nicht im Sekundenbereich Aktoren steuern sondern eher gleitend regeln. Zb. im Minutenbereich.. Bei PID Reglern wäre dies dann die einstellbare Delta-T Regelung.

                      Ich sehe mir im nächsten Schritt gerne das mit dem Node-JS upgrade an.. generell finde ich es aber interessant wie Diskussionen von der eigentlichen Fragestellung abdrifften ... denn dies war ja ... warum verhalten sich die Schedule Jobs beim Boot falsch.

                      mcm1957 1 Reply Last reply Reply Quote 1
                      • mcm1957
                        mcm1957 @hschief last edited by mcm1957

                        @arteck

                        Ich möcht nur kurz den Fokus drauf richten, dass das eigentliche Problem ist, dass scheinbar nur beim booten das Limit von 1000 setStates / Minute überschritten wird obwohl die Croneinstellung deutlich weniger setStates auslösen sollte. Alle 10s eine Abfrage sind nur 6 setStates / Minute.

                        Ob Cron nun sinnvoll ist oder nicht ist durchaus eine berechtigte Diskussion - aber das Problem erklärt das mal nicht. Entweder funktioniert Cron nicht richtig beim Startup oder die Limitberechnung funktioniert nicht oder irgendwas (aber was?) führt wirklich mehr als 1000/min setStates aus. Und diese Frage sollte m.E. geklärt werden.

                        (Alle 10s eine Abfrage sind nur 6 setStates / Minute)

                        Leider hab ich zum eigentlichen Problem keine Idee was da abgeht. @haus-automatisierung fällt dir da was dazu ein?

                        haus-automatisierung 1 Reply Last reply Reply Quote 0
                        • H
                          hschief @Asgothian last edited by

                          @asgothian
                          Hi, nun zu der Fehlermeldung ... sorry, ja dies ist im Text missvertständlich ausgedrückt. Ich hatte ein kleines Testscript gebaut, bei dem einfach nur alle 10s über die LogDirective die Meldung: in Function ausgegeben wird.

                          Es gibt leider keine Fehlermeldung ausser maximum 1000 setstate reached. Die Meldungen die zu sehen sind, sind die Ausgaben des Scripts, die eigentlich ja nur 6x Minute erscheinen dürfen.

                          1 Reply Last reply Reply Quote 0
                          • H
                            hschief @Thomas Braun last edited by

                            @thomas-braun said in maximum of 1000 setState during boot:

                            iob nodejs-update

                            Update durchgeführt, aktuelle Version ist jetzt: v.18.20.2, Fehler ist aber auch nach dem Update da.

                            Noch eine zusätzliche Info, wenn ich nach dem start des IOBrokers ein
                            iobroker restart javascript.0 läuft alles sauber.

                            Evtl. braucht der JavaScript Adapter andere Dienste die zu diesem Zeitpunkt noch nicht verfügbar sind ... nur eine Idee.

                            paul53 mcm1957 Homoran 3 Replies Last reply Reply Quote 0
                            • paul53
                              paul53 @hschief last edited by

                              @hschief sagte: Evtl. braucht der JavaScript Adapter andere Dienste die zu diesem Zeitpunkt noch nicht verfügbar sind ... nur eine Idee.

                              Dann starte mal den schedule() mit einigen Sekunden Verzögerung.

                              1 Reply Last reply Reply Quote 0
                              • mcm1957
                                mcm1957 @hschief last edited by

                                @hschief
                                Falls hier keine Lösung kommt oder wenn klar ist was passiert und das nicht als eh klar zu klassifizieren ist , erstell bitte jedenfalls ein Issue beim Javascript Adapter. Weil so ganz erklärbar ist das Verhaltend derzeit nicht. Und auch wenn ein Startverzögerung der Problem beheben sollte, rege ich an zu prüfen ob die nicht dann gleich zentral im Adapter erfolgen sollte. Das mjuss sich aber jemand ansehen der den Adapter in und auswendig kennt...

                                P H 2 Replies Last reply Reply Quote 0
                                • P
                                  peterfido @mcm1957 last edited by

                                  Vielleicht sollte beim Testskript der Zeitstempel geschrieben werden. So könnte man sehen, ob Cron evtl. "denkt", dass es da noch einige Auslösungen in Verzug hat, falls Cron überhaupt "verpasste" Einsätze nachholt.

                                  1 Reply Last reply Reply Quote 0
                                  • H
                                    hschief @mcm1957 last edited by

                                    @mcm57 ich folge mal deinem Rat und mache dies unter dem Adapter als Issue auf.

                                    Ich habe eben noch folgenden Test gemacht:

                                    function Test1() {
                                        log('In Function','error');
                                        setState('0_userdata.0.Allgemein.TestBoot', 'test', false);
                                    };
                                    
                                    
                                    log('Script Test1 gestartet:','error');
                                    
                                    
                                    setTimeout(function(){schedule("*/10 * * * * *", Test1 )},50000);
                                    

                                    Hier müsste beim Boot im Log ja als erstes der Log mit dem Text: "Script Test1 gestartet" erscheinen und dann deutlich später die Meldung: "In Function" alle 10s.

                                    Das Ergebnis beim Boot sieht aber wie Folgt aus: 12:51:32 ... letzte Meldung vor dem Shutdown und dann um 12:55:26.076 direkt die Meldung "In Function" ... sieht so aus als würde die schedule Anweisung komplett ignoriert.

                                    2024-04-17 12:51:32.643 - ^[[32minfo^[[39m: nina.0 (903) terminating
                                    2024-04-17 12:55:26.076 - ^[[31merror^[[39m: javascript.0 (954) script.js.Technik.Heizung.BootTestScript: In Function
                                    2024-04-17 12:55:26.140 - ^[[31merror^[[39m: javascript.0 (954) script.js.Technik.Heizung.BootTestScript: In Function
                                    2024-04-17 12:55:26.184 - ^[[31merror^[[39m: javascript.0 (954) script.js.Technik.Heizung.BootTestScript: In Function

                                    Vielen, Vielen Dank für die Tipps und Ideen!

                                    P 1 Reply Last reply Reply Quote 0
                                    • haus-automatisierung
                                      haus-automatisierung Developer Most Active @mcm1957 last edited by

                                      @mcm57 sagte in maximum of 1000 setState during boot:

                                      Leider hab ich zum eigentlichen Problem keine Idee was da abgeht. @haus-automatisierung fällt dir da was dazu ein?

                                      So spontan nicht. Konnte jemand das Verhalten auf seinem eigenen System reproduzieren?

                                      mcm1957 1 Reply Last reply Reply Quote 0
                                      • mcm1957
                                        mcm1957 @haus-automatisierung last edited by

                                        @haus-automatisierung
                                        Ja,
                                        Gibt mittlerweile ein Issue mit einem Testsckrip wo das repoduzierbar sein soll (habs nicht selbst getestet)

                                        https://github.com/ioBroker/ioBroker.javascript/issues/1552

                                        Helmut1965 created this issue in ioBroker/ioBroker.javascript

                                        closed [Bug]: Schedule command seems to be ignored during boot up (each fresh IOBroker start) #1552

                                        H 1 Reply Last reply Reply Quote 1
                                        • H
                                          hschief @mcm1957 last edited by

                                          @mcm57 Ich habe das dort als Issue auf deinen Rat hin aufgenommen, ich hoffe dies war vom Ablauf ok,

                                          1 Reply Last reply Reply Quote 1
                                          • P
                                            peterfido last edited by

                                            @hschief
                                            ich habe das Testskript auf meinem zweiten iobroker getestet. Keine mehrfachen Aufrufe beim Start zu entdecken.

                                            2024-04-17 19:40:51.936 - info: javascript.0 (706) starting. Version 7.8.0 in /opt/iobroker/node_modules/iobroker.javascript, node: v18.20.2, js-controller: 5.0.19
                                            2024-04-17 19:40:52.184 - info: javascript.0 (706) requesting all states
                                            2024-04-17 19:40:52.185 - info: javascript.0 (706) requesting all objects
                                            2024-04-17 19:40:52.446 - info: javascript.0 (706) received all objects
                                            2024-04-17 19:40:52.493 - info: javascript.0 (706) received all states
                                            2024-04-17 19:40:52.574 - info: javascript.0 (706) Start javascript script.js.Scripte.CronJobs
                                            2024-04-17 19:40:52.590 - error: javascript.0 (706) script.js.Scripte.CronJobs: Script Test1 aufgerufen
                                            2024-04-17 19:40:52.606 - info: javascript.0 (706) script.js.Scripte.CronJobs: registered 0 subscriptions, 1 schedule, 0 messages, 0 logs and 0 file subscriptions
                                            2024-04-17 19:40:55.160 - info: host.iob instance system.adapter.simple-api.0 started with pid 721
                                            2024-04-17 19:40:55.593 - info: simple-api.0 (721) starting. Version 2.7.2 in /opt/iobroker/node_modules/iobroker.simple-api, node: v18.20.2, js-controller: 5.0.19
                                            2024-04-17 19:40:55.599 - warn: simple-api.0 (721) Information for Developer: Using the direct "Let's encrypt" module import is deprecated and will be removed in the next js-controller version, use @iobroker/webserver instead
                                            2024-04-17 19:40:55.600 - info: simple-api.0 (721) simpleAPI server listening on port 8087
                                            2024-04-17 19:40:55.601 - info: simple-api.0 (721) Allow states only when user is owner: false
                                            2024-04-17 19:40:55.603 - info: simple-api.0 (721) http server listening on port 8087
                                            2024-04-17 19:40:59.155 - info: host.iob instance system.adapter.socketio.0 started with pid 736
                                            2024-04-17 19:40:59.643 - info: socketio.0 (736) starting. Version 6.6.1 in /opt/iobroker/node_modules/iobroker.socketio, node: v18.20.2, js-controller: 5.0.19
                                            2024-04-17 19:40:59.652 - warn: socketio.0 (736) Information for Developer: Using the direct "Let's encrypt" module import is deprecated and will be removed in the next js-controller version, use @iobroker/webserver instead
                                            2024-04-17 19:40:59.664 - info: socketio.0 (736) socket.io server listening on port 8088
                                            2024-04-17 19:41:00.005 - error: javascript.0 (706) script.js.Scripte.CronJobs: In Function
                                            2024-04-17 19:41:10.002 - error: javascript.0 (706) script.js.Scripte.CronJobs: In Function
                                            2024-04-17 19:41:20.001 - error: javascript.0 (706) script.js.Scripte.CronJobs: In Function
                                            
                                            
                                            Homoran 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            578
                                            Online

                                            31.6k
                                            Users

                                            79.4k
                                            Topics

                                            1.3m
                                            Posts

                                            13
                                            53
                                            2078
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo