Autor Thema: [Anleitung]Fernseher per HDMI-CEC ein-/ausschalten mit Raspberry Pi  (Gelesen 25529 mal)

Offline EnderPhilipp

  • Full Member
  • ***
  • Beiträge: 284
Hi Liebe FHEM-Community,

ich verwende einen Raspberry Pi 3 als FHEM Zentrale.
Dieser steht direkt unter meinem Fernseher und ist auch mit diesem per HDMI verbunden.

Jetzt gibt es bei den meisten Fernsehern die Funktion HDMI-CEC, mit der man u.a den Fernseher ein-/ausschalten kann.

Und genau das habe ich gemacht und jetzt will ich eine kleine Anleitung wie man seinen Fernseher mit einem Raspberry Pi den Fernseher, ohne Zubehör, ein-/ausschalten kann.

Eins vorweg ich bin eigentlich nicht sooo erfahren mit Linux, deshalb weiß ich wahrscheinlich auf die meisten Fragen/Fehlermeldungen keine Antworten.  ::) ;D

So genug Geschwafel, los geht´s :

Also wir verwenden zum Ansteuern des Fernsehers die Libary libcec.

1. Schritt :
Als erstes bringen wir den Raspberry auf den neusten Stand und installieren die notwendigen Abhängigkeiten:
sudo apt-get update && sudo apt-get install cmake libudev-dev libxrandr-dev python-dev swig git-core

2. Schritt :
Im 2. Schritt wechseln wir in das Hauptverzeichnis und laden eine für libcec benötigte Libary von GitHub runter:
cd && git clone https://github.com/Pulse-Eight/platform.git
3. Schritt :
Jetzt müssen wir den Ordner platform/build erstellen und in diesen wechseln:
mkdir platform/build && cd platform/build
3. Schritt :
Nun geht es ans Kompilieren der eben runtergeladenen Libary:
cmake .. && make && sudo make install
4. Schritt :
Jetzt installieren wir endlich libcec:
cd && git clone https://github.com/Pulse-Eight/libcec.git && mkdir libcec/build && cd libcec/build && cmake -DRPI_INCLUDE_DIR=/opt/vc/include -DRPI_LIB_DIR=/opt/vc/lib .. && make -j4 && sudo make install && sudo ldconfig
5. Schritt :
Jetzt testen wir ob der Raspberry als CEC-client erkannt wird:
cec-client -l
Wenn ihr Folgendes als Ausgabe bekommt, habt ihr alles richtig gemacht:
pi@raspberrypi:~ $ cec-client -l
libCEC version: 4.0.1, git revision: libcec-4.0.1+14-0fba38d, compiled on Sa 21. Jan 10:56:02 UTC 2017 by pi@raspberrypi on Linux 4.4.38-v7+ (armv7l), features: P8_USB, DRM, P8_detect, randr, RPi
Found devices: 1

device:              1
com port:            RPI
vendor id:           2708
product id:          1001
firmware version:    1
type:                Raspberry Pi


Fernseher einschalten:
echo "on 0" | sudo cec-client -s -d 1
Fernseher ausschalten:
echo "standby 0" | sudo cec-client -s -d 1
Jetzt erstellen wir noch einen dummy, mit dem wir den Fernseher einschalten können, dazu muss FHEM sudo-Rechte haben:
define Fernseher dummy
attr Fernseher icon it_television
attr Fernseher setList on off
attr Fernseher webCmd on:off

define Fernseher_off notify Fernseher:off "echo "standby 0" | sudo cec-client -s -d 1"
define Fernseher_on notify Fernseher:on "echo "on 0" | sudo cec-client -s -d 1"


FERTIG !!!

Jetzt könnt ihr euren Fernseher per CEC ein-/ausmachen.

Ich hoffe ich konnte ein paar Leuten helfen.  ;)

Fragen gerne in den Thread, warne aber nochmal von meinen eingeschränkten Linux-Kenntnissen.  ;D

