Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Durchfluss Liter/Min aus Zählerstand

    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

    Durchfluss Liter/Min aus Zählerstand

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

      Hallo zusammen,

      ich würde mir den Wasserdurchfluss pro Minuten berechnen.
      Auslesen kann ich den Zählerstand.

      Wie würdet ihr das intelligent machen, ohne dass ich jede Minute den Zählerstand auslese und damit den Durchfluss berechne?

      Gibts da einen besseren Ansatz?

      Viele Grüße
      Duffy6

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

        @duffy6 sagte: Gibts da einen besseren Ansatz?

        Ja.

        const idZaehler = 'abc'; // ID eintragen
        const idDurchfluss = '0_userdata.0.xyz'; // ID eintragen
        const Faktor = 0; // selbst ermitteln!
        
        var timer = null;
        
        on(idZaehler, function(dp) {
            let durchfluss = Faktor * (dp.state.val - dp.oldState.val) / (dp.state.lc - dp.oldState.lc);
            setState(idDurchfluss, Math.round(durchfluss * 10) / 10, true);
            if(timer) clearTimeout(timer);
            timer = setTimeout(function() {
                setState(idDurchfluss, 0, true);
            }, 300000); // 5 Minuten
        });
        
        K 1 Reply Last reply Reply Quote 0
        • K
          klassisch Most Active @paul53 last edited by klassisch

          @paul53 sagte in Durchfluss Liter/Min aus Zählerstand:

          let durchfluss = Faktor * dp.oldState.val / (dp.state.lc - dp.oldState.lc);
          

          Oh, ich hätte jetzt

          let durchfluss = Faktor * (dp.state.val - dp.oldState.val) / (dp.state.lc - dp.oldState.lc);
          

          gerechnet. Bin verwirrt.

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

            @klassisch sagte: Oh, ich hätte jetzt

            Danke: Hast recht. Habe oben korrigiert.

            1 Reply Last reply Reply Quote 0
            • Homoran
              Homoran Global Moderator Administrators @duffy6 last edited by

              @duffy6 sagte in Durchfluss Liter/Min aus Zählerstand:

              ohne dass ich jede Minute den Zählerstand auslese und damit den Durchfluss berechne?

              was ist denn daran so schlecht?
              Das dürfte die genaueste Methode sein, da garantiert nich immer der gleiche Fluss herrscht.

              Das mache ich so beim Wasser und auch beim Gas. Dort berechne ich mir daraus sogar die momentane Brennerleistung.

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

                @homoran sagte: was ist denn daran so schlecht?

                Dass bei niedrigem Durchfluss (z.B. 0,4 l/min) der Durchflusswert zwischen 0 und 1 wechselt (bei Zählerauflösung 1 l). Evtl. sind die 5 Minuten Timeout noch zu kurz, um auf Durchfluss 0 zu setzen?

                K 1 Reply Last reply Reply Quote 1
                • K
                  klassisch Most Active @paul53 last edited by

                  @paul53 Dieses auf 0 Setzen benötigt man gerade weil man nicht zyklisch die Daten verarbeitet.
                  Wenn man z.B. alle Minute neue Daten bekommt (egal ob gepusht oder gepullt) braucht man dieses extra Nullen nicht. passiert dann automatisch - und physikalisch korrekt wie ich meine. Das Zyklische Nullen verfälscht die Flusswerte, meine ich. Habe das "Problem" bei meinem Regenmesser.

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

                    @klassisch sagte: Wenn man z.B. alle Minute neue Daten bekommt (egal ob gepusht oder gepullt) braucht man dieses extra Nullen nicht.

                    Das ist richtig. Man hat bei einer Zählerauflösung von 1 l aber keine Nachkommastellen, sondern der Wert schwankt zwischen zwei Integer-Werten.

                    @klassisch sagte in Durchfluss Liter/Min aus Zählerstand:

                    Das Zyklische Nullen verfälscht die Flusswerte, meine ich.

                    Es wird nicht zyklisch genullt, sondern nur, wenn lange genug nicht mehr getriggert wird, weil sich der Zählerstand nicht ändert.

                    K 1 Reply Last reply Reply Quote 0
                    • K
                      klassisch Most Active @paul53 last edited by

                      @paul53 sagte in Durchfluss Liter/Min aus Zählerstand:

                      Das ist richtig. Man hat bei einer Zählerauflösung von 1 l aber keine Nachkommastellen, sondern der Wert schwankt zwischen zwei Integer-Werten.

                      Wenn der Zähler steht, dann wird der Zählerdes Bruchs und damit der berechnete Durchfluss Null.

                      Es wird nicht zyklisch genullt, sondern nur, wenn lange genug nicht mehr getriggert wird, weil sich der Zählerstand nicht ändert.

                      Ja, da hast Du recht und ich habe es falsch geschrieben Genullt wird nach einem (beliebig gewähltem) timeout. In dieser Timeout Zeit kann was falsches angezeigt werden. Es wird noch Durchfluss gezeigt, obwohl keiner mehr da ist.

                      Meine Wasserzähler ESPs (und früher die S0 Zähler ESPs) schicken jede Minute eine Impulssumme. Also wird jede Minute der Wert aktualisiert und der Durchfluß (bzw. Leistung) berechnet. Bei der Methode braucht es den Timeout Reset nicht. ioBroker muß halt jede Minute was tun. Aber der Rechner packt das schon.

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

                        @klassisch sagte: Es wird noch Durchfluss gezeigt, obwohl keiner mehr da ist.

                        Richtig. Im zyklischen Fall wird zwischendurch "kein Durchfluss" angezeigt, obwohl geringer Durchfluss vorhanden ist. Man muss sich also entscheiden, was man bevorzugt.

                        K 1 Reply Last reply Reply Quote 0
                        • K
                          klassisch Most Active @paul53 last edited by

                          [OT "philosophische" Diskussion]
                          @paul53 sagte in Durchfluss Liter/Min aus Zählerstand:

                          Im zyklischen Fall wird zwischendurch "kein Durchfluss" angezeigt, obwohl geringer Durchfluss vorhanden ist. Man muss sich also entscheiden, was man bevorzugt.

                          Es wird halt beim zyklischen Messen und Rechnen kein zusätzlicher Durchfluß erzeugt. Kleine Durchflüsse werden u.U. ungeschickt "gerundet", die Fehler sollten sich aber wegintegrieren .
                          Wenn ich die Durchflüsse beider Methoden wieder zu einem Volumen aufintegrieren würde, dann wäre die zyklische Verarbeitung näher an der Volumenanzeige des Zählers. Deshalb habe ich mich für die Wasserzähler und die ehem. S0 Zähler (jetzt durch Modbus Zähler ersetzt) für dieses Verfahren entschieden.

                          Bei den Wasserzählern taste ich optisch das Sternrad ab.
                          Bei der letzten Jahresablesung hatten meine elektronischen Werte zu den abgelesenen folgende Abweichung: -0,07%; -0,01%; -0,08% . Gut, hat jetzt mit der eigentlichen Fragestellung nach Durchfluß (bzw Leistung) nichts zu tun, habe die Daten aber jetzt gerade gesichtet und finde sie gar nicht so schlecht...

                          Beim Regenmesser mache ich es noch anders, mit Resetierung nach timeout. Da interessiert mich vor allem die Gesamtmenge, die davon nicht beinflußt wird, und eigentlich nur bei sehr starken Regenfällen noch die maximale Regenintensität (wow, gestern hatten wir kurzzeitig mal 91mm/h). Da halte ich es lean und prozessiere nur, wenn die Kippwaage umschlägt. Ab und an denke ich wieder über diese meßtechnische Unsauberkeit nach, aber dann ist es mir an dieser Stellen auch nicht soo wichtig.....

                          1 Reply Last reply Reply Quote 0
                          • D
                            duffy6 @Homoran last edited by duffy6

                            @homoran
                            Könntest Du mir den Codeschnipsel der minütlichen Ausführung hier mal reinstellen?

                            Bin nämlich gerade am überlegen wie ich an den "alten" Wert (der eine Minute alt ist) komme ohne ein weiteres Binding anzulegen.
                            "oldvalue" klappt ja bei einer Intervall-Ausführung nicht, oder?

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

                              @duffy6 sagte: "oldvalue" klappt ja bei einer Intervall-Ausführung nicht, oder?

                              Nein, man benötigt eine eigene Variable "lastValue", die bei Skriptstart initialisiert werden muss.

                              const idZaehler = 'abc'; // ID eintragen
                              const idDurchfluss = '0_userdata.0.xyz'; // ID eintragen
                              const Faktor = 0; // selbst ermitteln!
                               
                              var lastValue = getState(idZaehler).val;
                               
                              schedule('* * * * *', function() {
                                  let value = getState(idZaehler).val;
                                  let durchfluss = Faktor * (value - lastValue);
                                  lastValue = value;
                                  setState(idDurchfluss, durchfluss, true);
                              });
                              
                              1 Reply Last reply Reply Quote 1
                              • Homoran
                                Homoran Global Moderator Administrators @duffy6 last edited by

                                @duffy6 sagte in Durchfluss Liter/Min aus Zählerstand:

                                @homoran
                                Könntest Du mir den Codeschnipsel der minütlichen Ausführung hier mal reinstellen?

                                Bin nämlich gerade am überlegen wie ich an den "alten" Wert (der eine Minute alt ist) komme ohne ein weiteres Binding anzulegen.
                                "oldvalue" klappt ja bei einer Intervall-Ausführung nicht, oder?

                                ich arbeite mit dem Datenpunkt vom Zählerstand auf Aktualisierung.
                                Dann steht auch old value zur Verfügung.

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

                                  @homoran sagte: Datenpunkt vom Zählerstand auf Aktualisierung.

                                  Der DP wird jede Minute aktualisiert?

                                  Homoran 1 Reply Last reply Reply Quote 0
                                  • Homoran
                                    Homoran Global Moderator Administrators @paul53 last edited by

                                    @paul53 sagte in Durchfluss Liter/Min aus Zählerstand:

                                    @homoran sagte: Datenpunkt vom Zählerstand auf Aktualisierung.

                                    Der DP wird jede Minute aktualisiert?

                                    nee, nicht wirklich!
                                    das ist alle drei Minuten. Ich mache das mit dem ESP32 CAM Projekt von @jomjol

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

                                      @homoran sagte: alle drei Minuten.

                                      Hauptsache zyklisch.

                                      Homoran 1 Reply Last reply Reply Quote 0
                                      • Homoran
                                        Homoran Global Moderator Administrators @paul53 last edited by

                                        @paul53 sagte:

                                        Hauptsache zyklisch.

                                        ja!
                                        ich hatte sogar einen Algorithmus drin, der überprüft hat, ob ein Wert ausgesetzt hatte und dann die entsprechenden Werte in das Schieberegister für den Mittelwert nachgetragen hat.

                                        Hier der Gasverbrauch (in dem Heizkreisgraphen)
                                        Screenshot_20230116-144832_Firefox.jpg

                                        und hier der "Kessel"kreislauf mit errechneter Brennerleistung (magenta) über den Durchschnitt der letzten 10 Messungen
                                        Screenshot_20230116-144932_Firefox.jpg

                                        1 Reply Last reply Reply Quote 0
                                        • K
                                          klassisch Most Active last edited by klassisch

                                          Bei meinen zyklischen Daten (Wasserzähler, früher auch S0 Stromzähler) habe ich den Zyklus durch die Sensoren vorgeben lassen. Diese senden jede Minute neue Daten (Gesamtsumme).
                                          Dann kann man auf die Datenpunkte triggern und "old" funktioniert auch wieder.
                                          Das Ursprungsskript von @paul53 passt dann, wenn man den timeout block raus nimmt.

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

                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          905
                                          Online

                                          31.9k
                                          Users

                                          80.2k
                                          Topics

                                          1.3m
                                          Posts

                                          4
                                          19
                                          629
                                          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