UNPKG

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
# 關機自動防霉(內部清潔)觸發調查 調查目標:透過本地 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 另有「**手動啟動內部清潔**」按鈕(與關機無關的獨立功能),該動作可能對應一個可寫入的命令參數。要釐清需另外抓取「手動按下內部清潔」當下送出的封包,本次自動防霉的狀態並不會揭露它。