Neuer Receiver fürs Wohnzimmer – Yamaha RX-V679

… getönt hat der Alte noch gut, allerdings hat er sich nie gut in die Hausautomation einbinden lassen…

2007 oder 2008 muss es gewesen sein – da habe ich meinen ersten vernüftigen Verstärker von einem Bekannten abgekauft – der Luxman LR-6500. An sich für die damalige Zeit ein Top Verstärker, konnte sogar schon 7.1 und unzählige Surroundformate dekodieren. In einem war er immer schlecht: sich mit möglichst wenig Befehlen ansteuern lassen um ihn geziehlt über die Hausautomation zu starten oder umzuschalten.
Deswegen musste sich was tun – nach längerer Überlegung ob man sich das gönnen sollte usw. 🙂

Produktbeschreibung Yamaha Webseite



Überwunden… und gekauft 😛 Das derzeitige noch sehr neue „mittlere“ Flagschiff unter den Heimkinoreceivern von Yamaha. Leider nicht mehr Made in Japan sondern nur noch Malaysia aber trotzdem immer noch gut genug um es noch als echten „Yamaha“ durchgehen zu lassen. Farbe: Titan um etwas der alten Linie treu zu bleiben.

Das mitgelieferte Zubehör ist überschaubar – aber es fehlt an Nichts: Handbuch, Fernbedienung, UKW und Mittelwellenantenne, YPAO Einmessmikrofon und hinten am Gehäuse eine eingeschraubte WLAN Antenne (die direkt vor dem Aufstellen abgeschraubt wurde – nur Kabel LAN ist wahres LAN).

Ein Überblick über die Anschlüsse:

Leider besitzt er nicht mehr wie frühere Geräte die Euro-Kupplung um z.B. den Subwoofer mit Strom zu versorgen und ihn mit abzuschalten im Standby. Dafür gibt es jetzt einen 12 Volt Trigger, den man sogar programmieren kann, wan er schalten soll. Eventuell wird da mal eine Eigenkonstruktion mit Relais angeschlossen… (siehe oben links)

Der Hauptvorteil im Bezug auf den Gebrauch in Verbindung mit dem Fernseher: der Fernseher kann mich mal mit seiner besch….enen Input Verwaltung (die tatsächlich eine Ladebalken hat wenn man den Fernseher gerade angeschaltet hat): alle HDMI Geräte werden am Receiver angeschlossen. Das macht auch viele der bisher benötigten SPDIF Glasfaserkabel überflüssig (wovon der Yamaha auch einige weniger Anschlüsse besitzt als der Luxman).
Der Fernsehr kennt nun nur noch eins: ein- oder aus 🙂 Gesteuert mit einem Homematic 1 Kanal Aktor!! (Tod dem irtrans!?? Hat er seine Daseinsberechtigung verwirkt?)

Ein Paar letzte Ansichten der alten Besetzung… Klassisch und zeitlos wirkte er schon der Luxman – aber auch irgendwie zu „analog“ für den heutigen Geschmack (war er durch und durch auch nicht wirklich).

Und raus ist er…

Oh da steht ja noch was von Yamaha ^^ Das alte Kassettendeck vom Vater…
Läuft immer noch tadelos und kommt natürlich auch wieder an die neue Kiste mit dran.


Kabel entsprechend neu verlegt: die beiden HDMI Leitungen Richtung Fernseher haben sich bezahlt gemacht: eine geht vom Receiver zum HDMI-1 in den LG TV, die 2. Leitung versetzt mich in die Lage das Apple TV hinter dem Fernseher zu lassen und führt es an HDMI-2 an den neuen Receiver – HDMI-1 wird der Dreambox zugeordnet…


First Boot-UP: Firmwareupdate… Dauert ca. 20 Minuten.

Und Bereit! Lautsprecher mit dem Mikrofon eingemessen und noch einige Parameter (hat ca. 1 Woche gedauert) im OSD Interface am Fernseher eingestellt.

Jetzt kann wieder gescripted werden…

Der Yamaha RX-V679 wird wie seine direkten Vorgänger mit LAN Port über eine XML Syntax angesteuert. Die ist sehr pingelig was Fehlerfreiheit anbetrifft – ist irgendwo ein Zeichen falsch oder vergessen, reagiert der Receiver ganz einfach nicht. Ansonsten bietet die Befehlsstuktur für eigentlich alle Funktionen diskrete Ansteuerung an, z.B. der Standbybefehl: (vereinfachte Darstellung)

<System><Power_Control><Power>On</Power></Power_Control></System>

Egal wie oft man den sendet – der Befehl schaltet NUR ein nichts anders, kein nerviges Toggeln.

<System><Power_Control><Power>Standby</Power></Power_Control></System>

Das Selbe mit dem Ausschaltbefehl.

Ich habe mein althergebrachtes PHP Skript wieder mal erweitert, welches ursprünglich mal nur Befehlsabfolgen für den irtrans enthielt – mittlerweile (irtrans wirklich…. tot!??) ist da garnüschts mehr vom irtrans – er ist wirklich überflüssig geworden!! IR-Befehle spielen keine Rolle mehr bei meiner Installation, schön sowas mal zu erleben 🙂

So… jetzt verlier ich gerade wieder den roten Faden in diesem Beitrag. Diesmal belasse ich es auch mit weiterem Geschwafel und bringe noch den relevanten Ausschnitt der PHP Datei um den Receiver anzusteuern:

Es gibt eine Funktion, die die eben gezeigten vereinfachten Befehle entgegennimmt…

function YamahaNET($command) {
// Yamaha Receiver
$host = '192.168.1.9';
$data = '<YAMAHA_AV cmd="PUT">'.$command.'</YAMAHA_AV>';
$command_lenght = strlen($data );
     
//echo $command_lenght;    //zum prüfen    
$head = "";
$head .= "POST /YamahaRemoteControl/ctrl HTTP/1.1\r\n";
$head .= "Host: ".$host."\r\n";
$head .= "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0\r\n";
$head .= "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n";
$head .= "Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3\r\n";
$head .= "Accept-Encoding: gzip, deflate\r\n";
$head .= "Connection: keep-alive\r\n";
$head .= "Content-Type: text/xml; charset=UTF-8\r\n";
$head .= "Referer: http://".$host."/\r\n";
$head .= "Content-Length: ".$command_lenght."\r\n";
$head .= "Pragma: no-cache\r\n";
$head .= "Cache-Control: no-cache\r\n\r\n";
$head .= $data;
//echo $head; //zum prüfen

$fp = fsockopen($host, 80) or die("Unable to open socket");
fputs($fp, $head);

$buf = fgets($fp,128);
fclose($fp);
//echo $buf;   //zum prüfen

$return = substr($buf,13,2);
  if ($return == "OK") {
        return true;
        //return "OK";
}
}

 

Die Befehle werden dann so ausgelöst:

YamahaNET("<System><Power_Control><Power>Standby</Power></Power_Control></System>");

Thats it, funktioniert perfekt und quasi latenzfrei…

Meine Kleine Befehlsreferenz von Funktionen die ich bisher im Einsatz habe:

//Power On
YamahaNET("<System><Power_Control><Power>On</Power></Power_Control></System>");

//Power Off
YamahaNET("<System><Power_Control><Power>Standby</Power></Power_Control></System>");

//HDMI-1 select
YamahaNET("<Main_Zone><Input><Input_Sel>HDMI1</Input_Sel></Input></Main_Zone>");

//Volume up um 2 dB
YamahaNET("<Main_Zone><Volume><Lvl><Val>Up 2 dB</Val><Exp></Exp><Unit></Unit></Lvl></Volume></Main_Zone>");

//Volume down um 2 dB
YamahaNET("<Main_Zone><Volume><Lvl><Val>Down 2 dB</Val><Exp></Exp><Unit></Unit></Lvl></Volume></Main_Zone>");

//B-Zone auf Internetradio schalten
YamahaNET("<Zone_2><Input><Input_Sel>NET RADIO</Input_Sel></Input></Zone_2>");

//B-Zone auf Preset-1 schalten (z.B. mit Internetradio)
YamahaNET("<NET_RADIO><Play_Control><Preset><Preset_Sel>1</Preset_Sel></Preset></Play_Control></NET_RADIO>");

//B-Zone einschalten
YamahaNET("<Zone_2><Power_Control><Power>On</Power></Power_Control></Zone_2>");

//B-Zone ausschalten
YamahaNET("<Zone_2><Power_Control><Power>Standby</Power></Power_Control></Zone_2>");

//B-Zone spielt gleichen Input wie Main-Zone
YamahaNET("<Zone_2><Input><Input_Sel>Main Zone Sync</Input_Sel></Input></Zone_2>");

//Mainzone Mute on
YamahaNET("<Main_Zone><Volume><Mute>On</Mute></Volume></Main_Zone>");

//Mainzone Mute off
YamahaNET("<Main_Zone><Volume><Mute>Off</Mute></Volume></Main_Zone>");

Per Sleep-Befehl lassen sich zwischen aufeinanderfolgenden Befehlen gut Pausen generieren. Das habe ich auch schon immer bei irtrans genutzt.

Die Leserichtung ist auch interessant um z.B. die aktuell eingestellte Lautstärke auszulesen. Dafür gibt es eine weitere Funktion die auch sehr einfach gehalten ist und den gesamten XML String vom Yamaha lädt und ihn dann mit einem preg_match auseinander klamüsert um nach dem gewünschten Wert zu suchen:

