Distinct Pi Zero 2 W units getting "combined" as a single zone

I have 2 separate Pi Zero 2 Ws with JustBoom HATs.

I have installed latest Ropieee on each and have them all set up. In the Roon audio settings they appear as two separate zones:

However, in the background, I have discovered that Roon appears to be assigning these two units a single GUID:

Screenshot 2022-11-18 at 7.11.11 PM

The upshot of this is that even though they appear in Settings-Audio as two different units, Roon frequently treats them as one. If I change the name of one, it propagates to the other.

And, in the zone selection menu, only one shows up.

This does not happen with any of my Pi4 units running Ropieee. Nor does it happen on the Pi 2 Zero W units if I am running DietPi with RoonBridge. This only happens when running RopIeee (and has for several versions).

I have blown away my Roon DB to ensure that no sort of GUID or MAC is getting cached somewhere.

I would love to run Ropieee on these units (so that I can manage everything consistently), but having them always “combine” into a single unit is problematic.

I’d suggest sending feedback on both units, in case Harry has time to check the logs. Go to Advanced —> Send Feedback and post the identifiers here.

I’d be curious to try renaming the units without the hyphen, in case there is some regex replacement bug. camelCase might work well as a test (reboot everything).

You could try running RoPieeeXL on one of them, although, I’m not sure it will run on a Pi Zero.

Feedback IDs:


And a couple of additional notes:

  1. Both units are running XL, but I’ve had the same issue in the past with regular Ropieee

  2. I will try removing the hyphen, but I have three other Pi4s that have hyphenated names, and they do not exhibit this behavior,

I have no reason to suspect that this would be an issue, but looking for any possibility.

A couple of updates:

  1. Removing hyphen from name doesn’t have any impact (but thanks, @Nathan_Wilkes, for the suggestion…always important to eliminate possibilities!)

  2. I looked a little closer at the Roon logs, and it looks like each PiZero2W unit is getting assigned the same uniqueID (see excerpt from logs below)

Only a remote possibility.

I presume you changed both the Roon Control Zone name and the pi name?

Try changing the host name of one of them and see if it helps. Did you install seperatly or did you clone the card to another.

Swapped the SD cards back to DietPi, and each device gets its own unique ID.

Installed Ropieee XL separately from scratch on each SD card…no cloning.

A year or two back I had a similar problem with Ropieee and pi3/4s

I reflashed both SDcards, and the problem solved itself.

Did a little more testing. Reflashed SD cards, changed hostname, experimented with wired vs. wireless connections.

I have discovered that if (via the Ropieee web interface) I set one of the PiZero units to a different Audio HAT (I just picked a HiFiBerry one at random), it will register in Roon as a distinct unit, and I can manage it as expected. The problem occurs when I set both units to use the same HAT type (JustBoom Amp HAT/DAC HAT); once I do that, Roon starts to treat them as a “single” zone again.

@spockfish, do you have any thoughts/advice? Have you seen something like this before?

Basically that’s not possible (but I’ve seen in it in your logs)… assuming the following:

  • you have flashed both units separately and did nothing of sorts like copying SD cards or anything
  • both units have different hostnames

Assuming the above is the case, the only thing I can imagine that the device database on the Roon side is confused somehow… I’m not sure how to fix that, except trying to delete the zone’s and configure them again.


Can confirm that each card was flashed seperately (no cloning) using Balena Etcher, and both devices have different hostnames.

So very strange as picking a different HAT type will prompt Roon to create a new device entry as expected. Maybe I’ll post on the general Roon support forum to see if anyone has any thoughts (although, since this only appears to happen with Ropieee, I’m not sure how much the Roon technical team will investigate…)

I believe I may have the exact same issue. I have 2 Raspberry Pi 2 with IQaudIO Pi-DAC+. I re-flashed one today (mistakenly updated to latest Ropieee as I wasn’t aware rPi2 is no longer supported). Once configured and online, both devices show but behave as if they were one.

From the log, one device registers:

11/29 16:09:52 Trace: [raatserver] [RaatServer ropieee-living @] connected
11/29 16:09:52 Trace: [rnet/RnetJsonClient] SENT {"request":"enumerate_devices","subscription_id":"0"}
11/29 16:09:52 Trace: [rnet/RnetJsonClient] GOT NONFINAL {"status": "Success", "devices": [{"device_id": "hw:CARD=IQaudIODAC,DEV=0", "config": {"external_config": {"resync_delay": 0.050000000000000003, "product_override": "59"}, "volume": null, "unique_id": "1abf6425-d277-b9a9-e834-f5bfd5bf6b67", "output": {"type": "alsa", "dsd_mode": "none", "name": "IQaudIODAC", "device": "hw:CARD=IQaudIODAC,DEV=0"}}, "type": "alsa", "name": "IQaudIODAC"}]}
11/29 16:09:52 Info: [raatserver] GOT DEVICE 2d3e461e-8e89-4fd3-a34e-47cd341290ea::hw:CARD=IQaudIODAC,DEV=0 Type=alsa Name=IQaudIODAC
11/29 16:09:52 Trace: [rnet/RnetJsonClient] SENT {"request":"enable_device","device_id":"hw:CARD=IQaudIODAC,DEV=0","subscription_id":"3"}
11/29 16:09:52 Trace: [rnet/RnetJsonClient] GOT NONFINAL {"device": {"device_id": "hw:CARD=IQaudIODAC,DEV=0", "config": {"external_config": {"resync_delay": 0.050000000000000003, "product_override": "59"}, "volume": null, "unique_id": "1abf6425-d277-b9a9-e834-f5bfd5bf6b67", "output": {"type": "alsa", "dsd_mode": "none", "name": "IQaudIODAC", "device": "hw:CARD=IQaudIODAC,DEV=0"}}, "type": "alsa", "name": "IQaudIODAC", "discovery_data": {"tcp_port": 42797, "unique_id": "1abf6425-d277-b9a9-e834-f5bfd5bf6b67", "protocol_version": "3", "raat_version": "1.1.38", "vendor": "N/A", "version": "N/A", "model": "N/A"}}, "status": "DeviceChanged"}
11/29 16:09:52 Info: [raatserver] [IQaudIODAC] connecting (attempt 1)

and then the next registers:

11/29 16:10:54 Trace: [raatserver] [RaatServer ropieee-office @] connected
11/29 16:10:54 Trace: [rnet/RnetJsonClient] SENT {"request":"enumerate_devices","subscription_id":"0"}
11/29 16:10:54 Trace: [rnet/RnetJsonClient] GOT NONFINAL {"status": "Success", "devices": [{"device_id": "hw:CARD=IQaudIODAC,DEV=0", "name": "IQaudIODAC", "type": "alsa", "config": {"volume": {"type": "alsa", "device": "hw:CARD=IQaudIODAC,DEV=0"}, "unique_id": "1abf6425-d277-b9a9-e834-f5bfd5bf6b67", "output": {"name": "IQaudIODAC", "type": "alsa", "device": "hw:CARD=IQaudIODAC,DEV=0", "dsd_mode": "none"}, "external_config": {"product_override": null, "resync_delay": 0.050000000000000003}}}]}
11/29 16:10:54 Info: [raatserver] GOT DEVICE 2de920a9-208a-468a-a00c-dbbe8948e019::hw:CARD=IQaudIODAC,DEV=0 Type=alsa Name=IQaudIODAC
11/29 16:10:54 Trace: [rnet/RnetJsonClient] SENT {"request":"enable_device","device_id":"hw:CARD=IQaudIODAC,DEV=0","subscription_id":"4"}
11/29 16:10:54 Info: [transport] destroyed zone Living was playing? False
11/29 16:10:54 Trace: [zone Living] Suspend
11/29 16:10:54 Info: [zone Living] Canceling Pending Sleep
11/29 16:10:54 Info: [zone Living] Canceling Pending Sleep
11/29 16:10:54 Trace: [rnet/RnetJsonClient] GOT NONFINAL {"status": "DeviceChanged", "device": {"device_id": "hw:CARD=IQaudIODAC,DEV=0", "name": "IQaudIODAC", "type": "alsa", "discovery_data": {"model": "N/A", "tcp_port": 36093, "unique_id": "1abf6425-d277-b9a9-e834-f5bfd5bf6b67", "raat_version": "1.1.38", "protocol_version": "3", "version": "N/A", "vendor": "N/A"}, "config": {"volume": {"type": "alsa", "device": "hw:CARD=IQaudIODAC,DEV=0"}, "unique_id": "1abf6425-d277-b9a9-e834-f5bfd5bf6b67", "output": {"name": "IQaudIODAC", "type": "alsa", "device": "hw:CARD=IQaudIODAC,DEV=0", "dsd_mode": "none"}, "external_config": {"product_override": null, "resync_delay": 0.050000000000000003}}}}
11/29 16:10:54 Info: [raatserver] [IQaudIODAC] connecting (attempt 1)
11/29 16:10:54 Trace: [rnet/RnetJsonClient] GOT NONFINAL {"status": "Success"}
11/29 16:10:54 Trace: [IQaudIODAC] [raatclient] Initializing RAAT session
11/29 16:10:54 Trace: [IQaudIODAC] [raatclient] Loading script raat.dat:base.lua as module base [1088 chars]
11/29 16:10:54 Trace: [IQaudIODAC] [raatclient] Loading script raat.dat:dkjson.lua as module dkjson [22416 chars]
11/29 16:10:54 Trace: [IQaudIODAC] [raatclient] Loading script raat.dat:protocol.lua as module protocol [2045 chars]
11/29 16:10:54 Trace: [IQaudIODAC] [raatclient] Loading script raat.dat:roon_tcp.lua [43548 chars]
11/29 16:10:54 Trace: [IQaudIODAC] [raatclient] RAAT Session initialized in 147ms
11/29 16:10:54 Trace: [IQaudIODAC] [raatclient] SENT [2]{"request":"info"}
11/29 16:10:54 Trace: [IQaudIODAC] [raatclient] SENT [3]{"request":"set_client_type","client_type":"Roon"}
11/29 16:10:54 Trace: [IQaudIODAC] [raatclient] GOT [2] {"info":{"unique_id":"1abf6425-d277-b9a9-e834-f5bfd5bf6b67"},"status":"Success","output":{"info":{"config":{"dsd_mode":"none","name":"IQaudIODAC","type":"alsa","device":"hw:CARD=IQaudIODAC,DEV=0"},"alsa_device":{"longname":"IQaudIODAC","mixername":"","components":"IQaudIODAC","driver":"IQaudIODAC","name":"IQaudIODAC","id":"IQaudIODAC"}},"supported_formats":"88200/32/1|2,192000/32/1|2,96000/16/1|2,48000/16/1|2,192000/16/1|2,352800/16/1|2,44100/24/1|2,88200/24/1|2,176400/32/1|2,192000/24/1|2,384000/32/1|2,96000/32/1|2,44100/16/1|2,352800/32/1|2,352800/24/1|2,384000/24/1|2,88200/16/1|2,48000/24/1|2,48000/32/1|2,384000/16/1|2,96000/24/1|2,176400/16/1|2,44100/32/1|2,176400/24/1|2"},"platform":{"os":"linux","uname":{"machine":"armv7l","version":"#1 SMP PREEMPT Mon Nov 1 14:29:22 CET 2021","sysname":"Linux","nodename":"ropieee-office","release":"5.10.76-1-SPCKFSH-v7+"}},"volume":{"is_supported":true,"info":{"config":{"type":"alsa","device":"hw:CARD=IQaudIODAC,DEV=0"}}},"flags":{"has_write_chmap":true},"transport":{"is_supported":false,"info":[]},"source_selection":{"is_supported":false,"info":[]}}
11/29 16:10:54 Trace: [raatserver] [IQaudIODAC] connected

In the Roon clients “About” screen they show clearly as different devices. In the Roon client “Audio” page they also show as individual devices, but if I change one name it changes the name on both.

Well, the logs show that the unique ID is exactly the same.

I think we need to ask @support how Roon Bridge creates this unique ID based on which parameters.