Modul Alarm
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. Die Realisierung lässt sich aber auch über beliebige andere in FHEM eingebundene Rauchmelder erreichen.
Ö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...)