HomeMatic Tutorial

HomeMatic – Zähler mit Hilfe der FAST EnergyCam auswerten

Gaszaehler EnergyCam

Ich wurde kürzlich von einem Nutzer meines Stromzählers mit HM-ES-TX-WM um Unterstützung gebeten, auf dessen Basis eine Lösung für einen Gaszähler zu realisieren, die an Stelle des HM-ES-TX-WM eine FAST EnergyCam verwendet.

Dieser Sensor ist – sofern man die vergleichsweise hohen Kosten nicht scheut – eine interessante Alternative und recht einfach umzusetzen. Auch für andere Zählerarten als den hier exemplarisch dargestellten Gaszähler, wie z.B. einen Strom- oder Wasserzähler, lässt sich die Lösung einsetzen.


Features:
Aktueller Zählerstand, Verbrauch seit letzter Ablesung, Tages-, Wochen-, Monats- und Jahreszähler


Ich schicke vorweg, dass ich selbst die FAST EnergyCam bisher nicht verwende und keine eigene Erfahrung mit diesem Kamerasensor habe. Die nachfolgend beschriebene Lösung verweist daher bezüglich der Integration der FAST EnergyCam auf externe Links und setzt voraus, dass deren Datenpunkt „METER“ innerhalb der CCU zur Verfügung steht und aktualisiert wird. Die Screenshots von den EnergyCam Daten wurden mir freundlicherweise von dem oben genannten Nutzer zur Verfügung gestellt.

1. Abgriff des Zählerstandes und Übertragung in die HomeMatic

Benötigt werden…


Kamera: FAST EnergyCam
Wireless M-Bus USB Adapter: IMST iM871A-USB
CUxD mit Wireless M-Bus Lizenz für CUxD

In einschlägigen Online-Shops findet man hierzu Bundles, die auch bereits die erforderliche CUxD Lizenz beinhalten.

Wie die Einrichtung über den CUxD realisiert wird, zeigt das verlinkte Video sehr gut.

Wenn alles funktioniert, erscheinen innerhalb des WebUI der CCU folgende Datenpunkte,…

Gaszaehler EnergyCam

…von den wir für die hier beschriebene Lösung nur den Datenpunkt für den aktuellen Zählerstand…


METER

…benötigen.

Die Kamera nimmt ein Foto des Zählers auf und wandelt dieses über eine OCR-Erkennung in einen Zahlenwert um. Somit steht – im Vergleich HM-ES-TX-WM – immer der aktuelle Zählerstand als Datenpunkt zur Verfügung.

Die Ableseintervalle kann man (wohl über ein optionales USB-Interface) einstellen. Der oben zitierte Nutzer hat seinen Intervall auf 10 Minuten eingestellt.

2. Zählerauswertung

Zunächst sind folgende Systemvariablen in der CCU anzulegen…


„Gas Zaehlerstand“, Zahl
„Gas Verbrauch seit letzter Ablesung“, Zahl
„Gas Verbrauch laufendes Kalenderjahr“, Zahl
„Gas Verbrauch laufender Monat“, Zahl
„Gas Verbrauch laufende Woche“, Zahl
„Gas Verbrauch heute“, Zahl


Für die interne Berechnung werden zusätzlich folgende Systemvariablen benötigt…

Für den aufsummierten Ablesezählerstand bis letzte Ablesung…

„Gas Referenz Verbrauch seit letzter Ablesung“, Zahl

Für den aufsummierten Jahreszählerstand bis Ende letztes Jahr…

„Gas Referenz Verbrauch laufendes Kalenderjahr“, Zahl

Für den aufsummierten Monatszählerstand bis Ende letzten Monat…

„Gas Referenz Verbrauch laufender Monat“, Zahl

Für den aufsummierten Wochenzählerstand bis Ende letzte Woche…

„Gas Referenz Verbrauch laufende Woche“, Zahl

Für den aufsummierten Tageszählerstand bis gestern…

„Gas Referenz Verbrauch heute“, Zahl

