I am trying (and failing) to control the power state of my LG PF-1500 projector through HDMI-CEC. According to this forum thread it should be possible. LG calls its implementation SIMPLINK, which I have activated in the projector. The projector also (sometimes, not always) shows my Rapberry Pi 4 as an attached device in the SIMPLINK menu.
I am running OpenHABian 1.5 on a Raspberry Pi 4, which is connected to a Denon AVR-X3500H. The output then goes from the Denon AVR through a WHD200 wireless HDMI-transmitter to my LG PF-1500(EU) projector.
I am trying to use libCEC from cec-utils so that I can turn on/off the projector with my OpenHAB installation for automation.
I installed cec-utils like so:
sudo apt-get install cec-utils
When I scan for attached devices, the LG projector appears to be found correctly:
echo "scan" | cec-client -s -d 1
opening a connection to the CEC adapter...
requesting CEC bus information ...
CEC bus information
===================
device #0: TV
address: 0.0.0.0
active source: yes
vendor: LG
osd string: TV
CEC version: 1.3a
power status: on
language: eng
device #1: Recorder 1
address: 1.1.1.0
active source: no
vendor: LG
osd string: CECTester
CEC version: 1.3a
power status: on
language: eng
However, when I execute the command for shutting down my (via SSH)
echo "standby 0" | cec-client RPI -s -d 1
the projector does not turn off. Instead it goes into the "blue screen mode", which it enters, when no devices are connected to any off its inputs. After running (again via SSH)
echo "on 0" | cec-client RPI -s -d 1
opening a connection to the CEC adapter...
the projector gets the image signal from my Raspberry Pi again.
All in all, this somehow suggests to me, that I might actually be turning on/off not the projector, but some device in between?!
Below I have attached the output from the two commands above. Perhaps someone can make sense of it?
Any help is much appreciated!
Terminal output for echo "standby 0" | cec-client RPI -s:
opening a connection to the CEC adapter...
DEBUG: [ 3] Broadcast (F): osd name set to 'Broadcast'
DEBUG: [ 4] Open - vc_cec initialised
DEBUG: [ 4] logical address changed to Free use (e)
NOTICE: [ 4] connection opened
DEBUG: [ 5] << Broadcast (F) -> TV (0): POLL
DEBUG: [ 5] processor thread started
DEBUG: [ 5] initiator 'Broadcast' is not supported by the CEC adapter. using 'Free use' instead
TRAFFIC: [ 5] << e0
DEBUG: [ 35] >> POLL sent
DEBUG: [ 35] TV (0): device status changed into 'present'
DEBUG: [ 35] << requesting vendor ID of 'TV' (0)
TRAFFIC: [ 35] << e0:8c
TRAFFIC: [ 661] >> 0f:87:00:e0:91
DEBUG: [ 661] TV (0): vendor = LG (00e091)
DEBUG: [ 661] expected response received (87: device vendor id)
DEBUG: [ 661] replacing the command handler for device 'TV' (0)
DEBUG: [ 661] >> TV (0) -> Broadcast (F): device vendor id (87)
DEBUG: [ 661] TV (0): CEC version 1.3a
DEBUG: [ 661] TV (0): menu language set to 'eng'
NOTICE: [ 661] registering new CEC client - v4.0.4
DEBUG: [ 661] detecting logical address for type 'recording device'
DEBUG: [ 661] trying logical address 'Recorder 1'
DEBUG: [ 661] << Recorder 1 (1) -> Recorder 1 (1): POLL
TRAFFIC: [ 661] << 11
TRAFFIC: [ 961] << 11
DEBUG: [ 1232] >> POLL not sent
DEBUG: [ 1232] using logical address 'Recorder 1'
DEBUG: [ 1232] Recorder 1 (1): device status changed into 'handled by libCEC'
DEBUG: [ 1232] Recorder 1 (1): power status changed from 'unknown' to 'on'
DEBUG: [ 1232] Recorder 1 (1): vendor = Pulse Eight (001582)
DEBUG: [ 1232] Recorder 1 (1): CEC version 1.4
DEBUG: [ 1232] AllocateLogicalAddresses - device '0', type 'recording device', LA '1'
DEBUG: [ 1232] Recorder 1 (1): osd name set to 'CECTester'
DEBUG: [ 1232] Recorder 1 (1): menu language set to 'eng'
DEBUG: [ 1232] logical address changed to Recorder 1 (1)
DEBUG: [ 1233] GetPhysicalAddress - physical address = 1110
DEBUG: [ 1233] AutodetectPhysicalAddress - autodetected physical address '1110'
DEBUG: [ 1233] Recorder 1 (1): physical address changed from ffff to 1110
DEBUG: [ 1233] << Recorder 1 (1) -> broadcast (F): physical address 1110
TRAFFIC: [ 1233] << 1f:84:11:10:01
NOTICE: [ 1384] CEC client registered: libCEC version = 4.0.4, client version = 4.0.4, firmware version = 1, logical address(es) = Recorder 1 (1) , physical address: 1.1.1.0, compiled on Linux-4.15.0-48-generic ... , features: P8_USB, DRM, P8_detect, randr, RPi, Exynos, AOCEC
DEBUG: [ 1384] Recorder 1 (1): vendor = LG (00e091)
DEBUG: [ 1384] replacing the command handler for device 'Recorder 1' (1)
DEBUG: [ 1384] Recorder 1 (1): CEC version 1.3a
DEBUG: [ 1384] << Recorder 1 (1) -> TV (0): OSD name 'CECTester'
TRAFFIC: [ 1384] << 10:47:43:45:43:54:65:73:74:65:72
DEBUG: [ 1685] << requesting power status of 'TV' (0)
TRAFFIC: [ 1685] << 10:8f
TRAFFIC: [ 1805] >> 01:8f
DEBUG: [ 1805] << Recorder 1 (1) -> TV (0): on
TRAFFIC: [ 1805] << 10:90:00
DEBUG: [ 1805] >> TV (0) -> Recorder 1 (1): give device power status (8F)
TRAFFIC: [ 2510] >> 0f:87:00:e0:91
DEBUG: [ 2510] << Recorder 1 (1) -> Broadcast (F): vendor id LG (e091)
TRAFFIC: [ 2510] << 1f:87:00:e0:91
DEBUG: [ 2510] >> TV (0) -> Broadcast (F): device vendor id (87)
TRAFFIC: [ 2712] >> 01:8c
DEBUG: [ 2712] << Recorder 1 (1) -> TV (0): vendor id LG (e091)
TRAFFIC: [ 2712] << 1f:87:00:e0:91
DEBUG: [ 2712] >> TV (0) -> Recorder 1 (1): give device vendor id (8C)
DEBUG: [ 2805] expected response not received (90: report power status)
TRAFFIC: [ 2864] << 10:8f
TRAFFIC: [ 3015] >> 01:90:00
DEBUG: [ 3015] TV (0): power status changed from 'unknown' to 'on'
DEBUG: [ 3015] expected response received (90: report power status)
DEBUG: [ 3015] >> TV (0) -> Recorder 1 (1): report power status (90)
NOTICE: [ 3015] << putting 'TV' (0) in standby mode
TRAFFIC: [ 3015] << 10:36
DEBUG: [ 3075] unregistering all CEC clients
NOTICE: [ 3075] unregistering client: libCEC version = 4.0.4, client version = 4.0.4, firmware version = 1, logical address(es) = Recorder 1 (1) , physical address: 1.1.1.0, compiled on Linux-4.15.0-48-generic ... , features: P8_USB, DRM, P8_detect, randr, RPi, Exynos, AOCEC
DEBUG: [ 3076] Recorder 1 (1): power status changed from 'on' to 'unknown'
DEBUG: [ 3076] Recorder 1 (1): vendor = Unknown (000000)
DEBUG: [ 3076] Recorder 1 (1): CEC version unknown
DEBUG: [ 3076] Recorder 1 (1): osd name set to 'Recorder 1'
DEBUG: [ 3076] Recorder 1 (1): device status changed into 'unknown'
DEBUG: [ 3076] unregistering all CEC clients
TRAFFIC: [ 3199] >> 01:1a:01
DEBUG: [ 3199] >> TV (0) -> Recorder 1 (1): give deck status (1A)
DEBUG: [ 4006] UnregisterLogicalAddress - releasing previous logical address
DEBUG: [ 4006] logical address changed to Broadcast (f)
Terminal output for echo "on 0" | cec-client RPI -s:
opening a connection to the CEC adapter...
DEBUG: [ 4] Broadcast (F): osd name set to 'Broadcast'
DEBUG: [ 7] Open - vc_cec initialised
DEBUG: [ 7] logical address changed to Free use (e)
NOTICE: [ 7] connection opened
DEBUG: [ 7] << Broadcast (F) -> TV (0): POLL
DEBUG: [ 7] initiator 'Broadcast' is not supported by the CEC adapter. using 'Free use' instead
TRAFFIC: [ 7] << e0
DEBUG: [ 7] processor thread started
DEBUG: [ 38] >> POLL sent
DEBUG: [ 38] TV (0): device status changed into 'present'
DEBUG: [ 38] << requesting vendor ID of 'TV' (0)
TRAFFIC: [ 38] << e0:8c
DEBUG: [ 1128] expected response not received (87: device vendor id)
TRAFFIC: [ 1128] << e0:8c
DEBUG: [ 2191] expected response not received (87: device vendor id)
NOTICE: [ 2191] registering new CEC client - v4.0.4
DEBUG: [ 2191] detecting logical address for type 'recording device'
DEBUG: [ 2191] trying logical address 'Recorder 1'
DEBUG: [ 2191] << Recorder 1 (1) -> Recorder 1 (1): POLL
TRAFFIC: [ 2191] << 11
TRAFFIC: [ 2521] << 11
DEBUG: [ 2851] >> POLL not sent
DEBUG: [ 2851] using logical address 'Recorder 1'
DEBUG: [ 2851] Recorder 1 (1): device status changed into 'handled by libCEC'
DEBUG: [ 2851] Recorder 1 (1): power status changed from 'unknown' to 'on'
DEBUG: [ 2851] Recorder 1 (1): vendor = Pulse Eight (001582)
DEBUG: [ 2851] Recorder 1 (1): CEC version 1.4
DEBUG: [ 2852] AllocateLogicalAddresses - device '0', type 'recording device', LA '1'
DEBUG: [ 2852] Recorder 1 (1): osd name set to 'CECTester'
DEBUG: [ 2852] Recorder 1 (1): menu language set to 'eng'
DEBUG: [ 2852] logical address changed to Recorder 1 (1)
DEBUG: [ 2852] GetPhysicalAddress - physical address = 1000
DEBUG: [ 2852] AutodetectPhysicalAddress - autodetected physical address '1000'
DEBUG: [ 2852] Recorder 1 (1): physical address changed from ffff to 1000
DEBUG: [ 2852] << Recorder 1 (1) -> broadcast (F): physical address 1000
TRAFFIC: [ 2852] << 1f:84:10:00:01
NOTICE: [ 3033] CEC client registered: libCEC version = 4.0.4, client version = 4.0.4, firmware version = 1, logical address(es) = Recorder 1 (1) , physical address: 1.0.0.0, compiled on Linux-4.15.0-48-generic ... , features: P8_USB, DRM, P8_detect, randr, RPi, Exynos, AOCEC
DEBUG: [ 3033] << Recorder 1 (1) -> TV (0): OSD name 'CECTester'
TRAFFIC: [ 3033] << 10:47:43:45:43:54:65:73:74:65:72
DEBUG: [ 3363] << requesting power status of 'TV' (0)
TRAFFIC: [ 3363] << 10:8f
DEBUG: [ 4454] expected response not received (90: report power status)
TRAFFIC: [ 4454] << 10:8f
DEBUG: [ 5514] expected response not received (90: report power status)
DEBUG: [ 5514] << requesting vendor ID of 'TV' (0)
TRAFFIC: [ 5514] << 10:8c
DEBUG: [ 6575] expected response not received (87: device vendor id)
TRAFFIC: [ 6575] << 10:8c
DEBUG: [ 7635] expected response not received (87: device vendor id)
NOTICE: [ 7635] << powering on 'TV' (0)
TRAFFIC: [ 7635] << 10:04
DEBUG: [ 7695] TV (0): power status changed from 'unknown' to 'in transition from standby to on'
DEBUG: [ 7695] unregistering all CEC clients
NOTICE: [ 7695] unregistering client: libCEC version = 4.0.4, client version = 4.0.4, firmware version = 1, logical address(es) = Recorder 1 (1) , physical address: 1.0.0.0, compiled on Linux-4.15.0-48-generic ... , features: P8_USB, DRM, P8_detect, randr, RPi, Exynos, AOCEC
DEBUG: [ 7695] Recorder 1 (1): power status changed from 'on' to 'unknown'
DEBUG: [ 7695] Recorder 1 (1): vendor = Unknown (000000)
DEBUG: [ 7695] Recorder 1 (1): CEC version unknown
DEBUG: [ 7695] Recorder 1 (1): osd name set to 'Recorder 1'
DEBUG: [ 7695] Recorder 1 (1): device status changed into 'unknown'
DEBUG: [ 7695] unregistering all CEC clients
DEBUG: [ 8009] UnregisterLogicalAddress - releasing previous logical address
DEBUG: [ 8009] logical address changed to Broadcast (f)