Volumio mit RFID/NFC-Reader

  • Hallo,


    ich habe seit einigen Monaten einen Volumio-Player.

    Das läuft ganz gut, könnte beim starten aber schneller sein.

    Früher hat man in den Platten/CD's gekramt, sich was raus gesucht, Booklet angeschaut und aufgelegt.

    Das fehlt mir heute irgendwie. Ich kann zwar in meiner Musiksammlung bequem suchen aber irgendwie ist das anders.

    Ich würde daher den Player gern um einen RFID-Leser erweitern, RFID-Karten bedrucken und Volumio darüber steuern.


    Habe mir einen USB-Leser von ACS besorgt. Passende Karten dazu habe ich auch.

    Wenn ich das auf Volumio richtig gesehen habe lässt sich der Player über die Rest-API steuern.

    So kann man den Player starten, stoppen und Playlisten auswählen.


    Nun komme ich jedoch nicht weiter.

    Hier gibt es unzählige Projekte wie Phoniebox die ähnliche Eigenschaften haben.

    Meine Hoffnung wäre das mich hier einige bei meinem Projekt unterstützen können.


    Zunächst habe ich alle möglichen Module, libnfc und tools installiert.


    Der Reader ist korrekt angeschlossen und wird auch erkannt:

    volumio@volumio-test:~$ lsusb

    Bus 001 Device 004: ID 072f:2200 Advanced Card Systems, Ltd


    nfc-list kann aber nicht auf den Reader zugreifen:

    volumio@volumio-test:~$ sudo nfc-list

    nfc-list uses libnfc 1.7.0-rc7

    error libnfc.driver.acr122_usb Unable to set alternate setting on USB i nterface (Connection timed out)

    nfc-list: ERROR: Unable to open NFC device: acr122_usb:001:004

    Hier habe ich alles mögliche probiert und nfc, pn533 & pn533_usb auf die Blacklist gesetzt.

    Diese Module werden auch nicht geladen:

    volumio@volumio-test:~$ lsmod

    Module Size Used by

    arc4 16384 0

    md4 16384 0

    md5 16384 1

    nls_utf8 16384 1

    cifs 606208 2

    ccm 20480 0

    bnep 20480 2

    hci_uart 40960 1

    btbcm 16384 1 hci_uart

    serdev 20480 1 hci_uart

    bluetooth 389120 22 hci_uart,bnep,btbcm

    xt_REDIRECT 16384 1

    xt_tcpudp 16384 1

    iptable_nat 16384 1

    nf_nat_ipv4 16384 1 iptable_nat

    nf_nat 36864 2 nf_nat_ipv4,xt_REDIRECT

    nf_conntrack 135168 3 nf_nat_ipv4,xt_REDIRECT,nf_nat

    ecdh_generic 28672 1 bluetooth

    nf_defrag_ipv6 20480 1 nf_conntrack

    nf_defrag_ipv4 16384 1 nf_conntrack

    ip_tables 24576 1 iptable_nat

    x_tables 32768 3 ip_tables,xt_tcpudp,xt_REDIRECT

    nfsd 319488 2

    brcmfmac 315392 0

    brcmutil 16384 1 brcmfmac

    cfg80211 651264 1 brcmfmac

    snd_bcm2835 24576 1

    snd_pcm 102400 1 snd_bcm2835

    rfkill 28672 4 bluetooth,cfg80211

    snd_seq 69632 0

    snd_seq_device 16384 1 snd_seq

    snd_timer 32768 2 snd_seq,snd_pcm

    bcm2835_v4l2 45056 0

    bcm2835_codec 36864 0

    v4l2_mem2mem 24576 1 bcm2835_codec

    v4l2_common 16384 1 bcm2835_v4l2

    bcm2835_mmal_vchiq 32768 2 bcm2835_codec,bcm2835_v4l2

    videobuf2_dma_contig 20480 1 bcm2835_codec

    videobuf2_vmalloc 16384 1 bcm2835_v4l2

    videobuf2_memops 16384 2 videobuf2_dma_contig,videobuf2_vmalloc

    videobuf2_v4l2 24576 3 bcm2835_codec,bcm2835_v4l2,v4l2_mem2mem

    raspberrypi_hwmon 16384 0

    hwmon 16384 1 raspberrypi_hwmon

    videobuf2_common 45056 4 bcm2835_codec,bcm2835_v4l2,v4l2_mem2mem,videobuf2_v4l2

    videodev 200704 6 bcm2835_codec,v4l2_common,videobuf2_common,bcm2835_v4l2,v4l2_mem2mem,videobuf2_v4l2

    snd 73728 7 snd_seq,snd_timer,snd_seq_device,snd_bcm2835,snd_pcm

    media 36864 3 bcm2835_codec,videodev,v4l2_mem2mem

    i2c_bcm2835 16384 0

    vc_sm_cma 36864 1 bcm2835_mmal_vchiq

    fixed 16384 0

    uio_pdrv_genirq 16384 0

    uio 20480 1 uio_pdrv_genirq

    i2c_dev 20480 0

    ipv6 454656 70

    fuse 110592 1

    squashfs 45056 1

    overlay 106496 1


    Ich will pcscd automatisch mit starten, scheint auch so eingetragen zu sein:

    volumio@volumio-test:~$ systemctl is-enabled pcscd

    static

    Aber, der Dienst läuft nicht:

    volumio@volumio-test:~$ systemctl status pcscd -l

    ● pcscd.service - PC/SC Smart Card Daemon

    Loaded: loaded (/lib/systemd/system/pcscd.service; static)

    Active: inactive (dead)

    Am Reader tut sich auch nichts. LED bleibt dunkel und wenn ich eine Karte auflege beept auch nichts.

    Wenn ich pcscd allerdings neu starte leuchtet der Reader rot. Lege ich eine Karte auf beept es und die LED leuchtet grün.


    volumio@volumio-test:~$ sudo service pcscd restart

    volumio@volumio-test:~$ systemctl status pcscd -l


    ● pcscd.service - PC/SC Smart Card Daemon

    Loaded: loaded (/lib/systemd/system/pcscd.service; static)

    Active: active (running) since Tue 2020-12-22 13:18:29 UTC; 11s ago

    Main PID: 1496 (pcscd)

    CGroup: /system.slice/pcscd.service

    └─1496 /usr/sbin/pcscd --foreground --auto-exit

    Dec 22 13:18:29 volumio-test systemd[1]: Started PC/SC Smart Card Daemon.

    Dec 22 13:18:30 volumio-test pcscd[1496]: 00000000 ccid_usb.c:798:ReadUSB() read failed (1/4): -7 Resource temporarily unavailable


    Kann mir hier jemand einen Tip geben wie ich hier weiter komme?

    Grundsätzlich scheint ja der Reader zu funktionieren.

    Der Zugriff scheint jedoch blockiert zu sein.

    Interessant ist auch warum der Dienst nicht sauber anläuft.


    Karba

  • Hallo,


    ich habe das nun nochmal mit einem nackten Raspbian (Buster) getestet.

    Im Prinzip gleiches Ergebnis.


    pi@raspberrypi:~ $ sudo systemctl status pcscd

    ● pcscd.service - PC/SC Smart Card Daemon

    Loaded: loaded (/lib/systemd/system/pcscd.service; indirect; vendor preset: enabled)

    Active: active (running) since Wed 2020-12-23 22:40:47 GMT; 3min 5s ago

    Docs: man:pcscd(8)

    Main PID: 645 (pcscd)

    Tasks: 3 (limit: 2063)

    CGroup: /system.slice/pcscd.service

    └─645 /usr/sbin/pcscd --foreground --auto-exit


    Dec 23 22:40:47 raspberrypi systemd[1]: Started PC/SC Smart Card Daemon.

    Dec 23 22:40:47 raspberrypi pcscd[645]: 00000000 ccid_usb.c:898:ReadUSB() read failed (1/4): -7 LIBUSB_ERROR_TIMEOUT

    Dec 23 22:40:47 raspberrypi pcscd[645]: 00158726 ccid_usb.c:898:ReadUSB() read failed (1/4): -7 LIBUSB_ERROR_TIMEOUT

    Dec 23 22:40:47 raspberrypi pcscd[645]: 00000978 ifdhandler.c:194:CreateChannelByNameOrChannel() failed

    Dec 23 22:40:47 raspberrypi pcscd[645]: 00001444 readerfactory.c:1106:RFInitializeReader() Open Port 0x200000 Failed (usb:072f/2200:libudev:0:/dev/bus/usb/00

    Dec 23 22:40:47 raspberrypi pcscd[645]: 00000756 readerfactory.c:376:RFAddReader() ACS ACR122U PICC Interface init failed.

    Dec 23 22:40:47 raspberrypi pcscd[645]: 00000904 hotplug_libudev.c:523:HPAddDevice() Failed adding USB device: ACS ACR122U PICC Interface


    pi@raspberrypi:~ $ sudo nfc-list

    nfc-list uses libnfc 1.7.1

    error libnfc.driver.acr122_usb Unable to set alternate setting on USB interface (Connection timed out)

    nfc-list: ERROR: Unable to open NFC device: acr122_usb:001:004


    Irgendwas scheint den Zugriff auf den Reader zu blockiern.

  • Hallo Hoschi,


    Stromversorgung sollte kein Problem sein.

    Der Player hat ein 12V/6A-Netzteil mit einem nachgeschalteten Linearregler eingestellt auf 5,1V.

    Da hängt der RPi3B+ mit dem 7"-LCD und einem HiFiBerry-DAC dran.

    Den Versuch gestern habe ich mit einem nackten RPi3B+ gemacht, der hing am USB-Ausgang von meinem Laptop.


    Ich arbeite mit einem RPi3B+.


    Das Volumio-Image beruht auf Jessie, ich habe das aber auch mit Buster getestet.

    Gleiches Verhalten.


    Im ersten Schritt wäre ich ja glücklich wenn der RFID-Reader sauber erkannt und meine Karten lesen würde.

    • Official Post

    mit einem nachgeschalteten Linearregler eingestellt auf 5,1V

    Wieviel Strom lässt dieser bei den 5.1V durch? Bleiben die 5.1V auch unter Last stabil?


    Da hängt der RPi3B+ mit dem 7"-LCD und einem HiFiBerry-DAC dran.

    Das ist schon ganz schön fett! ... und dann noch der Reader.

    Den Versuch gestern habe ich mit einem nackten RPi3B+ gemacht, der hing am USB-Ausgang von meinem Laptop.

    Das war definitiv zu wenig Futter für den RPi.

  • Hallo,


    hab ich vorhin nachgemessen: 5,05V wenn Volumio läuft, d.h. mit Display an und Soundausgabe.

    Ich denke das passt.

    Am Laptop könnte das tatsächlich schwierig sein. Da muss ich mal was umbauen.


    Komisch ist halt das der Reader ja grundsätzlich funktioniert, so wie wenn ich ihn direkt am PC anstecke.

    D.h. ohne Karte leuchtet er rot, Karte drauf, es beept und dann leuchtet er grün. Karte runter und er ist wieder rot.

    Nur, am PC kann ich halt die Daten von der Karte sehen. Am Raspi kann ich nicht auf den Reader zugreifen.

    • Official Post

    Wieviel Strom lässt dieser bei den 5.1V durch?

    Diese Frage bleibt noch offen. Da hängt eine ganze Menge stromhungriges Zeugs am RPi. Wenn der Stepdown zu wenig Strom durchlässt, dann wird es an irgendeiner Stelle evtl. eng. Deshalb meine Frage. ;)

  • Die Spannungsversorgung an dem Player schließe ich aus.

    Bei aller Liebe - 70W verbrät das nicht. Das ist ein RPi3B+, ein 7"-LCD und ein NFC-Reader.

    Das Schaltnetzteil ist nicht mal handwarm, der Linearregler ist auf einem relativ großen Blech aufgeschraubt und ist auch nicht nennenswert warm. Im Betrieb sehen ich einen Abfall der Spannung von 5,1V auf 5,05V.

    Und selbst wenn der Reader Karten liest und dabei die LED ein/umschaltet und dazu beept steht die Spannung.

    Die rote LED leuchtet dauerhaft, auf dem Display ist auch kein Blitz zu sehen.

    Die Spannungversorgung ist ausgelegt um damit auch noch einen Amp zu versorgen.


    Irgendwas scheint den Zugriff auf den Reader zu blockieren.

    Wie kann man rausbekommen was das sein könnte.

  • Irgendwas scheint den Zugriff auf den Reader zu blockieren.

    Da ich pcsc nicht kenne, hab ich mal etwas herumgesucht. Wie genau hast Du denn das installiert?


    Bringt pcscd -daf eine Ausgabe zustande?

  • Hallo,


    ich habe mich grob an diese Anleitung gehalten: ACR122U NFC USB reader on a Raspberry Pi - One Guy, One Blog


    sudo apt-get update

    <br>

    sudo apt-get -y install subversion autoconf debhelper flex libusb-dev libccid pcscd pcsc-tools libtool libssl-dev cmake checkinstall


    sudo apt-get install libnfc-bin


    pcscd -daf liefert:



    root@volumio:/# pcscd -daf

    00000000 pcscdaemon.c:263:main() pcscd set to foreground with debug send to stdout

    00000289 configfile.l:283:DBGetReaderListDir() Parsing conf directory: /etc/reader.conf.d

    00000064 configfile.l:317:DBGetReaderListDir() Skipping non regular file: ..

    00000013 configfile.l:317:DBGetReaderListDir() Skipping non regular file: .

    00000017 configfile.l:355:DBGetReaderList() Parsing conf file: /etc/reader.conf.d/libccidtwin

    00000134 pcscdaemon.c:569:main() pcsc-lite 1.8.13 daemon ready.

    00004255 hotplug_libudev.c:296:get_driver() Looking for a driver for VID: 0x1D6B, PID: 0x0002, path: /dev /bus/usb/001/001

    00000313 hotplug_libudev.c:296:get_driver() Looking for a driver for VID: 0x1D6B, PID: 0x0002, path: /dev /bus/usb/001/001

    00000284 hotplug_libudev.c:296:get_driver() Looking for a driver for VID: 0x0424, PID: 0x2514, path: /dev /bus/usb/001/002

    00000297 hotplug_libudev.c:296:get_driver() Looking for a driver for VID: 0x0424, PID: 0x2514, path: /dev /bus/usb/001/003

    00000300 hotplug_libudev.c:296:get_driver() Looking for a driver for VID: 0x0424, PID: 0x7800, path: /dev /bus/usb/001/005

    00000283 hotplug_libudev.c:296:get_driver() Looking for a driver for VID: 0x0424, PID: 0x2514, path: /dev /bus/usb/001/003

    00000267 hotplug_libudev.c:296:get_driver() Looking for a driver for VID: 0x0424, PID: 0x2514, path: /dev /bus/usb/001/002

    00000259 hotplug_libudev.c:296:get_driver() Looking for a driver for VID: 0x072F, PID: 0x2200, path: /dev /bus/usb/001/004

    00000033 hotplug_libudev.c:435:HPAddDevice() Adding USB device: ACS ACR122U PICC Interface

    00000114 readerfactory.c:1012:RFInitializeReader() Attempting startup of ACS ACR122U PICC Interface 00 00 using /usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Linux/libccid.so

    00000572 readerfactory.c:897:RFBindFunctions() Loading IFD Handler 3.0

    00000103 ifdhandler.c:1927:init_driver() Driver version: 1.4.18

    00001925 ifdhandler.c:1944:init_driver() LogLevel: 0x0003

    00000039 ifdhandler.c:1955:init_driver() DriverOptions: 0x0000

    00000323 ifdhandler.c:96:CreateChannelByNameOrChannel() Lun: 0, device: usb:072f/2200:libudev:0:/dev/bus/ usb/001/004

    00000051 ccid_usb.c:284:OpenUSBByName() Using: /usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Info.plist

    00001897 ccid_usb.c:302:OpenUSBByName() ifdManufacturerString: Ludovic Rousseau (ludovic.rousseau@free.fr )

    00000037 ccid_usb.c:303:OpenUSBByName() ifdProductString: Generic CCID driver

    00000015 ccid_usb.c:304:OpenUSBByName() Copyright: This driver is protected by terms of the GNU Lesser Ge neral Public License version 2.1, or (at your option) any later version.

    00095099 ccid_usb.c:596:OpenUSBByName() Found Vendor/Product: 072F/2200 (ACS ACR122U PICC Interface)

    00000031 ccid_usb.c:598:OpenUSBByName() Using USB bus/device: 1/4

    00000014 ccid_usb.c:650:OpenUSBByName() bNumDataRatesSupported is 0

    00087864 ifdhandler.c:375:IFDHGetCapabilities() tag: 0xFB3, usb:072f/2200:libudev:0:/dev/bus/usb/001/004 (lun: 0)

    00000035 readerfactory.c:355:RFAddReader() Using the reader polling thread

    00001037 ifdhandler.c:1139:IFDHPowerICC() action: PowerUp, usb:072f/2200:libudev:0:/dev/bus/usb/001/004 ( lun: 0)

    00000282 eventhandler.c:289:EHStatusHandlerThread() powerState: POWER_STATE_POWERED

    00000012 ifdhandler.c:375:IFDHGetCapabilities() tag: 0xFAE, usb:072f/2200:libudev:0:/dev/bus/usb/001/004 (lun: 0)

    00000016 ifdhandler.c:463:IFDHGetCapabilities() Reader supports 1 slot(s)

    00000047 Card ATR: 3B 8F 80 01 80 4F 0C A0 00 00 03 06 03 00 01 00 00 00 00 6A

    00000482 hotplug_libudev.c:296:get_driver() Looking for a driver for VID: 0x0424, PID: 0x2514, path: /dev /bus/usb/001/002

    05000404 ifdhandler.c:1139:IFDHPowerICC() action: PowerDown, usb:072f/2200:libudev:0:/dev/bus/usb/001/004 (lun: 0)

    00000377 eventhandler.c:478:EHStatusHandlerThread() powerState: POWER_STATE_UNPOWERED

    ^C99999999 pcscdaemon.c:750:signal_trap() Received signal: 2

    00000038 pcscdaemon.c:769:signal_trap() Preparing for suicide

    00000829 hotplug_libudev.c:676:HPStopHotPluggables() Hotplug stopped

    01000116 readerfactory.c:1296:RFCleanupReaders() entering cleaning function

    00000035 readerfactory.c:1305:RFCleanupReaders() Stopping reader: ACS ACR122U PICC Interface 00 00

    00000034 readerfactory.c:558:RFRemoveReader() UnrefReader() count was: 1

    00000015 eventhandler.c:179:EHDestroyEventHandler() Stomping thread.

    00000017 ifdhandler.c:375:IFDHGetCapabilities() tag: 0xFB1, usb:072f/2200:libudev:0:/dev/bus/usb/001/004 (lun: 0)

    00000015 ifdhandler.c:375:IFDHGetCapabilities() tag: 0xFB2, usb:072f/2200:libudev:0:/dev/bus/usb/001/004 (lun: 0)

    00000013 eventhandler.c:204:EHDestroyEventHandler() Request stopping of polling thread

    00000014 ifdhandler.c:340:IFDHStopPolling() usb:072f/2200:libudev:0:/dev/bus/usb/001/004 (lun: 0)

    00400339 eventhandler.c:501:EHStatusHandlerThread() Die

    00000164 eventhandler.c:219:EHDestroyEventHandler() Thread stomped.

    00000018 readerfactory.c:1063:RFUnInitializeReader() Attempting shutdown of ACS ACR122U PICC Interface 00 00.

    00000026 ifdhandler.c:266:IFDHCloseChannel() usb:072f/2200:libudev:0:/dev/bus/usb/001/004 (lun: 0)

    00000547 ccid_usb.c:191:close_libusb_if_needed() libusb_exit

    00000299 readerfactory.c:934:RFUnloadReader() Unloading reader driver.

    00000148 winscard_svc.c:154:ContextsDeinitialize() remaining threads: 0

    00000017 pcscdaemon.c:694:at_exit() cleaning /var/run/pcscd

    root@volumio:/#

  • Hallo,


    ich bin einen Schritt weiter gekommen!


    Der von mir genutzte Reader scheint echt nicht die beste Wahl zu sein.

    Mit der libnfc-1.7.x konnte ich ja nicht richtig auf das Teil zugreifen.

    Mit Version 1.8.0 ging das schon besser, es kam allerdings der nächste Fehler.

    Da gab es dann noch eine gepatchte Version.

    Damit funktioniert zumindest nfc-list und nfc-poll:


    Volumio Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent

    permitted by applicable law.

    volumio@volumio:~$ sudo nfc-list

    [sudo] password for volumio:

    NFC device: ACS / ACR122U PICC Interface opened

    1 ISO14443A passive target(s) found:

    ISO/IEC 14443A (106 kbps) target:

    ATQA (SENS_RES): 00 04

    UID (NFCID1): b3 e0 4d 40

    SAK (SEL_RES): 08


    volumio@volumio:~$ nfc-poll

    nfc-poll uses libnfc libnfc-1.8.0-42-g27e26d8

    NFC reader: ACS / ACR122U PICC Interface opened

    NFC device will poll during 36000 ms (20 pollings of 300 ms for 6 modulations)

    ISO/IEC 14443A (106 kbps) target:

    ATQA (SENS_RES): 00 04

    UID (NFCID1): b3 e0 4d 40

    SAK (SEL_RES): 08

    Waiting for card removing...nfc_initiator_target_is_present: Target Released

    done.

    volumio@volumio:~$

  • Hallo allerseits,

    Ich wäre über eine Integration dieser Funktion auch sehr begeistert!


    Letztlich gibt es das funktionierend schon in der open-source Software phoniebox.de, die allerdings einen anderen Schwerpunkt hat.


    Ist eine/r von euch in der Lage, den RFID-Part (Installation und Integration ins WebIF) rüberzubringen?

    Gruß