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

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

    @laser said in setinteval Zeiten:

    Starten mehrere Programme/Scripte mit "setinterval" gleichzeitig oder welche Regel gilt da?

    javascript ist ein single threaded system.
    das heißt in einem Prozess kann immer nur genau eine einzige Codezeile gleichzeitig ausgeführt werden. (man kann natürlich mehrere javascript prozesse gleichzeitig starten, aber das ist nur was für fortgeschrittene und benötigt ein normal-programmierer nicht)

    wenn du setinterval startet, dann wird zu gegebener zeit vom eventloop der javascript-engines der Aufruf deiner funktion auf den stack gelegt und bei nächster Gelegenheit (bspw eine evtl andere Funktion im skript ist fertig und springt zurück) aufgerufen.
    daher gibt es auch keine garantie, das deine funktion exakt nach bspw 2000ms aufgerufen wird, sondern nur so ungefähr.
    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Event_loop

    wie paul schon erwähnt hat, sollte die intervalzeit länger sein, wie die dauer der Abarbeitung der funktion.. Hintergrund ist, das wenn die funktion noch nicht fertig ist, ja schon wieder der nächste aufruf auf dem stack liegt und dann keine zeit mehr übrig bleibt andere dinge zu tun. das system/prozess wird langsam und irgendwann läuft der stack über, dann wird der prozess vom betriebssystem beendet.
    aber wie gesagt, da ist viel luft bei 1-2 sekunden.
    https://developer.mozilla.org/en-US/docs/Web/API/setInterval

    Noch sicherer wäre es mit setTimeout zu arbeiten und die nächste Verarbeitung erst am Ende der vorhergehenden zu starten. Dann kann es keine Probleme geben.

    Allerding muss man sich fragen, was du mit so einer geringen Auflösung an Genauigkeit den tatsächlich machen willst. Evtl gibt es eine andere Lösung dafür?

    L Offline
    L Offline
    Laser
    schrieb am zuletzt editiert von Laser
    #7

    @oliverio ich möchte zum Beispiel die Spannung meines PV-Akku's überwachen. Wenn der langsam "leer" wird, soll ein Verbraucher abschalten. Wenn "voll" das Laden beenden. Eine andere Anwendung ist, das Steigen oder Sinken eines Temperaturwertes zu detektieren. Beide Werte "klappern" aber etwas hin und her.
    Für mich ist wichtig, daß die Funktion überhaupt abgearbeitet wird, ob nach 2 oder 3 Sekunden, ist egal.

    OliverIOO 1 Antwort Letzte Antwort
    0
    • L Laser

      @oliverio ich möchte zum Beispiel die Spannung meines PV-Akku's überwachen. Wenn der langsam "leer" wird, soll ein Verbraucher abschalten. Wenn "voll" das Laden beenden. Eine andere Anwendung ist, das Steigen oder Sinken eines Temperaturwertes zu detektieren. Beide Werte "klappern" aber etwas hin und her.
      Für mich ist wichtig, daß die Funktion überhaupt abgearbeitet wird, ob nach 2 oder 3 Sekunden, ist egal.

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

      @laser
      ok,
      sorry das ich dich mit zu viel Informationen zugeschüttet habe.

      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
      0
      • OliverIOO OliverIO

        @laser
        ok,
        sorry das ich dich mit zu viel Informationen zugeschüttet habe.

        L Offline
        L Offline
        Laser
        schrieb am zuletzt editiert von
        #9

        @oliverio Ist nicht zu viel, muß ich aber erst durcharbeiten.

        OliverIOO 1 Antwort Letzte Antwort
        0
        • L Laser

          @oliverio Ist nicht zu viel, muß ich aber erst durcharbeiten.

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

          @laser
          Das Gerät meldet den Wert nicht von sich aus?
          Das was du da machst, nennt sich pollen.
          Manche Geräte/APIs bieten die Möglichkeit sich dort technisch zu registrieren und die melden dann wenn es eine Veränderung gibt.

          Auch musst du daran denken, wenn du das Gerät direkt abfragst (und nicht den Datenpunkt), beschäftigst du das Gerät, was uU verhindert, das es in einen Stromsparmodus geht und so wieder mehr Strom verbraucht.

          Auch könnte eine Abfrage pro Minute auch schon reichen, da du da ja nicht zu einem exakten Zeitpunkt abschalten musst, sondern nur wenn gewisse Grenzen überschritten sind. Das wäre dann der Fall, wenn innerhalb einer Minute weniger als 1 Prozent verbraucht wird. Wenn der Verbrauch größer innerhalb einer Minute ist, dann kann man den Zeitraum vergrößern.

          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
          0
          • OliverIOO OliverIO

            @laser
            Das Gerät meldet den Wert nicht von sich aus?
            Das was du da machst, nennt sich pollen.
            Manche Geräte/APIs bieten die Möglichkeit sich dort technisch zu registrieren und die melden dann wenn es eine Veränderung gibt.

            Auch musst du daran denken, wenn du das Gerät direkt abfragst (und nicht den Datenpunkt), beschäftigst du das Gerät, was uU verhindert, das es in einen Stromsparmodus geht und so wieder mehr Strom verbraucht.

            Auch könnte eine Abfrage pro Minute auch schon reichen, da du da ja nicht zu einem exakten Zeitpunkt abschalten musst, sondern nur wenn gewisse Grenzen überschritten sind. Das wäre dann der Fall, wenn innerhalb einer Minute weniger als 1 Prozent verbraucht wird. Wenn der Verbrauch größer innerhalb einer Minute ist, dann kann man den Zeitraum vergrößern.

            L Offline
            L Offline
            Laser
            schrieb am zuletzt editiert von Laser
            #11

            @oliverio Im Falle der Spannungsüberwachung reicht ein größerer Zeitraum, so schnell entlädt der Akku nicht. Das Gerät (Victron Akkulader) bietet einen Grenzwert, ich möchte aber vorher reagieren. Der Grenzwert ist dann eine weitere Sicherheit, noch vor dem Batterieinternen BMS. Ob der Lader einen Stromsparmodus hat, weiß ich nicht. Das "pollen" brauche ich für verschiedene Überwachungen. Vlt. nicht ideal, aber einfach in der Anwendung. Oftmals reicht ein Intervall von 3-5 Sekunden.
            In der Funktion werden eigentlich nur Werte abgefragt und verglichen. Und ein Schreibe- oder Schaltbefehl generiert. Sollte wesentlich schneller gehen als die " interval"- Zeit.

            T 1 Antwort Letzte Antwort
            0
            • L Laser

              @oliverio Im Falle der Spannungsüberwachung reicht ein größerer Zeitraum, so schnell entlädt der Akku nicht. Das Gerät (Victron Akkulader) bietet einen Grenzwert, ich möchte aber vorher reagieren. Der Grenzwert ist dann eine weitere Sicherheit, noch vor dem Batterieinternen BMS. Ob der Lader einen Stromsparmodus hat, weiß ich nicht. Das "pollen" brauche ich für verschiedene Überwachungen. Vlt. nicht ideal, aber einfach in der Anwendung. Oftmals reicht ein Intervall von 3-5 Sekunden.
              In der Funktion werden eigentlich nur Werte abgefragt und verglichen. Und ein Schreibe- oder Schaltbefehl generiert. Sollte wesentlich schneller gehen als die " interval"- Zeit.

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

              @laser sagte in setinteval Zeiten:

              @oliverio Im Falle der Spannungsüberwachung reicht ein größerer Zeitraum, so schnell entlädt der Akku nicht. Das Gerät (Victron Akkulader) bietet einen Grenzwert, ich möchte aber vorher reagieren. Der Grenzwert ist dann eine weitere Sicherheit, noch vor dem Batterieinternen BMS. Ob der Lader einen Stromsparmodus hat, weiß ich nicht. Das "pollen" brauche ich für verschiedene Überwachungen. Vlt. nicht ideal, aber einfach in der Anwendung. Oftmals reicht ein Intervall von 3-5 Sekunden.
              In der Funktion werden eigentlich nur Werte abgefragt und verglichen. Und ein Schreibe- oder Schaltbefehl generiert. Sollte wesenlich schneller gehen als die " interval"- Zeit.

              Wesentlich? Wenn du etwas ein paar Millionen mal machen kannst, in der von dir vorgegebenen Zeit ist "wesentlich scheller" nicht ganz die Beschreibung die ich wählen würde. :)

              Intervalle im Sekundenbereich sind wie oben geschrieben kein Problem solange du deine Werte über Trigger oder getState() bekommst.

              Die Ausgabe muß aber auch bedacht werden, wenn du damit z.B. ein Relais schaltest, muß du verhindern das der Ausgabewert flackert. Bei meiner Warmwassersteuerung, braucht es 4 Minuten bis es an geht und 2 Minuten bis es aus geht, anschließend ist es für 5 Minuten gesperrt und würde bei Minute 6 wieder angehen. Wenn das durchgehend so geschaltet würde wäre mein Relais nach ca. 4 Jahren kaputt... wirds aber nicht. Da die Zieltemperatur bei 40% der Schaltvorgänge erreicht wäre, also hälts 10 Jahre. Da so ein bescheuertes Wetter nicht so oft vorkommt, sind wohl eher 20 Jahre. :)

              Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

              Spenden

              L 1 Antwort Letzte Antwort
              0
              • T ticaki

                @laser sagte in setinteval Zeiten:

                @oliverio Im Falle der Spannungsüberwachung reicht ein größerer Zeitraum, so schnell entlädt der Akku nicht. Das Gerät (Victron Akkulader) bietet einen Grenzwert, ich möchte aber vorher reagieren. Der Grenzwert ist dann eine weitere Sicherheit, noch vor dem Batterieinternen BMS. Ob der Lader einen Stromsparmodus hat, weiß ich nicht. Das "pollen" brauche ich für verschiedene Überwachungen. Vlt. nicht ideal, aber einfach in der Anwendung. Oftmals reicht ein Intervall von 3-5 Sekunden.
                In der Funktion werden eigentlich nur Werte abgefragt und verglichen. Und ein Schreibe- oder Schaltbefehl generiert. Sollte wesenlich schneller gehen als die " interval"- Zeit.

                Wesentlich? Wenn du etwas ein paar Millionen mal machen kannst, in der von dir vorgegebenen Zeit ist "wesentlich scheller" nicht ganz die Beschreibung die ich wählen würde. :)

                Intervalle im Sekundenbereich sind wie oben geschrieben kein Problem solange du deine Werte über Trigger oder getState() bekommst.

                Die Ausgabe muß aber auch bedacht werden, wenn du damit z.B. ein Relais schaltest, muß du verhindern das der Ausgabewert flackert. Bei meiner Warmwassersteuerung, braucht es 4 Minuten bis es an geht und 2 Minuten bis es aus geht, anschließend ist es für 5 Minuten gesperrt und würde bei Minute 6 wieder angehen. Wenn das durchgehend so geschaltet würde wäre mein Relais nach ca. 4 Jahren kaputt... wirds aber nicht. Da die Zieltemperatur bei 40% der Schaltvorgänge erreicht wäre, also hälts 10 Jahre. Da so ein bescheuertes Wetter nicht so oft vorkommt, sind wohl eher 20 Jahre. :)

                L Offline
                L Offline
                Laser
                schrieb am zuletzt editiert von Laser
                #13

                @ticaki Damit die Ausgabe nicht "flackert", baue ich eben etwas ein. Entweder eine Mittelwertbildung, eine Hysterese oder etwas Anderes. "Wesentlich schneller", etwas Anderes fiel mir gerade nicht ein. Ich frage z.B. einen Datenpunkt ab. Mit getState. Das geht in einer kürzeren Zeit als mich die 3 Sekunden "interval" limitieren. ( Hoffe ich mal.)

                T 1 Antwort Letzte Antwort
                0
                • L Laser

                  @ticaki Damit die Ausgabe nicht "flackert", baue ich eben etwas ein. Entweder eine Mittelwertbildung, eine Hysterese oder etwas Anderes. "Wesentlich schneller", etwas Anderes fiel mir gerade nicht ein. Ich frage z.B. einen Datenpunkt ab. Mit getState. Das geht in einer kürzeren Zeit als mich die 3 Sekunden "interval" limitieren. ( Hoffe ich mal.)

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

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

                  Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                  Spenden

                  OliverIOO 1 Antwort Letzte Antwort
                  0
                  • T ticaki

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

                    OliverIOO Offline
                    OliverIOO Offline
                    OliverIO
                    schrieb am zuletzt editiert von 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 Antworten Letzte Antwort
                    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
                      schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
                      0
                      • paul53P paul53

                        @oliverio sagte: Mikrosekunden

                        Es sind wohl eher wenige Mikrosekunden.
                        Getestet:

                        • RasPi 2: 20 µs
                        • i7: 0,3 µs
                        L Offline
                        L Offline
                        Laser
                        schrieb am zuletzt editiert von
                        #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 Antwort Letzte Antwort
                        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 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
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          553

                                          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