說明
- 因為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}}"
- 重啟后可用