HDMI-CEC Panasonic-TV Lautstärke

  • Reichi

    Ich hab das im CEC 2.0 mal weiter erforscht.

    Mit der aktuellen Version des CEC 2.0 habe ich 2 Probleme.


    1. geht der TV hier nur beim 1. Idle der Box nach GUI-Neustart mit aus.

    Schalte ich die Box dann wieder ein, woraufhin der TV auch mit angeht und die Box dann wieder aus, bleibt der TV immer an.


    Da sieht man im Log dann nur sowas:

    Code
    Feb 25 16:27:33 dreamOne enigma2[1852]: I/  [Cec.isActiveSource] :: (64, 0) <=> (64, 0)
    Feb 25 16:27:33 dreamOne enigma2[1852]: I/  [Cec.send] :: self > f :: 36  (True)
    Feb 25 16:27:33 dreamOne enigma2[1852]: [eCec] send 3 -> f : 36
    Feb 25 16:27:42 dreamOne enigma2[1852]: [eCec] my physical: f.f.f.f  logical 3
    Feb 25 16:27:42 dreamOne enigma2[1852]: I/  [Cec.handleActiveSource] :: (255, 255) (64, 0)
    Feb 25 16:27:42 dreamOne enigma2[1852]: I/  [Cec._onReady] :: Physical address: f.f.f.f # Logical address: 3
    Feb 25 16:27:42 dreamOne enigma2[1852]: I/  [Cec.send] :: self > f :: 84 ff ff  (True)
    Feb 25 16:27:42 dreamOne enigma2[1852]: [eCec] send 3 -> f : 84 ff ff

    Wenn ich nun in der Cec.py in der Cec-Class das self._cec.handleExternal(True) deaktiviere, dann funktioniert das Ausschalten des TV immer.

    Dann sieht es im Log so aus:


    Das 2. Problem betrifft das automatische Einschalten des TV nach Ausschalten der Box (Idle), wo der TV auch erstmal mit aus geht. Dabei schaltet sich der TV nach einigen Sekunden einfach wieder ein.


    Die Box hat nach dem Idle laut Log f.f.f.f als physical adress.

    Allerdings wird der TV dann im def _onReady() per powerOn() wieder eingeschaltet, wenn die Dreambox die physical adress auf 4.0.0.0 ändert, was meist bereits nach 15 sek passiert.

    Die Dreambox bleibt dabei aber im Idle.

    Daher habe ich mir in oder _onReady das powerOn() erstmal mit if self._powerState != eCec.POWER_STATE_STANDBY: abgefangen, damit der TV im Idle der Box aus bleibt.

    Das ist aber bestimmt keine generelle Lösung.


    Im Log sieht das dann so aus, wenn der TV angeht (bei _onReady mit 4.0.0.0):

    Mit dem alten CEC habe ich beide Probleme nicht.


    Wir können das gerne auch im Chat besprechen.

    Ist nur immer schwierig, da einen gemeinsamen Termin zu finden ;)

    Gruß Sven (aka Dreamy)


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

  • Hab vermutlich auch noch einen Fehler gefunden:


    Im _onMessage ist eCec.MSG_REPORT_PHYS_ADDR zwei mal aufgeführt.

    Beim 2. Eintrag müsste aber vermutlich eCec.MSG_GIVE_DEVICE_POWER_STATUS hin, was ja auch die hinterlegte Funktion andeutet.


    Also von

    Python
    elif cmd == eCec.MSG_REPORT_PHYS_ADDR:
          self.onGiveDevicePowerStatus(sender)


    so ändern:

    Python
    elif cmd == eCec.MSG_GIVE_DEVICE_POWER_STATUS::
          self.onGiveDevicePowerStatus(sender)


    Und in der def onGiveDevicePowerStatus() müsste man ja dann eigentlich dem anfragenden Gerät dann seinen Powerstatus mitteilen und nicht das andere Geräte nach seinem Powerstatus zurückbefragen, oder ?

    Code
        def onGiveDevicePowerStatus(self, sender):
            self.send(sender, eCec.MSG_REPORT_POWER_STATUS, [self._powerState])
            #self.giveDevicePowerStatus(sender) #sendet ja eine Anfrage zum Status des anderen Gerätes

    Leider behebt das aber nicht o.g. Probleme, sondern da kommt das ganze wohl noch durcheinander, weil in self._powerState nicht immer der tatsächliche PowerState steckt.

    Gruß Sven (aka Dreamy)


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

  • Reichi

    Hab mal am CEC 2.0 etwas weiter geforscht ;)

    Da funktioniert jetzt hier auch das Boot to Idle, ohne dass sich der TV einschaltet :thumbup:

    Auch wird der TV jetzt wieder ausgeschaltet, wenn die Box in den Idle geht (auch nach dem 2. oder 3. Einschalten der Dreambox).


    hab dabei folgende Sachen noch angepasst:

    - erlaube Boot to Idle (kein powerOn TV on Boot to Idle)

    - DeviceType hat beim reportPhysicalAddress gefehlt

    - neues Event eCec.MSG_GET_CEC_VERSION und passende Methoden zum Antworten (da wird aktuell fest mit 00 geantwortet, was e2 bisher auch geantwortet hat - weiß nicht, ob es da eine eCec.Variable für die CEC-Version gibt)

    - aktives Abfragen von fehlenden Device-Daten (None oder Unknown für Name und Vendor) - dadurch sieht die DeviceList immer recht ordentlich aus ;)

    - setPowerState erst am Ende in powerOff

    - ein paar zusätzliche Log.i-Ausgaben zum besseren Lesen des Log und verstehen der Abläufe ;)


    Musst du mal schauen, ob meine Überlegungen da auch richtig sind. 8)

    Files

    • Cec.py

      (14.86 kB, downloaded 30 times, last: )

    Gruß Sven (aka Dreamy)


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

    Edited once, last by Sven H ().

  • Danke für deine Arbeit.

    Ich habe den größten Teil übernommen, die "start" Änderung jedoch nicht.

    Das python plugin muss so früh wie irgendwie möglich loslaufen, sonst verpasst es am ende wichtige Messages vom TV.


    Zum Thema "Geräte nach Namen und Vendor" pollen hab ich in der Commit-Message einen entsprechenden Kommentar untergebracht.


    https://git.io/JqeR6

    mfg ,
    Reichi

  • Ich hätte noch eine Variante, wo pro Gerät nur eine Anfrage zu Name/Vendor geschickt wird ;)
    Da merkt er sich, welche Geräte schon angefragt wurden.
    Da ist ist Datenverkehr deutlich geringer, aber die Devicelist ist genauso gut gefüllt.
    Vom Prinzip macht das ja schon die def onCheckDevices, die aber nur bei einem komplett neuen Device ausgeführt wird.


    Das mit dem onReady darf aber erst beim autostart ausgeführt werden, weil sonst der TV beim Boot to Idle angeht.
    Das ist im aktuellen CEC auch so.
    Muss ich dann Abend noch mal mit deiner Variante testen.


    Die messages kommen ja trotzdem weil diese im init aktiviert werden.
    Bei mir gehen da offensichtlich keine Messages verloren.

    Gruß Sven (aka Dreamy)


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

  • OK, ich hatte es jetzt nicht konkret getestet, kann ich aber gerne noch erledigen.

    Dass das mit boot to idle zusammenhängt war nicht so direkt ersichtlich, da wäre ein Kommentar im Code schön ;).

    mfg ,
    Reichi

  • Ok.
    Dann kommentiere ich das noch etwas und poste heute Abend meine aktuelle Version. ;)


    Hab auch in Abgleich mit dem „alten“ HDMI-CEC zwei Befehle im powerOn getauscht.


    Da wird wohl das onView vor dem activeSource gesendet, was im CEC 2.0 noch andersrum ist.
    Keine Ahnung, ob die Reihenfolge da relevant ist.

    Gruß Sven (aka Dreamy)


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

  • Reichi


    Hier meine aktuelle Version, wo ich in Abgleich der Log-Meldungen aus dem alten CEC noch ein paar Anpassungen gemacht habe ;)


    Änderungen:

    - _ready_conn und _onReady erst in start() anstatt in init(), da sonst beim Boot to Idle (z.B. Elektro-Plugin) der TV angeht

    - für das Abfragen der Devices (Name, Vendor) einen Counter eingebaut, damit max. 3 Anfragen je Device gemacht werden

    - das isPendingOrVisibleNotificationID("Standby") in _onReady etwas nach unten verschoben, da sonst einige Sachen nicht gesendet werden, die das alte CEC bei gleicher Situation sendet

    - neues Event eCec.MSG_SET_MENU_LANG bei _onMessage (in der eingebundenen Methode wird dazu dann aber nur ein Logeintrag ausgegeben)

    - bei onGiveDeviceVendorId wird jetzt an den Anfragenden die VendorID der Box zurückgesendet (das wurde bisher nur gesendet, wenn der Anfragende die Box selber war ??)

    - bei Anfragen zu onVendorCommandWithId wird jetzt noch ein featureAbort zurückgesendet (macht das alte CEC auch)

    - in oneTouchPlay() die Reihenfolge von self.imageViewOn() und self.activeSource() getauscht (anhand des Logs vom alten CEC)


    Edit:

    Wenn das mit dem Abfragen von Name/Vendor und dem Counter immer noch zu unsauber ist, kann ich ja mal so eine Refresh-Option in die DeviceList einbauen. So dass man dort zumindest manuell die Angaben abfragen/aktualisieren lassen kann. ;)

    Files

    • Cec.py

      (15.76 kB, downloaded 29 times, last: )

    Gruß Sven (aka Dreamy)


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

    Edited 2 times, last by Sven H ().

  • Reichi

    In Ergänzung zu meiner letzten Cec.py in Post #49 hab ich hier mal versucht, die DeviceList mit einem Refresh-, Scan- und Info-Button zu versehen ;)


    Damit kann man per Grün die Daten der gelisteten Geräte aktualisieren.

    Über Gelb kann man auch nach weiteren Geräten suchen lassen.

    Über Info kann man sich zum ausgewählten Device noch die weiteren Infos anzeigen lassen.


    Denke, dass das dann das automatische Abfragen in der Cec.py ersetzen könnte ;)

    Hab den Skin-Namen mit self.skinName = "CeCDeviceListv2" angepasst, damit auch wirklich der neue Skin-Screen geladen wird und es dann keine Probleme mit dem alten CEC gibt.

    (ist im Code dann allerdings erstmal nur in HD - FHD müsste dann vermutlich in den FHD default-Skin)

  • Hallo,

    kann ir jemand sagen, wie ich dieses CEC Packet auf meine DM900 testweise bekomme. (DM900 mit OE2.5)?

    Muss man nur die Cec.py ins Verzeichnis kopieren?

    LG

  • Das neue CEC 2.0 geht bisher nur im OE 2.6 (also One/Two).


    Wann das auch im OE2.5 möglich sein wird, kann evtl. @Reichi beantworten ;)

    Gruß Sven (aka Dreamy)


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

  • Das wäre nett,...

    Ich hatte meine Samsung Soundbar gegen Bose getauscht, Dream920 hat immer Samsung TV über HDMI angeschaltet/ausgeschaltet, jetzt tut er nicht mehr, habe schon verschiedene Einstellungen probiert ohne Erfolg :( ;(

    Probiere noch neuflashen, da früher hat das funktioniert

    Dreambox 920UHD BT FBC Multistream 2TB HDD + Eclipse X5/DreamOne + ruONE/900UHD/525HD/520HD + Eclipse X5
    Satelliten: 19.2°/13°/4.9° IPTV: OTTCLUB + EDEM

  • Das wäre nett,...

    Ich hatte meine Samsung Soundbar gegen Bose getauscht, Dream920 hat immer Samsung TV über HDMI angeschaltet/ausgeschaltet, jetzt tut er nicht mehr, habe schon verschiedene Einstellungen probiert ohne Erfolg :( ;(

    Probiere noch neuflashen, da früher hat das funktioniert

    Hi,


    das mag jetzt total sinnfrei klingen.

    Aber wenn sowas "einfach so" aufhört zu funktionieren (und am CEC der 9x0 hat sich lange nix mehr geändert) kann es helfen mal alle beteiligten Geräte (TV, Verstärker, etc) stromlos zu machen.

    Also nicht nur ausschalten sondern "ausstecken". 5-10 Minuten warten und wieder einstecken.


    MIt etwas Glück hat sich durch wundersame Selbstheilungskräfte alles wieder von alleine eingerenkt.


    In meiner privaten Konstellation mit einem Yamaha Verstärker tritt dieses Phänomen 2-3x im Jahr auf.

    Wenn ich den Verstärker dann für ein paar Minuten stromlos mache ist alles wieder gut.

    mfg ,
    Reichi

  • Hi,

    ja stimmt!...hatte auch gestern viel gelesen und heute morgen Fernseher Samsung stromlos gemacht für paar Stunden, musste sowieso weg, dann später an gemacht alle HDMI-Kabeln angesteckt HDMI-CEC im Fernseher aktiviert und sehe da: alle Geräte DM920 Bose 700 wurden erkannt und funktioniert jetzt das ganze wie sein soll. Dreambox einschalten -> TV + Bose geht auch an!


    Danke fürs Rückmeldung Reichi :thumbsup:

    Dreambox 920UHD BT FBC Multistream 2TB HDD + Eclipse X5/DreamOne + ruONE/900UHD/525HD/520HD + Eclipse X5
    Satelliten: 19.2°/13°/4.9° IPTV: OTTCLUB + EDEM

  • Was letztlich einfach wieder nur eine Bestätigung dafür ist, dass HDMI-CEC eine Wundertüte ist (generell und nicht auf Dreamboxen bezogen!)

    Gruss
    Dre


    Boxen (im Einsatz): DM920, DM900, DMOne
    Developer Project Merlin - we are OpenSource

  • Es gibt die Tage nochmal ein kleines Update. Dort habe ich u.A. einen "Vendor-Handler" für Samsung eingebaut.

    Außerdem ein paar weitere Bugs gefixt und das Standby-Handling verbessert.

    Als einfaches beispiel wie man das realisieren kann.


    Danke fürs Rückmeldung Reichi :thumbsup:

    Sehr gerne. Danke für die Rückmeldung/Bestätigung.

    mfg ,
    Reichi

  • Vorher hatte ich das CEC 2.0 immer nur testweise installiert und bin dann aber für den normalen Betrieb wieder auf das alte CEC zurück.


    Den letzten Stand aus dem git hatte ich jetzt einige Tage auf der One im Echtbetrieb ohne Probleme am Laufen, so dass ich bis jetzt nicht mehr auf das alte CEC zurückwechseln musste.


    Ich bin schon gespannt, wie das mit dem Vendor-Handler funktioniert ;)


    Wo findet man denn dazu Infos?
    Hatte schon vielfach nach speziellen Vendor-Codes gegoogelt, aber nichts gefunden.
    Hatte ja immer nur gesehen, dass mein Samsung immer per 0xA0 einen Special Samsung Code 0x23 gesendet hat.

    Gruß Sven (aka Dreamy)


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