跳转到内容

气候组件

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

Home Assistant 中的气候设备界面。

NOTE

并非所有气候组件都支持所有可能的功能。请查看相应的文档页面以了解所支持的功能。

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:
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。

在 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 对象本身可以作为引用 x 供自动化使用。

climate:
- platform: midea # 或任何其他平台
# ...
on_state:
- logger.log: "State updated!"
- lambda: |-
if (x.mode != CLIMATE_MODE_OFF)
id(some_binary_sensor).publish_state(true);

此触发器在气候设备的控制输入通过 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);
}