Smarter Gaszähler in finaler Version in FHEM eingebunden

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.

Dashboard des Gaszählers von Footprintzero

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&auml;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.

Attribute für meinen Gaskalkulator in FHEM

4 comments

  1. 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

  2. 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

  3. 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:

    heute<\/div>
    [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

  4. 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

Leave a Reply

Your email address will not be published. Required fields are marked *

*

x

Check Also

Ecoflow Powerstream Lade- und Einspeisesteuerung mit FHEM

Seit einiger Zeit habe ich eine Ecoflow Delta2 in Verbindung mit einem Ecoflow Powerstream im ...