nfcpy: Как правильно получить событие при выпуске с NFCPY? - PullRequest
0 голосов
/ 28 февраля 2019

Я пытаюсь прослушивать разные RFID ID-карты с помощью ридера ACR122 и библиотеки Python nfcpy .

Я хотел бы иметь идентификатор карты при подключении пользователя (без распознаванияэто снова и снова) и получить событие, когда пользователь выпустит его.Идеально в цикле, для прослушивания следующей карты, когда пользователь забирает свою карту.

Ниже приведен мой код, но событие on-release запускается, даже если карта все еще находится в считывающем устройстве.Как правильно

  1. Получить on-connect без распознавания снова и снова?
  2. Получить on-release, когда пользователя карты нет?
    import nfc

    def on_startup(targets):
      return targets

    def on_connect(tag):
      uid = str(tag.identifier).encode("hex").upper()
      print(uid)
      return True

    def on_release(tag):
      print('Released')
      return tag

    rdwr_options = {
      'on-startup': on_startup,
      'on-connect': on_connect,
      'on-release': on_release,
      'beep-on-connect': False,
    }

    with nfc.ContactlessFrontend('usb') as clf:
      tag = clf.connect(rdwr=rdwr_options)

1 Ответ

0 голосов
/ 02 марта 2019

Возможно, вам потребуется установить интервал в вашей конфигурации ContactlessFrontend.Попробуйте этот пример:

import nfc
import ndef

tags = set()

rec = ndef.UriRecord("https://google.com")

def on_connect(tag):
    if tag.identifier not in tags:

        tags.add(tag.identifier)
        fmt = tag.format()

        if fmt is None:
            print("Tag cannot be formatted (not supported).")
        elif fmt is False:
            print("Tag failed to be formatted (for some reason).")
        else:
            tag.ndef.records = [rec]

if __name__ == "__main__":
    clf = nfc.ContactlessFrontend()
    if not clf.open('usb'):
        raise RuntimeError("Failed to open NFC device.")

    while True:
        config = {
            'interval': 0.35,
            'on-connect': on_connect
        }
        ret = clf.connect(rdwr=config)
        if ret is None:
            pass
        elif not ret:
            print ("NFC connection terminated due to an exception.")
            break
        else:
            pass
    clf.close()

https://gist.github.com/henrycjc/c1632b2d1f210ae0ff33d860c7c2eb8f

...