Zigbee 簡介
在台灣玩 Home Assistant 的族群裡,除了 WiFi 裝置外,最常會用到的就是 Zigbee 裝置了。由於 Zigbee 低耗電的特性,使得不少的 Zigbee 裝置可透過電池供電,在不方便配實體線路的地方會是很好的方案。
不過不像 WiFi 大多數的裝置都有內建支援,絕大多數的硬體環境是沒有內建 Zigbee 通訊晶片的。還好由於 Zigbee 裝置售價相對低廉,也有蠻龐大的使用者群族,因此要在既有硬體環境底下加上 Zigbee 支援也變得相對容易。
在一個標準的 Zigbee 網路中,主要會有三種裝置類別屬性:
-
Coordinator
- 在 Zigbee 網路中的主控端,一個網路內只能有一個 coordinator,市售產品有 coordinator 功能的裝置通常被稱作「網關」。 -
Router
- 可中繼信號的裝置,用來延伸網路的範圍以及裝置數量。 -
End Device
- 終端裝置,有時也稱作子裝置,也是我們實際要使用的裝置類別,例如各式感測器、開關以及其他各類裝置。有些吃市電的裝置本身也具備有 router 的中繼屬性,故也能有延伸網路範圍以及穩定度的作用。
Zigbee 本身是走 mesh 的架構,因此節點之間可以互相連結並建立多重訊息傳遞路徑,只要通訊的路徑不要完全斷掉,裝置就可以維持運作。以下是一個標準 Zigbee 網路的簡易示意圖:
然後這邊是常見的一些 Zigbee coordinator 類型:
[左至右:HA 小玩家客制有線網關、小米多功能網關 2、Sonoff Zigbee 3.0 USB Dongle Plus]
最左邊的是透過有線網路(serial over TCP)連接的網關,好處是網關本身與 HA 的主機可以分開一段距離,裝在訊號分佈較適當的位置。至於缺點的部分,由於通訊的部分還是基於一般的網路協定,故網路的品質就會連帶影響到其穩定度及效能。這也有支援 WiFi 或是兩者都支援的版本,基本上就是硬體介面不同,底層都是 IP-based。
中間的是市售商品化的網關,這種類型的市售網關通常僅支援自家體系的子裝置,譬如圖中的是小米的網關,因此主要僅能支援小米以及 Aqara 的相容子裝置,我手上其他廠牌的 Zigbee 裝置例如 IKEA 的無線開關就無法使用。
右邊的是直接透過 USB 與主機連接的 Zigbee Dongle,由於需要與主機直接連結,故連結上比較單純,但也會受限於主機的位置導致收發訊的位置未必是最適當的。(通常會建議透過延長線與主機稍微保持一個距離,避免受到干擾)
因此各種方案都有他們的優缺點,需要依照自己的需求挑選最適當的。
Zigbee2MQTT 簡介
剛剛有提到市售商品化的一些 Zigbee 網關多半僅支援自家體系的子裝置,所以以前常遇到的一個問題就是我有三家的 Zigbee 商品,可能就要用三個不同的網關,而且彼此之間未必能互相連動,導致運用上會有很多限制。
但我們要玩 Home Assistant 就是希望能有一個開放的整合環境,而在 Home Assistant 上其實內建有 ZHA 整合,不過今天我們介紹的是另外一套管理工具叫做 Zigbee2MQTT(後面以 Z2M 稱呼)。
顧名思義,Zigbee2MQTT(Zigbee to MQTT)可透過支援的 Zigbee coordinator 硬體與 Zigbee 子裝置連接,並經由 MQTT 通訊協定與其他系統溝通。
MQTT 是一種基於發布∕訂閱機制的訊息傳輸協定,由於其輕量化且可靠的訊息傳遞機制被許多 IoT 應用廣泛採用,有著容易理解且容易整合的特性。而 Z2M 演進至今由於有著廣泛的社群支援,已經有相對易用的介面以及支援大量的 Zigbee 裝置庫,藉由 HA 上的 Mosquitto addon(一套 MQTT broker)可輕易整合,故已經成為許多人玩 Zigbee 整合的首選。
Zigbee2MQTT 的網頁介面:
接下來,我會提供簡易的圖文指引,教大家如何在標準的 Home Assistant 環境上安裝 Z2M。
會用到的軟硬體
- 包含 Supervisor / Add-on 的 HA 環境(會自己搞特殊環境的也不會看這篇了 XD)
- Zigbee2MQTT 支援的 adapter(coordinator)
- Zigbee2MQTT 支援的裝置(測試用)
安裝 MQTT Broker
要整合 Zigbee2MQTT,首先需要有一個 MQTT broker,而 Home Assistant 內就有提供一個 MQTT broker 在 add-on 裡,叫做 Mosquitto。
先到 Supervisor 的 Add-on Store,找到 Mosquitto 並安裝:
安裝完後啟動(可用預設參數),並到 log 裡確認啟動時沒遇到問題,這樣就完成了。
安裝 Zigbee2MQTT
由於 Zigbee2MQTT 並不在 HA 的預設 Add-on Store 中,因此我們需要先將 Z2M 專案的 repository 加入才能一鍵安裝。
先到專案的 Github page 上複製連結:
接下來到 Add-on Store 右上的三點選單中,選擇 Repositories 並將連結加入:
加入成功後就可以從 Add-on Store 中看到 Zigbee2MQTT 的選項了,選擇非 Edge 的版本(Edge 版本是最新的 build 但未經廣泛驗證,為測試用):
安裝好後,到 Configuration 下面,我們主要要設定使用的 Zigbee adapter 的裝置路徑:
如果不知道裝置路徑的話,其實可以到硬體列表中查詢。到 Supervisor → System → Host 欄位右方三點選單,選擇 Hardware:
由於大部分的 Zigbee USB adapter 都是透過 USB to serial/USB to UART 等橋接晶片做介面轉換,因此可以透過一些已知關鍵字搜尋,找到裝置後可以使用 device path 也可以使用 device ID,在這邊我使用 device path = /dev/ttyUSB0。如果是使用 Ethernet/WiFi 等透過 serial over TCP 連接的裝置類型,請依照產品的說明設定遠端連結的路徑:
儲存設定後,啟動 Z2M 並到 log 查看是否有任何錯誤,如果正常啟動,即可開啟網頁介面:
網頁介面看起來像這樣,由於我有預先安裝過一些測試裝置,故畫面上已經有顯示這些裝置的資訊。要加入新的裝置,透過右上角的 Permit Join (All),在倒數結束前,將 Zigbee 子裝置設定到配對模式,並接近 Zigbee adapter,就可以將裝置加入到 Z2M 中。加入到 Z2M 的裝置會自動經由 MQTT 整合加入到 HA 中,使用標準環境大致上很多設定都是半自動完成,非常便利。
有其他語系的需求,也可以直接由上方的語言選單切換:
其他小技巧
有時會發現接入的裝置功能似乎並不完整,例如無線按鈕不是每種功能都有顯示出來,或是電量、訊號品質等無法顯示。這是因為 Zigbee 裝置有時並不會一次送出所有的數值,需要等待一段時間才會更新,有些功能則是要實際去觸發過才會出現,像是按鈕可以操作幾次「單擊」、「雙擊」、「長按」之類的,通常按過後相對應的功能就會顯示出來了。
有時配對時一直抓不到裝置,也可以透過類似的手法在配對期間觸發裝置送狀態訊息,或許會有幫助。配對時最好能盡量離 Zigbee adapter 近一點,有時在訊號太差的位置配對,接入後容易有裝置狀態異常的情修。
如果配對後裝置一直有異常屬性,透過上述的方式仍無法排除,就將裝置移除,重新再配對看看。