前言

好想用 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 設定檔新增

1
2
3
4
5
6
7
8
9
10
11
12
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, fanOnly, auto 的組合
Fan Modes 最好是 auto, low, medium, high 的組合,不過自行添加也沒關係

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

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

轉換成設定檔

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

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

1
2
3
4
5
6
7
8
9
10
11
12
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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

後記

寫文章好累喔