Gaszähler optisch auswerten - letzte Unklarheiten

Begonnen von BjoernC, 05 September 2014, 15:06:53

Vorheriges Thema - Nächstes Thema

BjoernC

Moin,

Ich möchte, wie man dem Thema entnehmen kann, meinen Gaszähler auswerten. Mit einem Reedkontakt ist es schwer, und auch zu ungenau - zählt nur alle 0,1 m3 einen Impuls.

Eine Webcam dafür zu nutzen hatte ich schon öfters gelesen, allerdings ging es nicht über die Überlegung dazu hinaus (jedenfalls habe ich nichts gefunden dazu).

Daher habe ich jetzt mal eine alte Webcam hervorgekramt und nutze nun meinen Rpi, auf dem auch FHEM läuft, um Screenshots von dem Zählerstand zu machen. Diese Werte ich dann aus. Das klappt gut - ich löse damit bis auf 0,01 m3 auf (mehr erscheint mir nicht sinnvoll), und ich erkenne wenn 0,01 m3 erreicht wurden und gebe dann eine Meldung auf die Konsole aus.

Mein Problem: Bisher läuft das ganze unabhängig von FHEM in einem Batch Script - ich habe keine Lust das auf Perl zu ändern, hat mich so schon einige Nerve gekostet 8)

Diesen "Impuls" alle 0,01 m3 (genauer.: bei einer Änderung welche mindestens 0,01 m3 ist, mach ich später noch anders) möchte ich nun an FHEM weitergeben - dort soll dann so ähnlich wie bei meinen S0 Zählern der zeitliche Abstand zum letzten Impuls messen und dann ausgeben (das ist der einfache Teil denk ich, Christian hatte dazu ein Beispiel gegeben gehabt das ich auch nutze).

Nur wie kriege ich das hin? Es gibt denk ich zwei Optionen:

  • Das Batch script läuft nebenher, prüft alle x Minuten auf einen Änderung am Zählerstand und triggered dann irgendwie FHEM an
  • Das Batch script wird von FHEM alle x Minuten gestartet, FHEM kriegt den gegenwärtigen Stand zurück, vergleicht den mit dem alten und setzt dann ein Ereignis falls der Wert anders ist

Wäre super wenn ihr mir da Ideen geben könntet.

Und ja, ich werde Euch das gesamt Coding etc. zur Verfügung stellen, dann können das andere auch nutzen 8) Ich möchte nur vorher alles schonmal testen etc. so daß es dann auch gleich "läuft".

Thx!

rudolfkoenig

Ich wuerde in fhem einen dummy definieren, und sein Wert aus dem Batch skript per set setzen. Dann kann man per FileLog die Werte protokollieren, und diese in einem Plots anzeigen.

P.A.Trick

Cubietruck,RPI,QNAP Ts-419p+, FS20, FRITZ!DECT200, 7 MAX! Thermostate, 3 MAX! Fensterkontakte, Kodi, CUL V3.3, EM1000S, LW12, LD382, HUE, HM-CFG-USB-2, 1x HM-LC-SW1-FM, 2x HM-LC-SW2-FM, 2x HM-LC-Sw1PBU-FM, 3xHM-LC-Bl1PBU-FM,HM-SEC-RHS, 2xHM-SEC-SD,HM-WDS30-T-O, 3x HM-LC-Dim1TPBU-FM, RPI+AddOn

BjoernC

Zitat von: rudolfkoenig am 06 September 2014, 15:30:29
Ich wuerde in fhem einen dummy definieren, und sein Wert aus dem Batch skript per set setzen. Dann kann man per FileLog die Werte protokollieren, und diese in einem Plots anzeigen.
Danke! Das hat mich weitergebracht.

Mein Batch Script schickt den ermittelten Wert an FHEM:
echo "set gasvalue $last_reading" | nc localhost 7072

In FHEM habe ich den dummy definiert:
define gasvalue dummy

Ich sehe auch, wie dieser im dbLog gesetzt wird. Allerdings würde ich das ganze gerne ähnlich machen wie für meine S0-Stromzähler, dazu gab es dies im Forum was auch sehr gut geht (eine Ausführung ermittelt den Verbrauch basierend auf dem letzten Zeitstempel):

define Computer_Power FRM_IN 29
attr Computer_Power IODev FIRMATA
attr Computer_Power internal-pullup on
attr Computer_Power room Arduino
attr Computer_Power alias Computer_Power
attr Computer_Power stateFormat time
attr Computer_Power userReadings time:reading:.off { use Time::HiRes qw(time);; time();; }, power:reading:.off { use Time::HiRes qw(time);; sprintf("%.5f", 3.6 / (time() - OldValue("Computer_Power"))) . "";; }
define log_Computer_Power FileLog ./log/Computer_Power-%Y-%m-%d.log Computer_Power.power:.*

Und hier habe ich etwas rumgespielt, kriege es aber leider nicht hin...

Ebenfalls muß das o.g. noch etwas erweitert werden. Ich möchte ja nur alle paar Sekunden oder Minuten zählen - das kostet CPU Power und auch die Webcam schafft vor sich hin -> Strom verbrauch. Ich schicke daher z.B. den Wert "567". Der vorherige Wert war "560". D.h. es wurde 0,07 m3 Gas verbraucht. Der o.g. Code würde aber nur den Impuls zählen -> 0,01 m3. Irgendwie muß ich dem also noch beibringen, daß die Differenz nicht nur aus Zeit sonder Zeit * Anzahl der Impulse ist.

Wenn das gelöst ist habe ich eigentlich alles fertig - dann Code aufräumen und dann kann ich es mit Euch teilen :) Das ganze könnte man auch recht einfach für Wasserzähler nutzen...

rudolfkoenig

Fuer die stuendliche Auswertung gibts im SVG die delta-h Funktion.
Ansonsten meine ich Module gesehen zu haben, die sich auf sowas spezialsiert haben.
Oder hat nicht auch UserReadings entsprechende modifier?

BjoernC

Danke!

Ich denke ich kann das auch direkt in meinem batch machen. Ist vermutlich leichter, da habe ich ja alle Daten bereits die ich brauche. Ich würde dann dort umrechnen und den ermittelten Wert dann an fhem schicken. Bin gerade dabei das mal zu testen.

Hackstall

Hallo,, mich interessiert Dein Ansatz mit der Webcam optisch den. Gasverbrauch zu erfassen.
Kannst Du mir da ein paar genauere Informationen zukommen lassen wie Du das machst.
Danke Andreas

Decki

Hallo,

ich hatte das gleiche Problem mit 0.1m³ über Reedkontakt.
Aber an den Gaszählern ist auch ein kleiner "Spiegel" in der 6 der letzten Stelle. Diese werte ich mit einer Infrarot Reflexlichtschranke aus über GPIO an den Raspi. Damit bekomme ich echte 0,1m3 Impulse und erkenne, ob die Heizung läuft oder nicht.

gruss Andy
Raspi 2 im Schaltschrank, USB IR Lesekopf am EHz21, Gaszähler mit Reedkontakt, Jeelink,  16 FS20 Aktoren,  3 Ufos für LED, 11 FS20 Rolladenaktore, AMAD 4.0 mit Sprachausgabe, Esp12 mit EspEasy

Prof. Dr. Peter Henning

Erst einmal: Es ist eher unwahrscheinlich, dass dieser Thread nach 4 Jahren Pause weitergeführt wird - Vorschlag: Neuer Thread mit sprechendem Titel.

Viele Gaszähler sind heute schon für eine magnetische Auslesung vorbereitet (ähnlich S0-Schnittstelle).

LG

pah