Hierbei ist zu beachten, dass der in der CCU voreingestellte Wertebereich für Systemvariablen vom Typ Zahl von 0 bis 65000 reicht, was bei einigen Bestandszählern nicht ausreichen dürfte. Daher ist zumindest für die Systemvariable „Gas Zaehlerstand“ sowie alle Referenz-Systemvariablen als Maximalwert 999999.99 einzugeben…

Gaszaehler EnergyCam

Zur Auswertung wird mit dem folgenden Programm…

Gaszaehler EnergyCam

…das Auswerteskript ausgeführt:

object oE = dom.GetObject("CUxD.CUX2500001:1.METER");
var zA = dom.GetObject("Gas Zaehlerstand");
var vLz = dom.GetObject("Gas Referenz Verbrauch seit letzter Ablesung");
var vLg = dom.GetObject("Gas Verbrauch seit letzter Ablesung");
var vTz = dom.GetObject("Gas Referenz Verbrauch heute");
var vTg = dom.GetObject("Gas Verbrauch heute");
var vWz = dom.GetObject("Gas Referenz Verbrauch laufende Woche");
var vWg = dom.GetObject("Gas Verbrauch laufende Woche");
var vMz = dom.GetObject("Gas Referenz Verbrauch laufender Monat");
var vMg = dom.GetObject("Gas Verbrauch laufender Monat");
var vJz = dom.GetObject("Gas Referenz Verbrauch laufendes Kalenderjahr");
var vJg = dom.GetObject("Gas Verbrauch laufendes Kalenderjahr");
zA.State(oE.State());
vLg.State(zA.State() - vLz.State());
vTg.State(zA.State() - vTz.State());
vWg.State(zA.State() - vWz.State());
vMg.State(zA.State() - vMz.State());
vJg.State(zA.State() - vJz.State());

Da die EnergyCam mit dem Datenpunkt…


METER

…immer den aktuellen Zählerstand bereitstellt, wird dieser mit der Skriptzeile Nr. 13 unmittelbar in die Systemvariable…


„Gas Zaehlerstand“

…gespeichert.

Die Zeitraum-Zähler werden nach folgender Systematik mit den Skriptzeilen Nr. 14 bis 18 berechnet…


"neuer \quad Stand" \quad (kWh) = "aktueller \quad Stand" - "Stand \quad bis \quad zum \quad letzten \quad Reset"

Zum Reset der Jahres-, Monats-, Wochen und Tageszähler auf „NULL“ bieten sich CCU-Programme an, die über das Zeitmodul der CCU kurz nach Mitternacht ausgeführt werden. Hier ein Beispiel für den Tageszähler…

Gaszaehler EnergyCam

Mit dem Skript wird – bevor die Verbrauchs-Systemvariable auf NULL gesetzt wird – die zugehörige Referenz-Systemvariable (= Zählerstand zum Zeitpunkt des letzten Reset) mit dem aktuell aufsummierten Wert überschrieben und bildet sodann die Referenz für den nächsten Zeitraum.

var vTz = dom.GetObject("Gas Referenz Verbrauch heute");
var vTg = dom.GetObject("Gas Verbrauch heute");
vTz.State(vTg.State() + vTz.State());

Entsprechend sehen die Rücksetz-Skripte für die Zähler der anderen Zeiträume aus…

var vWz = dom.GetObject("Gas Referenz Verbrauch laufende Woche");
var vWg = dom.GetObject("Gas Verbrauch laufende Woche");
vWz.State(vWg.State() + vWz.State());
var vMg = dom.GetObject("Strom Verbrauch laufender Monat");
var vMz = dom.GetObject("Strom Referenz Verbrauch laufender Monat");
vMz.State(vMg.State() + vMz.State());
var vJz = dom.GetObject("Gas Referenz Verbrauch laufendes Kalenderjahr");
var vJg = dom.GetObject("Gas Verbrauch laufendes Kalenderjahr");
vJz.State(vJg.State() + vJz.State());

Hinweis:
Alternativ zu der hier beschriebenen Lösung kann man die Zeitraumzähler auch gemeinsam mit nur einem Programm/Skript zurücksetzen. Wie das geht, habe ich in dem verlinkten Tutorial gesondert beschrieben.

