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…
Super, vielen Dank! Das binde ich gleich mal in meine Scripte ein
Hallo Marc,
alternativ kannst Du auch mein TCL-Script benutzen: https://homematic-forum.de/forum/viewtopic.php?f=19&t=29456&sid=9fba52fa27fdf495cacfe1e9db85fdf1