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
Mit Python + Pyserial die Kommunikation steuern und dann an die bestehende Kodi Schnittstelle anflanschen.
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.
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.
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.
ah, genau sowas brauche ich! :) Ja, wenn du mir dazu ein Grundgerüst liefern könntest, würde mir das bestimmt schonmal sehr helfen.
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
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
Sehr cool! Vielen Dank! Ich werde mich mal durcharbeiten :)
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
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.
Lies Mal genau in dem Dokument ;) über der Liste sind Command, Event und Response erklärt
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.
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 -.-
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.
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.