UPNP functions - Skript aller A/V UPNP Befehle - Tester gesucht

So ähnlich… Jedenfalls brauchte ich danach erst mal ne Pause :D:D

Hallo Toni,

schön von Dir zu hören (lesen). UPNP erinnert mich ans Löwenzahn-Stechen. Kaum hat man die ausgestochen dreht man sich um und es grinsen einen wieder welche an. Hier ähnlich unerwartete Ungereimtheiten … :mad:

Verstehe Dich - irgendwann verliert man die Lust sich diesen Mist anzutun.

Ich bin aber zu ungeduldig, deshalb versuche ich schon weiterzukommen. Für mich funktioniert vieles auch schon (hätte ich erst nie gedacht !) es ist aber für viele aufgrund des Pseudo-Standards nicht einfach so übertragbar.

Momentan habe ich folgende Frage: ich versuche ein Discovery über einen geöffneten UDP (Multicast Addresse 239.255.255.250 Port 1900) mit angehängten Cutter und Registevariable und bekomme immer nur „1“ :confused:

Hier das Script:

$search = 'M-SEARCH * HTTP/1.1
ST: upnp:rootdevice
MAN: "ssdp:discover"
MX: 5
HOST: 239.255.255.250:1900
Content-Length: 0';


$discovery = USCK_SendText(11058 /*[Multicast Socket]*/, $search);

echo $discovery;

Hat jemand einen Tipp ? Die SuFu brachte mich nicht wirklich weiter.

Ich sehe im Debug-Modus etwas:

HTTP/1.1 200 OK
CACHE-CONTROL: max-age=1801
DATE: Sat, 13 Sep 2008 05:19:51 GMT
EXT:
LOCATION: http://192.168.178.27:8888/upnp_descriptor_0
SERVER: Trimedia pSOS+/NDK4.3 UPnP/1.0 MediabolicUPnP/-20110625.043845
ST: upnp:rootdevice
USN: uuid:b7822b84-9a6d-424f-8762-78843c63033b::upnp:rootdevice
X-AV-Server-Info: av=5.0; hn=""; cn=„Sony Corporation“; mn=„AV Receiver“; mv=„1.0“;

… aber wie bekomme ich das in eine Variable zum verarbeiten ?

Gruss

André

… hab es.

<?

//------------------------------------------------------------------------------
//UPNP_Discovery.ips.php--------------------------------------------------------
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
//M-Search an Multicast 239.255.255.250:1900 senden
//verkettet mit:
//   --> Multicast Socket
//   --> Registervariable
//   --> Verarbeitungsscript
//------------------------------------------------------------------------------

$search = 'M-SEARCH * HTTP/1.1
ST: upnp:rootdevice
MAN: "ssdp:discover"
MX: 5
HOST: 239.255.255.250:1900
Content-Length: 0';

$discovery = USCK_SendText(11058 /*[Multicast Socket]*/, $search);

?>

Und im mit der Registervariablen verketteten Script:

<?

// wenn das Skript von einer RegisterVariable-Instanz aus aufgerufen worden ist
if ($_IPS['SENDER'] == "RegisterVariable")
{
    // bereits im Puffer der Instanz vorhandene Daten in $data kopieren
    $data  = RegVar_GetBuffer($_IPS['INSTANCE']);
    // neu empfangene Daten an $data anhängen
    $data .= $_IPS['VALUE'];

    // wenn das Trennzeichen "HTTP/1.1 200 OK" in $data gefunden worden ist
    if (strpos($data, 'HTTP/1.1 200 OK'))
    {
        // $data in durch "HTTP/1.1 200 OK" separierte Datensätze zerlegen
        $datasets = explode('HTTP/1.1 200 OK', $data);

        // alle nicht durch "HTTP/1.1 200 OK" terminierten Datensätze ausgeben
        for ($i = 0; $i < count($datasets) - 1; $i++)
        {
            echo "empfangener Datensatz: ".$datasets[$i]."
";
        }

        // $data auf den Inhalt des letzten (unvollständigen) Datensatzes setzen
        $data = $datasets[count($datasets) - 1];
    }

    // Inhalt von $data im Puffer der RegisterVariable-Instanz speichern
    RegVar_SetBuffer($_IPS['INSTANCE'], $data);
}

$discovery = RegVar_GetBuffer(31090);

		$handle = fopen("Discovery.txt", "w"); 			//Buffer schreiben
		fwrite($handle, $discovery);
		fclose($handle);

SetValue(38991 /*[Audio\Tests\UPNP_Discovery\UPNP_Discovery]*/, $discovery);

?>

So bekomme ich alle Devices herein. Darin steht dann unter Location die …Description.xml

z.B.

LOCATION: http://192.168.178.27:8888/upnp_descriptor_0

Wenn ich die auswähle erhalte ich:

<?xml version="1.0" encoding="UTF-8"?>
-<root xmlns="urn:schemas-upnp-org:device-1-0">-<specVersion><major>1</major><minor>0</minor></specVersion>-<device><deviceType>urn:schemas-upnp-org:device:MediaRenderer:1</deviceType><friendlyName>STR-DN2010</friendlyName><manufacturer>Sony Corporation</manufacturer><manufacturerURL>http://www.sony.net/</manufacturerURL><modelDescription>IPSTR1</modelDescription><modelName>STR-DN2010</modelName><modelNumber/><modelURL>http://www.sony.net/</modelURL><UDN>uuid:b7822b84-9a6d-424f-8762-78843c63033b</UDN>-<serviceList>-<service><serviceType>urn:schemas-upnp-org:service:AVTransport:1</serviceType><serviceId>urn:upnp-org:serviceId:AVTransport</serviceId><controlURL>/upnp_control_0</controlURL><eventSubURL>/upnp_event_0</eventSubURL><SCPDURL>/scpd/AVTransport_1</SCPDURL></service>-<service><serviceType>urn:schemas-upnp-org:service:ConnectionManager:1</serviceType><serviceId>urn:upnp-org:serviceId:ConnectionManager</serviceId><controlURL>/upnp_control_1</controlURL><eventSubURL>/upnp_event_1</eventSubURL><SCPDURL>/scpd/ConnectionManager_1</SCPDURL></service>-<service><serviceType>urn:schemas-upnp-org:service:RenderingControl:1</serviceType><serviceId>urn:upnp-org:serviceId:RenderingControl</serviceId><controlURL>/upnp_control_2</controlURL><eventSubURL>/upnp_event_2</eventSubURL><SCPDURL>/scpd/RenderingControl_1</SCPDURL></service>-<service><serviceType>urn:schemas-sony-com:service:IRCC:1</serviceType><serviceId>urn:schemas-sony-com:serviceId:IRCC</serviceId><controlURL>/upnp_control_3</controlURL><eventSubURL>/upnp_event_3</eventSubURL><SCPDURL>scpd/IRCC_DMR_1</SCPDURL></service></serviceList><presentationURL/><dlna:X_DLNADOC xmlns:dlna="urn:schemas-dlna-org:device-1-0">DMR-1.50</dlna:X_DLNADOC>-<av:X_IRCC_DeviceInfo xmlns:av="urn:schemas-sony-com:av"><av:X_IRCC_Version>1.0</av:X_IRCC_Version>-<av:X_IRCC_CategoryList>-<av:X_IRCC_Category><av:X_CategoryInfo>AAMAAAEQ</av:X_CategoryInfo></av:X_IRCC_Category></av:X_IRCC_CategoryList></av:X_IRCC_DeviceInfo>-<iconList>-<icon><mimetype>image/jpeg</mimetype><width>48</width><height>48</height><depth>24</depth><url>/Image/Network_DMR_i_JPEG_SM_N21.jpg</url></icon>-<icon><mimetype>image/png</mimetype><width>48</width><height>48</height><depth>24</depth><url>/Image/Network_DMR_i_PNG_SM_N21.png</url></icon>-<icon><mimetype>image/jpeg</mimetype><width>120</width><height>120</height><depth>24</depth><url>/Image/Network_DMR_i_JPEG_LRG_N21.jpg</url></icon>-<icon><mimetype>image/png</mimetype><width>120</width><height>120</height><depth>24</depth><url>/Image/Network_DMR_i_PNG_LRG_N21.png</url></icon></iconList>-<av:X_IRCCCodeList xmlns:av="urn:schemas-sony-com:av"><av:X_IRCCCode command="Power ON">AAAAAgAAADAAAAAuAw==</av:X_IRCCCode><av:X_IRCCCode command="Power OFF">AAAAAgAAADAAAAAvAw==</av:X_IRCCCode></av:X_IRCCCodeList><av:X_MaxBGMCount xmlns:av="urn:schemas-sony-com:av">0</av:X_MaxBGMCount><av:X_StandardDMR xmlns:av="urn:schemas-sony-com:av">1.0</av:X_StandardDMR></device></root>

(wird ein wenig unglücklich dargestellt; ein Screenshot reichte jedoch nicht)

Dann kann ich unter <Service> die controlURL´s auslesen:

Ich brauche jetzt noch eine Möglichkeit vorher den Buffer zu leeren:

RegVar_SetBuffer($_IPS[‚INSTANCE‘], „“);

an den Anfang gesetzt löscht mir leider alles bis auf einen Eintrag. Ziel wäre, über einen Aktualisieren Button oder Zeit-gesteuert immer wieder neu aufrufen zu können.

Viele Grüsse

André

Hallo NickBlue

Sehr schön. Das kommt hier ja in Schwung …

An LG bin ich auch interssiert, da ich zumindest einen TV (LG LM660S) davon habe :slight_smile:
Theoretisch müsste der ja sogar Video damit bringen (wenn der Header stimmt). Bin deshalb an Twonky dran. Man kommt offenbar nicht daran vorbei vorher die Geräte zu fragen, was sie sich zutrauen :wink:

Gruss

André