homebridge-daikin-local-platform
Version:
Homebridge platform plugin providing HomeKit support for Daikin air conditioners with local control
86 lines (58 loc) • 4.9 kB
Markdown
# 關機自動防霉(內部清潔)觸發調查
調查目標:透過本地 CGI(`/dsiot/multireq`)關機時,能否像遙控器一樣觸發機器的「自動內部清潔 / 防霉乾燥」運轉。
測試機種 IP:`10.1.10.124`,模式測試以冷氣(`e_3001/p_01 = 0200`)為主。
## 協定背景
- 電源:`/dsiot/edge/adr_0100.dgc_status` 之 `e_1002/e_A002/p_01`,`01` = 開、`00` = 關。
- 操作類型旗標:`e_1002/e_3003/p_2D`,由官方 App 封包觀察到三種值:
- `00` = 開機(power on)
- `01` = 關機(power off)
- `02` = 設定變更(調溫度/模式/風量)
- 運轉狀態指標(本次測試校準出來):
- `e_3003/p_02`:運轉旗標,運轉中 `01`、停止 `00`。
- `e_3003/p_37`:風扇狀態,運轉中非零(冷氣時觀察到 `02`/`03`)、停止 `00`。
- `e_3003/p_2A`、`p_2F` 亦隨運轉/停止變動,可作輔助判讀。
- `last_ope/type`:CGI 關機後觀察到變為 `100`。
## 假設
原本 `setPowerStatus()` 不論開關,`p_2D` 一律送 `02`(SETTING),等於把「真正關機」標記成「改設定」。
假設改送 `p_2D = 01`(真正關機)後,機器會把它當成正常使用者關機,進而觸發關機後的防霉乾燥循環。
## 實測
| 測試 | 關機前狀態 | 送出 `p_2D` | 關機後 `p_01` | 關機後 `p_02` / `p_37` | 防霉是否啟動 |
|------|-----------|------------|--------------|----------------------|------------|
| A(舊行為)| 已運轉一段時間 | `02`(SETTING)| `00` | `00` / `00` | 否 |
| B(短開即關)| 開機僅 6 秒 | `01`(OFF)| `00` | `00` / `00` | 否(運轉太短,本就不應觸發)|
| C(有效條件)| **連續冷氣運轉約 16 分鐘**累積冷凝水 | `01`(OFF)| `00` | `00` / `00` | **否** |
測試 C 是有效條件下的關鍵測試:機器確實運轉夠久、確實關閉,但關機後運轉指標全部歸零,風扇未續轉,**防霉未啟動**。
## 重要事實(使用者提供)
- **官方 App 透過網路關機,同樣無法觸發防霉**。
- 此限制**明載於產品說明手冊**。
官方 App 走的是相同的 dsiot 協定,它都做不到,佐證了:關機後的防霉乾燥**並未開放給網路 API**,而是綁在紅外線遙控器 / 機器本機停機邏輯上。
## 目前結論
- `p_2D` 送對值(`01`)**無法**觸發關機後防霉;這不是參數送錯的問題。
- 任何透過網路(`e_A002/p_01 = 00`)的關機,不論 `p_2D` 帶什麼值,機器一律不跑防霉,屬韌體設計限制。
- `p_2D = 01` 在語意上仍比 `02` 正確(關機本來就不是設定變更),但對防霉無實質效果。
## 防霉運轉中狀態抓取(遙控器關機觸發)
由遙控器手動關機、防霉實際運轉時,抓取完整狀態,與「CGI 關機未防霉」基準比對。
防霉運轉中的關鍵欄位:
| 欄位 | CGI 關機(無防霉)| 遙控器關機(防霉中)| 性質 |
|------|------------------|---------------------|------|
| `e_A002/p_01` 電源 | `00` | `00` | 兩者皆關 |
| `e_3003/p_02` 運轉旗標 | `00` | `00` | 防霉不被表現為「運轉」|
| `e_3003/p_37` 風扇旗標 | `00` | `00` | 同上 |
| `e_3001/p_01` 模式 | `0200` | `0200` | 未變 |
| `last_ope/type` | `100` | `1` | **唯一關鍵差異** |
| `e_A006/p_13` 操作記錄碼 | `07` | `0A` | 唯讀 log(`pt=3`)|
附帶觀察:
- 防霉運轉時室外機 `adr_0200`(`e_2008`/`e_2009`/`e_A005` 等)遙測明顯隨時間變動,代表機器物理上確實在跑防霉;但 `adr_0100` 狀態樹完全不把它表現成運轉狀態(電源 `0`、運轉旗標 `0`、模式不變)。
- 防霉運轉時**未設定任何可寫入(`pt=2`)的旗標**。所有用來區分有無防霉的欄位皆為唯讀狀態/記錄欄位。
`last_ope/type` 語意:
- `1` = 紅外線遙控器
- `100` = 網路(官方 App / CGI)
此值由機器**依命令來源**自行標記,網路端一律為 `100`,無法偽裝成 `1`。
## 最終結論
- 防霉的觸發**綁定在命令來源(IR 遙控器)**,在韌體層級就把網路命令排除。
- 防霉運轉狀態中**不存在可由 CGI 寫入、用來觸發防霉的命令參數**——區分欄位全為唯讀。
- 因此「CGI 關機自動觸發防霉」**無法達成**,與官方 App 的限制、手冊載明的限制一致。
- `p_2D` 改送 `01` 對防霉無效(但語意上仍較 `02` 正確)。
## 仍可探索的方向(未驗證)
本次觸發的是「**自動**內部清潔(關機後自動跑)」,其來源判斷無法繞過。
若機種/官方 App 另有「**手動啟動內部清潔**」按鈕(與關機無關的獨立功能),該動作可能對應一個可寫入的命令參數。要釐清需另外抓取「手動按下內部清潔」當下送出的封包,本次自動防霉的狀態並不會揭露它。