Modul Alarm: Unterschied zwischen den Versionen

Aus FHEMWiki
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 5: Zeile 5:


=Sensoren=
=Sensoren=
===Ö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.


===Warnung: Batterie schwach bei FHEM-Devices===
define TFOpen.warn dummy
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 Sensorenleiste der Alarmanlage auftaucht.  
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 ebtfallen)
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
  define LBatt.N .*:[Bb]attery.*[Ll]ow.* set LBatt.warn $NAME
Zeile 18: Zeile 79:
  attr LBatt.warn group deviceDetector
  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.  
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...)  
 
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...)  
 
Welchen Aktor man damit verbindet, sei dem Leser überlassen.
 
[[Datei:alarm_lbatt.png]]
[[Datei:alarm_lbatt.png]]


[[Kategorie:Examples]]
[[Kategorie:Examples]]

Version vom 8. September 2014, 06:20 Uhr

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

ACHTUNG. WORK IN PROGRESS


Sensoren

Ö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 ebtfallen)
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