Ich nutze misterhouse damit kann ich mein Sonos System jetzt ganz brauchbar steuern. Ich habe ein Sonos_sender.pl Script um Kommandos zu senden (siehe Lexikon) und ein Sonos_receiver.pl Script, dass aktuelle Info's einfach vom parallel laufenden sonosweb Sonos Web Controller erhält (einfach per TCP socket stream).
Für HS Unterstützung am besten mal eine PN and marct senden, vielleicht hat er da weitergemacht.
Ankündigung
Einklappen
Keine Ankündigung bisher.
HS & Sonos - gibts was Neues?
Einklappen
X
-
Hi!
Finde es toll, dass es immer wieder Bastler gibt, die sich mit solchen Themen befassen!
Hat sich eigentlich hier etwas getan? Wir haben seit ein paar Tagen ein Sonos System im Haus, ist toll, aber wäre super, wenn man es in Szenen einbauen kann,...
Hat vielleicht schon jemand das ordentlich geschafft und könnte die Logiken und Scripts posten? Vielleicht mit Anleitung, für die nicht so technisch bewanderten ;-)
lg Stefan
Einen Kommentar schreiben:
-
Die Phpscripte werden auf deinem Webserver abgelegt und auf diesem durch HS gestartet. Ich hatte drei Screenshots gepostet wo die Einstellung im HS angezeigt wird.
Abfrage:
So weit bin ich leider noch nicht. Bisher kann ich jeden Sonosplayer separat einschalten, Laustärke ändern, Titel vor zurück. Mehr habe ich in den Script noch nicht ändern können.
Einen Kommentar schreiben:
-
Hallo marct!
Endlich hat jemand eine Lösung gefunden! Find ich toll. Ich hab zwar noch keinen Sonos Player aber unter diesem umständen werde ich gleich aufrüsten! Davor wollte ich aber noch fragen ob du eine genaue Anleitung posten kannst wie man diese script zur Steuerung anlegt und in welchem Ordner bzw. wo man diese dann speichern muß um sie per Ip Telegramme senden kann.
Übrigens kann man über diese Variante eigentlich auch den Status bzw. Playlists und Titeln vom Sonos Player abfragen!
Freu mich auf deine Antwort
Lg
Thomas3007
Einen Kommentar schreiben:
-
Nein, in Misterhouse geht alles mit Perl.Zitat von marct Beitrag anzeigenwie hast du das mit der Regelung der Lautstärke geregelt? Hast du für jede Lautstäreke ein eigenes Script?
Ich habe ein Perl-Skript zur Steuerung der Sonos-Kisten und darin für jede Funktion eine Subroutine, der ich z.B. die ID der jeweiligen Box und im Fall der Lautstärkeregelung noch einen Zahlenwert für die Lautstärke übergebe. Ein Tastendruck auf dem InfoTerminal macht bei mir 5% leiser/lauter (damit es besser klingt in 1% Schritten und 0.5s Pause zwischen den Schritten):
Code:if (state_now $Sonos_Leiser) { for($i=1;$i<6;$i++){ Sonos_Volume($SonosPlayerNR, $SonosVolume-$i); select(undef, undef, undef, 0.5); # sleep 0.5s between every step } $SonosVolume -= $i }
Einen Kommentar schreiben:
-
Hallo Marc,
wie hast du das mit der Regelung der Lautstärke geregelt? Hast du für jede Lautstäreke ein eigenes Script?
Einen Kommentar schreiben:
-
Habe hier mal drei Screenshots von meiner HS-logik angehängt:
Einen Kommentar schreiben:
-
auf die Art und Weise steuere ich auch mein Sonos System, allerdings mit Misterhouse und nicht mit dem HS...
Im IP-Symcon Forum gibt es auch weitere Kommandos wie Playliste auswählen, Tracks hinzufügen, Internetradio, externe Quelle auswählen etc.
Anbei ein Bild wie die Steuerung des Sonos Systems über das Info Terminal Touch bei mir aussieht.Angehängte Dateien
Einen Kommentar schreiben:
-
Ich habe die Idee und Script ist aus diesem Forum:
Einzelne Sonos Player ansteuern - IP-Symcon Community Forum
Habe es danach noch angepasst.
Einen Kommentar schreiben:
-
Ein Gast antworteteIch mach mein Postfach bald dicht, dann hört das auf
... Habe das nicht im Fokus !!!
LG
P.S.: RUSSOUND und SONOS .. schlechter Vergleich
Einen Kommentar schreiben:
-
Oh, doch wieder was Neues bei Sonos. Dabei hab ich mich jetzt schon sehr mit der von Mike vorgeschlagenen zentralen Variante mit einem Russound im Keller angefreundet.
@meudenbach
Apropos Mike: Ich hab Dir noch eine private Nachricht geschickt, es ginge ums konkrete Feintuning und der Eli steht in den Startlöchern...
Einen Kommentar schreiben:
-
Ein Gast antworteteMeinen vollen Respekt !!!!
wie bist Du darauf gekommen? Gibt es endlich eine Doku zum Protokoll, oder hast das mühselig mit einem Sniffer ausgelesen?
würde das gern in mmh einbinden, und wie das ausschaut geht das auch.
LG
Einen Kommentar schreiben:
-
Hi,
ich habe Sonos mit HS verbunden.
Über eine Gruppenadresse wird mit dem einschalten des Lichts im Bad´s ein Script von Hs auf dem Webserver (Qnap) gestartet.
Für jede Aktion habe ich ein eigenes Script: Play, pause, 50% Lautstärke etc.
Gruß Marc
<?
//Sonos ZP IPAdresse
$address = "192.168.177.50"; // z.B. Bad
$action = "Play"; //Pause, Play, SetVolume, Next, Previous, Rewind
//$action = "SetMute";
$volume = 25; //Nur bei SetVolume
$domute = 0; //Nur bei SetMute / 0 > Musik / 1 > kein Ton
//--- Nix verändern ab hier
$content_pause='POST /MediaRenderer/AVTransport/Control HTTP/1.1
CONNECTION: close
HOST: '.$address.':1400
CONTENT-LENGTH: 252
CONTENT-TYPE: text/xml; charset="utf-8"
SOAPACTION: "urn:schemas-upnp-org:service:AVTransport:1#Pause"
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/enco...:Body><u:Pause xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"><InstanceID>0</InstanceID></u:Pause></s:Body></s:Envelope>';
$content_play='POST /MediaRenderer/AVTransport/Control HTTP/1.1
CONNECTION: close
HOST: '.$address.':1400
CONTENT-LENGTH: 266
CONTENT-TYPE: text/xml; charset="utf-8"
SOAPACTION: "urn:schemas-upnp-org:service:AVTransport:1#Play"
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/enco...s:Body><u:Play xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"><InstanceID>0</InstanceID><Speed>1</Speed></u:Play></s:Body></s:Envelope>';
$content_next='POST /MediaRenderer/AVTransport/Control HTTP/1.1
CONNECTION: close
HOST: '.$address.':1400
CONTENT-LENGTH: 250
CONTENT-TYPE: text/xml; charset="utf-8"
SOAPACTION: "urn:schemas-upnp-org:service:AVTransport:1#Next"
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/enco...s:Body><u:Next xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"><InstanceID>0</InstanceID></u:Next></s:Body></s:Envelope>';
$content_previous='POST /MediaRenderer/AVTransport/Control HTTP/1.1
CONNECTION: close
HOST: '.$address.':1400
CONTENT-LENGTH: 258
CONTENT-TYPE: text/xml; charset="utf-8"
SOAPACTION: "urn:schemas-upnp-org:service:AVTransport:1#Previous"
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/enco...dy><u:Previous xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"><InstanceID>0</InstanceID></u:Previous></s:Body></s:Envelope>';
$content_rewind='POST /MediaRenderer/AVTransport/Control HTTP/1.1
CONNECTION: close
HOST: '.$address.':1400
CONTENT-LENGTH: 296
CONTENT-TYPE: text/xml; charset="utf-8"
SOAPACTION: "urn:schemas-upnp-org:service:AVTransport:1#Seek"
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/enco...s:Body><u:Seek xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"><InstanceID>0</InstanceID><Unit>REL_TIME</Unit><Target>00:00:00</Target></u:Seek></s:Body></s:Envelope>';
$content_setvolume='POST /MediaRenderer/RenderingControl/Control HTTP/1.1
CONNECTION: close
HOST: '.$address.':1400
CONTENT-LENGTH: 32'.strlen($volume).'
CONTENT-TYPE: text/xml; charset="utf-8"
SOAPACTION: "urn:schemas-upnp-org:service:RenderingControl:1#SetVolume"
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/enco...y><u:SetVolume xmlns:u="urn:schemas-upnp-org:service:RenderingControl:1"><InstanceID>0</InstanceID><Channel>Master</Channel><DesiredVolume>'.$volume.'</DesiredVolume></u:SetVolume></s:Body></s:Envelope>';
$content_startradio='POST /MediaRenderer/AVTransport/Control HTTP/1.1
CONNECTION: close
HOST: '.$address.':1400
CONTENT-LENGTH: 1106
CONTENT-TYPE: text/xml; charset="utf-8"
SOAPACTION: "urn:schemas-upnp-org:service:AVTransport:1#SetAVTransportURI"
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/enco...AVTransportURI xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"><InstanceID>0</InstanceID><CurrentURI>x-rincon-mp3radio://lsd.newmedia.tiscali-business.com/bb/redirect.lsc?content=live&media=ms&stream= ndr/live/ndr1wellenord.wma</CurrentURI><CurrentURIMetaData><DIDL-Lite xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" xmlns:r="urn:schemas-rinconnetworks-com:metadata-1-0/" xmlns="urn:';
$content_startradio.='schemas-upnp-org:metadata-1-0/DIDL-Lite/"><item id="R:0/42" parentID="R:0" restricted="true"><dc:title>Wel le Nord</dc:title><upnp:class>object.item.audioIte m.audioBroadcast</upnp:class><desc id="cdudn" nameSpace="urn:schemas-rinconnetworks-com:metadata-1-0/">RINCON_AssociatedZPUDN</desc></item></DIDL-Lite></CurrentURIMetaData></u:SetAVTransportURI></s:Body></s:Envelope>';
$content_setmute='POST /MediaRenderer/RenderingControl/Control HTTP/1.1
CONNECTION: close
HOST: '.$address.':1400
CONTENT-LENGTH: 314
CONTENT-TYPE: text/xml; charset="utf-8"
SOAPACTION: "urn:schemas-upnp-org:service:RenderingControl:1#SetMute"
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/enco...ody><u:SetMute xmlns:u="urn:schemas-upnp-org:service:RenderingControl:1"><InstanceID>0</InstanceID><Channel>Master</Channel><DesiredMute>'.$domute.'</DesiredMute></u:SetMute></s:Body></s:Envelope>';
//send via socket
$port = 1400;
switch($action)
{
case "Pause":
$content = $content_pause;
break;
case "Play":
$content = $content_play;
break;
case "SetVolume":
$content = $content_setvolume;
break;
case "Next":
$content = $content_next;
break;
case "Previous":
$content = $content_previous;
break;
case "Rewind":
$content = $content_rewind;
break;
case "StartRadio":
$content = $content_startradio;
break;
case "SetMute":
$content = $content_setmute;
break;
}
$fp = fsockopen ($address, $port, $errno, $errstr, 10);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
fputs ($fp, $content);
$ret = "";
while (!feof($fp)) {
$ret.= fgets($fp,128);
}
fclose($fp);
}
//Rückgabe
if(strpos($ret, "200 OK") === false)
{
echo $ret;
} else {
echo "OK";
}
?>
Einen Kommentar schreiben:
-
Ein Gast antworteteDa kippst Du Öl ins Feuer... Ja aber ich geb zu, bei der derzeitigen Komplexität ist das schwierig...wenn ich Sie mal restlos verstehen würde ;-)
LG
Einen Kommentar schreiben:


Einen Kommentar schreiben: