Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. setinteval Zeiten

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.4k

setinteval Zeiten

Scheduled Pinned Locked Moved JavaScript
27 Posts 5 Posters 2.1k Views 3 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • T ticaki

    @laser
    Abfragen eines Datenpunktes mit getState() dauert irgendwas im Nanosekunden Bereich

    OliverIOO Offline
    OliverIOO Offline
    OliverIO
    wrote on last edited by OliverIO
    #15

    @ticaki said in setinteval Zeiten:

    Nanosekunden

    eher nicht.
    ich hab mal vor einiger Zeit Messungen gemacht, da hat get/setState so zwischen 10 und 30 ms auf einem NUC mit Celeron benötigt. Auf einem neueren i7 evtl etwas schneller.
    Aber Nano-Bereich würde ich bezweifeln.
    1.000ms = 1 Sekunde
    1.000.000.000 ns = 1 Sekunde
    dazwischen gäbe es noch Mikrosekunden

    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 T 2 Replies Last reply
    0
    • OliverIOO OliverIO

      @ticaki said in setinteval Zeiten:

      Nanosekunden

      eher nicht.
      ich hab mal vor einiger Zeit Messungen gemacht, da hat get/setState so zwischen 10 und 30 ms auf einem NUC mit Celeron benötigt. Auf einem neueren i7 evtl etwas schneller.
      Aber Nano-Bereich würde ich bezweifeln.
      1.000ms = 1 Sekunde
      1.000.000.000 ns = 1 Sekunde
      dazwischen gäbe es noch Mikrosekunden

      paul53P Offline
      paul53P Offline
      paul53
      wrote on last edited by paul53
      #16

      @oliverio sagte: Mikrosekunden

      Es sind wohl eher wenige Mikrosekunden.
      Getestet:

      • RasPi 2: 20 µs
      • i7: 0,3 µs

      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

      L 1 Reply Last reply
      0
      • paul53P paul53

        @oliverio sagte: Mikrosekunden

        Es sind wohl eher wenige Mikrosekunden.
        Getestet:

        • RasPi 2: 20 µs
        • i7: 0,3 µs
        L Online
        L Online
        Laser
        wrote on last edited by
        #17

        @paul53 Habe versucht, über "htop" auf der Konsole etwas auszuloten. So richtig erkennbar ist das nichts. Vermutlich sind die laufenden Scripte auch dermaßen winzig, so daß man nichts mitbekommt, egal, ob alle 10 Sec. oder 1 Sec. abgefragt.

        T 1 Reply Last reply
        0
        • OliverIOO OliverIO

          @ticaki said in setinteval Zeiten:

          Nanosekunden

          eher nicht.
          ich hab mal vor einiger Zeit Messungen gemacht, da hat get/setState so zwischen 10 und 30 ms auf einem NUC mit Celeron benötigt. Auf einem neueren i7 evtl etwas schneller.
          Aber Nano-Bereich würde ich bezweifeln.
          1.000ms = 1 Sekunde
          1.000.000.000 ns = 1 Sekunde
          dazwischen gäbe es noch Mikrosekunden

          T Do not disturb
          T Do not disturb
          ticaki
          wrote on last edited by ticaki
          #18

          @oliverio

          script.js.Test.Skript_122: 100000 x getState().val in 23ms
          script.js.Test.Skript_122: while (i++ < 1000000) x = (x+2)/6+i in 8ms
          

          Das sind dann was? 2,3ns

          war N100 Proxmox 1 core

          var i=0
          var start = new Date().getTime()
          while (i++ < 1000) {
              let x = getState('0_userdata.0.Test').val
              x = (x+2)/6+i
              setState('0_userdata.0.Test',x)
          }
          var sum = new Date().getTime() - start
          log('code in '+sum+'ms')
          
          code in 6ms
          

          Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

          Spenden

          paul53P 1 Reply Last reply
          0
          • T ticaki

            @oliverio

            script.js.Test.Skript_122: 100000 x getState().val in 23ms
            script.js.Test.Skript_122: while (i++ < 1000000) x = (x+2)/6+i in 8ms
            

            Das sind dann was? 2,3ns

            war N100 Proxmox 1 core

            var i=0
            var start = new Date().getTime()
            while (i++ < 1000) {
                let x = getState('0_userdata.0.Test').val
                x = (x+2)/6+i
                setState('0_userdata.0.Test',x)
            }
            var sum = new Date().getTime() - start
            log('code in '+sum+'ms')
            
            code in 6ms
            
            paul53P Offline
            paul53P Offline
            paul53
            wrote on last edited by
            #19

            @ticaki sagte: Das sind dann was? 2,3ns

            230 ns.

            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

            T 1 Reply Last reply
            0
            • paul53P paul53

              @ticaki sagte: Das sind dann was? 2,3ns

              230 ns.

              T Do not disturb
              T Do not disturb
              ticaki
              wrote on last edited by
              #20

              @paul53
              argh, hast recht habs nicht gerechnet.

              Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

              Spenden

              1 Reply Last reply
              0
              • L Laser

                @paul53 Habe versucht, über "htop" auf der Konsole etwas auszuloten. So richtig erkennbar ist das nichts. Vermutlich sind die laufenden Scripte auch dermaßen winzig, so daß man nichts mitbekommt, egal, ob alle 10 Sec. oder 1 Sec. abgefragt.

                T Do not disturb
                T Do not disturb
                ticaki
                wrote on last edited by ticaki
                #21

                @laser sagte in setinteval Zeiten:

                @paul53 Habe versucht, über "htop" auf der Konsole etwas auszuloten. So richtig erkennbar ist das nichts. Vermutlich sind die laufenden Scripte auch dermaßen winzig, so daß man nichts mitbekommt, egal, ob alle 10 Sec. oder 1 Sec. abgefragt.

                Das geht schon :) Lass es einen Tag laufen und schau dir an wieviel CPU-Zeit die Javascript Instanze verbraucht bei mir ist sie auf platz 3 - wenn redis 100h hat, hat shelly 25h und Javascript 8h. Aber ansonsten sieht du mit htop nur wenn es hängt.

                Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                Spenden

                L 1 Reply Last reply
                0
                • T ticaki

                  @laser sagte in setinteval Zeiten:

                  @paul53 Habe versucht, über "htop" auf der Konsole etwas auszuloten. So richtig erkennbar ist das nichts. Vermutlich sind die laufenden Scripte auch dermaßen winzig, so daß man nichts mitbekommt, egal, ob alle 10 Sec. oder 1 Sec. abgefragt.

                  Das geht schon :) Lass es einen Tag laufen und schau dir an wieviel CPU-Zeit die Javascript Instanze verbraucht bei mir ist sie auf platz 3 - wenn redis 100h hat, hat shelly 25h und Javascript 8h. Aber ansonsten sieht du mit htop nur wenn es hängt.

                  L Online
                  L Online
                  Laser
                  wrote on last edited by
                  #22

                  @ticaki lasse das heute nochmal laufen. Gestern lag Javascript aber relativ hoch (über Shelly). Aber weit weg von hoher Auslastung.
                  Ein Problem habe ich noch. Ich vergleiche zwei Zahlenwerte (so der Plan).

                    function akkumess() { 
                       let minwert, spannung;
                       let gpiostate, minalarm;
                       gpiostate = getState('rpi2.0.gpio.22.state'/*Gpio 22*/).val;
                       minalarm  = getState('javascript.0.Logik.AkkuMin'/*AkkuMin*/).val;
                       minwert   = getState('javascript.0.variables.AkkuMinWert'/**/).val;
                       spannung  = getState('vedirect.0.V'/*Main or channel 1 (battery) voltage*/).val;
                        //console.log("Min-Wert: " + minwert);
                        //console.log("spannung: " + spannung);
                        //console.log("22 State:"  + gpiostate);
                        //console.log("minalarm :" +minalarm);
                  
                    if ((spannung <= minwert) & (minalarm == false)) {
                  

                  Der "minwert" wurde mit einem Komma als Dezimaltrenner gezeigt. Wie das Komma da reingekommen ist, weiß ich nicht.
                  Da spielt immer noch das Problem rein, wenn einmal etwas gespeichert wurde, bleibt es nach einer Änderung erhalten.
                  Nach JS Adapter "Restart" ist es dann meist richtig. Aber nicht immer. Wie kann ich einen bestimmten Datentyp "erzwingen" ? Der Vergleich mit dem Komma und dem Punkt klappte natürlich nicht. Wenn sowas unbemerkt bleibt, ist es sehr schlecht. Der Datenpunkt "AkkuMinWert" ist als Zahl deklariert.

                  paul53P OliverIOO T 3 Replies Last reply
                  0
                  • L Laser

                    @ticaki lasse das heute nochmal laufen. Gestern lag Javascript aber relativ hoch (über Shelly). Aber weit weg von hoher Auslastung.
                    Ein Problem habe ich noch. Ich vergleiche zwei Zahlenwerte (so der Plan).

                      function akkumess() { 
                         let minwert, spannung;
                         let gpiostate, minalarm;
                         gpiostate = getState('rpi2.0.gpio.22.state'/*Gpio 22*/).val;
                         minalarm  = getState('javascript.0.Logik.AkkuMin'/*AkkuMin*/).val;
                         minwert   = getState('javascript.0.variables.AkkuMinWert'/**/).val;
                         spannung  = getState('vedirect.0.V'/*Main or channel 1 (battery) voltage*/).val;
                          //console.log("Min-Wert: " + minwert);
                          //console.log("spannung: " + spannung);
                          //console.log("22 State:"  + gpiostate);
                          //console.log("minalarm :" +minalarm);
                    
                      if ((spannung <= minwert) & (minalarm == false)) {
                    

                    Der "minwert" wurde mit einem Komma als Dezimaltrenner gezeigt. Wie das Komma da reingekommen ist, weiß ich nicht.
                    Da spielt immer noch das Problem rein, wenn einmal etwas gespeichert wurde, bleibt es nach einer Änderung erhalten.
                    Nach JS Adapter "Restart" ist es dann meist richtig. Aber nicht immer. Wie kann ich einen bestimmten Datentyp "erzwingen" ? Der Vergleich mit dem Komma und dem Punkt klappte natürlich nicht. Wenn sowas unbemerkt bleibt, ist es sehr schlecht. Der Datenpunkt "AkkuMinWert" ist als Zahl deklariert.

                    paul53P Offline
                    paul53P Offline
                    paul53
                    wrote on last edited by paul53
                    #23

                    @laser sagte: Der Datenpunkt "AkkuMinWert" ist als Zahl deklariert.

                    Das spielt keine Rolle, wenn er mit Komma dorthin geschrieben wird - dann bleibt es ein String.

                    @laser sagte in setinteval Zeiten:

                    Wie kann ich einen bestimmten Datentyp "erzwingen" ?

                         if(typeof minwert == 'string') minwert  = parseFloat(minwert.replace(',', '.'));
                    

                    Das & in Zeile 13 ist falsch. Richtig logisches UND: &&

                    Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                    Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                    1 Reply Last reply
                    1
                    • L Laser

                      @ticaki lasse das heute nochmal laufen. Gestern lag Javascript aber relativ hoch (über Shelly). Aber weit weg von hoher Auslastung.
                      Ein Problem habe ich noch. Ich vergleiche zwei Zahlenwerte (so der Plan).

                        function akkumess() { 
                           let minwert, spannung;
                           let gpiostate, minalarm;
                           gpiostate = getState('rpi2.0.gpio.22.state'/*Gpio 22*/).val;
                           minalarm  = getState('javascript.0.Logik.AkkuMin'/*AkkuMin*/).val;
                           minwert   = getState('javascript.0.variables.AkkuMinWert'/**/).val;
                           spannung  = getState('vedirect.0.V'/*Main or channel 1 (battery) voltage*/).val;
                            //console.log("Min-Wert: " + minwert);
                            //console.log("spannung: " + spannung);
                            //console.log("22 State:"  + gpiostate);
                            //console.log("minalarm :" +minalarm);
                      
                        if ((spannung <= minwert) & (minalarm == false)) {
                      

                      Der "minwert" wurde mit einem Komma als Dezimaltrenner gezeigt. Wie das Komma da reingekommen ist, weiß ich nicht.
                      Da spielt immer noch das Problem rein, wenn einmal etwas gespeichert wurde, bleibt es nach einer Änderung erhalten.
                      Nach JS Adapter "Restart" ist es dann meist richtig. Aber nicht immer. Wie kann ich einen bestimmten Datentyp "erzwingen" ? Der Vergleich mit dem Komma und dem Punkt klappte natürlich nicht. Wenn sowas unbemerkt bleibt, ist es sehr schlecht. Der Datenpunkt "AkkuMinWert" ist als Zahl deklariert.

                      OliverIOO Offline
                      OliverIOO Offline
                      OliverIO
                      wrote on last edited by
                      #24

                      @laser
                      ich weiß nicht, ob das beobachten der Auslastung da tatsächlich ein Hinweis bietet.
                      Wenn du die Laufzeit deiner Funktion in ms messen möchtest, dann könntest du das folgende einbauen

                      var start=new Date().getTime();
                      //hier dein code
                      var end=new Date().getTime();
                      console.log(end-start);
                      
                      

                      Ein Wert der ein Komma enthält wird immer als String gespeichert.
                      Du musst das komma erst ein ein . verwandeln. Besser wäre es das bereits an der Quelle zu ändern, wenn aber das von aussen schon so reinkommt, dann halt im Skript

                      "123,45".replace(",",".")
                      

                      Wenn du das dann in einen expliziten Typ umwandeln willst, kannst du den jeweiligen Typ-Konstruktor verwenden

                      Number("123.45")+5
                      oder
                      parseFloat("123.45")  //parseFloat hat den Vorteil, das es flexibler mit ungültigen Zeichen umgeht
                      parseFloat("3px")  // -> 3
                      Number("3px")  // -> NaN
                      

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

                      L 1 Reply Last reply
                      1
                      • OliverIOO OliverIO

                        @laser
                        ich weiß nicht, ob das beobachten der Auslastung da tatsächlich ein Hinweis bietet.
                        Wenn du die Laufzeit deiner Funktion in ms messen möchtest, dann könntest du das folgende einbauen

                        var start=new Date().getTime();
                        //hier dein code
                        var end=new Date().getTime();
                        console.log(end-start);
                        
                        

                        Ein Wert der ein Komma enthält wird immer als String gespeichert.
                        Du musst das komma erst ein ein . verwandeln. Besser wäre es das bereits an der Quelle zu ändern, wenn aber das von aussen schon so reinkommt, dann halt im Skript

                        "123,45".replace(",",".")
                        

                        Wenn du das dann in einen expliziten Typ umwandeln willst, kannst du den jeweiligen Typ-Konstruktor verwenden

                        Number("123.45")+5
                        oder
                        parseFloat("123.45")  //parseFloat hat den Vorteil, das es flexibler mit ungültigen Zeichen umgeht
                        parseFloat("3px")  // -> 3
                        Number("3px")  // -> NaN
                        
                        L Online
                        L Online
                        Laser
                        wrote on last edited by Laser
                        #25

                        @oliverio , @paul53
                        Das Doppelund (&&) ist mir beim "Aufräumen" verlustig gegangen. Steht wieder drin.
                        Mit "parse" werde ich mich beschäftigen.
                        Die Auslastung wird sicher erst wichtig, wenn der Pi kurz vor dem Blockieren ist.

                        1 Reply Last reply
                        0
                        • L Laser

                          @ticaki lasse das heute nochmal laufen. Gestern lag Javascript aber relativ hoch (über Shelly). Aber weit weg von hoher Auslastung.
                          Ein Problem habe ich noch. Ich vergleiche zwei Zahlenwerte (so der Plan).

                            function akkumess() { 
                               let minwert, spannung;
                               let gpiostate, minalarm;
                               gpiostate = getState('rpi2.0.gpio.22.state'/*Gpio 22*/).val;
                               minalarm  = getState('javascript.0.Logik.AkkuMin'/*AkkuMin*/).val;
                               minwert   = getState('javascript.0.variables.AkkuMinWert'/**/).val;
                               spannung  = getState('vedirect.0.V'/*Main or channel 1 (battery) voltage*/).val;
                                //console.log("Min-Wert: " + minwert);
                                //console.log("spannung: " + spannung);
                                //console.log("22 State:"  + gpiostate);
                                //console.log("minalarm :" +minalarm);
                          
                            if ((spannung <= minwert) & (minalarm == false)) {
                          

                          Der "minwert" wurde mit einem Komma als Dezimaltrenner gezeigt. Wie das Komma da reingekommen ist, weiß ich nicht.
                          Da spielt immer noch das Problem rein, wenn einmal etwas gespeichert wurde, bleibt es nach einer Änderung erhalten.
                          Nach JS Adapter "Restart" ist es dann meist richtig. Aber nicht immer. Wie kann ich einen bestimmten Datentyp "erzwingen" ? Der Vergleich mit dem Komma und dem Punkt klappte natürlich nicht. Wenn sowas unbemerkt bleibt, ist es sehr schlecht. Der Datenpunkt "AkkuMinWert" ist als Zahl deklariert.

                          T Do not disturb
                          T Do not disturb
                          ticaki
                          wrote on last edited by ticaki
                          #26

                          @laser

                          Zur Auslastung, glaube mir einfach, mit den Skripten die du schreibst, wirst du da nie ein Problem haben, solange du halt nicht mit setInterval in dem Millisekundenbereich kommst oder Schleifen mit zehntausenden Abfragen benutzt.

                          Und zu shelly... ich hab 20 Geräte mit 5 Sekundenaktualisierung Großteil davon sind 1/2pm und 2 em3. Da wird einiges an Daten bewegt und das 24/7. Das als Begründung warum es bei mir viel Zeit benötigt.

                          Wenn du dir tatsächlich Gedanken darüber machst, dann prüfe ab und an ob eine Core oder der Speicher auf 100% Auslastung ist oder der Load Average größter/gleich (beim 3. Wert) 4 dann mußte was machen.

                          Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                          Spenden

                          L 1 Reply Last reply
                          0
                          • T ticaki

                            @laser

                            Zur Auslastung, glaube mir einfach, mit den Skripten die du schreibst, wirst du da nie ein Problem haben, solange du halt nicht mit setInterval in dem Millisekundenbereich kommst oder Schleifen mit zehntausenden Abfragen benutzt.

                            Und zu shelly... ich hab 20 Geräte mit 5 Sekundenaktualisierung Großteil davon sind 1/2pm und 2 em3. Da wird einiges an Daten bewegt und das 24/7. Das als Begründung warum es bei mir viel Zeit benötigt.

                            Wenn du dir tatsächlich Gedanken darüber machst, dann prüfe ab und an ob eine Core oder der Speicher auf 100% Auslastung ist oder der Load Average größter/gleich (beim 3. Wert) 4 dann mußte was machen.

                            L Online
                            L Online
                            Laser
                            wrote on last edited by
                            #27

                            @ticaki Die Scripte von mir sind Null Komma null nichts. Wenn da nicht ein riesiger IOBroker Overheed dranhängt....
                            Die 2 Energie- Shellys frage ich auch mit 5 Sekunden ab.

                            1 Reply Last reply
                            0
                            Reply
                            • Reply as topic
                            Log in to reply
                            • Oldest to Newest
                            • Newest to Oldest
                            • Most Votes


                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            586

                            Online

                            32.4k

                            Users

                            81.6k

                            Topics

                            1.3m

                            Posts
                            Community
                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                            ioBroker Community 2014-2025
                            logo
                            • Login

                            • Don't have an account? Register

                            • Login or register to search.
                            • First post
                              Last post
                            0
                            • Home
                            • Recent
                            • Tags
                            • Unread 0
                            • Categories
                            • Unreplied
                            • Popular
                            • GitHub
                            • Docu
                            • Hilfe