Homematic-HmIP-ESI-IEC

Aus Debacher-Wiki
Zur Navigation springenZur Suche springen
Die Druckversion wird nicht mehr unterstützt und kann Darstellungsfehler aufweisen. Bitte aktualisiere deine Browser-Lesezeichen und verwende stattdessen die Standard-Druckfunktion des Browsers.

Die Lieferzeit war mit sechs Wochen recht lang, aber heute ist die Schnittstelle für digitale Stromzähler bei mir eingetroffen. Die Installation des Gerätes war relativ aufwändig, da zuerst eine Aktualisierung der CCU3 Software notwendig war. Die anschließende Installation des Gerätes verlief für mich nicht ganz nachvollziehbar. Die Weboberfläche der CCU blieb immer hängen, wenn ich die Funkton Geräte anlernen aufgerufen habe. Zum Teil erschien das entsprechende Fenster unvollständig, nur die obere Hälfte. Wenn alles Elemente vorhanden waren, konnte ich nichts mehr wirklich machen, das System hing eine ganze Weile. Aber irgendwann war das Gerät im Posteingang. Auch dort dauerte es eine ganze Weile, bevor ich den Fertig Button aktivieren konnte. Aber aktuell ist alles in Ordnung.

Installation

Leider war nicht alles in Ordnung, das Gerät lieferte nur die aktuelle Leistung. Das ist aber der Wert, der mich am wenigsten interessiert, weil er auch gut über den Wechselrichter bezogen wird. Mich interessieren am meisten die Tages-Energiemengen und genau die fehlen, auch noch nach einem Tag Wartezeit. Bei der Suche nach neuen Systemvariablen und Systemprogrammen ist mir auch aufgefallen, dass diese fehlen. Bei der Installation muss also etwas schiefgelaufen sein.

2024-03-13 11.26.51 0e310ebc09e5.png

Ich habe also das Gerät abgelernt und neu eingebunden, danach tauchten auch die gesuchten Werte auf, hoffentlich folgen auch noch die historischen Daten.

Einstellungen

Die notwendigen Einstellungen soll das Gerät selbstständig erkennen, also den angeschlossenen Sensor und das genutzte Protokoll. Für die Kommunikation werden die notwendigen Obis-Werte eingetragen.

2024-03-13 11.37.20 af46a3ac36b7.png

Im Screenshot tauchen auf:

  • 16.7.0: momentane Leistung alle Phasen
  • 1.8.1: Bezug HT
  • 1.8.2: Bezug NT
  • 2.8.0: Einspeisung

Darstellung in der Oberfläche

Die Oberfläche zeigt eine Reihe von Werten an:

2024-03-14 09.49.10 b390f564b7df.png

Hier sind auch die ersten zusätzlichen Werte für den heutigen Tag aufgetaucht. Später werde ich testen, ob man den unbenutzten Kanal 3 noch für andere Informationen nutzen kann.

An der Darstellung nach einem Tag kann man gut erkennen, dass die historischen Werte so etwas wie ein Fake sind. Ich hatte ursprünglich den Eindruck, dass sie direkt vom Zähler gelesen werden. Wie man hier sieht, kann das nicht so sein:

2024-03-15 12.23.04 87585ba7b016.png

Die Werte werden nachts aus den Werten des vergangenen Tages berechnet bzw. aufsummiert.

Wirklich vom Zähler geholt werden nur die Leistung (alle 2,5 bzw. 5 Minuten) und drei Energiewerte (seltener)

  • Energie Bezug HT
  • Energie Bezug NT
  • Energie Lieferung

Daten im Hintergrund

Mit dem folgenden kleinen Script habe ich mir alle Daten von Kanal 1 des SmartMeter ausgeben lassen:

! Namen des Kanals definieren, hier den eigenen eintragen
string KanalName = "HmIP-ESI:1";
! Kanal holen
var AktorKanal = dom.GetObject(KanalName);
string id; 
! Alle Datenpunkte durchlaufen
foreach(id, AktorKanal.DPs()) {
   ! Einzelnen Datenpunkt holen
   var dp = dom.GetObject(id);
   ! Namen und Wert des DPs ausgeben
   WriteLine(dp.Name() # ": " # dp.Value());
}

Hier wird jeweils der Name und der aktuelle Wert angezeigt:

HmIP-RF.003FA0C9B1C6BC:1.CHANNEL_OPERATION_MODE: 4
HmIP-RF.003FA0C9B1C6BC:1.GAS_FLOW: 0.000000
HmIP-RF.003FA0C9B1C6BC:1.GAS_FLOW_STATUS: 0
HmIP-RF.003FA0C9B1C6BC:1.POWER: 1063.000000
HmIP-RF.003FA0C9B1C6BC:1.POWER_STATUS: 0
HmIP-RF.003FA0C9B1C6BC:1.SELF_CALIBRATION: 
HmIP-RF.003FA0C9B1C6BC:1.SELF_CALIBRATION_RESULT: 4


Mit dem folgenden Script werden alle Variablen der CCU angezeigt

string name;
foreach(name, dom.GetObject(ID_SYSTEM_VARIABLES).EnumNames()) {
    WriteLine(name);    
}

Am Ende der Liste tauchen acht neue Systemvariable auf, die Zähler für die heutigen und gestrigen Werte. Es gibt aber noch vier weitere interne Variable, die aber anscheinend nicht an das Gerät gebunden sind und daher auch nicht mit dem obigen Script angezeigt werden.

svEnergyCounter_11975_003FA0C9B1C6BC:1
svEnergyCounterOldVal_11975
svEnergyCounter_11983_003FA0C9B1C6BC:2
svEnergyCounterOldVal_11983
svEnergyCounter_11988_003FA0C9B1C6BC:3
svEnergyCounterOldVal_11988
svEnergyCounter_11991_003FA0C9B1C6BC:4
svEnergyCounterOldVal_11991

Jeweils eine Variable für den laufenden Wert des aktuellen Kanals und eine Variable für den alten Wert, der um Mitternacht ermittelt wird. Aus der Differenz der beiden Werte wird der aktuelle Tagesverbrauch ermittelt.

Die weiteren Eigenschaften einer Variablen kann man sich dann anschauen mittels:

object  svObj  = dom.GetObject("svEnergyCounterOldVal_11975");
WriteLine(svObj.Internal());
WriteLine(svObj.Visible());
WriteLine(svObj.Value());
WriteLine(svObj.ID());

Zu Variablen siehe auch Programmierung bei Homematic.

Scripten im Hintergrund

Die internen Variablen werden von einigen Scripten verwaltet, die man aber nur sieht, wenn man den Button "Systeminterne Programme einblenden" gedrückt hat.

2024-03-14 09.05.41 ed59afa97203.png

Es tauchen hier insgesamt sieben Scripten auf:

  • das mittlere Script ist für den optionalen Gassensor gedacht, der kennt natürlich nur einen Tarif und keine Einspeisung
  • die unteren drei Scripten werden jeweils um Mitternacht gestartet, addieren den Tagesverbrauch zu den historischen Werten und setzen jeweils den Tageszähler auf Null
  • die oberen drei Scripten aktualisieren jeweils die Tageswerte


Export zu OpenHAB

Für den Sensor werden keine zusätzlichen Variablen angelegt, insofern fällt auch der Export zu OpenHAB recht mager aus.

2024-03-17 19.24.35 6836037a6375.png

Es werden nur die vier kontinuierlich laufenden Zählerwerte geliefert:

  • 16.7.0: momentane Leistung alle Phasen
  • 1.8.1: Bezug HT
  • 1.8.2: Bezug NT
  • 2.8.0: Einspeisung

Die Tageswerte werden von den oben erstellten Scripten berechnet und dann in Metainformationen des jeweiligen Kanals gespeichert. Von dort kann man sie aber mit eigenen Scripten holen und in eigene Systemvariable schreiben.

Homematic-Erweiterung

Ich habe mir also zwei Systemvariable (der Bezug NT spielt bei mir bisher keine Rolle) erstellt:

NetzBezugHeute
NetzEinspeisHeute

Dazu dann zwei Programme

NetzBezugHeute
NetzEinspeisHeute

die die jeweilige Variable füllen:

2024-03-17 19.30.17 6fe76a7dc2eb.png

Wichtig ist hier eine kleine Verzögerung (hier 5 Sekunden) vor dem Start des Scriptes, damit das Homematiceigene Programm Zeit hat die eigenen Daten zu aktualisieren. Die Programme selber sind dann recht klein.

object chn = dom.GetObject('11983');
real energy0 = chn.MetaData('energy0').ToFloat();
energy0 = (energy0 / 1000).ToFloat();

! Systemvariable holen
var systemv = dom.GetObject("NetzBezugHeute");

! Wert setzen
systemv.State(energy0);

Die Kanal-ID hier 11983 kann man den Scripten der Homematic-Installation entnehmen. Sie sind schon in der Programmübersicht zu erkennen, wie man an dem Screenshot oben sehen kann.

Der Vollständigkeit halber auch das zweite Script

2024-03-17 19.56.42 9127219d343b.png

object chn = dom.GetObject('11991');
real energy0 = chn.MetaData('energy0').ToFloat();
energy0 = (energy0 / 1000).ToFloat();

! Systemvariable holen
var systemv = dom.GetObject("NetzEinspeisHeute");

! Wert setzen
systemv.State(energy0);

OpenHAB-Erweiterung

Auf die beiden Variablen kann ich dann innerhalb von OpenHAB zugreifen. Damit OpenHAB aber neue Variable auf der Homematic erkennt, muss man das Geräte EXTRA-GATEWAY einmal entfernen und wieder neu einrichten.

Danach stehen auch diese beiden Variablen zur Verfügung. Die bisherigen Zuordnungen gehen hierbei nicht verloren.

Bei mir wurden die Variablen aber in OpenHAB nicht zuverlässig aktualisiert, da habe ich meine Rule Refresh vom Wettersensor entsprechend erweitert.

2024-03-17 19.50.57 96e2aa6bea5b.png

2024-03-17 19.51.12 0117ec668c41.png