Ausgelösten Rauchmelder finden

Dieses Programm schickt mir eine E-Mail, in der der ausgelöste Rauchmelder angezeigt wird

3362 Zeichen
Score aktualisiert
100%
Code: da771f0c57c740309a108c4aa819b7c9
Token in Entwicklung nicht aktualisiert
img-Tag in Entwicklung deaktiviert

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:

  • Scripte in Programmen werden nicht mehr ausgeführt
  • bei der Fehlerprüfung erscheinen unerklärliche Syntax-Fehler

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.

! 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.

Navigation