跳转到内容

模板热水器

template 热水器平台允许您仅用几个动作和 lambda 创建简单的热水器。定义后,它将自动在 Home Assistant 中显示为热水器实体,并可通过前端控制。

# 示例配置
water_heater:
- platform: template
name: "模板锅炉"
id: my_boiler
# 读取当前温度的 lambda(例如从传感器)
current_temperature: !lambda 'return id(my_sensor).state;'
# 读取目标温度的 lambda(可选)
target_temperature: !lambda 'return id(my_target_temp_sensor).state;'
# 读取当前操作模式的 lambda(可选)
mode: !lambda 'return water_heater::WATER_HEATER_MODE_ECO;'
# 读取离开模式状态的 lambda(可选)
away: !lambda "return id(vacation_mode).state;"
# 读取当前开/关状态的 lambda(可选)
is_on: !lambda 'return id(my_relay).state;'
optimistic: true
# UI 中显示的模式列表(可选)
supported_modes:
- "OFF"
- ECO
- GAS
visual:
min_temperature: 10.0
max_temperature: 85.0
target_temperature_step: 0.5
set_action:
- lambda: |-
ESP_LOGI("boiler", "新模式: %d", id(my_boiler).get_mode());
ESP_LOGI("boiler", "新目标温度: %.1f", id(my_boiler).get_target_temperature());
ESP_LOGI("boiler", "开: %s, 离开: %s", YESNO(id(my_boiler).is_on()), YESNO(id(my_boiler).is_away()));

lambda 的可能返回值:

  • current_temperature:返回一个 float(例如 42.5)。
  • target_temperature:返回一个 float(例如 60.0)。
  • mode:返回一个 WaterHeaterMode 枚举(例如 water_heater::WATER_HEATER_MODE_ECO)。
  • away:返回一个 bool(例如 false)。
  • is_on:返回一个 bool(例如 true)。
  • current_temperature (可选, lambda): 重复评估以获取当前水温的 lambda。期望返回浮点值。

  • target_temperature (可选, lambda): 重复评估以获取目标水温的 lambda。期望返回浮点值。

  • mode (可选, lambda): 重复评估以获取当前操作模式的 lambda。期望返回 WaterHeaterMode 枚举值。

  • away (可选, lambda): 重复评估以获取当前离开模式状态的 lambda。期望返回布尔值。

  • is_on (可选, lambda): 重复评估以获取当前开/关状态的 lambda。期望返回布尔值。

  • optimistic (可选, 布尔值):是否以乐观模式运行 - 在此模式下,发送到模板热水器的任何命令都会立即更新报告状态。默认为 true

  • set_action (可选, 动作): 当热水器收到命令(模式更改、目标温度更改、离开、开/关等)时执行的动作。这是您实现热水器实际控制逻辑的地方。

  • supported_modes (可选, 列表): 将暴露给前端(例如 Home Assistant)的操作模式静态列表。这控制报告给 Home Assistant 的 operation_list,仅影响 UI 和可用的服务调用。它不会更改运行时行为或控制逻辑。未指定时,默认显示所有支持的热水器模式。

    NOTE

    supported_modes 列表是静态的,在启动时评估。它不能动态更改,不支持模板或 lambda。

  • restore_mode (可选, 枚举):控制热水器在启动时如何尝试恢复状态。

    • NO_RESTORE (默认):不保存或恢复状态。
    • RESTORE:在启动时尝试恢复状态(目标温度和模式),但不执行 set_action
    • RESTORE_AND_CALL:在启动时尝试恢复状态并立即执行 set_action
  • 来自 热水器 的所有其他选项。

您还可以使用 water_heater.template.publish 动作从 YAML 文件的其他位置向模板热水器发布状态。

# 示例动作
- water_heater.template.publish:
id: my_boiler
current_temperature: 55.0
target_temperature: 60.0
mode: ECO
away: false
is_on: true

配置选项:

  • id (*必需, ID):模板热水器的 ID。
  • current_temperature (可选, 可模板化, 浮点数): 要发布的当前测量温度。
  • target_temperature (可选, 可模板化, 浮点数): 要发布的目标设定点温度。
  • mode (可选, 可模板化, 字符串): 要发布的操作模式。有关选项,请参阅 热水器模式
  • away (可选, 可模板化, 布尔值): 要发布的离开模式状态。
  • is_on (可选, 可模板化, 布尔值): 要发布的布尔开/关状态。

NOTE

此动作也可以在 lambda 中编写:

id(my_boiler).set_current_temperature(55.0);
id(my_boiler).publish_state();