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. VU Meter / Treshold / Peak

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

VU Meter / Treshold / Peak

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
11 Beiträge 2 Kommentatoren 765 Aufrufe 2 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.
  • B Bavarian

    Servus,

    in einem Projekt messe ich eine sich ändernde Spannung wie bei einem Mikrofonpegel und schreibe diesen Wert alle 200ms in einen DP.
    Das klappt soweit sehr gut und auch die Systemlast mit dem RPI4 is sehr gering.
    Eine Balkenanzeige / Gauge funktioniert auch aber da fehlt mir eine Art Threshold Funktion.
    Wenn die Werte zB. 50 180 2 200 160 30 etc ankommen ist das ganze sehr unruhig anzusehen.

    Es soll so werden wie bei einer VU Anzeigen am Verstärker, kommt ein hoher Wert wie 200 und der nächste
    Wert ist kleiner zb. 150, wird der höhere Wert langsam Richtung kleinerem Wert abgebaut. Ist der Wert
    höher dann wird dieser ohne Verzögerung erhöht.
    Es fehlt also die "Trägheit" der Anzeige von Großen auf kleinen Werte.

    Grob gesagt:
    If aktueller Pegel < dem letzten Pegel dann innerhalb von 200 ms auf den kleineren Pegel runter rechnen.
    Bsp: 150 / 250
    Sollte dann innerhalb von 200ms absinken auf 180.
    Dazu braucht es dann errechnete Daten die runter laufen...
    250 240 230 220 ... 150 und das für zB 200ms
    If aktueller Pegel > dem letzten Pegel dann sofort den aktuellen Pegel anzeigen ohne eine Verzögerung.

    Hat jemand sowas schon mal umgesetzt?

    paul53P Offline
    paul53P Offline
    paul53
    schrieb am zuletzt editiert von
    #2

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

    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

    B 1 Antwort Letzte Antwort
    0
    • paul53P paul53

      @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 Offline
      B Offline
      Bavarian
      schrieb am zuletzt editiert von
      #3

      @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

      paul53P 1 Antwort Letzte Antwort
      0
      • B Bavarian

        @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

        paul53P Offline
        paul53P Offline
        paul53
        schrieb am zuletzt editiert von paul53
        #4

        @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);
            }
        });
        

        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

        B 2 Antworten Letzte Antwort
        0
        • paul53P 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 Offline
          B Offline
          Bavarian
          schrieb am zuletzt editiert von
          #5

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

          1 Antwort Letzte Antwort
          0
          • paul53P 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 Offline
            B Offline
            Bavarian
            schrieb am zuletzt editiert von
            #6

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

            paul53P 1 Antwort Letzte Antwort
            0
            • B Bavarian

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

              paul53P Offline
              paul53P Offline
              paul53
              schrieb am zuletzt editiert von
              #7

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

              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

              B 1 Antwort Letzte Antwort
              0
              • paul53P paul53

                @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 Offline
                B Offline
                Bavarian
                schrieb am zuletzt editiert von
                #8

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

                paul53P 2 Antworten Letzte Antwort
                0
                • B Bavarian

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

                  paul53P Offline
                  paul53P Offline
                  paul53
                  schrieb am zuletzt editiert von paul53
                  #9

                  @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);
                      }
                  });
                  

                  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
                  0
                  • B Bavarian

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

                    paul53P Offline
                    paul53P Offline
                    paul53
                    schrieb am zuletzt editiert von paul53
                    #10

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

                    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

                    B 1 Antwort Letzte Antwort
                    0
                    • paul53P paul53

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

                      B Offline
                      B Offline
                      Bavarian
                      schrieb am zuletzt editiert von
                      #11

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

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

                      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

                      445

                      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