HomeMatic Tutorial

Homematic – Stromzähler auswerten Version 3 mit HM-ES-TX-WM und Smart-Meter

Letzte Aktualisierung am 25. November 2021

Unser Ferrariszähler wurde vor kurzem durch ein intelligentes Messsystem (iMSys) ersetzt, wodurch einige Anpassungen bei der bestehenden Stromzählerauswertung erforderlich wurden.

Nachfolgend finden Anwender des Tutorials HomeMatic – Stromzähler auswerten Version 2 mit HM-ES-TX-WM eine Anleitung zum Umstieg, mit der aber auch Ersteinrichter eines elektronischen Energiezählers zum Ziel kommen sollten.

Ein iMSys besteht aus einer modernen Messeinrichtung (mME, =elektronischer Energiezähler), die um eine Kommunikationseinheit (=Smart Meter Gateway, SMGW) ergänzt ist. Zusammen bilden sie das iMSys (=elektronischer Energiezähler mit Fernauslesung bzw. intelligenter Zähler). Im Vergleich zu einer einfachen mME hat man also einen Zähler, der aktiv mit dem Messstellenbetreiber kommuniziert, wodurch die Ablesung vor Ort entfällt und die Verbrauchsdaten online visualisiert werden können. Zudem haben SMGW häufig eine HAN-Schnittstelle, über die sich der Zähler in Smart-Home-Systeme einbinden lässt.

In diesem Artikel geht es aber nicht um die Einbindung eines iMSys über das SMGW (das kommt vielleicht mal später in einem gesonderten Artikel), sondern um den “Umbau” eines HM-ES-TX-WM-Ferraris-Zählers für die Nutzung mit einem elektronischen Energiezähler über dessen Infrarot-Kommunikationsschnittstelle. Das funktioniert mit einer mME und – alternativ oder ergänzend zum SMGW – gleichermaßen mit einem iMSys.

Vereinfachend wird nachfolgend – nicht ganz korrekt – für beide Zählervarianten der Begriff “Smart-Meter” synonym verwendet.

1. Abgriff des Stromzählerstandes und Übertragung in die Homematic

Um den HM-ES-TX-WM über die optische Schnittstelle an einem Smart-Meter betreiben zu können, werden eine Firmware Version 2.n (ich habe die derzeit aktuelle Version 2.5 genommen) und der Energiesensor für Smart Meter ES-IEC benötigt. Beides gibt es vom Hersteller bzw. herstellereigenen Versandhandel.

Nach dem Zusammenbau und Anschluss des ES-IEC Sensors sowie dem Flashen der Firmware des HM-ES-TX-WM über die WebUI der CCU sollte der HM-ES-TX-WM für den eigenen Zähler konfiguriert werden können.

Bei dem hier eingebauten Itron 3.HZ-BC-D4-A1-12 funktionieren die Konfigurationsparameter, wie sie in der Kompatibilitätsliste für den Itron 3.HZ-BC-D1-A1-12 niedergelegt sind…

Der zweite Kanal wird hier nicht genutzt, da wir derzeit nur Strom beziehen. Mittels der Identifikationskennzeichnung des Zählerstandes 2.8.0 könnte bei dem genannten Smart-Meter womöglich auch die zusätzliche Erfassung einer Einspeisung über den zweiten Kanal funktionieren.

Die nachfolgenden Daten werden mit dieser Einstellung an die CCU übertragen…

Zum Freischalten der Übertragung eines erweiterten Datensatzes, mit Leistungswert und Dezimalstellen, ist ggf. eine PIN erforderlich, die fest programmiert ist und beim eigenen Messstellenbetreiber erfragt werden kann.

Bei dem Itron-Modell ist hierzu über dessen optische Taste die PIN einzugeben, der PIN-Schutz ggf. zu deaktivieren und die Ausgabe des erweiterten Datensatzes einzuschalten (Inf „on“). Anschließend wird der Zählerstand mit Nachkommastellen ausgegeben und die Momentanleistung ist im Datensatz enthalten.

Im Vergleich zum Zählersensor Ferraris-Zähler ES-Fer wird der Leistungswert über den Datenpunkt IEC_POWER übermittelt. An Stelle des Energiewertes in Ws wird im Datenpunkt IEC_ENERGY_COUNTER der tatsächliche Zählerstand in kWh übertragen. Dadurch sind Auswertung und Batteriewechsel deutlich einfacher und das Überlaufproblem bei Erreichen von 838860,7 Wh spielt (hoffentlich) auch keine Rolle mehr.

