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
页: 1 2 3 4 5 6 7 [8] 9 10 11 12 13 14 15 16 17
查看完整版本: Node Red系列教程之三 实现Node Red与Home Assistant之间的联动