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

    NAS 掛了怎麼辦:列出依賴、監控它、讓自動化優雅降級的完整做法

    [複製鏈接]

    !lvup!   100%

    386

    主題

    27

    回帖

    2200萬

    積分

    管理員

    積分
    22006063
    發表於 2026-9-21 11:19:53 | 顯示全部樓層 |閱讀模式
    「家裡的燈有時候就是怪怪的」這種話,背後常常是一個沒人發現的依賴關係 —— 例如 MQTT 跑在 NAS 上,而 NAS 每週自動重開一次維護。這一篇不談原則,直接做:先用三個指令列出你實際有哪些外部依賴,再把它們一個一個變成看得到的狀態,最後把自動化改成「依賴掛了也還能動」。

    「家裡的燈有時候就是怪怪的」這種話,背後常常是一個沒人發現的依賴關係 —— 例如 MQTT 跑在 NAS 上,而 NAS 每週自動重開一次維

    這篇做完你會有什麼


    • 一份從系統裡實際撈出來的外部依賴清單,不是憑印象寫的
    • 每一個依賴都有一個 binary_sensor,在儀表板上看得到活著沒
    • 所有靠外部資料的範本實體都加上 availability,失聯時顯示 unavailable 而不是假裝正常
    • 三種優雅降級的寫法,附完整可貼的 YAML
    • 一份「故意弄壞」的演練清單和記錄表


    步驟 1:把你實際的依賴撈出來(三個方法,都要做)

    憑印象列依賴一定會漏,而漏掉的那個通常就是會咬你的那個。

    1-1 從設定介面看整合清單


    • 設定 → 裝置與服務
    • 一個一個看,每一個整合底下如果有 IP 位址或網址,它就是一個外部依賴
    • 在紙上或記事本分三欄寫:整合名稱、它連到哪裡、掛了會失去什麼


    這個方法會漏掉的:靠 YAML 設定的整合(SNMP、command_line、rest)不會出現在這一頁。

    1-2 用指令把所有設定條目的主機位址列出來(這一步最有價值)

    先裝終端機:設定 → 附加元件 → 附加元件商店 → 搜尋 Terminal & SSH → 安裝 → 在側邊欄顯示 → 啟動。

    從側邊欄開啟終端機,貼上:
    1. jq -r '.data.entries[]
    2.   | "\(.domain)\t\(.title)\t\(.data.host // .data.url // .data.ip_address // "-")"' \
    3.   /config/.storage/core.config_entries | sort | column -t
    複製代碼

    你會看到類似這樣的輸出(每一行是一個整合):
    1. esphome      客廳藍牙代理     192.168.2.51
    2. hue          Philips Hue      192.168.2.20
    3. met          臺北             -
    4. mqtt         Mosquitto        192.168.2.10
    5. ping         192.168.2.10     192.168.2.10
    6. synology_dsm NAS              192.168.2.10
    複製代碼

    第三欄有 IP 或網址的每一行,都是一個外部依賴。 上面這個例子一眼就看得出問題:MQTT 和 NAS 是同一個 IP(192.168.2.10)—— 這就是「NAS 一重開,所有 Zigbee 裝置消失」的來源。

    jq: command not found:換成這一行(結果比較難讀,但不用額外工具):
    1. grep -oE '"(host|url|ip_address)": *"[^"]*"' /config/.storage/core.config_entries | sort -u
    複製代碼

    1-3 用範本列出現在所有不可用的實體

    開發者工具 → 範本分頁,把左邊全部刪掉,貼上:
    1. 不可用的實體共 {{ states | selectattr('state','in',['unavailable','unknown'])
    2.                         | list | count }} 個
    3. {% for e in states | selectattr('state','eq','unavailable') | list
    4.                    | sort(attribute='entity_id') %}
    5. {{ e.entity_id }}
    6. {%- endfor %}
    複製代碼

    你會看到右邊即時算出結果。

    正常情況下這個數字應該是個位數(通常是幾個預設停用的診斷實體)。超過二十個的話,多半有一整個整合正在失聯,而你可能一直沒發現 —— 因為沒有人會去看一個不會亮的燈。

    把這段存成一個常駐感測器,加到 configuration.yaml 的最外層:
    1. template:
    2.   - sensor:
    3.       - name: "不可用的實體數"
    4.         unique_id: unavailable_entity_count
    5.         unit_of_measurement: "個"
    6.         state: >
    7.           {{ states | selectattr('state','in',['unavailable','unknown'])
    8.                     | list | count }}
    9.         attributes:
    10.           entities: >
    11.             {{ states | selectattr('state','eq','unavailable')
    12.                       | map(attribute='entity_id') | list }}
    複製代碼

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

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

    本版積分規則

    延伸閱讀

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

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

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

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