说明
- 因为zigbee2mqtt 的1.19.0版本后使用了新的readconfiguration步骤(未知修改原因,待查)导致cc2530+esp8266 妖神版的tasmota固件z2mp模式无法正常启动zigbee2mqtt。 同时我的Homeassistant安装环境重做后丢失了备份,新安装的zigbee2mqtt版本都到1.22了。(我真是手贱升级。。。)所以尝试了tasmota固件z2tp模式作为网关使用。
- 之前文章中提到了z2tp和z2mp两种模式配置方式,个人还是推荐使用z2mp,因为zigbee2mqtt能支持更多zigbee设备。使用z2tp的话需要将tasmota上的mqtt服务器配置配为homeassistant mqtt broker。然后再homeassistant环境下测试mqtt sensor配置。个人走了很多路,这里做个记录。
本人zigbee网络设计
- 新入了锐角云之间烧录hassOS,比rpi3 性能高多了。原来rpi已经不能满足需求了,而且一直没有响应。随着homeassistant越来越复杂,对性能要求会越来越高。
- 设备:
- 锐角云+usb zigbee网关,运行hassOS, zigbee home automation(zha) ,HACS,hass-yeelightbt连接aqara zigbee贴墙开关并控制小米蓝牙床头灯(yeelight bedsidelamp)、涂鸦插座、aqara六键贴墙开关、涂鸦阳台单火灯(zigbee)
- rpi3b + usb zigbee网关cc2531, 运行hassOS,zigbee2mqtt, hacs,连接lhomee的小米双键贴墙开关(因为zha不支持,用了zigbee2mqtt)。通过remote_homeassistant访问主homeassistant控制主卧灯和夜灯。
- 主homeassistant,在esxi上的一个虚拟机,主要负责连接xiaomi_gateway和xiaomi_miio等网络上应用的组件,同时通过remote_homeassistant控制锐角云上提供的床头灯设备、阳台灯(涂鸦)。自身提供remote_homeassistant可以被控制。
- zigbee网络设计
- 小米设备全部连接至客厅及主卧的小米二代网关,除了北方间的aqara一代墙壁单火开关连接到小米空调伴侣上。
- 部分设备连接至zigbee第三方网关
- 小房间通过蓝牙mesh连接到redmi_play音箱上。
- 上述设计原因
- 因为接入自己的zigbee第三方网关就不能使用小爱同学控制,实际上小爱并不好控制
- 而小米网关可以通过局域网控制,所以弄了混合模式,实际上自己想各种模式都要体验一遍。
个人推荐的zigbee网络设计
- 一个网关(coordinator)多个路由(router)
- 网关推荐使用usb的zigbee适配器,且建议cc2530以上,支持设备更多的适配器。
- 路由的话,推荐涂鸦的zigbee插座,可以做到40元一个,用以拓展zigbee网络。
- 如果用zigbee home automation(zha)的话可以指定zigbee终端(endpoint)设备通过路由(router)连接。
- 如果zigbee2mqtt的话,我还不知道怎么弄。
正文
以下记录了如何使用zigbee2tasmota来使用zigbee设备并且在homeassitant上手工配置设备。
zigbee2tasmota配置
- tasmota界面设置z2tp并重启
- 用过控制台界面使用zbpermitjoin 1命令与zigbee设备配对
- 使用zbname 0xaaaa,xiaomi_remote设置别名,因为0x在mqtt中被homeassistant的json解析时会被转译
- 设置setoption83 1在mqtt消息中显示别名而不是0xaaaa
- 设置setoption89 1在mqtt消息中的topic包含设备的0xaaaa,这样配对多个设备就可以分为不同topic,在state_topic更好配置
homeassistant的mqtt配置
- 在supervisor先安装好mqtt broker并且启动,在ha中新增mqtt用户用于z2t的mqtt登录
- 在integration中新增mqtt配置
- 在mqtt配置中选项中可以通过输入#并开始监听服务所有mqtt消息。
在homeassistant的configuration.yaml中配置mqtt sensor
- 首先,可以先通过mqtt的选项页面进行测试,配置topic为格式
<discovery_prefix>/<component>/[<node_id>/]<object_id>/config
如:homeassistant/binary_sensor/garden/config
这里设备是binary sensor
名称是garden
然后在topic参数里填写json格式
{"name": "garden", "device_class": "motion", "state_topic": "homeassistant/binary_sensor/garden/state"}
这表示设备名为garden的motion类型的binary sensor 读取topic为“homeassistant/binary_sensor/garden/state"的状态。
- 此时ha会自动创建一个临时的实体,该实体重启后会消失,你也可以用前面的config topic不带参数来删除实体。
- 这里state_topic可以为tele/gateway/aaaa/sensor,这是z2t的报文topic
- 然后需要新增一个value_template字段,在mqtt测试界面无法传输,可以用ssh登录,发送以下消息
mosquitto_pub -h ha_ip -p 1883 -t "homeassistant/binary_sensor/garden/config" -m '{"name": "garden", "device_class": "motion", "state_topic": "homeassistant/binary_sensor/garden/state"}'
- value_template这么写:
"value_template": "{{ value_json.ZbReceived.xiaomi_remote.Power }}"
对应mqtt报文格式为
{"ZbReceived": {"xiaomi_remote": {"Power": "1". "Endpoint": "1". "LinkQuanlity": "59"}}}
这样就可以正常测试mqtt设备了,此处是用sensor做案例,switch情况请参考homeassistant网站的mqtt dicovery 和mqtt switch页面,应该是再多一个command_topic。此处没有尝试过。
- 下一步就是测试通过的mqtt配置写configuration.yaml
我的样例:
sensor:
- platform: mqtt
name: "xiaomi_remote"
device_class: power
state_topic: "tele/gateway/aaaa/sensor"
value_template: "{{value_json.ZbReceived.xiaomi_remote.Power}}"
- 重启后可用