s1111
发表于 2018-5-19 06:39:44
感谢楼主费心:D
lihuihz
发表于 2018-5-21 12:12:45
不感谢回复可见
PAUL
发表于 2018-5-22 09:49:14
感谢大神的细心讲解
潇洒哥er
发表于 2018-5-24 11:08:51
alei643
大佬,我在用node-red的时候发现一个很奇怪的问题,关于服务调用的
比如我要博联发送几个红外码给电视 ,我就扯了几个ha call service的node 然后连接在一起,每条node间都要用delay 延时功能。
但发现第一个博联发红外的码执行了好几次(后面有多少个call service的node就执行几次)。就算在博联发送红外的node后面连接了其它的call service node也是都重复这个博联的node 。压根就不会正常运行。
打开脚本也是这样,如果设置的是 turn_on service的node的话,后面所有的节点都会变成执行这个打开脚本的服务。
不知你是否碰到过呢?
alei643
发表于 2018-5-24 17:40:52
潇洒哥er 发表于 2018-5-24 11:08
alei643
大佬,我在用node-red的时候发现一个很奇怪的问题,关于服务调用的
比如我要博联发送几个红外码给 ...
不太明白你说的意思,最好贴上Node代码让我帮你看看。我也用博联、HA、天猫精灵配合Node Red做了一些自动化控制,比如家里的功放,投影仪,窗帘。用的是433和红外码,遇过遥控码发出去,设备未动作的情况,延长了发射遥控码的间隔时间就再没出过问题了。
潇洒哥er
发表于 2018-5-24 23:29:28
本帖最后由 潇洒哥er 于 2018-5-24 23:32 编辑
@alei643
大佬,我大概描述一下,请看我的node ,我本意是想利用博联发送红码关闭电视屏幕,延时5秒后再关闭电视的插座。事实上用ha的脚本没问题,但用node-red做成这样的流程后。我发现每次触发时,后面那个 关闭电视插座并没执行,反倒是再次执行了一次 发送红外码。相当于流程变成 发送红外码-延时5秒-发送红外码了,无论我延时多久都无效。 而且我发现,把发送红码这条服务改成调用turn_on script的node时,后面也会再执行一次。我确保这些node单独触发都可以正常运行并响应。
以下是 我的node代码
潇洒哥er
发表于 2018-5-24 23:31:58
```
[
{
"id": "c6bbb0bd.83367",
"type": "api-call-service",
"z": "65084150.59b5d",
"name": "发送红外码",
"server": "9bde6c12.55545",
"service_domain": "switch",
"service": "broadlink_send_packet_10_0_0_44",
"data": "{\"packet\":\"sdfsfsJJJJJ\"}",
"mergecontext": "",
"x": 210,
"y": 220,
"wires": [
[
"2e3818a3.579958"
]
]
},
{
"id": "b36b666e.a174e8",
"type": "api-call-service",
"z": "65084150.59b5d",
"name": "关闭电视插座",
"server": "9bde6c12.55545",
"service_domain": "switch",
"service": "turn_off",
"data": "{\"entity_id\":\"switch.tv\"}",
"mergecontext": "",
"x": 560,
"y": 220,
"wires": [
[]
]
},
{
"id": "abde1a99.1e8a08",
"type": "inject",
"z": "65084150.59b5d",
"name": "",
"topic": "",
"payload": "",
"payloadType": "date",
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"x": 80,
"y": 160,
"wires": [
[
"c6bbb0bd.83367"
]
]
},
{
"id": "2e3818a3.579958",
"type": "delay",
"z": "65084150.59b5d",
"name": "",
"pauseType": "delay",
"timeout": "5",
"timeoutUnits": "seconds",
"rate": "1",
"nbRateUnits": "1",
"rateUnits": "second",
"randomFirst": "1",
"randomLast": "5",
"randomUnits": "seconds",
"drop": false,
"x": 380,
"y": 220,
"wires": [
[
"b36b666e.a174e8"
]
]
},
{
"id": "9bde6c12.55545",
"type": "server",
"z": "",
"name": "HA",
"url": "http://hassio/homeassistant",
"pass": "mypassword
}
]
```
alei643
发表于 2018-5-25 19:38:23
潇洒哥er 发表于 2018-5-24 23:31
```
[
::dizzy:这么贴代码导入不到Node Red里面啊,帖纯文本就行了。我看了上面的写的,逻辑上没问题啊,我也是这么用的,没发现有问题呢。触发的node我用的是HA的events state,当功放的开关打开时,HA产生功放开的事件,Node Red通过这个事件联动打开投影仪和机顶盒。关闭也是如此。看你的Node流程,Inject用的虚拟按键啊,你没点一次Inject前面的虚拟按键,仅会触发一次后面的Node。时间戳的插件,如果你没使用重复触发的参数,应该不可能重复出现调用HA的Call Service服务。
潇洒哥er
发表于 2018-5-25 20:47:24
alei643 发表于 2018-5-25 19:38
:这么贴代码导入不到Node Red里面啊,帖纯文本就行了。我看了上面的写的,逻辑上没问题啊,我也是 ...
是的,真实场景的确是stage 触发才运行node的,我这里用inject是测试,没设置定时。
您可以试试第一个node用script 然后第二个node用其他service吗? 比如input_boolean的toggle 一个组件。看看script 会不会执行两次而toggle那个却不会执行?
潇洒哥er
发表于 2018-5-25 20:49:57
而且只要出现连续执行两次的情况后ha的响应就变慢了,会出现 timer got out of sync ,reseting