Forum: Haus & Smart Home Zählerstand erfassen: Gesamtwert oder Deltas?


von Mellopock (Gast)


Lesenswert?

Hallo,
ich möchte gerne einige Zählerstände im Haus erfassen. Dazu habe ich mir 
folgendes zusammengeschustert:
 - ESP32 + Sensoren zur Erfassung des Zählerstands
 - MQTT Server zur Übergabe der Daten
 - InfluxDB + Grafana zum Sammeln und Anzeigen der Daten

Nun stellt sich mir aber noch eine grundsätzliche Frage: wie sollen die 
Daten in der Datenbank abgelegt werden? Ich sehe da zwei Optionen:

a) Der µC sendet in festen Zeitintervallen (z.B. jede Minute) den 
Absolutwert (=Zählerstand).

Nachteile:
Der Sensor muss beim ersten Start mit dem aktuellen Zählerstand 
initialisiert werden. Wenn mal der Strom ausfällt (oder der Controller 
aus irgend einem Grund neustartet), fängt er wieder von vorne an, und 
müllt die Datenbank (ggf. unbemerkt) mit falschen Werten zu.
Man könnte den Wert auch regelmäßig im Flash persistieren und beim Start 
wieder von da auslesen, was zumindest die Neustart-Problematik lösen 
würde.

b) Der µC sendet in festen zeitabständen ein Delta (Änderung des 
Zählerstandes seit der letzten Übertragung)

Vorteile:
Der Sensor muss nichts über den tatsächlichen/absoluten Zählerstand 
wissen. Das macht das Leben einfacher.


Was ich nun gar nicht einschätzen kann ist welche der beiden Methoden 
mit InfluxDB und Grafana besser funktioniert.
Wenn ich z.B. b) wähle, und dann in Grafana den absoluten Zählerstand 
anzeigen möchte, muss ich ja SÄMTLICHE Werte in der Datenbank 
aufsummieren (+ einen festen Offset). Das klingt teuer.
Von daher erscheint mir Option a) besser, auch wenn sie in der 
Implementierung aufwändiger ist...

Wie macht ihr das? Habt ihr Erfahrungen was gut funktioniert (und was 
nicht?)?

von Verständnisloser (Gast)


Lesenswert?

Mellopock schrieb:
> a) Der µC sendet in festen Zeitintervallen (z.B. jede Minute) den
> Absolutwert (=Zählerstand).
>
> Nachteile:
> Der Sensor muss beim ersten Start mit dem aktuellen Zählerstand
> initialisiert werden. Wenn mal der Strom ausfällt (oder der Controller
> aus irgend einem Grund neustartet), fängt er wieder von vorne an, und
> müllt die Datenbank (ggf. unbemerkt) mit falschen Werten zu.
> Man könnte den Wert auch regelmäßig im Flash persistieren und beim Start
> wieder von da auslesen, was zumindest die Neustart-Problematik lösen
> würde.

Dem Sensor kann der Wert doch egal sein. Es muss nur der Wert ausgelesen 
und an die Datenbank geschickt werden. In der Datenbank stehen alle 
absoluten Werte mit Zeitstempel.

Bei Deltawerten ist die Gefahr, dass sich mit der Zeit eine Abweichung 
zur Realtität einstellst, wenn z.B. einmal ein Wert nicht eingetragen 
werden konnte...

von Mellopock (Gast)


Lesenswert?

Verständnisloser schrieb:
> Dem Sensor kann der Wert doch egal sein. Es muss nur der Wert ausgelesen
> und an die Datenbank geschickt werden. In der Datenbank stehen alle
> absoluten Werte mit Zeitstempel.

Der Sensor kann allerdings keinen Absolutwert auslesen. Beim Gaszähler 
z.B. dreht einfach immer wieder ein Magnet vorbei, den ich dann mit dem 
µC erkennen kann.

von Verständnisloser (Gast)


Lesenswert?

Mellopock schrieb:
> Der Sensor kann allerdings keinen Absolutwert auslesen.

Das konnte ich ja nicht wissen.

Dann brauchst du die Möglichkeit "manuell" in der Datenbank Werte 
eintragen zu können.
z.B. wenn der Sensor mal ausfällt, oder eine zeitlang keine Werte 
sendet. Andernfalls wäre der absolute errechnete Wert ungleich dem 
Tatsächlichen.

von Wolle G. (wolleg)


Lesenswert?

Mellopock schrieb:
> möchte gerne einige Zählerstände im Haus erfassen.

