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

  • Hi,

    hast du hierfür bereits eine Lösung gefunden? Ich scheitere mehr oder weniger am selben problem - würde gerne mein fronttend detachen wenn der fernseher aus ist, und wieder attachen wenn dieser angeht -> damit die SATIP ressourcen nicht unnötig geblockt werden.


    In der cecremote.xml kann ich mit folgendem Befehl bei einem poweroff vom Fernseher den detach befehl schicken:


    Code
    1. <onceccommand command="STANDBY" initiator="TV">
    2. <commandlist>
    3. <exec>svdrpsend plug softhddevice DETA</exec>
    4. </commandlist>
    5. </onceccommand>

    Allerdings fehlt mir die Möglichkeit zu erkennen ob der Fernseher wieder eingeschalten wird, um dann das softhddevice wieder zu attachen.


    Falls Du bereits eine Lösung gefunden hast - bitte her damit :)

  • Da mein TV über einen Receiver angeschlossen ist, zeigt er beim nachträglichen Einschalten kein Bild. Daher habe ich einen Dienst laufen, der darauf wartet, dass der TV eingeschaltet wird und dann ein DETA ATTA macht, was dem TV wieder ein Bild entlockt.

    Hier ist das Script:

    Und hier der Dienst

    Code
    1. /etc/systemd/system/checktv.service [Unit]
    2. Description=Restart X-Server if connected Display has changed
    3. After=x@vt7.service
    4. [Service]
    5. ExecStart=/usr/local/sbin/checktv
    6. [Install]
    7. WantedBy=multi-user.target

    Wie ihr sehen könnt, habe ich über getedid erfahren, ob der TV eingeschaltet ist.

  • Danke für die Hinweise, das Problem dürfte allerdings sein dass der TV nur in Standby geht, und damit wohl immer sich rückmeldet mit einer edid, zumindest antwortet mein Panasonic im standby immer noch...

  • Hi,

    das funktioniert aber nur wenn der TV ohne Strom ist, im standby wird get-edid den TV immer finden auch wenn er ausgeschaltet ist.

    CU

    9000h

    Es ist eagl in wlehcer Reiehnfogle die Bchustebaen in Woeretrn vokrmomen. Huapstache der estre und leztte Bchustbae sitmmen.

  • das habe ich befürchtet, gibt es einen umgekehrten weg mit dem cec-remote plugin - das ausschalten und detachen geht ja, nur für einschalten und attachen habe ich noch keine saubere lösung gefunden :/


    einzige andere möglichkeit wäre den tv zu pingen in regelmässigen abständen - am besten irgendwie erst dann wenn vorher das frontend detached wurde, und bei einer ping-antwort wieder zu attachen und dann das pingen auszusetzen?


    Leider habe ich nur die theoretische möglichkeiten - jedoch nicht die praktische fähigkeiten sowas auch umzusetzen :( Irgendjemand vielleicht praktische Ansätze dazu?