This project occupies my mind for some time and recently I got closer to a working solution. Actually I already have something working in place but at this stage the solution looks quite ugly and I would not recommend it but only for the very enthusiastic users of KNX, Sonos and Gira HomeServer. You should have a Windows based computer in your network to run the solution.
Credit: most of the code is reused from the following sources:
If you want to replicate the solution you should follow these steps:
on the Gira HomeServer
- in Experte software create some group addresses to control your Sonos zone players. Mark Send communication object for those group addresses so values will be sent through the KO Gateway (in the IP network)
- type 1 bit for transport commands: play(1)/stop(0), pause(1), next(1)/previous(0), mute(1)/unmute(0)
- type 8bit-EIS6 – percent (0-100%) for volume commands
- If you use QuadClient you can place new controls for audio commands in the rooms coresponding to zone player locations. I used the Set Value – percent control to adjust the volume. You can also assign in ETS3 any pushbuttons to change the group address value for volume control. Remember to note which group address corresponds to which zone player – you need it later to build the UniqueDeviceNames.ini file
- do not forget to enable the Communication Gatweway in Project settings and to use the default port 7003
on your Windows machine
- download Olser’s code from http://www.cebotics.com/forums/viewt…856041&start=0 and install the wshell scripts ZonePlayerController.wsc and ZonePlayerFinder.wsc (update: now I included them in the zip archive)
- Download and place ZPCMD.exe file in the root folder (C:\).
- Follow Olser’s instructions to detect the zone players in your installation. You will get a file named UniqueDeviceNames.txt in your root folder. This is how this file looks like:
Dining Room: uuid:RINCON_000E5830093201400
Guest Room: uuid:RINCON_000E58233A4601400
Living Room: uuid:RINCON_000E58234DF001400
Master Bedroom: uuid:RINCON_000E5821CE0001400
- Create a file named UniqueDeviceNames.ini in the root folder by editing the UniqueDeviceNames.txt file with the following structure
- Please note that the [HS] section states your HomeServer IP address, port and secret key in order to communicate with the Gira HomeServer. Then the other sections relate your KNX group addresses to the Sonos zone players IDs found in the UniqueDeviceNames.txt file
- Place the SonosHS.exe (REMOVED, see newer posts) file in a place of convenience (if you want use root folder as well)
- Make sure you have installed the .NET framework v4 and open a cmd prompt windows as an administrator
- Run this command: C:\Windows\Microsoft.NET\Framework\v4.0.30319\installutil.exe c:\sonoshs.exe in order to install the windows service named SonosHS
- Go and start the windows service (this is only necessary after installation, it will start automatically after any reboot)
- Go ahead and control your zone players from your KNX devices. Please keep an eye for firewall warnings and allow SonosHS to connect and access the disk system. Save those confirmations in your firewall rules.
Please note this is a very incipient implementation and is not very well tested. There is a limitation that you need to provide audio content for your player beforehands, from this solution you can only control the volume and the transport commands of the player. You can use the project posted at the end of the article to modify it and get your own implementation.
This is my current TODO list for next versions:
- integrate the ZonePlayerController.wsc code inside the C# project and remove the need to register a separate component
- integrate the ZonePlayerFinder.wsc into a proper setup solution and generate automatically the UniqueDeviceNames.ini file
- place all files in an appropriate location into the computer program files
- integrate the watch functionality for automated feedback to the HS (now the communication is only unidirectional)
Please note that this would be a less desired solution at least for the visualisation part. The best solution would be to generate a whole new plugin for QuadClient in order to control all Sonos installation from the HomeServer itself. Gira already provides such plugins for several multiroom audio systems and may have plans to add Sonos on the list. Or not. Until then I will stick with this solution. Update: I just tested the new Expert 2.5 plus 2.5 firmware and it appears the UPnP plugins in Quad Client work just fine with the Sonos system. I will post a new article about that. Still the project presented here is useful if you want to control the Sonos zone players from the KNX devices through group addresses and integrate music in scenes and so on.
The source code
The source code can be found here (REMOVED, see newer posts). I cannot provide any support at this stage, posted information is just for community preview.
The solution as a windows form application (REMOVED, see newer posts)(using Dacom’s HSMonitor interface)
The complete setup package (REMOVED, see newer posts) for the Windows service: installs, starts, generates device names – read the comments for more info