简介
Scheduler组件是Home Assistant(简称HA)的一个自定义组件,专门用于基于时间控制现有设备。它可以与Lovelace scheduler卡片完美配合使用,为用户提供了一个强大而灵活的调度系统。
Scheduler组件的核心功能是创建调度器实体。每个调度器实体都定义了在特定时间执行的操作,例如"每天21:00打开我的台灯"。HA中的任何实体都可以用来创建调度器实体,并且可以使用HA中可用的任何服务。
安装过程
安装Scheduler组件的过程分为以下几个步骤:
- 下载文件
- 重启Home Assistant
- 将集成添加到Home Assistant
- 添加scheduler-card(可选)
下载文件
有两种方法可以下载Scheduler组件的文件:
方法一:通过HACS安装
- 确保已经安装了HACS。如果没有,可以在HA中运行
wget -O - https://get.hacs.xyz | bash -
来安装。 - 在HACS中选择"Integrations"。
- 点击页面底部的"+"按钮。
- 搜索"scheduler component"。
- 选择它并在HACS中点击安装。
方法二:手动安装
- 克隆Scheduler组件的GitHub仓库或下载源代码的zip文件。
- 将
custom_components/
文件夹及其内容添加/合并到你的HA配置目录中。
重启Home Assistant
为了让新添加的集成加载,需要重启Home Assistant。
将集成添加到Home Assistant
这是很多人容易忽略的一步:
- 在HA中,进入Configuration > Integrations。
- 在右下角,点击带有"+"的大按钮。
- 如果组件安装正确,你应该能在列表中找到"Scheduler"。(可能需要清除浏览器缓存才能显示)
- 选择它,Scheduler集成就可以使用了。
添加scheduler-card(可选)
按照Lovelace scheduler card的说明设置卡片,这样就可以配置调度器实体了。
更新和卸载
更新过程
- 更新文件:
- 使用HACS:在HACS面板中,当有新版本可用时会出现通知。按照HACS中的说明更新安装文件。
- 手动更新:下载最新版本的zip文件,解压到HA安装目录的custom_components文件夹中,覆盖之前的安装。
- 重启HA以加载更改。
要查看已安装的版本:在HA中,转到Configuration -> Integrations。在Scheduler集成卡片中,你应该看到一个"1 device"的链接,点击它。在表格中点击"Scheduler"设备,你就能看到设备信息。"firmware version"代表已安装的版本号。
卸载过程
- 从HA中移除Scheduler:在HA中转到Configuration -> Integrations。找到Scheduler集成的卡片,点击三个点的按钮,然后点击"Delete"。
- 删除文件:
- 如果是通过HACS安装的:在HACS面板中找到Scheduler组件,点击三个点的按钮,然后点击"Uninstall"。
- 如果是手动安装的:在custom_components目录中,删除"scheduler"文件夹。
- 重启HA,使组件的所有痕迹消失。
备份
调度配置存储在HA配置目录的.storage
文件夹中,文件名为scheduler.storage
。
如果通过HA supervisor创建快照,这个文件应该会自动备份。否则,请确保将此文件包含在你的备份中。
HA中的实体是在(重新)启动HA时从scheduler.storage
文件创建的。
Scheduler实体
实体ID
Scheduler集成的实体ID遵循switch.schedule_<token>
的模式,其中<token>
是随机生成的6位数字代码。
你可以像对待其他HA中的switch
实体一样处理这些实体,这意味着你可以将它们放在任何Lovelace卡片中以便快速访问。
状态
Scheduler实体可以有以下状态:
状态 | 描述 |
---|---|
off | 调度已禁用。禁用的调度不会跟踪时间,也不会执行任何操作。 |
on | 调度内部计时器正在运行,等待计时器到期。属性next_trigger 提供了到期的时刻。 |
triggered | 计时器已完成,操作已执行。实体将等待1分钟,然后重置计时器。 |
unknown | 出现问题,调度未运行。 |
服务
由于调度遵循switch
平台,你可以使用switch.turn_on
和switch.turn_off
服务来启用和禁用调度。
此外,还有以下可用服务:
scheduler.add
添加新的调度器实体。
字段 | 类型 | 可选/必需 | 描述 | 备注 |
---|---|---|---|---|
weekdays | 列表 | 可选 | 应执行调度的日期(星期几) | 有效值为:mon , tue , wed , thu , fri , sat , sun , daily , workday , weekend 。默认为daily 。 |
start_date | 日期 | 可选 | 调度应开始触发的起始日期 | 有效格式为yyyy-mm-dd 。 |
end_date | 日期 | 可选 | 调度应触发的最后日期 | 有效格式为yyyy-mm-dd 。如果end_date 已过,调度将不再触发。 |
timeslots | 列表 | 必需 | 应执行的时间/时间间隔列表以及相应的操作 | 更多信息请参见时间段。 |
repeat_type | 字符串 | 可选 | 控制触发后的重复行为 | 有效值为:repeat (默认值,触发后循环), single (触发后删除自身), pause (触发后关闭,可通过打开重置)。 |
name | 字符串 | 可选 | 调度实体的友好名称 | 该名称也将用于调度的entity_id。默认值为Schedule #abcdef ,其中abcdef 为随机生成的序列。 |
scheduler.edit
更新现有调度器实体的配置。覆盖旧值。
服务参数与scheduler.add
相同,只是需要提供要修改的调度的entity_id
。
注意,只需提供要更改的参数,如果未提供参数,将保留先前的值。
scheduler.remove
删除调度器实体。
字段 | 类型 | 可选/必需 | 描述 | 备注 |
---|---|---|---|---|
entity_id | 字符串 | 必需 | 调度器实体的实体ID | 例如:switch.schedule_123456 |
scheduler.copy
复制调度器实体。
字段 | 类型 | 可选/必需 | 描述 | 备注 |
---|---|---|---|---|
entity_id | 字符串 | 必需 | 现有调度器实体的实体ID | 例如:switch.schedule_123456 |
name | 字符串 | 可选 | 创建的调度实体的友好名称 | 该名称也将用于调度的entity_id。默认值为Schedule #abcdef ,其中abcdef 为随机生成的序列。 |
scheduler.run_action
手动触发调度。
字段 | 类型 | 可选/必需 | 描述 | 备注 |
---|---|---|---|---|
entity_id | 字符串 | 必需 | 调度器实体的实体ID | 例如:switch.schedule_123456 |
time | 字符串 | 可选 | 触发调度的时间 | 如果调度只有一个时间段,将始终触发该时间段。对于有多个时间段的调度:如果未提供时间:将触发与当前时间(现在)重叠的调度。如果提供了时间:将触发与提供的时间重叠的调度。 |
skip_conditions | 布尔值 | 可选 | 是否应跳过调度的条件 |
数据格式
时间段
时间段定义了调度触发的时间点,以及需要执行的操作。还可以选择指定在执行操作之前需要验证的条件。
名称 | 类型 | 可选/必需 | 描述 | 备注 |
---|---|---|---|---|
start | 字符串 | 必需 | 调度应触发的时间(24小时格式) | 应在00:00-23:59范围内。每个时间段应有唯一值。输入也可以相对于太阳:例如sunrise+01:00 或sunset-00:00 。 |
stop | 字符串 | 可选 | 时间段结束的时间(24小时格式) | 仅在定义时间段时需要。应在00:01-00:00(第二天开始)范围内。stop 时间必须至少在start 时间后一分钟。 |
conditions | 列表 | 可选 | 执行操作前应验证的条件 | 更多信息请参见条件。 |
condition_type | 字符串 | 可选 | 验证多个条件时应用的逻辑 | 有效值为:and (所有条件都必须满足), or (必须满足一个或多个条件)。 |
track_conditions | 布尔值 | 可选 | 观察条件实体的变化,一旦条件变为有效就重复操作 | |
actions | 列表 | 必需 | 达到start 时间时要执行的操作 | 更多信息请参见操作。 |
注意:
为了保证与scheduler-card的兼容性,需要满足以下条件:
-
调度必须由以下之一组成:
- 只有
start
时间的单个时间段 - 一个时间段列表,所有时间段都有
start
和stop
时间,它们不重叠且不相对于太阳。
- 只有
-
所有时间段的条件必须相同。
-
操作列表只能包含单个服务/service_data组合(多个操作只能有不同的entity_id)。
条件
条件用于定义在执行预定操作之前需要验证的规则。目前条件仅限于检查实体的状态。
名称 | 类型 | 可选/必需 | 描述 | 备注 |
---|---|---|---|---|
entity_id | 字符串 | 必需 | 条件适用的实体 | 例如:binary_sensor.my_window |
value | 字符串 | 必需 | 与实体状态比较的值 | 例如:on |
match_type | 字符串 | 必需 | 比较应用的逻辑 | 有效值为:is (实体状态必须匹配value ), not (实体状态不得匹配value ), below (实体状态必须低于value ,仅适用于数值), above (实体状态必须高于value ,仅适用于数值)。 |
操作
操作是HA服务与entity_id的组合。有关可用操作和有效参数的信息,请参见HA中的Developer Tools -> Services。
名称 | 类型 | 可选/必需 | 描述 | 备注 |
---|---|---|---|---|
entity_id | 字符串 | 必需 | 需要执行操作的实体 | 例如:light.my_lamp |
service | 字符串 | 必需 | 需要在实体上执行的HA服务 | 例如:light.turn_on |
service_data | 字典 | 可选 | 在服务调用中使用的额外参数 | 例如:{brightness: 200} |
结语
Scheduler组件为Home Assistant用户提供了一个强大而灵活