Mit Raspberry über TCP/IP auf AV-Receiver zugreifen und auf Events reagieren

OP #5172931
Lesenswert?

Hallo Leute,

ich habe zuhause einen Raspberry PI mit Libreelec (Kodi) laufen und 
möchte mit diesem übers LAN auf meinen Denon AVR-X4100W zugreifen und 
bei Auftreten von gewissen Events vom AVR reagieren bzw. Skripte 
ausführen.

Das IP-Protokoll vom AVR habe ich mal angehängt.

Ich habe leider garkeine Ahnung davon und hoffe mir kann hier jemand 
helfen.

Viele Grüße
Angehängte Dateien:
Moderator Persönliche Seite #5172970
Lesenswert?

Dominik O. schrieb:
> Das IP-Protokoll vom AVR habe ich mal angehängt.

Dies sieht ziemlich einfach aus, es wird über den Port 23 (Telnet) 
kommuniziert. Du kannst daher zum Üben erstmal telnet installieren und 
dann in der Shell eingeben:

telnet ip-des-avr

Wenn Du dann verbunden bist, gibst Du z.B. ein:

MVUP<ENTER>

Dann sollte sich die Lautstärke des Masters erhöhen. Neue Eingabe:

MVDOWN<ENTER>

Dann sollte die Lautstärke wieder eine Stufe runtergehen. Jetzt 
schnappst Du Dir die PDF-Dokumentation und probierst mal andere Befehle 
aus, die stehen da alle drin.

Raus aus dem telnet kommt man mit <CTRL-]><q> (amerikanische Tastatur), 
bei der deutschen Tastatur ist es <STRG +><q>, d.h. Du hältst STRG 
runter, drückst die Plustaste, anschließend gibst Du ein q für "quit" 
ein.

> Ich habe leider garkeine Ahnung davon und hoffe mir kann hier jemand
> helfen.

Keine Ahnung ist definitiv zu wenig. Soll Dir jetzt hier jemand eine 
fertige Applikation programmieren?

Vielleicht solltest Du erstmal mehr Details bringen, was Du wirklich 
möchtest.
OP #5173027
Lesenswert?

Danke schonmal für die Antworten.

Naja, garkeine Ahnung war vielleicht etwas übertrieben.

Also, ich habe mit dem Rpi, Libreelec und Hyperion ein Ambilight gebaut.
Ich habe verschiedene congif-Dateien für Hyperion, dass das Ambilight 
immer für die entsprechende Video-Quelle configuriert wird. Diese kann 
ich per IR-Fernbedienung wechseln.
Ich würde diesen Wechsel aber gerne automatisieren, wenn ich am AVR die 
Quelle umschalte.

Die Idee ist jetzt, da ja eh schon beides im Netzwerk eingebunden ist, 
mit dem Rpi auf den AVR zuzugreifen und dann die EVENTs (so wird es in 
dem pdf genannt) auszulesen und eben, wenn bei entsprechender 
Quellen-umschaltung das Event ausgegeben wird, die Config von Hyperion 
zu wechseln.

Ich weiß nur nicht, wie ich diese Verbindung zwischen Rpi und AVR 
herstelle und wie ich dann diese Events auslesen kann. Geht das auch 
über Telnet am Raspi?

Ich will also keine Befehle an den AVR senden, sondern nur eben diese 
Events auslesen.
Moderator Persönliche Seite #5173029
Lesenswert?

Dominik O. schrieb:
> Geht das auch über Telnet am Raspi?

Nein, um die Events abzuhorchen, brauchst Du einen Daemon auf dem Raspi, 
der eine TCP-Verbindung zum AVR über Port23 herstellt, dort horcht, ob 
ein bestimmtes Event reinkommt und dann idealerweise ein externes Script 
startet.

Das kann man in C programmieren oder in einer Script-Sprache. Nur, wie 
kommen wir da jetzt weiter: Willst Du das programmieren oder erwartest 
Du das jetzt von Deinen Lesern?

In C könnte ich Dir ein Grundgerüst liefern.
Moderator Persönliche Seite #5173157
Lesenswert?

Anbei das Grundgerüst.

Übersetzen:
1
cc -Wall avrd.c -o avrd

Start im Debug-Modus (Vordergrund):
1
./avrd -d ipaddress

Beenden des Programms im Debug-Modus: STRG-C

Start als Daemon (legt sich in den Hintergrund):
1
./avrd ipaddress >/tmp/avrd.log 2>&1

Beenden des Daemons:
1
killall avrd

oder:
1
kill `cat /var/run/avrd.pid`

(Beachte die Backticks hier)

Mit diesen Infos kannst Du auch eine init-Datei anlegen, womit dann der 
avrd gestartet bzw. beendet wird.

In der Main-Funktion kannst Du die Zeichenketten, auf die Du reagieren 
willst, einsetzen - siehe EVENT1 bis EVENT3. Ist beliebig erweiterbar.

Keine Garantie, ist ungetestet.

Viel Spaß,

Frank

P.S.
Mit dem telnet-Programm kannst Du ja erstmal testen, welche Events denn 
da so kommen und von dem avrd ausgewertet werden sollen. Diese kannst Du 
dann in den Source einsetzen.

P.P.S.
Statt ipaddress kannst Du auch einen Hostnamen verwenden, vorausgesetzt, 
Du hast entweder einen lokalen DNS-Server installiert oder den Host mit 
der entsprechenden IP-Adresse in /etc/hosts eingetragen.
Angehängte Dateien:
Gast #5173316
Lesenswert?

Im von Dir beigelegten Dokument gibt es aber nur die Commands und 
Responses, also das was Du brauchst um z.B. vom Raspberry aus den 
Verstärker zu steuern.
Du willst es ja genau anders rum, wie Du schon sagst brauchst Du die 
Events

Gibt es hierzu auch eine Übersicht was der Receiver wann schickt?

Würde mich interessieren, weil ich evtl. eine Anzeige mit Songname usw 
basteln will
#5175232
Lesenswert?

Du könntest dir auch mal die Kodi Plugins anschauen. Die sind in Python 
geschrieben.
Ein Einstieg, wenn auch etwas unübersichtlich, wäre:
http://kodi.wiki/view/Add-on_development

Du kannst ja erstmal schauen, ob die nötige Schnittstelle für Kodi 
vorhanden sind (https://codedocs.xyz/CodeDocs/xbmc/group__python.html). 
Die Netzwerkverbindung lässt sich dann auch leicht mit python lösen.

Die Plugins erlauben auch einen Hintergrunddienst zu starten, der dann 
dauerhaft im Hintergrund läuft. Außerdem lassen sich dann sogar 
Einstellungen komfortable über die Kodi Oberfläche machen.

Ich habe damit mal ein Plugin geschrieben, dass beim Wechsel zwischen 
Play und Stop einen externen Pin ein und ausschaltet.
#5177575
Lesenswert?

Wenn es dir jetzt nicht rein auf Performance ankommt würde ich mir 
überlegen, ob man den ganzen Netzwerkkram mit C macht.

Spätestens wenn du das dann in einen eigenen Thread auslagern willst 
wird es dann in C hässlich.

Damit würdest du dir dann auch die ganze Buildumgebung sparen.
#5177858
Lesenswert?

Mit hässlich meine ich unter anderem die manuelle Verwaltung von Puffern 
und Ressourcen sowie die gegenüber höheren Sprachen doch sehr 
ausführliche Programmierung.

Damit mich hier keine falsch versteht. Ich sage nicht, dass es nicht 
geht oder nicht sinnvoll wäre das ganze in C zu schreiben.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren