Sony AV - Einbindung in IPS

Hallo zusammen und schönen Sonntag !

Hat schon jemand erfolgreich versucht Geräte von Sony in IPS zu integrieren ?

Spezifisch denke ich an einen STR-DN 2010 (AV-Receiver), SA-NS300 (DLNA-Lautsprecher), Fernseher und PS3.
Der Gedanke ist, per DLNA bestimmte Videos oder MP3 an die bereffenden Geräte zu schicken, ber auch Einstellungen wie Lautstärke etc. vornehmen zu können. Vernetzt sind die Geräte, wobei vorallem PS3 Mediaserver oder ganz normal WMP zum abspielen genutzt wird.

In der Forensuche war nichts Schlüssiges zu finden. Bei anderen wie Onkyo, Denon etc. soll es ja gehen.

Hat wirklich keiner eine Idee ?

Ich habe mich ein wenig mit den UPnP-Tools (Developer Tools - Open Software Projects) beschäftigt und die Geräte ansprechen können. Man kann sie auch darüber zumindest rudimentär steuern und Stacks anlegen. Lässt sich das nicht irgendwie in eine Steuerung implementieren ? Für den WHS gibt es das …

Hallo,

direkt helfen kann ich dir leider nicht, aber evtl. kann ich dir ein paar Ideen liefern.

Wenn die Geräte über einen Webbrowser angesprochen und gesteuert werden können hast du große Chancen dies auch mit IPS zu machen.
Auch ein Indiz für Machbarkeit ist oft das vorhandensein einer APP fürs Smartphone.
Über die Homepage des Herstellers (oder Hersteller-Forum) bekommt man dann auch eine Beschreibung der Befehle.

Für die Umsetzung kannst du die Beispiele aus diesem Forum benutzen (z.B. Steuerung denon)

Gruß, Peter

Eigentlich bin ich Sony-Fan. Aber die Firmenpolitik ist etwas altbacken. Man findet nichts zu Schnittstellen oder Befehle, welche dokumentiert sind. :mad:

Bei HomeSeer gibt es nur ein DVD-Wechsler-Plugin. Dieser kommuniziert aber über RS232. Ich denke, die Befehle wären nicht brauchbar …

Allgemeine UPNP-Befehle müssten doch aber gehen. Der Windows Media Player kann die Devices ja auch ansprechen.

Hallo Mitstreiter,

ich bin bisher erfolglos auf der Suche nach einer Möglichkeit per IPS UPNP-Geräte ansteuern zu können (urn:schemas-upnp-org:device:MediaRenderer:1).
Es wäre ja schön Netzwerk-Player Marken-unabhängig ansteuern zu können.

Spezifisch denke ich zwar an einen STR-DN 2010 (AV-Receiver), SA-NS300 (DLNA-Lautsprecher), Fernseher und ggf. PS3, aber ein allgemeines Script wäre das eigentliche Ziel.

Der Gedanke ist, per DLNA bestimmte Videos aber vorallem MP3 an die betreffenden Geräte zu schicken, aber auch Einstellungen wie Lautstärke etc. vornehmen zu können. Vernetzt sind die Geräte, wobei vorallem PS3 Mediaserver oder ganz normal WMP zum abspielen genutzt wird.

Meine bisherigen Treads führten dabei leider ins Leere, wobei der Ansatz einer Geräte-spezifischen Steuerung sicher falsch war:

Nun habe ich bei der Durchsicht der Sonos-Scripts gesehen, dass diese Geräte offenbar auch über UPNP angesteuert werden :slight_smile:
Und so dachte ich mir, dass in diesem Forum die kompetentesten Ansprechpartner am Werke sind.

Ich habe zumindest über die „Developer Tools for UPnP™ Technology“ und die UPnP-Database einige Daten zusammentragen können (siehe Anhänge).

Vielleicht kann mir jemand dabei helfen, dies zu portieren, da mir dazu einfach die Programmiererfahrung fehlt.

Viele Grüße

André

UPnP-Database.doc (147 KB)

Hallo Gemeinde,

nachdem ich mich in den vergangenen Monaten mit Rolläden, Licht und Heizung beschäftigt habe möchte ich den Thread zu UPNP nochmal hochholen.

Ich habe beim durchstöbern des Forums mir den Anfang von Sonos nochmal angesehen und folgendes vielversprechendes Script von paresy entdeckt:


<?

//Sonos ZP IPAdresse
$address = "192.168.3.183";

if($IPS_SENDER == "Designer")
{
 $action = $IPS_COMPONENT; //IPSYMID Feld verwenden
}
else if($IPS_SENDER == "Variable")
{
 $action = $IPS_VALUE; //Per Variable getriggert
}
else //Aktion über Execute gestartet. Festgelegte Aktion starten
{
 $action = "Play"; //Pause, Play, Next, Previous, Rewind, SetVolume, SetPlayMode, SetMute, SetRadio, ClearQueue, AddToQueue, RemoveFromQueue, SetTrack
}

