Dies ist eine alte Version des Dokuments!


Elektronisches Türschloss

– Work in Progress. Inbetriebnahme ist am Freitag, 15.02.2019. –

Die Eingangstür der AfRA verfügt über ein elektronisches Türschloss, welches mittels SSH-Public-Key-Authentifizierung oder RFID-Token geöffnet werden kann.

Schlüssel bekommen

Um einen Schlüssel für die AfRA zu erhalten, wende dich bitte an Lexi (binaryDiv im IRC).

Es gibt hierbei zwei Arten von elektronischen Schlüsseln für das Schloss: SSH-Keys und RFID-Tokens.

  • Für SSH-Authentifizierung erzeuge bitte ein SSH-Schlüsselpaar (ssh-keygen). Der Public Key wird dann auf dem Türschloss hinterlegt.
  • Ein RFID-Token (oder eine Karte) kannst du von uns bekommen. Es sollte sich jedoch auch jedes andere RFID-Token nach dem EM4100-Standard (125kHz) als Schlüssel registrieren lassen.

Gerne kannst du auch beide Varianten nutzen (für mehr Redundanz!).

Für Notfälle bzw. Ausfälle des elektronischen Schlosses existieren auch physische Schlüssel. Diese werden jedoch nur an eine kleine Anzahl von Mitgliedern vergeben, die z.B. in der Nähe der AfRA wohnen und in Notfällen aufschließen können.

Bedienung

Wichtig: Das Schloss prüft nur alle 2-5 Sekunden nach neuen Befehlen - dafür halten die Batterien aber auch 1 Jahr (BLE). Es kann also einen Moment dauern, bis sich die Tür öffnet.

Aufschließen (beim Betreten der AfRA)

Um via SSH aufzuschließen, verbinde dich zunächst mit dem AfRA-WLAN (discord).
Verbinde dich dann mit ssh open@door zum Türschloss. Achte darauf, den hinterlegten SSH-Key zu nutzen (ssh -i PFAD_ZUM_KEY open@door).
Das Schloss öffnet sich innerhalb von 10 Sekunden.

Um via RFID aufzuschließen, halte dein RFID-Token oder deine RFID-Karte gegen den RFID-Reader. Dieser ist hinter der Glastür eingebaut (schwarze Fläche mit rot-leuchtender LED).
Du hörst einen Piep-Ton und der Leser leuchtet Grün. Das Schloss sollte jetzt öffnen.

Sollte sich die Tür nicht öffnen lassen, kann ein physischer Key trotzdem die Tür öffnen. Hier ist eine Liste mit Kontaktdaten zu physischen Keyholdern: [Link] FIXME

Zuschließen (beim Verlassen der AfRA)

Wenn du als Letztes die AfRA verlässt, stell bitte sicher, dass du die Tür zuschließt. Beachte bitte außerdem die Hinweise im Shutdown-Protokoll.

Um die Tür zu verschließen, drücke den Button an der Seite des transparenten Kontrollkastens (siehe Fotos unten). Die rote LED im Kasten fängt an zu blinken.
Ziehe die Tür hinter dir zu. Nach ca. 10 Sekunden schließt das Schloss selbstständig ab. Warte solange und prüfe dann, ob die Tür wirklich zu ist!

Alternativ kannst du die Tür auch mit deinem SSH-Schlüssel zuschließen: ssh -i PFAD_ZUM_KEY close@door

Wenn sich die Tür mal nicht abschließen lässt, du aber gehen möchtest, reboote einmal den Raspberry Pi im Kontrollkasten (Stecker raus, Stecker rein). Wenn das immer noch nicht funktioniert, nutze den Backup-Schlüssel (hängt oben an der Innentür) um zuzuschließen. Bitte informiere die Mitglieder über die Mailingliste, dass du die Tür manuell zugeschlossen hast, und bring den Schlüssel so bald wie möglich zurück!

Bedienung des Schlosses innerhalb der AfRA

Wenn du im Space bist und das Schloss auf- oder zuschließen möchtest, benutze die zwei Buttons, die sich am Türschloss selbst (weißer Kasten direkt an der Tür) befinden. Diese reagieren ohne Verzögerung. Der obere Button schließt auf, der untere Button zu.

Wenn einmal gar nichts mehr geht, z.B. weil die Batterien leer sind, lässt sich das Schloss auch per Hand am Rad öffnen und schließen. Bitte nutze diese Option jedoch nur, wenn es notwendig ist, da das System hierdurch seinen State verliert und sich neu kalibrieren muss.

Status-Abfrage via HTTP

Innerhalb des WLANs (discord) ist es möglich, über HTTP den aktuellen Status des Türschlosses abzufragen.

Hierfür reicht ein simpler GET-Request auf http://door:8080, beispielsweise mittels curl door:8080.

Der HTTP-Server antwortet dann mit Door status: STATUS, wobei STATUS einer der folgenden Status-Werte ist:

  • UNKNOWN: Türstatus ist unbekannt
  • LOCKED: Tür ist zugeschlossen
  • UNLOCKED: Tür ist aufgeschlossen
  • MOVING: Schloss dreht sich in diesem Moment von einer Stellung zur anderen
  • OPENED: (dieser Status existiert laut Spezifikation, sollte bei uns aber nicht auftreten, da "aufgeschlossen" und "offen" bei unserer Tür dasselbe sind)

Anmerkung: Es wäre naheliegend, aus dem Türschloss-Status den Space-Status (SpaceAPI, Schlosssymbol auf Startseite, IRC-Bot) abzuleiten. Dies ist jedoch aus mehreren Gründen explizit nicht gewünscht. Türschloss und Space-Status sind unabhängig voneinander. Sinn dieser Status-Abfrage ist beispielsweise eine space-interne Steuerung von Geräten, die nur dann angeschaltet sein sollen, wenn jemand da ist, z.B. Heizungsthermostat, Info-Displays, etc.

Implementierung

TODO: Implementierung auf eigene Seite auslagern?

Hardware

Das Schloss ist ein equiva BLUETOOTH® Smart Türschlossantrieb. Angesteuert wird alles von einem RPI Zero W über Bluetooth Low Energy. Die Hardware ist in einer transparenten Box verbaut. Die Box bekommt einmal 12V und bucht sich via WLAN ins AfRA Netz ein.

Der RFID Reader ist ein Neuftech EM4100 Reader für 125KHz Token. Quasi jeder Token der den EM4100 Standard verwendet lässt sich benutzen. Die meisten RFID Karten (BVG, Mensa) sind inzwischen 13,56MHz, was aber nicht durch unsere Glastür funktionieren würde.

Software

Angesteuert wird das Schloss von Python-Skripten (/opt/afra_door/*.py) auf dem RPI. Diese sind für den open/close user als login-shell hinterlegt. Außerdem gibt es noch den Close-Button-Watcher als systemd daemon. Der open/close user haben kein Passwort, Authentifizierung nur via ssh key.

Zur Kommunikation mit dem Schloss wird keyble benutzt.

Um Keys deployen zu können und das System zu ändern gibt es den "pi" user.

Die Verbindung RPI ↔ Schloss ist mit einem PSK gesichert, welcher als QR Code vorliegt. Aus dem PSK leitet sich ein user-key ab. Der einzige user-key ist aktuell auf dem RPI hinterlegt. Die PSKs liegen derzeit bei ciko (und werden an den Vorstand übergeben).

Die aktuelle Software findet sich unter https://github.com/afra/afra_door

Administration

Einen User Deployen

Um einen neuen User zu deployen/löschen:

  • Logge dich mit dem user "pi" auf dem Schloss ein
  • Füge den ssh key zu /home/open/.ssh/authorized_keys und /home/close/.ssh/authorized_keys hinzu
  • Lese den RFID Token mit /home/pi/utils/read_rfid_token.py aus
    • Starte das Script
    • Warte auf "Connected to RFID Reader"
    • Halte den Token an den Leser
    • Kopiere die ausgegebene Nummer und den MD5 Token
  • Füge den RFID Token Nummer zu /home/open/rfid_codes.txt hinzu
    • Füge den Code als erstes Wort in einer neuen Zeile hinzu. Weitere Worte werden als Kommentare ignoriert.
  • Lege den Nutzer auf Status Ausrollens des neuen Türschloss an. Der MD5 wert wurde von read_rfid_token.py als zweites Wort ausgegeben

Status der Implementierung

  • Auf-/zuschließen via SSH (done)
  • Zuschließen via Button + Timer (done)
  • Auf-/zuschließen via Buttons am Schloss (done)
  • Aufschließen via RFID Token (done)
  • Status-Abfrage via HTTP (done)

Noch zu tun:

  • Statische IP/Hostname/DNS für das Schloss (?)
  • Sicherheitsschloss einbauen, Inbetriebnahme (15.02.2019)
  • (?) Zuschließen via RFID?
  • Hübsch machen, besseren Schalter (zum Schließen) anbringen
  • Schalter-Delay reduzieren (halbe Sekunde ist zu lang)
  • Admin-Utils zur einfachen Key-Verwaltung, Backup etc.
Drucken/exportieren