2. Zählerauswertung

Die Systemvariable für die Überlaufkorrektur und die Referenz Systemvariable für den Zählerstand sind nun entbehrlich geworden…

"Strom ENERGY_COUNTER", Zahl
"Strom Referenz Zaehlerstand", Zahl

Benötigt werden (weiterhin) für die Zählerwerte die folgenden Systemvariablen…

"Strom Zaehlerstand", Zahl
"Strom Verbrauch seit letzter Ablesung", Zahl
"Strom Verbrauch laufendes Kalenderjahr", Zahl
"Strom Verbrauch laufender Monat", Zahl
"Strom Verbrauch laufende Woche", Zahl
"Strom Verbrauch heute", Zahl
"Strom Leistungsaufnahme aktuell", Zahl

…sowie für die interne Berechnung des aufsummierten Zählerstandes zur letzten Ablesung…

"Strom Referenz Verbrauch seit letzter Ablesung", Zahl

…für den aufsummierten Zählerstand zum Ende letzten Jahres…

"Strom Referenz Verbrauch laufendes Kalenderjahr", Zahl

…für den aufsummierten Zählerstand zum Ende letzten Monats…

"Strom Referenz Verbrauch laufender Monat", Zahl

…für den aufsummierten Zählerstand zum Ende letzter Woche…

"Strom Referenz Verbrauch laufende Woche", Zahl

…für den aufsummierten Zählerstand zum Ende des gestrigen Tages…

"Strom 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 ggf. auf Dauer nicht ausreicht. Daher sollte zumindest für die Systemvariable “Strom Zaehlerstand” und für alle Referenz-Systemvariablen als Maximalwert 999999.99 eingegeben werden.

Beim Wechsel vom Ferrariszähler werden für die Referenz-Systemvariablen temporär negative Werte benötigt (siehe im Kapitel 5 unten). Somit bietet es sich an, bereits hier als Minimalwert -999999.99 einzugeben…

Zur Auswertung werden bei Aktualisierung des Leistungswertes zunächst die beiden Datenpunkte IEC_POWER und IEC_ENERGY_COUNTER des HM-ES-TX-WM sowie die relevanten Systemvariablen ausgelesen. Während die aktuelle Leistungsaufnahme der Wohneinheit und der Zählerstand ohne Umwege in die zugehörige Systemvariable gespeichert werden können, werden die Zeitraum-Zähler nach folgender Systematik berechnet…


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

Das zugehörige Skript…

object oP = dom.GetObject("BidCos-RF.MEXXXXXXXX:1.IEC_POWER");
object oE = dom.GetObject("BidCos-RF.MEXXXXXXXX:1.IEC_ENERGY_COUNTER");
var zA = dom.GetObject("Strom Zaehlerstand");
var aA = dom.GetObject("Strom Leistungsaufnahme aktuell");
var vLz = dom.GetObject("Strom Referenz Verbrauch seit letzter Ablesung");
var vLg = dom.GetObject("Strom Verbrauch seit letzter Ablesung");
var vTz = dom.GetObject("Strom Referenz Verbrauch heute");
var vTg = dom.GetObject("Strom Verbrauch heute");
var vWz = dom.GetObject("Strom Referenz Verbrauch laufende Woche");
var vWg = dom.GetObject("Strom Verbrauch laufende Woche");
var vMz = dom.GetObject("Strom Referenz Verbrauch laufender Monat");
var vMg = dom.GetObject("Strom Verbrauch laufender Monat");
var vJz = dom.GetObject("Strom Referenz Verbrauch laufendes Kalenderjahr");
var vJg = dom.GetObject("Strom Verbrauch laufendes Kalenderjahr");
zA.State(oE.State().Round(1));
aA.State(oP.State());
vLg.State((zA.State() - vLz.State()).Round(0));
vTg.State((zA.State() - vTz.State()).Round(0));
vWg.State((zA.State() - vWz.State()).Round(0));
vMg.State((zA.State() - vMz.State()).Round(0));
vJg.State((zA.State() - vJz.State()).Round(0));

…wird mit jeder Aktualisierung des Leistungs-Datenpunktes IEC_POWER ausgeführt…

Das hiesige Smart-Meter überträgt mittels HM-ES-TX-WM in der Grundkonfiguration keine, nach Freischaltung des erweiterten Datensatzes vier Dezimalstellen. Das Skript rundet den Zählerstand auf eine Dezimalstelle, die Zeitraumzähler auf ganze kWh. Falls die Zeitraumzähler auch Dezimalstellen anzeigen sollen, kann im Skript die Zahl p in der Funktion “Round(p)” angepasst werden.

Der Reset der Zeitraumzähler funktioniert exakt nach dem Verfahren bei Ferrariszählern, weswegen Umsteiger diesbezüglich nichts anpassen müssen.

Details zum Vorgehen finden Erstanwender im Kapitel 2 des Tutorials HomeMatic – Stromzähler auswerten Version 2 mit HM-ES-TX-WM.

Ich empfehle jedoch, den Reset der “Kalenderzähler” nach dem Tutorial HomeMatic – Alle Zähler zusammen zurücksetzen gemeinsam vorzunehmen, wozu das folgende Skript über das Zeitmodul der CCU oder noch besser einen CUxD-Timer jeden Tag um 23:59 Uhr getriggert werden muss…

!Tageszaehler
var vTz = dom.GetObject("Strom Referenz Verbrauch heute");
var vTg = dom.GetObject("Strom Verbrauch heute");
vTz.State(vTg.State() + vTz.State());
vTg.State(0.00);
!Wochenzaehler
if (system.Date("%u") == 7) {
var vWz = dom.GetObject("Strom Referenz Verbrauch laufende Woche");
var vWg = dom.GetObject("Strom Verbrauch laufende Woche");
vWz.State(vWg.State() + vWz.State());
vWg.State(0.00);
}
!Monatszaehler
time morgen = (system.Date("%F %X").ToTime().ToInteger() + 120).ToTime();
if (morgen.Day() == 1) {
var vMz = dom.GetObject("Strom Referenz Verbrauch laufender Monat");
var vMg = dom.GetObject("Strom Verbrauch laufender Monat");
vMz.State(vMg.State() + vMz.State());
vMg.State(0.00);
}
!Jahreszaehler:
if ((system.Date("%m") == 12) && (system.Date("%d") == 31)) {
var vJz = dom.GetObject("Strom Referenz Verbrauch laufendes Kalenderjahr");
var vJg = dom.GetObject("Strom Verbrauch laufendes Kalenderjahr");
vJz.State(vJg.State() + vJz.State());
vJg.State(0.00);
}

Zum Reset des Ablesezählers empfiehlt sich ein Programm, das manuell gestartet wird, wenn die Stromzählerablesung erfolgt ist und folgendes Skript ausführt…

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

3. Batteriewechsel

Nach einem Batteriewechsel wird der aktuelle Zählerstand ausgelesen und direkt an die CCU übertragen. Manuelle Anpassungen, wie bei der Verwendung von Ferrrariszählern erforderlich, erübrigen sich nun.

Da die Zeitraumzähler um 23:59 Uhr zurückgesetzt werden, sollte ein Batteriewechsel nicht um diesen Zeitpunkt herum erfolgen.

Wer ganz sichergehen will, kann vor dem Batteriewechsel alle aktuellen Werte der Referenz-Systemvariablen notieren, und diese nach dem Batteriewechsel verifizieren.

4. Korrektur und Ersteinrichtung

Die Auswertung des HM-ES-TX-WM funktioniert normalerweise sehr genau und durch die direkte Übermittlung des Zählerstandes werden Differenzen beim Zählerstand vermieden.

Durch Abstürze der CCU oder z.B. Stromausfälle können aber mehr oder weniger große Abweichungen bei den Zeitraumzählern entstehen, wenn die letzte Speicherung der REGADOM (DOM-Save) zu lange zurückliegt.

Auch bei der Ersteinrichtung müssen die Zeitraumzähler einmalig auf die richtigen Werte gebracht werden.

Abweichungen lassen sich durch manuelle Anpassung der Referenz-Systemvariablen…

“Strom Referenz Verbrauch seit letzter Ablesung”, Zahl
“Strom Referenz Verbrauch laufendes Kalenderjahr”, Zahl
“Strom Referenz Verbrauch laufender Monat”, Zahl
“Strom Referenz Verbrauch laufende Woche”, Zahl
“Strom Referenz Verbrauch heute”, Zahl

…nach dem folgenden Schema korrigieren…


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

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


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

Für den Tageszähler (Strom Referenz Verbrauch laufender Tag) ist das der aktuelle Zählerstand minus den am Eintragetag bereits aufgelaufenen Verbrauch (ggf. geschätzt). Dies entspricht dem Zählerstand vom Vortag 23:59 Uhr.

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

Für des Monatszähler (Strom 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 (Strom 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 (Strom 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 Stromrechnung.

Das kann man z.B. mit dem folgenden Skript erledigen (die “!” sind in den Zeilen, deren Systemvariable befüllt werden soll, zu entfernen und die eigenen Zahlenwerte einzusetzen)…

var vTz = dom.GetObject("Strom Referenz Verbrauch heute");
var vWz = dom.GetObject("Strom Referenz Verbrauch laufende Woche");
var vMz = dom.GetObject("Strom Referenz Verbrauch laufender Monat");
var vJz = dom.GetObject("Strom Referenz Verbrauch laufendes Kalenderjahr");
var vLz = dom.GetObject("Strom Referenz Verbrauch seit letzter Ablesung");
! vTz.State(2968.00);
! vWz.State(3661.00);
! vMz.State(7258.00);
! vJz.State(7430.00);
! vLz.State(7550.00);
WriteLine("Referenz Systemvariablen wie folgt gespeichert:");
WriteLine("Tageszaehler:");
WriteLine(vTz.State());
WriteLine("Wochenzaehler:");
WriteLine(vWz.State());
WriteLine("Monatszaehler:");
WriteLine(vMz.State());
WriteLine("Jahreszaehler:");
WriteLine(vJz.State());
WriteLine("Ablesezaehler:");
WriteLine(vLz.State());

Da die Zeitraumzähler um 23:59 Uhr zurückgesetzt werden, sollten – wie bei einem Batteriewechsel – Korrekturen nicht in diesem Zeitfenster erfolgen.

5. Umzug vom (Ferraris-)zähler

Falls ein Bestandszähler mit HM-ES-TX-WM auf einen neuen Zähler umgestellt werden soll, sind die Referenz-Systemvariablen der Zeitraumzähler bis zum nächsten Reset so anzupassen, dass die bestehenden Zählerwerte korrekt fortgeschrieben werden.

Während der ausgebaute Zähler einen bestimmten aufgelaufenen Zählerstand aufweist, wird das neu eingebaute Smart-Meter in aller Regel bei NULL zu zählen beginnen. Aber auch mit einem Zählerstand zum Einbau größer NULL ist eine Anpassung einfach möglich.

Wenn zum Zeitpunkt der Korrektur ein Reset bereits erfolgt ist, was z.B. beim Tageszähler recht schnell der Fall sein könnte, ist lediglich nach dem in Kapitel 4 beschriebenen Verfahren folgender Referenzwert einzutragen…


"Referenz \quad SysVar \quad Smart-Meter" = "Aktueller \quad  Zaehlerstand \quad zum \quad Stichpunkt" - "Verbrauch \quad Zeitraum-Zaehler \quad bis \quad Stichpunkt"

Für alle Zähler, die nach dem Umbau noch nicht zurückgesetzt wurden, ist die neue Referenz folgendermaßen zu berechnen…


"Referenz \quad SysVar \quad Smart-Meter = "Referenz \quad SysVar \quad Ferraris" - "Zaehlerstand \quad Ausbau \quad Ferraris" + "Zaehlerstand \quad Einbau \quad Smart-Meter"

Da dies negative Referenzwerte ergibt, sind die Referenz-Systemvariablen – wie in Kapitel 2 beschrieben – zumindest temporär für negative Zahlen zu deklarieren.

Hier ein praktisches Beispiel zur Veranschaulichung, wobei der Tageszähler zum Stichpunkt nach dem Smart-Meter-Einbau bereits zurückgesetzt wurde, alle anderen Zähler noch nicht…

Nach dem Reset der alten Referenzen sollten die Zähler auf NULL gesetzt sein und die Referenzwerte wieder stimmen. Falls nicht, müssen sie einmalig nach dem in Kapitel 4 beschriebenen Verfahren korrigiert werden.

Bitte beachten...

SMART WOHNEN in Stern's Haus 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! Für die Einhaltung der einschlägigen technischen Vorschriften ist jeder Anwender selbst verantwortlich!
Creative Commons Lizenzvertrag
Copyright © Jens-Peter Stern | SMART WOHNEN in Stern's Haus | smart-wohnen.org

Schreibe einen Kommentar

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