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
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.
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
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
here is all my songs units:
RINCON_000E58D71BD201400, RINCON_000E58DA528001400, RINCON_000E58D7F10E01400, RINCON_5CAAFD13A20601400, RINCON_000E58D84C7C01400, RINCON_000E5838ED5A01400, RINCON_000E58DAD00C01400
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
Also see your log file if you get an error everytime you trigger the rule.
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
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?