Home Assistant Schedule 集成实战:使用 schedule.get_schedule 动作读取每周时间计划

发布时间:2026/9/17 21:43:17
Home Assistant Schedule 集成实战:使用 schedule.get_schedule 动作读取每周时间计划 Home Assistant Schedule 集成实战使用 schedule.get_schedule 动作读取每周时间计划【免费下载链接】home-assistant.io:blue_book: Home Assistant User documentation项目地址: https://gitcode.com/GitHub_Trending/ho/home-assistant.io导读schedule.get_schedule是 Home Assistant 中 Schedule每周时间计划集成提供的核心动作用于一次性读取一个或多个 schedule 实体已配置的全部时间段time ranges并将结果写入响应变量response variable供同一自动化或脚本的后续步骤使用。读完本文你将掌握在 UI 与 YAML 两种方式下调用该动作、解析其响应数据结构、以及结合模板Templating把今天的计划动态拼进通知消息的完整实战方案。schedule.get_schedule 动作概览在 动作文档 中该动作被定义为动作名称schedule.get_schedule所属域schedule功能描述检索一个或多个 schedule 已配置的时间范围典型用途例如把今天的 schedule 时间范围放进一条通知消息中关键特性可以在一次调用中读取多个 schedule结果通过响应变量返回可在同一自动化或脚本的后续步骤中继续使用与其他执行后无返回的动作不同schedule.get_schedule属于带响应数据的动作。这类动作返回的数据通常是动态的、体量较大的信息如未来一周的日历事件、详细的行程路线不适合长期存放在实体状态中因此以响应数据的形式在动作执行时一次性返回。关于响应变量机制的通用说明可参考 执行动作Actions文档。前置条件理解 Schedule 集成的数据模型要正确解读schedule.get_schedule的返回结果先要理解它所读取的数据从何而来。Schedule 集成集成文档允许你创建每周时间计划实体为每一天设置若干时间段time block每个时间段有明确的开始时间from与结束时间to。时间块开始时 schedule 实体变为激活on状态时间块结束时变为非激活off状态因此 schedule 常被用作自动化中的触发器或条件。通过 UI 创建 schedule在 UI 中配置 schedule 时可设置配置项说明Nameschedule 的友好名称Icon前端中为该 schedule 显示的图标Schedule blocks按住并拖动鼠标为每周的每一天选择时间块同一天不允许创建重叠的时间块创建时间块后点击某个时间块可编辑其细节配置项必填类型说明Start是time开始时间届时 schedule 变为激活/开启End是time结束时间届时变为非激活/关闭Additional data否map属性名到值的映射该时间块激活时这些键值会作为属性附加到实体上通过 YAML 创建 schedule也可以在configuration.yaml中手动配置 schedule例如出自 集成文档schedule: light_schedule: name: Light schedule wednesday: - from: 17:00:00 to: 21:00:00 data: brightness: 100 color_temp: 4000 thursday: - from: 17:00:00 to: 23:00:00 data: brightness: 90 color_temp: 3500 friday: - from: 07:00:00 to: 10:00:00 data: brightness: 80 color_temp: 3000 - from: 16:00:00 to: 23:00:00 data: brightness: 60 color_temp: 2500其中每个顶层键wednesday、thursday、friday等对应一周中的某一天值为时间块列表每个时间块包含必填的from、to时间以及可选的data映射。配置项的完整说明如下配置键必填类型说明schedule是mapschedule 的别名允许配置多个条目name是stringschedule 的友好名称icon否icon前端显示的图标monday~sunday否list默认[]每一天的时间块列表from是time开始时间激活/开启to是time结束时间非激活/关闭data否map默认{}时间块激活时附加到实体属性上的键值映射时间块采用开始时间包含、结束时间排他的边界语义一个09:00到12:00的时间块从09:00:00.000起激活直到但不包括12:00:00.000。同一天内相邻相接的时间块如07:00–10:00与10:00–12:00会平滑过渡不会在边界处短暂翻转为off同一天内不允许重叠的时间块配置校验阶段会被拒绝。这些行为直接影响你读取到的数据在自动化中的语义。在 UI 中使用 schedule.get_schedule在自动化或脚本中通过界面添加该动作的步骤如下出自 动作文档进入设置自动化与场景。打开现有的自动化或脚本或选择创建自动化创建新自动化。如果是在配置新的自动化请在When何时部分添加触发器。脚本不需要触发器它们在被其他东西调用时运行。在Then do然后执行部分选择添加动作。选择你想要控制的实体。在按目标参见下文目标Targets详解下选择你想要读取的 schedule。在该目标显示的动作列表中选择Schedule: Get schedule。选择保存。UI 中的选项该动作除目标之外没有其他额外选项。在 YAML 中使用 schedule.get_schedule在 YAML 中将该动作引用为schedule.get_schedule并使用response_variable把结果存入一个变量以便在后续步骤中使用示例出自 动作文档action: schedule.get_schedule target: entity_id: - schedule.vacuum_robot - schedule.air_purifier response_variable: schedules这个示例一次性读取了schedule.vacuum_robot和schedule.air_purifier两个计划实体配置的时间范围并把结果存入名为schedules的响应变量。response_variable的名称可以自行定义它相当于一个局部变量作用范围是当前自动化或脚本——只有同一个自动化/脚本中位于该动作之后的步骤才能引用它。YAML 中的选项该动作除目标之外没有其他 YAML 选项。响应数据结构详解响应中包含你目标中每一个 schedule 实体对应的字段。每个 schedule 有七个字段对应一周中的每一天使用小写的英文星期名字段值为该天配置的时间范围列表没有配置任何时间块的日期返回空列表。每个时间范围包含一个from时间与一个to时间。完整的响应示例出自 动作文档如下schedule.vacuum_robot: monday: - from: 09:00:00 to: 15:00:00 tuesday: [] wednesday: [] thursday: - from: 09:00:00 to: 15:00:00 friday: [] saturday: [] sunday: [] schedule.air_purifier: monday: - from: 09:00:00 to: 18:00:00 tuesday: [] wednesday: [] thursday: - from: 09:00:00 to: 18:00:00 friday: [] saturday: - from: 10:30:00 to: 12:00:00 - from: 14:00:00 to: 19:00:00 sunday: []解读要点每个被目标的实体都作为顶层键出现如schedule.vacuum_robot、schedule.air_purifier每一天的键是小写的英文星期名monday到sunday与你界面使用的语言无关某天没有任何时间块时返回[]空列表同一天可以配置多个时间块见上例schedule.air_purifier的saturday它们会按顺序列出时间格式为HH:MM:SS字符串如09:00:00。实战把今天的计划拼进通知schedule.get_schedule最常见的用途之一就是把今天的计划时间动态写入通知。下面是 动作文档 给出的完整示例先调用schedule.get_schedule读取计划再调用notify.nina发送通知消息中通过模板遍历今天对应的时间块action: notify.nina data: title: Todays schedules message: |- Your vacuum robot will run today: {% set today now().strftime(%A).lower() %} {% for event in schedules[schedule.vacuum_robot][today] %} - from {{ event.from }} until {{ event.to }} {% endfor %}这段模板逐行拆解now().strftime(%A).lower()取当前日期strftime(%A)输出完整的英文星期名如Monday再转小写得到monday正好与响应数据的星期键一一对应——这也是响应数据固定使用小写英文星期名的原因方便模板直接索引schedules[schedule.vacuum_robot][today]从响应变量schedules中取出schedule.vacuum_robot实体、再取出今天的时间块列表{% for event in ... %}遍历该列表用event.from与event.to输出每个时间块的起止时间如果今天没有配置任何时间块for循环不会执行任何迭代消息中不会出现多余的列表项——这正是无时间块的日期返回空列表这一设计带来的便利。需要说明的是在文档站源码中该模板片段被{% raw %}标签包裹以避免 Jekyll 站点构建时把其中的{% set %}、{% for %}当作 Liquid/Jekyll 指令处理在自动化 YAML 中直接使用上述模板即可无需 raw 标签。深入理解 response_variable动作响应数据schedule.get_schedule之所以能读取并返回配置依赖于 Home Assistant 的动作响应数据机制。依据 执行动作Actions文档某些动作会返回可供自动化使用的数据称为动作响应数据action response data典型如calendar.get_events返回未来一段时间的日历事件动作通过response_variable指定存放响应数据的变量名名称可任意定义之后在同一个脚本/自动化的后续动作中即可通过该变量引用返回的数据。与schedule.get_schedule同类的calendar.get_events示例出自同一文档action: calendar.get_events target: entity_id: calendar.school data: duration: hours: 24 response_variable: agenda因此schedule.get_schedule的调用遵循统一模式target决定读取哪些实体response_variable决定结果存放在哪里之后无论是发通知、写日志还是作为另一个动作的输入都能直接引用。目标Targets详解该动作唯一需要配置的就是目标。依据 执行动作Actions文档 的通用目标语法target是一个映射至少包含以下键之一均可传列表取值应使用小写entity_id实体 ID 列表如schedule.vacuum_robotdevice_id设备 ID 列表area_id区域 ID 列表。由于schedule.get_schedule允许一次读取多个计划你可以把同一天内要检查的所有 schedule 实体一次性列在entity_id下如本文示例中的两个计划响应数据中会为每个实体各返回一个按星期组织的字段无需多次调用。相关动作与注意事项配合 schedule.reload 使用schedule.get_schedule读取的是 schedule 实体当前生效的配置。如果你通过 YAML 修改了 schedule且希望立即读取到新配置可以先调用 schedule.reload 动作action: schedule.reloadschedule.reload用于在不重启 Home Assistant 的情况下从configuration.yaml重新加载 schedule。注意两点它只重载 YAML 中定义的 schedule在 UI 中创建的 schedule 不受影响且只有拥有管理员权限的用户才能执行该动作。在 Home Assistant Core 2025.4 更新日志 中也包含了对schedule.get_schedule动作描述的改进记录说明该动作在持续维护中。使用要点小结响应数据中的每一天都以小写英文星期名如monday作为键与界面语言无关没有配置时间块的日期返回空列表模板遍历时天然安全返回的时间格式统一为HH:MM:SS字符串结果只能在同一自动化/脚本的后续步骤中使用跨自动化/脚本不能共享该响应变量schedule 时间块的边界语义开始包含、结束排他与同日不允许重叠的约束决定了读取到的数据在作为触发条件时是互斥且连续的。【免费下载链接】home-assistant.io:blue_book: Home Assistant User documentation项目地址: https://gitcode.com/GitHub_Trending/ho/home-assistant.io创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考