Heizungsstatus per Telegram

Wissen, was abgeht: Aktivität von Systemvariablen und Wärmebedarfsrelais melden

Zum Glück hatte ich mir damals irgendwo notiert, wie man einen Telegram-Bot erstellt und ein Framework auf der CCU einrichtet. Das habe ich natürlich auch bei der neuen CCU-3 gleich mal gemacht.

Damit kann ich mir jetzt ein kleines Script zusammenbasteln, das mir jede Aktivität des Brenners und der Heizungs-Systemvariablen meldet. Es werden alle Aktivitäten gemeldet, egal, ob sie über den Taster, das Wärmebedarfsrelais oder auf anderen Wegen ausgelöst wurden.

Variablen in HomeMatic-Scripten

Die CCU hatte früher ein Limit von maximal 200 Variablen, das mit Firmware-Version 2.29.18 aufgehoben wurde. Dieses Limit bezog sich auf alle Variablen, die in allen Scripten verwendet werden. Gemeint sind Variablen, die direkt im Script definiert werden: object x; object y; var z;

Wenn Scripte nicht mehr funktionieren und bei der Prüfung unerklärliche Syntax-Fehler auftreten, sollte versuchsweise dieses Programm wieder gelöscht oder deaktiviert werden – oder, noch besser, auf die aktuelle Firmware-Version aktualisiert werden.

Strings in HomeMatic-Scripten

Durch String-Verwendung in HomeMatic-Scripten kann die CCU fehlerhaft arbeiten, instabil werden oder sogar abstürzen. Grundsätzlich gilt: Je öfter mit Strings hantiert wird, desto eher führt dies zu Problemen.

Ich empfehle daher, nach Umsetzung dieser Anleitung die CCU unter Beobachtung zu halten.

Benennung von Systemvariablen

Prinzipiell kann man Systemvariablen – so wie allen Objekten in der CCU – beliebige Namen geben, also z. B. auch Umlaute und Sonderzeichen verwenden. Ich empfehle jedoch, sich auf reguläre Buchstaben (a-z, A-Z) zu beschränken: Bei Umlauten und Sonderzeichen besteht die Gefahr, dass Systemvariablen in Scripten nicht überall gefunden werden.

Systemvariablen melden

Ich habe drei Systemvariablen, die jeweils zwei bis drei Werte annehmen können. Das WebUI-Programm muss also auf alles reagieren, was sich ändern kann.

Wie man sieht, sind alle drei Systemvariablen aufgeführt. Für Heizung gesamt werden alle Status aufgeführt – bei den anderen Systemvariablen reicht aufgrund der Logik von WebUI-Programmen jeweils einer. Dieses ist ein WebUI-Programm, welches das Verständnis der Programmlogik mal wirklich herausfordert.

Mit einer Verzögerung von 5 Sekunden wird ein Script ausgeführt. Die Verzögerung dient dazu, keine Kollisionen von Nachrichten zu bekommen, wenn mehrere Dinge gleichzeitig passieren.

! HomeMatic-Script
! HEIZUNGSSTATUS PER TELEGRAM
! http://www.christian-luetgens.de/homematic/projekth/status/Heizungsstatus.htm

object o_heizung = dom.GetObject ("Heizung gesamt");
object o_dachzimmer = dom.GetObject ("Heizung Dachzimmer");
object o_kind = dom.GetObject ("Heizung Kind");

string s1 = "*Heizung*";

string s2 = "gesamt: " + o_heizung.ValueList().StrValueByIndex (";", o_heizung.Value());;
string s3 = "Dachzimmer: " + "absenken:heizen".StrValueByIndex (":", o_dachzimmer.Value());
string s4 = "Kind: " + o_kind.ValueList().StrValueByIndex (";", o_kind.Value());

dom.GetObject ("Telegram").State (s1 # "\n" # s2 # "\n" # s3 # "\n" # s4);

!  Ende des Scripts

Das Script ist sehr einfach: Es werden alle Systemvariablen herausgesucht, dann werden vier Strings mit den einzelnen Zeilen gefüllt und zum Schluss mit Zeilenumbrüchen zusammengefügt und dem T-Framework übergeben.

Das Ergebnis sieht in Telegram dann kompakt aus und erscheint jedes Mal, wenn die Systemvariable „angefasst“ wird.

Brennerstatus melden

Das Programm zur Scriptausführung für den Brennerstatus ist sehr simpel.

Das Script wird immer ausgeführt, wenn der Aktor eine Aktualisierung sendet.

Ich habe noch eine Verzögerung von zehn Sekunden eingebaut, um Doppelmeldungen auszuschließen und damit die Telegram-Meldung nicht mit anderen kollidiert.

Im Script geht es vor allem darum, die relevanten Informationen zusammenzusuchen und in ein halbwegs ansprechendes Format zu bringen.

! HomeMatic-Script
! HEIZUNGSSTATUS PER TELEGRAM
! http://www.christian-luetgens.de/homematic/projekth/status/Heizungsstatus.htm

string s = "*Heizung*";

object o_brenner = dom.GetObject ("Heizung Brenner").DPByHssDP("STATE");

boolean v1 = o_brenner.Value();
boolean v2 = o_brenner.LastValue();
s = s # "\n" # "Brenner " # (("aus:ein").StrValueByIndex (":", v1.ToInteger()));

time t1 = o_brenner.Timestamp();
time t2 = o_brenner.LastTimestamp();
integer d = (t1.ToInteger() - t2.ToInteger()) / 60;
s = s # "\n" # (("Aus:Ein").StrValueByIndex (":", v2.ToInteger())) # "schaltdauer: " # d # " Minute(n)";

object o_anforderung = dom.GetObject ("Heizung Anforderung");
s = s # "\n" # "Bedarf: " # o_anforderung.Value().ToInteger();

dom.GetObject ("Telegram").State (s);

!  Ende des Scripts

Im String s bastele ich die Telegram-Nachricht zusammen. Den Anfang macht eine fettgedruckte Überschrift „Heizung“ – ich nutze hier die Formatierungsmöglichkeiten von Telegram.

Danach geht es zur Sache: In v1 und v2 werden aktueller und früherer Status des Aktors (ein- oder ausgeschaltet) gespeichert. Der Aktor heißt bei mir Heizung Brenner – dies muss ggf. angepasst werden, wenn der Kanal einen anderen Namen hat. Anhand des aktellen Status’ wird s um die Meldung „Brenner ein“ oder „Brenner aus“ ergänzt.

Als nächstes kommen die Timestamps des aktuellen und des vorherigen Status’ in t1 und t2. Daraus berechne ich die Differenz und habe somit die Ein- bzw. Ausschaltdauer bis zum aktuellen Status. Auch das wird an s angehängt.

Zum Schluss hole ich mir noch meine Systemvariable Heizung Anforderung, in der die Summe der Ventilöffnungen hinterlegt ist. Mit dieser Information, die natürlich ebenfalls an s gehängt wird, habe ich dann alles, um die korrekte Funktion meines Wärmebedarfs-Scripts zu kontrollieren.

Den fertigen Wert schreibe ich in die Systemvariable Telegram, die das T-Framework anstößt und die Nachricht versendet.

Fertig!

Navigation