Also das Modul funktioniert bei mir leider immer noch nicht, da die Scripte von Post 1 aber super mit all meinen Musiccast Geräten (RX-V681, WX-010, ISX-18D) funktionieren stört mich das nicht. An dieser Stelle auch noch mal vielen Dank an Michl1978 für diese Arbeit! Was mir bislang aber noch am meisten gefehlt hat, ist die Verlinkung der Geräte untereinander. Das ist ja eigentlich auch der Sinn hinter Musiccast. Daher habe ich mir dazu noch weitere Scripte mit Hilfe von „Postman“ erstellt. Das ganze sieht dann so aus:
Linkserver
<?php
$curl = curl_init();
$groupId = getValue("Variablen ID der Variable GroupID");
$zone = getValue("Variablen ID der Variable ServerZone");
$type = getValue("Variablen ID der Variable Type");
$host = getValue("Variablen ID der Variable ServerHost");
$ip_1 = getValue("Variablen ID der Variable Client IP 01");
$ip_2 = getValue("Variablen ID der Variable Client IP 02");
$ip_3 = getValue("Variablen ID der Variable Client IP 03");
curl_setopt_array($curl, array(
CURLOPT_URL => "http://$host/YamahaExtendedControl/v1/dist/setServerInfo",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS =>"{
\"group_id\":\"$groupId\",
\"zone\":\"$zone\",
\"type\":\"$type\",
\"client_list\":[
\"$ip_1\",
\"$ip_2\",
\"$ip_3\"
]
}",
CURLOPT_HTTPHEADER => array(
"Content-Type: application/x-www-form-urlencoded"
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
?>
Die Variablen „GroupID“, „ServerZone“, „Type“, „ServerHost“, „IP 01“, „IP 02“, „IP 03“ müssen mit den entsprechenden Werten befüllt werden. Ich habe das mittels Variablen gemacht, damit ich nicht für jedes Gerät ein eigenes Script machen muss. Es kann ja auch immer nur einen Linkserver geben.
GroupID muss immer aus 32 hex Zeichen bestehen. Z.B. „9A237BF5AB80ED3C7251DFF49825CA42“
ServerZone ist eigentlich immer „main“
Type kann „add“ oder „remove“ sein
ServerHost ist die IP Adresse des Musiccast Gerätes das als Linkserver dienen soll
IP 01 bis IP 03 sind die Client IP’s die sich mit dem Linkserver verbinden sollen
Link Client
<?php
$curl = curl_init();
$groupId = getValueString("Variablen ID der Variable GroupID");
curl_setopt_array($curl, array(
CURLOPT_URL => "http://"IP des Client"/YamahaExtendedControl/v1/dist/setClientInfo",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS =>"{
\"group_id\":\"$groupId\",
\"zone\":[
\"main\"
]
}",
CURLOPT_HTTPHEADER => array(
"Content-Type: application/json"
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
setValueString("Variablen ID der Variable Client IP 01"*/, "IP des Client");
?>
Für den Client legt man immer pro Gerät ein Script an und trägt die Werte direkt ein. Nur die GroupID übernimmt man wieder von der Variablen, denn diese muss für die Verlinkung bei Server und Client gleich sein.
Als letztes braucht man noch folgende Scripte um den Linkserver zu starten oder zu stoppen:
Starten
<?php
$host = getValue("Variablen ID der Variable ServerHost");
$data = @Sys_GetURLContent("http://{$host}/YamahaExtendedControl/v1/dist/startDistribution?num=0");
print_r(json_encode($data));
?>
Stoppen
<?php
$host = getValue("Variablen ID der Variable ServerHost");
$data = @Sys_GetURLContent("http://{$host}/YamahaExtendedControl/v1/dist/stopDistribution");
print_r(json_encode($data));
?>
Wichtig ist nun die Reihenfolge beim Ausführen der Scripte!
- Werte für den Linkserver in die Variablen schreiben
- Script „Link Client“ ausführen (für jeden Client den man hinzufügen möchte)
- Script „Link Server“ und „Starten“ ausführen (die beiden Scripte müssen unmittelbar nacheinander ausgeführt werden, sonst klappt es nicht!)
Stoppen kann man den Server über das Script „Stop“. Einen Client entfernen kann man indem man das Script „Link Client“ mit leerer GroupID ausführt.
Das ganze ist hoffentlich einigermaßen verständlich erklärt, da ich selbst aber kein Profi bin, kann ich es leider nicht besser. Ich wollte euch das nur nicht vorenthalten, da ich schon ewig erfolglos nach so einer Lösung gesucht hatte. Änderungen und Verbesserungsvorschläge nehme ich sehr gerne an!