//Beispiel: Lautstärke der Main-Zone zurückgeben
$status = YamahaStatus();
preg_match('/\<Volume\>\<Lvl\>\<Val\>([-0-9]+)\<\/Val\>\<Exp\>/', $status, $res);
//echo $res[1];
$vol = intval($res[1]) / 10;
//echo $vol;
echo "<font color=white face=Verdana>".$vol." dB</font>";


function YamahaStatus() {
// Yamaha Receiver
$host = '192.168.1.9';
$data = '<YAMAHA_AV cmd="GET"><Main_Zone><Basic_Status>GetParam</Basic_Status></Main_Zone></YAMAHA_AV>';
$command_lenght = strlen($data );
       
//echo $command_lenght;    //zum prüfen
     
$head = "";
$head .= "POST /YamahaRemoteControl/ctrl HTTP/1.1\r\n";
$head .= "Host: ".$host."\r\n";
$head .= "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0\r\n";
$head .= "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n";
$head .= "Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3\r\n";
$head .= "Accept-Encoding: gzip, deflate\r\n";
$head .= "Connection: keep-alive\r\n";
$head .= "Content-Type: text/xml; charset=UTF-8\r\n";
$head .= "Referer: http://".$host."/\r\n";
$head .= "Content-Length: ".$command_lenght."\r\n";
$head .= "Pragma: no-cache\r\n";
$head .= "Cache-Control: no-cache\r\n\r\n";
$head .= $data;
//echo $head; //zum prüfen

$fp = fsockopen($host, 80) or die("Unable to open socket");
fputs($fp, $head);

$buf = stream_get_contents($fp);
fclose($fp);

$buf = explode("\r\n\r\n", $buf)[1];

//echo $buf;   //zum prüfen
return $buf;

}

Vielen Dank an Jonas Schievink für die Unterstützung an der Auslesefunktion!

Die Ausgelesenen Werte lassen sich vielfältig einsetzen um eventuell der Homematic diese als Wert zur Verfügung zu stellen…

So, das solls erstmal gewesen sein – längerer Beitrag nach Monaten des Stillstands hier auf dem Blog – Schande über mich aber zu wenig Zeit und Motivation was zu posten :-/

N8 ihr Leut.

VN:F [1.9.22_1171]
Rating: 5.0/5 (3 votes cast)

ELV Internetradio FS20 IRB

… eigentlich für’s FS20 System – mit leichten Modifikationen perfekt für die Homematic

Man ist ja ein guter Sohn – so habe ich natürlich auch das Haus von meinen Eltern nicht verschont und seit längerer Zeit eine Homematic laufen. Besonders der Bereich der Beschallung kommt aufgrund des großen Hauses hier nicht zu kurz.
So habe ich auch vor längerer Zeit ein Radio fürs Badezimmer konzipiert welches (bis Heute) halbwegs seinen Dienst erfüllt und soweit auch über die Homematic gesteuert werden konnte… Leider aber alles nicht zufriedenstellend: die Basis der Steuerung stellte der 4fach Schaltaktor Bausatz (HM-LC-SW4-PCB) und ein selbst programmierter Microcontroller dar. Das Radio war ein RDS100 (Bausatz) – alles in allem ein wirklich schönes Analogradio mit Display und allem Drum und dran (auch eigentlich vorbereitet für FS20). Als Verstärker diente der V40 Bausatz…
Die meisten Probleme traten beim Steuern des Radios auf. Wenn ich auf FS20 gesetzt hätte wärs nicht so schlimm gewesen – ich will aber Homematic verdammt !! So habe ich angefangen die Tastendrücke per Microcontroller zu simulieren und so das Radio per 4fach Aktor angesteuert. Der Verstärker wurde per Relais geschaltet sobald das Radio eingeschaltet war. Leider rummste es immer gewaltig bei Einschalten, da ich bis zuletzt zu Faul war eine „Anti-Rums“ Verzögerung einzubauen, die das unterdrückt. Naja damit mussten meine Eltern leben (neben dem Fakt, dass sich die Lautstärke nicht gut regeln ließ und man sich auf einen Sender einschießen musste, da der Senderwechsel auch nicht immer geklappt hat). Najaaaaah 🙂

Hier ein kleiner Eindruck meines mit Liebe zusammengebauten Radios:

Vor kurzem ist mir dann der FS20 IRB Bausatz über den Weg gelaufen. Sehr vielversprechende Features. Leider wieder mal nur für FS20 aber weniger ein Problem, da man das Radio komplett über das Webinterface per POST-Requests fernsteuern kann. Das klappt per Zentralenskript und CURL ziemlich reibungslos.
Der Anfang ganz nach Anleitung – Bausatz zusammengelötet…


