颱風要來了,家裡的不斷電系統(UPS)剛好也在最近換了電池,順手把整套關機、開機的流程重新測了一遍,發現了一個藏很久的坑,就來記錄一下這個過程。
起點:一顆不會講話的 UPS
家裡的 NAS、跑虛擬機的 Proxmox 迷你主機(負責家裡路由器)、還有 Home Assistant,這些設備 2023 年底就接在一顆 APC BV1000-TW 上面了。它撐停電是沒問題的,但它是一顆「啞巴」UPS,沒有 USB,也沒有 SNMP(簡單講就是網路可以查詢的狀態訊號),沒辦法跟家裡任何系統說「我快沒電了,準備關機」。
結果就是,每次真的停電,這些設備只能等電池耗盡被硬生生斷電。NAS 這種有檔案系統的機器最怕這種粗暴關機,容易半夜出包。
買第二顆,不是為了多一份保護,是為了多一張嘴
2026 年 4 月又買了一顆 CyberPower CP1500PFCLCDa,接的是放在另一個房間的電腦。電腦本來就跟 NAS/PVE/HA 不同房間,本來就需要一顆自己的 UPS,這顆的存在本身不算意外開銷。但真正讓這篇文章成立的重點,是它剛好有 USB,電腦上可以跑它的管理軟體 PowerPanel Business Local,把 UPS 的狀態翻譯成區網看得到的 SNMP 訊號。這樣一來,Home Assistant 就可以直接去讀這個訊號,知道現在是不是在吃電池。
巧妙(也有點取巧)的地方:借別人的嘴講自己的事
家裡這兩顆 UPS 插在同一個電源迴路上,真的跳電的時候會同時斷電。我們沒有特地幫 NAS/PVE/HA 那顆啞巴 UPS 加訊號模組,而是讓 Home Assistant 去監控 CyberPower 那顆的 SNMP 狀態,當成整屋停電的**「代理警報」**。一偵測到它進入電池供電,就觸發自動化:兩分鐘後依序關閉 NAS → PVE,Home Assistant 自己則靠 APC 那顆的電池撐著繼續跑,電腦另外由 PowerPanel 在停電五分鐘後自己關機。等電力恢復,Home Assistant 再送 Wake-on-LAN(喚醒封包)把 NAS 跟 PVE 都叫醒。
這次真正的意外測試:換電池
這次不是真的停電,是計畫性地把第一顆 UPS(NAS/HA/PVE 那顆)整顆拔掉換電池。差別在於,平常真的停電時,Home Assistant 是靠 APC 那顆的電池撐著活下來的,這次是直接切斷電源,連 Home Assistant 自己都跟著斷電。
換完電池插回去,Proxmox 跟 Home Assistant 都自己醒過來了,但 NAS 沒有。查了一下才發現,原本設計的喚醒自動化裡有個條件卡住:只有 Home Assistant 親眼見證了停電開始、設下一個旗標,重開機後才會送出喚醒封包。這次因為 Home Assistant 自己也斷過電,這個旗標從來沒被設過,喚醒邏輯形同沒開。手動送了一次喚醒封包叫醒 NAS 之後,回頭把自動化改成「Home Assistant 只要一開機,就無條件送出喚醒封包」,不管這次的停電是不是它自己親眼見證的。
颱風前夕的小提醒
平常看不出來的坑,往往要等到真的斷過一次電才會現形。這次剛好藉著換電池的機會,把整套關機、開機的流程系統性地驗證了一遍,也算提前繳了一次學費,颱風真的來的時候應該會更放心一點。
如果家裡也有類似的設備要顧,這個「借另一顆有訊號能力的 UPS 當代理警報」的做法,或許可以參考看看。
