『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 4305|回复: 14

[插件集成] SmartIR 智能红外遥控集成(空调/电视/风扇)改进增强版(测试)

[复制链接]

19

主题

290

帖子

1508

积分

论坛技术达人

积分
1508
金钱
1203
HASS币
130
发表于 2022-6-26 09:19:44 | 显示全部楼层 |阅读模式
本帖最后由 riceball 于 2022-7-6 19:47 编辑

夏日炎炎, 没法子开始弄空调了, 最开始用的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参数来区分OpenMQTTGatewayIRremoteESP8266

下一步再增加一个参数用来启用是否使用外部温度传感器temperature_sensor来控制空调. 省得再用Generic Thermostat集成再包一层. Generic Thermostat 的最大问题是通过控制空调开关机来制冷,对压缩机寿命不是很友好.

OK, 根据坛友反馈,以及自己的需要新增功能如下:

  1. (可选) 使用外部温度传感器temperature_sensor来精确控制室内温度(温度传感器所在位置的)
    • 可自定义调整温度的精度(温度调整的增量): +1, +0.5, +0.1
  2. (可选) 使用switch_sensor来自动关闭/打开空调插座电源开关,并作为感知空调是否开启的传感器
  3. (可选) 允许在HA中重新设定空调的调整温度范围
    • 这样就不用担心在HA中误调整温度超出范围
  4. 遵循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



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




评分

参与人数 1金钱 +20 HASS币 +10 收起 理由
+ 20 + 10 感谢楼主分享!

查看全部评分

回复

使用道具 举报

19

主题

290

帖子

1508

积分

论坛技术达人

积分
1508
金钱
1203
HASS币
130
 楼主| 发表于 2022-6-26 14:19:33 | 显示全部楼层
OpenMQTTGateway 刚测试通过. `OpenMQTTGateway` 内部使用的是IRremote8266. 不过`IRremote8266`是IRMQTTServer例子里是直接用的字符串,payload格式不一样,我还得再添加一个参数用来区分`IRremote8266`还是`OpenMQTTGateway`.
回复

使用道具 举报

13

主题

228

帖子

1582

积分

金牌会员

Rank: 6Rank: 6

积分
1582
金钱
1354
HASS币
10
发表于 2022-6-26 23:29:00 | 显示全部楼层
感谢楼主分享。如果红外是pronto格式就很麻烦,手上七八个各类遥控器全是pronto格式,录码后用不了,无奈最后选择了博联。
回复

使用道具 举报

19

主题

290

帖子

1508

积分

论坛技术达人

积分
1508
金钱
1203
HASS币
130
 楼主| 发表于 2022-6-28 07:08:09 | 显示全部楼层
mrlaogui 发表于 2022-6-26 23:29
感谢楼主分享。如果红外是pronto格式就很麻烦,手上七八个各类遥控器全是pronto格式,录码后用不了,无奈最 ...

pronto 格式是可以识别并转换的,这里控制器是指万能红外遥控器.

而 OpenMQTTGateway(IRGateway)/IRremoteESP8266 都是开源的万能红外遥控器固件,当然OMG更加通用还有其他的功能,这里不提.
回复

使用道具 举报

13

主题

228

帖子

1582

积分

金牌会员

Rank: 6Rank: 6

积分
1582
金钱
1354
HASS币
10
发表于 2022-6-28 07:19:57 | 显示全部楼层
riceball 发表于 2022-6-28 07:08
pronto 格式是可以识别并转换的,这里控制器是指万能红外遥控器.

而 OpenMQTTGateway(IRGateway)/IRremot ...

pronto格式可以转换为raw吗?因为没有检索到相关的自动转换类,是转换过程是需要手动?
回复

使用道具 举报

19

主题

290

帖子

1508

积分

论坛技术达人

积分
1508
金钱
1203
HASS币
130
 楼主| 发表于 2022-6-28 07:40:20 | 显示全部楼层
mrlaogui 发表于 2022-6-28 07:19
pronto格式可以转换为raw吗?因为没有检索到相关的自动转换类,是转换过程是需要手动? ...

原版是只有博联才支持把pronto格式转为博联的格式,可以自己看看代码.

我的改进版本是让 OpenMQTTGateway/IRremoteESP8266/Broadlink 控制器彼此的raw格式都可以互转了, 表现为其他控制器也可以使用这三者中任意的IR配置文件.
回复

使用道具 举报

13

主题

228

帖子

1582

积分

金牌会员

Rank: 6Rank: 6

积分
1582
金钱
1354
HASS币
10
发表于 2022-6-28 12:31:22 | 显示全部楼层
riceball 发表于 2022-6-28 07:40
原版是只有博联才支持把pronto格式转为博联的格式,可以自己看看代码.

我的改进版本是让 OpenMQTTGateway ...

好的,回头试一下ESP8266发博联的代码
回复

使用道具 举报

39

主题

2048

帖子

7698

积分

元老级技术达人

积分
7698
金钱
5635
HASS币
110
发表于 2022-6-28 13:17:30 | 显示全部楼层
smartAC在添加过程中确实关机没响应(可能是bug),不过添加后是正常可用的
以前用irbaby也用的这个码库
回复

使用道具 举报

19

主题

290

帖子

1508

积分

论坛技术达人

积分
1508
金钱
1203
HASS币
130
 楼主| 发表于 2022-6-28 18:13:21 | 显示全部楼层
ghostist 发表于 2022-6-28 13:17
smartAC在添加过程中确实关机没响应(可能是bug),不过添加后是正常可用的
以前用irbaby也用的这个码库 ...

好吧,这个真不知道,不过同一厂家有好个型号都可以响应开机. 感觉还是IRremoteESP8266更利害些,可以把协议都分析出来. 现在先用raw对付吧,  没想到用外部控制器也挺麻烦的, 有空再弄协议.
回复

使用道具 举报

39

主题

2048

帖子

7698

积分

元老级技术达人

积分
7698
金钱
5635
HASS币
110
发表于 2022-6-29 08:56:31 | 显示全部楼层
riceball 发表于 2022-6-28 18:13
好吧,这个真不知道,不过同一厂家有好个型号都可以响应开机. 感觉还是IRremoteESP8266更利害些,可以把协议 ...

IRremoteESP8266支持协议解析?和IRMQTT相比如何?
以前看过IRMQTT项目,协议解析支持的很有限,自己也抓过码
组合码嘛 你知道的,情况就是遥控器发的码和码库的码不完全一样,可以实现同样的控制,这就没法解析了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-4-25 09:14 , Processed in 5.037410 second(s), 34 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表