Dann gings los. Radio ist in einem Standbyzustand und lässt sich ansich erst einschalten wenn man über eine passende FS20 angebundene Fernbedienung verfügt. Verdammt…. LAN Port nicht aktiv, Radio aus und auch nicht ohne Weiteres zum Starten zu bewegen. Nun ja ein Anruf bei der ELV Technik bracht mich schon weiter – und zwar muss man ein paar Bauteile überbrücken:
Den Transistor T3 (oder FET, ka auch egal) – nun schaltet das Radio schonmal ein sobald man die Versorgungsspannung anlegt
Den Transistor T5 – schaltet den Vorverstärker ein. Habe ich allerdings ohne die Hilfe von ELV rausfinden müssen. Überbrückt man Ihn nicht spielt das Radio zwar aber nur sehr leise und kratzig egal ob am NF Ausgang oder an den Verstärkten Ausgängen

Jubel jubel freu freu – ein Internetradio das man nun perfekt in jede Haussteuerung integrieren kann, zum lowcost Preis (meine Meinung)
So… den Rest müsst ihr selbst rausbekommen…. Nein Quatsch – nun noch ein paar Details für die Befehle die man zum Radio schicken kann:
Alles was auf dem Webinterface des Radios ausgelöst wird über ein „ge-POST-etes“ Formular gesendet. Alles ist in schönen Variablennamen gehalten, so dass man sehr diskret eizelne Befehle auslösen kann und somit eine zuverlässige und eindeutige Steuerung des Radios möglich ist.

Die wichtigsten Befehle (danke an meine aktuellen Schulpraktikanten, der das Reverse-Ingeniering innerhalb weniger Stunden über die Bühne gebracht hat):

Befehl Variable Wert Datei an die der POST gesendet wird
Verstärker ein btnAmplifierSwitch „Einschalten“ index.htm
Verstärker aus btnAmplifierSwitch „Ausschalten“ index.htm
Wiedergabe Play btnStationStart 0 index.htm
Wiedergabe Stop btnStationStop 0 index.htm
Play mit Speicherplatz 0 btnPlay und hidStationIndex btnPlay=0
hidStationIndex=[ID]
stations.htm
Nächster Sender btnStationNext 0 index.htm
Vorheriger Sender btnStationPrev 0 index.htm
Laustärke + btnVolumeUp 0 index.htm
Lautstärke – btnVolumeDown 0 index.htm

Bei btnAmplifierSwitch bin ich mir nicht sicher ob wirklich der Wert berücksichtigt wird oder ob das Radio einfach nur ein / aus Togglet… Die restlichen Variablen kann jeder selbst aus dem Quelltext der Webseite auslesen. Der 1. Sender der Liste hat die ID0 …

CURL Aufruf sieht in etwa so aus:

curl --data-urlencode btnVolumeUp=0 http://192.168.20.35/index.htm

 curl --data-urlencode btnPlay=0 --data-urlencode hidStationIndex=[StationID] "http://192.168.20.35/stations.htm"

Der CURL Befehl ist nicht standardmässig in der CCU enthalten, kann aber mit wenig Aufwand integriert werden

Ein Zentralenskript zum Einschalten des Radios sieht wie folgt aus:

 string stdout;
 string stderr;
 system.Exec("curl --data-urlencode btnPlay=0 --data-urlencode hidStationIndex=0 -s -k 'http://192.168.2.41/stations.htm'", &stdout, &stderr);
 string stdout;
 string stderr;
 system.Exec("curl --data-urlencode btnAmplifierSwitch=Einschalten -s -k 'http://192.168.2.41/index.htm'", &stdout, &stderr);

Es macht sich gut erst die Wiedergabe zu starten und dann den Verstärker einzuschalten, so erziehlt man einen leicht Soft-Dimmeffekt und nicht ein aprubtes Starten der Musik. Zu Abschalten geht man den Weg anders herum:

string stdout;
string stderr;
system.Exec("curl --data-urlencode btnAmplifierSwitch=Ausschalten -s -k 'http://192.168.2.41/index.htm'", &stdout, &stderr);
string stdout;
string stderr;
system.Exec("curl --data-urlencode btnStationStop=0 -s -k 'http://192.168.2.41/index.htm'", &stdout, &stderr);

Das Radio kann nun bequem per Wandtaster oder per zeitgesteuertem Zentralenskript bedient werden und hat trotz des kleinen Verstärkers einen guten verzerrungsfreien Klang. Als Lautsprecher dienen beim ELV erhältliche KFZ Lautsprecher von MAC Audio die in einen einfachen Multiplex-Kasten gebaut wurden.

Ich hoffe das war Interessant und ein Kaufanreiz 😛 Viel Spaß beim Basteln…

VN:F [1.9.22_1171]
Rating: 5.0/5 (6 votes cast)