PyRFID

PyRFID ist eine Python Bibliothek zur Ansteuerung eines 125kHz UART RFID-Lesers unter Verwendung des EM4100 Protokolls. Entwickelt wurde mit dem günstigen RDM6300 RFID-Sensor. PyRFID kommt auch bei PAM RFID zum Einsatz.

Hinweis: Solange der RFID-Leser zum EM4100 Protokoll kompatibel ist, kann auch dieser benutzt werden. Es kann jedoch weder widerlegt noch bestätigt werden, dass auch andere RFID-Leser mit PyRFID funktionieren.

Der Leser wird mittels USB-TTL Adapter an den Rechner angeschlossen (siehe PAM RFID). Die Kommunikation zwischen Sensor und Rechner übernimmt PySerial. Pro Lesevorgang wird ein Datenpaket ausgetauscht, was die erforderlichen Daten des RFID-Tags enthält. Im Folgenden wird der Aufbau eines solchen Pakets erklärt.

Datenpaket

Ein Datenpaket besteht aus 6 Hexadezimal kodierten Zahlen in einem Rahmen aus 2 Byte-kodierten Flags. Die 6 Hexadezimalen Daten enthalten die 10 Byte lange RFID-Tag Nummer, sowie eine 2 Byte lange Prüfsumme dieser Nummer. Die 2 einzelnen Byte Flags befinden sich am Anfang und Ende. Sie dienen nur zur Rahmenbegrenzung und gleichzeitig zur besseren Signalisierung eines Datenpakets. Das Format eines Datenpakets sieht demnach wie folgt aus:

0x02 5 Hex-data   Checksum 0x03
  • 0x02 - Signalisiert den Anfang des Datenpakets (Länge 1 Byte)
  • 5 Hex-data - RFID-Tag Nummer als Hexa-Dezimal kodiert (Länge 10 Byte; 1 Hex = 2 Byte)
  • Checksum - Prüfsumme des Datenpakets (Länge 2 Byte)
  • 0x03 - Signalisiert das Ende des Datenpakets (Länge 1 Byte)

DIe RFID-Tag Nummer, also die eigentlichen Nutzdaten, werden als 5 Hexadezimal kodierte Zahlen übertragen. Um zu überprüfen, ob diese Daten korrekt übertragen wurden, gibt es die Prüfsumme bzw. Checksum.

Prüfsumme (Checksum)

Die Prüfsumme (Checksum) wird nach jedem vollständigen Empfang eines Datenpakets berechnet. Die Berechnung erfolgt dadurch, dass die 5 Hexadezimal kodierten Zahlen durch eine XOR-Operation zusammengezählt werden:

(1. Hexa-Zahl) XOR (2. Hexa-Zahl) XOR (3. Hexa-Zahl) XOR (4. Hexa-Zahl) XOR (5. Hexa-Zahl)

Das Ergebnis dieser Operation wird dann mit der mitgesendeten Prüfsumme verglichen. Stimmt die berechnete mit der gesendeten Prüfsumme überein, wurde das Datenpaket korrekt übertragen und kann weiterverarbeitet werden. Der Zugriff auf die Nutzdaten durch PyRfid kann nun erfolgen. Um die Prüfsumme auszulesen bietet PyRFID die Methode tagChecksum() an.

Tag-Typen

Die Nutzdaten enthalten neben der eigentlichen RFID-Tag Nummer ein Flag zur Bestimmung des Tag-Typs. Dieses Typ-Flag wird von Herstellern von RFID-Tags unterschiedlich genutzt und befindet sich am Anfang der Nutzdaten. PyRFID bietet zum Auslesen des Typs die Python Properties tagType, tagTypeFloat.

Formate

Die Nutzdaten können unterschiedlich formatiert werden:

  • Hexadezimal
    Hierbei werden die Bytes 0 bis 9 des Tags abgegriffen und "roh" zur Verfügung gestellt. PyRFID bietet dazu die Methode rawTag(). Beispiel: 0F00789A62

  • Kommaschreibweise
    Hierbei werden die Bytes 2 bis 5 als Vorkommazahl und die Bytes 6 bis 9 als Nachkommazahl benutzt. PyRFID bietet dazu die Methode tagIdFloat(). Beispiel: 120.39522

  • führenden Nullen
    Hierbei werden die Bytes 4 bis 9 benutzt und mit Nullen von links auf die Länge 10 aufgefüllt. PyRFID bietet dazu die Methode tagId(). Beispiel: 0007903842

Auslesen

Ein Lesevorgang wird mittels der Methode readTag() ausgelöst. Diese blockiert solange, bis ein Tag eingelesen wurde. Im Verzeichnis /usr/share/doc/python-rfid/examples/ befindet sich ein Beispiel, wie man PyRFID benutzen kann.

Installation

Falls das Repository von PM Code Works im Paketmanager eingebunden ist, genügt es diesem die Installation des Pakets "python-rfid" mit folgendem Befehl anzuordnen:

~# apt-get install python-rfid

Alternativ kann die Installation selbstverständlich auch mit einem grafischen Paketmanager, wie z.B. synaptic, durchgeführt werden. Falls das Repository von PM Code Works noch nicht von einem Paketmanager eingebunden wurde, gibt es eine Anleitung unter Linux Repository.

Alternativ gibt es PyRFID als ZIP-Archiv.

Lizenz

PyRFID wurde unter der D-FSL-Lizenz veröffentlicht und ist somit Open-Source. Existiert jetzt übrigens auf GitHub.