Der Übersichtlichkeit halber definiere ich meine Variablen wieder am Anfang des Scriptes.
Dieses Programm schickt mir eine E-Mail, in der der ausgelöste Rauchmelder angezeigt wird
Rauchmelder lassen sich in die HomeMatic einbinden; über die WebUI können jedoch nur die Gruppen ausgewertet werden, zu denen die Rauchmelder jeweils gehören, nicht die einzelnen Rauchmelder selbst.
Um über $src$ an den auslösenden Rauchmelder zu kommen (wie bei der Verarbeitung von Sabotage-Ereignissen bei Bewegungsmeldern), müsste jeder in einer eigenen Gruppe sein. Dann jedoch wären die Rauchmelder nicht mehr untereinander vernetzt und würden nicht mehr gemeinsam ausgelöst, wenn irgendwo Rauch erkannt wird.
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.
String-Verlängerung
In den Scripten auf dieser Seite werden Strings verlängert (x = x # y). Dies führt oft zu Störungen bei der Ausführung von Programmen:
Durch einen Neustart werden diese Probleme (vorübergehend) behoben. Auch hier hängt die Dauer, bis es zu Störungen kommt, davon ab, wie häufig diese Programmschritte ausgeführt werden.
Man kann aber über ein Script auf der CCU den Status der einzelnen Rauchmelder abfragen. Das Script wird über folgendes WebUI-Programm ausgeführt:
Ich möchte nicht nur über erkannten Rauch informiert werden, sondern auch dann, wenn kein Rauch mehr erkannt wird. Das WebUI-Programm wird darum immer ausgelöst, wenn sich an der Rauchmeldergruppe etwas ändert – egal ob positiv oder negativ.
Das Script erledigt dann den Rest.
gesamtes Script markieren / kopieren
! HomeMatic-Script ! AUSGELöSTEN RAUCHMELDER FINDEN ! http://www.christian-luetgens.de/homematic/e-mail/rauchmelder/Rauchmelder.htm ! VARIABLEN DEFINIEREN string s_chn; object o_chn; object o_dp; string s_true = ""; string s_false = ""; string s_subj; string s_body; integer i_template; ! RAUCHMELDER FINDEN UND STATUS ABFRAGEN foreach (s_chn, dom.GetObject(ID_CHANNELS).EnumUsedIDs()) { o_chn = dom.GetObject (s_chn); if (o_chn.HssType() == "SMOKE_DETECTOR") { o_dp = o_chn.DPByHssDP ("STATE"); if (o_dp.Value()) { s_true = s_true # " " # o_chn.Name() # "\n"; } else { s_false = s_false # " " # o_chn.Name() # "\n"; } } } ! SUBJECT, BODY UND ALARMIERUNG (FEHLER/STATUS) VORBEREITEN if (s_true == "") { s_subj = "Rauchmelder sind OK"; s_true = " keine\n"; i_template = 2; } else { s_subj = "Rauchmelder haben ausgeloest"; i_template = 1; } if (s_false == "") { s_false = " keine\n"; } s_body = "Rauchmelder ausgelöst:\n" # s_true # "\nRauchmelder OK:\n" # s_false; ! MAIL VERSENDEN dom.GetObject ("E-Mail.Subject").State (s_subj); dom.GetObject ("E-Mail.Body").State (s_body); dom.GetObject ("E-Mail.Versand").State (i_template); ! Ende des Scripts
Variablendefinition
Der Übersichtlichkeit halber definiere ich meine Variablen wieder am Anfang des Scriptes.
Status abfragen
Das eigentliche Programm beginnt damit, dass das Script durch sämtliche Kanäle der CCU geht und Rauchmelder sucht.
Wird ein Rauchmelder gefunden, so wird dessen Status geprüft und entweder der Liste der ausgelösten Rauchmelder hinzugefügt (s_true) oder der der nicht ausgelösten (s_false).
Betreff und E-Mail-Text erzeugen
Wurden ausgelöste Rauchmelder gefunden, wird die E-Mail mit einem entsprechenden Betreff versehen und als Fehler-E-Mail gesendet, sonst nur als Status-E-Mail. In meinem Postfach werden diese unterschiedlichen E-Mails auch unterschiedlich einsortiert.
In jedem Fall werden die Listen für ausgelöste / nicht ausgelöste Rauchmelder angehängt. Ist eine der Listen leer, wird eine entsprechende Fehlanzeige eingesetzt.
Versand
Zum Schluss wird die E-Mail über das Mini-Framework versendet.
Das Ergebnis ist eine leidlich elegant gestaltete E-Mail-Benachrichtigung.
Im Betreff sieht man auf den ersten Blick, ob alles OK ist. In der E-Mail werden dann alle Rauchmelder aufgelistet, sortiert nach ausgelöst / nicht ausgelöst.
Die Namen entsprechen den selbst vergebenen Namen aus der WebUI.