Sensoren mit Schaltkontakt, Anschluss an FS-20
Sensoren mit Schaltkontakt, Anschluss an FS-20
Motiv
Das FS-20 System bietet nur eine eingeschränkte Auswahl an Sensoren an. Andererseits gibt es eine große Auswahl an kostengünstigen Sensoren, die aber nicht "funkfähig" sind. Gesucht wird deshalb eine Kopplungsmöglichkeit zum FS-20 System, um diese Sensorik über das FS-20 System und FHEM auswerten zu können.
Die hier dargestellte Lösung stellt eine einfache Möglichkeit dar, um den Schaltkontakt von 230V AC bis 12 V DC Sensoren an den Sender FS20 S4U (siehe FS20 S4U Unterputz-Sender) anzuschließen.
Getestet worden sind folgende Sensoren mit Schaltkontakt:
- Bewegungsmelder (Baumarkt)
- Wassermelder (M158, Fa. Kemo)
- Rauchmelder( ABUS RM1000)
- Thermostatschalter zur Temperaturüberwachung z.B. bei Heizungsausfall(Finder 7T.81)
Problem
Das FS-20 System bietet als Sender den 2/4-Kanal-Unterputz-Sender FS20 S4U an. Dieser Sender kann im 4-Kanal-Betrieb bis zu 4 Taster auswerten.
Ist der potentialfreie Schaltkontakt eines Sensors direkt am Tastereingang des Funksenders angeschlossen, so sendet dieser bei Betätigung ständig ein „Dimupdown“.
Sind aber mehrere Schaltkontakte von Sensoren direkt an dem Sender angeschlossen und dauerhaft betätigt, so hat der Sender leider die Eigenschaft, nicht für alle Schaltkontakte das „Dimupdown“- Kommando zu senden, so dass die FHEM-Steuerung als Empfänger nicht von jedem Sensor die Schalterbetätigung mitbekommt. Informationen gehen also verloren.
Lösung
Der Schaltkontakt wird über einen asynchronen Taktgeber an den Tastereingang geführt. Ist der Schaltkontakt (z.B. bei einem Thermostat wegen Untertemperatur) dauerhaft betätigt, emuliert der Taktgeber daraus ein periodisches „ Tippen auf einen Taster“.
Vorteil: Sollte tatsächlich mal ein Takt nicht gesendet und somit „verloren gehen“, wird das Ereignis nach Beendigung der Pausenzeit erneut gesendet . Aufgrund dieser Redundanz ist eine hohe Zuverlässigkeit gegeben.
Erprobt worden ist diese Schaltung mit asynchronen Taktgebern von Finder, Typ 80.91.
Dieser Taktgeber bietet weitere Vorteile:
- Die Impulsdauer und die Pausenzeit zwischen den Impulsen ist einstellbar
- Der Taktgeber arbeitet auch bei 12V DC (Umin = 10.8 V AC/DC)
- Der Taktgeber wird auf einer Hutschiene befestigt, so dass dieser in jeden Hausverteilerkasten eingebaut werden kann.
Als 12V DC –Hutschienennetzteil könnte das Gerät DSP10-12 von TDK-Lambda verwendet werden.
(HINWEIS: Zu Arbeiten an netzspannungsführenden Teilen sind nur Personen berechtigt, die über eine geeignete Ausbildung verfügen)
Praktischer Einsatz dieser Schaltung
- Der Sender FS20 S4U wird im 4-Kanal-Betrieb betrieben.
- Die Impulsdauer wird so klein wie möglich eingestellt. Dann liefert der Sender nur ein einziges „Toggle“- oder "DimUpDown" Kommando pro Impuls, wenn der Schaltkontakt geschlossen ist.
- Die Pausenzeit sollte nach der Priorität eingestellt werden: (z.B. 2 min bei wichtigeren Meldungen wie z.B. Rauchmelder, 10 min bei unwichtigeren, wie z.B. Untertemperatur)
Programmauswertung
Beispiel: Erkennt ein Wasssermelder Feuchtigkeit, so sollen über die Fritzbox 7390 eine Mail gesendet und 2 Telefonanrufe ausgeführt werden.
Um den Schaltkontakt abzufragen, reicht eine „notify“ Anweisung aus. Diese wird jedes Mal dann aufgerufen, wenn der Schaltkontakt geschlossen ist und der Impulsgeber einen Impuls erzeugt hat.
Sofern die Impulsdauer sehr klein (nahe dem Minimum) eingestellt ist, wird entweder als Ereignis ein „toggle“ oder „dimupdown“ pro Impuls generiert.
Ein Wassermelder könnte in der fhem.cfgwie folgt ausgewertet werden :
define dvce_HausBekommtNasseFuesse FS20 11111111 1234 attr dvce_HausBekommtNasseFuesse Alarm define cm_AlarmWasser notify dvce_HausBekommtNasseFuesse \ {FritzBoxSendMail("Wasseralarm")};;\ {FritzBoxEmergencyCall()}
Die Funktionen FritzBoxSendMail()und FritzBoxEmergencyCall()können in einer z.B. 99_MyUtilsUserDef.pm(siehe 99 myUtils anlegen ) heißenden Datei wie folgt ausgeführt werden:
# Mail und Telefonanruf ++++++++++++++++++++++++++++++++++++++++++++++++++++++ sub FritzBoxEmergencyCall () { InternalTimer(gettimeofday()+5, "FritzBoxCallnr", 'TelefonNr1', 0); InternalTimer(gettimeofday()+30, "FritzBoxCallnr", 'TelefonNr2', 0); return } sub FritzBoxCallnr ($) { my ($callnr) = @_; $callnr = "ATDT".$callnr."#"; my $ret = "ATD: " . `echo $callnr | nc 127.0.0.1 1011` ; InternalTimer(gettimeofday()+8, "FritzBoxHangOn", "", 0); return } sub FritzBoxHangOn () { my $ret = " ATH: " . `echo "ATH" | nc 127.0.0.1 1011` ; $ret =~ s,[\r\n]*,,g; return } sub FritzBoxSendMail { my $subject = $_[0]; system(" /sbin/mailer -s $subject "); }
Lothar Wohlgemuth, 24. 10. 2012