Zustand eines Yamaha Receivers per Homematic auslesen

Vor kurzem habe ich beschrieben, wie sich mein Yamaha RX-V781 per Homematic steuern lässt (zum Artikel). Nun will ich darauf eingehen, wie sich Informationen über den aktuellen Zustand des Receivers auslesen lassen. Im Folgenden Artikel stelle ich ein Script vor, mit dem sich auf die JSON Webschnittstelle des AV Receivers zugreifen lässt, um zu ermitteln ob der Receiver eingeschaltet ist.

Leider ist mir keine Möglichkeit bekannt, wie man sich über eine Statusänderung informieren lassen kann. Mann muss also den Zustand immer bewusst abfragen oder man pollt ihn zyklisch.

Für den Einsatz des Skripts wird der CUxD auf der CCU2 benötigt. Wer sich nicht sicher ist was das ist, oder wie er eingerichtet wird, kann das in meinem Artikel über die Anbindung der HUE Lampen an die CCU2 nachlesen. Dort gibt es ein Kapitel „Einrichtung des CUx-Daemon“.


Wie ein Script angelegt wird sollte bekannt sein. Falls nicht hilf auf hier der eben erwähnte HUE Artikel weiter. Das Script sieht wie folgt aus:

! Zustand eines Yamaha AV Receivers auslesen

!__EINSTELLUNGEN___
string ip_yamaha="192.168.2.186";

!__ABFRAGE____
string request="/usr/local/addons/cuxd/curl  -H \"Accept: application/json\" -H \"Content-Type: application/json\"  -X GET http://" # ip_yamaha # "/YamahaExtendedControl/v1/main/getStatus";
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State(request);
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
var response = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State().Substr(28, 2);

!__REAKTION_____
if(response == "on")
{
WriteLine("Receiver ist an.");
}
else
{
WriteLine("Receiver ist aus.");
}

Zur Erklärung: Das Skript ruft die API des Receivers auf fragt den Zustand ab. als Antwort wird vom Receiver ein JSON-Objekt zurückgeliefert. Da die Homematic Skriptsprache keine Möglichkeit zum Umgang mit JSON bietet und ich kein tcl-Script auf die CCU Kopieren will, helfe ich mir mit der primitiven Stringverarbeitung weiter. Der Befehl substr liefert einfach zwei Zeichen der Antwort ab Position 28. Dort steht entweder „on“ oder „standby“. Auf das Ergebnis kann in der folgenden If-Bedingung reagiert werden. In meinem Beispiel gebe ich einfachnur einen Text aus, hier könnte aber auch z.B. eine Systemvariable gesetzt werden…

2 Kommentare

Hinterlasse einen Kommentar

An der Diskussion beteiligen?
Hinterlasse uns deinen Kommentar!

Schreibe einen Kommentar

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