ESPHOME地址:Time Component
基准时间配置
- id (可选, ID): 指定在lambdas中使用的时间ID。
- timezone (可选, string): 手动告诉ESPHome使用该格式的时区,时区名称通过TZ database name获得,ESPHome尝试根据运行ESPHome的计算机的时区自动推断时区字符串,但这* 可能并不总是准确的。
- on_time (可选, Automation): 使用类似cron的语法以特定间隔运行的自动化。详见on_time Trigger.
- on_time_sync (Optional, Automation): 同步时间源时运行的自动化。 详见on_time_sync Trigger.
on_time Trigger
这种自动化可以用于在一天的特定时间以特定的间隔运行自动化。
有两种方法可以指定时间间隔:使用如下所示的seconds:, minutes,或者使用类似于cron的表达式,如* /5 * * * *。
esphome的cron有6个字段(seconds,minutes,hours,dayofmonth,month,dayofweek)。
time:
- platform: sntp
id: my_time
timezone: Asia/Shanghai
on_time:
# Every 5 minutes
- seconds: 0
minutes: /5
then:
- switch.toggle: my_switch
# Every morning on weekdays
- seconds: 0
minutes: 30
hours: 7
days_of_week: MON-FRI
then:
- light.turn_on: my_light
# Cron syntax, trigger every 5 minutes
- cron: '00 /5 * * * *'
then:
- switch.toggle: my_switch
- seconds (可选, string): 指定自动化将在每分钟的哪几秒触发。默认为"*"(所有秒)。取值范围为0 ~ 59。
- minutes (可选, string): 指定自动化将在一小时的哪几分钟触发。默认为*(所有分钟)。取值范围为0 ~ 59。
- hours (可选, string): 指定自动化将在一天中的哪个小时触发。默认为*(所有小时)。取值范围为0 ~ 23。
- days_of_month (可选, string): 指定自动化将在一个月的哪一天触发。默认为*(所有天)。取值范围为1 ~ 31。
- months (可选, string): 指定要在一年中的哪个月份触发。默认为*(所有月份)。月份名称JAN到DEC会被自动替换。取值范围为1(一月)~ 12(十二月)。
- days_of_week (可选, string): 指定要触发一周中的哪几天。默认为*(所有天)。名称SUN到SAT被自动替换。范围为1(星期日)到7(星期六)。
- cron (可选, string): 可以指定一个完整的cron表达式,如* /5 * * * *. 请注意年份和一些特殊字符,比如
L, #目前不支持.
此外,星期几字段的解释类似于days_of_week变量 (range from 1 (Sunday) to 7 (Saturday)) 而不像其他cron实现那样(范围从0 (Sunday)到7 (Sunday))。
在seconds:, minutes:,…字段中可以使用以下操作符:
seconds: 0
像0或30这样的整数将使自动化仅在当前秒分别恰好为0或30时触发。
seconds: 0,30,45
可以用,
运算符组合多个表达式。这个操作符使得,如果用逗号分隔的表达式中有一个为真,就会触发自动操作。例如,如果当前秒为0、30或45,将触发。
days_of_week: 2-6
# same as
days_of_week: MON-FRI
# same as
days_of_week: 2,3,4,5,6
# same as
days_of_week: MON,TUE,WED,THU,FRI
-(连字符)操作符可用于创建一个值范围,使用,
操作符可列出所有值的简写。
# every 5 minutes
seconds: 0
minutes: /5
# every timestamp where the minute is 5,15,25,...
seconds: 0
minutes: 5/10
/
操作符可用于创建步长值。例如/5
表示minutes:
仅当小时的分钟为0或5、10、15、…时触发自动触发。/
前面的值指定应用该步长的偏移量。
# Every minute
seconds: 0
minutes: '*'
最后,*
运算符匹配每个数字。在上面的例子中,*
可以用0-59
代替。
注意
请注意,由于没有设置秒变量,以下自动化将在0、5、10、15分钟内每秒钟触发一次,而不是每5分钟触发一次:
time:
- platform: sntp
# ...
on_time:
- minutes: /5
then:
- switch.toggle: my_switch
on_time_sync Trigger
此自动化在时间源成功检索当前时间后触发。请参阅DS1307配置示例,了解来自home assistant服务器的网络时间同步触发写入外部硬件实时时钟芯片的场景。
on_time_sync:
then:
- logger.log: "Synchronized system clock"
example
time:
- platform: sntp
id: my_time
timezone: Asia/Shanghai
on_time:
- seconds: "*"
then:
lambda: |-
static int cnt = 0;
ESP_LOGW("time", "%d", cnt);
cnt++;