Aus Linux-Magazin 01/2014

Ein Türöffner im Eigenbau

© Mike Zakharov, 123RF.com

Ein Optokoppler, ein Mosfet, ein Raspberry Pi, ein Webserver mit SQL-Datenbank und ein wenig Skript-Magie reichen aus, um einen Haustüröffner zu bauen. Der öffnet vom Smartphone aus die Tür oder spielt sogar je nach Gast andere Klingeltöne ab.

Ein großer Teil des Erfolgs des Raspberry Pi liegt in seinen praktischen und handlichen GPIO-Pins, die auf dem Board verlötet sind. Das Beispiel in diesem Artikel nutzt sie, um zwei Türöffner und die Klingel der Schließ- und Gegensprechanlage an den Platinenrechner zu koppeln. Der Anschluss zum Schalter in der zentralen Schließanlage ist hinter einem Optokoppler direkt auf den Türöffner der Haustür gelötet, parallel zur eingebauten Aufsperren-Taste.

GPIO-Pins, Optokoppler und ein Mosfet

Auch an der Wohnungstür ist nun ein elektrischer Türöffner verbaut. Den schaltet ein etwas größerer Mosfet vom zweiten GPIO-Pin des Raspi aus. Zusätzlich prüft ein Sensor, ob die Tür offen ist. Alles, was nicht im Pi integriert ist, bringt der Bastler in einem eigenen Gehäuse (Abbildung 1) unter, zum Beispiel auch einen Lautsprecher.

Abbildung 1: Von oben nach unten: Raspi, separates Gehäuse und Türöffner.

Abbildung 1: Von oben nach unten: Raspi, separates Gehäuse und Türöffner.

Der Webserver läuft über HTTPS, kann per VPN oder WLAN, NAT und lokale IPs gesichert sein. Eine von PHP generierte Webseite stellt das Anmeldeformular bereit. Das ist betont simpel gehalten (Abbildung 2), bietet aber bereits eine kleine User-Verwaltung mit Einträgen in einer SQL-Datenbank, die es gestatten, jeden Eingelassenen mit einem eigenen Klingelton zu versehen. Die dem User zugeordnete Datei liegt in einer SQL-Tabelle, der Raspi spielt sie ab, sobald der User die Tür öffnet.

Abbildung 2: Grüner Hintergrund, das bedeutet: Die Tür ist zu.

Abbildung 2: Grüner Hintergrund, das bedeutet: Die Tür ist zu.

Dank des erwähnten Lautsprechers ist im Normalfall der Klang also in der Wohnung zu hören, aber den Aktionen sind hier keine Grenzen gesetzt. In Zeile 38 des »index.php« -Beispiels (siehe weiter unten) spielt Splay ein Audiofile ab:

$command = "screen -dm aplay /var/www/sesame/".$array['sound'];

Denkbar ist es aber auch, über Skripte oder SSH-Befehle etwa im Büro oder am Laptop einen Ton abzuspielen, wenn zu Hause jemand klingelt, oder gar die Sprechanlage weiterzuleiten. Das Standard-Linux auf dem Raspi eröffnet hier alle Möglichkeiten.

Root-Probleme

Die einzigen Probleme in der Konfiguration macht die Tatsache, dass im Raspberry (mindestens auf Debian Wheezy) nur Root den GPIO nutzen darf. Deshalb führt ein Wrapper die Python-Skripte als Root aus. Listing 1 (»open.py« , öffnet beide Türen ), Listing 2 (»open_down.py« , öffne unten) und Listing 3 (»open_up.py« , öffne unten) zeigen, wie Python die GPIO-Pins adressiert, während Listing 4 (»sensor.py« ) den Status der Wohnungstür abfragt.

Listing 1

open.py

01 #!/usr/bin/python2.7
02 import RPi.GPIO as GPIO
03 import time
04 GPIO.setwarnings(False)
05 GPIO.setmode(GPIO.BOARD)
06 GPIO.setup(7,GPIO.OUT)
07 GPIO.output(7,GPIO.HIGH)
08 time.sleep(5)
09 GPIO.output(7,GPIO.LOW)
10 time.sleep(12)
11 GPIO.setup(11,GPIO.OUT)
12 GPIO.output(11,GPIO.HIGH)
13 time.sleep(35)
14 GPIO.output(11,GPIO.LOW)

Listing 2

open_down.py

01 #!/usr/bin/python2.7
02 import RPi.GPIO as GPIO
03 import time
04 GPIO.setwarnings(False)
05 GPIO.setmode(GPIO.BOARD)
06 GPIO.setup(7,GPIO.OUT)
07 GPIO.output(7,GPIO.HIGH)
08 time.sleep(5)
09 GPIO.output(7,GPIO.LOW)

Listing 3

open_up.py

01 #!/usr/bin/python2.7
02 import RPi.GPIO as GPIO
03 import time
04 GPIO.setwarnings(False)
05 GPIO.setmode(GPIO.BOARD)
06 GPIO.setup(11,GPIO.OUT)
07 GPIO.output(11,GPIO.HIGH)
08 time.sleep(5)
09 GPIO.output(11,GPIO.LOW)

Listing 4

sensor.py

01 #!/usr/bin/python2.7
02 import RPi.GPIO as GPIO
03 import time
04 GPIO.setwarnings(False)
05 GPIO.setmode(GPIO.BOARD)
06 GPIO.setup(13,GPIO.IN)
07 if (GPIO.input(13)):
08         print("GREEN")
09 else:
10         print("RED")

Nicht gerade elegant: Gewrapptes Python

Für ein erstes Beispiel reicht dieses Vorgehen, auch wenn es bessere Wege gibt, als Python mit einem C-Wrapper auszustatten. Beispielsweise ließen sich die Funktionalitäten der Python-Skripte direkt in C-Programme implementieren oder die Skripte einfach für unprivilegierte User schreib- und ausführbar machen, doch für den privaten Einsatz im abgesicherten LAN funktioniert das Beispiel schnell und zuverlässig.

Das Webinterface (Abbildung 2) besitzt übrigens eine versteckte Funktion: Den Tür-Status zeigt die Hintergrundfarbe der Website an: Grün steht für geschlossen, Rot für geöffnet. Bleibt die Tür länger als 5 Minuten auf, dann schickt der Pi brav eine Mail an einen konfigurierten Account – geregelt von »sensor.py« (Listing 4), aufgerufen durch die Zeile

<body align='center' bgcolor='<? passthru("./sensor_wrapper"); ?>'>

in einer »index.php« , die einfach entweder »RED« oder »GREEN« enthält. Eine Beispieldatei für »index.php« liegt mit den anderen Skripten auf dem Listing-Server des Linux-Magazins bereit.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 2 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
LINUX-MAGAZIN KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Readly Logo
E-Mail Benachrichtigung
Benachrichtige mich zu:
0 Kommentare
Älteste
Neuste Beste Bewertung
Nach oben