Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. VU Meter / Treshold / Peak

    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

    VU Meter / Treshold / Peak

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

      @bavarian sagte: 250 240 230 220 ... 150 und das für zB 200ms

      Alle 20 ms einen neuen Wert zu berechnen und in einen Datenpunkt zu schreiben, ist schon recht sportlich und könnte die CPU hoch auslasten.

      B 1 Reply Last reply Reply Quote 0
      • B
        Bavarian @paul53 last edited by

        @paul53
        Werde ich erst wissen, wenn ich es probiert habe.
        Über Node-Red verarbeite ich Daten einer Seriellenschnittstelle und speicher auch in DP und die Auslastung wird kaum erhöht.
        Die Performance des RPI4 ist dafür hoch genug.

        Müsste man wie gesagt mal testen, nur dazu fehlt mir das Programmierwissen in JS

        paul53 1 Reply Last reply Reply Quote 0
        • paul53
          paul53 @Bavarian last edited by paul53

          @bavarian sagte: Müsste man wie gesagt mal testen

          Dann teste mal:

          const idVolume = 'abc'; 
          const idZeiger = '0_userdata.0.xyz'; 
          
          var volume = getState(idVolume).val;
          var zeiger = volume;
          var intervall = null;
          
          on(idVolume, function(dp) {
              volume = dp.state.val;
              if(volume >= zeiger) {
                  if(intervall) {
                      clearInterval(intervall);
                      intervall = null;
                  }    
                  zeiger = volume;
                  setState(idZeiger, zeiger, true);
              } else if(!intervall) {
                  intervall = setInterval(function() {
                      zeiger -= 10;
                      if(zeiger < volume) zeiger = volume;
                      setState(idZeiger, zeiger, true);
                  }, 20);
              }
          });
          
          B 2 Replies Last reply Reply Quote 0
          • B
            Bavarian @paul53 last edited by

            @paul53 vielen Dank!
            Ich komme da leider erst nach dem langen Wochenende zu.
            Werde dann ein Feedback geben!

            1 Reply Last reply Reply Quote 0
            • B
              Bavarian @paul53 last edited by

              @paul53

              Servus Paul, das funktioniert prima!
              Absolut keine Performance Probleme, der RPI4 hat eine CPU Auslastung von ca 35%.
              Gibt es noch die Möglichkeit einen kleinen Peakhold einzubauen?
              Also den letzten Spitzenwert für ein paar ms stehen lassen und dann weiter erst runter rechnen?

              paul53 1 Reply Last reply Reply Quote 0
              • paul53
                paul53 @Bavarian last edited by

                @bavarian sagte: Spitzenwert für ein paar ms stehen lassen und dann weiter erst runter rechnen?

                Das Intervall verzögert um 20 ms. Ist das zu kurz?

                B 1 Reply Last reply Reply Quote 0
                • B
                  Bavarian @paul53 last edited by

                  @paul53
                  Ja der Intervall ist ja linear.
                  Peakhold wäre Spitzenwert etwas länger stehen lassen und danach runter rechnen.

                  zB. Peak erkannt, bleibt 80ms danach wie jetzt in 20ms Schritten runter-rechnen auf Null oder auf den nächsten Peak.

                  paul53 2 Replies Last reply Reply Quote 0
                  • paul53
                    paul53 @Bavarian last edited by paul53

                    @bavarian sagte: bleibt 80ms danach wie jetzt in 20ms Schritten runter-rechnen

                    const idVolume = 'abc'; 
                    const idZeiger = '0_userdata.0.xyz'; 
                     
                    var volume = getState(idVolume).val;
                    var zeiger = volume;
                    var intervall = null;
                    var hold = null;
                     
                    on(idVolume, function(dp) {
                        volume = dp.state.val;
                        if(volume >= zeiger) {
                            if(hold) {
                                clearTimeout(hold);
                                clearInterval(intervall);
                                hold = null;
                            }    
                            zeiger = volume;
                            setState(idZeiger, zeiger, true);
                        } else if(!hold) {
                            hold = setTimeout(function() {
                                intervall = setInterval(function() {
                                    zeiger -= 10;
                                    if(zeiger < volume) zeiger = volume;
                                    setState(idZeiger, zeiger, true);
                                }, 20);
                            }, 60);
                        }
                    });
                    
                    1 Reply Last reply Reply Quote 0
                    • paul53
                      paul53 @Bavarian last edited by paul53

                      @bavarian
                      Beim Update des Javascript-Adapters musst Du daran denken, die Zahl der setState() pro Minute in der Konfiguration hoch zu setzen.

                      B 1 Reply Last reply Reply Quote 0
                      • B
                        Bavarian @paul53 last edited by

                        @paul53
                        Hut ab, das klappt echt richtig gut!
                        Keinerlei Probleme mit der Performance...

                        Danke auch für den Hinweis mit dem setState().

                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        790
                        Online

                        31.8k
                        Users

                        80.0k
                        Topics

                        1.3m
                        Posts

                        2
                        11
                        482
                        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