点击蓝字
关注我们
本文为『瀚思彼岸』论坛精华文章,作者为manymuch大神,在此表示感谢!文章版权归原作者所有,侵权必究。
缘由
家里有个极米投影仪Z6X,一直想接入HA,然而新的极米系统已经关闭了ADB开启的入口(在工程模式里面已经没有ADB了),所有HA自带的android tv集成就不能用了。
其他相关工作
感谢论坛里这些朋友提供的极米投影仪各个接入教程:
https://bbs.hassbian.com/thread-4998-1-1.html
https://bbs.hassbian.com/thread-7105-1-1.html
https://bbs.hassbian.com/thread-8363-1-1.html
https://bbs.hassbian.com/thread-11830-1-1.html
有的提供了UDP协议接口,有的基于Node-RED集成, 有的自己写了HA集成。
虽然基本够用, 但是偶尔还是会有一点小问题,于是这两天学了一点HA集成开发的方法,基于async写了一个 稍微“正规”一点的HA插件。
在此抛砖引玉,希望能吸引大佬门一起开发这个极米投影仪HA插件:
https://github.com/manymuch/Xgimi-4-Home-Assistant
使用方法
如果想直接使用,可以下载这个包:xgimi.zip(请到论坛原帖下载) ,放入custom_components内,重启一下HA,然后在configuration.yaml中填入:
remote:- platform: xgiminame: z6x # 随便起个名字host: 192.168.0.115 # 极米投影仪IPtoken: "12D7C7899B9F80FFFFFF3043524B544D" # BLE manufacture data
再重启一下HA,就可以看到一个remote.z6x的实体了。可以通过调用remote service来控制。
service: remote.send_commanddata:command: volumeuptarget:entity_id: remote.z6x
目前支持的command有:
play, pause, power, back, home, menu, right, leftup, down, volumedown, volumeup, poweron, poweroff, volumemute
如果输入的command不在上面的范围内,就会直接转换成语音控制。
service: remote.send_commanddata:command: 关屏target:entity_id: remote.z6x
就会实现“光关机”, 所以只要语音控制能支持的, 都可以通过这个方法间接实现。
关于开机
目前开机是基于发送ble advertisement实现的,这就需要你的HA宿主机有一个可以用的蓝牙模块,我是在树莓派上测试的,不需要额外的设置,如果是其他机器或者自己加装的USB 蓝牙模块,可能需要一些特殊的设置。
关于蓝牙token的获取,从目前的观察来看,似乎每一种型号的投影仪token不同,如果你也是z6x,可以尝试下我的这个token,如果是其他型号,可以先看一下:
https://github.com/manymuch/Xgimi-4-Home-Assistant/issues/5
https://stackoverflow.com/questions/69921353/how-can-i-clone-a-non-paired-ble-signal-from-a-remote-to-trigger-a-device/75551013#75551013
里面有没有别人已经获得到的token,或者根据上面链接里面的方法来获取token。
我简单翻译一下里面的步骤:
你需要一个iOS设备,下载 bluetooth smart scanner app
将你的投影仪主机彻底断开电源
不停的按遥控器上的开机按键,这时在bluetooth smart scanner app上应该可以找到遥控器发射的ble advertisement信号
在上面的信号中,找到manufactorer data
建议先通过[color=var(--color-accent-fg)]EFR connect. 这个安卓app,验证下能否使用上面的manufactorer data唤起投影仪
如果成功了,把这一串填入插件的token那一项,重启HA
Dashboard使用样例
基于tv-card可以构建一个极米投影仪遥控器界面,以下UI设置供参考:
type: custom:tv-cardentity: remote.z6xtv: trueleft:service: remote.send_commandservice_data:command: leftentity_id: remote.z6xright:service: remote.send_commandservice_data:command: rightentity_id: remote.z6xup:service: remote.send_commandservice_data:command: upentity_id: remote.z6xdown:service: remote.send_commandservice_data:command: downentity_id: remote.z6xselect:service: remote.send_commandservice_data:command: playentity_id: remote.z6xback:service: remote.send_commandservice_data:command: backentity_id: remote.z6xvolume_up:service: remote.send_commandservice_data:command: volumeupentity_id: remote.z6xvolume_down:service: remote.send_commandservice_data:command: volumedownentity_id: remote.z6xvolume_mute:service: remote.send_commandservice_data:command: volumemuteentity_id: remote.z6xpower:service: remote.send_commandservice_data:command: powerentity_id: remote.z6xhome:service: remote.send_commandservice_data:command: homeentity_id: remote.z6x
总结
该插件还在非常初级的阶段,功能、稳定性方面都还有很多空间。
本来想做成通过config flow UI集成的插件,然而学艺不精,折腾了半天没做出来,暂时先做成基于yaml的,希望有大佬能够指点一下。
走过路过麻烦在github上按一个星星呀,支持我开发的动力!
欲了解更多Home Assistant最新玩法和教程,请访问瀚思彼岸论坛(bbs.hassbian.com),同时欢迎关注本公众号:
▼ 请点击“阅读原文”到论坛与作者互动。