标签:#<标签:0x00007FC41678BB08>

下列的这个链接,我在automation.yaml文件中创建了自动化。它在“检查配置”上给出了以下错误。所以我批发从线程复制了文本,并得到了相同的错误。

加载/config/configuration.yaml:扫描下一个令牌时,发现无法启动任何令牌的字符'%'

是否有任何地方解释了yaml文件的语法,具体如上所述,在报告以成功运行的上述线程的代码播种中观察到的以下内容:

  • 大于号是>
  • 百分号:%

这是我尝试的代码:

别名:p1_control触发器:platform:state entity_id:switch.shoff2动作: -  service_template:> {%if is_state('switch.sonoff2','on')%} switch.turn_on {%else is_state('switch.sonoff2','off')%} switch.turn_off {%ENDIF%} ENTITY_ID:switch.shoff

如果发现这个链接那有yaml信息。它没有提及%或>。和这个链接

我试过用或不用破折号“-”。我读到破折号后跟空格表示列表。我不知道为什么代码在动作部分有一个破折号。

文档中的第一个示例表明了>需要缩进之后的行。www.19463331.com看//www.sz-tiancheng.com/docs/configuration/template/

另外,切换不是更简单吗?

“>”表示多行模板。如果您只有一行模板,那么该模板必须被引号括起来。

所以你可以在技术上这样做:

- service_template:“{%if is_state('switch.sonoff2','on')%} switch.turn_on {%else is_state('switch.sonoff2','关闭')%} switch.turn_off {%Endif%}”

但那难以读到该死的。

因此,如果将其拆分为多行,那么您就会摆脱最外侧的引号,添加“>”然后跳转到下一行。

这是一个参考:

https://yaml-multiline.info/

您不会在Yaml引用中找到“%”,因为它是Jinja模板字符。

{%…%}是一个程序语句。这是你想让程序做一些事情(比较,设置等)的时候。

如果您使用{{...}},它是一个程序打印(或输出)。当您想要从模板中返回值(获取实际结果)时使用它。

这是一个参考:

http://jinja.pocoo.org/docs/2.10/templates/

2喜欢

感谢链接和评论。
我纠正了缩进错误(也许)。配置 - 立即检查如下读取。

它期望块直接结束在' if '单词之后。

看了链接,我不觉得有什么问题。是空格的数量——我确保每个子行有两个空格,等等。

是否应该有一些定义位于自动化之外的'service_template'的东西?如果是这样,我应该提供哪些编程?

为字典值@ data['action'][0]['service_template']设置无效模板(TemplateSyntaxError: expected token 'end of statement block', got 'is_state')。没有。(见/config/configuration.yaml,第18行)。请登录//www.sz-tiancheng.com/components/automation/查看相关文档

抱歉,请重新阅读最初的帖子。

有谁知道我可以在哪里找到上述错误的定义?
我没有看到语法错误。我可以从报告代码正确的线程中复制出来,我仍然收到此错误。

模板无效

你说你已经解决了你的缩进,但你没有发布你当前的代码。

上述错误的代码是

- 别名:p1_control触发器:platform:state entity_id:switch.shoff2操作:service_template:> {%if is_state('switch.sonoff2','上')%} switch.turn_on {%else is_state('switch.sonoff2','off')%} switch.turn_off {%ENDIF%} ENTITY_ID:switch.shoff

我也尝试了这个代码

—alias: p1_control trigger: platform: mqtt entity_id: stat/DVES_5A97C3_fb/power2 action: service_template: > {% if states('stat/DVES_5A97C3_fb/power2', 'on') %} switch。turn_on {% else状态('stat/DVES_5A97C3_fb/power2', 'off') %}开关。turn_off {% endif %} entity_id: cmnd/DVES_5A97C3_fb/power1

得到这个错误,但我认为开关。Turn_on /off应该是某种MQTT消息。

无效的[自动化]:[Entity_ID]是[自动化]的无效选项。检查:自动化 - >触发 - > 0-> Entity_ID。(见/config/configuration.yaml,第18行)。请登录//www.sz-tiancheng.com/components/automation/查看相关文档

我的Config Yaml文件仍然是安装时创建的默认值哈斯,如下:

#配置主助手(Frontend,API,etc)default19463331伟德国际_config:#示例configuration.yaml条目#mqtt:#discovery:true#discovery_prefix:homeassistant#如果使用ssl / tls,则在docker容器中运行,#tttp:#base_url:example.duckdns.org:8123#文本到语音tts: - 平台:google_translate group:!包括groups.yaml自动化:!包括automations.yaml脚本:!包括scripts.yaml

尝试(注意最后一个“Entity_ID”行的不同缩进级别):

- 别名:p1_control触发器:platform:state entity_id:switch.shoff2操作:service_template:> {%if is_state('switch.sonoff2','上')%} switch.turn_on {%else is_state('switch.sonoff2','off')%} switch.turn_off {%ENDIF%} ENTITY_ID:switch.shoff

通常情况下,如果没有模板,action部分中只有一个服务,你会这样写acrtion部分:

操作:service: some_service entity_id: some_entity

在这种情况下,服务和Entity_ID的缩进级别是相同的。

如果您在该操作中有多个服务调用,那么您必须将服务转换为列表:

操作:—service: some_service entity_id: some_entity—service: some_other_service entity_id: some_othr_entity

