Raspberry Pi:打开/关闭通过HDMI-CEC连接的电视

(部分内容在cec-client的帮助下 libcec),Raspberry Pi可以控制支持CEC的设备,例如通过HDMI连接的电视等。打开和关闭电视,切换活动信号源等。
这应该适用于Raspberry Pi版本或模型,包括最新的Raspberry Pi 4和原始的Raspberry Pi。可能的用例是通过SSH连接到Raspberry Pi,发送命令并打开电源,或通过HDMI-CEC连接的电视。或者,您可以使用命令打开电视,并在脚本中将CEC适配器设为活动源。因此,当您在Raspberry Pi上打开应用程序时,通过HDMI-CEC连接到它的电视将打开电源,并且Raspberry Pi HDMI源。我认为还有许多其他用例。CEC或消费电子控制是HDMI的一项功能,可让您使用遥控器控制通过HDMI连接的设备。例如,CEC用于获取遥控器上的播放/暂停按钮并控制HDMI连接设备的播放。或者,如果您关闭电视并在Chromecast上播放视频,则电视将自动打开并切换到Chromecast源。
大多数现代电视和AV接收机都需要支持HDMI-CEC。但是请记住,您可能需要在某些型号的电视设置上启用CEC。 CEC的名称可能会因设备的品牌而异。例如,用于Samsung TV的Anynet +,用于Philips的EasyLink或Fun-Link,用于LG的SimpLink等。

能够通过HDMI打开(和关闭)连接到Raspberry Pi的电视的第一步是安装cec-client。 Raspbian或其他任何基于Raspberry Pi的基于Debian或Ubuntu的Linux发行版, cec-utils 套餐(cec-client 此包装的一部分):

sudo apt install cec-utils

在其他Linux发行版上,您需要搜索 cec-clientcec-utils 在存储库或libcec中构建 从来源
现在 cec-utils 如果已安装,请扫描CEC总线以查找可用的设备。

echo 'scan' | cec-client -s -d 1

使用此命令 echo 'scan' 发送扫描命令到cec-client, -s cec-client用于执行单个命令并存在 -d 1 由于日志级别设置为1(仅错误),因此不会因无用信息而污染终端。
记住电视(或通过HDMI-CEC连接到Raspberry Pi的其他设备)的设备号和地址。我会在以后使用。
这是在通过HDMI(具有CEC支持)连接到三星电视的Raspberry Pi上运行此命令的示例。

$ 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: no
vendor:        Samsung
osd string:    TV
CEC version:   1.4
power status:  on
language:      eng

device #1: Recorder 1
address:       1.0.0.0
active source: no
vendor:        Pulse Eight
osd string:    CECTester
CEC version:   1.4
power status:  on
language:      eng

currently active source: unknown (-1)

在此示例中,设备号 00.0.0.0 地址是我的三星电视,设备号是 11.0.0.0 地址是我的Raspberry Pi设备。
现在您知道设备号和地址,您可以使用以下命令打开通过HDMI-CEC连接到Raspberry Pi的电视的电源:

echo 'on ' | cec-client -s -d 1

或者:

echo 'on ' | cec-client -s -d 1

两个设备号(0 在上面的示例中,它是三星电视)和设备地址(0.0.0.0 我的示例中的三星电视设备地址)应该可以工作。-d 1 您可以将日志级别限制为仅错误,并且不使用任何命令即可使用它,但是您将获得很长的日志,可能无用。范例:

echo 'on 0' | cec-client -s -d 1

或者:

echo 'on 0.0.0.0' | cec-client -s -d 1

您还将想要运行 as 使CEC适配器成为活动源的命令(电视打开后,电视将切换到Raspberry Pi HDMI源):

echo 'as' | cec-client -s -d 1

关闭电视(设置为待机状态)?用途:

echo 'standby ' | cec-client -s -d 1

根据使用方式的不同,您需要检查电视的当前状态(处于待机状态还是待机状态?)。可以使用以下方法完成:

echo 'pow ' | cec-client -s -d 1

要查看cec-client可以发送到HDMI-CEC连接的设备的所有命令,请使用 echo h | cec-client -s -d 1

Available commands:

[tx] {bytes}              transfer bytes over the CEC line.
[txn] {bytes}             transfer bytes but don't wait for transmission ACK.
[on] {address}            power on the device with the given logical address.
[standby] {address}       put the device with the given address in standby mode.
[la] {logical address}    change the logical address of the CEC adapter.
[p] {device} {port}       change the HDMI port number of the CEC adapter.
[pa] {physical address}   change the physical address of the CEC adapter.
[as]                      make the CEC adapter the active source.
[is]                      mark the CEC adapter as inactive source.
[osd] {addr} {string}     set OSD message on the specified device.
[ver] {addr}              get the CEC version of the specified device.
[ven] {addr}              get the vendor ID of the specified device.
[lang] {addr}             get the menu language of the specified device.
[pow] {addr}              get the power status of the specified device.
[name] {addr}             get the OSD name of the specified device.
[poll] {addr}             poll the specified device.
[lad]                     lists active devices on the bus
[ad] {addr}               checks whether the specified device is active.
[at] {type}               checks whether the specified device type is active.
[sp] {addr}               makes the specified physical address active.
[spl] {addr}              makes the specified logical address active.
[volup]                   send a volume up command to the amp if present
[voldown]                 send a volume down command to the amp if present
[mute]                    send a mute/unmute command to the amp if present
[self]                    show the list of addresses controlled by libCEC
[scan]                    scan the CEC bus and display device info
[mon] {1|0}               enable or disable CEC bus monitoring.
[log] {1 - 31}            change the log level. see cectypes.h for values.
[ping]                    send a ping command to the CEC adapter.
[bl]                      to let the adapter enter the bootloader, to upgrade
the flash rom.
[r]                       reconnect to the CEC adapter.
[h] or [help]             show this help.
[q] or [quit]             to quit the CEC test client and switch off all
connected CEC devices.
Sidebar