Telekom T-Concept X311 mit Doorline am Raspberry

Schematischer Aufbau mit fritzing

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.

Schema des Gesamtaufbaus
Schema des Gesamtaufbaus

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:

  1. (R) Taste drücken
  2. Kennziffer (8) (8) wählen >> 5 Sekunden warten, dann Quittierungston
  3. Nochmal Kennziffer (8) (8) >> Quittierungston
  4. (1) (1) eingeben >> Kontakt 1 (möglich sind 1..4), Betriebsart 2 (Schaltkontakt) für Klingeltaste1 (möglich sind 1..4)
  5. (8) (1) (3) eintippen für Kontaktschließzeit 3 sek (8 Kontakt Dauer 2=0,2 sek, 3=3 sek)
  6. Fertig – Auflegen

Der Anschluss selber erfolgt über die beiden Kontakte der Schraubleiste.

tuerklingel_Beispiel_K2
Beispiel für den Anschluss am Kontakt K2 der T-Concept X311

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.

tuerklingel_schaltung
Schaltungsaufbau mit Pull-Up und Kondensator

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

Dieser Beitrag hat 5 Kommentare

Kommentar verfassen