Wie kann man erkennen, ob der angeschlossene TV eingeschaltet ist?

  • Nachdem mein neu mit vaapidevice aufgesetzter VDR nun kurz vor dem Alltagseinsatz steht, würde ich noch gerne dafür sorgen, dass das vaapidevice-Plugin nur dann aktiv ist, wenn der über HDMI angeschlossene Monitor bzw. das TV-Gerät eingeschaltet ist. Kann mir jemand sagen, wie man das machen könnte? Geht das mit der 'libcec'? Soweit ich gesehen habe bräuchte man dazu aber einen speziellen Adapter ("Pulse Eight"?).

    Ginge das auch rein mit HDMI-"Bordmitteln"?


    Klaus

  • Gute Idee! Behalte ich mal als Fallback im Hinterkopf.

    Lieber wäre es mit natürlich, wenn ich es direkt über HDMI/CEC abfragen könnte. Das könnte ich dann auch direkt ins vaapidevice einbauen und es könnte sich so selber steuern.

    Falls also noch jemand was weiß...


    Klaus

  • Geht das mit der 'libcec'?

    Wenn dein TV CEC unterstützt - ob das in deiner Konstellation wie gedacht funktioniert, könntest du mit deinem Raspberry Pi ausprobieren, der beherrscht CEC mit der libcec. Soweit ich das gelesen habe, sollte echo pow 0 | cec-client -s -d 1 den Status liefern.

    Soweit ich gesehen habe bräuchte man dazu aber einen speziellen Adapter ("Pulse Eight"?).

    Die Hersteller von PC-Komponenten machen den Pin 13 des HDMI-Anschluss leider nicht standardmäßig nutzbar - ein PulseEight-Adapter muss es aber nicht unbedingt sein, das 1-Wire Protokoll von CEC kann man z.B. auch über einen eigenen Microcontroller wie einen Arduino nutzen: https://github.com/floe/CEC

    Kann mir jemand sagen, wie man das machen könnte?

    Ohne CEC könnte man bei TVs noch über eine eventuell vorhandene serielle Schnittstelle (bzw. bei Smart-TVs über das Netzwerk, anpingen könnte ggf. genügen) gehen. Oder man greift den Betriebszustand des TV über die aktuelle Leistungsaufnahme oder ähnliches ab.


    Eventuell tut es auch eine einfachere Lösung - wenn ich das richtig mitbekommen habe, lässt du deinen VDR 24/7 durchlaufen. Man könnte vaapidevice mit dem Argument -D starten lassen, damit das Frontend beim Start des VDR nicht automatisch attached wird (erfordert vermutlich, dass der X-Server mit dem Argument -noreset gestartet wird, wenn der VDR der einzige X-Client ist). Und dann den IR-Code für "TV an" auf den Befehl svdrpsend plug vaapidevice atta legen und über das Shutdown-Skript des VDR den Befehl svdrpsend plug vaapidevice deta ausführen lassen und den IR-Code für "TV aus" auf die Power-Taste legen. Falls der TV keine getrennten IR-Codes fürs Ein-/Ausschalten anbietet (bzw. die für den TV genutzte Fernbedienung die nicht nutzbar anbietet), könnte man auch eine Taste auf der für den VDR genutzten Fernbedienung nehmen, um das Frontend zu toggeln (mit svdrpsend plug vaapidevice stat kann man Abfragen, ob es gerade attached oder detached ist).

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • wie wäre es mit: "cat /sys/class/drm/card0-HDMI-A-1/status"?

    Das sagt dir nur, ob der TV angesteckt ist, nicht ob er angeschaltet ist. Und wenn man die EDID beim Booten mit der drm.edid_firmware Option statisch vorgibt, hebelt man diese Erkennung aus.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Ich mache das auch wie von Zillerbaer vorgeschlagen, in einem udev-script.

    Der intel-Treiber für den NUC signalisiert bei mir, ob der Fernseher eingeschaltet ist.


    Code
    1. .....
    2. HDMI_STATUS="$(cat /sys/class/drm/card0-DP-1/status)"
    3. if [ $HDMI_STATUS = connected ]; then
    4. connect
    5. else
    6. disconnect
    7. fi
    8. .....

    KODI, tvh, arch x86_64, Octopus net 2 x Duoflex C/C2/T2 , NUC7i3BNH, Crucial MX300 2TB, LG LM 669S

    Linux is the best OS I have ever seen -- Albert Einstein

  • 'cat /sys/class/drm/card0-HDMI-A-1/status' liefert leider immer "connected", egal ob der TV ein- oder ausgeschaltet ist.


    'i2cdump -y 3 0x3a' scheitert daran, dass es gar kein /dev/i2c gibt.


    'echo pow 0 | cec-client -s -d 1' meint "autodetect FAILED".


    Das Einzige, was funktioniert, ist ein 'ping' auf die IP des TVs. Da kommt genau dann was zurück, wenn das Gerät an ist.

    Ist zwar etwas unschön, aber wenn's gar nicht anders geht...

    Etwas, das "out of the box" funktioniert und das man evtl. direkt in das vaapidevice hätte einbauen können wäre natürlich schöner...


    Klaus

  • 'i2cdump -y 3 0x3a' scheitert daran, dass es gar kein /dev/i2c gibt.

    Ist das Kernel-Modul i2c-dev geladen?

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • i2c-dev war nicht geladen. Nach 'modprobe i2c-dev' liefert 'i2cdetect -l'

    'ddccontrol -p' liefert