HDMI CEC Verbindung zum TV (Funktion aus Plugin) via Script möglich?

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • HDMI CEC Verbindung zum TV (Funktion aus Plugin) via Script möglich?

      Hallo zusammen,

      ich nutze das Plugin HDMI-CEC und habe darüber die Verbindung zum Fernseher hergestellt. Im Plugin selbst gibt es ja auch die Tasten "Verbinden" und "Trennen".
      Ich stelle ab und zu fest, dass die Verbindung nach einem Neustart der Box nicht automatisch wiederhergestellt wurde und muss dann das Plugin aufrufen und die gelbe Taste drücken. Dann klappt alles wieder einwandfrei.
      Nun würde ich mir diesen Umweg gerne ersparen. Also dachte ich mir, dass ich die Funktion doch in ein Script packen und beim Start der Box automatisch ausführen lassen könnte.
      In der Datei plugin.py habe ich folgendes gefunden:

      Python-Quellcode: plugin.py

      1. hdmi_cec.activateSourceTimer()
      2. address = 0
      3. message = 0x85
      4. messageReceived(None, address, message)
      Aber es reicht wohl nicht, das einfach so in eine Textdatei zu packen und als Script verarbeiten zu lassen. Zumindest hat ein entsprechend blauäugiger Versuch nicht funktioniert ;)
      Kann mir da jemand weiterhelfen? Oder ist das Vorhaben vielleicht gar nicht möglich?

      Danke und Grüße,
      Linkstar
    • @Linkstar,

      ich würde nach einer Änderung an HDMI-CEC die Geräte immer stromlos machen, danach müssten Änderungen sofort greifen.

      Mir ist klar, das ist lästig, mit einer schönen Mehrfachsteckdose (die hoffentlich auch die Stromspitzen bei Blitzeinschlag abfängt) lässt sich das jedoch mit einem Klick erledigen.
      Niemand ist perfekt !
    • Ich ändere ja nix. Die Verbindung ist einfach gekappt. Zumindest schliesse ich das daraus, dass die TV-Fernbedienung die Box nicht mehr steuert und das erst wieder tut, nachdem ich im Plugin die gelbe Taste (Verbinden) gedrückt habe.
    • @Linkstar,

      schau dir mal den Post 1157 von @IchKannDenken an, vielleicht hilft dir das weiter, ich habe mit der geänderten Datei endlich meinen Sky-Pro-Receiver in den Griff bekommen: HDMI CEC an den VU+ Boxen
      Niemand ist perfekt !
    • Zur ursprünglichen Frage:

      Ich habe das mal ausprobiert. Aus enigma2 heraus kann ich mittels

      cmd = struct.pack('BBB',int('0x82',16),int("0x" + str(config.hdmicec.tvinput.value) + str(config.hdmicec.avinput.value),16),int("0x00",16))
      eHdmiCEC.getInstance().sendMessage(int("0x0F",16), len(cmd), str(cmd))

      die Box jederzeit wieder verbinden.


      Diesen Code kann man beliebig einbauen.
      Ich habe diese Zeilen testweise in einen eigenen Thread direkt in die normalerweise leere __init__.py gepackt und lass ihn dort periodisch aufrufen.
      Dadurch wird die Verbindung zum TV bei Abbruch zuverlässig wiederhergestellt.

      Wenn man das nicht periodisch aufrufen will, dann könnte man den Aufruf z.B. auch als "applet" in die skin.xml packen.

      Jedenfalls ist das Aufrufen der Verbinden-Funktion aus einem Script heraus möglich.
    • Falls dich das genaue Aussehen meiner "Testumgebung" doch noch interessiert ...

      Ich habe in die eigentlich leere
      /usr/lib/enigma2/python/Plugins/SystemPlugins/HDMICEC/__init__.py
      einfach folgendes reingeschrieben:


      Python-Quellcode

      1. # -*- coding: utf-8 -*-
      2. import struct,time,os
      3. from Components.config import config
      4. from threading import Thread
      5. from enigma import eHdmiCEC
      6. def Exec_def():
      7. Exec_stop_File='/tmp/STOP'
      8. while os.path.isfile(Exec_stop_File)==False:
      9. time.sleep(15)
      10. try:
      11. cmd = struct.pack('BBB',int('0x82',16),int("0x" + str(config.hdmicec.tvinput.value) + str(config.hdmicec.avinput.value),16),int("0x00",16))
      12. eHdmiCEC.getInstance().sendMessage(int("0x0F",16), len(cmd), str(cmd))
      13. except:
      14. os.system('echo F >'+Exec_stop_File)
      15. Exec_Thread=Thread(target=Exec_def)
      16. Exec_Thread.daemon = True
      17. Exec_Thread.start()
      Alles anzeigen



      Dadurch wird im Hintergrund alle 15 Sekunden ein "Verbinden"-Signal zum TV gesendet.
      Das ist etwas mehr Code als minimal nötig.
      Hier wäre es nun möglich auch noch Counter einzubauen um das Senden nach einer gewissen Anzahl Durchläufe abzubrechen o.ä.

      Die eigentlichen zwei Codezeilen, die die Arbeit erledigen, kann man wie geschrieben aber an vielen Stellen einbauen.
      Je nachdem wann sie ausgeführt werden sollen.
    • Klappt einwandfrei. Hat aber einen Nebeneffekt, an den ich offensichtlich nicht gedacht habe. Wenn ich bewusst eine andere Quelle wähle (also nicht die Box), holt sich diese nach 15 Sekunden die Hoheit zurück
    • Nur der Vollständigkeit halber, falls jemals jemand diesen Thread für sich entdeckt: das zuletzt genannte Problem ist behoben. Ich habe im HDMI-CEC Plugin den Menüpunkt "HDMI-Antwort auf aktive Quelle" auf Nein gestellt. Was genau das Warum bewirkt ist mir auch nicht klar, aber bis jetzt läuft alles rund. Vielen Dank nochmal an @n020222 für die Hilfe :thumbup: