Zigbee2Tasmota使用及Homeassistant中MQTT Sensor配置過程

說明

  • 因為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越來越復雜,對性能要求會越來越高。
  • 設備:
  1. 銳角云+usb zigbee網關,運行hassOS, zigbee home automation(zha) ,HACS,hass-yeelightbt連接aqara zigbee貼墻開關并控制小米藍牙床頭燈(yeelight bedsidelamp)、涂鴉插座、aqara六鍵貼墻開關、涂鴉陽臺單火燈(zigbee)
  2. rpi3b + usb zigbee網關cc2531, 運行hassOS,zigbee2mqtt, hacs,連接lhomee的小米雙鍵貼墻開關(因為zha不支持,用了zigbee2mqtt)。通過remote_homeassistant訪問主homeassistant控制主臥燈和夜燈。
  3. 主homeassistant,在esxi上的一個虛擬機,主要負責連接xiaomi_gateway和xiaomi_miio等網絡上應用的組件,同時通過remote_homeassistant控制銳角云上提供的床頭燈設備、陽臺燈(涂鴉)。自身提供remote_homeassistant可以被控制。
  • zigbee網絡設計
  1. 小米設備全部連接至客廳及主臥的小米二代網關,除了北方間的aqara一代墻壁單火開關連接到小米空調伴侶上。
  2. 部分設備連接至zigbee第三方網關
  3. 小房間通過藍牙mesh連接到redmi_play音箱上。
  • 上述設計原因
  1. 因為接入自己的zigbee第三方網關就不能使用小愛同學控制,實際上小愛并不好控制
  2. 而小米網關可以通過局域網控制,所以弄了混合模式,實際上自己想各種模式都要體驗一遍。

個人推薦的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"}'

參考mqtt discovery

  • 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}}"

  • 重啟后可用
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容