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.