Philipp  8)
¡¡¡ANFÄNGERALARM!!!
Raspberry Pi 3 (Hauptsystem)
Raspberry Pi B+ (Kellersonde)
Homematic,Philips Hue, LD382, nanoCul 433/868mhz, MPD, Intertechno, FIRMATA, EspEasy, SSCAM, STV, HDMI-CEC, EchoDot
Gefällt mir Gefällt mir x 5 Liste anzeigen

Offline tomster

  • Sr. Member
  • ****
  • Beiträge: 981
Antw:[Anleitung]Fernseher per HDMI-CEC ein-/ausschalten mit Raspberry Pi
« Antwort #1 am: 23 Januar 2017, 17:03:28 »
An der gleichen Nummer hab ich auch gerade gebastelt.
Auf meinem RasPi 2 (aktuellestes, upgedatedes Jessie) genügt allerdings ein simples
sudo apt-get install cec-utilsum die CEC-Funktionalität hinzubekommen.

Danach noch den User fhem zur Gruppe video hinzufügen (ich hab auf den ersten Denker keine Sicherheitsprobleme erkennen können...):
sudo usermod -a -G video fhem
Und in FHEM 1 dummy und 2 notifies anlegen:
define HDMI dummy
attr HDMI icon it_television
attr HDMI setList on off
attr HDMI webCmd on:off
define HDMI_on notify HDMI:on "echo on 0 | cec-client -s -d 1"define HDMI_off notify HDMI:off "echo standby 0 | cec-client -s -d 1"
Ob man die beiden notifies auch in eine Definition packen kann, hab ich noch nicht rausgefunden...

LG,
Tom




Offline EnderPhilipp

  • Full Member
  • ***
  • Beiträge: 284
Antw:[Anleitung]Fernseher per HDMI-CEC ein-/ausschalten mit Raspberry Pi
« Antwort #2 am: 23 Januar 2017, 17:51:15 »
An der gleichen Nummer hab ich auch gerade gebastelt.
Auf meinem RasPi 2 (aktuellestes, upgedatedes Jessie) genügt allerdings ein simples
sudo apt-get install cec-utilsum die CEC-Funktionalität hinzubekommen.

Danach noch den User fhem zur Gruppe video hinzufügen (ich hab auf den ersten Denker keine Sicherheitsprobleme erkennen können...):
sudo usermod -a -G video fhem
Und in FHEM 1 dummy und 2 notifies anlegen:
define HDMI dummy
attr HDMI icon it_television
attr HDMI setList on off
attr HDMI webCmd on:off
define HDMI_on notify HDMI:on "echo on 0 | cec-client -s -d 1"define HDMI_off notify HDMI:off "echo standby 0 | cec-client -s -d 1"
Ob man die beiden notifies auch in eine Definition packen kann, hab ich noch nicht rausgefunden...

LG,
Tom

Das geht ein bisschen schneller.  ;D
¡¡¡ANFÄNGERALARM!!!
Raspberry Pi 3 (Hauptsystem)
Raspberry Pi B+ (Kellersonde)
Homematic,Philips Hue, LD382, nanoCul 433/868mhz, MPD, Intertechno, FIRMATA, EspEasy, SSCAM, STV, HDMI-CEC, EchoDot

Offline sn0000py

  • Developer
  • Full Member
  • ****
  • Beiträge: 402
Hallo

wollte mal Frage wie das bei euch so funkt?
Ich habe einen Sony Bravia, da funktioniert alles (zumindest das was ich getestet habe)
per scan finde ich den, Power abfrage, Ein ausschalten, und HDMI umschalten

wenn ich das gleiche am LG testen will, dann finde ich den zwar per Scan und den Power status abfragen funktioniert auch
Rest nicht ...


gibt es da andere ansätze was man testen kann?

Beim LG kann ich nur Simplink ein oder ausschalten, wenn ich es auschalte, dann gibt er bei Powerstate nur mehr unbekannt zurück.

Mehr settings gibts da leider nicht....

Offline tomster

  • Sr. Member
  • ****
  • Beiträge: 981
