Yamaha Musiccast Modul

Ah, die Fehlermeldung kommt im übrigen nur auf der Browser Console.
Mit der alten ist alles okay…

Die Browser-Console ist genauer in der Fehlerauswertung von Instanz-Forms. Die alte Console hingegen verzeiht so manchen Fehler…
Irgendwo ist in der form.json ein kleiner Fehler.

-Chris-

Hi,

wie muss die Netzwerk Interface Einstellung den sein wenn mein Interface unter Linux ens3 heist??

Ich finde leider auch kein Gerät.

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!

  1. Werte für den Linkserver in die Variablen schreiben
  2. Script „Link Client“ ausführen (für jeden Client den man hinzufügen möchte)
  3. 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!

Nutzt hier noch jemand das Modul? Mit Symcon 7.0 funzt es leider nicht mehr.

@mistljo

Mit folgender Anpassung der module.php läuft es wieder:

...
// if (@count($scenes) > 0) {
	  if (@count((array)$scenes) > 0) {
...

//  if (@count($inputs) > 0) {
        if (@count((array)$inputs) > 0) {

...





Das Modul hat bei mir leider noch nie funktioniert. Ich verwende immer noch meine Skripte von oben.

Es kommen beim Konfigurieren des Moduls immer Fehlermeldungen:

Natürlich wäre mir ein Modul auch lieber, aber da habe ich leider zu wenig Ahnung wie man das angeht.

Gruß
Michael

Wahrscheinlich ist auch hier wieder ein Komma zu viel, siehe auch Rademacher Homepilot 1 oder 2 Modul - #118 von tommi

Es sind in der einen form.json Kommas zu viel und zum anderen scheint das Modul nur auf einem Windows Rechner zu laufen und ist nicht für Linux ausgelegt. Allerdings bekommt man das Modul nicht komplett zum laufen, da die Konfiguration nicht weiter durchgeführt werden kann und auch der Socket immer wieder auf eine andere IP zurückgesetzt wird.

Tommis Modul läuft auf jeden Fall :slight_smile:
@Tommi: Hast Du evtl. vor eine Liste der vorhandenen NetRadio Sender noch zu integrieren ?

Das MusicCast Modul ist nicht von mir, das ist von @mistljo. Leider hat es scheinbar lange keine Anpassungen mehr an die aktuellen IPS Version erhalten. siehe GitHub - mistljo/IPSMusicCast

Ja, das ist mir klar.
Ich meinte tatsächlich Dein Modul (SymconYAVR ) :wink:

Ich habe zwar schon einige Module geschrieben, aber das ist auch nicht von mir. SymconYAVR ist von @traxanos (GitHub - traxanos/SymconYAVR) :slight_smile:

Ja, wer lesen kann ist klar im Vorteil :man_facepalming:
Sorry!

Wollte damit auch nur sagen, das ich Deinen Erweiterungsvorschlag nicht umsetzen kann :slight_smile: