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. setinteval Zeiten

NEWS

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

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

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

setinteval Zeiten

Geplant Angeheftet Gesperrt Verschoben JavaScript
27 Beiträge 5 Kommentatoren 2.1k 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.
  • 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 Nicht stören
    T Nicht stören
    ticaki
    schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
    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
      schrieb am zuletzt editiert von
      #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 Antwort Letzte Antwort
      0
      • paul53P paul53

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

        230 ns.

        T Nicht stören
        T Nicht stören
        ticaki
        schrieb am zuletzt editiert von
        #20

        @paul53
        argh, hast recht habs nicht gerechnet.

        Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

        Spenden

        1 Antwort Letzte Antwort
        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 Nicht stören
          T Nicht stören
          ticaki
          schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
          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 Offline
            L Offline
            Laser
            schrieb am zuletzt editiert von
            #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 Antworten Letzte Antwort
            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
              schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
              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
                schrieb am zuletzt editiert von
                #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 Antwort Letzte Antwort
                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 Offline
                  L Offline
                  Laser
                  schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
                  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 Nicht stören
                    T Nicht stören
                    ticaki
                    schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
                    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 Offline
                      L Offline
                      Laser
                      schrieb am zuletzt editiert von
                      #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 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

                      554

                      Online

                      32.4k

                      Benutzer

                      81.5k

                      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