Sonos Groups

Is it possible to control groups and also make groups in Sonos from Openhab ?
In the Wiki it seems possible, but when I try to use the syntax it failed.

I want to make a rule for radio.
When radio is started I want to make a sonos group with all sonos players…
When TV is started I want that only the Playbar is in the “group” an all others sonos player turned off…

How can I do this in a rule ?

I assume this is for openHab1.? If so, please have a look at this thread, you will find an example in the last posting.

Hi,
I have seen this thread…:slight_smile:

But I couldn´t get it to work :fearful:

I don´t know wich are the real players and wich is maybe virtuel

sendCommand(“SonosAddKitchen”, “Kitchen”)
sendCommand(“SonosAddDen”, “Den”)
sendCommand(“SonosAddMasterBedroom”, “MasterBedroom”)
sendCommand(“SonosAddDiningRoom”, “DiningRoom”)
sendCommand(DiningRoomVolume, 98)
sendCommand(KitchenVolume, 98)
sendCommand(DenVolume, 98)
sendCommand(MasterBedroomVolume, 98)

I have three players:

  • TV
  • Kueche
  • Terrasse

Do I have to make a group like “ALL” like this ?

sendCommand(“ALL”, “Kueche”)
sendCommand(“ALL”, “Terrasse”)
sendCommand(“ALL”, “TV”)

The logic is that you have to tell a player that he is now the “master” for another player. So let us assume you want control „Kueche“ and „Terasse“ by „TV“. Then you would need following two commands:

sendCommand(Sonos_TV_Master, „Kueche“)
sendCommand(Sonos_TV_Master, „Terasse“)

And as item:

String Sonos_TV_Master		{sonos=„[TV:add]"} // or {sonos=„[RINCON_xxxx:add]"} 

:+1: I will try in the evening

And when I want to remove player from the Group i do it like this ?

String Sonos_TV_Master_remove {sonos=„[TV:remove]"}

Hi.

This is my items and rules files.

Items:
    // GARAGE
    Group page_sonos_room01					(page_sonos)
    Dimmer Sonos_Room01_Volume		"Volume"	(page_sonos_room01, Sonos)			{channel="sonos:zoneplayer:Sonos_Room01:volume"}
    String Sonos_Room01_State		"Tilstand"	(page_sonos_room01, Sonos, CountPlaying)	{channel="sonos:zoneplayer:Sonos_Room01:state"}
    Player Sonos_Room01_Control 				(Sonos)						{channel="sonos:zoneplayer:Sonos_Room01:control"}
    String Sonos_Room01_Add					(Sonos)						{channel="sonos:zoneplayer:Sonos_Room01:add"}
    Switch Sonos_Room01_StandAlone				(Sonos)						{channel="sonos:zoneplayer:Sonos_Room01:standalone"}
    String Sonos_Room01_CurrentArtist	"Artist"	(page_sonos_room01, Sonos)			{channel="sonos:zoneplayer:Sonos_Room01:currentartist"}
    String Sonos_Room01_CurrentTitle	"Title"		(page_sonos_room01, Sonos)			{channel="sonos:zoneplayer:Sonos_Room01:currenttitle"}
    String Sonos_Room01_PlayURI				(Sonos)						{channel="sonos:zoneplayer:Sonos_Room01:playuri"}
    Switch Sonos_Room01_Save				(Sonos)						{channel="sonos:zoneplayer:Sonos_Room01:save"}
    Switch Sonos_Room01_Restore				(Sonos)						{channel="sonos:zoneplayer:Sonos_Room01:restore"}
    String Sonos_Room01_CurrentTrack			(Sonos)						{channel="sonos:zoneplayer:Sonos_Room01:currenttrack"}
    String Sonos_Room01_GroupZoneName	"Gruppe"	(page_sonos_room01, Sonos, SonosGroup1)
    String Sonos_Room01_ZoneGroupId				(Sonos, ZoneGroupId)				{channel="sonos:zoneplayer:Sonos_Room01:zonegroupid"}
    Switch Sonos_Room01_localcoordinator			(Sonos, SonosGroup3)				{channel="sonos:zoneplayer:Sonos_Room01:localcoordinator"}
    String Sonos_Room01_Favorite				(Sonos, SonosGroup3)				{channel="sonos:zoneplayer:Sonos_Room01:favorite"}
    String Sonos_Room01_ZoneName				(Sonos, SonosGroup3)				{channel="sonos:zoneplayer:Sonos_Room01:zonename"}

    // KITCEHN
    Group page_sonos_room02					(page_sonos)
    Dimmer Sonos_Room02_Volume		"Volume"	(page_sonos_room02, Sonos)			{channel="sonos:zoneplayer:Sonos_Room02:volume"}
    String Sonos_Room02_State		"Tilstand"	(page_sonos_room02, Sonos, CountPlaying)	{channel="sonos:zoneplayer:Sonos_Room02:state"}
    Player Sonos_Room02_Control 				(Sonos)						{channel="sonos:zoneplayer:Sonos_Room02:control"}
    String Sonos_Room02_Add					(Sonos)						{channel="sonos:zoneplayer:Sonos_Room02:add"}
    Switch Sonos_Room02_StandAlone				(Sonos)						{channel="sonos:zoneplayer:Sonos_Room02:standalone"}
    String Sonos_Room02_CurrentArtist	"Artist"	(page_sonos_room02, Sonos)			{channel="sonos:zoneplayer:Sonos_Room02:currentartist"}
    String Sonos_Room02_CurrentTitle	"Title"		(page_sonos_room02, Sonos)			{channel="sonos:zoneplayer:Sonos_Room02:currenttitle"}
    String Sonos_Room02_PlayURI				(Sonos)						{channel="sonos:zoneplayer:Sonos_Room02:playuri"}
    Switch Sonos_Room02_Save				(Sonos)						{channel="sonos:zoneplayer:Sonos_Room02:save"}
    Switch Sonos_Room02_Restore				(Sonos)						{channel="sonos:zoneplayer:Sonos_Room02:restore"}
    String Sonos_Room02_CurrentTrack			(Sonos)						{channel="sonos:zoneplayer:Sonos_Room02:currenttrack"}
    String Sonos_Room02_GroupZoneName	"Gruppe"	(page_sonos_room02, Sonos, SonosGroup1)
    String Sonos_Room02_ZoneGroupId				(Sonos, ZoneGroupId)				{channel="sonos:zoneplayer:Sonos_Room02:zonegroupid"}
    Switch Sonos_Room02_localcoordinator			(Sonos, SonosGroup3)				{channel="sonos:zoneplayer:Sonos_Room02:localcoordinator"}
    String Sonos_Room02_Favorite				(Sonos, SonosGroup3)				{channel="sonos:zoneplayer:Sonos_Room02:favorite"}
    String Sonos_Room02_ZoneName				(Sonos, SonosGroup3)				{channel="sonos:zoneplayer:Sonos_Room02:zonename"}

    // LIVING ROOM
    Group page_sonos_room03					(page_sonos)
    Dimmer Sonos_Room03_Volume		"Volume"	(page_sonos_room03, Sonos)			{channel="sonos:zoneplayer:Sonos_Room03:volume"}
    String Sonos_Room03_State		"Tilstand"	(page_sonos_room03, Sonos, CountPlaying)	{channel="sonos:zoneplayer:Sonos_Room03:state"}
    Player Sonos_Room03_Control 				(Sonos)						{channel="sonos:zoneplayer:Sonos_Room03:control"}
    String Sonos_Room03_Add					(Sonos)						{channel="sonos:zoneplayer:Sonos_Room03:add"}
    Switch Sonos_Room03_StandAlone				(Sonos)						{channel="sonos:zoneplayer:Sonos_Room03:standalone"}
    String Sonos_Room03_CurrentArtist	"Artist"	(page_sonos_room03, Sonos)			{channel="sonos:zoneplayer:Sonos_Room03:currentartist"}
    String Sonos_Room03_CurrentTitle	"Title"		(page_sonos_room03, Sonos)			{channel="sonos:zoneplayer:Sonos_Room03:currenttitle"}
    String Sonos_Room03_PlayURI				(Sonos)						{channel="sonos:zoneplayer:Sonos_Room03:playuri"}
    Switch Sonos_Room03_Save				(Sonos)						{channel="sonos:zoneplayer:Sonos_Room03:save"}
    Switch Sonos_Room03_Restore				(Sonos)						{channel="sonos:zoneplayer:Sonos_Room03:restore"}
    String Sonos_Room03_CurrentTrack			(Sonos)						{channel="sonos:zoneplayer:Sonos_Room03:currenttrack"}
    String Sonos_Room03_GroupZoneName	"Gruppe"	(page_sonos_room03, Sonos, SonosGroup1)
    String Sonos_Room03_ZoneGroupId				(Sonos, ZoneGroupId)				{channel="sonos:zoneplayer:Sonos_Room03:zonegroupid"}
    Switch Sonos_Room03_localcoordinator			(Sonos, SonosGroup3)				{channel="sonos:zoneplayer:Sonos_Room03:localcoordinator"}
    String Sonos_Room03_Favorite				(Sonos, SonosGroup3)				{channel="sonos:zoneplayer:Sonos_Room03:favorite"}
    String Sonos_Room03_ZoneName				(Sonos, SonosGroup3)				{channel="sonos:zoneplayer:Sonos_Room03:zonename"}

    // BATHROOM SMALL
    Group page_sonos_room04					(page_sonos)
    Dimmer Sonos_Room04_Volume		"Volume"	(page_sonos_room04, Sonos)			{channel="sonos:zoneplayer:Sonos_Room04:volume"}
    String Sonos_Room04_State		"Tilstand"	(page_sonos_room04, Sonos, CountPlaying)	{channel="sonos:zoneplayer:Sonos_Room04:state"}
    Player Sonos_Room04_Control 				(Sonos)						{channel="sonos:zoneplayer:Sonos_Room04:control"}
    String Sonos_Room04_Add					(Sonos)						{channel="sonos:zoneplayer:Sonos_Room04:add"}
    Switch Sonos_Room04_StandAlone				(Sonos)						{channel="sonos:zoneplayer:Sonos_Room04:standalone"}
    String Sonos_Room04_CurrentArtist	"Artist"	(page_sonos_room04, Sonos)			{channel="sonos:zoneplayer:Sonos_Room04:currentartist"}
    String Sonos_Room04_CurrentTitle	"Title"		(page_sonos_room04, Sonos)			{channel="sonos:zoneplayer:Sonos_Room04:currenttitle"}
    String Sonos_Room04_PlayURI				(Sonos)						{channel="sonos:zoneplayer:Sonos_Room04:playuri"}
    Switch Sonos_Room04_Save				(Sonos)						{channel="sonos:zoneplayer:Sonos_Room04:save"}
    Switch Sonos_Room04_Restore				(Sonos)						{channel="sonos:zoneplayer:Sonos_Room04:restore"}
    String Sonos_Room04_CurrentTrack			(Sonos)						{channel="sonos:zoneplayer:Sonos_Room04:currenttrack"}
    String Sonos_Room04_GroupZoneName	"Gruppe"	(page_sonos_room04, Sonos, SonosGroup1)
    String Sonos_Room04_ZoneGroupId				(Sonos, ZoneGroupId)				{channel="sonos:zoneplayer:Sonos_Room04:zonegroupid"}
    Switch Sonos_Room04_localcoordinator			(Sonos, SonosGroup3)				{channel="sonos:zoneplayer:Sonos_Room04:localcoordinator"}
    String Sonos_Room04_Favorite				(Sonos, SonosGroup3)				{channel="sonos:zoneplayer:Sonos_Room04:favorite"}
    String Sonos_Room04_ZoneName				(Sonos, SonosGroup3)				{channel="sonos:zoneplayer:Sonos_Room04:zonename"}

    // BATHROOM LARGE
    Group page_sonos_room05					(page_sonos)
    Dimmer Sonos_Room05_Volume		"Volume"	(page_sonos_room05, Sonos)			{channel="sonos:zoneplayer:Sonos_Room05:volume"}
    String Sonos_Room05_State		"Tilstand"	(page_sonos_room05, Sonos, CountPlaying)	{channel="sonos:zoneplayer:Sonos_Room05:state"}
    Player Sonos_Room05_Control 				(Sonos)						{channel="sonos:zoneplayer:Sonos_Room05:control"}
    String Sonos_Room05_Add					(Sonos)						{channel="sonos:zoneplayer:Sonos_Room05:add"}
    Switch Sonos_Room05_StandAlone				(Sonos)						{channel="sonos:zoneplayer:Sonos_Room05:standalone"}
    String Sonos_Room05_CurrentArtist	"Artist"	(page_sonos_room05, Sonos)			{channel="sonos:zoneplayer:Sonos_Room05:currentartist"}
    String Sonos_Room05_CurrentTitle	"Title"		(page_sonos_room05, Sonos)			{channel="sonos:zoneplayer:Sonos_Room05:currenttitle"}
    String Sonos_Room05_PlayURI				(Sonos)						{channel="sonos:zoneplayer:Sonos_Room05:playuri"}
    Switch Sonos_Room05_Save				(Sonos)						{channel="sonos:zoneplayer:Sonos_Room05:save"}
    Switch Sonos_Room05_Restore				(Sonos)						{channel="sonos:zoneplayer:Sonos_Room05:restore"}
    String Sonos_Room05_CurrentTrack			(Sonos)						{channel="sonos:zoneplayer:Sonos_Room05:currenttrack"}
    String Sonos_Room05_GroupZoneName	"Gruppe"	(page_sonos_room05, Sonos, SonosGroup1)
    String Sonos_Room05_ZoneGroupId				(Sonos, ZoneGroupId)				{channel="sonos:zoneplayer:Sonos_Room05:zonegroupid"}
    Switch Sonos_Room05_localcoordinator			(Sonos, SonosGroup3)				{channel="sonos:zoneplayer:Sonos_Room05:localcoordinator"}
    String Sonos_Room05_Favorite				(Sonos, SonosGroup3)				{channel="sonos:zoneplayer:Sonos_Room05:favorite"}
    String Sonos_Room05_ZoneName				(Sonos, SonosGroup3)				{channel="sonos:zoneplayer:Sonos_Room05:zonename"}

    // OFFICE
    Group page_sonos_room06					(page_sonos)
    Dimmer Sonos_Room06_Volume		"Volume"	(page_sonos_room06, Sonos)			{channel="sonos:zoneplayer:Sonos_Room06:volume"}
    String Sonos_Room06_State		"Tilstand"	(page_sonos_room06, Sonos, CountPlaying)	{channel="sonos:zoneplayer:Sonos_Room06:state"}
    Player Sonos_Room06_Control 				(Sonos)						{channel="sonos:zoneplayer:Sonos_Room06:control"}
    String Sonos_Room06_Add					(Sonos)						{channel="sonos:zoneplayer:Sonos_Room06:add"}
    Switch Sonos_Room06_StandAlone				(Sonos)						{channel="sonos:zoneplayer:Sonos_Room06:standalone"}
    String Sonos_Room06_CurrentArtist	"Artist"	(page_sonos_room06, Sonos)			{channel="sonos:zoneplayer:Sonos_Room06:currentartist"}
    String Sonos_Room06_CurrentTitle	"Title"		(page_sonos_room06, Sonos)			{channel="sonos:zoneplayer:Sonos_Room06:currenttitle"}
    String Sonos_Room06_PlayURI				(Sonos)						{channel="sonos:zoneplayer:Sonos_Room06:playuri"}
    Switch Sonos_Room06_Save				(Sonos)						{channel="sonos:zoneplayer:Sonos_Room06:save"}
    Switch Sonos_Room06_Restore				(Sonos)						{channel="sonos:zoneplayer:Sonos_Room06:restore"}
    String Sonos_Room06_CurrentTrack			(Sonos)						{channel="sonos:zoneplayer:Sonos_Room06:currenttrack"}
    String Sonos_Room06_GroupZoneName	"Gruppe"	(page_sonos_room06, Sonos, SonosGroup1)	
    String Sonos_Room06_ZoneGroupId				(Sonos, ZoneGroupId)				{channel="sonos:zoneplayer:Sonos_Room06:zonegroupid"}
    Switch Sonos_Room06_localcoordinator			(Sonos, SonosGroup3)				{channel="sonos:zoneplayer:Sonos_Room06:localcoordinator"}
    String Sonos_Room06_Favorite				(Sonos, SonosGroup3)				{channel="sonos:zoneplayer:Sonos_Room06:favorite"}
    String Sonos_Room06_ZoneName				(Sonos, SonosGroup3)				{channel="sonos:zoneplayer:Sonos_Room06:zonename"}


Rules:
    rule "Room Off - Garage"
    when
    	Item room12_off changed to ON
    then
    	sendCommand(Sonos_Room01_StandAlone, ON)
    	sendCommand(Sonos_Room01_Control, PAUSE)
    end

    rule "Room Off - Kitchen"
    when
    	Item room01_off changed to ON
    then
    	sendCommand(Sonos_Room02_Control, PAUSE)
    	sendCommand(Sonos_Room02_StandAlone, ON)
    end

    rule "Room Off - Living Room"
    when
    	Item room02_off changed to ON
    then
    	sendCommand(Sonos_Room03_StandAlone, ON)
    	sendCommand(Sonos_Room03_Control, PAUSE)
    end

    rule "Room Off - Small Bath"
    when
    	Item room09_off changed to ON
    then
    	sendCommand(Sonos_Room04_StandAlone, ON)
    	sendCommand(Sonos_Room04_Control, PAUSE)
    end

    rule "Room Off - Large Bath"
    when
    	Item room10_off changed to ON
    then
    	sendCommand(Sonos_Room05_StandAlone, ON)
    	sendCommand(Sonos_Room05_Control, PAUSE)
    end

    rule "Room Off - Office"
    when
    	Item room04_off changed to ON
    then
    	sendCommand(Sonos_Room06_StandAlone, ON)
    	sendCommand(Sonos_Room06_Control, PAUSE)
    end

    rule "Link - Garage"
    when
    	Item room09_motion changed to ON
    then
    	if (Sonos_Room02_State.state == "PLAYING" && Sonos_Room01_State.state != "PLAYING") {
    	sendCommand(Sonos_Room01_Volume, Sonos_Room02_Volume.state as DecimalType)
    	sendCommand(Sonos_Room02_Add, "Sonos_Room01")
    	}
    end


    rule "Link - Small Bath"
    when
    	Item room07_motion changed to ON
    then
    	if (Sonos_Room02_State.state == "PLAYING" && Sonos_Room04_State.state != "PLAYING") {
    	sendCommand(Sonos_Room04_Volume, Sonos_Room02_Volume.state as DecimalType)
    	sendCommand(Sonos_Room02_Add, "Sonos_Room04")
    	}
    end

    rule "Link - Large Bath"
    when
    	Item room08_motion changed to ON
    then
    	if (Sonos_Room02_State.state == "PLAYING" && Sonos_Room05_State.state != "PLAYING" && rule_cleaning.state == ON) {
    	sendCommand(Sonos_Room05_Volume, Sonos_Room02_Volume.state as DecimalType)
    	sendCommand(Sonos_Room02_Add, "Sonos_Room05")
    	}
    end

Now I tried…:unamused:

Group sonosalle "Alle"
Switch SonosPlayStopKueche "Küche" (sonosalle) { sonos="[ON:kueche:play], [OFF:kueche:stop]" }
Dimmer VolumeSonosKueche "Volume" { sonos="[kueche:volume]" }
String AktuellerTitelKueche "Titel" { sonos="[kueche:currenttrack]" }
String znameKueche {sonos="[kueche:zonename]"}
String transportstateKueche {sonos="[kueche:transportstate]"}
String zgroupKueche {sonos="[kueche:zonegroup]"}
String zgroupidKueche {sonos="[kueche:zonegroupid]"}
Switch SonosPlayStopTV "TV" (sonosalle) { sonos="[ON:tv:play], [OFF:tv:stop]" }
Dimmer VolumeSonosTV "TV Volume" { sonos="[tv:volume]" }
String AktuellerTitelTV "Titel" { sonos="[tv:currenttrack]" }
String znameTV {sonos="[tv:zonename]" }
String transportstateTV {sonos="[tv:transportstate]" }
String zgroupTV {sonos="[tv:zonegroup]" }
String zgroupidTV {sonos="[tv:zonegroupid]" }
Switch SonosPlayStopTerrasse "Terrasse" (sonosalle) { sonos="[ON:terrasse:play], [OFF:terrasse:stop]" }
Dimmer VolumeSonosTerrasse "Terrasse Volume" { sonos="[terrasse:volume]" }
String AktuellerTitelTerrasse "Titel" {sonos="[terrasse:currenttrack]" }
String znameTerrasse {sonos="[terrasse:zonename]" }
String transportstateTerrasse {sonos="[terrasse:transportstate]" }
String zgroupTerrasse {sonos="[terrasse:zonegroup]" }
String zgroupidTerrasse {sonos="[terrasse:zonegroupid]"}
String SonosKuecheMaster {sonos="[kueche:add]"}
String SonosTVMaster {sonos="[tv:add]"}
String SonosTerrasseMaster {sonos="[terrasse:add]" }
import org.openhab.core.library.types.*
import org.openhab.model.script.actions.*
        rule "Musik aus"
                when
                        Item Harmony_Activity changed to PowerOff
                then
                        //sendCommand(domiq, "MEM.radioon=0\n")
                        sendCommand(SonosPlayStopKueche, OFF)
                        sendCommand(SonosPlayStopTV, OFF)
                        sendCommand(SonosPlayStopTerrasse, OFF)
                        sendCommand(domiq, "MEM.radioon=0\n")
        end
        rule "Musik an"
                when
                        Item Harmony_Activity changed from PowerOff
                        //Item Harmony_Activity changed to Squeezebox Musik or
                        //Item Harmony_Activity changed to Fernsehen or
                        //Item Harmony_Actif
                then
                        //sendCommand(domiq, "MEM.radiooff=0\n")
                        sendCommand(domiq, "MEM.radioon=1\n")
        end
        rule "radio"
                when
                        Item Harmony_Activity changed to radio
                then
                        //sendCommand("sonosalle", ON)
                        sendCommand("SonosTVMaster", "terrasse")
                        sendCommand("SonosTVMaster", "kueche")
        end
        rule "TV"
                when
                        Item Harmony_Activity changed to Fernsehen
                then
                        //sendCommand("sonosalle", ON)
                        sendCommand(SonosPlayStopKueche, OFF)
                        sendCommand(SonosPlayStopTerrasse, OFF)
           end
  Frame label="TV" {
                                                        Switch item=SonosPlayStopTV label="TV TON"
                                                        Slider item=VolumeSonosTV
                                                        Text item=AktuellerTitelTV label="Titel: [%s]"
                                                        Text item=znameTV label="Name der Zone: [%s]"
                                                        Text item=transportstateTV label="Transportstate: [%s]"
                                                        Text item=zgroupTV label="Zone Group: [%s]"
                                                        Text item=zgroupidTV label="Zone GroupID: [%s]"
                                                }
                                                Frame label="Terrasse" {
                                                        Switch item=SonosPlayStopTerrasse label="Terrasse"
                                                        Slider item=VolumeSonosTerrasse
                                                        Text item=AktuellerTitelTerrasse label="Titel: [%s]"
                                                        Text item=znameTerrasse label="Name der Zone: [%s]"
                                                        Text item=transportstateTerrasse label="Transportstate: [%s]"
                                                        Text item=zgroupTerrasse label="Zone Group: [%s]"
                                                        Text item=zgroupidTerrasse label="Zone GroupID: [%s]"
                                                }
                                                Frame label="Küche" {
                                                        Switch item=SonosPlayStopKueche label="Küche"
                                                        Slider item=VolumeSonosKueche
                                                        Text item=AktuellerTitelKueche label="Titel: [%s]"
                                                        Text item=znameKueche label="Name der Zone: [%s]"
                                                        Text item=transportstateKueche label="Transportstate: [%s]"
                                                        Text item=zgroupKueche label="Zone Group: [%s]"
                                                        Text item=zgroupidKueche label="Zone GroupID: [%s]"
      }

When the rule radio starts…I can see in the log that the rule starts…
But when i look in the sonos app the players are not grouped…:fearful:

Where is my mistake ?

Found two things in your rule definition. The first parameter is an item name and should not be quoted. The second parameter is the name of the Sonos player as it is defined in the Sonos app. I assume in you case it is rather “Kueche” instead of “kueche” (but not sure if it makes a difference).

sendCommand(SonosTVMaster, "Terrasse")
sendCommand(SonosTVMaster, "Kueche")
1 Like

Any luck with grouping Sonos players (or using stereo pairs) with openhab? Unfortunately I have not managed to get this working. Help would be greatly appreciated.

Sorry for the late reply…I got it to working, do you need help anymore ?
Regards
Kobelka

Would you be so kind as to share your config for this? Thanks in advance!

Sonos.items

Sonos.rules

1 Like