Serveral Sonos units on same switch

Hey everybody

I have a question, who maybe lead to another, but lets take that later :slight_smile:

i would like to have a switch who turn all music off (when im leaving home.

Would this be right:

Item:

Switch slukmusik “Sluk alt musik” (slukmusik) {sonos="[OFF:RINCON_000E58D71BD201400, RINCON_000E58DA528001400, RINCON_000E58D7F10E01400, RINCON_5CAAFD13A20601400, RINCON_000E58D84C7C01400, RINCON_000E5838ED5A01400, RINCON_000E58DAD00C01400:stop]"}

Sitemap:
Switch item=slukmusik label=“Stop alt musik” mappings=[OFF=“Sluk”]

you need to define every unit as its own switch - than create a rule which switches off all the units at once even on the trigger event “leaving home” (if you can identify that) - or with another switch item

Hi

Im not into rules, can you help me a bit more, how to do this?

create a file in the “rules” folder in “configuration” with *.rules ending, something like:

import org.openhab.core.library.types.*
import org.openhab.model.script.actions.*

rule "Sonos OFF"
when
    Item sw_sonos_master changed from ON to OFF or
    Item presence changed from ON to OFF
then
    if (sw_sonos_1.state != OFF) sendCommand(sw_sonos_1, OFF)
    if (sw_sonos_2.state != OFF) sendCommand(sw_sonos_2, OFF)
    if (sw_sonos_3.state != OFF) sendCommand(sw_sonos_3, OFF)
    if (sw_sonos_4.state != OFF) sendCommand(sw_sonos_4, OFF)
    if (sw_sonos_5.state != OFF) sendCommand(sw_sonos_5, OFF)
end

where “presence” would be your own presence at home (if you are able to detect that) and sw_sonos_master a “virtual” switch you can create for that behaviour.

ok?

Hey

Thanks, but still no action… im still new to this:

Item:
Switch slukmusik1 “Stop alt musik” (slukmusik) {sonos="[OFF:RINCON_000E58D71BD201400:stop]"}
Switch slukmusik2 “Stop alt musik” (slukmusik) {sonos="[OFF:RINCON_000E58DA528001400:stop]"}
Switch slukmusik3 “Stop alt musik” (slukmusik) {sonos="[OFF:RINCON_000E58D7F10E01400:stop]"}
Switch slukmusik4 “Stop alt musik” (slukmusik) {sonos="[OFF:RINCON_5CAAFD13A20601400:stop]"}
Switch slukmusik5 “Stop alt musik” (slukmusik) {sonos="[OFF:RINCON_000E58D84C7C01400:stop]"}
Switch slukmusik6 “Stop alt musik” (slukmusik) {sonos="[OFF:RINCON_000E5838ED5A01400:stop]"}
Switch slukmusik7 “Stop alt musik” (slukmusik) {sonos="[OFF:RINCON_000E58DAD00C01400:stop]"}

Sitemap
Switch item=slukmusik label=“Stop alt musik” mappings=[OFF=“Sluk”]

Rules
import org.openhab.core.library.types.*
import org.openhab.model.script.actions.*

rule "Sonos OFF"
when
Item slukmusik changed to OFF or
Item slukmusik changed to OFF
then
if (slukmusik1.state != OFF) sendCommand(slukmusik1, OFF)
if (slukmusik2.state != OFF) sendCommand(slukmusik2, OFF)
if (slukmusik3.state != OFF) sendCommand(slukmusik3, OFF)
if (slukmusik4.state != OFF) sendCommand(slukmusik4, OFF)
if (slukmusik5.state != OFF) sendCommand(slukmusik5, OFF)
if (slukmusik6.state != OFF) sendCommand(slukmusik6, OFF)
if (slukmusik7.state != OFF) sendCommand(slukmusik6, OFF)
end

Is this all wrong?

Another alternative to a rule is a Group.

Group:Switch:OR(ON, OFF) allSonos
Switch Sonos1 ... (allSonos) ...
Switch Sonos2 ... (allSonos) ...
...

Then put allSonos on your sitemap as a Switch and it will appear as a single Switch item. When you toggle the switch the Group will forward the command to all members of the Group.

In your rule the code to turn off the music when presence turns OFF becomes

allSonos.members.forEach[s | if(s.state != OFF) s.sendCommand(OFF)]

NOTE: This doesn’t make sense

Switch slukmusik “Sluk alt musik” (slukmusik)

slukmusik isn’t a Group so it makes no sense to put that inside the parens. Furthermore, a Group cannot be a member of itself.

still no action… i still dont really get it…

here is all my songs units:
RINCON_000E58D71BD201400, RINCON_000E58DA528001400, RINCON_000E58D7F10E01400, RINCON_5CAAFD13A20601400, RINCON_000E58D84C7C01400, RINCON_000E5838ED5A01400, RINCON_000E58DAD00C01400

Can you help me with sitemap, item eg rules?

This is not all wrong, but you can’t define a group within itself and use a switch in a sitemap you never definded, so you do need in your Items:

Switch slukmusik
Switch slukmusik1	"Stop alt musik"			        {sonos="[OFF:RINCON_000E58D71BD201400:stop]"}
Switch slukmusik2	"Stop alt musik"				{sonos="[OFF:RINCON_000E58DA528001400:stop]"}
Switch slukmusik3	"Stop alt musik"				{sonos="[OFF:RINCON_000E58D7F10E01400:stop]"}
Switch slukmusik4	"Stop alt musik"				{sonos="[OFF:RINCON_5CAAFD13A20601400:stop]"}
Switch slukmusik5	"Stop alt musik"				{sonos="[OFF:RINCON_000E58D84C7C01400:stop]"}
Switch slukmusik6	"Stop alt musik"				{sonos="[OFF:RINCON_000E5838ED5A01400:stop]"}
Switch slukmusik7	"Stop alt musik"				{sonos="[OFF:RINCON_000E58DAD00C01400:stop]"}

and in your rule you use:

rule "Sonos OFF"
when
    Item slukmusik received update
then
    if (slukmusik1.state != OFF) sendCommand(slukmusik1, OFF)
    if (slukmusik2.state != OFF) sendCommand(slukmusik2, OFF)
    if (slukmusik3.state != OFF) sendCommand(slukmusik3, OFF)
    if (slukmusik4.state != OFF) sendCommand(slukmusik4, OFF)
    if (slukmusik5.state != OFF) sendCommand(slukmusik5, OFF)
    if (slukmusik6.state != OFF) sendCommand(slukmusik6, OFF)
    if (slukmusik7.state != OFF) sendCommand(slukmusik6, OFF)
end

i switched the rule trigger vom “changed to OFF” to “received update” because you define your Switch with a mapping, so you never will get the state “ON” and so there is no change to “OFF” at all.

Another alternative for that is to use groups as Rich Koshak posted - Maybe that is the more elegant way in this behaviour, but so you can learn something about rules :wink:

Also see your log file if you get an error everytime you trigger the rule.

this the latest i have:

ITEMS
Switch slukmusik
Switch slukmusik1 “Sluk alt musik” {sonos="[OFF:RINCON_000E58D71BD201400:stop]"}
Switch slukmusik2 “Sluk alt musik” {sonos="[OFF:RINCON_000E58DA528001400:stop]"}
Switch slukmusik3 “Sluk alt musik” {sonos="[OFF:RINCON_000E58D7F10E01400:stop]"}
Switch slukmusik4 “Sluk alt musik” {sonos="[OFF:RINCON_5CAAFD13A20601400:stop]"}
Switch slukmusik5 “Sluk alt musik” {sonos="[OFF:RINCON_000E58D84C7C01400:stop]"}
Switch slukmusik6 “Sluk alt musik” {sonos="[OFF:RINCON_000E5838ED5A01400:stop]"}
Switch slukmusik7 “Sluk alt musik” {sonos="[OFF:RINCON_000E58DAD00C01400:stop]"}

SITEMAP
Switch item=slukmusik label=“Sluk alt musik” mappings=[OFF=“Sluk”]

RULES
import org.openhab.core.library.types.*
import org.openhab.model.script.actions.*

rule "Sonos OFF"
when
Item slukmusik received update
then
if (slukmusik1.state != OFF) sendCommand(slukmusik1, OFF)
if (slukmusik2.state != OFF) sendCommand(slukmusik2, OFF)
if (slukmusik3.state != OFF) sendCommand(slukmusik3, OFF)
if (slukmusik4.state != OFF) sendCommand(slukmusik4, OFF)
if (slukmusik5.state != OFF) sendCommand(slukmusik5, OFF)
if (slukmusik6.state != OFF) sendCommand(slukmusik6, OFF)
if (slukmusik7.state != OFF) sendCommand(slukmusik6, OFF)
end

I still dont have any connection?

this is from de debug:

10:37:56.102 [DEBUG] [m.r.internal.engine.RuleEngine:305 ] - Executing rule 'Sonos OFF’
10:37:56.105 [INFO ] [runtime.busevents :22 ] - slukmusik received command OFF
10:37:56.190 [DEBUG] [riptExtensionClassNameProvider:63 ] - Script actions have changed: HTTPActionService, ExecActionService, TransformationActionService, AudioActionService, PingActionService,
10:37:56.353 [INFO ] [runtime.busevents :22 ] - slukmusik1 received command OFF
10:37:56.393 [INFO ] [runtime.busevents :22 ] - slukmusik2 received command OFF
10:37:56.436 [INFO ] [runtime.busevents :22 ] - slukmusik3 received command OFF
10:37:56.468 [INFO ] [runtime.busevents :22 ] - slukmusik4 received command OFF
10:37:56.497 [INFO ] [runtime.busevents :22 ] - slukmusik5 received command OFF
10:37:56.523 [INFO ] [runtime.busevents :22 ] - slukmusik6 received command OFF
10:37:56.551 [INFO ] [runtime.busevents :22 ] - slukmusik6 received command OFF

looks fine to me, when you switch off “slukmusik” every player receives the “OFF” command - if they don’t stop playing, there is a problem with the start/stop declaration itself for every player - does it work, if you put a single player in your sitemap and stop it?

Now everything is working… I made some mistakes (forgot to add the add-on)

so everybody, thanks for the help… I will ask for something again, but this is issue is now perfect

:rose: