Hier wird der Aufbau eines elektronischen Türschließsystems für Vereine und auch private Anwendung.
HINWEIS: Bei diesem Hobbyprojekt handelt es sich um einen Prototypen einer Idee und nicht um ein fertiges Produkt. Nachbau und Verwendung erfolgen auf eigenes Risiko!!!
Allgemeines
In gemeinsam, z.B. von Vereinen benutzten Räumlichkeiten, ist die Kontrolle des Zutritts oft eine Herausforderung. Inbesondere, wenn durch Veranstaltungen temporär auch dritte die Außentüren öffnen können müssen, kommen klassiche Verfahren wie z.B. Schlüssel und Schließanlagen oft an ihre Grenzen.
Wenn es dann nun etwas “smarter” werden soll, ist man oft entweder in proprietären Ökosystemen gefangen. Entweder kosten Zugangstokens mit RFID viel Geld, die dann auch nur auf das System des Anbieters beschränkt sind. Bestenfalls geht es mit einer App auf dem Smartphone. Nur, was wenn der Anbieter irgendwann das Produkt einstellt und diese Geräte nur noch Elektronikschrott sind?
Das ist weder nachhaltig noch finanziell tragbar. Das muss also auch besser gehen.
Der Projektstart war in unserem Hackerspace https://www.mudbyte.de, daher handelt es sich bei allen hier vorgestellten Projektteilen um gemeinsam entwickelte Ideen.
Funktionsbeschreibung
Das Grundprinzip das Systems ist die zwei-Faktor Authentikation. Diese wird durch Besitz eines druckbaren Codes (QR- oder Barcode) und einer PIN realisiert.
Für kurzfristige Zugangsdaten, wie z.B. für Veranstaltungen, kann auch eine reine PIN mit Ablauf-Zeitstempel verwendet werden.
Das Ganze besteht aus vier Komponenten, die auf zwei verschiedenen Hardwareplattformen laufen.
Neben der Tür befindet sich ein PIN-Pad mit eingebauten QR- und Barcodescanner.
An der Tür sitzt ein Schrittmotor, welcher den Schließzylinder bedient. Dieser ist mit einer Arduinobasierten Platine und einem passenden Schrittmotortreiber verbunden.
Diese beiden Geräte werden über eine USB-Leitung oder RS485 mit einen Raspberry PI oder ähnlichen Mini-Computer verbunden.
Auf Softwareebene gibt es zwei weitgehend unabhängige Komponenten: Der Gerätetreiber enumeriert alle per USB angeschlossenen seriellen Geräte und versucht mit ihnen zu kommunizieren. Er gruppiert dies Geräte dann nach Namen und Funktion, sodass es auch möglich ist, mehrere Türen mittels eines Computers zu bedienen. Hier wird ausschließlich die Kommunikation mit den Türgeräten hergestellt, die Zugriffsentscheidung wird mithilfe von http(s) an eine andere Komponente delegiert, sodass diese austauschbar bleibt.
Das Backend und Managementsoftware prüft die Zutrittsberechtigung auf Gültigkeit (zeitlich und inhaltlich) und schreibt ein Protokoll über die erfolgreichen Schließvorgänge.
Das PIN-Pad
Beschreibung
Das PIN-Pad besteht mechanisch aus einer vandalismussicheren Tastatur in einem Aluminiumgehäuse. In selbigem befindet sich auch ein QR-/Barcodescannermodul.
Hierbei fiel auf, dass die Pin-Belegung der verschiedenen chinesischen Anbieter sich stark unterschieden obwohl die Verbinder mechanisch kompatibel waren. So waren Versorgungsspannungs- und Datenleitungen vertauscht, was ziemlich Sicher zum Defekt der Module beim Anschluss geführt hätte. Ebenso waren die Schraublöcher minimal anders angeordnet, sodass auch die Gewinde strategisch platziert werden mussten um beide bekannte Varianten aufnehmen zu können.
Hardware
Stückliste:
- PIN-Tastatur: Storm Interface 1K120101
- Barcode-Scanner: Waveshare Barcode Scanner Module, SEENGREAT USB Barcode Scanner Module
- Alu-Gehäuse: Gefräst, Zeichnung im git Repository
- Arduino Nano
- USB-B-Micro-Kabel gewinkelt
- Pieoz Buzzer für die akustische Rückmeldung
Montage der Komponenten
Der Arduino-Nano wird “huckepack” auf dem Tastaturmodul montiert, die Leitungen zum Barcode-Scanner werden auch direkt an den Arduino angelötet, sodass die Steckverbindung zur Tastatur möglichst solide ausfällt.
Wenn das Gehäuse im 3D-Druck hergestellt wird, kann der Arduino auch in die dafür vorgesehenen Halter eingeclipst werden.
Sollte eine RS485-Kommunikation gewünscht sein, anstatt der USB-Leitung, muss dieses Modul auch noch im Gehäuse untergebracht werden. Dies sollte aber kein Problem darstellen.
Software
Alle Arduino-basierten Geräte teilen sich eine Software, sodass das Update später in der Einbausituation möglichst einfach sein sollte.
Die Schlosssteuerung
Beschreibung
Das Antreiben eines klassischen Schließzylinders erweist sich oft als schwieriger als gedacht, denn möchte man sein Schloss auch noch mit einem normalen Schlüssel schließen können, muss das Ganze auch einen Leerlauf haben der für einen Benutzer nicht überfordernd und den Schlüssel nicht durchbrechen lässt.
Also wurde ein Schrittmotor (5) eingesetzt, in der ersten Wirkungsstätte des Hackspaces reichete dieser NEMA-15-Schrittmotor aus einem 3D-Drucker völlig aus. Das Schloss (1) im neuen Gebäude zeigte sich sehr störrisch und benötigte ein Vorsetzgetriebe (4).
Um den Motor mit dem Schließzylinder zu verbinden, haben sich Knaufzylinder bewährt, da bei diesen der Knauf i.d.R. abnehmbar gestaltet ist. Darunter befindet sich dann eine Welle (2) mit Durchmessern zwischen 8mm und 10mm. Aber auch hier gibt es anscheinend keine Standardisierung und daher braucht man auch hierbei entweder eine genau passende flexible Kupplung (3) oder eine solche muss entsprechend auf einer Drehbank auf Maß ausgedreht werden.
Das mechanische Anbinden des Motors an die Tür ist auch wieder eine Herausforderung. Anscheinend hat jeder Tür(beschlag)hersteller eine eigene Vorstellung davon, wie die Garnituren an der Tür befestigt werden sollten. Daher musste bislang immer ein spezieller Adapter im 3D-Druck hergestellt werden (6).
Mittlerweile gibt es auch einen “universellen” Halter für klassische gerade Langschildgarnturen, der leider bei den sogenannten “Rosetten” im neuen Dominzil des Hackspaces natürlich nicht passten.
Elektronik
Zur Ansteuerung des Schrittmotors wird ein SilentStepStick an einen Arduino gekoppelt. Hierzu wurde von einem Vereinskollegen eine Leiterplatte entworfen, die jetzt schon in der 2. Iteration des System wieder im Einsatz ist. Auf dem Flugplatz wurde eine elektrisch sehr ähnliche Leiterplatte genutzt, die bei einem Unternehmen für produktionsbegleitende Qualitätskontrolle von Materialdurchflusserhitzern eingesetzt wird.
Software
Wird der Arduino in den Door-Modus (Türantrieb) gestellt, kann man die Anzahl der Schritte für eine zuverlässige Schließung einstellen. Der Motor läuft sowohl zum Öffnen als auch zum Abschließen der Tür eine feste Anzahl Schritte, die so bemessen ist, dass der Motor im Endanschlag magnetisch durchrutscht (“stallt”). Damit wird eine vollständige Schließung sichergestellt.
Gerätetreiber und Protokolle
Das Protokoll zwischen den Geräten und der Software auf dem Steuerungsrechner ist möglichst einfach gehalten. Es handlet sich um ASCII Telegramme die mittels Newline (\n) abschlossen werden.
Die einzelnen Felder sind Pipe (|) getrennt und sind wie folgt aufgebaut:
<name>|<gerätetyp>|<meldungsart>|<daten>
Das genaue Protokoll und die Optionen sind im Code-Repository der Firmware genauer erklärt.
Im Rahmen der Diskussion des Kommunikation sei erklärt, dass es die Gerätetypen DOOR und KEYPAD
gibt. Jeweils eines davon wird einem Namen zugeordnet, z.B. “innen”. Der Gerätetreiber sammelt dann
diese Geräte ein und ordnet sie ggf. mehreren Einbauorten aufgrund ihres Namens zu. Diese bilden
dann “Gates”, bestehend aus einem PIN-Pad und einem Türantrieb, welche aufgrund ihres Namens
identifiziert werden.
Dies geschieht über PING-Commandos, die eine PONG Antwort des Geräts erzeugen. So entdeckt der
Treiber die angeschlossenen Geräte. Es werden alle erkannten USB-Serial-Geräte (in Linux /dev/ttyUSB*
und /dev/ttyACM*) regelmäßig enumeriert. Das heißt, dass auch der Ausfall einer Verbindung
toleriert und bei Widerherstellung der Verbindung, selbst bei neu zugewiesenem Device-Handler
zuverlässig wiedergefunden. Alte Instanzen werden entsprechend verworfen.
Wird eine PIN mit viermal “0” eingegeben und “*” gedrückt, wird die Tür verriegelt.
Sollte stattdessen am PIN-Pad eine von “0000” verschiedenen PIN eingegeben und mittels der
Rautetaste (=Enter) oder durch Scannen eines QR- oder Barcodes abgeschlossen werden, wird dies
von der Treibersoftware erkannt. Diese bildet aus PIN und ggf. vorhandenen Scan ein Hash nach
dem scrypt-Verfahren. Dieses fragt die Software nun per HTTP(s) bei dem/den konfigurierten Backends
an. Die URLs folgen dem Schema http://<hostname>/keymaster/verify/<gate>/<hash>.
Sollte ein HTTP Code 200 zurück kommen, wird ein Öffnungsbefehl an die Türmotor-Platine gesendet und eine Tonfolge zu positiven Quittierung abgespielt.
Kommt ein anderer Statuscode zurück, wird eine andere, ablehnende Melodie gespielt und die Tür bleibt zu.
Damit ist das Backend völlig flexibel zwischen einer mittels Webframework entwickelten Webapplikation und einem primitiven Webserver der ausschließlich kleine Dateien, zu zufällig wie ein Hash heißen, auf dem Dateisystem findet oder eben nicht. So wird das Backend einfach tauschbar bzw. aufrüstbar.