Sonos Modul

Wow das war jetzt aber eine schnelle Antwort.

Für IPSView habe ich es jetzt über die HTML-Box gelöst, die wird sofort aktualisiert und passt perfekt.

Nein, das Cover wird in IPS bzw. WebFront leider nicht angezeigt.

In der Detail-Variable in IPS steht:

<table width="100%">
                          <tr>
                            <td>
                              <div style="text-align: right;">
                                <div><b>Welchen Promi suchen wir? Sichert euch eure Chance auf 3.333 Euro Promi-Prämie</b></div>
                                <div> </div>
                                <div>Bayern 3</div>
                              </div>
                            </td></tr>
                        </table>

Also ohne Cover-URL

Kannst du das mal bei dir testen?

Gruß Alex

Leider nein, da ich zur Zeit keine Sonos vor Ort habe. Aber da kann auch am ehesten Thorsten was dazu sagen wann denn momentan ein Cover bei einem Radiosender in der Detailanzeige vom Modul angezeigt wird und wann nicht.

O.K. danke.

Hat irgendjemamd eine Antwort auf meine Frage?

Gruß Alex

Hallo,

Die Kommunikation mit den Boxen läuft immer über den gleichen Port. Daher ist es eher unwarscheinlich, dass es erst geht, dann nicht mehr.

Wenn ich Deine Logs richtig lesen, läuft Dein IPS auf einem windows Kiste. Die haben schon mal Firewalls installiert…
Das Sonos Modul macht recht oft einen Request um herauszufinden was da gerade auf der Box so abgeht.
Da kann es gut vorkommen, dass eine Firewall das als DOS erkennt…

Der Fehler ist eindeutig:
„Es konnte keine Verbindung hergestellt werden, da der Zielcomputer die Verbindung verweigerte.“ --> Die Box antwortet nicht.

Entweder ist die Adresse/IP falsch, oder der port 1400 wird dorthin geblockt.
Hast Du mal versucht in einem Browser von Deinem IPS Host aus z.b. „http://<sonos ip>:1400/status/topology“ zu erreichen? Geht das?

Gruß,
Thorsten

Hallo,

also:

wenn der radiosender über tuneIn kommt, versuche ich die Station ID aus dem URI auszulesen:

$stationID = preg_replace("#(.*)x-sonosapi-stream:(.*?)\?sid(.*)#is",'$2',$mediaInfo['CurrentURI']);

wenn ich diese finde rufe ich die Infos von Radiotime ab und lese das Logo aus.

Als Fallback habe ich noch ein Image in der ausgelieferten Senderliste drin.

Und nur wenn da etwas gefunden wird, wird das Logo angezeigt.

Hift Dir das?

Wenn nicht poste mal die rückgabe von:


include_once("../modules/SymconSonos/Sonos/sonosAccess.php");
$sonos            = new SonosAccess("<Deine Box IP oder Hostname>");

var_dump($sonos->GetMediaInfo()['CurrentURI']);

Gruß,
Thorsten

Hallo Thorsten,

vielen Dank für deine Unterstützung.
Habe dien Script mal ausgeführt.
Wenn ich Bayern 3 über die Sonos App oder die Favoriten im Webfront starte, bekomme ich folgende Ausgabe (kein Cover):

string(41) „x-sonosapi-stream:s14991?sid=254&flags=32“

Starte ich Bayern 3 im WebFront über deine Stationliste kommt (mit Cover):
string(47) „x-rincon-mp3radio://streams.br.de/bayern3_2.m3u“

Instanz.PNG

Ich hoffe, dass hilft weiter.

Gruß Alex

Hi,

Da sollte per regex „s14991“ ausgefiltert werden. Bei Online regex tester and debugger: PHP, PCRE, Python, Golang and JavaScript passiert das auch…

Damit wird dann http://opml.radiotime.com/Describe.ashx?c=nowplaying&id=s14991 (mit noch 2 optionen mehr) aufgerufen und aus der Antwort <logo>http://cdn-radiotime-logos.tunein.com/s14991.png</logo> extrahiert.

Kann es sein, dass Dein IPS es nicht schafft radiotime.com abzurufen?

Bei mir bekomme ich genau für diesen Stream ein Logo angezeigt…