$volume = 25; //Nur bei SetVolume
$mute = 0; //Nur bei SetMute / 0 > Musik / 1 > kein Ton
$mode = "NORMAL"; //Nur Bei SetPlayMode / REPEAT_ALL, SHUFFLE, NORMAL
$track = 4; //Track Nummer zum ausählen/löschen

//Klassik Radio
$radio = "x-rincon-mp3radio://players.creacast.com/creacast/klassik/playlist.pls";
//NDR2
//$radio = "x-rincon-mp3radio://lsd.newmedia.tiscali-business.com/bb/redirect.lsc?content=live&media=ms&stream=ndr/live/ndr2.wma";

//Datei laden
$file = "x-file-cifs://ipsserver/Public/test.mp3";

//--- 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/encoding/"><s: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/encoding/"><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/encoding/"><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/encoding/"><s:Body><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/encoding/"><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/encoding/"><s:Body><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_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/encoding/"><s:Body><u:SetMute xmlns:u="urn:schemas-upnp-org:service:RenderingControl:1"><InstanceID>0</InstanceID><Channel>Master</Channel><DesiredMute>'.$mute.'</DesiredMute></u:SetMute></s:Body></s:Envelope>';

$content_setplaymode='POST /MediaRenderer/AVTransport/Control HTTP/1.1
CONNECTION: close
HOST: '.$address.':1400
CONTENT-LENGTH: '.(291+strlen($mode)).'
CONTENT-TYPE: text/xml; charset="utf-8"
SOAPACTION: "urn:schemas-upnp-org:service:AVTransport:1#SetPlayMode"

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body><u:SetPlayMode xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"><InstanceID>0</InstanceID><NewPlayMode>'.$mode.'</NewPlayMode></u:SetPlayMode></s:Body></s:Envelope>';

$content_setradio='POST /MediaRenderer/AVTransport/Control HTTP/1.1
CONNECTION: close
HOST: '.$address.':1400
CONTENT-LENGTH: '.(974+strlen(htmlspecialchars($radio))).'
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/encoding/"><s:Body><u:SetAVTransportURI xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"><InstanceID>0</InstanceID><CurrentURI>'.htmlspecialchars($radio).'</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:schemas-upnp-org:metadata-1-0/DIDL-Lite/"><item id="R:0/0/0" parentID="R:0/0" restricted="true"><dc:title>IP-Symcon Radio</dc:title><upnp:class>object.item.audioItem.audioBroadcast</upnp:class><desc id="cdudn" nameSpace="urn:schemas-rinconnetworks-com:metadata-1-0/">SA_RINCON65031_</desc></item></DIDL-Lite></CurrentURIMetaData></u:SetAVTransportURI></s:Body></s:Envelope>';

$content_clearqueue='POST /MediaRenderer/AVTransport/Control HTTP/1.1
CONNECTION: close
HOST: '.$address.':1400
CONTENT-LENGTH: 290
CONTENT-TYPE: text/xml; charset="utf-8"
SOAPACTION: "urn:schemas-upnp-org:service:AVTransport:1#RemoveAllTracksFromQueue"

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body><u:RemoveAllTracksFromQueue xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"><InstanceID>0</InstanceID></u:RemoveAllTracksFromQueue></s:Body></s:Envelope>';

$content_addtoqueue='POST /MediaRenderer/AVTransport/Control HTTP/1.1
CONNECTION: close
HOST: '.$address.':1400
CONTENT-LENGTH: '.(438+strlen(htmlspecialchars($file))).'
CONTENT-TYPE: text/xml; charset="utf-8"
SOAPACTION: "urn:schemas-upnp-org:service:AVTransport:1#AddURIToQueue"

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body><u:AddURIToQueue xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"><InstanceID>0</InstanceID><EnqueuedURI>'.$file.'</EnqueuedURI><EnqueuedURIMetaData></EnqueuedURIMetaData><DesiredFirstTrackNumberEnqueued>0</DesiredFirstTrackNumberEnqueued><EnqueueAsNext>1</EnqueueAsNext></u:AddURIToQueue></s:Body></s:Envelope>';

$content_removefromqueue='POST /MediaRenderer/AVTransport/Control HTTP/1.1
CONNECTION: close
HOST: '.$address.':1400
CONTENT-LENGTH: '.(307+strlen($track)).'
CONTENT-TYPE: text/xml; charset="utf-8"
SOAPACTION: "urn:schemas-upnp-org:service:AVTransport:1#RemoveTrackFromQueue"

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body><u:RemoveTrackFromQueue xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"><InstanceID>0</InstanceID><ObjectID>Q:0/'.$track.'</ObjectID></u:RemoveTrackFromQueue></s:Body></s:Envelope>';

