Servicemeldungen für die Ewigkeit

Der erste „echte“ Befehl des CCU-Bots befasst sich unweigerlich mit Servicemeldungen

Manchmal habe ich das Gefühl, es gibt gar keine anderen Themen bei der HomeMatic als Servicemeldungen. Natürlich bekommt auch der CCU-Bot als erstes eine Aufgabe, die sich auf Servicemeldungen bezieht.

Ausgangspunkt ist dieses T-Framework-Programm, das neue Servicemeldungen an Telegram-Clients pusht. Vorteil: Man bekommt neue Servicemeldungen sofort mit. Nachteil: Man verliert irgendwann die Übersicht, welche Meldungen aktuell noch vorliegen.

Mit einem winzigen Script lässt sich dieses Manko beheben.

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.

Zunächst das WebUI-Programm, das wie mein Test-Programm auf die Aktualisierung von Telegram.Command reagiert.

Auch hier steht das eigentliche Script wieder im Sonst…-Zweig, damit es immer dann ausgeführt wird, wenn Telegram.Command auch wirklich einen Befehl enthält. Die Ausführungsverzögerung dient abermals der Entzerrung von Programmen.

Eigentlich könnte ich hier auf die Entzerrung verzichten, da durch das Rücksetzen der Servicemeldung keine Sende-Aktivitäten ausgelöst werden. Ich versuche jedoch, alle meine Programme wenn irgend möglich zu entzerren – also auch dieses.

Das Script ist äußerst übersichtlich:

! HomeMatic-Script
! SERVICEMELDUNGEN FüR DIE EWIGKEIT
! http://www.christian-luetgens.de/homematic/ccubot/service/Service_4ever.htm

object o = dom.GetObject ("Telegram.Command");

if (o.Value() == "/service") {
  dom.GetObject ("Telegram.Servicemeldungen").State ("");
  dom.GetObject ("Telegram").State ("Servicemeldungen werden erneut versendet");
  o.State ("");
}

!  Ende des Scripts

An erster Stelle suche ich mir die Systemvariable Telegram.Command heraus, in der der Befehl steht. Wenn dieser /service lautet, wird das eigentliche Programm ausgeführt.

Die Überprüfung könnte theoretisch auch im WebUI-Programm selbst passieren statt im Script. Allerdings habe ich mit String-Vergleichen im Programm eher durchwachsene Erfahrungen gemacht – darum also lieber im Script.

Das Programm setzt dann Telegram.Servicemeldungen zurück. (In der Original-Anleitung für den Servicemeldungs-Push hieß diese Variable bei mir noch Servicemeldungen Telegram – bloß nicht verwirren lassen.) Sie speichert die bereits gesendeten Servicemeldungen ab. Ist sie leer, wird alles erneut gesendet.

Anschließend wird noch ein kurzer Bestätigungstext an das T-Framework übergeben und Telegram.Command zurückgesetzt.

Und das war’s schon.

Auf dem Screenshot zu erkennen: Ich schicke den /service-Befehl ab. Der CCU-Bot braucht zwei Minuten, um zu reagieren – die Abfrage auf neue Nachrichten läuft ja nur anhand meines langsamen Systemtaktes. Sobald der Befehl empfangen wurde, kommt die Bestätigung und alle Servicemeldungen werden nach und nach erneut versendet.

Navigation