脚本语法


脚本是Home Assistant将执行的一系列操作。亚博电子好礼脚本可以作为独立的实体使用脚本组件但也可以嵌入自动化Alexa / Amazon Echo配置。

当脚本在自动化中执行时触发变量是可用的。看到Available-Trigger-Data

脚本语法基本结构是包含操作的键/值映射列表。如果脚本仅包含1个操作,则可以省略包装列表。

所有动作都支持可选别名

#示例脚本集成,包含脚本语法script: example_script: sequence: #使用脚本语法编写- alias: "Turn on ceiling light" service: light。Turn_on target: entity_id: light。别名:“通知天花板灯已打开”服务:Notify。通知数据:信息:“打开顶灯!”

调用服务

其中最重要的是调用服务的动作。这可以通过多种方式实现。对于所有不同的可能性,看看服务呼叫页面

别名:“卧室灯亮”服务:亮灯。Turn_on target: entity_id: group。卧室资料:亮度:100

激活一个场景

脚本还可以使用一种快捷语法来激活场景,而不是调用scene.turn_on服务。

——场景:scene.morning_living_room

变量

变量操作允许您设置/覆盖变量,这些变量将在它之后的操作中被模板访问。另请参阅脚本变量了解如何定义在整个脚本中可访问的变量。

—alias:“设置变量”变量:实体:—light。厨房——光。living_room亮度:100 -别名:“控制灯”服务:灯。target: entity_id: "{{entities}}" data:亮度:"{{亮度}}"

变量的范围

变量具有局部作用域。这意味着如果变量在嵌套的序列块中被更改,那么在外部序列块中该更改将不可见。

下面的例子总是说“家里有0个人”。在选择序列的变量行动只会改变变量。

Set people变量为默认值- variables: people: 0 #如果Paulus是home,尝试增加people - choose: - conditions: - condition: statepaulus state: "home" sequence: # At this scope and this point of the sequence, people == 0 - variables: people: "{{people + 1}}" # At this scope, people now is 1…#……但是在这个范围内它仍然是0 #宣布在家的人数服务:通知。通知数据:消息:“有{{people}} people home”

测试一个条件

在执行脚本时,可以在主序列中添加一个条件,以停止进一步的执行。当条件不返回时真的,则该脚本将停止执行。有很多不同的情况记录在条件页面

条件Action仅停止执行当前序列块。当它被用在重复动作,只有当前的迭代重复循环将会停止。当它被用在选择行动,只是其中的行动选择即将结束。

# If paulus is home,继续执行下面的脚本保卢斯:“家”

延迟

延迟对于暂时挂起脚本并稍后启动脚本非常有用。我们支持如下所示的延迟的不同语法。

# Seconds #等待5秒- alias: "Wait 5s" delay: 5秒
#hh:mm#等待1小时 - 延迟:“01:00”
# HH:MM:SS #等待1.5分钟-延迟:“00:01:30”
#支持毫秒,秒,分钟,小时,天#可以组合使用,至少需要一个#等待1分钟-延迟:分钟:1

所有的表单都接受模板。

#等待多少分钟minte_delay被设置为- delay: "{{states('input_number.minute_delay') |乘(60)| int}}"

等待

这些操作允许脚本等待系统中的实体处于模板指定的特定状态,或者等待一个或多个触发器表示的某个事件发生。

等模板

该操作对模板进行计算,如果为true,脚本将继续执行。如果不是,那它就会等待,直到它成为现实。

当模板引用的实体ID发生变化时,模板将重新计算。如果你使用非确定性函数现在()在模板中,它不会被连续地重新计算,只有当引用的实体ID被更改时才会被重新计算。如果需要定期重新评估模板,请参考传感器时间和日期将每分钟或每天更新的组件。

# Wait until media player is stopped - alias: "Wait until media player is stopped . " wait_template: "{{is_state('media_player. 'media_player. ') ";楼”、“停止”)}}”

等待触发

此操作可以使用与自动化操作相同的触发器触发部分。看到自动触发.只要任何触发器都触发,脚本将继续。所有先前定义的触发变量变量脚本变量传递给触发器。

别名:“Wait for MY_EVENT or light on”wait_for_trigger: - platform: event event_type: MY_EVENT - platform: state entity_id: light。灯到:“开”为:10

等待超时

对于这两种类型的等待,都可以设置一个超时,在此之后,如果条件/事件不满足,脚本将继续执行。Timeout的语法与延迟,就像延迟,也接受模板。

#等待传感器切换到“on”长达1分钟,然后继续执行。- wait_template: "{{is_state('binary_sensor。}}" timeout: "00:01:00"

还可以使用可选方法让脚本在超时后终止continue_on_timeout:假

#等待IFTTT事件或在指定超时后终止。—wait_for_trigger:—platform: event event_type: ifttt_webhook_received event_data: action: connected_to_network timeout: minutes: "{{timeout_minutes}}" continue_on_timeout: false

没有continue_on_timeout:假脚本将始终继续,因为默认为continue_on_timeout真的

等变量

每次等待完成后,要么因为条件满足,事件发生,要么超时,变量失效等待将被创建/更新以指示结果。

多变的 描述
等待 后只存在wait_template真的如果达到了条件,否则
wait.trigger 后只存在wait_for_trigger.包含有关哪个触发器被触发的信息。(见Available-Trigger-Data.)将没有一个如果在超时过期之前没有发生触发器
wait.remaining 剩余超时,或者没有一个如果未指定超时

这可以用于根据是否满足条件采取不同的操作,或者在实现单个超时时连续使用多个等待。

根据是否满足条件采取不同的行动。- wait_template: "{{is_state('binary_sensor。门','on')}}" timeout: 10 - choose: - conditions: "{{not wait.completed}}" sequence: - service: scriptDoor_did_not_open默认:- service: script。Turn_on target: entity_id:—script。door_did_open——脚本。play_fanfare总共等待10秒。- wait_template: "{{is_state('binary_sensor。Door_1 ', 'on')}}" timeout: 10 continue_on_timeout: false - service:开关。Turn_on target: entity_id:开关。Some_light - wait_for_trigger: - platform: state entity_id: binary_sensor。门2到:"on" for: 2超时:"{{等待。" continue_on_timeout: false - service: switch. "关闭目标:entity_id: switch.some_light

火灾活动

此操作允许您触发事件。事件可以用于很多事情。它可以触发自动化或指示另一个集成正在发生某事。例如,在下面的示例中,它用于在日志簿中创建一个条目。

- 别名:“fire logbook_entry事件”事件:logbook_entry event_data:name:paulus消息:唤醒entity_id:device_tracker.paulus域:light

您还可以使用event_data来触发带有自定义数据的事件。这可以用来将数据传递给另一个等待事件触发器的脚本。

event_data接受模板。

- event: MY_EVENT event_data: name: myEvent customData: "{{myCustomVariable}}"

引发和消费自定义事件

下面的自动化示例展示了如何引发被调用的自定义事件event_light_state_changedentity_id作为事件数据。动作部分可以在脚本或自动化程序中。

- 别名:“Fire事件”触发器: - 平台:State Entity_ID:switch.kitchen到:“开启”动作: - 事件:event_light_state_changed event_data:状态:状态:“ON”

下面的自动化示例展示了如何捕获自定义事件event_light_state_changed与一个事件触发自动化,并检索相应的entity_id将其作为事件触发数据传递,请参阅Available-Trigger-Data为更多的细节。

—alias:“Capture Event”触发器:—platform: Event event_type: event_light_state_changed action:—service: notify。通知数据:message: "kitchen light is turned {{trigger.event.data.state}}"

重复一组动作

此操作允许您重复其他操作的序列。完全支持嵌套。有三种方法可以控制序列运行的次数。

重复计算

此表单接受一个计数值。该值可以由模板指定,在这种情况下,当到达重复步骤时,将呈现模板。

Script: flash_light: mode:重启顺序:—service: light目标:“光。{{light}}" - alias: "Cycle light 'count' times" repeat: count: "{{count|int * 2 - 1}}" sequence: - delay: 2 - service: light. "切换目标:entity_id:“光。{{light}}" flash_hallway_light: sequence: - alias: "Flash走廊灯3次"服务:script。闪光灯数据:灯光:走廊数:3

While循环

此表单接受条件列表(参见条件页面对可用选项)进行评估之前每次序列运行时。序列将被运行只要条件的计算结果为true。

脚本:do_something: sequence: - service: Script。get_ready_for_something - alias: "只要条件为真,就重复序列"Repeat: while: - condition: state entity_id: input_boolean. get_ready_for_something - alias: "只要条件为真,就重复序列"do_something状态:"on" #不要做太多次-条件:template value_template: "{{repeat. "Index <= 20}}" sequence: - service: script.something .

也接受A.模板条件的简写符号.例如:

- repeat: while: "{{is_state('传感器。mode', 'Home')并重复。指数< 10 }}" sequence: - ...

重复,直到

此表单接受被评估的条件列表每次序列运行时。因此,序列将始终至少运行一次。序列将被运行直到条件的计算结果为true。

自动化:—trigger:—platform: state entity_id: binary_sensor。Xyz to: "on" condition: - condition: state entity_id: binary_sensor. Xyz to: "on" condition: - condition: state entity_id: binary_sensor. Xyz- alias: "Repeat the sequence UNTIL the conditions are true" Repeat: sequence: # Run command that for some reason doesn't always work - service: shell_command. exe: #运行命令,但由于某些原因不能总是工作。turn_something_on #给它时间来完成- delay:毫秒:200直到:# Did it work?—condition:状态entity_id: binary_sensor。状态:“对”

直到也接受A.模板条件的简写符号.例如:

- repeat: until: "{{is_state('device_tracker. ');Iphone ', 'home')}}"序列:-…

重复循环变量

一个变量命名重复是在重复动作中定义的(即,它在序列直到。)它包含以下字段:

描述
第一个 在repeat序列的第一次迭代时为
指数 循环的迭代数:1,2,3,…
去年 在repeat序列的最后一次迭代期间为True,该值仅对已计数的循环有效

选择一组行动

此操作允许您从序列列表中选择其他操作序列。完全支持嵌套。

每个序列都与条件列表配对。(见条件页面获取可用选项,以及如何处理多个条件。)条件全部为真的第一个序列将被运行。一个可选默认的可以包含序列,只有当列表中的序列都不运行时才会运行序列。

一个可选别名可以添加到每个序列中,不包括默认的序列。

选择Action可以像if语句一样使用。第一个条件/序列Pair就像“if/then”,可以单独使用。或者可以添加额外的对,每对都像" elif/then "。最后,一个默认的可以添加,就像“else”一样。

#使用"if"自动化的例子:- trigger: - platform: state entity_id: binary_sensor动作到:“on”动作:—选择:—别名:“如果没人在家,发出警报!”条件:—条件:状态entity_id:组。Family state: not_home sequence: - service: script。警报数据:持续时间:60 -服务:亮。Turn_on target: entity_id: all
#使用"if"和"else"实现自动化:- trigger: - platform: state entity_id: binary_sensor。选择:# if运动检测到- alias: "运动检测到"条件:"{{trigger.to_state. "State == 'on'}}"Turn_on target: entity_id:—script。slowly_turn_on_front_lights——脚本。announce_someone_at_door # ELSE(即动作停止)默认:- service: light。关闭目标:entity_id: light.front_lights
#示例有“if”,“elif”和“else”自动化: - 触发器: - 平台:状态entity_id:input_boolean.simulate to:“开”模式:重新启动操作: - 选择:#如果早晨 - 条件: - 条件: - 条件: - 条件: - 条件: - 条件:模板value_template:“{{now()。小时<9}}”sequence: - 服务:strevist.sim_morning#elif日 - 条件: - 条件:模板value_template:“{{{now()。小时<18}}”序列: - 服务:Light.Turn_off目标:Entity_ID:Light.Living_Room  - 服务:script.sim_day#else night default:light.turn_off target:entity_id:light.kitchen  - 延迟:分钟:“{{{{{{{{{{{{{{{{{ression(1,11)|随机}}“ - 服务:Light.Turn_off目标:Entity_ID:全部

条件也接受A.模板条件的简写符号.例如:

自动化:—trigger:—platform: state entity_id: input_select。Home_mode动作:—选择:—条件:> {{trigger.to_state. log . log . log . log . log . log . log。is_state('binary_sensor. php ');All_clear ', 'on')}}序列:-服务:脚本。Arrive_home data: ok: true - conditions: > {{trigger.to_state。is_state('binary_sensor. php ');All_clear ', 'off')}}序列:-服务:脚本。Turn_on target: entity_id: script。Flash_lights服务:脚本。Arrive_home data: ok: false -条件:"{{触发器。state == 'Away'}}

更多的选择可以一起使用。这就是IF-IF的情况。

以下示例显示了单个自动化如何控制与彼此无关但具有共同触发器的实体。

当太阳低于地平线时,玄关花园必须开灯。如果有人在客厅看电视,很有可能有人在那个房间,因此客厅的灯也必须打开。同样的概念也适用于工作室房间。

#示例有“if”和“if”自动化: - 别名:“当太阳变暗时,转动灯,如果占用的某个房间被占用”触发器: - 平台:numeric_state entity_id:sun.sun属性:高度:4行动:4#这必须始终适用 - 服务:Light.Turn_On数据:亮度:255 color_temp:366目标:entity_id: -  light.porch  -  light.garden#如果一个实体正在开启 - 选择: - 条件: - 条件:状态entity_id:binary_sensor.livingroom_tv state: "on" sequence: - service: light.turn_on data: brightness: 255 color_temp: 366 target: entity_id: light.livingroom # IF another entity not related to the previous, is ON - choose: - conditions: - condition: state entity_id: binary_sensor.studio_pc state: "on" sequence: - service: light.turn_on data: brightness: 255 color_temp: 366 target: entity_id: light.studio
Baidu