Hallo,
aktuelle Onkyo Receiver lassen sich mit Hilfe des ISCP Protokolls („Integra Serial Communication Protocol“) über das Netzwerk steuern, indem man Befehle an Port 60128 der IP-Adresse des Receivers sendet.
ISCP-Befehle bestehen immer aus einem vorgegebenen Header, der gewünschten Aktion als Zeichenkette und einer Byte-Folge zum Abschluss des Befehls.
„PWR01“ schaltet den AVR an oder „MVL28“ setzt die Lautstärke auf den Wert 40 (=28 hexadezimal) usw.
Die Steuerungsmöglichkeiten über ISCP sind wirklich sehr umfangreich und wer Lust hat, kann in diesem Dokument alle technischen Details finden:
https://www.capitolsales.com/UserFiles/Documents/Technical%20Tips/Onkyo%20Serial%20AVR_5-17.xlsx
Ich kann das Excel leider nicht direkt hochladen, weil das im Forum anscheinend nicht erlaubt ist. Bis jetzt habe ich mir nur mit den Funktionen im Blatt „CMND(MAIN)“ beschäftigt.
Für die Implementierung in Node-Blue habe ich einen Function-Node erstellt, der mit einem einfachen PHP Skript die ISCP-Befehle generiert und an den Receiver sendet.
Wer sich besser mit Node-Blue auskennt, kann ja vielleicht einen „richtigen“ Node daraus machen, aber für meine Zwecke reicht das völlig aus.
Im PHP-Code muss die Variable host auf die IP-Adresse bzw. den DNS-Namen des Receivers angepasst werden.
Der zu sendende Befehl wird dem Node über $message.payload übergeben, wobei die Message vorher mit einem Template-Node erzeugt wird.
Der folgende Beispiel-Flow schaltet beispielsweise das Radio ein (SLI24) und setzt die Lautstärke auf 35 (MVL23).
Über einen Timer-Node gesteuert hat man so morgens beim Aufstehen schon seine Lieblingsmusik…
Onkyo ISCP Beispiel Flow.txt (2,8 KB)
Das ISCP-Protokoll unterstützt auch Statusabfragen (z.B. über PWRQSTN), die der Receiver dann beantwortet. Dies liegt hier allerdings nicht im Scope.
Der PHP-Code beinhaltet nur eine rudimentäre Ausnahmebehandlung und auch keinen Check der Eingabe auf Gültigkeit - es handelt sich mehr um einen „Proof of Concept“ für den Eigengebrauch.
Grundsätzlich kann diese Vorgehensweise auch unabhängig von PHP bzw. Node-Blue verwendet werden.
Beispielsweise kann man in einer Linux-Shell mit dem Befehl netcat („nc“) Befehle an den Receiver senden und diesen somit über Shell-Skripte steuern.
Viel Spaß
FiveEights