把冷氣接上 HomeAssistant、Google Home 和 HomeKit

前言

好想用 Google Home 控制我的冷氣喔

這個願望其實我已經想好多年了。
從大概三年前開始,買智慧插頭把床頭燈智慧化
到最近的智慧家電雨後春筍般地冒出
我的夢想(?)一直沒有改變(?)

Home Assistant 的相關專案也是絕讚活躍中
終於有一套合適的流程可以把任意的空調系統遙控器收進 HA 中
就在這邊紀錄一下 :D

PS. 本篇適合有用過 Home Assistant 的人看(?)
流程跟撇步介紹而已 沒有完整圖文教學
之後看情況再補基礎篇 :D

需求

  • Home Assistant
  • Broadlink 牌的萬能遙控 (小米的也可以,但學習訊號的方式不同,暫時不介紹)
  • 你的冷氣遙控器

本文

1. Home Assistant 連接紅外線遙控

首先在 Home Assistant 裡面新增 Broadlink 的整合,並把萬能遙控連上去。

2. Home Assistant 安裝 SmartIR 模組

雷雷是用 HACS 安裝的,當然也可以照專案的 Readme 手動安裝。

3. 冷氣訊號

檢查有沒有你的設定檔

如果你在 Climate 頁面有看到符合你的型號的冷氣,恭喜你 你很幸運 :D

直接把 Code 載下來放進 HA 的 /config/custom_components/smartir/codes/climate/ 裡面

HA 設定檔新增

smartir:

climate:
  - platform: smartir
    name: [自己選一個名字吧 :D]
    unique_id: [取一個裝置 ID]
    device_code: [設定檔四位數字]
    controller_data: [你的 Broadlink 遙控器的 HA 裝置 ID]
    # 下面是可選的,但建議要有,連上 Google Home 或蘋果的時候才會比較完整
    temperature_sensor: [溫度計裝置 ID]
    humidity_sensor: [溼度計裝置 ID]
    power_sensor: [Binary 裝置 ID,判斷冷氣是否開啟]

重開 HA 應該就可以看到冷氣遙控會動ㄌ yay

製作設定檔

但天不從人願,上面有設定檔的冷氣非常稀少
大部分冷氣應該都沒有設定檔
所以我們要自己錄一個,耗時約半小時。

錄製訊號

首先我們連到設定檔製作工具,並連上自己的 HA。

Name 的欄位假設你的遙控器的 ID 是 remote.my_remote 的話,就填 my_remote 就可以了。

注意到 Operation Modes 只能是 cool, heat, dry, ion, auto 的組合
Fan Modes 最好是 auto, low, mediumLow, mid, mediumHigh, high的組合

然後就可以開始學習了
學習完顯示綠色勾勾的時候,IR Code 會被紀錄在 /config/.storage/broadlink_remote_[MAC_ADDR]_codes 裡面

雷雷大約錄了 360 個訊號 (4個模式 6段風力 15 種溫度)

轉換成設定檔

戳一下網頁上的 Export JSON file,得到設定檔的雛形,並改名為 sample.json

然後我們把剛剛錄下來的訊號取出來

SOURCE_FILE = "broadlink_remote_a043b032b4f4_codes"
DEST_FILE = "irdb.json"

import json

with open(SOURCE_FILE) as f:
    data = json.load(f)

data = data["data"]["climate"]

with open(DEST_FILE, "w+", encoding="utf8") as f:
    json.dump(data, f, ensure_ascii=False)

得到 IRDB 後,我們塞進設定檔,得到最終成果 result.json

import json

with open("sample.json", encoding="utf8") as f:
    result = json.load(f)

with open("irdb.json", encoding="utf8") as f:
    ir_data = json.load(f)

for op_mode in result["operationModes"]:
    for fan_mode in result["fanModes"]:
        for temp in range(result["minTemperature"], result["maxTemperature"] + 1):
            temp = str(temp)
            result["commands"][op_mode][fan_mode][temp] = ir_data[f"{op_mode}_{fan_mode}_{temp}"]

result["commands"]["off"] = ir_data["off"]

with open("result.json", "w+") as f:
    ir_data = json.dump(result, f)

將設定檔改名為適當的[四位數字].json (所屬廠牌的數字區間,無人占用的數字)
照著剛剛提到的步驟,應該就可以讓 HA 順利遙控冷氣了。

塞進 HomeKit 和 Google Home 網路教學很多,在這裡就不提了
有機會應該會跟基礎篇一起出 :D

後記

寫文章好累喔

按讚

發佈留言

電子郵件地址不會被公開。必填項已用 * 標註