Zum Reset des Ablesezählers empfiehlt es sich, das Programm manuell (z.B. im WebUI) zu starten, wenn die Gaszählerablesung erfolgt ist. Im zugehörigen Programm lässt man hierzu einfach das Zeitmodul weg…

Gaszaehler EnergyCam

var vLz = dom.GetObject("Gas Referenz Verbrauch seit letzter Ablesung");
var vLg = dom.GetObject("Gas Verbrauch seit letzter Ablesung");
vLz.State(vLg.State() + vLz.State());

3. Ersteinrichtung und Korrektur

Nach der Ersteinrichtung oder bei Abweichungen durch z.B. Abstürze der CCU oder Stromausfälle können die Zählerstände der Zeitraumzähler durch manuelle Anpassung der Referenz-Systemvariablen…


„Gas Referenz Verbrauch seit letzter Ablesung“, Zahl
„Gas Referenz Verbrauch laufendes Kalenderjahr“, Zahl
„Gas Referenz Verbrauch laufender Monat“, Zahl
„Gas Referenz Verbrauch laufende Woche“, Zahl
„Gas Referenz Verbrauch heute“, Zahl

…nach dem folgenden Schema korrigiert werden…


"Gas \quad Referenz \quad Verbrauch \quad Zeitraum" = "Gas \quad Zaehlerstand" - "Gas \quad Verbrauch \quad Zeitraum"

also z.B. bezogen auf den Tageszähler…


"Gas \quad Referenz \quad Verbrauch \quad heute" = "Gas \quad Zaehlerstand" - "Gas \quad Verbrauch \quad heute"

Für den Tageszähler („Gas Referenz Verbrauch laufender Monat“) ist das der aktuelle Zählerstand minus den bis zum Eintragezeitpunkt bereits aufgelaufenen Verbrauch (ggf. geschätzt). Dies entspricht dem Zählerstand vom Vortag 23:59 Uhr.

Für den Wochenzähler „Gas Referenz Verbrauch laufende Woche“) der aktuelle Zählerstand minus den bis zum Eintragezeitpunkt bereits aufgelaufenen Wochenverbrauch (ggf. geschätzt). Dies entspricht dem Zählerstand von letztem Sonntag 23:59 Uhr.

Für des Monatszähler („Gas Referenz Verbrauch laufender Monat“) der aktuelle Zählerstand minus den bis zum Eintragezeitpunkt bereits aufgelaufenen Monatsverbrauch (ggf. geschätzt). Dies entspricht dem Zählerstand vom letzten Tag des Vormonats 23:59 Uhr.

Für den Jahreszähler („Gas Referenz Verbrauch laufendes Jahr“) der aktuelle Zählerstand minus den bis zum Eintragezeitpunkt bereits aufgelaufenen Jahresverbrauch (ggf. geschätzt). Dies entspricht dem Zählerstand vom 31.12. des Vorjahres 23:59 Uhr.

Für den Ablesezähler („Gas Referenz Verbrauch seit letzter Ablesung“) der aktuelle Zählerstand minus den bis zum Eintragezeitpunkt bereits aufgelaufenen Verbrauch seit der letzten Stromablesung (ggf. geschätzt). Am besten übernimmt man hierfür den Zählerstand von der letzten Gasrechnung.

Mit dem nächsten Ausführen des Auswerteskriptes sollten alle Zeitraumzähler (wieder) die korrekten Verbräuche anzeigen.

 

Bitte beachten...

SMART WOHNEN by sTeRn AV ist ein rein privates Projekt. Support kann ich daher nur im Rahmen meiner begrenzten Freizeit leisten, hierfür bitte ich um Verständnis. Meine Hinweise, Anleitungen, Schaltungen und Software werden so angeboten, „wie sie sind“. Die Verwendung erfolgt auf eigenes Risiko, ich übernehme hierfür keinerlei Gewährleistung bzw. Haftung.
Creative Commons Lizenzvertrag
Copyright © Jens-Peter Stern | SMART WOHNEN by sTeRn AV | smart-wohnen.org

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

* Die Checkbox für die Zustimmung zur Speicherung ist nach DSGVO zwingend.

Ich stimme zu.