:: fischer-net.de

Am Beispiel eines Wassermelder HMS 100 W stelle ich hier eine Möglichkeit vor, wie FHEM über ein eintretendes Ereignis alarmieren kann.

Selbige Lösung kann selbstverständlich auch mit anderen Komponenten wie z.B. Kontaktmelder HMS 100 TFK, Temperatur- / Luftfeuchte-Sensor HMS 100 TF, FS20 PIRI-2 Zweikanal Funk-Bewegungsmelder, FS20 SR Funk-Regensensor umgesetzt werden.

Es kommt lediglich darauf an, welches Event über ein notify ausgewertet werden soll.

Im ersten Schritt wird ein Dummy-Device erstellt. In dem Beispiel wird es WATER.dum heissen.

# Wasseralarm
define WATER.dum dummy
set    WATER.dum off

Wichtig dabei ist, dass das Dummy Device gleich nach der Definition auf off gesetzt wird.

Dann wird der eigentliche Sensor definiert. In dem Beispiel heisst er KG.ga.WD.01. Siehe auch mein Beitrag zu der Benennung von Devices.

# HMS100-W Wassersensor
define KG.ga.WD.01 HMS 1002
attr   KG.ga.WD.01 alias Sensor Tiefgarage
attr   KG.ga.WD.01 model hms100-w

Nun wird das eigentliche Notify definiert. Das Device KG.ga.WD.01 wird auf das Event .*Water.*Detect.*on.* überwacht.

# HMS100-W Wassersensor notify
define WD.not.01 notify KG.ga.WD.01:.*Water.*Detect:.*on.* {\
  if (ReadingsVal("WATER.dum","state","off") eq "off") {\
    fhem("set WATER.dum on");;\
    fhem("define at.WATER.dum.off at +00:30:00 set WATER.dum off");;\
    `/usr/local/bin/fhem2mail SMS WATER "Tiefgarage"`;;\
    Log 3, "HMS @ Water detection %, send notification via eMail/SMS";;\
  }\
}

Tritt das Event ein, wird der Status des Dummy Devices WATER.dum auf on gesetzt aber nur wenn der aktuelle Status aktuell off ist. Gleichzeitig wird ein neuer Job at.WATER.dum.off definiert, der das Dummy Device WATER.dum nach 30 Minuten wieder auf off setzt. Parallel zu dem neuem Job wird über ein Script eine Nachricht versendet und ein Logeintrag gesetzt. Würde man an dieser Stelle die Prüfung des Dummy Devices weglassen, dann würde bei jedem eintretenden Event erneut eine eMail gesendet. Somit ist gewährleistet das nur alle 30 Minuten eine Benachrichtigung erfolgt.

Da FHEM inzwischen auf den unterschiedlichsten Systeme betrieben wird und das Versenden einer eMail sich auf diesen zum Teil stark unterscheidet, greife ich in diesem Beispiel auf den Stand-Alone Befehl SendEmail zurück. Dieser kann von der Homepage des Entwickler heruntergeladen werden und ist auf fast allen Systemen (Linux, Windows) sofort einsatzbereit. SendEmail ist komplett in Perl geschrieben und benötigt in der Regel keine weiteren Perl-Module.

Im folgenden Script fhem2mail müssen die entsprechenden email-Adressen angepasst werden.

#!/bin/bash
BASENAME="$(basename $0)"
DST=$1
TYP=$2
ARG=$3
FRM="<absender-email>"
case $DST in
  SMS)
    RCP="<mail2sms-empfänger>"
    ;;
  MAIL)
    RCP="<email-empfänger>"
    ;;
  *)
    ;;
esac
case $TYP in
  BATTERY)
    SUB="FHEM: ${ARG}"
    TXT="Batterie schwach: ${ARG}"
    ;;
  FIRE)
    SUB="FHEM: FEUERALARM ${ARG}"
    TXT="Feueralarm wurde ausgeloest!"
    ;;
  GAS)
    SUB="FHEM: GASALARM ${ARG}"
    TXT="Gasalarm wurde ausgeloest!"
    ;;
  MOTION)
    SUB="FHEM: BEWEGUNG"
    TXT="Bewegungsmelder wurde ausgeloest!"
    ;;
  WATER)
    SUB="FHEM: WASSERALARM: ${ARG}"
    TXT="Wasseralarm wurde ausgeloest!"
    ;;
  *)
    SUB="FHEM: ${ARG}"
    TXT="${ARG}"
    ;;
esac
/usr/bin/sendemail -f ${FRM} -t ${RCP} -u ${SUB} -m ${TXT} -q -o message-content-type=text
exit 0

 

Powered by ...

 

 

reichelt elektronik – Elektronik und PC-Technik