Ja dafür zieht der von mir beschriebene Fallback.

Gruß,
Thorsten

Hallo Thorsten,

ich bin noch in der Arbeit.
Wie kann ich es testen, ob IPS radiotime.com abrufen kann?
Reicht es aus, wenn ich auf IPS-Rechner über den Browser radiotime aufrufe?

Gruß Alex

Hallo,

grundsätzlich ja, aber ich habe auch mal den Teil aus dem „_updateStatus“ script extrahiert:


<?
include_once("../modules/SymconSonos/Sonos/sonosAccess.php");


$vidInstance = 31596 /*[Sonos\Küche]*/;

$ip      = IPS_GetProperty($vidInstance, "IPAddress");

$sonos            = new SonosAccess($ip);
$mediaInfo = $sonos->GetMediaInfo();
print "URI:			";
var_dump($sonos->GetMediaInfo()['CurrentURI']);

$stationID = preg_replace("#(.*)x-sonosapi-stream:(.*?)\?sid(.*)#is",'$2',$mediaInfo['CurrentURI']);
print "StationID:	";
var_dump($stationID);

$image = "";
 if($stationID && $stationID[0]=="s"){
   $serial = substr(IPS_GetProperty($vidInstance ,"RINCON"), 7,12);
   $result = @file_get_contents("http://opml.radiotime.com/Describe.ashx?c=nowplaying&id=".$stationID."&partnerId=IAeIhU42&serial=".$serial);
   print "Result:		";
	var_dump($result);
   $image  = preg_replace('#(.*)<LOGO>(.*?)\</LOGO>(.*)#is','$2',$result);
 }
print "Image:		";
var_dump($image);
?>

Nur ganz oben den Parameter „$vidInstance“ auf die relevante Sonos Object ID ändern.
Am besten im script „HTML filtern“ ausschalten :wink:

Gruß,
Thorsten

Hallo Thorsten,

bin jetzt zu Hause.

Starte ich Bayern3 aus IPS (mit Cover) kommt:
URI: string(47) „x-rincon-mp3radio://streams.br.de/bayern3_2.m3u“
StationID: string(47) „x-rincon-mp3radio://streams.br.de/bayern3_2.m3u“
Image: string(0) „“

Starte ich Bayern3 aus den Favoriten oder Sonos (ohne Cover) kommt:
URI: string(41) „x-sonosapi-stream:s14991?sid=254&flags=32“
StationID: string(6) „s14991“
Result: bool(false)
Image: string(0) „“

Irgendwie komisch, das bei mir kein Cover angezeigt wird :mad:.

Wie kann ich das ändern?
IPS läuft auf WHS 2011. Blockiert hier evtl. was?

Gruß Alex

Das ist jetzt aber das von IPS aus abgestartete, oder?

Gruß,
Thorsten

Upps, hab nicht bemerkt,dass du schon geantwortet hast, sorry.

Direkt vom IPS-Server kommt:
URI: string(41) „x-sonosapi-stream:s14991?sid=254&flags=32“
StationID: string(6) „s14991“
Result: bool(false)
Image: string(0) „“

Gruß Alex

Edit: Gerade noch vom Server, als auch am zweiten Rechner getestet. Beide zeigen jetzt das Ergebnis aus diesem Post.
Bayern3 läuft auf der Sonos Box. Sender am Pad (Sonos-App) gestartet.

Hi,

das bedeutet, dass die Abfrage der Webseite fehlerhaft ist.

Mach mal das @ vor file_get_contents weg. Dann werden die Fehlermeldungen nicht mehr unterdrückt.

Gruß,
Thorsten

Morgen,

URI:			string(41) "x-sonosapi-stream:s14991?sid=254&flags=32"
StationID:	string(6) "s14991"
Result:		string(698) "<?xml version="1.0" encoding="UTF-8"?>
<opml version="1">
	<head>
	<status>200</status>
	<ttl>3513</ttl>	
	</head>
	<body>