$content_settrack='POST /MediaRenderer/AVTransport/Control HTTP/1.1
CONNECTION: close
HOST: '.$address.':1400
CONTENT-LENGTH: '.(288+strlen($track)).'
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/encoding/"><s:Body><u:Seek xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"><InstanceID>0</InstanceID><Unit>TRACK_NR</Unit><Target>'.$track.'</Target></u:Seek></s:Body></s:Envelope>';

//send via socket
$port = 1400;

switch($action)
{
   case "Pause":
    $content = $content_pause;
    break;
   case "Play":
    $content = $content_play;
    break;
   case "Next":
    $content = $content_next;
    break;
   case "Previous":
    $content = $content_previous;
    break;
   case "Rewind":
    $content = $content_rewind;
    break;
   case "SetVolume":
    $content = $content_setvolume;
    break;
   case "SetMute":
    $content = $content_setmute;
    break;
   case "SetPlayMode":
    $content = $content_setplaymode;
    break;
   case "SetRadio":
    $content = $content_setradio;
    break;
   case "ClearQueue":
    $content = $content_clearqueue;
    break;
   case "AddToQueue":
    $content = $content_addtoqueue;
    break;
   case "RemoveFromQueue":
    $content = $content_removefromqueue;
    break;
   case "SetTrack":
    $content = $content_settrack;
    break;
}

$fp = fsockopen ($address, $port, $errno, $errstr, 10);
if (!$fp) {
    echo "$errstr ($errno)<br />
";
} 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";
}

?> 

Die Befehle sehen aus, als ob sie den upnp-Standard verwenden. Ein Ausführen des Scripts (IP und Port angepasst) gibt mir zumindest schon einmal folgendes aus:

 
HTTP/1.1 404 Not Found
X-AV-Server-Info: av="5.0"; cn="Sony Corporation"; mn="SA-NS400"; mv="1.00"
X-AV-Physical-Unit-Info: pa="SA-NS400"

Kann mir jemand helfen, wie es zumindest weitergehen könnte? Wie kann ich das einbinden (Variablen, Socket, etc.). Mein Traum wäre nach wie vor UPNP-Geräte in verschiedenen Räumen direkt über IPS zu beschicken.
(Sockets vorhanden; alle UPNP / DLNA - kompatibel und mit diversen Apps (Sony Network Audio Remote, Twonky, Kinsky etc.) perfekt ansprechbar)

Insbesondere möchte ich paresy ansprechen, da er das Script verfasste und ich nach allem was ich hier so lese nur meinen Hut ziehen kann: Was man mit IPS so alles programmieren kann ! (wenn man es kann :slight_smile: )

Viele Grüße und Danke

André

ab und zu muss ja auch ein IPS-Entwickler zeigen, was mit IPS alles geht :smiley:

Ja, das ist wohl wahr.

Schade eigentlich, dass das Thema aber offenbar keinen wirklich interessiert - oder ? :confused:

Ich persönlich sehe in einer Haussteuerung aber auch das Potential Multimedia zu transportieren, wobei viele Geräte heutzutage UPNP / DLNA können. Auf spezielle Nischen wie Sonos möchte ich aber nicht extra umsteigen.

Gruß

André

Hallo Raketenschnecke,

Du als Erklärbär und sehr aktiver Entwickler könntest mir vielleicht ein paar Anhaltspunte geben ?

Es müsste doch möglich sein die Entertainment-Steuerung zu nutzen und die spezifischen Befehle per WinShark auszulesen und dort zu implementieren. Doch wie stelle ich das an ?

Viele Grüße

André

ich als PHP-Anfänger kann dazu leider nicht allzuviel sagen: Wireshark ist eher ein Thema für Netzwerk-Spezialisten oder für Leute mit großen Ohren („mal das Ohr auf die Schiene legen“ ;)), bevor ich hier halbgaren Unsinn verbreite hoffe ich lieber auf weitere, aber qualifiziertere Meldungen zu deiner Frage.

Bei der Entertainment-Steuerung (du meinst die von Brownson?) kann ich auch nicht viel mehr sagen: da hab ich mich nie mit befasst, weil ich zu deer Zeit schon meine DENON-Anbindung fertig hatte. Und die ist nach ganz anderem Muster entstanden: DENON liefert sehr gut dokumentierte Schnittstellen-Definitionen mit, die „einfach nur“ ins PHP gedengelt werden müssen

Sorry, ich würd gern helfen, aber hier hab ich kein hilfr4eiches Wissen, was ich absondern könnte :o

… trotzdem Danke Raketenschnecke. Ehrliche Antwort.

Versuche gerade den NetPlayer zum Laufen zu bringen. Muss da mal ein wenig herumspielen, ob ich die Befehle irgendwie includen kann.

Viele Grüße

André