Von einer smarten Lösung ist meine 15 Jahre alte T-Concept mit Türsprechstelle ein gutes Stück entfernt. Mit einem Raspberry Pi kann man sie aber ein wenig näher in Richtung „Smarthome“ bringen und einige sinnvolle Funktionen nachrüsten.
Am wichtigsten war mir zu wissen, wann die Klingel betätigt wurde und bei jedem Klingeln an der Haustüre per E-Mail informiert zu werden. Zusätzlich sollte über die Picamera ein Foto erstellt und der Mail hinzugefügt werden.
Klingt einfach – nach einigen Tests, vielen sinnlosen Mails und Anpassungen war es dann auch einfach…
Systemaufbau
Der Raspberry Pi benötigt dafür eine installierte Picamera. Soll eine günstige Position der Kamera gefunden werden, ist das enthaltene Flachbandkabel zur Kamera für meinen Anwendungsfall aber zu kurz.
Es gibt aber glücklicherweise auch wesentlich längere Varianten zu kaufen. Bei mir funktioniert sogar eine Länge mit 2 m noch perfekt.
Der Raspberry selber benötigt, wie gewohnt, Raspbian als Betriebssystem. Die Ausführung des Raspberry ist egal. Bei mir ist es ein Raspberry Pi B+, den ich über einen WLAN-Stick ins heimische Netzwerk eingebunden habe.
Programmierung der T-Concept Kontakte
Die Telefonanlage bietet von aus Haus die Möglichkeit, 4 Kontakte zu schalten. Das kann man hervorragend nutzen, um eine Klingelbetätigung – ohne große Lötarbeiten – für weitere Aktionen zu verwenden. Liegt die Bedienungsanleitung nicht mehr vor, reicht eine kurze Google-Suche mit „Bedienungsanleitung T-Concept x311“. Die Telekom stellt alle Dokumente in ihrem Archiv freundlicherweise zur Verfügung. Der Programmierung der Schaltkontakte ist ein eigenes Kapitel gewidmet.
Für die Einstellung kann nur das Telefon am Anschluss <21> benutzt werden. Wenn man dieses kennt, ist das kein Problem. Möchte man nicht ausprobieren, ist es am einfachsten ein ausgedientes Telefon zum Programmieren an den Anschluss <21> – direkt an der T-Concept – vorübergehend anzuschließen.
Die Programmierung selber ist schnell erledigt. Für mich habe ich den Schaltkontakt 1 gewählt. Bei jedem Druck auf die Klingeltaste 1 wird er 3 Sekunden geschaltet. Warum gerade 3 Sekunden erfahren Sie weiter unten.
Programmierung:
- (R) Taste drücken
- Kennziffer (8) (8) wählen >> 5 Sekunden warten, dann Quittierungston
- Nochmal Kennziffer (8) (8) >> Quittierungston
- (1) (1) eingeben >> Kontakt 1 (möglich sind 1..4), Betriebsart 2 (Schaltkontakt) für Klingeltaste1 (möglich sind 1..4)
- (8) (1) (3) eintippen für Kontaktschließzeit 3 sek (8 Kontakt Dauer 2=0,2 sek, 3=3 sek)
- Fertig – Auflegen
Der Anschluss selber erfolgt über die beiden Kontakte der Schraubleiste.
GPIO
Für die Signalerkennung kann jeder beliebige GPIO-Kontakt benutzt werden. In diesem Beispiel wird Pin 16 verwendet. Das Signal wird wie bei jedem Schalter über einen Pull-Up-Widerstand gegen 5V gezogen.
Bei mir ist die Leitung vom Raspberry zur T-Concept ca. 30 m lang und besteht aus einer vorhandenen Telefonleitung. Am Anfang löste der Pin zwar zuverlässig bei jedem Klingeln aus, aber auch bei völlig anderen Situationen, wie beispielsweise dem Öffnen des elektrischen Garagentorantriebs oder dem Einschalten des Lichts.
Ich vermute, dass die lange Leitung ähnlich wie eine Antenne funktioniert und so ein „Klingel-Signal“ am Pin 16 erzeugt.
Die erste Lösung war der Einbau eines Kondensators zwischen die Kontakte des Pins und GND. Damit waren die ersten Störungen beseitigt. Aber beim Einschalten der Beleuchtung trat immer noch ein falsches Signal auf.
Um das ebenfalls noch auszuschließen, habe ich mich für eine Kombination mit einer Software-Lösung entschieden. Die Störsignale treten immer nur sehr kurz im Millisekundenbereich auf. Im Programm wird nach dem ersten Auftreten eines Signals ein Zeitstempel gesetzt. Nach Auflauf von 1 Sekunde wird geprüft, ob das Signal noch anliegt. Ist das der Fall, wird es nun als echtes Klingel-Signal erkannt und weiter bearbeitet. Andernfalls war es ein Störsignal und wird nicht beachtet.
Hier half die Möglichkeit enorm, in der Telefonanlage ein Schaltsignal von 3 Sekunden programmieren zu können. Deshalb wurde auch oben dieser Wert gewählt.
So sieht die Abfrage des Pins im Programm aus:
... pressed16=False ... try: while True: time.sleep(0.2) if GPIO.input(16)==False: #Signal liegt an, vielleicht auch nur eine Störung if pressed16==False: #Neues Signal erkannt pressed16=True print("Signal liegt an Pin 16") #Zeitpunkt merken time16=datetime.datetime.now() else: #Prüfen, ob Signal länger als 1 Sekunde anliegt if datetime.datetime.now()-time16>datetime.timedelta(milliseconds=1000): print("Klingel-Signal erkannt") #weitere Schritte nach Signal-Erkennung time16=datetime.datetime.now() pressed16=False ...
Grundsätzlich könnte man zwar auch die IF-Bedingung vereinfachen in dem man folgenden Aufbau verwendet:
if GPIO.input(16)==False: #Signal liegt an, vielleicht auch nur eine Störung #deshalb erst 1 Sekunde warten time.sleep(1) #Neu prüfen, ob Signal immer noch anliegt if GPIO.input(16)==False: print("Klingel-Signal erkannt") #weitere Schritte nach Signal-Erkennung
Wenn nur ein Pin abgefragt wird, spielt das keine Rolle. Werden aber mehrere Pins abgefragt (z. B. im Rahmen einer Smarthome-Lösung), könnte man ein Ereignis verpassen. Deshalb ist mir die erste Lösung lieber.
Ein Foto machen
Mit der Picamera ist es sehr einfach ein Bild zu erstellen. Über Python muss nur die Bibliothek picamera
im Quelltext eingebunden werden. Für die Aufnahme eines Bilds, werden dann nur 3 Zeilen Code gebraucht:
import picamera camera=picamera.PiCamera() camera.capture('bild.jpg',resize=(1920,1080)) camera.close()
Sobald die Kamera angesprochen wird, leuchtet eine kleine rote LED an der Kamera auf. Das kann unter Umständen nicht gewünscht sein. Um das auszuschalten, muss eine zusätzliche Zeile in der Datei /boot/config.txt
eingefügt werden.
disable_camera_led=1
Die Raspberry Pi Foundation hat mittlerweile dazu auch ein eigenes E-Book herausgebracht, dass alle Funktionen hervorragend erklärt. Einen Link dazu finden Sie unter www.raspberrypi.org/magpi/issues/essentials_camera_v1.
Eine Mail mit Bild senden
Auch für das Versenden von Mails gibt es in Python fertige Funktionen. Falls man die Einstellwerte für den Mail-Zugang nicht auswendig kennt, schaut man am besten im genutzten Mail-Programm – meistens unter Konto – nach.
def MailVersendenMitFoto(betreff,txt): try: #Absender festlegen sfrom='Smarthome <name@mailadresse.de>' #Empfänger festlegen sto='Thomas Angielsky <name@mailadresse.de> #Pfad zum Bild der Picamera sfn='/home/pi/smarthome/bild.jpg' #Mail-Text erzeugen stxt=txt+'\nZeit: '+zeit.strftime('%d.%m.%Y %H:%M:%S') stxt=stxt+'\n\nFoto:' #Mail erstellen mime=MIMEMultipart() mime['from']=sfrom mime['to']=sto mime['subject']=Header(betreff,'utf-8') mime.attach(MIMEText(stxt,'plain','utf-8') f=open(sfn,'rb') part=MIMEApplication(f.read(),Name=basename(sfn)) f.close() part['Content-Disposition']='attachment; filename="'+basename(sfn)+'"' mime.attach(part) #SMTP-Server eintragen smtp=smtplib.SMTP('smtp.mailadresse.de') smtp.starttls() #SMTP-Login und Kennwort eintragen smtp.login('name@mailadresse','kenntwort') #Mail senden smtp.sendmail(sfrom,[sto],mime.as_string()) smtp.quit() except: print('Fehler beim Mailversand')
Python Programm automatisch starten
Es gibt verschiedene Möglichkeiten ein Programm mit dem System automatisch zu starten. Ich verwende hier wird die /etc/rc.local
. Die rc.local
wird am Ende des Startens ausgeführt.
Folgende Zeile muss in die rc.local vor exit 0
eingefügt werden:
su pi -c “python /home/pi/smarthome/smartgpio.py &“
Damit startet smartgpio.py bei jedem Booten automatisch mit und wartet auf Klingelsignale.
Erweiterungsideen
Bestimmt haben Sie auch jede Menge Erweiterungsideen für Ihre T-Concept-Lösung. Ich habe für mich folgende vorgemerkt:
- Statt eines Bildes auch ein Video aufzeichnen, z. B. 10 Sekunden nach dem Klingeln
- Alle Ereignisse über einen Webserver verfügbar machen:
- Klingelliste mit Datum, Uhrzeit pro Tag
- Darstellung von Bildern
- Abspielen der Videos
Pingback: Kaninchen, Taster und Lean-Management – Mein Techblog
Pingback: Raspberry Erweiterungen durch Stecker-Module – Mein Techblog
Pingback: Raspberry Erweiterungen durch Stecker-Module – Tech+Code
Pingback: Telekom T-Concept X311 mit Doorline am Raspberry – tangielskyblog
Link für die Anleitung als PDF:
https://www.telekom.de/hilfe/downloads/b_tcx311.pdf