<outline type="text" text="BAYERN 3 97.3" guide_id="s14991" key="station" image="http://cdn-radiotime-logos.tunein.com/s14991q.png" preset_id="s14991"/>
<outline type="text" text="Die Frühaufdreher" guide_id="p225708" seconds_remaining="3473" duration="14400" key="show"/>
<outline type="text" text="Morning Shows"/>
<outline type="text" text="57m remaining"/>
<outline type="object" text="NowPlaying">
<nowplaying>
  <logo>http://cdn-radiotime-logos.tunein.com/s14991.png</logo>
  <twitter_id>bayern3</twitter_id>
</nowplaying>
</outline>
	</body>
</opml>"
Image:		string(48) "http://cdn-radiotime-logos.tunein.com/s14991.png"

Ich verstehe die Welt nicht mehr. Wieso kommt jetzt das Cover?
muss jetzt in die Arbeit. Werde es heute Nachmittag noch mal genauer testen.

Bis später

Gruß Alex

Hi,

auch hier könnte es sein, dass eine Firewall die HTTP requests alle 5 Sekunden doof findet.

Ich habe gerade ein update gemacht, mit den folgenden Änderungen: SymconSonos/CHANGELOG.md at master · tkugelberg/SymconSonos · GitHub

Also, wenn die Box netzwerktechnisch nicht erreichbar ist, wird nicht mehr alle 5 Sekunden nachgefragt, sondern alle 5 Minuten. Sobald die Box wieder verfügbar ist geht es mit alle 5 Sekunden weiter.
Fürs Grouping sind es entsprechend längere Zeiten (120 und 900 Sekunden).

Wenn das Cover von Radiosendern ermittelt wird, steht das jetzt auch in der Variablen CoverURL

Es gibt eine neue Variable „Station ID“. Nur wenn diese sich ändert, wird das Cover erneut von radiotime abgerufen.
Zusätzlich wird die Station ID immer um 5 Minuten nach der vollen Stunde geleert, damit man ein evtl. geändertes Cover bekommt.

Evtl. wird es damit ja besser :wink:

Gruß,
Thorsten

Gestern Abend habe ich eigentlich die Firewall ausgeschaltet und trotzdem kam kein Cover.

Mir ist gestern aber auch aufgefallen, dass meine Soundkarte nicht erkannt wurde. Im Gerätemanager war alles richtig und aktiv, allerdings kam beim Lautstärkeregler die Nachricht, dass keine Soundkarte vorhanden ist. In einigen Foren wurde darauf hingewiesen, dass evtl. einige Dienste nicht gestartet sind. So war es auch bei mir, warum auch immer.

Vielleicht hat sich dadurch auch mein Coverproblem gelöst. Werde es später, wenn ich zu Hause bin noch mal ausgiebig testen.

Noch eine Frage:
Ist es möglich das Cover auch anzuzeigen, wenn ich auf Pause oder Stop drücke (Radio und Playlist). Aktuell wird das Cover ja ausgeblendet. In der Sonos-APP bleibt das Cover des letzten Senders, oder Album angezeigt.

Gruß Alex

Wenn Du das willst müsstest Du momentan eine Hilfsvariable anlegen.

Fände ich ansich auch gut das die Variable nicht geleert wird sondern der letzte Wert stehen bleibt, denn dann weis man wie bei der Sonos App was läuft wenn man einfach auf Play drückt.

Hallo zusammen, habe heute das Modul neu upgedatet, seit dem wirft mein Log (Meldungen) alle 5 sec. folgendes für alle 4 Boxen aus:
26.10.2016 19:17:34*| ScriptEngine*| Ergebnis für Ereignis 58454
26.10.2016 19:19:05*| ScriptEngine*| Ergebnis für Ereignis 36585
26.10.2016 19:19:26*| ScriptEngine*| Ergebnis für Ereignis 35004
26.10.2016 19:19:51*| ScriptEngine*| Ergebnis für Ereignis 19946

kann ich das irgendwie unterbinden/ abschalten?

Gruß Reblade

Hallo,

Ist mir auch schon aufgefallen.
Leider finde ich nicht woran das liegt.
Wenn irgendwer einen Tip hat…

Gruß,
Thorsten

Da ist eine Leerzeile nach dem ?> in der _updateStatus.php
Zumindest im commit 038f8567c8268fba49c8794f8b77928dce1a38aa, weiter habe ich nicht gesucht :wink:
Michael