Yamaha Netzwerk-Steuerung

Im zweiten Artikel dieser Serie möchte ich näher auf die Netzwerksteuerung von Yamaha-Geräten eingehen. Zuletzt hatte ich einen Überblick gegeben, wie verschiedene Komponenten eines Heimkinos per Netzwerk gesteuert werden können und was das für Vorteile hat.

Yamaha RX-V775 und BD-A1010: beide lassen sich per Netzwerk steuern

Die Yamaha Netzwerk-Steuerung wird von der hauseigenen App genutzt
Die App von Yamaha zur Steuerung ihrer AV-Receiver

Heute wird es noch ein Stück technischer. Die meisten von Euch werden das wahrscheinlich bestenfalls überfliegen und sich wundern, was ihre Geräte da noch so alles können. Für die Programmierer unter Euch werde ich ein wenig Quellcode veröffentlichen. Ich zeige Beispiele für PHP und Node.js, die ich in ähnlicher Form im Einsatz habe.

Vorab kann ich nur den Tipp geben, etwas Geduld zu haben und ein paar Stunden freie Zeit einzuplanen. Auf Anhieb wird wahrscheinlich gar nichts funktionieren – jedenfalls war das bei mir so.

Versucht zuerst, die Original-App von Yamaha, erhältlich für Android und iPhone, in Eurem Netzwerk zum Laufen zu bringen. Eine Beschreibung ist in der App und natürlich in der Bedienungsanleitung der Geräte verfügbar. Wenn das funktioniert, steht eigenen Versuchen nichts mehr im Weg.

Ausgangssituation

Voraussetzung für die hier gezeigten Beispiele ist ein netzwerkfähiger AV-Receiver oder Blu-ray-Player von Yamaha. Die meisten Geräte der aktuellen Generation verfügen darüber, genauer gesagt eigentlich alle Receiver der Reihen RX-V und RX-A sowie die Player der Reihen BD-S und BD-A. Grundvoraussetzung für die Netzwerk-Steuerung: der Anschluss per Netzwerkkabel oder WLANDas Gerät muss mit dem Netzwerk verbunden sein, das heißt: ein Netzwerkkabel ist angeschlossen und verbindet das Gerät mit dem Router. Eine Internetverbindung ist nicht erforderlich.

Die allerneuesten Modelle verfügen auch über eingebautes WLAN – damit habe ich die hier gezeigten Möglichkeiten aber nicht getestet. Eventuell kann das Einschalten der Geräte nicht über WLAN funktionieren, denn wenn sie ausgeschaltet sind, haben sie ja auch keine WLAN-Verbindung mehr. Beim Anschluss per Netzwerkkabel ist das kein Problem, sofern die Option Network Standby in den Einstellungen aktiv ist.

Was Ihr aus den hier gezeigten Beispielen macht, ist erstmal nebensächlich. Deshalb gehe ich auch nicht zu sehr darauf ein, was Ihr sonst noch braucht. Wenn Ihr programmieren könnt – womit auch immer Ihr programmieren wollt – solltet Ihr ja selbst wissen, welche Umgebung Ihr dafür benötigt und wie Euer Programm auszuführen ist. Ihr solltet die gezeigten Codebeispiele auch auf andere Programmiersprachen übertragen können. Ich habe zwei Wege getestet, die beide eine Webanwendung als Benutzeroberfläche haben:

  • PHP: Ein kleiner Webserver, zum Beispiel XAMPP, dient zum Hosting einer PHP-Website. Wenn man in der Oberfläche einen Button drückt, wird ein PHP-Script aufgerufen, das den Befehl an das Gerät sendet.
  • Node.js: Eine leichtgewichtige JavaScript-Umgebung, mit der ein Webserver erstellt werden kann. Das Prinzip ist das selbe wie bei PHP, nur dass JavaScript die Kommunikation mit dem Gerät übernimmt.

Solltet Ihr grundsätzlich eine Webanwendung schreiben wollen, bedenkt bitte, dass Ihr in jedem Fall eine serverseitige Scriptsprache benötigt. Es ist nicht möglich, direkt mit Client-JavaScript im Browser die Geräte anzusprechen, da die Sicherheitseinstellungen des Browsers das nicht zulassen. PHP und Node.js (serverseitiges JavaScript) werden auf dem Webserver ausgeführt, was die Sache ganz anders aussehen lässt. Alle anderen Programmiersprachen wie Java oder C# haben natürlich ganz andere Ausgangsbedingungen und sollten ohne weitere Umwege auf die im Netzwerk angemeldeten Geräte zugreifen können.

