HDMI-CEC Panasonic-TV Lautstärke

  • vorsicht: "AVR Volume Control"

    Dass ein TV das überhaupt kann ist halt eigentlich schon am Standard vorbei (ich hab mir das alles nicht ausgedacht!)


    Nachtrag: Im *-Text von Samsung liest es sich so als müsste es eigentlich gehen, das sollte aber mit der alten CEC Implementierung auch schon funktionieren.


    Nachtrag 2: OK in der Tabelle geht's wohl viel mehr darum ob der TV den AVR steuert. Vond aher wird die wenig helfen ;).

    mfg ,
    Reichi

  • Ich habe ja schon begonnen CEC durch einen Harmony Hub zu ersetzen, aber leider kann die TWO ja kein discrete on /off mehr.

    Da geraten die Geräte dann auch wieder mal außer tritt.


    mfg fmx

  • Reichi

    Danke für den Fix zur DeviceList :thumbup:


    Ich glaube auch, dass mein Samsung das "Fremdsteuern" der Lautstärketasten nicht unterstützt.

    Ein send(0,44,41) geht da komplett ins Leere.

    Da geht es wohl wirklich nur um das Zusammenwirken mit einem AVR, wo die Lautstärketasten des TV dann an ein AudioDevice weitergereicht werden.


    Ich habe meine One direkt mit dem TV verbunden und über HDMI-Arc noch eine Heimkinoanlage am TV angeschlossen.

    Mit CEC 2.0 kann ich die Lautstärke nicht mehr per CEC an den "AVR" weiterleiten, was im alten HDMI-CEC noch geht.


    Bei mir wird da trotz Audio-Device (5) in der Device-List die Lautstärke immer an den TV (0) gesendet.

    Daher geht der Befehl dann nicht raus.


    Habe mir den Code (Zeile 5-7 in der Cec.py eingefügt) mal minimal angepasst, so dass hier zumindest die Heimkinoanlage auch wieder über die FB der Dreambox gesteuert werden kann, sofern die Weiterleitung aktiviert ist:

    (keine Ahnung, ob das jetzt eine allgemeine Lösung ist)

    Python: Cec.py
        def sendSystemAudioKey(self, keyid, test=False):
            if self._volumeDest is eCec.ADDR_AUDIO_SYSTEM:
                self.sendKey(self._volumeDest, keyid)
                return True
    +       if self._volumeDest is eCec.ADDR_TV and self.getDevice(eCec.ADDR_AUDIO_SYSTEM):
    +           self.sendKey(eCec.ADDR_AUDIO_SYSTEM, keyid)
    +           return True
            return False

    Dann werden im CEC 2.0 die anderen Devices wohl erst erkannt, wenn sie eingeschaltet werden.

    Ist die Heimkinoanlage schon an, wenn die Dreambox startet, taucht sie nicht in der Liste auf und ist daher nicht als Audio-Device bekannt.

    Das wurde im alten CEC glaub ich beim GUI-Neustart nochmal gescannt, was da so vorhanden ist ????

    Gruß Sven (aka Dreamy)


    DM920 mit unstable OE2.5 DP
    One mit unstable OE2.6 DP

    Edited 2 times, last by Sven H ().

  • Reichi

    Für das richtige Erkennen des _volumeDest beim Einschalten des Audio-Device fehlt wohl noch eine Message in _onMessage:

    Code
            elif cmd == eCec.MSG_SET_SYSTEM_AUDIO_MODE:
                self.onSystemAudioModeStatus(sender, message)

    bisher gibt es da nur das, was bei mir aber gar nicht gefeuert wird:

    Code
            elif cmd == eCec.MSG_SYSTEM_AUDIO_MODE_STATUS:
                self.onSystemAudioModeStatus(sender, message)

    Gruß Sven (aka Dreamy)


    DM920 mit unstable OE2.5 DP
    One mit unstable OE2.6 DP

  • Dafür gibts im ALTEN Cec die möglichkeit das Ziel zu forcieren (z.B. den TV).

    Im Neuen ist das so noch nicht implementiert.


    Code
    MSG_SYSTEM_AUDIO_MODE_STATUS

    schickt der AVR als antwort auf

    Code
    MSG_GIVE_SYSTEM_AUDIO_MODE_STATUS

    welches CEC 2.0 in

    Python
    def _onReady(self, logicalAddress, physicalAddress):

    abfragt (via self.giveSystemAudioModeStatus())

    Von nem TV habe ICH das in Logs noch nie gesehen.


    Die Standarddokumentation für CEC findet man im Supplement 1 der High-Definition Multimedia Interface Specification Version 1.4.

    Interessant und wichtig für die eigentliche Kommunikation sind m. M. n. die Kapitel CEC 3 und alle ab CEC 10 (alles Andere ist technischer Kram der euch nicht kümmern muss).


    Man kann sich natürlich auch die libcec zu Gemüte führen, für einen Einstieg ins Thema, ganz ohne theoretische Grundlagen, halte ich das aber für harten Tobak.


    Sven H Eine Möglichkeit für dich wäre es

    Python
    def sendSystemAudioKey(self, keyid, test=False):

    so abzuändern, dass es, wenn self._volumeDest != ADDR_AUDIO_SYSTEM ist, du den Request an den TV schickst.

    Und dann den config Eintrag auf True zu setzen (gerufen wird das dann aus CecRemote).

    Das entspräche dann funktional der alten "TV (forciert)" Einstellung.

    mfg ,
    Reichi

  • Der TV selbst schickt da bei mir nur feature_abort, wenn ich irgendwas mit audio abfrage.

    Aber wenn ich den AVR (Heimkinoanlage) einschalte, sollte das CEC das doch mitbekommen und die Tasten dann an diesen weiterleiten.


    Mit der obigen zusätzlichen Message funktioniert das ja auch.

    Muss ich nochmal testen, was bei self.giveSystemAudioModeStatus() zurückkommt.


    Hab jetzt für meinen Samsung aber eine Lösung gefunden, die Tasten per Netzwerk anzusprechen.

    Mal sehen, ob das ne brauchbare Alternative werden könnte.

    Gruß Sven (aka Dreamy)


    DM920 mit unstable OE2.5 DP
    One mit unstable OE2.6 DP

  • Muss ich nochmal testen, was bei self.giveSystemAudioModeStatus() zurückkommt.

    Das kommt asynchron zurück gell.

    Ich finde es allerdings eher merkwürdig, dass der AVR darauf gar nicht antwortet.

    Welches Modell ist das?

    Ggf. können wir im IRC auch gerne mal ein Log von deinem Fall durchsprechen.


    Das kann gut und gerne auch ein Bug in CEC 2.0 sein.

    mfg ,
    Reichi

  • Das ist auch ein Samsung-Gerät (2.1 mit BlueRay).

    Wenn der den Audio-Status übernimmt (Aktivierung per FB) kommt in _onMessage eine 114 (Dezimal) an.

    Und die wird dort derzeit gar nicht abgefragt, weshalb ich ja diese zusätzliche Message reingenommen habe).


    Können wir gerne im IRC mal probieren ;)

    Wird bei mir aber erst am Abend.

    Gruß Sven (aka Dreamy)


    DM920 mit unstable OE2.5 DP
    One mit unstable OE2.6 DP

  • OK ja, da hab ich eine Kleinigkeit im Vergleich zur alten Implementierung übersehen.


    ergänz doch in _onMessage einfach mal


    Python
    elif cmd == eCec.MSG_SET_SYSTEM_AUDIO_MODE:
        self.onSystemAudioModeStatus(sender, message)

    Ich schieb das derweil schon mal ins git.

    mfg ,
    Reichi

  • Die Anpassung hatte ich ja weiter oben schon gemacht ;)

    Damit funktioniert es dann zumindest nach Ändern des Audio-Gerätes.


    Leider wird das Audio-Gerät dann bisher aber nur bei Änderung erkannt.

    Wenn das Audio-Gerät bereits beim Start der Box bzw. beim GUI-Neustart aktiv ist, dann bekommt das CEC nicht mit.


    Irgendwo fehlt da noch ein Laden/Abfragen aller CEC-Geräte beim e2-Start.

    Das hat im alten CEC glaub ich funktioniert.

    Da ist bei mir auch die Devicelist fast immer vollständig.

    Gruß Sven (aka Dreamy)


    DM920 mit unstable OE2.5 DP
    One mit unstable OE2.6 DP

  • Ja mit dem Fix für die Devicelist füllt sich die Liste.
    Allerdings erscheint meist nur der TV.


    Der AVR erscheint erst mit 2 Einträgen (1x Audio + 1x Wiedergabe), wenn ich ihn aus/einschalte.
    Die 2. Dreambox (920) hab ich gestern gar nicht gesehen.
    Hätte ich vermutlich auch mal aus/einschalten müssen.


    Da war die Liste im alten CEC glaub zuverlässiger.


    Ich denke, da fehlt irgendwo ein Befehl zum Abscannen aller Devices.
    So nach dem Motto „Anfrage an alle: welche CEC-Geräte sind da?“

    Gruß Sven (aka Dreamy)


    DM920 mit unstable OE2.5 DP
    One mit unstable OE2.6 DP

  • Es gibt keinen scan aller Geräte ;).

    Die neue version ist ja bewusst "sparsam" gehalten (für den Anfang).

    Viele Geräte reagieren auch bestimmte Broadcasts direkt mit Rückfragen.

    Deswegen auch das Log ;).


    Du kannst auch gerne mit beiden Versionen ein Log erstellen, dann wird man das relativ schnell erkennen.

    mfg ,
    Reichi

  • Wobei ich gestern noch ein anderes Problem mit der neuen Version hatte ;)


    Nach Ausschalten der One (in den Idle) ging der TV mit aus.
    Wenige Minuten später ging er dann immer von allein wieder an (die One verbleibt im Idle).


    Mit dem alten CEC passiert das nicht.
    Musste dann nach dem 3. Versuch in der Nacht das neue CEC erstmal deinstallieren, dass der TV ausblieb :D

    Gruß Sven (aka Dreamy)


    DM920 mit unstable OE2.5 DP
    One mit unstable OE2.6 DP

  • Es kann gut sein, dass wir den AVR etwas agressiver ansprechen müssen.

    Ein erster Ansatz wäre eventuell folgende Änderung (ich hab die geänderte Zeile unten mit nem Kommentar versehen).

    Das ist noch in nem vernünftigen Rahmen was potentielle Nebenwirkungen angeht...


    mfg ,
    Reichi

  • Danke, werde ich am Abend mal testen.


    Mit der letzten Änderung von gestern hat jedenfalls das Erkennen des AVR bei dessen Statusänderung funktioniert.


    Hatte dann nochmal beide CEC-Versionen verglichen, was passiert, wenn der AVR bereits beim Start der Dreambox aktiv ist.

    Da verhalten sich beide gleich und ignorieren den AVR.


    Dann schaue ich mal, ob deine heutige Anpassung da was bewirkt ;)

    Gruß Sven (aka Dreamy)


    DM920 mit unstable OE2.5 DP
    One mit unstable OE2.6 DP

  • Das zusätzliche self.giveDevicePowerStatus(eCec.ADDR_AUDIO_SYSTEM) macht leider keinen Unterschied.

    Die Dreambox weiß hier einfach nicht, dass es einen aktiven AVR gibt, wenn dieser bereits beim e2-Start aktiv ist.

    Somit will er die Tasten immer noch an den TV weiterleiten, obwohl ja der AVR an ist.

    Gruß Sven (aka Dreamy)


    DM920 mit unstable OE2.5 DP
    One mit unstable OE2.6 DP

  • Hast du mal ein Log für mich von nem e2 start in so nem Fall?

    Ich hab das jetzt etwas ausführlicher gelöst, würde aber vorher gerne mal ein Log mit eben diesen self.giveDevicePowerStatus.... sehen.


    Nachtrag: ich hab mal eine Änderung gepusht! Ich bitte darum diese auszutesten.

    mfg ,
    Reichi

  • Danke, das funktioniert jetzt :thumbup::)

    Nun wird der Status des AVR beim e2-Start korrekt erkannt und das Ziel für die Volume-Weiterleitung richtig gesetzt.


    Das Audio-System scheint jetzt auch bei jedem Start immer in der Devicelist enthalten zu sein.

    Bei den anderen Geräten (TV, 2. Dreambox und Wiedergabegerät) ist es eher Zufall, ob diese angezeigt werden oder nicht.

    Die Devicelist wird meist etwas vervollständigt, wenn ich den AVR aus- und wieder einschalte.


    Mit der Version gibt es jetzt nur das Problem, dass der TV beim Schalten der Dreambox in den Idle fast immer anbleibt.

    Gruß Sven (aka Dreamy)


    DM920 mit unstable OE2.5 DP
    One mit unstable OE2.6 DP