Interne Systemvariablen zwischen HomematicIP und Home Assistant austauschen

Dass meine Hausinstallation über HomematicIP, Shelly und Homeassistant gesteuert wird, ist ja schon in vorherigen Beiträgen erörtert worden. Nun ist ein Sensor hinzugekommen, der den Gaszählerstand komfortabel ermitteln und darstellen soll. Gar nicht so einfach, wie ich dachte …

Der Gaszähler HmIP-ESI-GAS stammt von eQ-3 und reiht sich in die HomematicIP-Komponenten ein. Mit der CCU3 verbindet er sich problemlos. Leider ist er aber nicht in der Lage den Zählerstand direkt auszulesen, denn diese Information können die üblichen Gaszähler nicht über eine Schnittstelle bereitstellen. Die Funktion des Sensors besteht darin, einen Takt zu registrieren. Dieser Takt wird erzeugt durch das Zählwerk im Gaszähler. Letztendlich läuft nur ein Magnet an einem Magnetsensor vorbei.

Der Takt muss noch entsprechend skaliert werden. Das ist die Gerätekonstante, die in meinem Fall mit 0,010 m³/Impuls zählerseitig bzw. bauartbedingt festgelegt ist. Der Wert muss auch bei der Integration in die CCU3 eingegeben werden. Ein weiterer Wert muss natürlich auch eingegeben werden: Der Startwert gemäß Zählerablesung. Mit diesen beiden Werten kann die CCU den aktuellen Zählerstand hochzählen und in der HomematicIP-GUI anzeigen.

Den Inhalt dieser Variablen möchte ich an Home Assistant übertragen und dort im Dashboard anzeigen. Der übliche Weg zur Übertragung von Systemvariablen zwischen HomematicIP und Homeassistant ist das HAHM. Ich kann und will hier nicht die gesamte Installation wiedergeben, da das an anderen Stellen im Netz schon ausführlich diskutiert wurde. Aber kurz gesagt wird durch dieses Plugin eine Systemvariable der CCU3 beidseitig nutzbar in Home Assistant verfügbar gemacht, sofern sie in der Beschreibung die Abkürzung „HAHM“ trägt. Alle 30 Sekunden wird dieser Austausch durchgeführt. Für den ersten Anlauf kann aber ein Neustart des Home Assistant Systems notwendig sein.

Nachdem ich endlos gewartet habe und auch mehrmals das System neu gestartet habe, musste ich feststellen: Das funktioniert in diesem Fall nicht. An anderer Stelle konnte ich eine Systemvariable problemlos übertragen. Wo ist der Unterschied? Es liegt einfach daran, dass die CCU „Systeminterne Variablen“ nicht herausrückt. Sie werden auch in der Übersicht der Systemvariablen in der HmIP-GUI nur mit einem zusätzlichen Klick sichtbar gemacht.

Die Suche nach einem Weg, dieses Verhalten zu ändern habe ich nach einiger Zeit aufgegeben. Übrigens nützt es gar nichts, der Systemvariablen das Flag „systemintern“ zu nehmen. Die GUI nimmt das nicht dauerhaft an.

Dann fiel mir ein anderer Weg ein:

  1. eigene Systemvariable erzeugen
  2. Per Programm bei Änderung der betreffenden internen Systemvariablen meine eigene Systemvariable updaten
  3. meine Systemvariable in Home Assistant nutzen

… und das geht problemlos und zwar so:

Die eigene Systemvariable myGASCounter wird angelegt. Der Wertebereich wird entsprechend der systeminternen Variablen gewählt.

Wichtige Anteile meines Programms habe ich mir aus dem Skript des betreffenden systeminternen Programms geholt:

prgEnergyCounter_8795_003FA2698A9DF9:2

Ein eigenes Programm „Übertrag Gaszähler“ wird angelegt.

Das entsprechende Skript habe ich mir ehrlicherweise aus diversen Quellen zusammengeklaut:

object chn = dom.GetObject('8795');
object oEnergyCounter = chn.DPByControl('POWERMETER_PSM.ENERGY_COUNTER');
object oDevice = dom.GetObject(chn.Device());
object oChnOne = dom.GetObject(oDevice.Channels().GetAt(1));
object oChannelOperationMode = oChnOne.DPByControl('POWERMETER_PSM.CHANNEL_OPERATION_MODE');
object oSysVarEnergyCounter = dom.GetObject('svEnergyCounter_8795_003FA2698A9DF9:2');

real sysVarVal = oSysVarEnergyCounter.Value();


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

! Wert setzen
systemv.State(sysVarVal);

Ich kann nicht mit Sicherheit sagen, ob das die optimale Lösung ist und ob alle Zeilen wirklich notwendig sind. Aber es funktioniert! Beim Nachbauen ist aber darauf zu achten, dass die Sensornummern bei Dir sicherlich vollkommen anders aussehen. Das muss natürlich angepasst werden.

Das Skript sollte dann auch sofort in der Skriptansicht einmal ausgeführt werden. Unter der „Fehlerprüfung“, die man unbedingt machen sollte, ist der dafür notwendige Button „Ausführen“ zu finden. Damit ist dann die eigene Variable initial befüllt.

Man sollte die eigene Variable einmal aufrufen (Einstellungen->Systemvariablen), um zu prüfen, ob der Wert auch angekommen ist.

Weiter geht es in der GUI des Home Assistant. Dort muss als erstes über „Einstellungen->Geräte,Dienste,Entitäten,Helfer“die Variable sichtbar und benutzbar gemacht werden. Standardmäßig sind die übertragenen Variablen nämlich deaktiviert.

„Homematic(IP) Local“ aufrufen. Darin dann die „ccu3-webui“ aufrufen.

In den Steuerelementen findet man dann unter den deaktivierten Entitäten die eigene Variable und aktiviert sie (anklicken und dann Zahnrad). Sinnvollerweise gibt man dann noch einen vernünftigen Namen hinzu.

Der Einbau ins Dashboard zur Anzeige des Wertes sollte dann kein Problem mehr sein.

Ich hoffe, ich konnte mit diesem Beitrag ein paar Grundlagen der Kommunikation zwischen der HomematicIP und Home Assistant erklären. Gerne würde ich dazu ein paar Kommentare lesen. Man kann das Ganze sicherlich noch eleganter oder besser lösen.

0 0 votes
Article Rating
Abonnieren
Benachrichtige mich bei
guest
0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments