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

 找回密码
 立即注册
查看: 2167|回复: 18

[技术探讨] 涂鸦wifi红外遥控器不刷固件不学习红外编码老空调接入HA

[复制链接]

4

主题

26

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
金钱
366
HASS币
0
发表于 2024-6-28 22:45:51 | 显示全部楼层 |阅读模式
本帖最后由 jesusya 于 2024-7-12 00:55 编辑

kt11.jpg
使用场景:

家中老的Haier中央空调,温控红外面板在墙上,开启空调制冷,空调面板在门口和人体所处位置还是有差距,温控总滞后,冷风不停吹,睡觉就更怕冷风吹过了头


找了歪果仁的一个项目:https://github.com/DavidIlie/tuya-smart-ir-ac, 插件依赖的 tuya api 接口:tuya-connector-python :https://github.com/tuya/tuya-connector-python

基本上搭建好了一个框架,调用tuya API 模式控制空调,他代码中只有单个命令,比如 模式 、温度、风速转换,我空调在制冷、制热才可以单命令发送,在自动、送风、抽湿都是组合命令发送。所以改了他的写bug,重点把空调按下Auto模式劫持了,用制冷和送风2个模式实现自动模式。我不会python,我描述控制逻辑,查特GPT帮助下一起完成了自己的控制逻辑和设备支持。

kt1-2.jpg
HA和Homekit的效果如下:附上我对作者几处bug修改的地方,我自行改的“自动化”模式的代码,太复制了,就不上传献丑了。我的插件放在:/homeassistant/custom_components/class_tuya_ir_ac 包含作者代码后,替换我的代码。configuration.yaml  加入:
climate:
  - platform: class_tuya_ir_ac
    name: "主卧Haier空调"
    sensor: sensor.temperature_humidity_sensor_主卧_temperature #主卧传感器
    access_id: "xxx"
    access_secret: "xxx"
    remote_id: "设备红外设备"
    ac_id: "设备下定义的空调遥控器,一个设备可以定义多少家电的遥控"

http://iot.tuya.com 可以云开发里可以找到这4个代码

附件了,PC 测试空调和API接口的代码:python3 test-tuya.py 在pc 上先测试API指令和你空调的控制,pc or mac 先安装[backcolor=rgba(110, 118, 129, 0.4)]pip3 install tuya-connector-python
我的是:
        {
            "name": "打开空调-制冷-26度-中速风",
            "command": {"power": 1, "mode": 0, "temp": 26, "wind": 2}
        },
        {
            "name": "关闭空调",
            "command": {"power": 0}
        },
        {
            "name": "打开空调-制冷-26度-自动风",
            "command": {"power": 1, "mode": 0, "temp": 26, "wind": 0}
        },
        {
            "name": "设置仅风模式",
            "command": {"power": 1, "mode": 3, "temp": 25, "wind": 0}
        }
Power:1 设备开 0 关
Mode:0 - 4
VALID_MODES = {
    "0": HVACMode.COOL, #制冷
    "1": HVACMode.HEAT, #制热
    "2": HVACMode.AUTO, #自动
    "3": HVACMode.FAN_ONLY,  #仅送风
    "4": HVACMode.DRY, #除湿
}
Temp:整数温度
Wind:风速, 0 自动风,1 低速 2中速 3高速

我海尔空调,自动、仅送风 除湿 三个模式,temp 都是25,风 0


大家看懂这个编码格式,用python3 test-tuya.py,在PC 测试好你空调的控制,在HA 改插件代码不难了,我已经做好了一个可以自动模式 围绕目标温度制冷+送风的 版本。稍后发源码出来。


Kt1-3.jpg
查特。GPT写的介绍
这个 Home Assistant 插件用于通过 Tuya API 控制空调设备。它通过定义和管理 ClimateEntity 实体来实现与 Tuya 平台的交互,支持设置温度、风速和操作模式等功能。
主要功能模块1. 配置模式和平台设置插件使用 voluptuous 进行配置验证,确保用户提供的配置信息符合预期格式。配置模式包括:
  • access_id: Tuya API 的访问 ID。
  • access_secret: Tuya API 的访问密钥。
  • remote_id: 遥控器 ID。
  • ac_id: 空调 ID。
  • name: 设备名称。
  • sensor: 关联的传感器名称。
2. 平台设置函数setup_platform 函数是插件的入口点,负责从配置中读取必要信息,并使用这些信息初始化 TuyaClassThermostat 实体。这个函数在 Home Assistant 启动时调用,将配置传递给实体并将其添加到 Home Assistant 的实体列表中。

TuyaClassThermostat 类TuyaClassThermostat 类继承自 ClimateEntity,是插件的核心组件。它负责与 Tuya API 进行交互,并提供各种属性和方法来管理空调设备的状态和行为。
主要属性和方法初始化方法在初始化时,使用配置中的信息来设置 Tuya API、传感器名称、设备名称等属性。初始化后,通过 _api 对象与 Tuya API 进行交互。

属性方法这些方法用于获取和设置空调的各种属性,如名称、唯一 ID、温度单位、支持的功能、当前温度、目标温度、HVAC 模式和风速模式。
  • 名称属性:返回设备的名称,用于在 Home Assistant UI 中显示。
  • 唯一 ID 属性:返回设备的唯一标识符,确保每个设备在系统中都是唯一的。
  • 温度单位属性:定义设备使用的温度单位(摄氏度)。
  • 支持的功能属性:定义设备支持的功能,如目标温度和风速模式。
  • 最小和最大温度属性:定义设备支持的温度范围。
  • 当前温度属性:通过传感器或 API 获取当前温度。
  • 目标温度属性:通过 API 获取或设置目标温度。
  • HVAC 模式属性:获取和设置当前的 HVAC 模式,包括制冷、制热、自动、仅风扇和干燥模式。
  • 风速模式属性:获取和设置当前的风速模式,包括低速、中速、高速和自动风。
更新方法async_update 方法定期调用 Tuya API 获取设备的最新状态,并更新 Home Assistant 中的实体状态。
python复制代码, 我测试 HA 每一分钟调用一次async_update我把我的自动化空调温控代码放在这里调用,改到了空调本身的自动模式。

async def async_update(self):    await self._api.async_update()    self.async_write_ha_state()

设置温度方法async_set_temperature 方法通过 API 设置目标温度。如果当前模式是自动、仅风扇或干燥模式,则温度固定为 25℃,否则根据用户输入设置温度。

设置风速模式方法async_set_fan_mode 方法通过 API 设置风速模式。如果当前模式是自动、仅风扇或干燥模式,风速固定为自动风,否则根据用户选择设置风速。


设置 HVAC 模式方法async_set_hvac_mode 方法通过 API 设置 HVAC 模式。如果模式为关闭,则调用 async_turn_off 方法关闭空调。否则,根据选择的模式设置相应的参数。



与 Home Assistant UI 交互插件与 Home Assistant UI 的交互通过实体的属性和方法实现。当用户在 UI 中更改温度、风速或模式时,Home Assistant 会调用相应的实体方法来更新状态。实体通过调用 Tuya API 与实际设备通信,并在状态更新后调用 async_write_ha_state 方法将最新状态写入 Home Assistant。
后台状态更新机制插件使用 async_update 方法定期从 Tuya API 获取设备的最新状态。这个方法通过异步方式调用 API,并将获取到的状态更新到 Home Assistant 中。这样可以确保 Home Assistant 中显示的状态始终与实际设备的状态同步。
Tuya API 调用机制插件通过 TuyaAPI 类与 Tuya 平台进行通信。TuyaAPI 负责发送控制命令和接收设备状态。每次用户在 Home Assistant 中更改空调设置时,插件会调用相应的 Tuya API 来更新设备状态。
关机函数async_set_hvac_mode 方法中的关机部分实现了空调的关机功能。当用户选择关闭 HVAC 模式时,插件会调用 async_turn_off 方法通过 Tuya API 关闭空调。
变量使用说明
  • self._api: TuyaAPI 实例,用于与 Tuya 平台进行通信。
  • self._sensor_name: 传感器名称,用于获取当前温度。
  • self._name: 设备名称。
  • self._hvac_mode: 当前 HVAC 模式。
  • self._fan_mode: 当前风速模式。
  • self._target_temperature: 目标温度。
总结这个插件通过定义 TuyaClassThermostat 实体并与 Tuya API 进行交互,实现了 Home Assistant 对空调设备的控制。用户可以通过 Home Assistant UI 设置温度、风速和模式,插件会将这些设置发送给 Tuya 平台并更新设备状态。同时,插件会定期从 Tuya 平台获取最新状态,确保 Home Assistant 中显示的状态与实际设备状态同步。

在 Home Assistant 的 UI 中,用户可以通过界面来控制空调的温度、风速和模式。这些交互会触发插件中的相应函数,具体如下:
1. 调整温度当用户在 UI 中调整温度时,Home Assistant 会调用 async_set_temperature 方法。


2. 调整风速当用户在 UI 中调整风速时,Home Assistant 会调用 async_set_fan_mode 方法。


3. 调整模式当用户在 UI 中调整空调模式时,Home Assistant 会调用 async_set_hvac_mode 方法。


4. 获取状态更新当 Home Assistant 需要更新 UI 中的状态显示时,会调用 async_update 方法。这通常在界面刷新或定期状态更新时触发。


交互总结
  • 调整温度: 调用 async_set_temperature
  • 调整风速: 调用 async_set_fan_mode
  • 调整模式: 调用 async_set_hvac_mode
  • 状态更新: 调用 async_update
这些方法负责处理用户通过 Home Assistant UI 发起的操作,并通过调用 Tuya API 来实际控制空调设备。通过 async_write_ha_state 方法,插件会确保 Home Assistant 中显示的状态与设备的实际状态保持同步。

my code.zip

5.06 KB, 下载次数: 21

tuya-smart-ir-ac-master.zip

5.15 KB, 下载次数: 16

test_tuya-py.py.zip

1.59 KB, 下载次数: 12

评分

参与人数 2金钱 +13 收起 理由
adddda + 1 感谢楼主分享!
隔壁的王叔叔 + 12 蛮牛x的。

查看全部评分

回复

使用道具 举报

0

主题

3

帖子

42

积分

新手上路

Rank: 1

积分
42
金钱
39
HASS币
0
发表于 2024-6-28 23:17:42 | 显示全部楼层
感谢分享
回复

使用道具 举报

8

主题

69

帖子

487

积分

中级会员

Rank: 3Rank: 3

积分
487
金钱
418
HASS币
0
发表于 2024-6-29 07:24:03 | 显示全部楼层
谢谢分享
回复

使用道具 举报

8

主题

69

帖子

487

积分

中级会员

Rank: 3Rank: 3

积分
487
金钱
418
HASS币
0
发表于 2024-6-29 14:51:16 | 显示全部楼层
执行测试失败,出现以下错误,请问怎么解决。
# python3 test_tuya-py.py
Traceback (most recent call last):
  File "/usr/share/hassio/homeassistant/custom_components/tuya_smart_ir_ac/test_tuya-py.py", line 2, in <module>
    from tuya_connector import TuyaOpenAPI
ModuleNotFoundError: No module named 'tuya_connector'
回复

使用道具 举报

4

主题

26

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
金钱
366
HASS币
0
 楼主| 发表于 2024-6-29 15:24:12 | 显示全部楼层
PC里要安装 pip3 install tuya-connector-python,确保4个代码对的
回复

使用道具 举报

4

主题

26

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
金钱
366
HASS币
0
 楼主| 发表于 2024-6-29 15:25:57 | 显示全部楼层
mitch 发表于 2024-6-29 14:51
执行测试失败,出现以下错误,请问怎么解决。
# python3 test_tuya-py.py
Traceback (most recent call las ...

pip3 install tuya-connector-python 安装了吗
回复

使用道具 举报

4

主题

26

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
金钱
366
HASS币
0
 楼主| 发表于 2024-6-29 15:29:37 | 显示全部楼层
mitch 发表于 2024-6-29 14:51
执行测试失败,出现以下错误,请问怎么解决。
# python3 test_tuya-py.py
Traceback (most recent call las ...

test_tuya-py.py 是给你在PC 测你空调控制代码的,另外2个zip 才是HA里插件,建议在PC or Mac 测试知道自己的空调控制吗,在去HA 插件里改,开关机,温度风扇,模式改变等调用编码
回复

使用道具 举报

8

主题

69

帖子

487

积分

中级会员

Rank: 3Rank: 3

积分
487
金钱
418
HASS币
0
发表于 2024-6-29 15:37:26 | 显示全部楼层
jesusya 发表于 2024-6-29 15:24
PC里要安装 pip3 install tuya-connector-python,确保4个代码对的

请问在云开发哪里可以找到这四个代码,我只找到前面两个,后面的remote_id和ac_id没找到
回复

使用道具 举报

4

主题

26

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
金钱
366
HASS币
0
 楼主| 发表于 2024-6-29 18:24:38 | 显示全部楼层
mitch 发表于 2024-6-29 15:37
请问在云开发哪里可以找到这四个代码,我只找到前面两个,后面的remote_id和ac_id没找到 ...

进入项目呀,你要建立一个项目,网上有教程
回复

使用道具 举报

8

主题

69

帖子

487

积分

中级会员

Rank: 3Rank: 3

积分
487
金钱
418
HASS币
0
发表于 2024-6-29 19:17:20 | 显示全部楼层
jesusya 发表于 2024-6-29 18:24
进入项目呀,你要建立一个项目,网上有教程

明白,谢谢
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-22 00:40 , Processed in 0.289741 second(s), 35 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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