Sonos CONNECT > Autoplay Raum - per Skript einstellen

Hallo allerseits :slight_smile:

Es gab ja immer wieder mal die Frage „wie kann ich den Eingang von einem Sonos Connect auswählen“

Ich habe FAST eine Antwort :smiley:

Für mich ist es die perfekte Lösung :slight_smile: Ich beschreibe mal kurz meinen Aufbau. Ich hab im Wohnzimmer einen Denon Dolby Receiver. Daran angeschlossen sind TV, PS4, … und ein Sonos Connect auf Zone2. Wenn ich beim Denon „All Zone Stereo“ aktiviere, dann kommt der Ton vom Denon (egal was darüber gerade läuft) auf Zone2 raus und geht damit auf den Eingang vom Sonos Connect. Jetzt war die Frage, wie bekomme ich das in einen bestimmten Raum (und nicht immer in den gleichen Raum).

Sonos bietet beim Connect die Möglichkeit einen „Autoplay Raum“ einzustellen (in der Handy App unter „Einstellungen > Raumeinstellungen > Raumname vom Connect > Eingang > Autoplay-Raum“). Das bedeutet, sobald am Eingang vom Connect ein Audio-Signal rein kommt, dann wird dieses automatisch in einem bestimmten voreingestellten Raum abgespielt. Aber ich will ja nicht immer den gleichen Raum zur Wiedergabe haben!

Meine Lösung dazu > dieses Skript:

<?
/* Trigger mit Variablenänderung auf eine Integer-Variable, mit Variablenprofil mit allen Sonos-Raumnamen */
$SonosZP_Connect_IP = "192.168.1.20";  // IP vom Sonos Connect
$SonosZP_Connect_Port = 1400;  // Default Port für SOAP von Sonos
$BadOben_RINCON = "RINCON_1111111111";
$Flur_RINCON = "RINCON_2222222222";
$Gaestezimmer_RINCON =  "RINCON_3333333333";
$Kueche_RINCON =  "RINCON_4444444444";
$Schlafzimmer_RINCON =  "RINCON_5555555555";


switch(GetValueFormatted(@$_IPS['VARIABLE'])) {
	case "Bad oben":
	Sonos_SetConnectAutoplayRoom($BadOben_RINCON);
	break;

	case "Flur":
	Sonos_SetConnectAutoplayRoom($Flur_RINCON);
	break;

	case "Gaestezimmer":
	Sonos_SetConnectAutoplayRoom($Gaestezimmer_RINCON);
	break;

	case "Kueche":
	Sonos_SetConnectAutoplayRoom($Kueche_RINCON);
	break;

	case "Schlafzimmer":
	Sonos_SetConnectAutoplayRoom($Schlafzimmer_RINCON);
	break;
}


function Sonos_SetConnectAutoplayRoom($SonosZP_AutoplayRoom_RINCON) {
Global $SonosZP_Connect_IP;
Global $SonosZP_Connect_Port;
$content='POST /DeviceProperties/Control HTTP/1.1
HOST: '.$SonosZP_Connect_IP.':'.$SonosZP_Connect_Port.'
SOAPACTION: "urn:schemas-upnp-org:service:DeviceProperties:1#SetAutoplayRoomUUID"
CONTENT-TYPE: text/xml; charset="utf-8"
Content-Length: 383

<?xml version="1.0" encoding="utf-8"?>
<s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
   <s:Body>
      <u:SetAutoplayRoomUUID xmlns:u="urn:schemas-upnp-org:service:DeviceProperties:1">
         <RoomUUID>'.$SonosZP_AutoplayRoom_RINCON.'</RoomUUID>
      </u:SetAutoplayRoomUUID>
   </s:Body>
</s:Envelope>';
$result = Sonos_SendSOAP($SonosZP_Connect_IP, $SonosZP_Connect_Port, $content);
return $result;
}

function Sonos_SendSOAP($address, $port, $content) {
	$fp = fsockopen($address, $port);
   fputs ($fp, $content);
   $result = stream_get_contents($fp, -1);
   fclose($fp);
   return $result;
}

?>

…ich habe mir noch ein wenig drum herum gebaut, so dass ich im WebFront/IPSView in jedem Raum die Möglichkeit habe „Denon Ton abspielen“ zu aktivieren. Aber wie wo was da jeder außen rum machen will, das bleibt euch überlassen :slight_smile:

Wenn man den Inhalt von $content entsprechend ändert, kann man ALLES von seinen Sonos steuern, was man auch mit der Sonos App oder der Desktop Software einstellen oder steuern/bedienen kann!!! :cool: Also seid kreativ und bastelt mal ein paar schöne Sachen :smiley:

Viel Spaß damit!

EDIT: Noch ein kurzer Nachtrag. Dieses Skript setzt in den Einstellungen ja nur den Autoplay-Raum, danach muss man noch (durch dieses oder ein anderes Skript) dafür sorgen, dass am Eingang vom Connect ein Audio-Signal aufläuft. Ich überwache dazu meine einzelnen, extra angelegten, Autoplay-Raum-Variablen und aktiviere NACH diesem diesem Skript das AllZoneStereo vom Denon. Also erst den Autoplay-Raum setzt, 2 Sekunden warten und dann das Signal zum Eingang vom Connect abspielen und schon spielt der gewählte Raum das ab :slight_smile:

Grüße,
Chris