Home Assistant Netatmo 集成set_preset_mode_with_end_datetime动作详解:定时切换预设模式(Away / Frost Guard)
【免费下载链接】home-assistant.io:blue_book: Home Assistant User documentation项目地址: https://gitcode.com/GitHub_Trending/ho/home-assistant.io
本文是 Home Assistant 官方文档仓库(home-assistant.io)中针对 Netatmo 集成动作netatmo.set_preset_mode_with_end_datetime的完整技术指南。该动作用于将 Netatmo 恒温器或智能暖气阀(Smart Thermostat / Smart Radiator Valve)临时切换为away(离家)或frost_guard(防冻)预设模式,并在你指定的日期时间自动恢复为设备的常规加热计划。读完本文,你将掌握该动作的 UI 配置步骤、完整 YAML 写法、参数约束与取值范围,以及它与其他 Netatmo 温度控制动作(如set_schedule、set_temperature_with_end_datetime)的配合用法。
动作概述与适用场景
netatmo.set_preset_mode_with_end_datetime是 Home Assistant Netatmo 集成在 2023.11 版本中引入的动作(见 source/changelogs/core-2023.11.markdown 中 "Add service set_preset_mode_with_end_datetime in Netatmo integration" 的变更记录)。它解决的核心问题是:
让 Netatmo 气候设备在一段时间内保持某个预设模式,到期后自动回到常规加热计划(schedule)。
典型场景包括:
- 短期离家:外出几天时切换到
away模式,返回当天指定时刻自动恢复日常计划; - 夜间防冻保护:在严寒天气里设定
frost_guard模式,保护管道不被冻裂,白天自动恢复; - 定时节能:在无人时段临时降低供热强度,时间一到自动切回计划。
该动作支持两类设备:
- Netatmo Smart Thermostat / Smart Modulating Thermostat(智能恒温器)
- Netatmo Smart Radiator Valve(智能暖气阀)
设备通过climate域暴露给 Home Assistant,因此动作的target.entity_id通常是形如climate.living_room的实体(可参考 source/_integrations/netatmo.markdown 中关于 thermostat 平台的说明)。
在 UI 中配置该动作
该动作可以添加到**自动化(automation)或脚本(script)**中。在官方文档中,actions/ui_header.md定义了 UI 操作的标准入口,具体步骤如下:
- 进入Settings > Automations & scenes。
- 打开现有的自动化或脚本,或选择Create automation>Create new automation。
- 如果是新建自动化,在When部分添加触发器;脚本不需要触发器,它们由其他自动化或流程调用。
- 在Then do部分选择Add action。
- 在By target(目标选择器)下选择你要控制的 Netatmo 气候设备(支持按实体、设备或区域指定目标)。
- 从该目标可用的动作列表中选择Set preset mode with end date & time。
- 设置Preset mode(预设模式)与End date & time(结束日期时间)。
- 选择Save保存。
UI 选项说明
| UI 选项 | 说明 |
|---|---|
| Preset mode | 要设置的预设模式,可选值为away和frost guard(防冻) |
| End date & time | 预设模式保持有效的截止日期和时间,到达该时刻后设备自动恢复常规计划 |
YAML 用法与完整示例
在 YAML 中,动作的完整标识为netatmo.set_preset_mode_with_end_datetime。官方文档给出的基础示例如下:
action: netatmo.set_preset_mode_with_end_datetime target: entity_id: climate.living_room data: preset_mode: away end_datetime: "2025-04-20 05:04:20"该示例将climate.living_room切换为away预设,直到2025-04-20 05:04:20时刻到达后自动恢复常规计划。
在自动化中使用时,动作以列表项形式存在于actions字段下:
automation: - alias: "Set away preset during vacation until noon" triggers: - trigger: time at: "08:00:00" actions: - action: netatmo.set_preset_mode_with_end_datetime target: entity_id: climate.living_room data: preset_mode: away end_datetime: "2025-04-20 12:00:00"YAML 参数详解
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
preset_mode | string | 是 | 要设置的预设模式,可用值为away与frost_guard |
end_datetime | datetime | 是 | 预设模式保持活跃的截止日期与时间,到达后设备自动回到当前活跃的加热计划 |
参数要点:
preset_mode的取值:官方文档的 UI 选项中写作frost guard,而 YAML 参数表中明确要求使用下划线形式frost_guard。需要注意的是,2025.2 版本中曾修复过该动作中frost_guard拼写错误(见 source/changelogs/core-2025.2.markdown 与 source/_posts/2025-02-05-release-20252.markdown 中 "Fix bug in set_preset_mode_with_end_datetime (wrong typo of frost_guard)" 的记录)。因此在实际配置时,YAML 中必须使用frost_guard,避免因拼写差异导致动作失败。end_datetime的格式:使用标准的日期时间字符串,如"2025-04-20 05:04:20"(建议加引号包裹,避免 YAML 解析歧义),也可以传入模板表达式动态计算结束时间,例如"{{ now() + timedelta(hours=6) }}"。
动作行为:到期自动恢复计划
该动作的核心行为在官方文档的 "Good to know" 部分被明确说明:
当结束日期时间到达时,气候设备会返回其活跃的加热计划(active schedule)。
也就是说,该动作与直接切换预设模式不同——它本质上是一个带定时恢复的临时覆盖(temporary override):在设定的时间窗口内使用away或frost_guard预设,窗口结束后 Netatmo 云端按设备当前活跃的计划(schedule)恢复供热。因此不需要你再额外写一条 "到点恢复" 的自动化,Netatmo 集成会处理到期回切逻辑。
这一设计与同类的其他 Netatmo 温度控制动作保持一致,例如:
netatmo.set_temperature_with_end_datetime:设置目标温度直到指定时刻,到期恢复计划;netatmo.set_temperature_with_time_period:按时间段(如wakeup、away等周期)设置温度;netatmo.set_schedule:直接激活某个在 Netatmo App 中创建的加热计划;netatmo.clear_temperature_setting:清除临时温度设置。
这些动作在 source/_actions/ 目录下均有对应文档,可互相配合构建完整的节能场景(例如离家自动切换away预设、回家前恢复温度等)。
与相关动作的对比与组合使用
为帮助你选择正确的动作,下表对比了netatmo.set_preset_mode_with_end_datetime与相邻动作的差异:
| 动作 | 控制内容 | 是否定时恢复 | 典型用途 |
|---|---|---|---|
netatmo.set_preset_mode_with_end_datetime | 预设模式(away / frost_guard) | 是(到期恢复计划) | 离家、防冻等临时场景 |
netatmo.set_schedule | 加热计划名称(需与 Netatmo App 中的计划名完全一致) | 否(持续生效) | 主动切换计划,如全员离家时切到 Away 计划 |
netatmo.set_temperature_with_end_datetime | 目标温度(7~30 度) | 是(到期恢复计划) | 临时精确控温,如睡前调温 |
netatmo.set_temperature_with_time_period | 目标温度 + 时间段 | 否(按周期语义) | 按一天中的时段控温 |
netatmo.clear_temperature_setting | 清除临时温度设置 | — | 取消临时温度覆盖 |
组合示例:结合set_schedule的文档场景(见 source/_actions/netatmo.set_schedule.markdown),你可以构建如下自动化——当所有人离开家时,把客厅恒温器临时切到away预设并在当晚 21:00 自动恢复计划:
automation: - alias: "Away preset while out, restore schedule at 21:00" triggers: - trigger: state entity_id: zone.home to: "0" actions: - action: netatmo.set_preset_mode_with_end_datetime target: entity_id: climate.living_room data: preset_mode: away end_datetime: "{{ now().date().isoformat() }} 21:00:00"注意事项与排错建议
- 预设模式名称:
away与frost_guard是 Netatmo 气候设备的标准预设。若设备不支持的预设传入,动作可能失败或行为异常,请先确认你的恒温器/暖气阀型号支持的预设集合。 - 时间格式:
end_datetime必须是可解析的日期时间,建议使用带引号的字符串或模板表达式;格式错误会导致配置校验失败。 - 计划匹配:与
set_schedule不同,本动作不要求传入计划名,恢复时使用设备当前活跃的计划,因此无需在 Netatmo App 中做额外配置。 - 版本要求:该动作自 Home Assistant 2023.11 起可用(见 source/changelogs/core-2023.11.markdown);2025.2 修复了
frost_guard拼写问题,建议升级到较新版本以获得稳定行为。 - 配置后验证:在自动化中保存后,可通过开发者工具中的Actions(动作)面板手动调用该动作并观察实体状态变化(如
preset_mode属性是否变为away/frost_guard),再通过日志确认到期后是否恢复计划。
延伸阅读
- Netatmo 集成整体说明与设备支持列表:source/_integrations/netatmo.markdown
- 同族动作文档:netatmo.set_temperature_with_end_datetime、netatmo.set_schedule、netatmo.set_temperature_with_time_period、netatmo.clear_temperature_setting
- 动作通用目标(Targets)说明:见 source/_includes/actions/targets.md
【免费下载链接】home-assistant.io:blue_book: Home Assistant User documentation项目地址: https://gitcode.com/GitHub_Trending/ho/home-assistant.io
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考