气候组件
ESPHome 支持气候设备。气候设备可以代表不同类型的硬件,但其关键特征是气候设备具有可设置的目标温度,
并且可以设置为 HEAT、COOL、HEAT_COOL 或 OFF 等不同模式。

NOTE
并非所有气候组件都支持所有可能的功能。请查看相应的文档页面以了解所支持的功能。
基础气候配置
Section titled “基础气候配置”ESPHome 中的所有气候平台都继承自气候配置模式。在 ESPHome 中,所有温度值均默认为 °C。部分平台允许以 °F 进行转换或设置,会单独说明。
climate: - platform: ... visual: min_temperature: 18 max_temperature: 25 temperature_step: 0.1 min_humidity: 30% max_humidity: 99% - platform: ... visual: min_temperature: 18 max_temperature: 25 temperature_step: target_temperature: 0.5 current_temperature: 0.1配置变量:
- id (可选,字符串):手动指定用于代码生成的 ID。id 和 name 至少指定一个。
- name (可选,字符串):气候设备的名称。id 和 name 至少指定一个。
NOTE
如果你的设备设置了 friendly_name,并且
你希望气候设备使用该名称,可以设置 name: None。
-
icon (可选,图标):手动设置气候设备在前端中使用的图标。
-
visual (可选):气候设备的显示设置——这些不会影响运行,仅用于控制气候设备在前端的显示方式。
-
min_temperature (可选,浮点数):气候设备可以达到的最低温度。用于设置前端仪表的范围。
-
max_temperature (可选,浮点数):气候设备可以达到的最高温度。用于设置前端仪表的范围。
-
temperature_step (可选,浮点数):目标温度的控制精度。可以是一个数字,也可以按如下方式拆分:
- target_temperature (必填,浮点数):目标温度的精度
- current_temperature (必填,浮点数):当前温度的精度
-
min_humidity (可选,百分比):气候设备可以达到的最低湿度。用于设置前端仪表的范围。
-
max_humidity (可选,百分比):气候设备可以达到的最高湿度。用于设置前端仪表的范围。
-
高级选项:
-
internal (可选,布尔值):将该组件标记为内部组件。内部组件不会 暴露给前端(如 Home Assistant)。仅指定
id而不指定name会隐式地将此项设为 true。 -
disabled_by_default (可选,布尔值):如果为 true,则除非用户手动启用此实体(通过 Home Assistant UI), 否则不应将该实体添加到任何客户端的前端(通常是 Home Assistant)中。 默认为
false。 -
entity_category (可选,字符串):实体的类别。 可选项列表请参见 https://developers.home-assistant.io/docs/core/entity/#generic-properties 设置为
""以移除默认的实体类别。 -
如果启用了 Webserver 且选择了版本 3,则包含 Webserver 组件的所有其他选项。请参见 Webserver 版本 3。
MQTT 选项:
-
action_state_topic (可选,字符串):用于发布气候设备操作变化的主题。
-
current_temperature_state_topic (可选,字符串):用于发布当前温度变化的主题。
-
current_humidity_state_topic (可选,字符串):用于发布当前湿度变化的主题。
-
fan_mode_state_topic (可选,字符串):用于发布风扇模式变化的主题。
-
fan_mode_command_topic (可选,字符串):用于接收风扇模式命令的主题。
-
mode_state_topic (可选,字符串):用于发布气候设备模式变化的主题。
-
mode_command_topic (可选,字符串):用于接收气候设备模式命令的主题。
-
preset_state_topic (可选,字符串):用于发布预设变化的主题。
-
preset_command_topic (可选,字符串):用于接收预设命令的主题。
-
swing_mode_state_topic (可选,字符串):用于发布摆动模式变化的主题。
-
swing_mode_command_topic (可选,字符串):用于接收摆动模式命令的主题。
-
target_temperature_state_topic (可选,字符串):用于发布目标温度变化的主题。
-
target_temperature_command_topic (可选,字符串):用于接收目标温度命令的主题。
-
target_temperature_high_state_topic (可选,字符串):用于发布较高目标温度变化的主题。
-
target_temperature_high_command_topic (可选,字符串):用于接收较高目标温度命令的主题。
-
target_temperature_low_state_topic (可选,字符串):用于发布较低目标温度变化的主题。
-
target_temperature_low_command_topic (可选,字符串):用于接收较低目标温度命令的主题。
-
target_humidity_state_topic (可选,字符串):用于发布目标湿度变化的主题。
-
target_humidity_command_topic (可选,字符串):用于接收目标湿度命令的主题。
-
MQTT 组件 中的所有其他选项。
climate.control 动作
Section titled “climate.control 动作”这是一个用于设置气候设备参数的动作。
- climate.control: id: my_climate mode: HEAT_COOL target_temperature: 25°C配置变量:
-
id (必填,ID):要控制的气候设备的 ID。
-
mode (可选,字符串,可模板化):将气候设备置于特定模式。可选值之一:
OFF- 设备手动设置为关闭,设备处于非活动状态。AUTO- 设备应动态调节温度。例如基于时间表或学习行为。HEAT- 设备设置为加热以达到目标温度。COOL- 设备设置为冷却以达到目标温度。HEAT_COOL- 设备应通过加热/冷却来维持目标温度。FAN_ONLY- 设备仅启用风扇,不进行加热或冷却。DRY- 设备设置为除湿/湿度模式。
-
target_temperature (可选,浮点数,可模板化):设置气候设备的目标温度。
-
target_temperature_low (可选,浮点数,可模板化):设置具有两点目标温度的气候设备的较低目标温度。
-
target_temperature_high (可选,浮点数,可模板化):设置具有两点目标温度的气候设备的较高目标温度。
-
target_humidity (可选,浮点数,可模板化):设置气候设备的目标湿度。
-
preset (可选,字符串,可模板化):设置气候设备的预设。可选值之一:
ECO、AWAY、BOOST、COMFORT、HOME、SLEEP、ACTIVITY。 -
custom_preset (可选,字符串,可模板化):设置气候设备支持的自定义预设之一。
-
fan_mode (可选,字符串,可模板化):设置气候设备的风扇模式。可选值之一:
ON、OFF、AUTO、LOW、MEDIUM、HIGH、MIDDLE、FOCUS、DIFFUSE、QUIET。 -
custom_fan_mode (可选,字符串,可模板化):设置气候设备支持的自定义风扇模式之一。
-
swing_mode (可选,字符串,可模板化):设置气候设备的摆动模式。可选值之一:
OFF、BOTH、VERTICAL、HORIZONTAL。
lambda 调用
Section titled “lambda 调用”在 lambdas 中,可以对所有气候设备进行方法调用,以实现一些高级操作。
- 属性:所有气候设备都有只读属性来获取设备的当前状态。
// 当前模式,类型:ClimateMode (枚举) id(my_climate).mode // 当前温度,类型:float (度数) id(my_climate).current_temperature // 当前湿度,类型:float (百分比) id(my_climate).current_humidity // 目标温度,类型:float (度数) id(my_climate).target_temperature // 较低目标温度,类型:float (度数) id(my_climate).target_temperature_low // 较高目标温度,类型:float (度数) id(my_climate).target_temperature_high // 目标湿度,类型:float (百分比) id(my_climate).target_humidity // 风扇模式,类型:FanMode (枚举) id(my_climate).fan_mode // 摆动模式,类型:SwingMode (枚举) id(my_climate).swing_mode // 当前动作(当前处于空闲、冷却、加热等状态),ClimateAction (枚举) id(my_climate).action // 预设,类型:Preset (枚举) id(my_climate).preset- 自定义模式访问方法:
// 检查自定义风扇模式是否已激活,类型:bool id(my_climate).has_custom_fan_mode() // 获取自定义风扇模式(只读),类型:StringRef id(my_climate).get_custom_fan_mode() // 检查自定义预设是否已激活,类型:bool id(my_climate).has_custom_preset() // 获取自定义预设(只读),类型:StringRef id(my_climate).get_custom_preset()NOTE
get_custom_fan_mode() 和 get_custom_preset() 返回 StringRef。当未设置自定义模式时,它们返回空的 StringRef。使用 has_custom_fan_mode() 或 has_custom_preset() 检查自定义模式是否处于激活状态,或者检查返回的 StringRef 是否为空。
// 使用 has_custom_fan_mode() 检查if (id(my_climate).has_custom_fan_mode()) { auto mode = id(my_climate).get_custom_fan_mode(); ESP_LOGD("tag", "Mode: %.*s", (int) mode.size(), mode.c_str());}
// 或检查是否为空auto mode = id(my_climate).get_custom_fan_mode();if (!mode.empty()) { // 使用 mode}.make_call: 控制气候设备
auto call = id(my_climate).make_call(); call.set_mode("OFF"); // 等等,参见 API 参考 call.perform();climate.on_state 触发器
Section titled “climate.on_state 触发器”此触发器在气候设备的状态每次更新时激活
(例如,当当前温度测量值或用户设置的模式发生变化时)。
Climate 对象本身可以作为引用 x 供自动化使用。
climate: - platform: midea # 或任何其他平台 # ... on_state: - logger.log: "State updated!" - lambda: |- if (x.mode != CLIMATE_MODE_OFF) id(some_binary_sensor).publish_state(true);climate.on_control 触发器
Section titled “climate.on_control 触发器”此触发器在气候设备的控制输入通过 ClimateCall 更新时激活
(包括来自 Home Assistant 的变更)。也就是说,例如对于模式的变更会激活此触发器,但不会因为温度测量而激活。如果两者都已定义,它将在 on_state 触发器之前被调用。ClimateCall 控制对象可以作为引用 x 供自动化使用,并且可以修改它。
climate: - platform: ... # ... on_control: - logger.log: "Control input received; configuration updated!" - lambda: |- if (x.get_mode() != CLIMATE_MODE_OFF) { id(turnoff_script).stop(); x.set_target_temperature(25.0f); }