1.1.26.3. fejezet, nfcpy

Minta kód a nfcpy használatára. Az alábbiak tesztelése MiFare Ultralight, MiFare Classic és MiFare DESFire tag-ekkel történt.

Listázzuk az USB eszközöket:

> lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 8087:0aa7 Intel Corp. 
Bus 001 Device 002: ID 04f2:b56d Chicony Electronics Co., Ltd 
Bus 001 Device 005: ID 04cc:2533 ST-Ericsson NFC device (PN533)
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Az USB portra csatlakoztatott olvasóhoz készítsük elő a felhasználó jogosultságot, hozzunk létre egy új udev szabályt:

sudo nano /etc/udev/rules.d/50-myusb.rules

Tartalma legyen a következő:

SUBSYSTEMS=="usb", ATTRS{idVendor}=="04cc", ATTRS{idProduct}=="2533", GROUP="users", MODE="0666"

Az idVendor és az idProduct legyen az USB eszköznek megfelelően beállítva. Ezután töltsük újra a udev szabályokat:

sudo udevadm control --reload

Ha csatlakoztatva volt az eszköz, akkor húzzuk ki és csatlakoztassuk újra. Ezt követően az eszköz egyszerű felhasználó számára is elérhető. Ezután telepítsük az nfcpy modult:

pip3 install nfcpy

Ez a kód a kártya tipusát, azonosítóját és a rajta tárolt ndef tagokat olvassa ki.

#!/usr/bin/python
import nfc
clf = nfc.ContactlessFrontend()
#clf.open('usb:001:004') #usb port
clf.open('usb:04cc:2533') #reader id
tag = clf.connect(rdwr={'on-connect': lambda tag: False})
print(tag)
if tag.ndef != None:
    for record in tag.ndef.records:
        print(record)
clf.close()

Ez a kód pedig feltölti egy ndef rekorddal.

#!/usr/bin/python
import nfc
import ndef
clf = nfc.ContactlessFrontend()
#clf.open('usb:001:005')
clf.open('usb:04cc:2533')
print(clf)
tag = clf.connect(rdwr={'on-connect': lambda tag: False})
print(tag)
uri, title = 'http://nfcpy.org', 'nfcpy project'
tag.ndef.records = [ndef.SmartposterRecord(uri, title)]
clf.close()