NFC/RFID mit dem Raspberry Pi

rbp_nfcBei einer Hausautomatisierung kann es durchaus von Vorteil sein, wenn das „Haus“ weiß, ob man zuhause ist oder nicht. Beispielsweise können nicht genutzte Geräte automatisch ausgeschaltet werden oder eine Überwachung aktiviert werden. Bisher habe ich die Präsenz der Bewohner durch durch die Prüfung mittels WLAN und Bluetooth erkennen lassen, wie in diesem Artikel beschrieben wurde. Heute möchte ich eine Lösung zeigen, bei der sich die Bewohner mittels RFID an- und abmelden können.

 

Einleitung

Die bisherige Lösung, die die Bewohner via WLAN und Bluetooth „suchte“, war ein wenig unzuverlässig. War ein Akku eines Handys leer, saß man bereits im Dunkeln. Zudem musste immer WLAN oder Bluetooth aktiviert sein, weil sonst eine Präsenzerkennung nicht funktionierte. Auch wurde die Präsenz nur alle 5 Minuten geprüft, so dass es eine Weile dauern konnte, bis die entsprechenden Geräte eingeschaltet wurden. Also musste eine bessere Lösung her. Beim stöbern in den Weiten des Internets stieß ich auf dieses RFID-Set:

RC522

In diesem Set, welches hier günstig erhältlich ist, befindet sich:

  • eine Leseplatine
  • zwei Pinleisten zum Anlöten
  • eine RFID-Karte
  • ein RFID-Schlüsselanhänger

 

Verbindung mit dem Raspberry

Ich habe mich dazu entschieden, die Platine nebst ein paar LEDs in ein Kunststoffgehäuse zu setzen, welches wiederum nahe der Eingangstür an die Wand montiert wird. Die Verbindung der Platine gestaltet sich nach dem Anlöten der entsprechenden Pinleiste recht einfach. Bei der Pinleiste sollte man jedoch sorgfältig löten, da in meinem Fall der erste Versuch an einer kalten Lötstelle scheiterte. Wir verbinden die einzelnen Kontakte wie folgt mit der Himbeere:

Schaltung

 

Fertig verpackt sieht meine Kunststoffbox recht ansehnlich aus:

DSC00847 - Kopie

 

Installation

device-tree deaktivieren

Damit die entsprechenden und benötigten Module geladen werden können, deaktivieren wir zunächst den sog. „device-tree„. Dazu öffnen wir das Tool

und wählen unter „Advanced Options“ den entsprechenden Menüpunkt. Nach einem Neustart der Himbeere ist der „device-tree“ nun deaktiviert.

 

SPI einschalten

Zum aktivieren von SPI-Geräten, wie unser Lesegerät eines ist, editieren wir die Datei „/etc/modprobe.d/raspi-blacklist.conf“ und kommentieren die Zeile mit „SPI“ aus, so dass dieses Modul beim Systemstart aktiviert wird. Die Datei sollte nun in etwa so aussehen:

 

BCM-Treiber installieren

Für den Betrieb des Lesegerätes benötigen wir zudem noch weitere Treiber. Diese installieren wir wie folgt:

 

Steuerungssoftware installieren

Für den Betrieb unseres RFID-Lesers wurde bereits die passende Software für den Raspberry entwickelt, so dass wir diese nun wie folgt installieren:

 

Seriennummern der Tags auslesen

Nun ist es an der Zeit, die Seriennummer des ersten Tags in Erfahrung zu bringen. Dazu habe ich den im Lieferumfang enthaltenen Schlüsselanhänger genutzt. Wir starten die soeben installierte Software zunächst händisch im sogenannten „Debug-Modus„. So wird beim Erkennen eines RFID-Tags eine Meldung in der Konsole ausgegeben und die erkannte Seriennummer mitgeteilt. Diese brauchen wir für den weiteren Verlauf der Anleitung.

 

Das Programm beenden wir mit der Tastenkombination „STRG+C

 

Konfiguration

Ich lasse den RC522-Daemon unter den Rechten des Nutzers „nobody“ auf meinem System laufen. Daher ermitteln wir zunächst die User-ID dieses Nutzers mit:

 

Die ID der Gruppe „nobody“ ermitteln wir wie folgt:

 

Nun editieren wir die Datei „/etc/RC522.conf“ mit

 

Dort ändern wir die Zeilen „UID“ und „GID“ und tragen dort die soeben ermittelten IDs des Nutzers und der Gruppe ein. Den GPIO-Port ändern wir nicht, dafür tragen wir nun am Ende der Datei für jede RFID-Tag-Seriennummer eine Zeile ein, die ein entsprechendes Script ausführt. Bei mir sehen die Zeilen beispielsweise wie folgt aus:

 

Die Seriennummer haben wir weiter oben in dieser Anleitung in Erfahrung gebracht.

 

Das Script

In diesem Fall belassen wir die Intelligenz bei der Himbeere, an dem das Lesegerät angeschlossen ist. OpenHAB fragt hier nicht aktiv nach dem Zustand sondern das folgende Script teilt diesen automatisch bei einer Zustandsänderung mit. Wir erstellen zunächst ein „Arbeitsverzeichnis“ mit

und erstellen nun das Script „/scripts/rfid/rfid.sh“ mit folgendem Inhalt:

 

In diesem Script werden gleich mehrere Dinge umgesetzt. Zunächst die Mitteilung der Stati an OpenHAB, dann werden in meinem Fall ebenfalls in das Kunststoffgehäuse untergebrachte LEDs geschaltet. Zu guter Letzt nutze ich als Rückmeldung, dass mein Tag gelesen wurde, einen Buzzer, den ich in diesem Beitrag vorgestellt habe. Wer diese Funktionen nicht benötigt, kommt auch mit dieser verkürzten Version des Scripts aus:

 

Dem Script erlauben wir die Ausführung mit

 

Das Script wird künftig im Kontext des Nutzers „nobody“ ausgeführt. Daher müssen wir die Status-Dateien für jeden Nutzer zunächst per Hand erstellen:

 

Das Script selbst können wir testen, indem wir es wie folgt aufrufen:

 

Automatischer Start

Damit der RC522-Daemon beim Systemstart ebenfalls aktiviert wird, tragen wir folgende Zeile in die Datei „/etc/rc.local“ ein, und zwar VOR der Zeile „exit 0„:

 

Weitere RFID-Tags

Es gibt auf dem Markt eine große Anzahl an verschiedenen Tags. Hier nur eine kleine Auswahl, welche ich persönlich testen konnte:

 

 

Integration in OpenHAB

Die Integration in OpenHAB wird in diesem Artikel ausführlich beschrieben.