Forum: PC-Programmierung Mit Raspberry über TCP/IP auf AV-Receiver zugreifen und auf Events reagieren


von Dominik O. (dominik_o)


Angehängte Dateien:

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

von blutgruppe. (Gast)


Lesenswert?

Mit Python + Pyserial die Kommunikation steuern und dann an die 
bestehende Kodi Schnittstelle anflanschen.

von Frank M. (ukw) (Moderator) Benutzerseite


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.

von Dominik O. (dominik_o)


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.

von Frank M. (ukw) (Moderator) Benutzerseite


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.

von Dominik O. (dominik_o)


Lesenswert?

ah, genau sowas brauche ich! :)

Ja, wenn du mir dazu ein Grundgerüst liefern könntest, würde mir das 
bestimmt schonmal sehr helfen.

von Dominik O. (dominik_o)


Lesenswert?

Habe hier etwas gefunden für Libreelec in Python, da geht es wohl darum 
die Audio-ausgabe automatisch zu wechseln, wenn ein Bluetooth gerät 
verbunden ist.

Wäre das sowas und müsste quasi nur auf TCP und meine Belange 
umgeschrieben werden?

https://forum.libreelec.tv/thread/9024-how-can-i-get-dual-audio-for-analog-bluetooth/?postID=54352#post54352

: Bearbeitet durch User
von Frank M. (ukw) (Moderator) Benutzerseite


Angehängte Dateien:

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.

: Bearbeitet durch Moderator
von Dominik O. (dominik_o)


Lesenswert?

Sehr cool! Vielen Dank!

Ich werde mich mal durcharbeiten :)

von Heinz (Gast)


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

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Heinz schrieb:
> Gibt es hierzu auch eine Übersicht was der Receiver wann schickt?

Kannst Du doch ausprobieren. Telnet starten, an allen Knöpchen 
drehen/drücken und ablesen, was das Ding ausgibt.

von Dominik O. (dominik_o)


Lesenswert?

Lies Mal genau in dem Dokument ;) über der Liste sind Command, Event und 
Response erklärt

von M.K. B. (mkbit)


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.

von Dominik O. (dominik_o)


Lesenswert?

Danke für die Info, schaue ich mir eventuell auch noch an :)

Aber im moment scheitere ich noch daran überhaupt etwas in Libreelec 
oder für Libreelec zu kompilieren. Libreelec kennt die Befehle cc bzw. 
gcc nicht -.-

von M.K. B. (mkbit)


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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

M.K. B. schrieb:
> Spätestens wenn du das dann in einen eigenen Thread auslagern willst
> wird es dann in C hässlich.

Was soll daran "hässlich" werden?

von M.K. B. (mkbit)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.