Life and work got in the way of replying to my post in August.
I built my own ZR6 serial cable using a 3.5mm stereo cable and a female DB9 connector.
The pinout is:
3.5 mm tip to DB9-2
3.5 mm ring to DB9-3
3.5 mm shield to DB9-5
I use the iTach Ethernet to Serial Adapter which has a male DB9. I then use the MacOS tools available through a 3rd party link on the Global Cache site for debugging. The Windows tools provide the same functionality. iTest allows me to connect to the iTach and monitor the transactions between Roomie and the ZR6. I can also manually send ZR6 commands to query status and change settings though iTest. The serial command list is in the ZR6 manual as is the proper serial configuration settings.
At present I have multiple zones controlled via serial commands through Roomie. I also have a Party (ALl Zones) "room" where I can turn on all zones configured in the ZR6 as party zones. I haven't finished working on all input sources (wiring and programming).
But for example, I use an Airport Express as ZR6 Source 4, and in my rooms I have an iTunes activity that commands the ZR6 to select Source 4 for that zone, and then Roomie displays the iTunes remote, which controls iTunes that is running on a Mac Mini and is streaming to the Airport Express.
One thing I haven't figured out is how to control volume in this "Room". That's because the All Zones command set in the ZR6 is limited to Input selection and Power On/Off. The other zones have full control of volume, keypad entry, etc. I suspect that I need use the volume commands for one of the zones I've configured in Party mode in the plist for All Zones "room". In other words, once I've enabled Party Mode, all other commands would be routed to zone 1 (which is in my list of party zones). So my existing RoomCodes.plist will probably evolve to include these additional commands once I have time to work on my audio project.
One thing that Roomie doesn't currently support is parsing the feedback available via the serial link. The ZR6 supports selecting a zone and then requesting the status for the currently-selected zone, and the response includes multiple fields:
- selected source (1-6)
- whether the zone is on or off
- the zone volume level
- the mute status
- bass level
- treble level
I have another outstanding task to provide this information to Roomie tech support so they can add parsing of this format to Roomie to support volume and mute feedback, for example. So I include it below.
You basically use a command to select the current zone, and then send another command to retrieve its status. The ZR6 responds to every command, so Roomie would have to ignore responses for the majority of serial commands, except for the status request. In addition, the ZR6 outputs status on boot, so Roomie would also have to skip over any strings it doesn't recognize.
The format from the ZR6 manual is:
1) Making a zone the active control zone - Select the zone to receive commands
Syntax:
znc,4,[zone #][cr]
znc, indicates the command type (zone command)
4, indicates an active zone change
[zone #] is the number of the zone to become active (1-18)
[cr] is a carriage return
EXAMPLE :
Command: znc,4,2[cr] (make zone 2 the active zone)
ZR-6 Response: nc,4,2[cr] (confirmation that Zone 2 is now the active zone)
rznc, identifies a response to a zone command
4, identifies an active zone change
2 the number of the current active zone
[cr] carriage return
You then send the request for the status of the zone you just selected:
2) Request zone status – provides status of all active zone parameters
Syntax: znc,5,[cr]
znc, indicates the command type (zone command)
5 indicates an active zone status request
[cr] is a carriage return
EXAMPLE :
Command: znc,5,[cr] (request status information for the active zone)
ZR-6 Response: usc,2,2,3,1,14,0,0,0[cr] (status of the active zone)
usc, identifies a response to a status request
2, identifies the response as an answer to a statusrequest
2, is the number of the current active zone for which status is provided
3, number of the currently selected source (1-6) in the active zone
1, On/Off status of the active zone (1=On, 0=Off)
14, active zone volume level (0-99)
0, active zone mute status (1=muted, 0=unmuted)
0, active zone bass level (-7 to +7)
0 active zone treble level (-7 to +7)
[cr] is a carriage return
NOTE: IN THE EXAMPLE ZONE 2 IS PLAYING SOURCE 3; THE ZONE IS ON AT A VOLUME LEVEL OF 14%; THE ZONE IS UNMUTED; BASS AND TREBLE ARE FLAT)
In the serial protocol, making the zone "Active" doesn't change inputs. It is just to route the commands that follow to the zone you want to control. So for Roomie to query the status of the current zone for a room, it would send both the znc,4,Z[cr] and the znc,5,[cr] command, where "Z" would be the zone number. I'd then copy this string into each of the 12 sets of serial commands with Z set to 1, 2, 3, ... 12. However, until Roomie can parse the response to these commands, I haven't changed my plist file to include them.
I'm not using the AM/FM tuner in the ZR6 so I have not included any of the tuner commands in the plist. The tuner supports direct frequency entry for AM and FM via special commands. However, the plist does include the key commands for Up/Down and the number pad which allows scrolling through the presets and entering frequencies manually if you select the Tuner as the source for the zone you are in.
Note that the ZR6 documentation does not give any information about retrieving iPod meta data for Source 2 via the serial link. Nor does it support querying the current tuner frequency or preset.
Hope this information is useful. I have a RoomieCodes.plist file with serial commands for the first 12 zones and the All Zones commands. I can send it via email.