RFID Reader + Tidal Connect (URIs) on Volumio

In pursuit of “better” methods to play music I was wondering if anyone has been successful getting an RFID card reader to play Tidal URIs (albums/playlists) on a Volumio RPi?

My current setup is using Phoniebox + Mopidy + Mopidy-Tidal to allow playback of Tidal URIs assigned to a RFID tag. I then use SNAPCAST send the sound to my Monoprice whole house 6-zone amp for distribution to the house. This has been relative stable minus frustrations with daily PN532 reader issues due what seems to be I2C issues requiring power-cycling the RPi to resolve sometimes - other times not. I have also attempted to use a RC522 over SPI but couldn’t get Phoniebox to recognize the reader (although I have a script that is able to read the RFID tag so it’s connected to the RPi correctly - I think issue is I’m on Bookworm vs. Buster). I’ve ordered a USB RFID reader to maybe eliminate the RFID issues (will know next week how that goes).

While this setup works I feel a cleaner solution would be leverage Volumio’s Tidal Connect architecture (plus ability to cast via Volumio to Airplay/Google Cast devices w/o SNAPCAST involved).

I found fywk’s Github project (GitHub - fywk/rfid-volumio: Control Volumio on Raspberry Pi via RFID) that seemed promising but limited to Spotify and MPD sources. From what I can tell Tidal isn’t a supported music source. I’ve opened up an issue (question) to see if Tidal URIs are/could be supported.

I’m not a coder so looking at the Tidal API docs and such is like a infant trying to understand physics.

There are many Volumio Spotify and webradio solutions out there but I just can’t find a Volumio Tidal one.

Thanks

I’ve been doing some hacking via SSH and CURL commands. I have been able to get a webradio to play via the following curl:

curl -i --header "Content-Type: application/json" pihome:3000/api/v1/replaceAndPlay --data '{"service": "webradio", "type": "webradio", "title": "Nova%20La%20Nuit", "uri": "http://nova-ln.ice.infomaniak.ch/nova-ln-128", "albumart": "https://www.nova.fr/sites/default/files/2020-06/Nova%20la%20Nuit_1.jpg"}'

But haven’t been successful in getting a Tidal album to play. I’m using the following curl command:

curl -i --header "Content-Type: application/json" pihome:3000/api/v1/replaceAndPlay --data '{"status":"play","position":0,"title":"The Seventh Seal","artist":"Van Halen","album":"Balance","uri":"uri":"tidal:album:6442652","trackType":"tidal","stream":false,"updatedb":false,"volatile":false,"service":"tidalconnect"}'

The URI is grabbed from Mopidy. The dev log shows the following after I issue that command. It appears to add the album to the queue (see boldfaced text), but the doesn’t play (even with the “toggle” or “play” curl statements, nor does it show up in the Volumio GUI as being in the queue). Has anyone been successful in getting an album queued and playing via SSH in the Volumio.local terminal?

info: CoreCommandRouter::volumioReplaceandPlayItems
info: CoreStateMachine::ClearQueue
info: CoreStateMachine::stop
info: CoreStateMachine::setConsumeUpdateService undefined
info: CorePlayQueue::clearPlayQueue
info: CorePlayQueue::saveQueue
info: CoreCommandRouter::volumioPushQueue
info: CoreStateMachine::addQueueItems
info: CorePlayQueue::addQueueItems
info: Preload queue cleared
**info: Adding Item to queue: tidal:album:6442652**
**info: Exploding uri tidal:album:6442652 in service tidalconnect**
info: CoreCommandRouter::volumioPushQueue
info: CorePlayQueue::saveQueue
info: CoreStateMachine::updateTrackBlock
info: CorePlayQueue::getTrackBlock
info: CoreCommandRouter::volumioPlay
info: CoreStateMachine::play index 0
info: CoreStateMachine::setConsumeUpdateService undefined
**info: CoreStateMachine::stop**
info: CoreStateMachine::setConsumeUpdateService undefined
info: CoreStateMachine::play index undefined
info: CoreStateMachine::setConsumeUpdateService undefined
info: CorePlayQueue::getTrack 0
info: CoreStateMachine::startPlaybackTimer
info: CorePlayQueue::getTrack 0
info: CoreCommandRouter::volumioGetVisibleSources
info: CoreCommandRouter::executeOnPlugin: my_music , getDisabledSources
info: CoreCommandRouter::executeOnPlugin: mpd , getMyCollectionStatsObject

Also I don’t understand if those CoreStateMachine::setConsumeUpdateService undefined messages are an issue.

If I could get the Tidal album added via curl it would get me 1 step closer to trying to bash together some code from GITHUB/RFID reader projects, but I’m stuck with what should be a simple task.

Thanks.

I was finally able to successfully come up with a solution for using RFID tags to play Tidal (subscription) albums via Volumio (Premium subscription) using Grok. It’s written in Python. Hopefully this will help others would like to have similar functionality.

Requires a USB RFID reader and RFID tags. There are only 2 files needed - 1) the python code and 2) the rfid_lookup.csv file.

https://github.com/funetn/Volumio-Tidal-RFID-Playback/tree/main

I’ve uploaded a completely revised and improved (IMO) of the RFID Volumio-Tidal system. Here’s the Github link. Hopefully it will be beneficial to others trying to accomplish what I wanted to have.

Githib Project LInk

(update: 2026/04/21: Added a Waveshare 11.9: DSI setup guide in the docs section - that was challenging for me to get running but finally successful and meters look great on the 11.9" monitor)

I leaned heavily on multiple AI assistants to get this dialed in but I’ve been satisfied with the performance of it.

Much gratitude to those who pioneered these types of systems to inspire me to attempt at my own configuration. It’s been a labor of love for the past 5+ months.

My last shameless plug for this project Github link. Github project updated today with what I consider my last production iteration. Seems stable with testing yesterday and all day today. Testing scenarios have passed with expected behavior. There is a chance that Volumio/Tidal will hiccup with on their side and cause issues with play-back but those are very few and far between (without some type of monitoring of the actual music playing not sure how to capture that issue in the code, along with Tidal changing the URI number of albums already in the CSV mapping file). But I’m happy with how things are working. Switching to a “microservices” architecture really improved the stability and operation of the system between the difference scenarios. Hope it helps someone else build a system they can enjoy. Thanks to the community for their inspiration for this project. It’s been a journey to get here. Take care.

1 Like