via Konsole überprüfen ob HDMI Port aktiv?

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo zusammen,
    Ich suche eine Möglichkeit via Konsole zu überprüfen ob der HDMI Port aktiv ist, oder noch besser: ob ein angeschlossener Fernseher auch eingeschaltet ist und das Bild anzeigt.
    Gibt es da eine Möglichkeit?
    Vielleicht weiss einer mehr als ich...

    Danke im vorraus und mit freundlichen Grüßen,
    Bananenrepublik

    Einmal editiert, zuletzt von Bananenrepublik (27. November 2013 um 15:41)

  • So,
    ich habe mir nun selber geholfen.

    Für diejenigen die vielleicht mal vor derselben Frage stehen schreibe ich hier ein kleines HowTo:
    Es gibt verschiedene Module und Möglichkeiten (xrandr, ddccontrol, tvservice).
    Letztlich zum Erfolg gebracht hat mich der cec-client.
    Der Fernseher muss dafür aber die CEC Funktionen unterstützen.

    Als erstes werden die cec-utils mit

    Code
    apt-get install cec-utils


    installiert.

    Leider ist es damit nicht getan. Damit der cec-client einwandfrei funktioniert, muss ein extra libcec Paket kompiliert und anschließend installiert werden.
    Dafür habe ich die Anleitung auf nyxi.eu verwendet, die ich hier mal frei übersetzen werde:
    Als erstes müssen die für das kompilieren notwendigen Tools installiert werden:

    Code
    apt-get install build-essential autoconf liblockdev1-dev libudev-dev git libtool pkg-config

    Anschließend wird das git gepository geclont:

    Code
    git clone git://github.com/Pulse-Eight/libcec.git

    kompilieren:

    Code
    cd libcec
    ./bootstrap
    ./configure --with-rpi-include-path=/opt/vc/include --with-rpi-lib-path=/opt/vc/lib --enable-rpi
    make
    make install

    Nun müssen die Libraries noch verlinkt werden damit der cec-client sie finden kann:

    Code
    ldconfig

    Jetzt kann getestet werden ob der cec-client den raspberry findet mit:

    Code
    raspberry:~# cec-client -l
    1 Found devices: 1
    2 
    3 device:              1
    4 com port:            RPI
    5 
    6 
    7 firmware version:    1
    8 type:                Raspberry Pi

    mit dem Befehl:

    Code
    cec-client -s -t p -p 0


    bekommt man die gesamte Kommunikation zwischen raspberry und Fernseher mit.
    Davon ist nur eine Zeile interessant, wenn man die Status des Fernsehers erfahren möchte, die ich mit:

    Code
    cec-client -s -t p -p 0 | grep "TV (0): device status changed"


    angezeigt bekomme.

    Der cec-client kann aber noch viel mehr als nur den Status erfragen.
    Mit:

    Code
    echo standby 0 | cec-client -s -t p -p 0


    kann der raspberry den Fernseher in den Standby versetzen und mit:

    Code
    echo on 0 | cec-client -s -t p -p 0


    aus dem Standby erwecken.


    Mit freundlichen Grüßen,
    Bananenrepublik

  • Ich hol das Thema nochmal hoch, da ich eine (in meinen Augen) bessere Methode gefunden habe.

    Der cec-client kann nämlich einiges mehr als man vermutet :D

    Mittels

    Code
    echo h | cec-client -s -d 1

    kann man sich anzeigen lassen was der Client so alles drauf hat.

    Um nun zu prüfen ob ein Gerät eingeschaltet ist oder nicht muss man folgendes tun:

    1. Herausfinden welche ID das Gerät besitzt mittels:

    device 0 ist mein TV, device 1 mein PI und device 5 meine Soundbar.

    2. Power-Status ermitteln mittels:

    Code
    echo pow $ID | cec-client -s -d 1

    Statt $ID müsst ihr die entsprechende ID eintragen die ihr prüfen wollt.

    Ausgabe könnte dann so sein:

    Code
    pi@raspbmc:~$ echo pow 5 | cec-client -s -d 1
    opening a connection to the CEC adapter...
    power status: standby


    oder

    Code
    pi@raspbmc:~$ echo pow 1 | cec-client -s -d 1
    opening a connection to the CEC adapter...
    power status: on

    Wenn man jetzt nur "on" oder "standby" haben möchte kann man dies mittels awk und sed hinbekommen:

    Code
    pi@raspbmc:~$ echo pow 5 | cec-client -s -d 1 | grep 'power status' | awk '{split($0,a,":");print a[2]}' | sed 's/ //'
    standby

    Ein Shell-Skript könnte dann beispielsweise so aussehen:

    Viel Spaß damit :)

  • Habe mal einen seperaten Thread aufgemacht, in dem ich versucht habe, das Script etwas zu erweitern.

    Bei mir führt der Script sich alle 10 Sekunden aus, um zu prüfen, ob der Fernseher noch läuft. Wenn nicht, soll der RPi herunterfahren. Funktioniert perfekt via SSH aber nicht im Autostart per Cronjob, usw....

    Vielleicht weiß ja jemand Rat von euch :)

    BBatBSE
    21. April 2014 um 14:12
  • Hi ! vielen Dank für deine Anleitung.

    Im Rahmen eines Projektes könnte ich das perfekt gebrauchen.

    Allerdings erhalte ich schon im Schritt 2:

    Code
    apt-get install build-essential autoconf liblockdev1-dev libudev-dev git libtool pkg-config

    eine Fehlermeldung:

    E: Paket liblockdev1-dev kann nicht gefunden werden.

    Hat sich da ggf. was in den letzten Jahren geändert? (Ich selber arbeite mit Raspian Stretch Desktop !? )

    Muss ich da ggf. nur eine andere Version nutzen?

    Vielen dank im Voraus

    einfach112

  • Sind die sowieso vorhandenen Bord-Mittel dafür nicht ausreichend?

    TV auf HDMI-1 ist an:

    Code
    $ xrandr | grep connect
    HDMI-1 connected (normal left inverted right x axis y axis)
    HDMI-2 connected primary 1680x1050+0+0 (normal left inverted right x axis y axis) 474mm x 296mm

    TV auf HDMI-1 ist aus:

    Code
    $ xrandr | grep connect
    HDMI-1 disconnected (normal left inverted right x axis y axis)
    HDMI-2 connected primary 1680x1050+0+0 (normal left inverted right x axis y axis) 474mm x 296mm
  • Hi ThomasL

    Danke für deine Schnelle Antwort.

    Also im Endeffekt soll später tatsächlich ein TV angeschlossen werden.

    Teste allerdings gerade mit einem Monitor. (Macht das einen unterschied?)

    Leider bin ich noch totaler Anfänger was Pi, bash-skripte und python angeht.

    Am Ende will ich folgendes erreichen:

    An HDMI 1 am TV ist ein TV-Receiver angeschlossen.

    An HDMI 2 am TV ist der Pi eingeschlossen.

    Jetzt möchte ich darauf reagieren wenn jemand von HDMI1 auf HDMI 2 umschaltet um den Raspberry-Desktop zu sehen.

    Wenn dann HDMI2 aktiv ist soll der omxplayer starten. Wenn dann wieder von HDMI2 auf HDMI1 umgeschaltet wird soll der omxplayer sich beenden.

    Ist das damit theo möglich?

  • Der Pi hat 2 HDMI-Ausgänge ? :conf:

    also noch deutlicher kann der TO ja kaum schreiben:

    An HDMI 1 am TV ist ein TV-Receiver angeschlossen.

    An HDMI 2 am TV ist der Pi eingeschlossen.

    aber wie der PI das feststellen soll ist mir auch nicht klar, evtl. über CEC oder anynet, ggffs. auch über eine Last an der HDMI Portversorgung vom PI (der für Konverter)

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Sind die sowieso vorhandenen Bord-Mittel dafür nicht ausreichend?

    TV auf HDMI-1 ist an:

    Code
    $ xrandr | grep connect
    HDMI-1 connected (normal left inverted right x axis y axis)
    HDMI-2 connected primary 1680x1050+0+0 (normal left inverted right x axis y axis) 474mm x 296mm

    TV auf HDMI-1 ist aus:

    Code
    $ xrandr | grep connect
    HDMI-1 disconnected (normal left inverted right x axis y axis)
    HDMI-2 connected primary 1680x1050+0+0 (normal left inverted right x axis y axis) 474mm x 296mm

    Hallo ThomasL

    Kann ich damit das umsetzen was ich in Post #12 gefragt habe?

  • Hey ich weiß der Thread ist schon etwas älter.

    Aber ich will das Gleiche machen wie du einfach112 .

    Hast du mittlerweile eine Lösung für die Problemstellung gefunden?

    Ich möchte nämlich sobald ich den TV auf HDMI 2 umschalte ein Skript triggern, welches Parsec auf dem Raspberry Pi und mittels WOL meinen PC startet.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!