HDMI-CEC ist eine Zecke ähh Zicke.
Leider halten sich nicht alle Hersteller an den eigentlichen Standard. Ich vermute deshalb heisst es auch bei jedem irgendwie anders.
Mein alter Pioneer kommt auch nicht mir meinen STBs klar. KODI auf dem Pi funzt aber. Ein relative neuer Chinesen-32" macht eigentlich alles mit.
Ich hab die Erfahrung gemacht, dass gerade im Fall HDMI das Ergebnis ziemlich digital ist: nämlich geht oder geht nicht...

Offline knopf_piano

  • Full Member
  • ***
  • Beiträge: 439
Geile sach, das wird am woe gleich probiert!!!
zotac nano mit proxmox und ganz viel zeug drauf

Offline sn0000py

  • Developer
  • Full Member
  • ****
  • Beiträge: 402
Also nur zur info ... beim mir geht nur das einschalten des LG per HDMI und abfragen
da ich auch den Plan B verfolgt habe, und mit USB zu RS232 den LG steuern wollte, kann ich mit der Schnittstelle den Rest machen (nur einschalten kann RS232 nicht da die ja OFF geht) mit eiden kann ich nun alles machen ... muss nur noch FHEM auf OpenElec drauf (oder OpenElec austauschen)

Offline tomster

  • Sr. Member
  • ****
  • Beiträge: 981
Kannst auch mal versuchen das HDMI-Kabel zu tauschen. Ist vielleicht für den ersten Ansatz das Einfachste...

Aber im Fall von LG schaut es schlecht aus:
http://libcec.pulse-eight.com/Vendor/Support

Schau mal was unter Anmerkung 1 ganz unten steht...

jensenbln

  • Gast
wie bekomme is es denn hin, daß mein TV (panasonic) direkt auf HDMI schaltet und nicht der TV kanal anspringt?

Danke und Gruss
J

derzae

  • Gast
So, mein erster Beitrag im Forum  8)

Ich habe meinen Samsung J-Series auch über einen abgesetzten Raspberry Pi angeschlossen. Das schalten über die Notifications und SSH klappt wunderbar.
Ich wollte aber auch den Status des Fernsehers in FHEM aktuell haben wenn man mal mit der Fernbedienung einschaltet, daher habe ich mir ein Script zusammengeklöppelt das als Cronjob auf dem Pi läuft und über Telnet den Status in FHEM aktualisiert:

Für dieses Script müssen telnet und expect installiert sein:
sudo apt install telnet expect -y
im Heimverzeichnis des users pi (/home/pi) habe ich dieses Script angelegt:
#!/bin/bash
 
FHEM_HOST=192.168.0.49
FHEM_TELNET=7072

status=`echo "pow 0" | sudo cec-client -s -d 3 | tr -d "[]" | grep standby`
if [ -z $status ];
then
        reading="on"
else
        reading="off"
fi
expect << EOF
spawn telnet ${FHEM_HOST} ${FHEM_TELNET}
expect -re ".*>"
send "setreading sz_tv state ${reading}\r"
expect -re ".*>"
send "exit\r"
EOF

Ausführbar machen mit:
sudo chmod +x /home/pi/reading_sz_tv.sh
Und einen Cronjob angelegt der das Script alle 5min startet:
Editor starten:
sudo nano /etc/crontabeinfügen:
*/5 * * * * root /home/pi/reading_sz_tv.sh
Crondaemon neu starten:
sudo /etc/init.d/cron restart
und fertig.

Leider springt bei dieser Methode auch immer das Notify mit an und schaltet den Fernseher extra nochmal an oder aus (Was aber nicht schlimm ist da er ja schon in dem jeweiligen Zustand ist.). Kennt jemand eine Möglichkeit das triggern des Notifys zu unterbinden ? Wäre rein "kosmetisch" ;-)

Viele Grüße Flo

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15253
  • "Developer"?!? Meistens doch eher "User"
Leider springt bei dieser Methode auch immer das Notify mit an und schaltet den Fernseher extra nochmal an oder aus (Was aber nicht schlimm ist da er ja schon in dem jeweiligen Zustand ist.). Kennt jemand eine Möglichkeit das triggern des Notifys zu unterbinden ? Wäre rein "kosmetisch" ;-)

