PyRFID

Available translations: en

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-Modul. PyRFID kommt auch bei PAM RFID zum Einsatz.

Wichtig: Zur Verwendung von PyRFID muss der RFID-Leser das EM4100 Protokoll unterstützen!

Der Leser wird mittels USB-TTL Adapter an den Rechner angeschlossen (siehe PAM RFID). Die Kommunikation zwischen Leser 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 10 Byte Nutzdaten und einer 2-Byte Prüfsumme. Anfang und Ende eines solchen Pakets wird durch zwei einzelne Bytes markiert. Das Format eines Datenpakets sieht demnach wie folgt aus:

0x02 5 Hex-data Checksum 0x03
  • 0x02: Markiert 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: Markiert das Ende des Datenpakets (Länge 1 Byte)

Um zu überprüfen, ob die RFID-Tag Nummer korrekt übertragen wurde, wird eine Prüfsumme berechnet.

Prüfsumme

Die Prüfsumme wird nach jedem vollständigen Empfang eines Datenpakets berechnet, indem die 5 hexadezimal kodierten Zahlen durch eine XOR-Operation verbunden werden:

(1. Hex-Zahl) XOR (2. Hex-Zahl) XOR (3. Hex-Zahl) XOR (4. Hex-Zahl) XOR (5. Hex-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 und tagTypeFloat.

Darstellung

Die RFID-Tag Nummer kann unterschiedlich dargestellt 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
  • Fließkomma: 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
  • Dezimal: 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 RFID-Tag eingelesen wurde. Im Verzeichnis /usr/share/doc/python-rfid/examples/ befindet sich ein Beispiel, wie PyRFID benutzt wird.

Installation

Nachdem das PM Code Works APT-Repository hinzugefügt wurde, kann das Paket einfach mit folgendem Befehl für Python 2 installiert werden:

~# apt-get install python-rfid

Für Python 3 folgenden Befehl verwenden:

~# apt-get install python3-rfid

Anschließend fehlende Pakete installieren:

~# apt-get install -f

Alternativ gibt es PyRFID als ZIP-Archiv.