HDMI CEC und Fhem

Begonnen von hankyzoolander, 27 März 2016, 19:20:14

Vorheriges Thema - Nächstes Thema

hankyzoolander

Hallo Gemeinde,
Stehe vor folgendem kleinen Problem.

Raspberry Pi mit Fhem, Raspi über HDMI am Av Receiver .
Streaming Radio läuft auf Fhem.
Schalte ich über Fhem das Radio an, muss ich ins Wohnzimmer gehen und den av Receiver
anschalten. Mache ich das Radio über Fhem aus muss ich wieder ins Wohnzimmer und den Receiver
ausschalten.
Nun die Frage, könnte man über Fhem einen HDMI CEC Befehl senden das der av Receiver sich anschaltet?
Genauso wenn das Radio ausgeschaltet wird. Möchte mir keinen neuen av Receiver mit Lan oder Wifi kaufen.
Der HDMI Ausgang vom Raspi wird nur zur Audio Übertragung zum Av Receiver genutzt.
Av Receiver erkennt am Hdmi eingang den Raspi und schreibt auch nach einer kurzen setup suche raspberry im Display.
Laut Bedienungsanleitung des av Receivers, ist dann die CEC Verbindung hergestellt.
Ich hoffe ich habe mein Vorhaben einigermaßen verständlich rübergebracht,und würde mich freuen wenn jemand dazu eine Idee hätte.
betateilchen  <--- my personal hero

Feuerdrache

Hi,
Gemacht habe ich das noch nicht, aber diese Seite erklärt, wie es von der Shell aus gehen soll. http://constey.de/2014/10/fernseher-ueber-hdmi-per-raspberry-pi-steuern-cec/
Wenn das geht, lässt sich der Shell Befehl aus FHEM ausführen

Gruß FD
FHEM auf Raspberry PI B2
- CUL V3.4 mit culfw 1.65 für HM
- nanoCUL mit culfw 1.66 für KOPP FreeControl

hankyzoolander

Hallo,
auf der Seite war ich auch gerade.
Die Anleitung scheint nicht mehr zu passen. Hier einAuszug der README Datei.