Kommunikation mit den Geräten

Lange Rede, kurzer Sinn – legen wir los. Hier ein Codebeispiel, wie man mit PHP einen Yamaha-Receiver anspricht und einen Befehl sendet. Ich habe auf allzu viele Fehlerüberprüfungen verzichtet, um es einfach zu halten. Das Beispiel verwendet die cURL-Erweiterung, die unter den meisten PHP-Installationen standardmäßig verfügbar sein sollte.

$ip = '192.168.0.47';
$port = 80; // 50100 bei BD-Playern
$command = '<YAMAHA_AV cmd="PUT"><Main_Zone><Volume>' .
   '<Lvl><Val>-455</Val><Exp>1</Exp><Unit>dB</Unit></Lvl>' .
   '</Volume></Main_Zone></YAMAHA_AV>';

$url = 'http://' . $ip . ':' . $port . '/YamahaRemoteControl/ctrl';

$headers = array(
   'Content-Type: text/xml; charset=UTF-8',
   'Content-Length: ' . strlen($command)
);

$request = curl_init();

curl_setopt($request, CURLOPT_URL, $url);
curl_setopt($request, CURLOPT_HTTPHEADER, $headers);

curl_setopt($request, CURLOPT_CONNECTTIMEOUT, 2); 
curl_setopt($request, CURLOPT_TIMEOUT, 3);

curl_setopt($request, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($request, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($request, CURLOPT_RETURNTRANSFER, true);

curl_setopt($request, CURLOPT_POST, true);
curl_setopt($request, CURLOPT_POSTFIELDS, $command);

$result = curl_exec($request);
$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE);

if ($httpCode == 0) {
   die('Device not responding');
} else if ($httpCode == 400) {
   die('Bad request');
}

curl_close($request);

echo $result;

Und hier das gleiche in Node.js – auf die paar Zeilen, die zuzüglich noch den Webserver ausmachen, verzichte ich, um nur die reine Funktionalität zu veranschaulichen. Das Script ist ein in sich geschlossenes Node-Modul.

var http = require('http');

function executeCommand (data, onResult)
{
   var host = data.host || '192.168.0.47';
   var port = data.port || 80; // 50100 bei BD-Playern
   var command = '<YAMAHA_AV cmd="PUT"><Main_Zone><Volume>' +
      '<Lvl><Val>-455</Val><Exp>1</Exp><Unit>dB</Unit></Lvl>' +
      '</Volume></Main_Zone></YAMAHA_AV>';
 
   var requestOptions = {
      host: host,
      port: port,
      path: '/YamahaRemoteControl/ctrl',
      method: 'POST',
      headers: {
         'Content-Type': 'text/xml; charset=UTF-8',
         'Content-Length': command.length
      }
   };
 
   var request = http.request(requestOptions, function(response)
   {
      response.setEncoding('utf8');
 
      response.on('data', function (result)
      {
         console.log('Yamaha Response: ' + result);
         onResult(result);
      });
   });
 
   request.setTimeout(2000, function () {
      request.socket.end();
      request.socket.destroy();
   });
 
   request.on('error', function(error)
   {
      console.log('Device not responding');
      onResult('Error: Device not responding');
   });

   request.write(command);
   request.end();
}

module.exports = {
   executeCommand: executeCommand
};

Im Grunde stellen die Geräte von sich aus auch einen internen Webserver zur Verfügung, der unter einem bestimmten Pfad angesprochen werden kann. (Hier kommunizieren also zwei Webserver miteinander.) Die Beispiele bauen eine Verbindung über gewöhnliches HTTP auf, indem sie IP, Port und Pfad des Zielgerätes verwenden. Der eigentliche Befehl wird als POST-Content verpackt und so an das Gerät übertragen. Eine Antwort kommt als Ergebnis der Anfrage zurück, so als wäre es der HTML-Code einer Website. Die Schnittstelle ist also der Vorgehensweise des SOAP-Protokolls sehr ähnlich.

In beiden Beispielen gibt es ein paar ganz wichtige Details (die herauszufinden mich die meiste Zeit gekostet haben).

  • Ein AV-Receiver von Yamaha ist unter seiner IP über den Port 80 erreichbar. Ein Blu-ray Player ist dagegen unter Port 50100 anzusprechen. Immer. Ich habe noch keine Ausnahmen hierzu gefunden und auch keinen Weg, das umzustellen. Es erscheint etwas inkonsistent, ist aber von Yamaha so gesetzt.
  • Beide Arten von Geräten stellen den Pfad /YamahaRemoteControl/ctrl zur Verfügung, unter dem der Webservice zu erreichen ist. Gibt man diesen nicht richtig an, reagiert das Gerät nicht. Logisch, muss man aber wissen.
  • Die XML-Syntax des Befehls muss fehlerfrei sein – eigentlich selbstverständlich. Die XML-Deklaration kann angegeben oder weggelassen werden.

Die XML-Syntax

Die eigentliche Arbeit beginnt erst mit dem Verstehen der XML-Syntax, die an die Geräte gesendet werden kann. Sie weist zwischen Receivern und Playern viele Gemeinsamkeiten auf, ist aber ansonsten völlig unterschiedlich, da die Geräte natürlich unterschiedliche Befehle kennen.

Nachfolgend ein paar Beispiele. Der erste XML-String ist jeweils die Anfrage, die zum Gerät gesendet wird, der zweite ist die Antwort, die man zurück bekommt. Ich habe ein paar Interessante Befehle herausgesucht, um deren Details zu erläutern.

Power

<YAMAHA_AV cmd="PUT"><Main_Zone><Power_Control><Power>On</Power></Power_Control></Main_Zone></YAMAHA_AV>

Das ist ein sehr simpler Befehl für einen Blu-ray-Player. Statt On als Wert zu übergeben, wäre alternativ auch Network Standby möglich, wenn man den Player ausschalten will. Network Standby ist deshalb wichtig, damit das Geräte für die Netzwerk-Steuerung erreichbar bleibt, obwohl es ausgeschaltet ist.

Und hier die Antwort des Players auf diesen Befehl:

<YAMAHA_AV rsp="PUT" RC="0"><Main_Zone><Power_Control><Power></Power></Power_Control></Main_Zone></YAMAHA_AV>

Als Antwort kommt eine entsprechend ähnliche XML-Syntax zurück. Das Attribut RC="0" gibt dabei an, dass der Befehl erfolgreich ausgeführt wurde. Der aktuelle Power-Zustand wird nicht mitgeliefert, den müsste man bei Bedarf extra erfragen.

Es fällt übrigens auf, dass der Player auch über eine Zone verfügt. Normalerweise haben nur Receiver zwei oder mehr Zonen. Wahrscheinlich damit es einheitlich bleibt, hat Yamaha aber auch den Playern eine Zone untergejubelt, die sich in den Befehlen wiederfindet.

Volume

<YAMAHA_AV cmd="PUT"><Main_Zone><Volume><Lvl><Val>-455</Val><Exp>1</Exp><Unit>dB</Unit></Lvl></Volume></Main_Zone></YAMAHA_AV>

Die Lautstärke eines Receivers ist ein gutes Beispiel für die Vielseitigkeit der Befehle. Neben den oft gebräuchlichen relativen Angaben wie 1 Up, 2 Down oder einfach nur Up und Down (was den Tasten der Fernbedienung entspricht), gibt es hier die Möglichkeit, einen konkreten Wert anzugeben. Die Angabe in Val ist der Dezibel-Wert, den man einstellen möchte. Die Angabe in Exp ist der Exponent, oder einfach ausgedrückt, die Anzahl der Stellen des Wertes, die eigentlich Nachkommastellen sein sollen. Der Dezibel-Wert, der hier eingestellt werden soll, ist also eigentlich -45,5, nicht -455. Der letzte Teil gibt die Maßeinheit an.

Das sieht erstmal komplizierter aus, als es sein müsste. Tatsächlich hat das aber was mit der Wiederverwendbarkeit der XML-Struktur zu tun. Derartige Values werden auch für andere Angaben als nur die Lautstärke verwendet. Deshalb muss das Konstrukt entsprechend flexibel sein.

Input

<YAMAHA_AV cmd="PUT"><Main_Zone><Input><Input_Sel>HDMI1</Input_Sel></Input></Main_Zone></YAMAHA_AV>

Der aktuelle Eingang lässt sich sehr einfach festlegen. Es gibt fest definierte Werte, die übergeben werden können, zum Beispiel HDMI1, AV4, USB, TUNER und andere. Ähnlich funktioniert das auch, wenn man das DSP-Programm oder den Surround-Decoder einstellen will.

RC-Codes

Manchmal ist die XML-Syntax fast schon zu mächtig. So scheint es zum Beispiel bei einem Player (im Gegensatz zu einem Receiver) nicht möglich zu sein, einen Power-Toggle-Befehl zu senden. Wer damit nichts anfangen kann: Bei dem Power-Befehl oben wird immer der angegebene Wert gesetzt, egal, ob das Gerät gerade ein- oder ausgeschaltet ist. Ist es eingeschaltet und man schaltet es nochmal ein, bleibt es eben an. Bei einem Toggle-Befehl wird der aktuelle Zustand umgekehrt. Man sendet also immer den selben Befehl, und das Gerät schaltet sich an, wenn es aus ist, und aus, wenn es an ist.

Andererseits ist diese Funktionalität vorhanden, denn die Fernbedienung kann das ja auch: dort gibt es eine einzige Taste, zum An- und Ausschalten. Ähnliches passiert, wenn man den Sleep-Timer eines Receivers setzt: Per XML-Syntax lässt sich nur ein konkreter Wert wie 120 min, 30 min oder Off setzen – ungünstig, wenn man nur eine Taste dafür haben will, die wie auf der Original-Fernbedienung funktioniert.

<YAMAHA_AV cmd="PUT"><Main_Zone><Remote_Control><RC_Code>7C80</RC_Code></Remote_Control></Main_Zone></YAMAHA_AV>

Die Lösung ist dieser ganz einfache XML-Befehl, der nichts anderes macht, als die Tastencodes der Fernbedienung auszuführen. Man sucht sich aus der Dokumentation den passenden Tastencode heraus und gibt diesen als Parameter an. Das funktioniert bestens, um die exakte Funktionalität der Fernbedienung zu kopieren.

Playinfo

<YAMAHA_AV cmd="GET"><Main_Zone><Play_Info>GetParam</Play_Info></Main_Zone></YAMAHA_AV>

Dieser Befehl ist ein gutes Beispiel für die Abfrage von Statusinformationen. In diesem Fall greifen wir wieder auf einen Blu-ray-Player zu, nicht auf einen Receiver. Zu beachten ist, dass hier ein GET-Befehl gesendet wird, kein PUT. PUT setzt einen Wert, GET liest einen aktuellen Wert aus. An der Stellen, wo GetParam steht, wird ein Wert erwartet.

Und hier die Antwort des Players auf diese Anfrage:

<YAMAHA_AV rsp="GET" RC="0">
   <Main_Zone>
      <Play_Info>
         <Status>Play</Status>
         <Playback_Speed>0</Playback_Speed>
         <Tray>Close</Tray>
         <Contents>
            <Type>video</Type>
            <Title>0</Title>
            <Track>0</Track>
            <Chapter>4</Chapter>
            <File_Num>2</File_Num>
            <File_Name>Urlaubsvideo (2008).mkv</File_Name>
         </Contents>
         <Current_PlayTime>00112C</Current_PlayTime>
         <Input_Info>USB</Input_Info>
         <Disc_Info>
            <Disc_Type>No Disc</Disc_Type>
            <Track_Num>0</Track_Num>
            <Total_Time>010623</Total_Time>
         </Disc_Info>
         <USB_Info>
            <USB_Status>Ready</USB_Status>
         </USB_Info>
         <Network_Info>
            <Contents_Type>Not Ready</Contents_Type>
         </Network_Info>
      </Play_Info>
   </Main_Zone>
</YAMAHA_AV>

Mit einem einzigen Befehl werden hier sämtliche Statusinformationen des Players abgerufen, die sich auf das aktuell abgespielte Filmmaterial beziehen. Daraus lässt sich zum Beispiel entnehmen, ob eine Disc abgespielt wird, oder ob Inhalte von USB oder Netzwerk angezeigt werden. Die Art der Disc lässt sich ebenso erkennen wie Track- oder Kapitelnummern.

Besonders nützlich für gehobenere Anwendungen sind die Angaben CurrentPlayTime und TotalPlayTime: Die Werte sind hexadezimal codiert und geben – wer hätte es gedacht? – die aktuelle Spielzeit und die Gesamtspielzeit zurück. Daraus lässt sich dann zum Beispiel ganz einfach die Restspielzeit errechnen, oder was man sonst damit machen will. Auf diese Weise könnte eine App die Spielzeit anzeigen (welche Universalfernbedienung kann das schon?) oder zu bestimmten Zeiten im Film irgendetwas automatisch aktivieren (das Licht, wenn der Abspann beginnt).

Dokumentation

Woher bekommt man diese ganzen Befehle? Die Geräte selbst verraten sie einem jedenfalls nicht. Ich musste eine ganze Weile suchen, bis ich im Internet entsprechende Dokumente finden konnte. Die Dokumentationen werden von Yamaha nicht öffentlich zur Verfügung gestellt, sondern sind Vertriebspartnern vorbehalten. Aus rechtlichen Gründen darf ich hier also auch nichts davon zur Verfügung stellen. Wenn Ihr die Dokumentationen haben möchtet, hier zwei Tipps:

  • Wendet Euch per Mail an den Yamaha-Support, nennt Euer Anliegen und die Gerätebezeichnungen, für die Ihr die Daten benötigt. Ein paar Tage später solltet Ihr alles bekommen, was Ihr benötigt.
  • Nutzt eine Suchmaschine, um nach Yamaha RX Function Tree oder konkreter zum Beispiel Yamaha BD-A1010 Function Tree zu suchen. Die wesentliche Dokumentation ist eine Excel-Tabelle mit dem Titel Function Tree.
Yamaha Netzwerk-Steuerung in eine eigene App verpackt
Eine mögliche Variante, wie eine selbst entwickelte Fernbe­dienung aussehen könnte

Die besagte Excel-Tabelle listet alle verfügbaren Befehle in einer Baumstruktur auf. Sie bietet darüber hinaus Makros, mit denen die Befehle gleich generiert werden können. Fast noch nützlicher sind Listen als Textdatei, die eine gesamte Liste aller Befehle enthalten – diese lassen sich aus der Excel-Dokumentation ebenfalls generieren und sind hier und da als Download zu finden, wenn man Glück hat.

Man findet nicht immer die Dokumentation für exakt den gewünschten Gerätetyp. Die Befehle sind aber auf allen Modellen gleich, sofern sie unterstützt werden. Man kann die meisten Befehle auch aus der Dokumentation für ein höheres Modell entnehmen.

Hier und da findet man weitere Dokumente, die die grundlegende Schnittstelle nochmals erläutern. Es kann nicht schaden, das alles mal irgendwo zu sammeln. Die Möglichkeiten gehen noch etwas über die hier gezeigten Beispiele hinaus. So ist es etwa auch möglich, die Yamaha-Geräte im Netzwerk überhaupt erstmal aufzuspüren. Das ist ganz praktisch, wenn man die IP-Adresse nicht kennt, weil sich diese häufig ändert. Die App vom Hersteller nutzt das auf ihrer Startseite.


Die hier auf die Yamaha Netzwerk-Steuerung bezogenen Beispiele sollten in ähnlicher Form auch für die Receiver anderer Hersteller möglich sein. Natürlich verwenden Onkyo, Denon, Marantz und weitere Hersteller völlig andere Schnittstellen und erst recht andere Befehle. Das Grundprinzip ist aber wohl bei allen mehr oder weniger gleich, weshalb sich dieses kleine Experiment wohl ganz gut auf andere Produkte übertragen lässt.

Letztendlich ist immer die Frage, wie viel Zeit man investieren möchte und wie leicht zugänglich und verständlich die Dokumentationen dafür sind. Wie ich im einleitenden Artikel geschrieben hatte, lohnt sich der Aufwand schon alleine deshalb, weil es bestimmte Möglichkeiten zur Steuerung eröffnet, die man sonst nicht hätte.

Im nächsten Artikel der Serie gehe ich dann näher auf die Projektorsteuerung ein.

Über Bert Kößler

Seit gut 20 Jahren fasziniert mich das Thema Heimkino. Neben den Filmen selbst gilt meine Leidenschaft besonders der Einrichtung, Steuerung und Automatisierung. Bei Heimkino Praxis teile ich meine vielseitigen Erfahrungen mit Anfängern und fortgeschrittenen Heimkino-Enthusiasten.

19 Gedanken zu „Yamaha Netzwerk-Steuerung

  1. Sehr interessanter Artikel! Das gibt einen guten Einblick in die XML-Schnittstelle und erleichtert den Einstieg sicherlich sehr. Vielen Dank!
    Aktuell fehlt mir noch ein wenig die Zeit, um mich selbst mit dem Thema zu beschäftigen, aber wenn ich wieder was Luft habe, werde ich auf Basis dieses Artikels auch mal mit der Schnittstelle rumspielen, um mir die Bedienung meines AV-Receivers noch angenehmer zu machen 🙂
    Gruß,
    Markus

  2. Hallo Bert!
    Danke für diesen Artikel! Auf der Suche nach einem AV-Receiver (bzw. Marke), der sich per LAN ein- und ausschalten lässt, ist das der erste sinnvolle Artikel, der nicht bloß auf eine Hersteller-App verweist. Die Steuerung vom Smart Home braucht einfache Interfaces. Schade, dass die Hersteller das nicht rausrücken wollen, sonst wären sie sofort Favoriten auf meiner Suche. Dass das bei Yamaha so einfach ist, gefällt mir, denn einen (längst in die Jahre gekommenen – da gab’s noch kein HDMI) Yamaha habe ich schon, und der läuft seit Jahren super.
    Schönen Abend!
    Christian

    1. Schön, dass es wieder jemandem hilft. Es gibt ja hier noch weitere Artikel in diese Richtung, zum Beispiel über PJLink zur Steuerung von Projektoren und Bildschirmen.

      Die Hersteller sind sehr unterschiedlich geizig mit ihren Dokumentationen. Von den meisten findet man mehr oder weniger „erlaubt bereitgestellte“ Downloads im Internet. Auch wenn die oft zu anderen Geräten gehören, helfen sie meistens noch irgendwie weiter, weil innerhalb einer Serie eigentlich alle Geräte gleich arbeiten (nur manche Befehle werden nicht unterstützt). Bei Yamaha reagierte der Support auch sehr hilfsbereit, nachdem ich mitgeteilt hatte, dass ich das nicht kommerziell einsetzen will, sondern eine Steuerung für private Zwecke anstrebe. Könnte mir gut vorstellen, dass das bei anderen Herstellern ähnlich ist.

      Ansonsten bleibt nur das Netzwerk-Sniffing, zum Beispiel per WireShark. Ist zwar mühsam, hat für mich aber unter anderem einige undokumentierten Features meines Mitsubishi-Beamers offengelegt.

  3. Hallo, vielen Dank für den guten Bericht. Hat mir schon etwas geholfen 🙂 Das Projekt sollte bald fertig sein 😛 Werde hier noch ein kleines Update liefern, wenn es dann soweit ist.
    Zu dem Tipp dass man sich an Yamaha wenden soll, kann ich nur sagen, dass man mir auf meine freundliche Mail nicht geantwortet hat :-/

    Aktuell das PC-Programm (dient derzeit nur zum Testen, damit es mit der Android-App etwas schneller geht)

    Beste Grüße und danke nochmal!
    Martin

    1. Hi Martin, danke für die Rückmeldung. Es ist schon komisch, wie unterschiedlich der Support mit solchen Anfragen umgeht. Kommt wohl drauf an, wen man erwischt.

      Würde mich freuen, weiter von deinem Projekt zu hören. Sorry dass ich den Link löschen musste, nur zur Sicherheit. Manche Leute weinen immer gleich, wenn da eine EXE verlinkt ist. Screenshots oder Quellcode wären aber sicher auch sehr interessant.

    1. Ja, diese Beschreibung gibt es. Ich finde sie aber nicht so hilfreich, wie die Excel-Tabellen, die man zum Download findet oder die Dokumentation vom Yamaha Support. Wenn man einmal weiß, wie die XML-Befehle funktionieren, kann man hier aber gut nachschlagen, was es wirklich an Parametern gibt.

    2. Hallo Alex.
      bin kein Techniker und habe da eine blöde Frage bezüglich RX-V500D.
      Mit deinem Link http://IP-ADDRESS/YamahaRemoteControl/desc.xml kann ich ja die XML Datei auslesen.
      Gibt es in dieser Datei die Möglichkeit den Receiver bzw. deren eingebauten Webserver der nur abgespeckt angezeigt wird, voll aufzudrehen damit auch alle Menüs sichtbar und bearbeitbar werden?
      Wie könnte ich das sonst noch lösen!
      LG

      1. Weil Alex das wahrscheinlich nicht mehr liest, übernehme ich das mal.

        Was genau meinst Du mit „voll aufdrehen“? Willst Du die Inhalte der XML-Datei erweitern? Oder etwas am Bildschirmmenü des AVRs ändern?

        Die XML-Datei ist nur eine statische Beschreibung der Funktionen des jeweiligen Geräts. Sie kann nicht verändert werden, noch beeinflusst sie etwas am Gerät. Man könnte sagen, sie ist nur eine Dokumentation der Befehle im XML-Format.

        1. Hallo Bert,
          Freut mich dass du dich meiner Probleme mit meinen en RX-V500D annimmst.
          Frage 1: Gibt es eine Möglichkeit den Receiver bzw. deren eingebauten Webserver der nur abgespeckt angezeigt wird, freizuschalten, damit auch alle versteckten Parameter in den Menüs sichtbar und einstellbar werden wie bei den größeren Brüdern?
          Frage 2: Möchte mit meiner Loxone Hausautomatisation http/DLNA/UPnP Befehle an den Yamaha RX-V500D „Server“ senden, damit dieser sich eine mp3 Musikdatei von meiner Serverfestplatte abholt und auch abspielt. Wie kann ich die entsprechenden Befehl einbetten? zB: \\ServerLeo\Musik\Loxone\mp3 Song

          Wäre spitze wenn du mich da unterstützen könnest.
          LG

          1. Zu Frage 1: Mir ist nicht bekannt, dass es so eine Möglichkeit gibt. Die Menüs oder was der Receiver sonst so anzeigt können bzw. kann nicht verändert werden, auch nicht bei den größeren Modellen. Was möglich ist: jede einzelne Einstellung, die sich irgendwo tief in einem Menü versteckt, kann mit einem einzigen Befehl gezielt ausgelesen oder gesetzt werden. In einer eigenen App könntest Du Dir eine Benutzeroberfläche bauen, die alle Einstellungen auf einem Haufen anzeigt. Die App von Yamaha bietet einige davon an, aber längst nicht alle.

            Zu Frage 2: Das hab ich selbst noch nicht ausprobiert. Grundsätzlich kannst Du eine Art Makro schreiben, das der Reihe nach die Netzwerkquelle auswählt, in das richtige Verzeichnis wechselt und dort den Song startet. Das ist aber möglicherweise zu umständlich. Dass man ihm gezielt den Netzwerkpfad zu irgend einer Datei hinwirft, könnte schon funktionieren, ich hab aber noch keinen Befehl dafür in der Dokumentation gefunden. Die Yamaha-App kann das ja beispielsweise: man kann ein MP3-File, das auf der Karte vom Smartphone liegt, direkt auf dem Receiver wiedergeben. Ich weiß nur nicht, mit welchem Protokoll die das machen. Eine andere Möglichkeit wäre die von AirPlay oder Spotify, da geht das ja ähnlich.

            Ich kann nur eine Vermutung äußern: Du könntest mal als UDP Client unter der Adresse 239.255.255.250 im Netzwerk lauschen, ob da irgendwelche interessanten Informationen ausgetauscht werden. Dort senden die Yamaha-Geräte normalerweise ihre Events ins Netz, wenn man das zuvor aktiviert. Der Kanal scheint aber von allen möglichen Mediengeräten bzw. -servern genutzt zu werden, um da ihre Dienste bekannt zu machen. Auch die Yamaha Reveiver melden sich dort ab und zu mal zu Wort. Wahrscheinlich senden sie dort die Information, dass sie beispielsweise als AirPlay-Empfänger dienen können, woraufhin iTunes sie zur Auswahl für die Musikwiedergabe anzeigen kann. Das ist nur so ne Idee, ich kenne mich da nicht wirklich aus.

            Wenn Du es schaffst, herauszufinden, wie andere Software das macht, kommst Du vielleicht weiter. Vielleicht kannst Du mit Wireshark den Netzwerkverkehr mitschnüffeln und so die notwendige Kommunikation herausfinden. Das ist aber nur wilde Spekulation. Ich verliere bei sowas immer sehr schnell die Lust. Das mit den Events hat mich schon Tage gekostet. Sorry, wenn ich da nichts wirklich hilfreiches sagen kann.

  4. Hallo Bert

    Ich hoffe du kannst mir weiterhelfen, denn ich bin nicht vom Fach: mein yamahareceiver wird schon längere Zeit von meinem Iphone nicht mehr gefunden. Es heisst, man soll die ip-Adresse manuell konfigurieren. Ich versuchte dies zu machen. Wie erhalte ich eine neue ip für den Receiver? Wenn ich dort auf ip gehe und ok drücke und zahlen ändere dann dieselbe Kombination auf dem Handy eingebe geschieht gar nichts…

    Vielen Dank

    Helena

      1. Eine sehr gute Frage. Ganz allgemein bei Node.js hat man auf dem jeweiligen System die Konsolen-Anwendung node zur Verfügung. Dieser übergibt man als Parameter den Dateinamen eines JavaScripts. Idealerweise befindet man sich bereits in dem Verzeichnis, in dem das Script liegt. Die Dateiendung kann man weglassen. Die folgenden Aufrufe sind daher alle gleich.

        cd ~/remote
        
        node ~/remote/app.js
        node app.js
        node app

        Da man verschiedene Umgebungen betreibt, zum Beispiel auf einem Windows-PC für die Entwicklung und einen Linux-Server als Produktivsystem, kann man unter anderem das System als Parameter mitgeben, etwa um eine bestimmte Konfiguration zu laden. Natürlich ließe sich das aber auch aus einer Umgebungsvariablen auslesen. Als praktisch hat sich trotzdem die Variante mit dem Parameter erwiesen:

        node app development
        node app production

        Da Node.js aber mit einem sehr praktischen Package Manager (npm) daher kommt, der es unter anderem ermöglicht, verschiedene Aufgaben in einem einzigen Befehl zu bündeln, sieht das in der Praxis nochmal ganz anders aus. In der Entwicklungsumgebung werden neben dem eigentlichen Server auch Compiler für Frontend-JavaScript und SASS gestartet, die verschiedene Verzeichnisse überwachen. Im Produktivsystem kommt keine Überwachung zum Einsatz, sondern eine einmalige Kompilierung, die den Code dafür stärker komprimiert. Hinzu kommt ein automatischer Update-Prozess über SVN.

        Bei mir sieht das dann so aus, dass sich mein Synology NAS am Abend einschaltet, sich über SVN automatisch ein Update zieht, den Code kompiliert und optimiert und anschließend den Server startet. Ein parallel laufendes Node-Modul (forever) sorgt dafür, dass der Server sofort neu gestartet wird, sollte er mal abschmieren.

        Ganz schön kompliziert, stelle ich gerade fest. Das wäre vielleicht mal einen eigenen Artikel wert. Aber wie oben gezeigt geht es eben auch einfach.

  5. Hi,

    ok, das ist mir eine Nummer zu hoch. Arbeite nun an der PHP-Variante.

    Kennt jemand den XML-Befehl, einen Radiostream zu starten?

    1. Das hab ich selbst noch nicht ausprobiert, aber hiermit sollte es gehen.

      Eingang wählen

      <YAMAHA_AV cmd="PUT"><Main_Zone><Input><Input_Sel>NET RADIO</Input_Sel></Input></Main_Zone></YAMAHA_AV>

      Gespeicherten Radiosender starten (1 bis 40)

      <YAMAHA_AV cmd="PUT"><NET_RADIO><Play_Control><Preset><Preset_Sel>1</Preset_Sel></Preset></Play_Control></NET_RADIO></YAMAHA_AV>

      Stoppen und Starten

      <YAMAHA_AV cmd="PUT"><NET_RADIO><Play_Control><Playback>Stop</Playback></Play_Control></NET_RADIO></YAMAHA_AV>
      <YAMAHA_AV cmd="PUT"><NET_RADIO><Play_Control><Playback>Play</Playback></Play_Control></NET_RADIO></YAMAHA_AV>

      Eintrag aus der aktuell sichtbaren Liste der Radiosender starten (1 bis 8)

      <YAMAHA_AV cmd="PUT"><NET_RADIO><List_Control><Direct_Sel>Line_1</Direct_Sel></List_Control></NET_RADIO></YAMAHA_AV>

      Zu einer bestimmten Zeile der Liste aller Radiosender springen (1 bis 65536)

      <YAMAHA_AV cmd="PUT"><NET_RADIO><List_Control><Jump_Line>1</Jump_Line></List_Control></NET_RADIO></YAMAHA_AV>

      Und jede Menge weitere Befehle, um sich in der Liste zu bewegen

      <YAMAHA_AV cmd="PUT"><NET_RADIO><List_Control><Cursor>Down</Cursor></List_Control></NET_RADIO></YAMAHA_AV>
      <YAMAHA_AV cmd="PUT"><NET_RADIO><List_Control><Cursor>Up</Cursor></List_Control></NET_RADIO></YAMAHA_AV>
      <YAMAHA_AV cmd="PUT"><NET_RADIO><List_Control><Cursor>Sel</Cursor></List_Control></NET_RADIO></YAMAHA_AV>
      <YAMAHA_AV cmd="PUT"><NET_RADIO><List_Control><Cursor>Back</Cursor></List_Control></NET_RADIO></YAMAHA_AV>
      <YAMAHA_AV cmd="PUT"><NET_RADIO><List_Control><Cursor>Back to Home</Cursor></List_Control></NET_RADIO></YAMAHA_AV>
      <YAMAHA_AV cmd="PUT"><NET_RADIO><List_Control><Page>Down</Page></List_Control></NET_RADIO></YAMAHA_AV>
      <YAMAHA_AV cmd="PUT"><NET_RADIO><List_Control><Page>Up</Page></List_Control></NET_RADIO></YAMAHA_AV>
      <YAMAHA_AV cmd="PUT"><NET_RADIO><List_Control><Bookmark>Off</Bookmark></List_Control></NET_RADIO></YAMAHA_AV>
      <YAMAHA_AV cmd="PUT"><NET_RADIO><List_Control><Bookmark>On</Bookmark></List_Control></NET_RADIO></YAMAHA_AV>

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.