Hallo,
ich habe nun über eine Registervariable die Antworten der Sonos Geräte empfangen und (ich denke) korrekt zerlegt in einzelne Requests (um diese später weiterzuverarbeiten).
Der Code dazu ist leider nicht schön und ich denke es geht bestimmt einfacher - ich habe leider keine Idee wie man sowas am Besten macht (das mit dem „split -> implode -> explode“ müsste man doch eigentlich wesentlich besser und eleganter lösen können, oder?)? :mad:
<?
// br_ips: br_sonos_test_regvar (for sonos upnp events)
// Test / Example script for PHPSonos
// Include br_ips Libs here for IPSLogger
require ("functions.inc.php");
$RegVarID = $IPS_INSTANCE;
$newdata = $IPS_VALUE;
// fetch data in buffer
$data = RegVar_GetBuffer ( $RegVarID );
// add received data
$data .= $newdata;
echo "!!!!".strpos($data,"NOTIFY / HTTP/1.1")."!!!".strpos($data,"<e:propertyset xmlns")."!!!".strpos($data,"</e:propertyset>");
// write back data to variable for use in other scripts if not complete
if((strpos($data,"HTTP/1.1")!==FALSE)&&(strpos($data,"<e:propertyset xmlns")!==FALSE)&&(strpos($data,"</e:propertyset>")!==FALSE))
{
$split = preg_split('!<\/e:propertyset>!', $data);
$join = implode("</e:propertyset>DummySEP",$split);
$split = explode ("DummySEP", $join);
$ausgabe = $split;
$datei = fopen("_subscribe.txt","a+");
fwrite($datei,"
--SOM--------------------------------------------------!
");
foreach ($ausgabe as $item){
// output only 2 test elems
$datei = fopen("_subscribe.txt","a+");
fwrite($datei,"
------------BEG:
". $item ."
--------------!END
");
}
fwrite($datei,"
--------------------------------------------------EOM--!
");
fclose($datei);
} else
{
RegVar_SetBuffer($RegVarID, $data);
}
?>
Ausgabe (Beispiel):
--SOM--------------------------------------------------!
------------BEG:
NOTIFY / HTTP/1.1
HOST: 192.168.0.5:6666
CONTENT-TYPE: text/xml
CONTENT-LENGTH: 5707
NT: upnp:event
NTS: upnp:propchange
SID: uuid:RINCON_000E5832FB5C01400_sub0000006347
SEQ: 0
<e:propertyset xmlns:e="urn:schemas-upnp-org:event-1-0"><e:property><LastChange><Event xmlns="urn:schemas-upnp-org:metadata-1-0/AVT/" xmlns:r="urn:schemas-rinconnetworks-com:metadata-1-0/"><InstanceID val="0"><TransportState val="PLAYING"/><CurrentPlayMode val="NORMAL"/><CurrentCrossfadeMode val="0"/><NumberOfTracks val="3"/><CurrentTrack val="2"/><CurrentSection val="0"/><CurrentTrackURI val="x-rincon-mp3radio://stream.antenne.com/hra-nds/mp3-64/tunein/"/><CurrentTrackDuration val="0:00:00"/><CurrentTrackMetaData val="<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="-1" parentID="-1" restricted="true"><res protocolInfo="sonos.com-http:*:*:*">x-sonosapi-stream:s116053?sid=254&amp;flags=32</res><r:streamContent>Ville Valo &amp; Natalia Avelon - Summer Wine | Hit-Radio Antenne </r:streamContent><r:radioShowMd></r:radioShowMd><upnp:albumArtURI>/getaa?s=1&amp;u=x-sonosapi-stream%3as116053%3fsid%3d254%26flags%3d32</upnp:albumArtURI><dc:title>x-sonosapi-stream:s116053?sid=254&amp;flags=32</dc:title><upnp:class>object.item</upnp:class></item></DIDL-Lite>"/><r:NextTrackURI val="aac://hra.hoerradar.de/aac-48_hra-nds#4ro1n49s|0|0|gharva|nnp-48|uen-aqf"/><r:NextTrackMetaData val="<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="-1" parentID="-1" restricted="true"><res protocolInfo="aac:*:application/octet-stream:*">aac://hra.hoerradar.de/aac-48_hra-nds#4ro1n49s|0|0|gharva|nnp-48|uen-aqf</res><dc:title>aac-48_hra-nds#4ro1n49s|0|0|gharva|nnp-48|uen-aqf</dc:title><upnp:class>object.item</upnp:class></item></DIDL-Lite>"/><r:EnqueuedTransportURI val="x-sonosapi-stream:s116053?sid=254&flags=32"/><r:EnqueuedTransportURIMetaData val="<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="-1" parentID="-1" restricted="true"><dc:title>Hit-Radio Antenne</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>"/><PlaybackStorageMedium val="NETWORK"/><AVTransportURI val="x-sonosapi-stream:s116053?sid=254&flags=32"/><AVTransportURIMetaData val="<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="-1" parentID="-1" restricted="true"><dc:title>Hit-Radio Antenne</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>"/><CurrentTransportActions val="Play, Stop, Pause, Seek, Next, Previous"/><TransportStatus val="OK"/><r:SleepTimerGeneration val="0"/><r:AlarmRunning val="0"/><r:SnoozeRunning val="0"/><r:RestartPending val="0"/><TransportPlaySpeed val="NOT_IMPLEMENTED"/><CurrentMediaDuration val="NOT_IMPLEMENTED"/><RecordStorageMedium val="NOT_IMPLEMENTED"/><PossiblePlaybackStorageMedia val="NONE, NETWORK"/><PossibleRecordStorageMedia val="NOT_IMPLEMENTED"/><RecordMediumWriteStatus val="NOT_IMPLEMENTED"/><CurrentRecordQualityMode val="NOT_IMPLEMENTED"/><PossibleRecordQualityModes val="NOT_IMPLEMENTED"/><NextAVTransportURI val="NOT_IMPLEMENTED"/><NextAVTransportURIMetaData val="NOT_IMPLEMENTED"/></InstanceID></Event></LastChange></e:property></e:propertyset>
--------------!END
------------BEG:
NOTIFY / HTTP/1.1
HOST: 192.168.0.5:6666
CONTENT-TYPE: text/xml
CONTENT-LENGTH: 5707
NT: upnp:event
NTS: upnp:propchange
SID: uuid:RINCON_000E5832FB5C01400_sub0000006351
SEQ: 0
<e:propertyset xmlns:e="urn:schemas-upnp-org:event-1-0"><e:property><LastChange><Event xmlns="urn:schemas-upnp-org:metadata-1-0/AVT/" xmlns:r="urn:schemas-rinconnetworks-com:metadata-1-0/"><InstanceID val="0"><TransportState val="PLAYING"/><CurrentPlayMode val="NORMAL"/><CurrentCrossfadeMode val="0"/><NumberOfTracks val="3"/><CurrentTrack val="2"/><CurrentSection val="0"/><CurrentTrackURI val="x-rincon-mp3radio://stream.antenne.com/hra-nds/mp3-64/tunein/"/><CurrentTrackDuration val="0:00:00"/><CurrentTrackMetaData val="<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="-1" parentID="-1" restricted="true"><res protocolInfo="sonos.com-http:*:*:*">x-sonosapi-stream:s116053?sid=254&amp;flags=32</res><r:streamContent>Ville Valo &amp; Natalia Avelon - Summer Wine | Hit-Radio Antenne </r:streamContent><r:radioShowMd></r:radioShowMd><upnp:albumArtURI>/getaa?s=1&amp;u=x-sonosapi-stream%3as116053%3fsid%3d254%26flags%3d32</upnp:albumArtURI><dc:title>x-sonosapi-stream:s116053?sid=254&amp;flags=32</dc:title><upnp:class>object.item</upnp:class></item></DIDL-Lite>"/><r:NextTrackURI val="aac://hra.hoerradar.de/aac-48_hra-nds#4ro1n49s|0|0|gharva|nnp-48|uen-aqf"/><r:NextTrackMetaData val="<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="-1" parentID="-1" restricted="true"><res protocolInfo="aac:*:application/octet-stream:*">aac://hra.hoerradar.de/aac-48_hra-nds#4ro1n49s|0|0|gharva|nnp-48|uen-aqf</res><dc:title>aac-48_hra-nds#4ro1n49s|0|0|gharva|nnp-48|uen-aqf</dc:title><upnp:class>object.item</upnp:class></item></DIDL-Lite>"/><r:EnqueuedTransportURI val="x-sonosapi-stream:s116053?sid=254&flags=32"/><r:EnqueuedTransportURIMetaData val="<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="-1" parentID="-1" restricted="true"><dc:title>Hit-Radio Antenne</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>"/><PlaybackStorageMedium val="NETWORK"/><AVTransportURI val="x-sonosapi-stream:s116053?sid=254&flags=32"/><AVTransportURIMetaData val="<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="-1" parentID="-1" restricted="true"><dc:title>Hit-Radio Antenne</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>"/><CurrentTransportActions val="Play, Stop, Pause, Seek, Next, Previous"/><TransportStatus val="OK"/><r:SleepTimerGeneration val="0"/><r:AlarmRunning val="0"/><r:SnoozeRunning val="0"/><r:RestartPending val="0"/><TransportPlaySpeed val="NOT_IMPLEMENTED"/><CurrentMediaDuration val="NOT_IMPLEMENTED"/><RecordStorageMedium val="NOT_IMPLEMENTED"/><PossiblePlaybackStorageMedia val="NONE, NETWORK"/><PossibleRecordStorageMedia val="NOT_IMPLEMENTED"/><RecordMediumWriteStatus val="NOT_IMPLEMENTED"/><CurrentRecordQualityMode val="NOT_IMPLEMENTED"/><PossibleRecordQualityModes val="NOT_IMPLEMENTED"/><NextAVTransportURI val="NOT_IMPLEMENTED"/><NextAVTransportURIMetaData val="NOT_IMPLEMENTED"/></InstanceID></Event></LastChange></e:property></e:propertyset>
--------------!END
Habt ihr vieleicht eine Idee? :o
Grüße, Benjamin