Hallo Flo,

willkommen hier im Forum.
Lt. Commandref sollte "setstate" statt "setreading" das notify nicht triggern (aber auch kein anderes). Ansonsten könnte die Ausführung auch noch mit der vorherigen Abfrage auf oldValue (ungleich neuer Status) im notify unterbunden werden.

Gruß, Beta-User
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn:MySensors, Weekday-&RandomTimer, Twilight,  AttrTemplate {u.a. mqtt2, mysensors, zwave}

olly023

  • Gast
Hallo
Ich bin absoluter Linux und FHEM neuling. Ich versuche meinen LG TV zu steuern. Über das LG Modul kann ich soweit alle Funktionen nutzen und auch meinen TV ausschalten, leider nicht einschalten.
So habe ich diesen Thread gefunden und bin nach der Anleitung vorgegangen. Über Putty angemeldet als User Pi kann ich den Tv schalten aber über FHEM funktioniert es leider nicht. Fehlen mir vielleicht die Rechte oder womit könnte ich weiter versuchen ? Ich verzweifle gerade seit stunden daran.


Gruß Olly

Offline frank

  • Hero Member
  • *****
  • Beiträge: 10135
schon mal in fhem.log geschaut?
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [hm.js]: https://forum.fhem.de/index.php/topic,106959.0.html

olly023

  • Gast
Die Logdatei fand ich auf den ersten Blick ziemlich verwirrend.
Ich habe es noch mal komplett von vorne probiert und jetzt läuft es so wie ich mir vorgestellt habe. Irgendwo hatte ich wohl einen Fehler drin.

Offline Devender

  • Full Member
  • ***
  • Beiträge: 368
  • smart --> smarter --> fhem
Hallo zusammen,

vielen Dank für den tollen Beitrag!
Ich hätte noch ein paar Punkte für die Anleitung die bei mir notwendig waren, um auf den Monitor auch ein Bild zu bekommen:

1) Bei der langen Anleitung von EnderPhilipp bekam ich folgende Meldung beim kompilieren:
fatal error: libudev.h: No such file or directory #include <libudev.h>"Lösung:
apt-get install libudev-dev
Nach der Installation und einem Neustart wurde mir leider kein Bild angezeigt :-(. Auch der Befehl den Ihr nutzt um das Display über FHEM einzuschalten funktioniert bei mir nicht.
Ich bekomme nur die Meldung:
opening a connection to the CEC adapter..Aber es passiert nichts weiter.

Mit den Befehlen auf der Konsole bekomme ich jedenfalls Informationen zum Monitor angezeigt und kann diesen auch per
/opt/vc/bin/tvservice -s ausschalten und mit /opt/vc/bin/tvservice -p einschalten. Aber kein Bild kam.

Nachdem ich weiter das Netz durchforstet hatte bin ich auf ein paar Parameter gestossen die ich in meiner /boot/config.txt angepasst habe (auskommentiert):
hdmi_safe=1
disable_overscan=1
hdmi_force_hotplug=1

Nach einem anschließenden Reboot wurd das Bild sofort angezeigt. Auch nachdem ich den Monitor vom Strom genommen hatte und wieder eingesteckt hatte.
Da ich einen Smart Mirror damit umsetzen möchte, würde mich das erst mal so reichen. Ein Aus/Ein- Schalten wird per Funkstecker realisiert.

Vielleicht hilft es dem ein oder anderen auch noch bzw. man könnte den ersten Post noch um die Einstellungen erweitern?

Grüße,

Dirk

PS: Wenn jemand noch einen Tipp hat warum das Schalten per FHEM nicht klappt, immer her damit.

« Letzte Änderung: 08 Juli 2017, 19:15:26 von Devender »
FHEM 5.8 auf RasPi mit Jessy - CUL868, JeeLink Lacrosse
Komponenten: HM, IT, ELV, FB7390, FritzPL543,Sonos Play3
Mehrere Wandtablets sowie einen Smart Mirror
https://wiki.fhem.de/wiki/Anwesenheitserkennung#PRESENCE-Modul