Seit geraumer Zeit möchte ich schon unsere Klingeln ersetzen und in die Hausautomation integrieren. Wir haben eine Haupteingangstür und eine Nebeneingangstür, die beide unabhängige Klingelanlagen haben. Besonders bei der Nebeneingangstür kommt es häufig vor, dass die Funkklingel (ein Baumarktprodukt) nicht funktioniert. Schaltet man das Gerät kurz aus und dann wieder ein, funktioniert die Klingel wieder für einige Tage einwandfrei. Damit ist jetzt Schluss.
Kosten: ca. 50,- EUR
Klingelaktor
Zur Auswahl stehen zwei Homematic Aktoren:
HomeMatic Funk-Tasterschnittstelle 4-fach HM-PBI-4-FM
Maße: 50 x 9 mm
Schutzart: IP 20
oder
HomeMatic Funk-Fensterkontakt HM-SEC-SC-2
Maße: 17 x 16 x 77 mm (ohne Gehäuse geringfügig dünner)
Schutzart: IP 20
Letztendlich hängt die Auswahl von der Klingelplatte ab, genauer gesagt von der Dicke. Hier findet man im Internet viele Optionen.
Ich habe mich erstmal für den HomeMatic Funk-Tasterschnittstelle 4-fach HM-PBI-4-FM entschieden, da er besonders dünn ist und Dank der Knopfzelle sehr langlebig sein soll.
Klingelplatte/-gehäuse
Eine Klingelplatte hatte ich schon recherchiert so dass der Homematic Aktor dort auch reinpasst – jedenfalls von den Maßen her. Meine Wahl ist auf folgendes Modell gefallen:
Klingeltaster von m-e modern electronics
Maße: 90 x 90 x 19 mm
Achtung, dieses Modell gibt es auch mit mehreren Klingelknöpfen. Diese eignen sich jedoch nicht für den Umbau.
Einbau des Funk-Tasters in das Klingeltastergehäuse
Hier die Verpackung. Dort sieht man schon sehr gut die Dicke des Gehäuses.
Öffnet man das Gehäuse sieht man schnell, dass man nicht die vollen 19 mm zur Verfügung hat.
Es sind nicht einmal 9 mm.
Also habe ich kurzer Hand die Platine abgeschraubt, um zu sehen, was dort verbaut ist. In dieser Version sind es nur zwei kleine Taster, die sich im unteren Drittel befinden.
Darüber hinaus habe ich die überflüssigen Halterungen mit dem Dremel abgeschliffen, so dass eine ebene Fläche entstanden ist. Nun passt der Funkt-Taster problemlos in das Gehäuse. Bitte drauf achten, dass die Gummidichtungen korrekt sitzen.
Und so sieht das fertige Ergebnis an unserer Hauswand aus:
Konfiguration in FHEM
Hinweis: Zum Anlernen musst Du die Anlerntaste nur kurz drücken, dann blinkt die LED grün. Sollte sie rot blinken, funktioniert das Anlernen mit FHEM nicht.
Die Konfiguration in FHEM sieht wie folgt aus. Es müssen sowohl das Gerät als auch die einzelnen Kanäle definiert werden. In meinem Fall ist das nur ein Kontakt, nämlich Kanal 4, da dieses (rote) Kabel direkt neben dem schwarzen Kabel liegt.
define Klingel_01 CUL_HM xxxxxx
attr Klingel_01 room Aussenbereich
attr Klingel_01 group Klingel Seitentür
attr Klingel_01 alias Sensor
attr Klingel_01 model HM-PBI-4-FM
attr Klingel_01 serialNr xxxxxxxxx
attr Klingel_01 subType pushButton
attr Klingel_01 expert 2_full
attr Klingel_01 firmware 1.5
define Klingel_01_CH_04 CUL_HM xxxxxx04
attr Klingel_01_CH_04 group Klingel Seitentür
attr Klingel_01_CH_04 alias Klingel Seitentür
attr Klingel_01_CH_04 expert 1
attr Klingel_01_CH_04 model HM-PBI-4-FM
define Klingel_notify notify (Klingel_.*:Klingel_.*) { dkRouteKlingel($NAME, $EVENT) }
attr Klingel_notify group Notifiers
attr Klingel_notify room System
In dem obigen Beispiel habe ich wieder einen Notify erstellt, der auf jeden „Tastendruck“ reagiert und an die Funktion dkRouteKlingel() den Namen des Geräts (also den Kanal) und das Event schickt.
Programmierung der Klingelfunktion in FHEM
Anforderungen:
- Klingelton als akustische Rückmeldung (über Text2Speech)
- Anzeige im Fernseher (über VUPLUS Enigma2 Receiver)
- Benachrichtigung auf dem Haustelefon (über Fritzbox) (erstmal ausgebaut!)
Die Funktion dkRouteKlingel()
sub dkRouteKlingel($$) {
my ($device, $event) = @_;
my $action = "dkAct_" . $device;
my @events = split / /, $event;
my $button = $events[0];
$device = $device . "_";
$button =~ s/$device//g;
my $button_event = $events[1];
my $coderef=__PACKAGE__->can($action);
if ($coderef) {
$coderef->($button, $button_event);
}
}
Die Route-Funktion leitet abhängig vom übermittelten Gerät (in unserem Fall Klingel_01) an die Funktion dkAct_Klingel_01() weiter.
Die Funktion dkAct_Klingel_01()
sub dkAct_Klingel_01($$) {
my ($button,$button_event) = @_;
if ($button eq "CH_04") {
fhem("set mytts tts :doorbell.mp3:", 1);
dkDisplayText('Ding dong! Seitentür.');
#fhem("set fritzbox_control ring 610,611 10 News", 1);
}
}
Wenn der rote und der schwarze Draht geschlossen sind (dies entspricht Kanal 04), dann wird über das Modul Text2Speech eine MP3-Datei (in meinem Fall doorbell.mp3) abgespielt. Diese Datei muss in dem Ordner cache/templates liegen. Zudem wird noch im Fernseher angezeigt, dass jemand an der Seitentür geklingelt hat. Wie das geht findest Du in meinem Beitrag über dkUtils.pm.
Die Funktion, dass auf der Fritzbox angerufen wird, habe ich zur Vollständigkeit noch im Code gelassen, jedoch auskommentiert. Hierfür muss man das Modul FRITZBOX konfigurieren.
define fritzbox_control FRITZBOX 192.168.x.x
attr fritzbox_control alias FritzBox Control
attr fritzbox_control group PlugIns
attr fritzbox_control allowTR064Command 1
attr fritzbox_control room System
attr fritzbox_control INTERVAL 43200
Wir haben festgestellt, dass es ziemlich nervt. Mal abwarten, wie es im Sommer ist, wenn man sich im Garten aufhält.
Eine zweite Klingel habe ich an der Haustür montiert. Hierfür gibt es natürlich eine entsprechende Anzeige im TV und auch einen anderen Klingelton.
Meine beiden Klingeltöne könnt ihr hier laden:
dingdong1
dingdong2
Die Dateien müssen in den Ordner cache/templates. Ihr könnt aber auch ein eigenes Verzeichnis in Text2Speech definieren. Wie das geht steht in der Doku des Moduls.
Ich wünsche Dir viel Spaß beim Nachbauen.
Kleiner Nachtrag: Batterie-Warnung
Wer noch eine Battery-Warnung einbauen möchte muss folgendes machen:
Konfiguration in FHEM
define lowbattery_notify notify .*:[Bb]attery.*[Ll]ow.* { dkHandleBattery($NAME, $EVENT) }
attr lowbattery_notify group Notifiers
attr lowbattery_notify room System
Funktion in z. B. dkUtils.pm
sub dkHandleBattery($$) {
my ($device, $event) = @_;
dkPush("warning", "$device: Battery warning $event");
}
Danke Michael für den Hinweis.
Hallo,
Wieder ein sehr gelungenes Tutorial.
Ist bei mir vorgemerkt. Könntest Du bitte eine Batteriewarnung integrieren
oder ist das nicht möglich.
Gruß Michael
Hallo Michael,
der Hinweis mit der Batteriewarnung ist gut. Ich habe sie natürlich bei mir im System drin, nur nicht beschrieben. Ich habe zusätzlich noch ein Dummy-Device „Do not disturb“ angelegt. Wenn dies angeschaltet ist, lasse ich mir keine Push-Nachrichten schicken.
Ist ziemlich nervig, wenn man mal nicht zu Hause ist und die Batterie von irgendeinem Sensor leer ist und man laufend (auch nachts) ne Push-Nachricht bekommt.
Obige Konfiguration funktioniert quasi global für alle Homematic-Geräte.
Viele Grüße
Dennis
Hallo,
ich habe eine Frage…..
ich habe einen selbstgebauten CUL und nachdem ich die Funktaster-Schnittstelle in den Einlernmodus gebracht hatte bekomme ich in FHEM auch neue Geräte angezeigt.
4 Stück HM_55EC82_Btn_01 bis 04 und wenn ich die Kontakte zusammenbringe wird auch ein Wert ausgegeben.
Jetzt bin ich nach deiner Anleitung gegangen und komm dann aber nicht weiter 🙂
define Klingel_01 CUL_HM xxxxxx (ich habe 000001 genommen da ich gelesen habe, dass meine eine beliebeige HEX Adresse vergeben kann außer ein paar Ausnahmen)
dann weiter nach deinen Anweisungen bis…
attr Klingel_01 serialNr xxxxxxxxx (wo finde ich die SN?)
nach Punt 9 bekomme ich unter pushButton (HM_55EC82 angezeigt) und darin finde ich eine SN (OEQ0178441)
auch bekomme ich den Sensor alias unter Klingel angezeigt allerdings mit drei Fragezeichen in der DeviceOverview.
define Klingel_01_CH_04 CUL_HM xxxxxx04 (heißt es dann 00000104 weil ich oben die 000001 vergeben habe?)
Danke erstmal
Hallo Michael,
die SN-Nummer findest Du am Gerät auf dem Aufkleber. Ich lerne die Geräte immer über FHEM an, dann wird bei mir automatisch ein neues Gerät erzeugt und eine Log-Datei. Aus denen kopiere ich mir dann meine Definition zusammen.
Die einzelnen Buttons werden dann entsprechend mit 01, 02, 03, 04 an die HEX-Adresse angehängt. In Deinem Fall 00000104.
Hoffe es hilft, leider habe ich keine Erfahrungen mit einem selbstgebauten CUL. Ich habe mehrere SCC von Busware.
Viele Grüße
Dennis
Schön einfach erklärt und läuft fast auf Anhieb.
Für die weniger Anstrakten könnte man noch mehr Fotos einbauen. Intertechno, DIP Schalter Stellung etc. Aber im Großen und Ganzen sehr hilfreich. 🙂
Auf der Umrechnungsseite sind die DIP Schalter die grauen Blöcke. Nicht die weissen! DIP steht auf ON = Grauer Block OBEN.
Hallo,
ich bekomme folgende Fehlermeldung:
ERROR evaluating my $EVTPART1=’Short‘;my $EVTPART0=’Klingel_01_CH_04′;my $NAME=’Klingel_01′;my $SELF=’Klingel_notify‘;my $EVENT=’Klingel_01_CH_04 Short‘;my $TYPE=’CUL_HM‘;{ dkRouteKlingel($NAME, $EVENT) }: Undefined subroutine &main::> called at ./FHEM/99_myUtils.pm line 232.
Bitte um Unterstützung
Gruß Marcus
bzw.: gt nicht >
ERROR evaluating my $NAME=’Klingel_01′;my $EVTPART1=’Short‘;my $EVTPART0=’Klingel_01_CH_04′;my $SELF=’Klingel_notify‘;my $EVENT=’Klingel_01_CH_04 Short‘;my $TYPE=’CUL_HM‘;{ dkRouteKlingel($NAME, $EVENT) }: Undefined subroutine &main::gt called at ./FHEM/99_myUtils.pm line 232.
Hi Marcus,
im obigen Code sind auch ein paar Sonderzeichen „Großerzeichen“ falsch übernommen worden. Liegt es vielleicht daran.
Ich habe in meiner Installation den Code oben 1:1 stehen und es funktioniert tadellos.
Hast Du sonst noch etwas geändert? Gibt es neben dkRouteKlingel() auch noch dkAct_Klingel_01()?
Viele Grüße
Dennis
Lieber Dennis
Herzlichen Dank für die gute Anleitung. Ich habe den Code für ein „Dashboard“ mit vielen Buttons im Einsatz, mit welchem verschiedene Lampen angesteuert werden sollen. Bei der Klingel wird nur ein Channel benötigt, in deinem Beispiel CH_04. Ich versuchte nun noch die drei weiteren Channels mit einer Funktion zu versehen. Ich nahm an, dass durch das Einfügen einer zweiten sub-Routine in der myUtils einfach ein zweiter Channel genutzt werden kann. Doch leider wird nur immer ein Befehl ausgeführt. Entweder wird der Befehl über Channel 01 oder Channel 02 ausgeführt. Aber dass ich Channel 01 und Channel 02 nacheinander betätige und diese unterschiedliche Befehle ausführen, dass geht nicht. Hast du eine Idee weshalb das nicht funktioniert ?
Herzlichen Dank schon mal und einen erfolgreichen Tag!
Viele Grüsse Dominik
sub dkButtonPush($$) {
my ($device, $event) = @_;
my $action = „dkAct_“ . $device;
my @events = split / /, $event;
my $knob = $events[0];
$device = $device . „_“;
$knob =~ s/$device//g;
my $knob_event = $events[1];
my $coderef=__PACKAGE__->can($action);
if ($coderef) {
$coderef->($knob, $knob_event);
}
}
sub dkAct_Button_01($$) {
my ($knob,$knob_event) = @_;
if ($knob eq „CH_01“) {
fhem(„set HUEDevice65540 toggle“);
}
}
sub dkAct_Button_01($$) {
my ($knob,$knob_event) = @_;
if ($knob eq „CH_02“) {
fhem(„set HUEDevice65537 toggle“);
}
}