[Anleitung]Fernseher per HDMI-CEC ein-/ausschalten mit Raspberry Pi

Begonnen von EnderPhilipp, 22 Januar 2017, 20:19:31

Vorheriges Thema - Nächstes Thema

EnderPhilipp

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

tomster

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-utils
um 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




EnderPhilipp

Zitat von: tomster 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-utils
um 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

sn0000py

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....

tomster

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...

knopf_piano

zotac nano mit proxmox und ganz viel zeug drauf

sn0000py

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)

tomster

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

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

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/crontab
einfü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

Beta-User

Zitat von: derzae am 09 Juni 2017, 12:31:46
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-elitedesk@Debian 12, 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: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

olly023

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

frank

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 [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

olly023

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.

Devender

#14
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.

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