Ausfall eines Sensors melden

Wenn die Statusmeldung eines Sensors ausbleibt, kann man eine Botschaft über Telegram senden

Damals, als es für die Erfassung des Strom- und Gasverbrauchs noch keinen Zählersensor speziell für die HomeMatic gab, habe ich mir selbst was zusammengebastelt. Ein Tür-/Fensterkontakt ist an einen Sender von ELV zur Stromkostenerfassung angeschlossen. Bei jeder Umdrehung des Ferraris-Zählers sendet er einen Impuls, der dann von der CCU gezählt wird.

Heute würde man dafür den HM-ES-TX-WM mit passendem Sensor nehmen. Immer noch Bastelkram, aber die HomeMatic ist ja ohnehin ein Bastlersystem.

Mein Tür-/Fensterkontakt hat das Problem, dass er gelegentlich ausfällt. Nicht nur, wenn der Duty Cycle der CCU überschritten ist, sondern auch einfach so. Dann ist mein Stromverbrauch auf 0, und weil ich die Werte über 24 Stunden akkumuliert auf meiner Wetterstation anzeigen lasse, bekomme ich es erst nach Stunden mit. Das versaut mir dann meine Statistik.

Der Sensor sendet bei jeder Umdrehung, also regelmäßig. Bei meinem Stromverbrauch kommt es niemals vor, dass er für 10 Minuten keinen Impuls sendet. Was liegt also näher, als eine Warnmeldung abzuschicken, wenn die Benachrichtigung ausbleibt?

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.

Andere Anwendungen

Die Beschreibung auf dieser Seite kann auch für jeden beliebigen anderen Sensor verwendet werden, der regelmäßig sendet. In der Regel weiß die CCU, welche Sensoren das sind und in welchen Abständen sie Nachrichten zu erwarten hat: Wenn ein Bewegungsmelder sich nicht regelmäßig meldet, gibt es eine Servicemeldung „Kommunikation gestört“.

Der Tür-/Fensterkontakt sendet normalerweise bestenfalls alle 24 Stunden. Nur durch meine Zweckentfremdung gibt es so häufige Rückmeldungen, dass ich schon nach kurzer Zeit eine Warnung bekommen kann. Ein eigenes Programm kann also sehr viel besser auf individuelle Bedürfnisse eingestellt werden.

Plus: Ich habe noch nichts geschrieben, um Servicemeldungen zu pushen.

Programmlogik

Das Programm ist einfach: Jedes Mal, wenn der Sender sich meldet, wird ein Timeout von zehn Minuten neu gesetzt. Solange das Programm regelmäßig ausgelöst wird, ist alles gut  – der Timeout wird immer weiter nach vorn geschoben. Fällt der Sensor aus, wird auch das Programm nicht mehr ausgelöst, und nach zehn Minuten gibt es eine Meldung über das Telegram-Framework.

Als erstes brauche ich also eine Systemvariable.

Strom Sensorausfall kennt nur die zwei Zustände: ausgefallen (wird nach zehn Minuten gesetzt) und OK (ist der Normalzustand).

Man kann die Systemvariable auch als Alarmvariable einrichten. Die CCU 2 blinkt dann etwas anders, wenn sie ausgelöst wird – bei der CCU 1 gab es eine fette rote LED, die bei ausgelösten Alarmmeldungen leuchtete. Das sprang ins Auge.

Programm 1: Systemvariable setzen

Das erste WebUI-Programm wird wie beschrieben durch den Sensor ausgelöst.

Tatsächlich macht es bei mir noch andere Dinge, schließlich benutze ich die Impulse zur Messung meines Stromverbrauchs. Für diese Anwendung reicht jedoch der obige Ausschnitt.

Das Programm wird bei Aktualisierung ausgelöst, wenn der Sensor geschlossen ist. Das hängt mit dem Anschluss an das ELV-Messgerät zusammen: Bei jeder Umdrehung wird ein kurzer Impuls an den Tür-/Fensterkontakt gesendet, der Zustand fällt also immer wieder sofort auf geschlossen zurück. Den Kontakt habe ich so eingestellt, dass er beim Öffnen nicht sendet, sondern immer einige Sekunden nach jedem Schließen.

Bei Auslösung wird Strom Sensorausfall auf OK gesetzt und nach zehn Minuten auf ausgefallen. Wichtig ist der Haken bei Vor dem Ausführen alle laufenden Verzögerungen für diese Aktivitäten beenden, sonst fällt die Systemvariable auf ausgefallen, auch wenn zwischendurch neue Impulse kamen.

Programm 2: Alarmmeldung

Das zweite WebUI-Programm ist trivial und kümmert sich nur um den Versand über das Telegram-Framework.

Wenn die Systemvariable ausgefallen meldet, wird die Telegram-Systemvariable auf einen sinnvollen Text gesetzt und dadurch der Versand angestoßen.

Auf den ersten Blick könnte man meinen, dass die zusätzliche Systemvariable Strom Sensorausfall gar nicht benötigt wird – warum nicht einfach direkt eine Verzögerung für die Telegram-Variable einstellen? Der Grund ist, dass das Telegram-Framework natürlich auch für andere Programme verwendet wird. Wenn da eine andere Meldung die laufende Verzögerung unterbricht, bleibt die Benachrichtigung aus. Darum: Umweg.

Telegram

Ich habe das mal getestet, indem ich den Sender einfach abgeklemmt habe (auch wenn mir das die Statistik noch mehr versaut).

Die Meldung erfolgt zuverlässig und ich kann umgehend in den Keller springen, um den Sender zurückzusetzen.

Hausautomation bedeutet eben, dass einem das Haus befiehlt, wann man zu springen hat.

Navigation