To compile libCEC on a new Raspbian installation, follow these instructions:
`
apt-get update
apt-get install cmake liblockdev1-dev libudev-dev libxrandr-dev python-dev swig
cd
git clone https://github.com/Pulse-Eight/platform.git
mkdir platform/build
cd platform/build
cmake ..
make
sudo make install
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

Bin die Schritte mal durchgegangen, bekomme aber bei make -j4 nen Fehler. Bin noch nicht dahintergekommen warum er da motzt.
betateilchen  <--- my personal hero

Feuerdrache

Moin,
wie lautet denn die Fehlermeldung?

Gruß FD
FHEM auf Raspberry PI B2
- CUL V3.4 mit culfw 1.65 für HM
- nanoCUL mit culfw 1.66 für KOPP FreeControl

hankyzoolander

Das bekomm ich raus


pi@raspberrypi ~/libcec $ cd build/
pi@raspberrypi ~/libcec/build $ make -j4
[  2%] [  2%] [  2%] [  2%] Building CXX object src/libcec/CMakeFiles/cec.dir/CECProcessor.cpp.o
Building CXX object src/libcec/CMakeFiles/cec.dir/CECClient.cpp.o
Building CXX object src/libcec/CMakeFiles/cec.dir/LibCEC.cpp.o
Building CXX object src/libcec/CMakeFiles/cec.dir/adapter/RPi/RPiCECAdapterCommunication.cpp.o
In file included from /home/pi/libcec/src/libcec/CECClient.cpp:35:0:
/home/pi/libcec/src/libcec/CECClient.h:49:11: error: 'shared_ptr' in namespace 'std' does not name a type
In file included from /home/pi/libcec/src/libcec/CECProcessor.cpp:35:0:
/home/pi/libcec/src/libcec/CECProcessor.h:59:11: error: 'shared_ptr' in namespace 'std' does not name a type
/home/pi/libcec/src/libcec/CECProcessor.h:63:5: error: 'CECClientPtr' does not name a type
/home/pi/libcec/src/libcec/CECProcessor.h:71:58: error: 'CECClientPtr' has not been declared
/home/pi/libcec/src/libcec/CECProcessor.h:76:5: error: 'CECClientPtr' does not name a type
In file included from /home/pi/libcec/src/libcec/CECClient.cpp:37:0:
/home/pi/libcec/src/libcec/CECProcessor.h:59:11: error: 'shared_ptr' in namespace 'std' does not name a type
/home/pi/libcec/src/libcec/CECProcessor.h:63:5: error: 'CECClientPtr' does not name a type
/home/pi/libcec/src/libcec/CECProcessor.h:71:58: error: 'CECClientPtr' has not been declared
/home/pi/libcec/src/libcec/CECProcessor.h:76:5: error: 'CECClientPtr' does not name a type
In file included from /home/pi/libcec/src/libcec/CECProcessor.cpp:35:0:
/home/pi/libcec/src/libcec/CECProcessor.h:90:27: error: 'CECClientPtr' has not been declared
In file included from /home/pi/libcec/src/libcec/CECClient.cpp:37:0:
/home/pi/libcec/src/libcec/CECProcessor.h:90:27: error: 'CECClientPtr' has not been declared
/home/pi/libcec/src/libcec/CECProcessor.h:92:29: error: 'CECClientPtr' has not been declared
/home/pi/libcec/src/libcec/CECProcessor.h:92:29: error: 'CECClientPtr' has not been declared
/home/pi/libcec/src/libcec/CECProcessor.h:95:7: error: 'CECClientPtr' does not name a type
/home/pi/libcec/src/libcec/CECProcessor.h:96:7: error: 'CECClientPtr' does not name a type
/home/pi/libcec/src/libcec/CECProcessor.h:95:7: error: 'CECClientPtr' does not name a type
/home/pi/libcec/src/libcec/CECProcessor.h:96:7: error: 'CECClientPtr' does not name a type
/home/pi/libcec/src/libcec/CECProcessor.h:126:29: error: 'CECClientPtr' has not been declared
/home/pi/libcec/src/libcec/CECProcessor.h:126:29: error: 'CECClientPtr' has not been declared
/home/pi/libcec/src/libcec/CECProcessor.h:163:37: error: 'CECClientPtr' has not been declared
/home/pi/libcec/src/libcec/CECProcessor.h:191:37: error: 'CECClientPtr' was not declared in this scope
/home/pi/libcec/src/libcec/CECProcessor.h:191:49: error: template argument 2 is invalid
/home/pi/libcec/src/libcec/CECProcessor.h:191:49: error: template argument 4 is invalid
/home/pi/libcec/src/libcec/CECProcessor.h:163:37: error: 'CECClientPtr' has not been declared
/home/pi/libcec/src/libcec/CECProcessor.h:191:37: error: 'CECClientPtr' was not declared in this scope
/home/pi/libcec/src/libcec/CECProcessor.h:191:49: error: template argument 2 is invalid
/home/pi/libcec/src/libcec/CECProcessor.h:191:49: error: template argument 4 is invalid
In file included from /home/pi/libcec/src/libcec/CECProcessor.cpp:38:0:
/home/pi/libcec/src/libcec/devices/CECBusDevice.h:52:11: error: 'shared_ptr' in namespace 'std' does not name a type
In file included from /home/pi/libcec/src/libcec/CECClient.cpp:38:0:
/home/pi/libcec/src/libcec/LibCEC.h:49:11: error: 'shared_ptr' in namespace 'std' does not name a type
In file included from /home/pi/libcec/src/libcec/CECClient.cpp:38:0:
/home/pi/libcec/src/libcec/LibCEC.h:134:7: error: 'CECClientPtr' does not name a type
/home/pi/libcec/src/libcec/LibCEC.h:135:19: error: 'CECClientPtr' was not declared in this scope
/home/pi/libcec/src/libcec/LibCEC.h:135:31: error: template argument 1 is invalid
/home/pi/libcec/src/libcec/LibCEC.h:135:31: error: template argument 2 is invalid
/home/pi/libcec/src/libcec/LibCEC.h:153:7: error: 'CECClientPtr' does not name a type
/home/pi/libcec/src/libcec/LibCEC.h:154:19: error: 'CECClientPtr' was not declared in this scope
/home/pi/libcec/src/libcec/LibCEC.h:154:31: error: template argument 1 is invalid
/home/pi/libcec/src/libcec/LibCEC.h:154:31: error: template argument 2 is invalid
In file included from /home/pi/libcec/src/libcec/CECProcessor.cpp:38:0:
/home/pi/libcec/src/libcec/devices/CECBusDevice.h:193:5: error: 'CECClientPtr' does not name a type
In file included from /home/pi/libcec/src/libcec/devices/CECPlaybackDevice.h:36:0,
                 from /home/pi/libcec/src/libcec/CECClient.cpp:40:
/home/pi/libcec/src/libcec/devices/CECBusDevice.h:52:11: error: 'shared_ptr' in namespace 'std' does not name a type
In file included from /home/pi/libcec/src/libcec/devices/CECPlaybackDevice.h:36:0,
                 from /home/pi/libcec/src/libcec/CECClient.cpp:40:
/home/pi/libcec/src/libcec/devices/CECBusDevice.h:193:5: error: 'CECClientPtr' does not name a type
In file included from /home/pi/libcec/src/libcec/LibCEC.cpp:35:0:
/home/pi/libcec/src/libcec/LibCEC.h:49:11: error: 'shared_ptr' in namespace 'std' does not name a type
In file included from /home/pi/libcec/src/libcec/LibCEC.cpp:35:0:
/home/pi/libcec/src/libcec/LibCEC.h:134:7: error: 'CECClientPtr' does not name a type
/home/pi/libcec/src/libcec/LibCEC.h:135:19: error: 'CECClientPtr' was not declared in this scope
/home/pi/libcec/src/libcec/LibCEC.h:135:31: error: template argument 1 is invalid
/home/pi/libcec/src/libcec/LibCEC.h:135:31: error: template argument 2 is invalid
/home/pi/libcec/src/libcec/LibCEC.h:153:7: error: 'CECClientPtr' does not name a type
/home/pi/libcec/src/libcec/LibCEC.h:154:19: error: 'CECClientPtr' was not declared in this scope
/home/pi/libcec/src/libcec/LibCEC.h:154:31: error: template argument 1 is invalid
/home/pi/libcec/src/libcec/LibCEC.h:154:31: error: template argument 2 is invalid
In file included from /home/pi/libcec/src/libcec/CECProcessor.cpp:45:0:
/home/pi/libcec/src/libcec/LibCEC.h:49:11: error: 'shared_ptr' in namespace 'std' does not name a type
In file included from /home/pi/libcec/src/libcec/CECProcessor.cpp:45:0:
/home/pi/libcec/src/libcec/LibCEC.h:134:7: error: 'CECClientPtr' does not name a type
/home/pi/libcec/src/libcec/LibCEC.h:135:19: error: 'CECClientPtr' was not declared in this scope
/home/pi/libcec/src/libcec/LibCEC.h:135:31: error: template argument 1 is invalid
/home/pi/libcec/src/libcec/LibCEC.h:135:31: error: template argument 2 is invalid
/home/pi/libcec/src/libcec/LibCEC.h:153:7: error: 'CECClientPtr' does not name a type
/home/pi/libcec/src/libcec/LibCEC.h:154:19: error: 'CECClientPtr' was not declared in this scope
/home/pi/libcec/src/libcec/LibCEC.h:154:31: error: template argument 1 is invalid
/home/pi/libcec/src/libcec/LibCEC.h:154:31: error: template argument 2 is invalid
In file included from /home/pi/libcec/src/libcec/CECProcessor.cpp:46:0:
/home/pi/libcec/src/libcec/CECClient.h:49:11: error: 'shared_ptr' in namespace 'std' does not name a type
In file included from /home/pi/libcec/src/libcec/adapter/RPi/RPiCECAdapterCommunication.cpp:44:0:
/home/pi/libcec/src/libcec/LibCEC.h:49:11: error: 'shared_ptr' in namespace 'std' does not name a type
In file included from /home/pi/libcec/src/libcec/adapter/RPi/RPiCECAdapterCommunication.cpp:44:0:
/home/pi/libcec/src/libcec/LibCEC.h:134:7: error: 'CECClientPtr' does not name a type
/home/pi/libcec/src/libcec/LibCEC.h:135:19: error: 'CECClientPtr' was not declared in this scope
/home/pi/libcec/src/libcec/LibCEC.h:135:31: error: template argument 1 is invalid
/home/pi/libcec/src/libcec/LibCEC.h:135:31: error: template argument 2 is invalid
/home/pi/libcec/src/libcec/LibCEC.h:153:7: error: 'CECClientPtr' does not name a type
/home/pi/libcec/src/libcec/LibCEC.h:154:19: error: 'CECClientPtr' was not declared in this scope
/home/pi/libcec/src/libcec/LibCEC.h:154:31: error: template argument 1 is invalid
/home/pi/libcec/src/libcec/LibCEC.h:154:31: error: template argument 2 is invalid
/home/pi/libcec/src/libcec/CECProcessor.cpp: In member function 'void CEC::CCECProcessor::ReplaceHandlers()':
/home/pi/libcec/src/libcec/CECProcessor.cpp:242:11: error: 'const struct CEC::device_type_change_t' has no member named 'client'
/home/pi/libcec/src/libcec/CECProcessor.cpp: At global scope:
/home/pi/libcec/src/libcec/CECProcessor.cpp:246:38: error: variable or field 'ChangeDeviceType' declared void
/home/pi/libcec/src/libcec/CECProcessor.cpp:246:38: error: 'CECClientPtr' was not declared in this scope
/home/pi/libcec/src/libcec/CECProcessor.cpp:246:75: error: expected primary-expression before 'from'
/home/pi/libcec/src/libcec/CECProcessor.cpp:246:97: error: expected primary-expression before 'to'
In file included from /home/pi/libcec/src/libcec/LibCEC.cpp:39:0:
/home/pi/libcec/src/libcec/CECProcessor.h:59:11: error: 'shared_ptr' in namespace 'std' does not name a type
/home/pi/libcec/src/libcec/CECProcessor.h:63:5: error: 'CECClientPtr' does not name a type
/home/pi/libcec/src/libcec/CECProcessor.h:71:58: error: 'CECClientPtr' has not been declared
/home/pi/libcec/src/libcec/CECProcessor.h:76:5: error: 'CECClientPtr' does not name a type
In file included from /home/pi/libcec/src/libcec/LibCEC.cpp:39:0:
/home/pi/libcec/src/libcec/CECProcessor.h:90:27: error: 'CECClientPtr' has not been declared
/home/pi/libcec/src/libcec/CECProcessor.h:92:29: error: 'CECClientPtr' has not been declared
/home/pi/libcec/src/libcec/CECProcessor.h:95:7: error: 'CECClientPtr' does not name a type
/home/pi/libcec/src/libcec/CECProcessor.h:96:7: error: 'CECClientPtr' does not name a type
/home/pi/libcec/src/libcec/CECProcessor.h:126:29: error: 'CECClientPtr' has not been declared
/home/pi/libcec/src/libcec/CECProcessor.h:163:37: error: 'CECClientPtr' has not been declared
/home/pi/libcec/src/libcec/adapter/RPi/RPiCECAdapterCommunication.h: In constructor 'CEC::CRPiCECAdapterCommunication::CRPiCECAdapterCommunication(CEC::IAdapterCommunicationCallback*)':
/home/pi/libcec/src/libcec/adapter/RPi/RPiCECAdapterCommunication.h:118:35: warning: 'CEC::CRPiCECAdapterCommunication::m_bDisableCallbacks' will be initialized after [-Wreorder]
/home/pi/libcec/src/libcec/adapter/RPi/RPiCECAdapterCommunication.h:105:10: warning:   'bool CEC::CRPiCECAdapterCommunication::m_bInitialised' [-Wreorder]/home/pi/libcec/src/libcec/adapter/RPi/RPiCECAdapterCommunication.cpp:68:1: warning:   when initialized here [-Wreorder]
/home/pi/libcec/src/libcec/CECProcessor.h:191:37: error: 'CECClientPtr' was not declared in this scope
/home/pi/libcec/src/libcec/CECProcessor.h:191:49: error: template argument 2 is invalid
/home/pi/libcec/src/libcec/CECProcessor.h:191:49: error: template argument 4 is invalid
In file included from /home/pi/libcec/src/libcec/devices/CECAudioSystem.h:36:0,
                 from /home/pi/libcec/src/libcec/LibCEC.cpp:40:
/home/pi/libcec/src/libcec/devices/CECBusDevice.h:52:11: error: 'shared_ptr' in namespace 'std' does not name a type
In file included from /home/pi/libcec/src/libcec/devices/CECAudioSystem.h:36:0,
                 from /home/pi/libcec/src/libcec/LibCEC.cpp:40:
/home/pi/libcec/src/libcec/devices/CECBusDevice.h:193:5: error: 'CECClientPtr' does not name a type
src/libcec/CMakeFiles/cec.dir/build.make:169: recipe for target 'src/libcec/CMakeFiles/cec.dir/adapter/RPi/RPiCECAdap
betateilchen  <--- my personal hero

Feuerdrache

 Hm,
das sagt mir jetzt spontan nichts.
Bei Gelegenheit versuche ich das mal nachzuvollziehen, allerdings habe ich gerade eher mit der Stabilität meines nanuCULs zu kämpfen.

Gruß FD
FHEM auf Raspberry PI B2
- CUL V3.4 mit culfw 1.65 für HM
- nanoCUL mit culfw 1.66 für KOPP FreeControl

Adriano

Ist dein Debian mit allen Paketen aktuell?

hankyzoolander

Ja das ist auf dem neusten Stand.
Hab jetzt einige Tage keine Zeit gehabt mich darum zu kümmern.
Habe in der Familie einen Informatiker, der kennt sich super mit Linux aus. Den frage ich mal.
betateilchen  <--- my personal hero

hankyzoolander

so, bin etwas weiter gekommen.
habe eine bessere Anleitung gefunden.
diese hier
http://www.forum-raspberrypi.de/Thread-via-konsole-ueberpruefen-ob-hdmi-port-aktiv

die Schritte abgearbeitet bei ./bootstrap und alles danach erhalte ich Fehlermeldungen aber es geht trotzdem.


root@raspberrypi:/home/pi/libcec/libcec# echo scan | cec-client -s -d 1
opening a connection to the CEC adapter...
requesting CEC bus information ...
CEC bus information
===================
device #1: Recorder 1
address:       4.0.0.0
active source: no
vendor:        Pulse Eight
osd string:    CECTester
CEC version:   1.4
power status:  on
language:      eng


device #5: Audio
address:       f.f.f.f
active source: no
vendor:        Onkyo
osd string:    TX-SR507
CEC version:   1.3a
power status:  standby
language:      ???


currently active source: unknown (-1)
root@raspberrypi:/home/pi/libcec/libcec#

betateilchen  <--- my personal hero

hankyzoolander

#9
So, ich glaube es gelöst zu haben.
Die 5 steht in diesem Beispiel für meinen AV Receiver


mit diesen Befehl:
echo pow 5 | cec-client -s -d 1

erhalte ich Standby zurück. Das ist ja mal ein Anfang.

Damit schalte ich den AV Receiver ein:
echo on 5 | cec-client -s -t p -p 0

Hiermit schalte ich den AV Receiver aus:
echo standby 5 | cec-client -s -t p -p 0

Das funktioniert jetzt wunderbar :)
Jetzt muss das nur noch in Fhem eingebunden werden. Hat jemand eine Idee? Das Gerät verstärker auf den Bildern ist nur ein Dummy ohne Funktion.
Das Gerät Radio darüber funktioniert.
Die Frage ist wie es verknüpft sein soll. Wählt man nur einen Sender aus das das Radio anfängt zu streamen, sich der Verstärker automatisch ein und aus schaltet.
Oder besser beides getrennt?
Wär es möglich die Ausgabe von (echo on 5 | cec-client -s -t p -p 0)  bei Verstärker anzuzeigen (standby oder on) ?
Man müsste doch auch auf den passenden inputkanal im AV Receiver umschalten können oder?
Der Raspi ist bei mir auf AUX.

betateilchen  <--- my personal hero

Kuzl

schau der cmdalias an. Damit kannst du für dein Radiogerät die befehle umleiten aus "set radio on" kannst du dann machen "set radio on; {system("echo on 5 | cec-client -s -t p -p 0")}"
dann wird automatisch wenn du den radio anschaltest auch der Receiver eingeschaltet.

hankyzoolander

Guten Morgen,
leider stehe ich gerade mit cmdalias auf dem Schlauch.
Habe zwei notify angelegt.
Verstärker ein und Verstärker aus.
Receiver:off {system("echo standby 5 | cec-client -s -t p -p 0")}
Receiver:on {system("echo on 5 | cec-client -s -t p -p 0")}

Das funktioniert aber nicht ;D
betateilchen  <--- my personal hero

RaspiLED

#12
Hi,
Bei mit war der Fehler am Anfang, dass cec-client nur per sudo lief und fhem dazu unter /etc/sudoers entweder richtige Befehle oder halt komplett als * eingetragen werden musste.

Beispiel hier mit codesend anstatt dem cec-client:
define off_Lampe_WZ notify Lampe_WZ:off {system("sudo /usr/sbin/codesend 1119316 &")}

Das ist & ist wichtig, damit der Befehl im Hintergrund ausgeführt wird und fhem nicht hängen bleibt!

Und der Auszug aus /etc/sudoers:

fhem ALL=NOPASSWD: /sbin/reboot, /sbin/poweroff, /usr/sbin/codesend, /opt/fhem/TV_*, /opt/fhem/LED*, /usr/bin/cec-client

Achja ich installiere cec-client über:
sudo apt install cec-utils
oder
sudo apt-get install cec-utils
;-)

Gruß Arnd


Gesendet von iPhone mit Tapatalk
Raspberry Pi mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, WifiLight2, Bravia, ...

hankyzoolander

cec-utils sind installiert.
Fhem hat volle root rechte.
keine Ahnung mehr woran es noch liegen kann
vielleicht geht es halt einfach auch nicht.
betateilchen  <--- my personal hero