Hallo zusammen,
zum einen fand ich den Ansatz für die Radiosender von Tom echt nett, zum anderen hat mit etwas gefehlt.
Daher habe ich mal etwas rumgespielt:
Ich habe mit eine Konfiguration von Radiosendern angelegt (radio_stations.php).
Hiermit kann man sich zum einen ein Array von Verfügbaren Radiosendern zurückliefern lassen, zum anderen zu einem Sendernamen die aPassende URL:
<?
function get_available_stations(){
$RadioStations = Array(
Array( ('name') => "SWR3", ('url') => "x-rincon-mp3radio://swr-mp3-m-swr3.akacast.akamaistream.net/7/720/137136/v1/gnl.akacast.akamaistream.net/swr-mp3-m-swr3" ),
Array( ('name') => "FFN", ('url') => "x-rincon-mp3radio://player.ffn.de/ffn.mp3" ),
Array( ('name') => "FFH", ('url') => "x-sonosapi-stream:s17490?sid=254&flags=32" ),
Array( ('name') => "Antenne Bayern", ('url') => "x-sonosapi-stream:s15030?sid=254&flags=32" )
);
return $RadioStations ;
}
function get_station_url($name, $RadioStations = null){
if ( $RadioStations === null ){ $RadioStations = get_available_stations(); };
foreach ( $RadioStations as $key => $val ) {
if ($val['name'] === $name) {
return $RadioStations[$key]['url'];
}
}
throw new Exception("Radio station " . $name . " is unknown" );
}
?>
Im modules.php habe ich dann enifach folgendes gemacht:
public function ApplyChanges()
{
...
$this->RegisterProfileIntegerEx("Radio.SONOS", "Speaker", "", "", Array(
Array(0, "SWR3", "", -1),
Array(1, "FFN", "", -1),
Array(2, "FFH", "", -1),
Array(3, "Antenne Bayern", "", -1)
));
$this->RegisterVariableInteger("Radio", "Radio", "Radio.SONOS");
$this->EnableAction("Radio");
...
}
public function SetRadio($radio)
{
include(__DIR__ . "/sonos.php");
include(__DIR__ . "/radio_stations.php");
(new PHPSonos($this->ReadPropertyString("IPAddress")))->SetRadio( get_station_url($radio));
}
public function RequestAction($Ident, $Value)
{
switch($Ident) {
...
case "Radio":
$this->SetRadio(IPS_GetVariableProfile("Radio.SONOS")['Associations'][$Value]['Name']);
SetValue($this->GetIDForIdent($Ident), $Value);
break;
...
}
damit geht z.B. auch so etwas:
SNS_SetRadio( 54110 /*[Sonos Gäste]*/, "SWR3");
Aber das erstellen des Profils passt mir noch nicht…
Eigentlich würde ich das auch gerne mit allen verfügbaren Radisendern automatisch machen. Dann könnte diese Liste aber sehr lang werden. Und da dies im WebFront nur ald knöpfe angezeigt wird…
Hat da jemand eine Idee?
Ich wüde das gerne als DropDown Selection box mit einem Go Knopf machen. Geht das?
Gruß,
Thorsten