Bitte etwas konkreter.
Besonders wichtig halte ich die Erläuterung des Funktionsprinzips des 
Zählers bzw. wie erfolgt die Erfassung eines Zählimpulses.
Damit nichts verloren geht muss bei Ausfall der Stromversorgung 
natürlich mit Batterie o. ä. gepuffert werden.

von Wolfgang (Gast)


Lesenswert?

Mellopock schrieb:
> Der Sensor kann allerdings keinen Absolutwert auslesen.

Dann hast du auch keine Zählerstände, sondern verfolgst mit deinem µC 
nur den Verbrauch/Durchfluss.

von Mellopock (Gast)


Lesenswert?

Wolle G. schrieb:
> Besonders wichtig halte ich die Erläuterung des Funktionsprinzips des
> Zählers bzw. wie erfolgt die Erfassung eines Zählimpulses.
> Damit nichts verloren geht muss bei Ausfall der Stromversorgung
> natürlich mit Batterie o. ä. gepuffert werden.

Hier geht es erst mal um den Gaszähler und die Wasseruhr. Bei beiden 
lassen sich die Umdrehungen anhand eines Magneten bzw. durch einen 
Reflektor nachverfolgen.

Wolle G. schrieb:
> Damit nichts verloren geht muss bei Ausfall der Stromversorgung
> natürlich mit Batterie o. ä. gepuffert werden.

Das würde den Rahmen meines Bastelprojekts wohl sprengen ;-)
Falls es tatsächlich zu Ausfällen kommt, würde ich von Hand 
nachkorrigieren (das muss natürlich vorgesehen werden).

Wolfgang schrieb:
> Dann hast du auch keine Zählerstände, sondern verfolgst mit deinem µC
> nur den Verbrauch/Durchfluss.

Richtig. Womit ich wieder bei meiner Eingangsfrage bin: soll ich lieber 
den Verbrauch mitloggen (und InfluxDB/Grafana die Arbeit machen lassen) 
oder schon im Sensor versuchen daraus Absolutwerte/Zählerstände zu 
machen?

von Udo S. (urschmitt)


Lesenswert?

Du hast eine Datenbank, benutze sie.
Du hast Deltaverbräuche mit Zeitstempel.
Was hindert dich die in der Vergangenheit liegenden zu einer Summe zu 
berechnen und irgendwo in der Datenbank abzulegen. Z.B. ein Wert pro 
Tag.
Für den aktuellen Verbrauch nimmst du jetzt den letzten berechneten 
Absolutwert plus alle neueren Deltas.
Wie viele Milliarden Werte willst du eigentlich abspeichern?

Mellopock schrieb:
> oder schon im Sensor versuchen

Völliger Nonsens. Du hast eine Datenbank und einen PC der unendlich 
Rechenkapazität hat. Warum soll der Sensor rechnen und wichtige Werte 
speichern?
In der Datenbank stehen die Rohdaten, ggf. konzentriert wenn die Menge 
zu groß wird (Zusammenfassung alter Daten.

: Bearbeitet durch User
von oszi40 (Gast)


Lesenswert?

A)Evtl. würde ich mal über regelmäßige Fotos nachdenken. Es gab schon 
Zähler mit "Zahlenspüngen", die deswegen ausgetauscht wurden.

B)Deiner Erfassung sollte HINTERHER eine Plausibilitätsprüfung folgen um 
grobe Fehler zu entdecken.

von Hannes J. (Firma: _⌨_) (pnuebergang)


Lesenswert?

Mellopock schrieb:
> Womit ich wieder bei meiner Eingangsfrage bin: soll ich lieber
> den Verbrauch mitloggen (und InfluxDB/Grafana

Gratulation zur Auswahl von dem Hippster-Müll.

> die Arbeit machen lassen)
> oder schon im Sensor versuchen daraus Absolutwerte/Zählerstände zu
> machen?

Es ist völlig egal für die Richtigkeit der Ergebnisse. Fällt der Strom 
aus dann stimmen ab dem Punkt bei beiden Varianten die Ergebnisse nicht. 
Ohne eine Möglichkeit manuell deine Messdaten auf einen Bezugspunkt 
(manuell abgelesener Gesamtwert) zu setzen taugen beide Systeme nichts.

Das heißt, wir reden nur darüber wo der Bezugswert gespeichert wird. 
Wenn's weiter nichts ist ...

Man könnte ein anderes Kriterium heranziehen: Was passiert bei einem 
längeren Ausfall der Funkstrecke? Theoretisch kann der Sensor 
"unendlich" lange weiter Gesamtwerte aufsummieren, auch wenn er sie 
nicht senden kann. Bei Deltas ist irgendwann der mögliche 
Zwischenspeicher im Sensor voll. Allerdings kann ein Sensor auch das 
merken und dann anfangen Deltas aufzusummieren.

Das bedeutet, auch dabei ist es egal.

Nebenbei, auch bei Deltas im Normalbetrieb muss der Sensor über 
Intervalle (10 Minuten, Stunde, Tag, Woche?) aufsummieren können. Du 
willst doch nicht für jede einzelne Bewegung des Rädchens am Zähler 
Daten senden?

Bleiben so Dinge wie was ist einfacher und mit weniger Resourcen zu 
programmieren. Da beides kein Hexenwerk ist ist auch das egal.

Würfel es aus wenn du dich nicht entscheiden kannst. Oder nimm die 
Variante Gürtel und Hosenträger, sende beide Arten von Daten. Das nützt 
zwar nichts,  aber vielleicht beruhigt es dich.

von Sebastian L. (sebastian_l72)


Lesenswert?

Mellopock schrieb:
> Hallo,
> ich möchte gerne einige Zählerstände im Haus erfassen. Dazu habe ich mir
> folgendes zusammengeschustert:
>  - ESP32 + Sensoren zur Erfassung des Zählerstands
> Nun stellt sich mir aber noch eine grundsätzliche Frage:
> den Absolutwert (=Zählerstand)...(oder)
> ein Delta .

Was für Zähler sind das? Welche Schnittstelle?
Aus einem Zähler mit m-Bus oder ModBus Schnittstelle liest du einfach 
die Absolutwerte aus und legt einen Zeitstempel daneben.
Feddisch.
Ein MID konformer Zähler müllt dich nicht mit falschen Werten voll. 
Fehler werden automatisch korrigiert.

Gaszähler (Balgengeräte) mit Schnittstelle sind teuer und man bekommt 
sie oft nicht vom Netzbetreiber gemietet.

S0 -Impulszählerei ist eine Differenzerfassung die integriert werden 
muss. Fehler die unterwegs passieren leben weiter.

von Bauform B. (bauformb)


Lesenswert?

Mellopock schrieb:
> Wolle G. schrieb:
>> Damit nichts verloren geht muss bei Ausfall der Stromversorgung
>> natürlich mit Batterie o. ä. gepuffert werden.
>
> Das würde den Rahmen meines Bastelprojekts wohl sprengen ;-)

??? Es müssen ja nicht gleich hochgezüchtete LiPo-Akkus sein, eigentlich 
muss es garkein Akku sein. Eine etwas dickere Lithium-Primärzelle würde 
für viele Jahre reichen, so "viel" wie der Erfassungs-uC zu tun hat.

Andererseits: Damit wirklich nichts verloren geht, müsste man Gas, 
Wasser und Strom absperren, sobald die Erfassung nicht richtig läuft 
(Watchdog, Magnetventile, Schütz...). Auf jeden Fall fällt ein normaler 
PC oder WLAN eher aus als der Strom aus der Steckdose, ein AVR mit 
Batterie ist hier auf dem Land allerdings zuverlässiger.

Hannes J. schrieb:
> Man könnte ein anderes Kriterium heranziehen: Was passiert bei einem
> längeren Ausfall der Funkstrecke?

Zum Beispiel, weil der PC nicht rund um die Uhr laufen soll oder Windows 
ein Update macht.

> Theoretisch kann der Sensor "unendlich" lange weiter Gesamtwerte
> aufsummieren, auch wenn er sie nicht senden kann. Bei Deltas ist
> irgendwann der mögliche Zwischenspeicher im Sensor voll.
> Allerdings kann ein Sensor auch das merken und dann anfangen
> Deltas aufzusummieren.

Oder die alten Daten einfach überschreiben. Wenn die Monate lang niemand 
abgeholt hat, werden sie wohl nicht wichtig sein. Für wenige Euros gibt 
es ein paar MegaByte NOR-Flash im SO-16 Gehäuse. Dazu eine 
Netzausfallerkennung und ein etwas dickerer Elko im Netzteil und man hat 
einen unkaputtbaren Speicher. Ich würde da sogar mit jedem Zählimpuls 
einen Zeitstempel speichern, dann ist auch später jede beliebige 
Auswertung möglich.

Mit zwei Chips kann man schreiben, während der andere gelöscht wird. 
Löschzyklen sind kein Problem, laut Datenblatt gehen mehr als 100000 und 
man muss frühestens nach 2 Millionen Zählimpulsen einmal löschen. Da 
kann kein PC mithalten. Der darf dann auch für 4 Wochen Urlaub 
ausgeschaltet bleiben und man weiß hinterher immer noch sekundengenau, 
wann die Kühltruhe gekühlt hat...

von Mellopock (Gast)


