『瀚思彼岸』» 智能家居技术论坛

标题: HomeAssistant使用HDMI-CEC实现电视的开机 [打印本页]

作者: Blear    时间: 2022-11-29 18:23
标题: HomeAssistant使用HDMI-CEC实现电视的开机
本帖最后由 Blear 于 2022-11-30 13:14 编辑

看了眼论坛里关于hdmi-cec的介绍甚少,特写一篇教程贴,希望能帮到有相关需求的同学。
大家都知道现在很多电视的遥控都用的蓝牙遥控器,无法使用红外实现电视的开关机。
用过机顶盒的同学,不知道有没有试过有的机顶盒打开后,电视会跟随机顶盒一起开机,这就是用hdmi-cec功能实现的。
实现前提:
1.一个吃灰的树莓派,安装带桌面的树莓派镜像。(官方hassio的系统是否自带hdmi-cec支持未实测,本教程实例中使用的是树莓派官方镜像配合docker安装的homeassistant)
2.一台支持hdmi-cec的电视(目前大多数电视应该都有实现支持,需要打开hdmi-cec设置,具体设置自行在电视信源切换或者电视设置里找找)
3.一根hdmi线

关于HDMI-CEC官方文档:
https://www.home-assistant.io/integrations/hdmi_cec/#libcec
但是从HomeAssistant 2021.7.0 开始,HomeAssistant Docker 中包含的 CEC 库不再支持 Linux 内核本身未包含的 CEC 接口。
有关说明:
https://github.com/home-assistant/core/issues/52802
https://www.home-assistant.io/blog/2021/07/07/release-20217/#breaking-changes

解决办法:
一、Supervisor安装PI CEC插件支持
如果你的HomeAssistant使用Docker运行在树莓派上
参考
https://github.com/samueltardieu/homeassistant-addon-pi-cec

1.Supervisor / Add-ons” 添加存储库
https://github.com/samueltardieu/homeassistant-addons

2.在configuration.yaml文件中添加以下代码
  1. hdmi_cec:
  2.   host: 58c14403-pi-cec
复制代码
接下来就可以调用hdmi_cec.send_command服务去发送开机指令了
  1. service: hdmi_cec.send_command
  2. data:
  3.   raw: '10:04'
复制代码


二、HomeAssistant使用tcp控制树莓派方式打开电视
如果你的HomeAssistant运行在其他设备,而你刚好有个闲置的树莓派。将树莓派和电视连接。
(比如我的homeassistant运行在群辉,为了实现电视的开机,接了个树莓派放置在客厅电视旁)
1.编译安装libcec
参考说明:https://github.com/Pulse-Eight/libcec/blob/master/docs/README.linux.md
安装完成后执行
  1. echo scan | cec-client -s -d 1
复制代码
如果能返回如下信息,说明树莓派已经能发现hdmi设备了
  1. opening a connection to the CEC adapter...
  2. requesting CEC bus information ...
  3. CEC bus information
  4. ===================
  5. device #0: TV
  6. address:       0.0.0.0
  7. active source: no
  8. vendor:        Unknown
  9. osd string:    TV
  10. CEC version:   1.4
  11. power status:  on        #电源状态
  12. language:      ???


  13. device #1: Recorder 1
  14. address:       1.0.0.0
  15. active source: no
  16. vendor:        Pulse Eight
  17. osd string:    CECTester
  18. CEC version:   1.4
  19. power status:  on
  20. language:      eng
复制代码

2.安装pycec
https://github.com/konikvranik/pycec
  1. pip install pycec
复制代码

3.运行pycec
  1. Python3 -m pycec
复制代码

4.设置开机启动
  1. touch /etc/systemd/system/pycec.service
复制代码

粘贴如下内容
  1. [Unit]
  2. Description=hdmi-cec
  3. After=network.target

  4. [Service]
  5. Restart=on-failure
  6. RestartSec=5
  7. ExecStart=/usr/bin/python -m pycec
  8. User=pi

  9. [Install]
  10. WantedBy=multi-user.target
复制代码

启动服务
  1. sudo systemctl start pycec.service
复制代码

设置开机启动
  1. sudo systemctl enable pycec.service
复制代码

5.HomeAssistant配置电视的开关
  1. switch:
  2.   - platform: telnet
  3.     switches:
  4.       some_device_id:
  5.         name: "Some Device Name"
  6.         resource: 树莓派ip
  7.         port: 9526
  8.         command_on: '10:04'
  9.         command_off: '10:36'
  10.         command_state: '10:8f'
  11.         value_template: '{{ value == "01:90:00" }}'
  12.         timeout: 1
复制代码



作者: sircoco    时间: 2022-11-30 06:09
树莓派hassio自带这个插件,但不知道怎么配置
作者: Ari    时间: 2022-11-30 08:31
好帖子,前排留名
作者: lhy741059930    时间: 2022-11-30 08:39
但是cec打开之后。 会显示hdmi的信号源吧。 不会进入系统界面

作者: Blear    时间: 2022-11-30 13:07
lhy741059930 发表于 2022-11-30 08:39
但是cec打开之后。 会显示hdmi的信号源吧。 不会进入系统界面

不会,我这边开机进入的电视自己的源,非树莓派的源
作者: Blear    时间: 2022-11-30 13:12
sircoco 发表于 2022-11-30 06:09
树莓派hassio自带这个插件,但不知道怎么配置

开机命令调用hdmi_cec.send_command服务
你也可以在开发者工具=》服务里 调用测试。
  1. service: hdmi_cec.send_command
  2. data:
  3.   raw: '10:04'
复制代码



作者: liangfeel    时间: 2022-12-4 17:41
您好,请问我用appletv可以通过遥控器打开电视,这也应该是通过hdmi cec实现的吧,但是怎么实现打开电视就直接跳转到hdmi,通常我还需要用原生遥控切换
作者: Blear    时间: 2022-12-4 21:31
liangfeel 发表于 2022-12-4 17:41
您好,请问我用appletv可以通过遥控器打开电视,这也应该是通过hdmi cec实现的吧,但是怎么实现打开电视就 ...
  1. service: hdmi_cec.select_device
  2. data:
  3.   device: 0.0.0.0
复制代码

作者: liangfeel    时间: 2022-12-5 05:36
Blear 发表于 2022-12-4 21:31

研究研究,感谢
作者: wpl820213    时间: 2022-12-5 21:30
群晖docker装的ha要怎么装啊?大佬,求教程
作者: 紫·HA    时间: 2022-12-7 11:11
留名学习
作者: unixcs    时间: 2022-12-8 00:53
分享一个我家的方案, 使用小米智能插座3 。
六七年前的老创维电视 (工厂模式   设置通电开机); 盒子通电按钮按下,默认通电开机。

开机:   通电自动 打开 电视+盒子。
关机:   遥控器关闭电视,插座检测到低功率 自动断电
作者: Kings宝哥    时间: 2024-12-22 22:02
liangfeel 发表于 2022-12-4 17:41
您好,请问我用appletv可以通过遥控器打开电视,这也应该是通过hdmi cec实现的吧,但是怎么实现打开电视就 ...

小米电视可以的
作者: Kings宝哥    时间: 2024-12-22 22:08
我怎么没看到楼主要干啥?用树莓派控制电视开关?树莓派作为机顶盒吗?





欢迎光临 『瀚思彼岸』» 智能家居技术论坛 (https://bbs.hassbian.com/) Powered by Discuz! X3.5