Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. setinteval Zeiten

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    setinteval Zeiten

    This topic has been deleted. Only users with topic management privileges can see it.
    • L
      Laser @paul53 last edited by

      @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 Reply Quote 0
      • T
        ticaki Developer @OliverIO last edited by 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
        
        paul53 1 Reply Last reply Reply Quote 0
        • paul53
          paul53 @ticaki last edited by

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

          230 ns.

          T 1 Reply Last reply Reply Quote 0
          • T
            ticaki Developer @paul53 last edited by

            @paul53
            argh, hast recht habs nicht gerechnet.

            1 Reply Last reply Reply Quote 0
            • T
              ticaki Developer @Laser last edited by 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 1 Reply Last reply Reply Quote 0
              • L
                Laser @ticaki last edited by

                @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.

                paul53 OliverIO T 3 Replies Last reply Reply Quote 0
                • paul53
                  paul53 @Laser last edited by paul53

                  @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: &&

                  1 Reply Last reply Reply Quote 1
                  • OliverIO
                    OliverIO @Laser last edited by

                    @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 1 Reply Last reply Reply Quote 1
                    • L
                      Laser @OliverIO last edited by Laser

                      @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 Reply Quote 0
                      • T
                        ticaki Developer @Laser last edited by 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 1 Reply Last reply Reply Quote 0
                        • L
                          Laser @ticaki last edited by

                          @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 Reply Quote 0
                          • First post
                            Last post

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          936
                          Online

                          31.9k
                          Users

                          80.1k
                          Topics

                          1.3m
                          Posts

                          5
                          27
                          1062
                          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