Haier 气候设备
这是 ESPHome 组件的一种实现,用于控制基于 SmartAir2 和 hOn Haier 协议的 HVAC(由 hOn 或 SmartAir2 应用控制的空调)。
Haier 协议有两个版本:较旧的版本使用一个名为 SmartAir2 的应用,较新的版本使用一个名为 hOn 的应用。两种协议在传输层上兼容,但使用不同的命令来控制设备。
由 SmartAir2 应用控制的旧款 Haier 型号使用的是 KZW-W002 模块。此模块无法复用,你需要用 ESP 或 RPI Pico W 模块替换它。板载 USB 连接器不支持 USB 协议。它是一个 UART 端口,只是使用了 USB 连接器。要将 ESP 板连接到空调,可以剪断一根 USB A 型线缆并将电线连接到气候连接器。
Haier UART 引脚定义
Section titled “Haier UART 引脚定义”| 板载 | USB | 线色 | ESP8266 |
|---|---|---|---|
| 5V | VCC | 红色 | 5V |
| GND | GND | 黑色 | GND |
| TX | DATA+ | 绿色 | RX |
| RX | DATA- | 白色 | TX |

新款 Haier 型号使用的模块名为 ESP32-for-Haier。它是一个带有 ESP32-S0WD 芯片的 ESP32 单核板。在某些情况下,你可以复用此模块并用 ESPHome 刷写它,但有些新模块不支持这样做。它们看起来相同,但启用了加密。
警告! 新一代 ESP32-Haier 设备启用了加密,因此只能刷写使用私钥签名的固件。没有办法让它们与 ESPHome 一起工作,因此如果你尝试这样做,电路板将陷入启动循环,出现错误 rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)。恢复此板的唯一方法是刷写原始镜像。因此在开始实验之前请制作备份镜像。

此外,你还可以使用任何其他 ESP32、ESP8266 或 RPI pico W 板。在这种情况下,你需要剪断原始线缆或自行制作连接器(板载 JST SM04B-GHS-TB 连接器)。
此组件需要设置 UART 总线。
# 配置示例climate: - platform: haier id: haier_ac protocol: hon name: Haier AC uart_id: ac_port wifi_signal: true display: true visual: min_temperature: 16 °C max_temperature: 30 °C temperature_step: 1 °C supported_modes: - 'OFF' - HEAT_COOL - COOL - HEAT - DRY - FAN_ONLY supported_swing_modes: - 'OFF' - VERTICAL - HORIZONTAL - BOTH supported_presets: - AWAY - BOOST - SLEEP on_alarm_start: then: - logger.log: level: WARN format: "Alarm activated. Code: %d. Message: \"%s\"" args: ['code', 'message'] on_alarm_end: then: - logger.log: level: INFO format: "Alarm deactivated. Code: %d. Message: \"%s\"" args: ['code', 'message'] on_status_message: then: - logger.log: level: INFO format: "New status message received, size=%d, subcmd=%02X%02X" args: ['data_size', 'data[0]', 'data[1]']- uart_id (可选,ID):用于与空调通信的 UART 端口 ID。
- protocol (可选,字符串):定义与空调的通信协议。可选值:
hon或smartair2。默认值为smartair2。 - wifi_signal (可选,布尔值):如果为
true- 将 WiFi 信号强度发送到空调。 - answer_timeout (可选,Time):响应超时。默认值为
200ms。 - alternative_swing_control (可选,布尔值):(仅 smartAir2 支持)如果为
true- 使用替代值来控制摆动模式。仅在原始控制方法对你的空调不起作用时使用。 - status_message_header_size (可选,整数):(仅 hOn 支持)定义状态消息的头部大小。可用于处理某些协议变体。仅在你确定自己在做什么时使用。默认值:
0。 - control_packet_size (可选,整数):(仅 hOn 支持)定义控制数据包的大小。有助于处理一些使用较大数据包的新型号空调。默认值:
10。 - sensors_packet_size (可选,整数):(仅 hOn 支持)定义状态消息的传感器数据包大小。有助于处理一些具有较大传感器数据包型号的空调。默认值:
22,最小值:18。 - control_method (可选,列表):(仅 hOn 支持)定义控制方法(应被空调支持)。支持的值:
MONITOR_ONLY- 不进行控制,仅监控状态,SET_GROUP_PARAMETERS- 用一个命令设置所有空调参数(默认方法),SET_SINGLE_PARAMETER- 逐个设置每个参数(某些新型号天花板空调如 AD71S2SM3FA 支持此方法) - display (可选,布尔值):可用于关闭空调显示屏。
- beeeper (可选,布尔值):可用于禁用空调接收到命令时的蜂鸣声。仅 hOn 协议支持。
- supported_modes (可选,列表):可用于禁用某些空调模式。可选值:
'OFF'、HEAT_COOL、COOL、HEAT、DRY、FAN_ONLY。 - supported_swing_modes (可选,列表):可用于禁用你的空调不支持的某些摆动模式。可选值:
'OFF'、VERTICAL、HORIZONTAL、BOTH。 - supported_presets (可选,列表):可用于禁用某些预设。smartair2 的可选值:
AWAY、BOOST、COMFORT。hOn 的可选值:AWAY、BOOST、SLEEP。AWAY预设只能在HEAT模式下启用,默认禁用。 - on_alarm_start (可选,Automation):(仅 hOn 支持)空调激活新警报时执行的自动化。请参见
on_alarm_start触发器。 - on_alarm_end (可选,Automation):(仅 hOn 支持)空调关闭警报时执行的自动化。请参见
on_alarm_end触发器。 - on_status_message (可选,Automation):接收到来自空调的状态消息时执行的自动化。请参见
on_status_message触发器。 - Climate 中的所有其他选项。
on_alarm_start 触发器
Section titled “on_alarm_start 触发器”当空调激活新的警报时,将触发此自动化。警报的错误代码将存储在变量 code(uint8_t)中,错误消息存储在变量 message(const char *)中。这些变量可以在 lambdas 中使用。
climate: - protocol: hon on_alarm_start: then: - logger.log: level: WARN format: "Alarm activated. Code: %d. Message: \"%s\"" args: ['code', 'message']on_alarm_end 触发器
Section titled “on_alarm_end 触发器”当之前激活的警报被空调关闭时,将触发此自动化。警报的错误代码将存储在变量 code(uint8_t)中,错误消息存储在变量 message(const char *)中。这些变量可以在 lambdas 中使用。
climate: - protocol: hon on_alarm_end: then: - logger.log: level: INFO format: "Alarm deactivated. Code: %d. Message: \"%s\"" args: ['code', 'message']on_status_message 触发器
Section titled “on_status_message 触发器”当组件接收到来自空调的新状态数据包时,将触发此自动化。原始消息二进制(不含头部和校验和)将存储在变量 data(const char *)中,消息长度存储在变量 data_size(uint8_t)中。这些变量可以在 lambdas 中使用。
此触发器可用于支持某些型号独有的、其他型号不支持的功能。
climate: - protocol: hon on_status_message: then: - logger.log: level: INFO format: "New status message received, size=%d, subcmd=%02X%02X" args: ['data_size', 'data[0]', 'data[1]']climate.haier.power_on 动作
Section titled “climate.haier.power_on 动作”此动作打开空调电源。
on_...: then: climate.haier.power_on: device_idclimate.haier.power_off 动作
Section titled “climate.haier.power_off 动作”此动作关闭空调电源。
on_...: then: climate.haier.power_off: device_idclimate.haier.power_toggle 动作
Section titled “climate.haier.power_toggle 动作”此动作切换空调电源。
on_...: then: climate.haier.power_toggle: device_idclimate.haier.display_on 动作
Section titled “climate.haier.display_on 动作”此动作打开空调显示屏。
on_...: then: climate.haier.display_on: device_idclimate.haier.display_off 动作
Section titled “climate.haier.display_off 动作”此动作关闭空调显示屏。
on_...: then: climate.haier.display_off: device_idclimate.haier.health_on 动作
Section titled “climate.haier.health_on 动作”打开健康模式(紫外线杀菌)。
on_...: then: climate.haier.health_on: device_idclimate.haier.health_off 动作
Section titled “climate.haier.health_off 动作”关闭健康模式。
on_...: then: climate.haier.health_off: device_idclimate.haier.beeper_on 动作
Section titled “climate.haier.beeper_on 动作”(仅 hOn 支持)此动作在每次向空调发送命令时启用蜂鸣反馈。
on_...: then: climate.haier.beeper_on: device_idclimate.haier.beeper_off 动作
Section titled “climate.haier.beeper_off 动作”(仅 hOn 支持)此动作在每次向空调发送命令时禁用蜂鸣反馈(请注意,这对于 IR 遥控命令不起作用)。
on_...: then: climate.haier.beeper_off: device_idclimate.haier.set_vertical_airflow 动作
Section titled “climate.haier.set_vertical_airflow 动作”(仅 hOn 支持)在禁用垂直摆动时设置垂直气流方向。
on_...: then: - climate.haier.set_vertical_airflow: id: device_id vertical_airflow: Up配置变量:
- id (必填,ID):Haier 气候组件的 ID。
- vertical_airflow (必填,字符串,可模板化):垂直气流方向。可选值:
Health_Up、Max_Up、Up、Center、Down、Health_Down。
climate.haier.set_horizontal_airflow 动作
Section titled “climate.haier.set_horizontal_airflow 动作”(仅 hOn 支持)在禁用水平摆动时设置水平气流方向。
on_...: then: - climate.haier.set_horizontal_airflow: id: device_id horizontal_airflow: Right配置变量:
- id (必填,ID):Haier 气候组件的 ID。
- horizontal_airflow (必填,字符串,可模板化):水平气流方向。可选值:
Max_Left、Left、Center、Right、Max_Right。
climate.haier.start_self_cleaning 动作
Section titled “climate.haier.start_self_cleaning 动作”(仅 hOn 支持)启动自清洁。
on_...: then: - climate.haier.start_self_cleaning: device_idclimate.haier.start_steri_cleaning 动作
Section titled “climate.haier.start_steri_cleaning 动作”(仅 hOn 支持)启动 56°C 灭菌清洁。
on_...: then: - climate.haier.start_steri_cleaning: device_id