Lesenswert?

Udo S. schrieb:
> Völliger Nonsens. Du hast eine Datenbank und einen PC der unendlich
> Rechenkapazität hat. Warum soll der Sensor rechnen und wichtige Werte
> speichern?

So viel Rechenkapazität hat mein Raspberry Pi Zero nun auch nicht ;-)

Hannes J. schrieb:
> Gratulation zur Auswahl von dem Hippster-Müll.

Aha. Gibt zur Aufzeichnung von Zeitreihen besser geeignete Datenbanken?
Gibt zur Visualisierung von Zeitreihen bessere Oberflächen?
Dann mal raus mit der Sprache!

Sebastian L. schrieb:
> Was für Zähler sind das? Welche Schnittstelle?

Wie oben geschrieben: dumme Zähler mit drehenden Magneten oder 
Reflektorplättchen.

von Sebastian L. (sebastian_l72)


Lesenswert?

Mellopock schrieb:

> Sebastian L. schrieb:
>> Was für Zähler sind das? Welche Schnittstelle?
> Wie oben geschrieben: dumme Zähler mit drehenden Magneten oder
> Reflektorplättchen.
Miete dir von deinem Messstellenbetreiber Zähler mit Schnittstelle oder 
schalte eigene Zähler mit Schnittstelle nach Wahl dahinter. Die 
Messstellenbetreiber sind mit EU DIR 2002/2018 jetzt in Zugzwang und da 
kann man ja mal anfragen wie die das lösen wollen und welche Optionen 
die anbieten.

Meine Diehl Hydrus Wasserzähler geben mir selbsständig Alarm wenn du in 
24h keinen 0-Verbrauch erreichst.

Du schreibst dass der Gaszähler dir einen Magnetimpuls geben kann. Ein 
Microcontroller kann den nicht auslesen. Hierzu braucht es einen Sensor 
am Microcontroller. Da dürfte ein Reed Kontakt reichen, von dem der 
Microcontroller die Impulse zählt.
Das ist inkrementelle Messung und den Absolutwert musst du somit manuel 
korrigieren.
Ein 0-Verbrauchsalarm ist sinnvoll, ob das dann ein Fehlalarm war, weil 
der Reed Kontakt runtergefallen ist, muss man je Fall entscheiden.

von wendelsberg (Gast)


Lesenswert?

Sebastian L. schrieb:
> Meine Diehl Hydrus Wasserzähler geben mir selbsständig Alarm wenn du in
> 24h keinen 0-Verbrauch erreichst.

Mein Kamstrup-Wasserzaehler theoretisch auch, aber der Wasserversorger 
besteht darauf, dass der Schluessel fuer das M-Bus Telegramm seiner ist 
und rueckt den nicht raus.

wendelsberg

von Sebastian L. (sebastian_l72)


Lesenswert?

Bauform B. schrieb:

> ??? Es müssen ja nicht gleich hochgezüchtete LiPo-Akkus sein, eigentlich
> muss es garkein Akku sein. Eine etwas dickere Lithium-Primärzelle würde
> für viele Jahre reichen, so "viel" wie der Erfassungs-uC zu tun hat.
Eben. Meine Heizkostenverteiler loggen über den Tag und senden täglich 
Daten. Die Batterie ist auf Kalibrierungsdauer von 10 Jahren ausgelegt.
Alarme sollte man aber vorher absenden können.

> Hannes J. schrieb:
>> Man könnte ein anderes Kriterium heranziehen: Was passiert bei einem
>> längeren Ausfall der Funkstrecke?
Wenn keine Quittung des Empfängers kommt, dann wird in einer Stunde / 
morgen halt nochmal gesendet. Das macht jeder Heizkostenverteiler oder 
Stromzähler so.
Darum hat ModBus eine Empfangsbestätigung.

>> Theoretisch kann der Sensor "unendlich" lange
Der Sensor kann das theoretisch leider nicht. Man kann aber heute für 
kleines Geld und Aufwand einen Logger zwischen Messumformer und 
Kommunikationseinheit setzen.
Praktisch ist das dann alles in einem "Kästchen".

> Oder die alten Daten einfach überschreiben.
Ja - irgendwann macht man halt einen Recycle.
Aber vorher setzt man noch ein paar Alarme ab.

>  Ich würde da sogar mit jedem Zählimpuls
> einen Zeitstempel speichern, dann ist auch später jede beliebige
> Auswertung möglich.
Zur Samplerate sollte man sich ein paar Gedanken machen - Wenn die 
Prozesse die überwacht werden sollen. Die Geschwindigkeit eines 
Supertankers loggt man auch nicht jede ms.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.