AC3 downmix ein/aus wenn AVR aus/ein

  • Hallo,


    da HDMI-CEC noch sehr rudimentär ist und ich den AC3 Downmix trotzdem irgendwie automatisch schalten möchte versuche ich mir grade selbst was zu basteln. Ich habe einen Denon AVR X1000, den kann man schön über`s Netzwerk abfragen.
    Ich habe mir schon ein kleines Phyton-Skript gebaut. Was mir noch fehlt ist ein Trigger und wie ich den AC3 Downmix steuern kann.



    1. Ich würde das Skript gern beim Ereignis "HDMI: now connected" (Taucht im messages-log auf) ausführen. Ist das irgendwie machbar?


    2. Wie kann ich den AC3 downmix steuern?



    Bisher hab ich noch nix mit Phyton gemacht, ich hoffe dass was ich da zusammengefrickelt habe ist soweit ok?


    EDIT: Und hier mein funktionierendes Plugin


  • 1)
    Man könnte sich fürs advancend-hdmi-cec-plugin eine Art Interface (wie im java) vorstellen, mit dem man sich bei den Events dazuhängen kann. Meine Python-Kenntnisse sind leider noch nicht so ausgereift, aber vielleicht kann ja ein Profi ein paar Tipps geben, dann könnte ich das einbauen. Vielleicht gehts auch mit einem notifier.


    2)
    Das müsste man in den enigma-Sourcen suchen, ist aber vermutlich keine Hexerei

  • Dieses Vorhaben habe ich schon seit Jahren realisiert, ohne daß ich dafür programmiert habe.
    Die Lösung liegt doch auf der Hand, eine Harmony FB :winking_face:

  • @ Joe
    1) Da wäre es mir lieber wenn da direkt was vom System kommt. Aber auch hier kenn ich mich mit Linux nicht gut genug aus.


    2) Ich hab da was im Audioselection.py gefunden. Bin mir nur noch nicht sicher wie ich das verwenden kann.


    netman
    Harmony schön und gut, hab ich auch schon drüber nachgedacht, ist mir aber das Geld nicht Wert. Theoretisch könnte ich auch die Lautstärke des AVR steuern wenn ich das irgendwie abfangen könnte. Aber darum geht`s erstmal nicht. Auserdem geht`s mir auch darum was zu lernen und zu gucken was machbar ist.

  • Zu 1)
    Wenn du das irgendwo auf linux-ebene abfangen kannst, geht das natürlich auch.


    Aber für das Switchen des Downmix musst du vermutlich sowieso in den laufenden enigma-python-thread

  • Zum Abfangen auf Linux-Ebene? Nein, ich weiß auch nicht ob da irgend etwas geschrieben wird (proc oder status-files). Soviel ich weiß wurde da ja nur die hdmi-cec - C-Library ins enigma eingebunden, also ist es auch kein Bestandteil vom Kernel.


    Ich denke du wirst das nicht ohne python-plugin bewerkstelligen können, und dann würde sich natürlich wieder ein hook im advanced-hdmi-plugin anbieten, da dieses bereits die beteiligten python-enigma-methoden überschreibt.
    Ich hab mir schon überlegt, eine art addon-service für das advanced-plugin zu implementieren. Dann könnte man sich bei den Aktionen einhängen bzw. das Senden der Signale beeinflußen.

  • Joe, danke Dir erstmal für die Unterstützung. Evtl. komme ich auf dein Angebot zurück. Aber erstmal versuche ich`s so weiter.


    Schalten lässt sich das ganze mittlerweile. Und das ist sogar einfacher als ich mir das Gedacht habe. Einfach nach '/proc/stb/audio/ac3' 'passthrough' oder 'downmix' schreiben, schon schaltet das Skript.


    Jetzt muss Ich es nur noch triggern.


    Im messages log-file steht folgendes:



    Ich denke dazu bietet sich udev an. Aber irgendwie komme ich mit der udev-Regel nicht klar. Die 50-switch-ac3.rules sieht momentan so aus:

    Code
    KERNEL=="misc" SUBSYSTEM=="hdmi_cec0", ACTION=="add", RUN+="/hdd/temp/entwicklung/my.py"


    Kann mir hier jemand unterstützung zu geben?

  • Ok, ich hab aber eh schon eine beta-version gemacht, die Hooks implementiert. Falls du sie ausprobieren willst müsstest du in deinem Plugin in etwa folgendes hinzufügen bzw. anlegen:



    Im Adv-Hdmi-Setup gibt es nun auch eine Info-Taste, die den Hook auflistet, wenn alles funktioniert hat.

  • Das ist nur ein konstanter String, und wird vom adv-hdmi definiert und den hooks übergeben. Aber die kannst du natürlich deinem script mitübergeben und darauf reagieren.


    Es gibt diese 4 Konstanten:
    ADVHDMI_BEFORE_POWERON = "BEFORE_POWERON"
    ADVHDMI_BEFORE_POWEROFF = "BEFORE_POWEROFF"


    ADVHDMI_AFTER_POWERON = "AFTER_POWERON"
    ADVHDMI_AFTER_POWEROFF = "AFTER_POWEROFF"


    die Before-Events könnten das Senden verhindern, wenn der hook false zurück gibt. Für deine Zwecke reicht aber die Tatsache, dass etwas gesendet wird, also "AFTER". Mit deinem python-script kannst du dann feststellen, ob das Signal für den AVR bestimmt ist (also ob der AVR erreichbar ist), und dementsprechend die AC3-Einstellungen ändern.

  • Mal ne frage. Wenn ich das script als plugin bastle, kann ich das dann doch auch mit if config.plugins.cec.sendpower.value: triggern, oder?

  • Das Config-Element ist von enigma und steuert nur, ob überhaupt signale von der dream gesendet werden sollen.


    Wenn du es nicht auf linux-ebene abfangen kannst, dann bleibt dir wohl nur ein enigma-plugin in verbindung des adv-hdmi-hooks.


    Den groben Rumpf eines Plugins hab ich ja schon geposte. Überleg dir noch einen "Namen" dafür, leg diesen Ordner unter /usr/lib/enigma2/python/Plugins/Extensions/ an, Kopier den Rumpf in ein File plugin.py und schon ist das Plugin "betriebsbereit".
    Dein Python-Script müsstest du noch zum Modul umbauen und im "neuen" Plugin importieren (oder du integrierst es gleich), und anstatt den Print-Anweisungen eben das AC3-Handling implementieren.

  • Zitat

    Original von SuperAggy
    Harmony schön und gut, hab ich auch schon drüber nachgedacht, ist mir aber das Geld nicht Wert.



    Aber wenn es keine Menschen gäbe, denen die Ersparnis eines Tastendrucks dreistellige Beträge wert wäre, gäbe es solche Unternehmen nicht :winking_face:

    Vorgehen in Internet-Foren:


    1. Beitrag lesen
    2. Problem verstehen
    3. Lösung überlegen
    4. Antwort verfassen
    5. falls unlösbar Finger still halten.


    VU+ Duo4k SE VTi & DM 900 GP - MacBook Air M1, AVR-Heimkino mit Marantz NR1608 und Canton Ergo 5.1-Set
    Datengrab: Fantec http://bit.ly/1Gk291p
    Mitglied-Nr. 7.625 von ca. 345.000

  • So, hab es jetzt nochmal installiert und dann einen reboot gemacht. So ging es dann. Habe mein Plugin nach "/usr/lib/enigma2/python/Plugins/Extensions/DenonControl" kopiert und eine leere __init__.py angelegt. Nochmal neugestartet. Aber es passiert nix.


    Mein plugin.py

  • hatte ich leider neulich auch, laut Google ist es ein Treiber Problem, musste neu flashen -.- hat nichts mit den Plugins zutun


    EDIT: sorry verlesen ist doch eine andere :grinning_face_with_smiling_eyes:

  • Zitat

    Original von SuperAggy
    So, hab es jetzt nochmal installiert und dann einen reboot gemacht. So ging es dann. Habe mein Plugin nach "/usr/lib/enigma2/python/Plugins/Extensions/DenonControl" kopiert und eine leere __init__.py angelegt. Nochmal neugestartet. Aber es passiert nix.


    Hast du im AdvHdmi-Setup nach dem Drücken von "Info" einen Eintrag "AC3-Switch" ? Bzw. siehtst du im Log-File deinen print-Eintrag "[DenonControl] trigger recived"

  • Ein druck auf Info bringt folgendes auf der Glotze:


    Code
    Es haben sich keine HDMI-CEC Hooks eingetragen


    Unter /var/log/messages findet sich überhaupt nichts.