脚本语法
脚本是动作在家庭助理的多个地方使用动作。必威是什么作为脚本或自动化的一部分,动作定义一旦激活触发器,将会发生什么。在脚本中,一个动作称为顺序。
[了解更多]该家庭助理必威是什么将执行。脚本可以通过独立作为实体获得
[了解更多]和
在自动化中执行脚本时扳机
可变量可用。看
脚本语法基本结构是包含操作的键/值映射的列表。如果脚本仅包含1个操作,则可以省略包装列表。
所有动作都支持可选的别名
。
#包含脚本语法的示例脚本集成脚本:example_script:顺序:#这是使用脚本语法编写的-别名:“转动在天花板光”服务:light.turn_on目标:ENTITY_ID:光线-别名:“通知那天花板光是转身在”服务:notify.notify数据:信息:“转身在这天花板光!”
致电服务
最重要的是调用服务的行动。这可以通过各种方式完成。对于所有不同的可能性,请看一下
-别名:“卧室灯在”服务:light.turn_on目标:ENTITY_ID:group.bedroom数据:亮度:100
激活场景
脚本还可以使用快捷方式语法激活场景,而不是调用scene.turn_on
服务。
-场景:scene.morning_living_room
变量
变量操作允许您设置/覆盖变量,这些变量将通过模板之后的模板访问。也可以看看
-别名:“放变量”变量:实体:-Light.Kitchen-light.living_room亮度:100-别名:“控制灯”服务:light.turn_on目标:ENTITY_ID:“{{实体}}””数据:亮度:“{{亮度}}””
变量可以被模板。
-别名:“放A模板多变的”变量:blind_state_message:“这瞎的是{{国家(“ cover.blind”)}}。”-别名:“通知关于这状态的这瞎的”服务:notify.mobile_app_iphone数据:信息:“{{blind_state_message}}””
变量范围
变量具有本地范围。这意味着,如果变量在嵌套序列块中更改,则该变化将在外部序列块中看到。
在 - 的里面如果
序列变量
动作只会改变人们
该序列可变。
顺序:#将变量设置为默认值-变量:人们:0#如果保卢斯在家,请尝试增加人们-如果:-状况:状态ENTITY_ID:device_tracker.paulus状态:“家”然后:#在此范围和序列的这一点上,人们== 0-变量:人们:“{{人们+1}}””#在此范围内,人们现在将是1 ...-服务:notify.notify数据:信息:“那里是{{人们}}}人们家”#“有1人家”#...但是在这个范围下它仍然是0-服务:notify.notify数据:信息:“那里是{{人们}}}人们家”#“有0人家”
测试条件
在执行脚本时,您可以在主序列中添加条件以停止进一步执行。当条件不返回时真的
,脚本将停止执行。有许多不同的条件在
这状况
动作仅停止执行当前序列块。当它在一个内部使用重复
循环将停止。当它在一个内部使用选择
会停止。
#如果保罗在家,请继续执行以下这些行的脚本-别名:“查看如果保卢斯是家”状况:状态ENTITY_ID:device_tracker.paulus状态:“家”
状况
也可以是条件的列表,而执行仅在所有条件返回时才继续真的
。
-别名:“查看如果保卢斯iShome和温度是以下20”状况:-状况:状态ENTITY_ID:“device_tracker.paulus”状态:“家”-状况:numeric_stateENTITY_ID:“传感器。以下:20
等待时间通过(延迟)
延迟对于暂时暂停您的脚本很有用并在以后的时刻开始。如下所示,我们支持延迟的不同语法。
#秒#等待5秒-别名:“等待5s”延迟:5
#HH:MM#等待1小时-延迟:“01:00”
#HH:MM:SS#等待1.5分钟-延迟:“00:01:30”
#支持毫秒,秒,分钟,小时,天数#可以组合使用,至少需要一个#等待1分钟-延迟:分钟:1
所有表格都接受模板。
#等待多分钟input_number.minute_delay设置为-延迟:“{{状态('input_number.minute_delay')|乘以(60)|int}}””
等待
这些操作允许脚本等待系统中的实体处于模板指定的某个状态,或者某些事件发生的某些事件如一个或多个触发器所示。
等待模板
此操作评估模板,如果为true,则脚本将继续。如果不是,那么它将等到它是真的。
每当它引用的实体ID更改状态时,该模板就会重新评估。如果您使用非确定性功能现在()
在模板中,它不会连续重新评估,而只有在更改引用的实体ID时才会进行重新评估。如果您需要定期重新评估模板,请从
#等到媒体播放器停止-别名:“等待直到媒体球员是停止”wait_template:“{{IS_STATE('Media_player.floor','停止')}}””
等待扳机
此操作可以使用自动化中可用的相同触发器扳机
部分。看
#等待自定义活动或灯光打开并保持10秒-别名:“等待为了my_event或者光在”WAIT_FOR_TRIGGER:-平台:事件事件类型:my_event-平台:状态ENTITY_ID:灯光到:“在”为了:10
等待超时
通过两种类型的等待,都可以设置超时,然后如果不满足条件/事件,则脚本将继续执行。超时具有与延迟
,喜欢延迟
,也接受模板。
#等待传感器更改为“ ON”最多1分钟,然后继续执行。-wait_template:“{{is_state('binary_sensor.entrance','在')}}””暂停:“00:01:00”
您还可以使用可选contine_on_timeout:false
。
#等待IFTTT事件或在指定超时后流产。-WAIT_FOR_TRIGGER:-平台:事件事件类型:iftt_webhook_receivedevent_data:行动:connected_to_network暂停:分钟:“{{超时_minutes}}””contine_on_timeout:错误的
没有contine_on_timeout:false
脚本将始终继续,因为默认contine_on_timeout
是真的
。
等待变量
每次等待完成之后,要么是因为情况已经满足条件,事件发生了,或者超时到期,变量等待
将创建/更新以指示结果。
多变的 | 描述 |
---|---|
wait.com已完成 |
只有之后才存在wait_template 。真的 如果情况满足,错误的 否则 |
等待。触发 |
只有之后才存在WAIT_FOR_TRIGGER 。包含有关触发的信息。(看没有任何 如果超时到期之前没有触发 |
等待 |
剩下超时,或没有任何 如果未指定超时 |
这可以根据是否满足条件来采取不同的操作,或者在整体实现单个超时时使用多个等待。
#根据是否满足条件采取不同的行动。-wait_template:“{{IS_STATE('Binary_sensor.door','在')}}””暂停:10-如果:-“{{不是wait.com已完成}}””然后:-服务:script.door_did_not_open别的:-服务:script.turn_on目标:ENTITY_ID:-script.door_did_open-script.play_fanfare#总共等待10秒。-wait_template:“{{IS_STATE('Binary_sensor.door_1','在')}}””暂停:10contine_on_timeout:错误的-服务:switch.turn_on目标:ENTITY_ID:switch.some_light-WAIT_FOR_TRIGGER:-平台:状态ENTITY_ID:binary_sensor.door_2到:“在”为了:2暂停:“{{等待}}””contine_on_timeout:错误的-服务:switch.turn_off目标:ENTITY_ID:switch.some_light
解雇活动
此操作使您可以解雇活动。事件可用于许多事情。它可能触发自动化或指示发生了什么事情正在发生的另一个集成。例如,在下面的示例中,它用于在日志中创建条目。
-别名:“火logbook_entry事件”事件:logbook_entryevent_data:姓名:保卢斯信息:正在醒来ENTITY_ID:device_tracker.paulus领域:光
您也可以使用Event_Data来发射具有自定义数据的事件。这可以用来将数据传递给另一个等待事件触发器的脚本。
这event_data
接受模板。
-事件:my_eventevent_data:姓名:myevent定制:“{{mycustomvaria}}””
提高和消费自定义活动
以下自动化示例显示了如何提出一个称为的自定义事件event_light_state_changed
和ENTITY_ID
作为事件数据。操作部分可以在脚本或自动化中。
-别名:“火事件”扳机:-平台:状态ENTITY_ID:switch.kitchen到:“在”行动:-事件:event_light_state_changedevent_data:状态:“在”
以下自动化示例显示了如何捕获自定义事件event_light_state_changed
与ENTITY_ID
当事件触发数据时通过,请参阅
-别名:“捕获事件”扳机:-平台:事件事件类型:event_light_state_changed行动:-服务:notify.notify数据:信息:“厨房光是转身{{trigger.event.data.state}}””
重复一组动作
此操作使您可以重复一系列其他动作。筑巢得到充分支撑。有三种方法可以控制序列将运行多少次。
计数重复
此表格接受计数值。该值可以由模板指定,在这种情况下,在达到重复步骤时呈现模板。
脚本:手电筒:模式:重新开始顺序:-服务:light.turn_on目标:ENTITY_ID:“光。{{光}}””-别名:“循环光'数数'时代”重复:数数:“{{计数| int*2-1}}””顺序:-延迟:2-服务:light.toggle目标:ENTITY_ID:“光。{{光}}””flash_hallway_light:顺序:-别名:“闪光门厅光3时代”服务:script.flash_light数据:光:门厅数数:3
每个
此重复表格接受迭代的项目列表。项目列表可以是预定义的列表,也可以是模板创建的列表。
该序列是针对列表中的每个项目运行的,并且迭代中的当前项目可用于重复项目
。
下面的示例将变成灯光列表:
重复:for_each:-“客厅”-“厨房”-“办公室”顺序:-服务:light.turn_off目标:ENTITY_ID:“光。{{重复项目}}””
其他类型被接受为列表项目,例如,每个项目都可以是模板,甚至可以是密钥/值对的映射。
重复:for_each:-语言:英语信息:你好世界-语言:荷兰信息:哈罗·韦尔德(Hallo Wereld)顺序:-服务:通知电话数据:标题:“信息在{{重复。语言}}””信息:“{{重复}}}!”
循环
此表格接受条件列表(请参阅
脚本:做一点事:顺序:-服务:script.get_ready_for_something-别名:“重复这顺序作为长的作为这状况是真的”重复:尽管:-状况:状态ENTITY_ID:input_boolean.do_something状态:“在”#不要做太多次-状况:模板value_template:“{{重复。索引<=20}}””顺序:-服务:脚本
这尽管
也接受
-重复:尽管:“{{is_state('sensor.mode','家')和重复。索引<10}}””顺序:-...
重复直到
此表格接受评估的条件列表后每次运行序列。因此,序列总是至少运行一次。序列将运行直到条件评估为true。
自动化:-扳机:-平台:状态ENTITY_ID:binary_sensor.xyz到:“在”状况:-状况:状态ENTITY_ID:binary_sensor.something状态:“离开”模式:单身的行动:-别名:“重复这顺序直到这状况是真的”重复:顺序:#运行命令出于某种原因并不总是有效-服务:shell_command.turn_something_on#给它时间完成-延迟:毫秒:200直到:#它可以工作吗?-状况:状态ENTITY_ID:binary_sensor.something状态:“在”
直到
也接受
-重复:直到:“{{IS_STATE('device_tracker.iphone','家')}}””顺序:-...
重复循环变量
一个命名的变量重复
在重复操作中定义(即,内部可用顺序
,,,,尽管
和直到
。)它包含以下字段:
场地 | 描述 |
---|---|
第一的 |
在重复序列的第一次迭代中为 |
指数 |
循环的迭代编号:1,2,3,… |
最后的 |
在重复序列的最后一次迭代期间,仅对计数循环有效 |
如果然后
此操作使您有条件地(如果
)执行一系列动作(然后
)并在条件未通过时可选地支持运行其他序列(别的
)。
脚本:-如果:-别名:“如果不一是家”状况:状态ENTITY_ID:区域状态:0然后:-别名:“然后开始打扫已经!”服务:真空目标:aket_id:客厅#“ else”是完全可选的,可以省略别的:-服务:notify.notify数据:信息:“跳过打扫,有人是家!”
但是,此操作支持筑巢,如果您发现自己在使用嵌套时,别的
部分,您可能需要考虑使用
选择一组动作
此操作使您可以从序列列表中选择其他动作序列。筑巢得到充分支撑。
每个序列与条件列表配对。(请参阅默认
可以包括序列,只有运行列表中的序列都没有运行,才能运行。
一个选修的别名
可以添加到每个序列中,不包括默认
顺序。
这选择
操作可以像“如果/then/elseif/then…/else”语句一样使用。首先状况
/顺序
一对就像“如果/then”,可以单独使用。或可以添加其他对,每对都像“ elif/then”。最后,一个默认
可以添加,就像“否则”。
#带有“ if”,“ elif”和“ else”的示例自动化:-扳机:-平台:状态ENTITY_ID:input_boolean.simulate到:“在”模式:重新开始行动:-选择:#如果早上-状况:-状况:模板value_template:“{{现在()。小时<9}}””顺序:-服务:script.sim_morning#Elif Day-状况:-状况:模板value_template:“{{现在()。小时<18}}””顺序:-服务:light.turn_off目标:ENTITY_ID:light.living_room-服务:script.sim_day#否则晚上默认:-服务:light.turn_off目标:ENTITY_ID:Light.Kitchen-延迟:分钟:“{{范围(1,11)|随机}}””-服务:light.turn_off目标:ENTITY_ID:全部
状况
也接受
自动化:-扳机:-平台:状态ENTITY_ID:input_select.home_mode行动:-选择:-状况:>{{trigger.to_state.state =='home'和IS_STATE('Binary_sensor.all_clear','on')}}}顺序:-服务:script.arrive_home数据:好的:真的-状况:>{{trigger.to_state.state =='home'和is_state('binary_sensor.all_clear','off')}}}顺序:-服务:script.turn_on目标:ENTITY_ID:script.flash_lights-服务:script.arrive_home数据:好的:错误的-状况:“{{trigger.to_state.state=='离开'}}””顺序:-服务:script.left_home
更多的选择
可以一起使用。if-if就是这种情况。
下面的示例显示了单个自动化如何控制与彼此无关但共同触发的实体。
当太阳在地平线以下时门廊
和花园
灯必须打开。如果有人在客厅里看电视,那么有人很有可能在那个房间里,因此客厅的灯光也必须打开。同样的概念适用于工作室
房间。
#带有“ if”和“ if”的示例自动化:-别名:“转动灯在什么时候这太阳得到暗淡和如果一些房间是占据”扳机:-平台:numeric_stateENTITY_ID:太阳属性:海拔以下:4行动:#这必须始终适用-服务:light.turn_on数据:亮度:255color_temp:366目标:ENTITY_ID:-Light.porch-Light.Garden#如果实体正在打开-选择:-状况:-状况:状态ENTITY_ID:binary_sensor.livingroom_tv状态:“在”顺序:-服务:light.turn_on数据:亮度:255color_temp:366目标:ENTITY_ID:灯光#如果另一个与上一个无关的实体正在打开-选择:-状况:-状况:状态ENTITY_ID:binary_sensor.studio_pc状态:“在”顺序:-服务:light.turn_on数据:亮度:255color_temp:366目标:ENTITY_ID:Light.Studio
并行操作
默认情况下,家庭助理中的所有操作序列顺序运行。必威是什么这意味着在当前动作完成后开始下一个动作。
例如,如果动作顺序不依赖彼此并且订单无关紧要,那么这并不总是需要。对于这些情况,平行线
动作可用于并行地以序列进行操作,这意味着所有动作均同时启动。
以下示例显示同时发送消息(并行):
自动化:-扳机:-平台:状态ENTITY_ID:binary_sensor.motion到:“在”行动:-平行线:-服务:notify.person1数据:信息:“这些消息是发送在这相同的时间!”-服务:notify.person2数据:信息:“这些消息是发送在这相同的时间!”
也可以在并行操作中依次运行一组动作。下面的示例表明:
脚本:example_script:顺序:-平行线:-顺序:-WAIT_FOR_TRIGGER:-平台:状态ENTITY_ID:binary_sensor.motion到:“在”-服务:notify.person1数据:信息:“这信息等待这运动扳机”-服务:notify.person2数据:信息:“我是发送立即地和做不是等待这多于行动!”
在许多情况下,并行运行动作可能会有所帮助,但要谨慎使用,并且只有在需要时才使用。
使用并行动作时,有一些警告(请参见下文)。
尽管在大多数情况下听起来并行化听起来很有吸引力,但只有常规顺序动作才能正常工作。
并行运行动作的一些警告:
- 没有订单保证。这些动作将并行启动,但不能保证它们将按照相同的顺序完成。
- 如果一个动作失败或错误,另一个动作将继续运行,直到它们也完成或错误为止。
- 在另一个并行操作中无法使用一个并行操作中创建/修改的变量。并行的每个步骤都有自己的范围。
停止脚本序列
任何时候都可以停止脚本序列。使用停止
行动。
这停止
动作将文本作为输入说明停止序列的原因。该文本将被记录并显示在自动化和脚本痕迹中。
停止
例如,如果不满足条件,则可以在序列中途停止脚本。
-停止:“停止跑步这休息的这顺序”
还有一个错误
选项,指示我们由于出乎意料的错误而停止。它也停止了序列,但是将自动化或脚本标记为无法运行的。
-停止:“出色地,那曾是意外!”错误:真的
继续错误
默认情况下,当该序列中的操作之一遇到错误时,将停止操作序列。自动化或脚本将停止,记录错误,并且自动化或脚本运行标记为错误。
有时候,这些错误是可以预期的,例如,因为您知道您致电的服务有时可能会出现问题,并且失败都没关系。您可以设置继续_on_error
对于这种行动的情况。
这继续_on_error
可在所有操作中可用,并设置为错误的
。您可以将其设置为真的
如果您想继续操作序列,那么无论该动作是否遇到错误。
下面的示例显示了继续_on_error
设置第一个动作。如果遇到错误;它将继续采取下一个动作。
-别名:“如果这一失败...”继续_on_error:真的服务:notify.super_unreliable_service_provider数据:信息:“我是去到错误出去...”-别名:“这一将要仍然跑步!”服务:persistent_notification.greate数据:标题:“你好那里!”信息:“我是美好的...”
请注意继续_on_error
不会抑制/忽略家庭助手无法处理的错误或错误。必威是什么
禁用行动
序列中的每个单独操作都可以禁用,而无需删除。为此,添加启用:false
采取行动。例如:
#带有禁用动作的示例脚本脚本:example_script:顺序:#由于禁用了此操作,因此不会运行。#该消息将不会发送。-启用:错误的别名:“通知那这天花板光是存在转身在”服务:notify.notify数据:信息:“转身在这天花板光!”#此操作将运行,因为它没有禁用-别名:“转动在这天花板光”服务:light.turn_on目标:ENTITY_ID:光线