本帖最后由 Blear 于 2022-11-30 13:14 编辑
看了眼论坛里关于hdmi-cec的介绍甚少,特写一篇教程贴,希望能帮到有相关需求的同学。大家都知道现在很多电视的遥控都用的蓝牙遥控器,无法使用红外实现电视的开关机。
用过机顶盒的同学,不知道有没有试过有的机顶盒打开后,电视会跟随机顶盒一起开机,这就是用hdmi-cec功能实现的。
实现前提:
1.一个吃灰的树莓派,安装带桌面的树莓派镜像。(官方hassio的系统是否自带hdmi-cec支持未实测,本教程实例中使用的是树莓派官方镜像配合docker安装的homeassistant)
2.一台支持hdmi-cec的电视(目前大多数电视应该都有实现支持,需要打开hdmi-cec设置,具体设置自行在电视信源切换或者电视设置里找找)
3.一根hdmi线
解决办法:
一、Supervisor安装PI CEC插件支持
如果你的HomeAssistant使用Docker运行在树莓派上
2.在configuration.yaml文件中添加以下代码
hdmi_cec:
host: 58c14403-pi-cec
复制代码
接下来就可以调用hdmi_cec.send_command服务去发送开机指令了
service: hdmi_cec.send_command
data:
raw: '10:04'
复制代码
二、HomeAssistant使用tcp控制树莓派方式打开电视
如果你的HomeAssistant运行在其他设备,而你刚好有个闲置的树莓派。将树莓派和电视连接。
(比如我的homeassistant运行在群辉,为了实现电视的开机,接了个树莓派放置在客厅电视旁)
1.编译安装libcec
安装完成后执行
echo scan | cec-client -s -d 1
复制代码
如果能返回如下信息,说明树莓派已经能发现hdmi设备了
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: Unknown
osd string: TV
CEC version: 1.4
power status: on #电源状态
language: ???
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
复制代码
3.运行pycec
4.设置开机启动
touch /etc/systemd/system/pycec.service
复制代码
粘贴如下内容
[Unit]
Description=hdmi-cec
After=network.target
[Service]
Restart=on-failure
RestartSec=5
ExecStart=/usr/bin/python -m pycec
User=pi
[Install]
WantedBy=multi-user.target
复制代码
启动服务
sudo systemctl start pycec.service
复制代码
设置开机启动
sudo systemctl enable pycec.service
复制代码
5.HomeAssistant配置电视的开关
switch:
- platform: telnet
switches:
some_device_id:
name: "Some Device Name"
resource: 树莓派ip
port: 9526
command_on: '10:04'
command_off: '10:36'
command_state: '10:8f'
value_template: '{{ value == "01:90:00" }}'
timeout: 1
复制代码