Skip to content

Instantly share code, notes, and snippets.

@lekoOwO
Last active July 17, 2024 16:46
Show Gist options
  • Save lekoOwO/f99d25f1c2f3199f826768b10a0275b6 to your computer and use it in GitHub Desktop.
Save lekoOwO/f99d25f1c2f3199f826768b10a0275b6 to your computer and use it in GitHub Desktop.
一個用來幫助學習 IR Code 的小腳本

SmartIR Broadlink Recorder

安裝

pip3 install broadlink

使用方法

修改 learn.pyCONSTANTS 區對應的參數,對著你的 Broadlink 萬能遙控按遙控器

就可以得到一個 SmartIR 格式的 JSON 檔 :)

import broadlink
import base64
import json
# CONSTANTS
IP = ""
OP_MODES = []
FAN_MODES = []
SWING_MODES = []
TEMPERATURES = range(16, 31)
RESULT_FILE = "9999.json"
TEMP_TXT = "temp.txt"
# INITIALIZATION
result = {
"manufacturer": "Daikin",
"supportedModels": ["A1-2345", "B2-3456", "C3-4567"],
"commandsEncoding": "Base64",
"supportedController": ["RM4 Mini", "RM4 Pro"],
"minTemperature": TEMPERATURES[0],
"maxTemperature": TEMPERATURES[-1],
"precision": 1.0,
"operationModes": OP_MODES,
"fanModes": FAN_MODES,
"swingModes": SWING_MODES,
"commands": {}
}
for op in OP_MODES:
result["commands"][op] = {}
for fan in FAN_MODES:
result["commands"][op][fan] = {}
for swing_mode in SWING_MODES:
result["commands"][op][fan][swing_mode] = {}
# MAIN
device = broadlink.hello(IP)
device.auth()
with open(TEMP_TXT, "w+") as f1:
for op in OP_MODES:
for fan in FAN_MODES:
for swing_mode in SWING_MODES:
for temp in TEMPERATURES:
print(f"Learning {op} {fan} {swing_mode} {temp}...")
device.enter_learning()
packet: bytes = device.check_data()
b64_packet = base64.b64encode(packet).decode("utf-8")
f1.write(f"{op}.{fan}.{swing_mode}.{temp}={b64_packet}\n")
result["commands"][op][fan][swing_mode][str(temp)] = b64_packet
print(f"Learned {op} {fan} {swing_mode} {temp}.")
print("Learning Off...")
device.enter_learning()
packet: bytes = device.check_data()
b64_packet = base64.b64encode(packet).decode("utf-8")
f1.write(f"Off={b64_packet}\n")
result["commands"]["off"] = b64_packet
print("Learned Off.")
with open(RESULT_FILE, "w+") as f2:
json.dump(result, f2, indent=4)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment