|
|
「這個插座又離線了」「感應器怎麼變成不可用」—— 裝置一多,掉線就變成日常。這一篇不給「建議清單」,而是給一套可以執行的排查順序:每一步都有指令、有預期輸出、有「看到什麼代表哪一條出問題」。

■ 步驟 1:先分辨「掉線」還是「找不到」
這兩個症狀長得一模一樣(HA 上都顯示「不可用」),但原因和修法完全相反。不先分開,後面每一步都在猜。
在 HA 的 Terminal & SSH 附加元件裡(或任何一台同網段的電腦上)執行:
(IP 換成那個會掉線的裝置。不知道 IP 的話,到路由器的 DHCP 用戶端清單找,或看下面步驟 2 的 arp 指令。)
你會看到三種結果,對應三條不同的路:
結果 A:全部回應,延遲穩定
- 10 packets transmitted, 10 received, 0% packet loss
- rtt min/avg/max/mdev = 2.104/3.882/6.431/1.204 ms
複製代碼
→ 裝置根本沒掉線,網路是通的。問題在 HA 找不到它(mDNS 或整合的問題)。跳到步驟 6。
結果 B:部分掉包,延遲跳動很大
- 10 packets transmitted, 6 received, 40% packet loss
- rtt min/avg/max/mdev = 2.104/188.882/842.431/301.204 ms
複製代碼
→ 訊號品質問題。跳到步驟 4(頻道與頻寬)。
結果 C:完全不通
- 10 packets transmitted, 0 received, 100% packet loss
複製代碼
→ 裝置真的不在網路上,或者被路由器隔離了。繼續步驟 2。
■ 步驟 2:確認它到底有沒有連上路由器
「ping 不到」有兩種:它沒連上,或者它連上了但你被擋著看不到它。用 ARP 表區分。
在同網段的電腦(Linux 或 HA 的終端機)上:
- ip neigh show | grep 192.168.1.101
複製代碼
Windows 上用:
你會看到:
- 有一行而且帶 MAC 位址,例如 192.168.1.101 dev br-lan lladdr a4:c1:38:xx:xx:xx REACHABLE → 裝置在網路上,ping 不到是被隔離了,跳到步驟 3
- 狀態是 FAILED 或整行不存在 → 裝置沒連上。繼續往下
再到路由器看它有沒有拿到 IP。OpenWrt 上:
你會看到每一行是「到期時間戳 MAC IP 主機名 用戶端ID」:
- 1790000000 a4:c1:38:11:22:33 192.168.1.101 tuya-plug *
- 1790000123 84:f3:eb:44:55:66 192.168.1.102 esphome-sensor *
- 1789998000 dc:a6:32:77:88:99 192.168.1.50 homeassistant *
複製代碼
找不到那個裝置的 MAC → 它連 DHCP 都沒要到,代表連 Wi-Fi 認證那一關都沒過。最常見的三個原因,依序查:
- 它是 2.4G 裝置,但被 Band Steering 推去 5G(步驟 3-1)
- 路由器開了 WPA3-only 或強制 802.11w,而便宜的 IoT 裝置只支援 WPA2(步驟 3-3)
- SSID 裡有中文或特殊符號,某些 IoT 韌體解不開
看得到 MAC 但到期時間戳早就過了(把那個數字貼到線上的 Unix 時間換算工具,或用 date -d @1790000000)→ 租約到期沒續約,是步驟 5 的 DHCP 問題。
■ 步驟 3:三個最常見的路由器設定
3-1 把 2.4G 與 5G 分成不同的 SSID
現在的路由器預設會把兩個頻段合成同一個名稱(叫 Band Steering、智慧連線、Smart Connect、或 One SSID)。而絕大多數 IoT 裝置只有 2.4G 的無線晶片。
發生的事情是:裝置要連線時,路由器判斷「這個客戶應該去 5G」而不回應 2.4G 的請求,裝置連不上、重試、再被推、最後放棄。
怎麼確認你中了這一條:看路由器的無線設定頁,2.4G 與 5G 的 SSID 欄位是不是同一個字串。是的話就中了。
OpenWrt 的改法:編輯 /etc/config/wireless,確認兩個 wifi-iface 的 ssid 不同:
|
|