找回密碼
 立即註冊
    查看: 148|回覆: 0

    韌體更新的完整操作手冊:Zigbee2MQTT、ZHA、ESPHome、Home Assistant 本體

    [複製鏈接]

    !lvup!   100%

    386

    主題

    27

    回帖

    2200萬

    積分

    管理員

    積分
    22006063
    發表於 2026-9-21 02:58:55 | 顯示全部樓層 |閱讀模式
    先更正一個流傳很廣的說法:「IoT 裝置的韌體是單向的,更新了就回不去」。這句話在 2026 年只對了一半 —— Zigbee2MQTT 已經有一整組專門的降版指令,預設的韌體索引也保留了前一版。真正該小心的變成另外幾件事。這篇把四條更新路線從頭到尾寫完:更新前要留什麼、指令怎麼下、進行中會看到什麼、卡住了怎麼判斷、以及每一層各自真正能回去到哪裡。

    先更正一個流傳很廣的說法:「IoT 裝置的韌體是單向的,更新了就回不去」。這句話在 2026 年只對了一半 —— Zigbee2MQTT 已

    這篇涵蓋的四條路線:


    • Zigbee2MQTT 管的 Zigbee 裝置(燈泡、感應器、開關)
    • ZHA 管的 Zigbee 裝置
    • ESPHome 管的自製裝置(ESP32 / ESP8266)
    • Home Assistant 本體(Core、作業系統、應用程式)


    四條路線的「能不能回去」差很多,先看這張表,它決定你每一條要多小心:


    • Zigbee2MQTT → 可以降一版。它有專屬的 downgrade 主題,而且預設的韌體索引倉庫同時維護「最新」與「次新」兩份索引檔。再更舊的要自己提供檔案。但裝置韌體自己可能拒絕比較舊的版本,而且 Zigbee 規格不允許刷成「同一版」,這兩點 Zigbee2MQTT 都強制不了
    • ZHA → 沒有對應的降版指令。有一條從本機 .ota 檔刷的路(第九步),同樣受裝置端的版本檢查限制,不保證刷得回去
    • ESPHome → 完全可以回去,因為韌體是你自己編的,YAML 在你手上
    • Home Assistant Core / OS → 可以回去,但要靠備份還原,不是按一個「降版」鈕


    既然可以降版了,那還要小心什麼? 三件事,而且都比「回不去」更容易咬人:


    • 官方文件明講「無法備份目前安裝的版本」。你能降到的版本是索引裡有的那一版,不是「你現在這一版」
    • Zigbee2MQTT 在更新完成後會自動重新訪查(re-interview)並重新設定裝置,而這可能把你自訂的回報間隔改回預設值。溫度感應器原本設成每 5 分鐘回報一次,更新後可能變回每小時
    • 裝置更新完會重開機,而重開機會觸發它的「通電行為」。官方特別提醒:半夜更新燈泡,它可能重開之後就亮了


    第一步:更新前先做備份(Home Assistant 那一側)

    這一步不管你要更新哪一條路線都要做,因為 Zigbee 的配對資訊、實體 ID、自動化全在 Home Assistant 裡。

    到 設定 → 系統 → 備份,右下角 建立備份,選 完整備份。

    ⚠ 2025.1 之後備份系統整個重做了,有兩件事和舊教學不同:


    • 舊的「備份密碼」現在叫 加密金鑰。它是在你第一次建立備份時自動產生的一串英數字
    • 這串金鑰存在緊急工具包(emergency kit)裡。Nabu Casa 不會幫你保存,遺失就沒有任何方法解開你的備份


    所以第一次做備份時,畫面會要你下載緊急工具包。一定要下載,而且不要只存在這台機器上(機器壞掉時你就是要用這個檔案)。

    你會看到什麼:備份清單裡多一筆,大小通常是數百 MB 到數 GB,狀態顯示完成時間。點進去可以看到它包含哪些部分(Home Assistant Core 設定、每個應用程式的資料、媒體、共享資料夾)。


    • 備份卡在「建立中」超過十五分鐘 → 多半是某個應用程式的資料很大(Frigate 的錄影、recorder 的資料庫)。到 設定 → 系統 → 記錄 看有沒有錯誤
    • 大小只有幾 MB → 你選到的是部分備份,不是完整備份


    第二步:建立更新前的基準線

    「更新後有沒有壞掉」這個問題,只有在你知道更新前長什麼樣的時候才回答得出來。

    到 開發者工具 → 模板,把左邊的內容整個換成下面這段:
    1. 目前不可用的實體({{ states | selectattr('state','in',['unavailable','unknown']) | list | count }} 個):
    2. {% for s in states | selectattr('state','in',['unavailable','unknown']) | list %}
    3.   {{ s.entity_id }}
    4. {%- endfor %}
    5. Zigbee 裝置數:{{ states.sensor | selectattr('attributes.friendly_name','defined') | list | count }}
    6. 自動化清單:
    7. {% for a in states.automation %}
    8.   {{ a.entity_id }} = {{ a.state }} / 最後觸發 {{ a.attributes.last_triggered }}
    9. {%- endfor %}
    複製代碼

    你會看到什麼:右邊立刻跑出結果,例如:
    1. 目前不可用的實體(2 個):
    2.   sensor.yang_tai_wen_du
    3.   binary_sensor.che_ku_men
    4. 自動化清單:
    5.   automation.li_jia_duan_dian = on / 最後觸發 2026-09-24 08:12:41+00:00
    6.   automation.gan_ying_deng = on / 最後觸發 2026-09-25 06:33:02+00:00
    複製代碼

    把這段輸出整個複製起來貼到記事本。 更新之後再跑一次同一段,兩份一比就知道少了什麼。

    這一步是整篇最值錢的一步,而且只要三十秒。沒有它的話,更新三天後你發現某個感應器不見了,你完全無法確定是不是更新造成的。

    第三步(Zigbee2MQTT):先把 OTA 的行為設對

    Zigbee2MQTT 預設會回應裝置自己發起的更新檢查。也就是說,就算你不做任何事,裝置也可能自己來問有沒有新版。要不要讓它自己來,由你決定。

    打開 Zigbee2MQTT 的 configuration.yaml(HA OS 的話在 應用程式 → Zigbee2MQTT → 設定分頁,或用 File Editor 開 /config/zigbee2mqtt/configuration.yaml),加上或修改 ota: 這一段:
    1. ota:
    2.   # true = 不回應裝置自己發起的檢查,只有你手動按才會更新
    3.   disable_automatic_update_check: true
    4.   # 兩次檢查之間至少間隔幾分鐘,預設 1440(一天)
    5.   update_check_interval: 2880
    6.   # 傳一個區塊之後等多久再傳下一個,預設 250 毫秒,最小 50
    7.   # 調大 = 更新更慢但更不會塞住整個 Zigbee 網路
    8.   image_block_response_delay: 500
    9.   # 每個區塊多大,預設 50 bytes,範圍 10-100
    10.   # 有些裝置對大區塊會失敗,卡住的話往下調
    11.   default_maximum_data_size: 50
    12.   # 等裝置來要區塊的逾時,預設 150000 毫秒
    13.   image_block_request_timeout: 150000
    14.   # 自訂索引檔(本機路徑或網址)。不填就用官方的 zigbee-OTA 倉庫
    15.   # zigbee_ota_override_index_location: my_index.json
    複製代碼

    以下還有約 80% 的內容
    登入後即可閱讀完整教學

    登入繼續閱讀使用 Google 登入
    您需要登入後纔可以回帖 登入 | 立即註冊

    本版積分規則

    延伸閱讀

    加入惟家 LINE 群 QR Code加入惟家 LINE 群

    Archiver|手機版|惟家的智能論壇

    GMT+8, 2026-11-10 01:02 , Processed in 0.142529 second(s), 25 queries .

    快速回覆 返回頂部 返回列表