Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [Füllstandsanzeige] Mittelwert von einer bestimmten Anzahl von Werten

    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

    [Füllstandsanzeige] Mittelwert von einer bestimmten Anzahl von Werten

    This topic has been deleted. Only users with topic management privileges can see it.
    • 0
      0__Nik__0 last edited by

      Hallo,

      ich hab mir mit einem WeMos D1 mini und einem HC-SR04 eine Füllstandsanzeige für meinen Heizöltank gebaut.

      Das funktioniert auch sehr gut. Das einzige was mich etwas stört ist das der Wert vom HC-SR04 schwankt (+- 5mm).
      Das sind bei einem 7500 Liter Tak schon ein paar Liter.

      Kann man mit einem Script die Werte "sammeln" und dann nach einer gewissen Anzahl zb. 10 Werte über 10 min den Schnitt nehmen und den dann ausgeben?

      Damit müßte man die Schwankungen vom HC-SR04 ja etwas glätten können ?!

      Sonst schwankt der Füllstand immer +- 100 liter.

      Gruß

      Nik

      1 Reply Last reply Reply Quote 0
      • SBorg
        SBorg Forum Testing Most Active last edited by

        Hi,
        nutzt du den History-Adapter? Da hättest du immer die letzten x-Werte und kannst relativ einfach einen Mittelwert bilden.

        1 Reply Last reply Reply Quote 0
        • Matzebhv
          Matzebhv last edited by

          Moin,

          ja, das geht relativ einfach. Du triggerst auf Änderungen des Sensors und addierst die gemessenen Werte auf.
          Gleichzeitig zählst du bei jeder Werteänderung einen Counter hoch. Nun kannst du jetzt z.B. alle 10 Minuten den aufaddierten Wert durch den Counter teilen. Danach Counter auf 0 setzen und wieder von vorne.

          Gruß
          Matze

          1 Reply Last reply Reply Quote 0
          • 0
            0__Nik__0 last edited by 0__Nik__0

            Hallo,

            @Matzebhv

            Das hab ich versucht. Bild im Anhang.

            Aber da bekomm ich keinen Wert. Der Datenpunkt steht zu Beginn auf true und wenn er die 10 werte gelesen hat und dann einen Wert schreiben soll wechselt er auf fals.

            Ist das blockly falsch oder mein Datenpunkt?!

            53001502_2313398735339557_8203902918550618112_n.jpg

            Matzebhv 1 Reply Last reply Reply Quote 0
            • Homer.J.
              Homer.J. last edited by

              Versuch mal das ich Bilde so meinen Mittelwert für die meine Rolladensteuerung funktioniert Klasse.
              Musst du dir halt auf dich anpassen.

              // Berechnung von gleitendem Durchschnitt aus 8 Werten
              const idLicht = "hm-rpc.1.OEQ.1.LUX"/*Helligkeit LUX*/; // ID des Licht-Datenpunktes eintragen !
              const idAvr   = 'Licht.Mittel';
              const idList  = 'Licht.Liste';
              const n = 8;       // Anzahl der Werte
              
              var licht = getState(idLicht).val;
              var list = [licht,licht,licht,licht,licht,licht,licht,licht];
              if(getObject(idList)) list = getState(idList).val.split(',');
              
              createState(idAvr, licht, {type: 'number', unit: 'lux'});
              createState(idList, list.join(','), {type: 'string'});
              
              function calc() {
                list.pop();
                licht = getState(idLicht).val;
                list.unshift(licht);
                setState(idList, list.join(','), true);
                var sum = 0.0; 
                for (let i = 0; i < n; i++) {
              	sum = sum + parseFloat(list[i]);
                }
                setState(idAvr, Math.round(sum / n), true);
              }	 
              
              schedule('*/2 * * * *', calc); // alle 2 Minuten
              

              Grüße

              1 Reply Last reply Reply Quote 0
              • Matzebhv
                Matzebhv @0__Nik__0 last edited by

                @0__Nik__0 Ich kann dein Blockly gerade nicht richtig erkennen, das ist aber viel zu komplex.

                So sieht das u.a. hier aus: ich errechne die Einspeisung meiner kleinst PV ( sofern sie denn einspeist ) auf Wh um und dann auch für den Tag hoch.

                blockly.PNG

                1 Reply Last reply Reply Quote 0
                • 0
                  0__Nik__0 last edited by

                  @Matzebhv

                  Ich habe zum testen die Aktualisierung des Wert´s "Liter" auf 10 Sekunden gestellt und lass ihn laut Skript alle 59 Sekunden auswerten.

                  Ich hab das jetzt mal so "angepasst" aber da kommt kein Wert raus.

                  Wo ist mein Fehler?

                  Unbenannt.JPG

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

                    @0__Nik__0 ändert sich der Wert "Liter" denn überhaupt? Bau mal Debug-Blöcke ein um die Werte im Log zu sehen.

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

                      @0__Nik__0 sagte:

                      die Aktualisierung des Wert´s "Liter" auf 10 Sekunden gestellt

                      Dann muss auf Aktualisierung getriggert werden. Ein Trigger im Trigger wird immer Probleme bereiten. Vorschlag für Mittelwertbildung über 10 Werte:
                      Blockly_Mittel10.JPG

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

                        @paul53 du hast natürlich recht, hatte den Trigger im Trigger übersehen. Ich sollte mir das genauere hinsehen auch ohne Brille angewöhnen. ☺

                        1 Reply Last reply Reply Quote 0
                        • S
                          stimezo Forum Testing last edited by

                          Ist meiner Meinung nach das falsche Vorgehen. Das mitteln/stabilisieren der Messdaten gehört auf
                          den Controller nicht in iobroker.

                          Einfach einen Sketch der x mal misst, mittelt und dann sendet.
                          Ggf. mittels Plausibilitätsabfragen verfeinert.

                          Was ist daran kompliziert?
                          Die Messwerte sind innerhalb der geforderten Spezifikation und der iobroker
                          wird nicht weiter belastet.

                          Viele Grüße
                          Christian

                          1 Reply Last reply Reply Quote 0
                          • 0
                            0__Nik__0 last edited by

                            So funktioniert es jetzt.

                            Danke für eure Hilfe.

                            Unbenannt.JPG

                            @stimezo kannst du mir auch sagen wie ich das mit dem Wemos und Tasmota machen kann?

                            Programmieren kann ich leider nicht also muß ich das so machen.

                            S 1 Reply Last reply Reply Quote 0
                            • S
                              stimezo Forum Testing @0__Nik__0 last edited by

                              @0__Nik__0 sagte in [Füllstandsanzeige] Mittelwert von einer bestimmten Anzahl von Werten:

                              @stimezo kannst du mir auch sagen wie ich das mit dem Wemos und Tasmota machen kann?
                              Programmieren kann ich leider nicht also muß ich das so machen.

                              Ohne programmieren geht es natürlich nicht, ist aber pipipfax.
                              BTW: hast da nicht gerade was programmiert?

                              Viele Grüße
                              Christian

                              Matzebhv 1 Reply Last reply Reply Quote 0
                              • Matzebhv
                                Matzebhv @stimezo last edited by

                                @stimezo Du magst zwar recht haben, aber für jemanden ohne das Equipment zum flashen des Controllers und ohne Plan von C# oder ähnlichem ist das alles andere als Pipifax. Und letztendlich macht der Controller dann nix anderes als das Blockly hier.

                                Matze

                                S 1 Reply Last reply Reply Quote 0
                                • S
                                  stimezo Forum Testing @Matzebhv last edited by

                                  @Matzebhv sagte in [Füllstandsanzeige] Mittelwert von einer bestimmten Anzahl von Werten:

                                  @stimezo Du magst zwar recht haben, aber für jemanden ohne das Equipment zum flashen des Controllers und ohne Plan von C# oder ähnlichem ist das alles andere als Pipifax. Und letztendlich macht der Controller dann nix anderes als das Blockly hier.

                                  Matze

                                  Hi Matze,
                                  ja und nein. Espeasy muss ja auch geflasht werden, also kann es da ja nun nicht klemmen und sich einen Sketch für den HR-SC4 zu suchen und eine Mittelwert-Berechnung einzufügen ist kein Rocket-Science.

                                  Viele Grüße
                                  Christian

                                  1 Reply Last reply Reply Quote 0
                                  • sissiwup
                                    sissiwup last edited by

                                    Hi, ein gleitendes gewichtetes Mittel kannst du relativ einfach berechnen.
                                    Dafür brauchst du auch nicht so viele Werte speichern etc.

                                    eine Variable Mittelwert anlegen.

                                    Anschließend kannst du bestimmen wie schnell der Mittelwert durch neue Werte beeinflusst werden soll. Bei der Anwendung Heizöl kann man das sicherlich langsamer machen als bei der Helligkeitssteuerung.

                                    Mittelwert = (Mittelwert*Gewicht+aktueller Wert)/(Gewicht+1)

                                    Gute Werte für Gewicht z.B. 9 bei 10 Messungen in der Stunde
                                    Oder für dein Heizölbeispiel vlt. 99.

                                    Wenn der Wert für Gewicht zu hoch gewählt wird, dann hängt der Mittelwert hinter der Realität zu weit hinterher.

                                    PS: So ähnlich berechnet man anhand der ABS-Sensoren ob ein Reifen Druck verliert bei LKWs.

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

                                    Support us

                                    ioBroker
                                    Community Adapters
                                    Donate

                                    863
                                    Online

                                    31.9k
                                    Users

                                    80.1k
                                    Topics

                                    1.3m
                                    Posts

                                    blockly javascript monitoring
                                    7
                                    16
                                    2204
                                    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