然后在这些情况下,entity_id被缩进比服务调用低一级。

在您的情况下,缩进级别与上面的第一个类似,即使您的服务调用在多行上。

如果你尝试上述所有的代码,它应该工作(希望…)。

一个交换机控制另一个交换机的状态:

- 别名:p1_control触发器:platform:state entity_id:switch.shoff2操作:service_template:'switch.turn _ {{trigger.to_state.state}'entity_id:switch.shoff

有限公司:
谢谢。这不起作用。它给出了相同的错误。我认为必须在使用前定义一个模板,但可能为此定义,Word模板只是在讲述哈斯以下代码线按照自己的格式遵循?

所以我能让下面工作。
我可以从sonoff的控制页面切换sonoff2,但自动化不会启动。我想这意味着扳机不起作用了。
我可以击中触发按钮哈斯UI并打开开关。但是,无论Sonoff2的状态如何,它都会开启。下面的代码块,我认为,如果SOOOFF也在ON。所以那里有问题。

- 别名:p1_control触发器:platform:state entity_id:switch.shoff2 action:service_template:> {%if is_state('switch.sonoff2','on')cwitch.turn_on {%Endif%} Entity_ID:switch.shoff

如果我放入else语句,那么我以前遇到了相同的错误。我相信我有缩进正确。我试过缩进以不同地看待任何变化。

{%else is_state('switch.sonoff2','关闭')%} switch.turn_off

123塔拉斯:
类似于我的财务帖子,您的建议通过配置检查。
但是,当Sonoff2正在开启时,Sonoff不会打开。也没有关闭等等。
我可以单击触发按钮哈斯UI和它将打开sonoff,不管sonoff的状态2。

我算出了误差。我第一次完全忽略了它。模板中的" else "语句不应该寻找真/假。它已经被调用了,因为第一个if语句已经确定它是假的。

试试这个:

—alias: p1_control trigger: platform: state entity_id: switch。Sonoff2 action: service_template: > {% if is_state('switch. db_state ');Sonoff2 ', 'on') %}开关。Turn_on {% else %}开关。Turn_off {% endif %} entity_id: switch.sonoff

另外,你对自动化的看法是错误的。

您正在使用自动化来控制Switch.Sonoff的状态,基于Switch.SOFOFF2状态的变化而不是其他方式。

sonoff不关心它的状态如果它是独立于sonoff2运行的。你可以关闭和关闭一整天,将愉快地开关状态,不管sonoff2的状态。然而,如果您关闭sonoff2,那么sonoff将遵循它的状态,因为它触发了自动化。

然后,我很遗憾地说,要么是在将自动化转录到您的系统时犯了错误,要么是测试有缺陷。我已经无数次成功地使用了它,我也向其他成功地使用它的人建议过它;它的工作。

它的service_template省略了if-else,并利用了触发器对象的有用性:

{{trigger.to_state.state}}
  • 如果switch.sonoff2.更改状态,它触发了自动化和service_template附录switch.turn_去创造switch.turn_on对于Entity_id.switch.sonoff.
  • 什么时候switch.sonoff2.更改状态离开,它调用服务switch.turn_off为了switch.sonoff..十分简单。
- 别名:p1_control触发器:platform:state entity_id:switch.shoff2操作:service_template:'switch.turn _ {{trigger.to_state.state}'entity_id:switch.shoff

FWIW,如果您尝试手动触发此自动化(例如使用该服务,则FWIW自动化.Trigger.通过服务页面)。完成后,触发对象未定义,操作将失败。

123塔拉斯
我能够努力工作,并与From_State一起,这就是我的真实。

你在非ui自动化中使用过这个吗?我假设答案是肯定的,但是想要确认一下,如果编码是一样的。在其他一些线程中,我收到关于UI和非UI自动化有显著不同的警告,并可能决定放弃UI路径。

谢谢您的帮助。

有限公司:
修复else语句已通过传递配置检查,我可以获得此代码也可以工作。我也证实,Entity_ID的缩进线将杀死它。
谢谢您的帮助!!

还有一个问题-与我的代码问题无关,但再次强调,为什么要用“模板”这个词?这似乎是用词不当。它本质上就是代码。没有预定的模式(模板)必须遵循。还是我遗漏了什么?

???

这将成为第二个开关的状态相反第一个开关的状态。

SW1从离开
使用from_state创建的模板:switch.turn_对于SW2.
SW2的状态(开)现在与SW1的状态(关)相反

SW1从离开
使用from_state创建的模板:switch.turn_离开对于SW2.
SW2的状态(关)现在与SW1的国家相反(开)

如果这是你真的的真实,那么之前没有提到过。: man_shrugging:

自动化就是自动化。它可能会影响在Lovelace UI中暴露的实体,也可能不会。这取决于自动化的内容。

这是什么所谓的“警告UI和非UI自动化有很大的不同?


编辑
由nickrout澄清。你说的是使用家庭助手19463331伟德国际自动化编辑器vs文本编辑器(如Visual Studio代码或原子,或Notepad ++或等)。

我认为他意味着通过GUI VS编写yaml编写自动化。

1就像

在这种情况下,有一个重要的缺失词:

您是否在非UI自动化中使用过编辑

答案是肯定的,因为Home Assistant的自动化编辑器有局限性。19463331伟德国际