『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
楼主: alei643

[教程系列] Node Red系列教程之三 实现Node Red与Home Assistant之间的联动

  [复制链接]

0

主题

168

帖子

1650

积分

金牌会员

Rank: 6Rank: 6

积分
1650
金钱
1482
HASS币
0
发表于 2018-5-19 06:39:44 | 显示全部楼层
感谢楼主费心
回复

使用道具 举报

0

主题

63

帖子

430

积分

论坛积极会员

积分
430
金钱
367
HASS币
0
发表于 2018-5-21 12:12:45 | 显示全部楼层
不感谢回复可见
回复

使用道具 举报

11

主题

178

帖子

1561

积分

金牌会员

Rank: 6Rank: 6

积分
1561
金钱
1383
HASS币
0
发表于 2018-5-22 09:49:14 | 显示全部楼层
感谢大神的细心讲解
回复

使用道具 举报

12

主题

545

帖子

2035

积分

金牌会员

Rank: 6Rank: 6

积分
2035
金钱
1490
HASS币
0
发表于 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的话,后面所有的节点都会变成执行这个打开脚本的服务。

不知你是否碰到过呢?
回复

使用道具 举报

23

主题

629

帖子

4336

积分

元老级技术达人

积分
4336
金钱
3692
HASS币
30

教程狂人

QQ
 楼主| 发表于 2018-5-24 17:40:52 | 显示全部楼层
潇洒哥er 发表于 2018-5-24 11:08
alei643
大佬,我在用node-red的时候发现一个很奇怪的问题,关于服务调用的
比如我要博联发送几个红外码给 ...

不太明白你说的意思,最好贴上Node代码让我帮你看看。我也用博联、HA、天猫精灵配合Node Red做了一些自动化控制,比如家里的功放,投影仪,窗帘。用的是433和红外码,遇过遥控码发出去,设备未动作的情况,延长了发射遥控码的间隔时间就再没出过问题了。
回复

使用道具 举报

12

主题

545

帖子

2035

积分

金牌会员

Rank: 6Rank: 6

积分
2035
金钱
1490
HASS币
0
发表于 2018-5-24 23:29:28 | 显示全部楼层
本帖最后由 潇洒哥er 于 2018-5-24 23:32 编辑

@alei643

大佬,我大概描述一下,请看我的node ,我本意是想利用博联发送红码关闭电视屏幕,延时5秒后再关闭电视的插座。事实上用ha的脚本没问题,但用node-red做成这样的流程后。我发现每次触发时,后面那个 关闭电视插座并没执行,反倒是再次执行了一次 发送红外码。相当于流程变成 发送红外码-延时5秒-发送红外码了,无论我延时多久都无效。 而且我发现,把发送红码这条服务改成调用turn_on script的node时,后面也会再执行一次。我确保这些node单独触发都可以正常运行并响应。
屏幕快照 2018-05-24 23.23.35.png
以下是 我的node代码
回复

使用道具 举报

12

主题

545

帖子

2035

积分

金牌会员

Rank: 6Rank: 6

积分
2035
金钱
1490
HASS币
0
发表于 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
    }
]


回复

使用道具 举报

23

主题

629

帖子

4336

积分

元老级技术达人

积分
4336
金钱
3692
HASS币
30

教程狂人

QQ
 楼主| 发表于 2018-5-25 19:38:23 | 显示全部楼层

:这么贴代码导入不到Node Red里面啊,帖纯文本就行了。我看了上面的写的,逻辑上没问题啊,我也是这么用的,没发现有问题呢。触发的node我用的是HA的events state,当功放的开关打开时,HA产生功放开的事件,Node Red通过这个事件联动打开投影仪和机顶盒。关闭也是如此。看你的Node流程,Inject用的虚拟按键啊,你没点一次Inject前面的虚拟按键,仅会触发一次后面的Node。时间戳的插件,如果你没使用重复触发的参数,应该不可能重复出现调用HA的Call Service服务。
回复

使用道具 举报

12

主题

545

帖子

2035

积分

金牌会员

Rank: 6Rank: 6

积分
2035
金钱
1490
HASS币
0
发表于 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那个却不会执行?
回复

使用道具 举报

12

主题

545

帖子

2035

积分

金牌会员

Rank: 6Rank: 6

积分
2035
金钱
1490
HASS币
0
发表于 2018-5-25 20:49:57 来自手机 | 显示全部楼层
而且只要出现连续执行两次的情况后ha的响应就变慢了,会出现 timer got out of sync ,reseting
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-4-24 15:13 , Processed in 0.103256 second(s), 34 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表