Modul Alarm

Aus FHEMWiki

Diese Seite beschreibt die Konfiguration und Verwendung des Moduls 95_Alarm.pm.

ACHTUNG. WORK IN PROGRESS


Sensoren

Rauchalarm

Dieser Alarm ist mit Lebensgefahr verbunden. Er wird deshalb unabhängig von FHEM ausgelöst, und von FHEM nur registriert und mit weiteren Aktoren verbunden.

Im Beispiel werden vernetzte Rauchmelder des Typs HM-SEC-SD verwendet. Deren Teamleader erhalten das Attribut alarmDevice Sensor, so dass sie in der Sensorenliste der Alarmanlage auftauchen. Sie lösen den Alarm mit dem höchsten Level aus.

Öffnung von Fenstern oder Türen

Hier werden verschiedene Sensoren definiert.

  • Einerseits werden alle überwachten Fenster- und Türkontakte, die überwacht werden sollen, mit dem Attribut alarmDevice Sensor versehen, so dass sie in der Sensorenliste der Alarmanlage auftauchen. Das dient der Überwachung von Zustandsänderungen.
  • Andererseits soll auch geprüft werden können, ob und welche Fenster oder Türen offen sind - z.B. abends, oder bei Regenwetter. Dazu muss zunächst ein dummy definiert werden, der als alarmDevice Sensor attributiert wird und somit in der Sensorenliste der Alarmanlage auftaucht.
define TFOpen.warn dummy
attr TFOpen.warn alarmDevice Sensor
attr TFOpen.warn alarmSettings |||on (Diese Zeile wird vom Modul 95_Alarm.pm automatisch erzeugt und kann bei der ersten Definition entfallen)
attr TFOpen.warn group windowDetector
attr TFOpen.warn room Alarm

Als nächstes muss eine Überwachungsroutine geschrieben werden. Das kann entweder als FHEM-Skript geschehen, oder in der Datei 99_myUtils.pm als perl-Code. Dieses Unterprogramm muss den obigen dummy setzen, und zwar auf den oder die Namen der geöffneten Fenster und Türen. Beispiel:

sub HouseOpen()
{
 my $kfo = 0;
 my $kfs = "";
 my $kto = 0;
 my $kts = "";
 my $str = "";
 if( $main::value{'BK.F'} ne "Closed" ){
   $kfo++;
   $kfs = "BK/";
 }
 if( $main::value{'WK.F'} ne 'Closed' ){
   $kfo++;
   $kfs = $kfs."WK/";
 }
 if( $main::value{'VK.T'} ne "Closed" ){
   $kto++;
   $kts = "VK/";
 }
 if( $main::value{'WZ.T'} ne 'Closed' ){
   $kto++;
   $kts = $kts."WZ/";
 }
 if( ($kfo >= 1) && ($kto == 0) ){
   $kfs = substr($kfs,0,-1);
   fhem("set TFOpen.warn $kfs Fenster"); 
 }elsif( ($kfo == 0) && ($kto >= 1) ){
   $kts = substr($kts,0,-1);
   fhem("set TFOpen.warn $kts Tür"); 
 }elsif( ($kfo >= 1) && ($kto >= 1)){
    $kts = substr($kts,0,-1);
    $kfs = substr($kfs,0,-1);
    $str = "$kts Tür + $kfs Fenster";
    fhem("set TFOpen.warn $kts T / $kfs F");
 }else{
    fhem("set TFOpen.warn none");
 }
return $str;
}

Schließlich wird ein dummy definiert und mit dem Attribut alarmDevice Actor versehen, so dass er in der Aktorenliste der Alarmanlage auftaucht

define TFOpen.check dummy
attr TFOpen.check alarmDevice Actor
attr TFOpen.check alarmSettings alarm4,alarm5,|{HouseOpen()}||600 (Diese Zeile wird vom Modul 95_Alarm.pm automatisch erzeugt und kann bei der ersten Definition entfallen)
attr TFOpen.check group windowDetector
attr TFOpen.check room Alarm

Batterie schwach bei FHEM-Devices

Dieser Sensor besteht aus einem notify und einem dummy, der bei einer 'battery low'-Meldung eines beliebigen FHEM-Device auf dessen Namen gesetzt wird. Der dummy wird als alarmDevice Sensor attributiert, so dass er in der Sensorenliste der Alarmanlage auftaucht.

define LBatt.N .*:[Bb]attery.*[Ll]ow.* set LBatt.warn $NAME
attr LBatt.N room Alarm
attr LBatt.N group deviceDetector
define LBatt.warn dummy
attr LBatt.warn alarmDevice Sensor
attr LBatt.warn room Alarm
attr LBatt.warn group deviceDetector

Auf einen Test, ob gleichzeitig bei anderen FHEM-Devices die Batterie ebenfalls schwach ist, wird hier verzichtet. Für diesen Sensor wird ein eigener Alarmlevel (niedriger Priorität) erzeugt. Bei einem beliebigen 'battery low' Event wird somit der STATE der Alarmanlage gesetzt auf Batt. <devicename> schwach. Dieser Alarm muss manuell zurückgesetzt werden (schließlich sollten die Batterien ja erst gewechselt werden...) Alarm lbatt.png