KlingelPi: der Türglockenverstärker

Manchmal, wenn ich im Arbeitszimmer sitze und ein Headset trage, höre ich die Türglocke nicht – oder erst nach dem siebten vehementen Klingeln, woraufhin der Postzusteller gern mal süffisant fragt, ob man gerade im Westflügel war.

Um das zu verhindern, möchte ich einen Raspberry Pi Zero einsetzen, der erkennt, wenn die Türglocke läutet. Die üblichen Klingeltrafos arbeiten mit 8 bis 12 V Wechselstrom, was für dem Raspberry Pi recht unhandlich ist. Um das Schließen des Wechselstromkreises direkt als Eingang zu benutzen, müsste man die Wechselspannung erst gleichrichten und dann auf eine Spannung herunterdrosseln, die der Raspi verarbeiten kann. Das geht alles, ist aber aufwändig und erfordert auch mehr Verdrahtung, als in das Türglockengehäuse passt.

Ich habe deshalb einen anderen Weg gewählt und einfach einen Geräuschsensor an den Raspberry Pi angeschlossen. So sieht er aus:

Ein einfacher Geräuschsensor
Ein einfacher Geräuschsensor

Über den Drehpoti im blauen Gehäuse wird seine Empfindlichkeit gesteuert. Der Anschluss ist denkbar einfach: Neben der Versorgungsspannung muss der Sensor nur an einen freien GPIO-Pin angeschlossen werden. Ich habe GPIO 21 (= physisch Pin 40) gewählt.

Wenn ein Geräusch ertönt, dass die eingestellte Lautstärkeschwelle überschreitet, gibt der Sensor eine definierte Spannung auf den „Out“-Pin. Dieses Signal kann der Raspberry auswerten und „weiß“ dann, dass es an der Tür geklingelt hat.

Für das Auslesen des Signals habe ich die gpiozero-Bibliothek verwendet. Sie hat zwar keine vorgefertigte Klasse für einen Geräuschsensor, aber das muss sie auch nicht – für die Software ist es egal, ob das Signal von einem Sensor oder einem gedrückten Schaltknopf stammt, also habe ich die „Button“-Klasse verwendet:

#!/usr/bin/env python3


from gpiozero import Button
from signal import pause
import os

def hat_geklingelt():
 #hier können beliebige Aktionen
 #ausgeloest werden, wenn es an 
 #der Tuer geklingelt hat
 os.system("/usr/local/shellscripts/klingel.sh")

button = Button(21, bounce_time=2)

button.when_pressed = hat_geklingelt
pause()

Wichtig ist noch der Parameter „bounce_time=2“ in der button-Definition, denn das klingelsignal „prellt“. Das heißt, es wird häufig nacheinander ausgelöst, wenn der Geräuschsensor anschlägt. Der Parameter bewirkt, dass alle eingehenden Signale innerhalb einer Zeitspanne von 2 Sekunden zu einem Signal zusammengefasst werden. Wenn Ihre Türglocke länger als 2 Sekunden läutet, sollten Sie diesen Wert noch erhöhen, sonst wird die eingestelle Aktion mehrfach ausgelöst.

In meinem Fall lasse ich ein Shellskript ausführen, das im Haus diverse Lampen kurz ein- und ausschaltet (per 433-MHz-Funksignal), außerdem wird eine Twitter-Meldung versandt.

klingel

Noch ein Wort zur Anbringung des Sensors an der Türglocke: Sie möchten natürlich nicht ständig benachrichtigt werden, wenn in der Nähe der Glocke irgendwelcher Lärm herrscht (laute Stimmen, fallender Gegenstand, bellender Hund…). Das können Sie weitgehend verhindern, indem Sie den Sensor möglichst nah an den Klangkörper der Glocke montieren. Dann können Sie die Empfindlichkeit so einregeln, dass nur das laute Signal direkt daneben zum Auslösen führt. Ich habe den Sensor dazu in das Gehäuse der Türglocke eingeführt:

IMG_20160123_133907

IMG_20160123_135200

Der Pi Zero liegt im Moment noch lose obenauf, dafür muss ich mir noch eine hübschere Lösung überlegen.