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
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.
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.
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.
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.
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.