Ausgelösten Rauchmelder finden

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.

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.

! 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);

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