Vor ein paar Wochen hatte ich darüber berichtet, wie ich mich an einem Beta-Programm für einen smarten Gaszähler beteiligt hatte. Damit war es mir möglich, den Gasverbrauch mittels meiner Haussteuerung zu protokollieren und auszuwerten.
Gestern habe ich nun die finale Version des Controllers erhalten. Die Startseite hat sich gegenüber der ersten Version auch nochmals geändert und die Stabilität wurde verbessert. Wichtigste Funktion ist aber nun die Möglichkeit, den Controller online mit Updates zu versorgen. Auf der Setup-Seite lässt sich nun auch der Umrechnungsfaktor individuell anpassen. Weitere Infos zum aktuellen Versionsstand findet man auf der Seite von foorptintzero.
Leider habe ich es wieder geschafft, den Controller in einen Zustand zu bringen, so dass der Webserver nicht antwortet. In den letzten Wochen hatte ich eigentlich nie Probleme damit aber irgendwie verkraftet der Webserver keine zu häufigen Anfragen. Ich hoffe, dass ich über die Reset-Funktionen das Teil wieder ans Laufen bekomme. Laut Beschreibung kann die durchaus eine Weile dauern, weil erst andere Prozesse zum protokollieren der Daten abgeschlossen sein müssen, bevor der Webserver wieder erreichbar ist.
Einbindung des Gaszählers in meine FHEM Umgebung
Nachdem es nun die finale Version des Gaszählers gibt und sich der Aufbau des Dashboards wahrscheinlich nicht mehr zu stark ändern wird, stelle ich euch heute meine Einbindung mittel FHEM-Modul HTTPMOD vor. Nach meinen Erfahrungen sollte man hierbei insbesondere auf den Abrufzyklus achten. Ich rufe die Seite alle 30 Minuten auf, was bisher recht gut funktionierte und für die Protokollierung des Gasverbrauch durchaus reichen sollte.
Das Modul habe ich wie folgt definiert, wobei natürlich die eigene IP-Adresse des Gaszählers einzutragen ist:
defmod keGaszaehler HTTPMOD 192.168.2.XXX 1800
Die Attribute zum Auslesen der gewünschten Informationen sehen wie nachfolgend beschrieben aus. Ich rufe hierbei den Zählerstand ab sowie die Kubikmeter des aktuellen Tages.
reading01Name Zaehlerstand
reading01Regex Zählerstand</div><br /><br/>([0-9]+) m<sup>3</sup></td></tr></table>
reading02Name VerbrauchHeute
reading02Regex heute.[0-9]+,[0-9]+ kWh.>([0-9]+,[0-9]+).gestern
Das zweite Reading zeigt, wie man die richtigen Informationen bekommt, wenn man statt der berechneten kWh lieber mit den Kubikmeter-Angaben arbeiten möchte. Ich habe dann noch das Modul GASKALULATOR von FHEM genutzt, um die Daten regelmäßig zu protokollieren und noch weitere Infos zur Verfügung zu haben.
Hierzu hätte zwar auch das Reading „Zaehlerstand“ gereicht, war mir aber zu ungenau, da leider keine Nachkommastellen angezeigt werden. Also habe ich, in Verbindung mit dem Gaskalkulator, ein zusätzliches Reading in dem HTTPMOD definiert. Dieses sieht wie folgt aus und addiert immer zum dem Wert, vom Tagesanfang aus dem Gaskalkulator quasi die Info aus „VerbrauchHeute“ hinzu. Meine Definition des entsprechenden Attributs sieht wie folgt aus:
reading03Name Gasverbrauch
reading03OExpr $val =~ s/,/./g; ;$val + ReadingsNum("myGaszaehler","keGaszaehler_Gasverbrauch_Vol1stDay",0);
Bei den Werten aus der Ermittlung mittels HTTPMOD muss man darauf achten, dass die Zahlenwerte mit Kommas dargestellt werden. Diese lassen sich aber nicht richtig weiterverarbeiten, da hier ein Punkt stattdessen erwartet wird. Die entsprechende Umwandlung „s/,/./g“ ist deshalb in den Expression einzubauen.
Die Definition des Gaskalkulator ist auch recht einfach:
defmod myGaszaehler GASKALKULATOR keGaszaehler:Gasverbrauch.*
Zusätzlich habe ich dann nur das Attribut „GasCubicPerCounts“ auf 1 gesetzt, damit der Werte für den Verbrauch 1:1 in den Kalkulator übernommen wird. Der Standardwert ist hier eigentlich 0,01 da das Modul so ausgelegt ist, jeden Impuls zu messen.
Nachfolgend noch ein Bild der übrigen Attribute, die jeder nach seinen Bedürfnissen einstellen kann.
Hi Jürgen,
ich mache die Regex ähnlich. Das sollte passen
Beim Modul meinst du „GasCalculator“? Dort gibt man den IST Zählerstand in m³ an?
Ich habe in meiner Lösung ein UserReading erstellt
define gaszaehler HTTPMOD http://192.168.0.XXX/index.html 60
attr gaszaehler DbLogInclude HeuteKWH,HeuteKWH,gasCumKWH,gasCumQM
attr gaszaehler group Gas
attr gaszaehler handleRedirects 1
attr gaszaehler reading01Expr $val =~ s/,/\./;; $val;;
attr gaszaehler reading01Name HeuteKWH
attr gaszaehler reading01Regex .*heute([0-9]+,[0-9]+) kWh<br
attr gaszaehler reading02Expr $val =~ s/,/\./;; $val;;
attr gaszaehler reading02Name HeuteQM
attr gaszaehler reading02Regex .*heute[0-9]+,[0-9]+ kWh([0-9]+,[0-9]+) m
attr gaszaehler room Energiekosten
attr gaszaehler stateFormat gasCumQM
attr gaszaehler userReadings gasCumKWH:HeuteK.* monotonic {ReadingsNum($name,’HeuteKWH‘,“)},\
gasCumQM:HeuteQ.* monotonic {sprintf(„%.2f“,ReadingsNum($name,’HeuteQM‘,“))}
Mit monotonic wird der Wert immer aufsummiert. Auf HeuteQM habe ich dann ein Startwert vergeben mit dem aktuellen Zählerstand
Das Userreading setze ich dann mit setreading auf den aktuellen Zählerstand:
setreading gaszaehler gasCumQM 46787.84
Btw: Neulich kam das erste Update raus: https://footprintzero.de/quickstart/
Siehe bei dir: 192.168.2.xxx/sysinfo.html
Grüße
Alex
Hallo Jürgen,
aufgrund deiner Blogs habe ich mir ebenfalls den Gaszähler bestellt, um ihn in FHEM einzubinden.
Die Homepage des Zählers ist auch ganz normal im Netz verfügbar, leider bekommt das Gerät in Fhem keine Readings.
Habe alles so angelegt, wie Du es geschrieben hast. Hat sich seit dem Blog noch etwas geändert?
defmod Gaszaehler HTTPMOD 192.168.0.124 300
attr Gaszaehler reading01Name Zaehlerstand
attr Gaszaehler reading01Regex Zä;hlerstand([0-9]+) m3
attr Gaszaehler reading02Name VerbrauchHeute
attr Gaszaehler reading02Regex heute.[0-9]+,[0-9]+ kWh.>([0-9]+,[0-9]+).gestern
Im Log habe ich folgenden Eintrag:
Gaszaehler: Read callback: Error: 192.168.0.124: malformed or unsupported URL
Wäre schön, wenn Du einen Tipp hättest…
VG
Marco
In der neuesten Version hatte sich tatsächlich etwas geändert. Idealerweise setzt man das Attribut httbody auf 1. Dann kann man immer den HTML Code sehen, der beim Abruf ermittelt wurde und seine Regex-Ausdrücke entsprechend anpassen.
Den Zählerstand kann man nun mit folgendem Regex ermitteln:
Zählerstand
([0-9]+) m3
Den VerbrauchHeute mit folgenden Regex:
[0-9]+,[0-9]+ kWh
([0-9]+,[0-9]+) m3<\/sup>
Beim VerbrauchHeute werden die Kubikmeter mit einem Komma angegeben. Manchmal führt dies bei der weiteren Verwendung zu Problemen und wenn man statt dessen eine Punkt als Dezimaltrenner haben möchte kann man noch folgende Expression verwenden (Beispiel reading02OExpr):
$val =~ s/,/\./g; ;$val;
Weiterhin solltest du bei der Definition die URL mal wie folgt angeben: 192.168.0.124/index.html
Hallole zur Ergänzung
Werte können jetzt mit Json aus dem Gaszähler abgefragt werden
defmod Gasechojason HTTPMOD http://192.168.178.xxx/json 1800
attr Gasechojason extractAllJSON 1
attr Gasechojason room Gas
attr Gasechojason stateFormat {ReadingsNum(„Gasechojason“,“gesamt“,0)/100}
folgende Readings werden dannach selbständig angelgt
setstate Gasechojason 9964.72
setstate Gasechojason 2024-02-27 16:36:48 aktuell 1
setstate Gasechojason 2024-02-27 16:36:48 gesamt 996472
setstate Gasechojason 2024-02-27 16:36:48 gestern 3
setstate Gasechojason 2024-02-27 16:36:48 glmw 50
setstate Gasechojason 2024-02-27 16:36:48 heute 387
setstate Gasechojason 2024-02-27 16:36:48 since_last_call 1
Gruss