智能家居 篇五:米家miot设备接入HA
前文介绍了如何通过xiaomi_miio_raw插件将暂未支持的米家设备接入HA,但用相同方法去接入米家智能插座2蓝牙网关版时会吃瘪,因为智能插座2采用了一套新的协议,插件暂未跟上。之前的协议叫miio,新的协议叫miot,两者内部实现变化较大,但在局域网控制这块保持了一定的兼容性,其实对插件做出少量修改就能支持miot协议。本文介绍如何将米家miot设备接入HA。
在miio中,可以通过get_prop "['on', 'bright', 'ct']"方法获取开关、亮度、色温等属性,通过set_power、set_bright、set_ct等方法设置开关、亮度、色温属性,属性名和方法名杂乱无章,没有一个统一的地方查询。而miot改用了一套更科学的方法管理设备的属性,通过get_properties获取属性、set_properties方法设置属性。下面以智能插座2为例介绍miot设备接入HA的方法,该方法同样适用于其他米家miot设备。
1. 老规矩,米家设备接入HA,首先得获取设备token,可以通过Xiaomi Gateway 3集成获取。
2. 打开http://miot-spec.org/miot-spec-v2/instances?status=all ,查找上图显示的设备型号chuangmi.plug.212a01,得到该设备在米家miot中的类型名。{"status":"released","model":"chuangmi.plug.212a01","version":1,"type":"urn:miot-spec-v2:device:outlet:0000A002:chuangmi-212a01:1"}
3. 将类型名拼到https://miot-spec.org/miot-spec-v2/instance?type= 后面访问,例如智能插座2 ,获得该设备支持的属性列表。提取并整理一下,得到{'did': 'power', 'piid': 1, 'siid': 2} {'did': 'temperature', 'piid': 6, 'siid': 2} {'did': 'indicator_light', 'piid': 1, 'siid': 3} ……
4. 执行miiocli device --ip 192.168.x.xxx --token xxxxx raw_command get_properties "[{'did': 'power', 'piid': 1, 'siid': 2}]"测试属性(ip、token见第1步,[]中间的属性id见第3步),过滤掉无法获取的属性,最终我们发现智能插座2可以获取以下12个属性,进一步测试发现,一次get_properties最多可操作10个属性。结合米家APP的界面展示,我们可以确定,siid:2 piid:1控制插座电源,siid:3 piid:1控制指示灯,siid:5 piid:6的结果除以100就是功率。可进一步用miiocli device --ip 192.168.x.xxx --token xxxxx raw_command set_properties "[{'did': 'power', 'piid': 1, 'siid': 2, value: true}]"测试属性设置。
{'did': 'power', 'piid': 1, 'siid': 2} {'did': 'temperature', 'piid': 6, 'siid': 2} {'did': 'indicator_light', 'piid': 1, 'siid': 3} {'did': 'on_duration', 'piid': 1, 'siid': 4} {'did': 'off_duration', 'piid': 2, 'siid': 4} {'did': 'countdown', 'piid': 3, 'siid': 4} {'did': 'task_switch', 'piid': 4, 'siid': 4} {'did': 'countdown_info', 'piid': 5, 'siid': 4} {'did': 'power_consumption', 'piid': 1, 'siid': 5} {'did': 'electric_current', 'piid': 2, 'siid': 5} {'did': 'voltage', 'piid': 3, 'siid': 5} {'did': 'electric_power', 'piid': 6, 'siid': 5}
5. 至此可以确定,至少python miio这个库及miiocli这个工具是兼容miot协议的,是否就意味着可以用xiaomi_miio_raw集成来接入HA呢?很遗憾,xiaomi_miio_raw对get_properties未做兼容,且它一次获取15个属性,不修改代码是不行的。向作者提了issue,但看这情况,远没有自己改代码来得快,所以还是自己改好反哺吧。目前xiaomi_miio_raw已合入了我的修改,可以继续用这个插件按下面的步骤将miot设备接入HA了。
6. 与前文类似,先在configuration.yaml中定义一个支持获取属性和调用服务的sensor。
7. 然后用template将功率包装成可直观查看的sensor,并包装出一个可控制电源通断的switch。
8. 至此就完成了智能插座2接入HA,可控制电源通断、查看功率、也可查看其它暂时意义不明的属性。
总的来说与前文区别不大,唯一的区别就是xiaomi_miio_raw暂未支持,需要修改代码,不过我已经改好并提交了PR,你们不用再改了,按照与前文相同的方法去集成就行了。
琴秀
校验提示文案
眼睛君
校验提示文案
telanx
校验提示文案
lokig2019
校验提示文案
值友7770674057
校验提示文案
余歌唱晚
校验提示文案
粉色小萌妹
校验提示文案
_梦宇
校验提示文案
头号帅哥
校验提示文案
等彳寺
校验提示文案
石子路口
校验提示文案
rangergo001
校验提示文案
OpenRouter
校验提示文案
OpenRouter
校验提示文案
rangergo001
校验提示文案
石子路口
校验提示文案
等彳寺
校验提示文案
头号帅哥
校验提示文案
值友7770674057
校验提示文案
lokig2019
校验提示文案
telanx
校验提示文案
眼睛君
校验提示文案
琴秀
校验提示文案
_梦宇
校验提示文案
粉色小萌妹
校验提示文案
余歌唱晚
校验提示文案