夏日炎炎, 没法子开始弄空调了, 最开始用的SmartAC(IRext的码库), 但是家里的两台空调都不支持(只能响应开机,无法响应关机), 只好用 SmartIR, 它的码库里正好有对应的型号,但是没想到只支持博联的万能红外遥控器,于是开始折腾.
SmartIR 是一款支持博联/小米/ESPHome/MQTT万能红外遥控器的HA集成,具体使用方法请自行在论坛上搜索.
它的优点是可以通过自定义的IR配置文件就可以录制IR码,定义自己的设备. 同时它的社区也提供了许多玩家贡献分享的设备IR配置文件.
但是SmartIR 的IR配置文件坑爹的是仅限录制的IR控制器使用,比如,博联的IR配置文件就只能博联的控制器用, 其它万能红外遥控控制器无法使用该配置.
因此,我重构了控制器的代码, 让IR配置文件能够尽可能的通用.以及开发新控制器尽可能的简单.
现在已经实现博联, ESPHome 以及 MQTT的控制器之间的IR配置文件可以共用了.
小米控制器(不知道其格式)以及 LOOKin 的控制器(似乎是pronto格式,但没设备测试)暂不支持.
刚写完成,需要测试,等测试完毕,我就给原作者提PR.
另: 我自己将只测试OpenMQTTGateway/IRremoteESP8266.
OpenMQTTGateway 刚测试通过. OpenMQTTGateway
内部使用的是IRremote8266. 不过IRremoteESP8266
是IRMQTTServer例子里是直接用的字符串,payload格式不一样,我还得再添加一个参数用来区分IRremote8266
还是OpenMQTTGateway
.
另外已经增加controller_type
参数来区分OpenMQTTGateway
和IRremoteESP8266
下一步再增加一个参数用来启用是否使用外部温度传感器temperature_sensor
来控制空调. 省得再用Generic Thermostat
集成再包一层. Generic Thermostat
的最大问题是通过控制空调开关机来制冷,对压缩机寿命不是很友好.
OK, 根据坛友反馈,以及自己的需要新增功能如下:
- (可选) 使用外部温度传感器
temperature_sensor
来精确控制室内温度(温度传感器所在位置的)
- 可自定义调整温度的精度(温度调整的增量):
+1
, +0.5
, +0.1
- (可选) 使用
switch_sensor
来自动关闭/打开空调插座电源开关,并作为感知空调是否开启的传感器
- (可选) 允许在HA中重新设定空调的调整温度范围
- 遵循HA
ClimateEntity
基类约定改写代码(完成一部分)
目前我自己卧室空调温度精度从-1°C提升到 0.2-0.4
°C之间,温度已经接近直线(一上一下的方波). 好玩的是还可以据此大致判断晚上起夜的时间(温度会有一个升高的方波). 如果还要更高的精度,那就必须先对空调的制冷能力进行智能预估,然后再进行处理了. 目前对我来说,这个精度够了.
空调新增参数:
switch_sensor
: (可选) 指定空调插座的实体ID, 设定后, 开插座就是开空调, 关闭插座就是关闭空调
- 如果不想作为开关控制,可以去设定
power_sensor
实体ID参数,power_sensor
参数只是感知空调是否打开的传感.
delay_on
: (可选) 打开空调插座后,延迟delay_on
秒后发送空调打开信号. 默认: 2(s)
delay_off
: (可选) 发送空调关闭信号后, 延迟delay_off
秒后关闭空调插座. 默认: 60(s)
use_temperature_sensor
: (可选) 是否启用外部温度传感器作为空调温度控制. 默认为False
.
- 如果启用那么温度传感器
temperature_sensor
实体ID也必须设定好.
precision
: (可选) 目标温度的调整精度设置: 1
, 0.1
, 05
, 默认为空调的温度调整精度
- 如果启用
use_temperature_sensor
后,才可以调整该参数.否则没作用.
min_temp
: (可选) 空调在HA上可配置的最小温度, 默认为空调本身的最小温度
max_temp
: (可选) 空调在HA上可配置的最大温度, 默认为空调本身的最大温度
min_run_time
: (可选) 使得温度变化的最小运行时间,默认: 1800(秒=30分钟)
default_mode
: (可选) 空调开机后的默认模式. 默认: auto
power_meter_sensor
: (可选) 空调功率传感器实体ID
min_power_meter
: (可选) 空调开机后的最小功率(W)
max_power_meter
: (可选) 空调开机后的最大功率(W)
HA configuration.yaml
例子:
climate:
- platform: smartir
name: 主卧空调
unique_id: bed_ac
device_code: 1581
use_temperature_sensor: true
controller: MQTT # <-- 自定义控制器
controller_type: OpenMQTTGateway # IRremoteESP8266 or OpenMQTTGateway. 默认是 OpenMQTTGateway
controller_data: home/OMG_IR_AIWIN/commands/MQTTtoIR
temperature_sensor: sensor.bed_temperature_temperature
humidity_sensor: sensor.bed_temperature_humidity
switch_sensor: switch.bed_switchac
power_meter_sensor: sensor.bed_switchac_power
max_power_meter: 800
min_power_meter: 30
delay_off: 60
min_run_time: 300
default_mode: cool
precision: 0.5
目前仅实现了制冷的温控,还十分不完善,所以此功能(外部控温)不准备提交PR,自己使用.
如果需要清自行取用(已经合并至主分支): https://github.com/snowyu/SmartIR