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

 找回密码
 立即注册
查看: 1339|回复: 11

[技术探讨] 关于自动化,向Node RED大佬求助

[复制链接]

9

主题

45

帖子

567

积分

高级会员

Rank: 4

积分
567
金钱
522
HASS币
0
发表于 2024-5-30 09:22:18 | 显示全部楼层 |阅读模式
本帖最后由 aca 于 2024-5-30 11:59 编辑

自动化编写遇到两个问题:

1)当我使用current_state节点获取设备状态的时候经常发生一些错误(如下),手动测试的情况下有时候需要4-5次才可以正确获得数据(而触发只执行一次)。除了反复执行,有没有其他方法,我担心反复执行会影响后续的流程(抑或出错后后续流程不会反复执行)
InputError: Entity could not be found in cache for entityId
"NoConnectionError: NoConnectionError"

2)我准备做一个旋钮,每次能把灯的亮度调亮“一点儿”,我看主流的做法是通过函数获取当前亮度再将增加后的亮度重新传送给灯。有没有更加直接的方法,通过call service节点下方的“数据表达式”或“{}JSON”来实现?比如brightness=brightness+20
1717032103326.jpg

请大佬指导,先谢过了
回复

使用道具 举报

3

主题

135

帖子

2021

积分

金牌会员

Rank: 6Rank: 6

积分
2021
金钱
1886
HASS币
0
发表于 2024-5-30 13:29:50 | 显示全部楼层
1,NoConnectionError: 刚刚部署完node red,要稍等十来秒,看你设备速度,不然就会显示连接错误。连上以后就不会了。
2. 数据表达式,那个位置是可以写亮度信息的,比如   {"brightness_pct": "50"}     , 是把亮度调到50%,如果是1-255那种,就用 brightness。
   这里后面不建议直接调用原始亮度,可能出错。 还是在前面加一个funtion,获取原始亮度值,保存到payload,然后 后面的data 这么写  {"brightness_pct": msg.payload + 10},就是亮度增加10。
   当然严谨一点还要判断是否大于100,要设定最大100,{"brightness_pct": $min([msg.payload + 10, 100]) }。
希望有用。

评分

参与人数 1金钱 +1 收起 理由
fay000fay + 1 大神666!

查看全部评分

回复

使用道具 举报

11

主题

304

帖子

1635

积分

金牌会员

Rank: 6Rank: 6

积分
1635
金钱
1331
HASS币
0
发表于 2024-5-30 13:30:04 | 显示全部楼层
本帖最后由 fay000fay 于 2024-5-30 13:31 编辑

等大佬............................
回复

使用道具 举报

11

主题

304

帖子

1635

积分

金牌会员

Rank: 6Rank: 6

积分
1635
金钱
1331
HASS币
0
发表于 2024-5-30 13:39:00 | 显示全部楼层
zfgjy2005 发表于 2024-5-30 13:29
1,NoConnectionError: 刚刚部署完node red,要稍等十来秒,看你设备速度,不然就会显示连接错误。连上以 ...

有个问题,function获取原始亮度值的时候,上一节点的灯的状态是关闭,则brightness值为null,获取不到的吧。
回复

使用道具 举报

9

主题

45

帖子

567

积分

高级会员

Rank: 4

积分
567
金钱
522
HASS币
0
 楼主| 发表于 2024-5-30 13:39:03 | 显示全部楼层
看来还是我太着急了,我想这个出错率太高了。谢谢大佬!!
回复

使用道具 举报

9

主题

45

帖子

567

积分

高级会员

Rank: 4

积分
567
金钱
522
HASS币
0
 楼主| 发表于 2024-5-30 13:47:45 | 显示全部楼层
我弄了个涂鸦zigbee的旋钮,原本想通过旋钮调节灯的亮度和窗帘开闭,现在获取旋钮步进成功了,但是卡在了后面控制上:一则太着急,以为获取当前设备的亮度错误率很高,再一则我全局变量还用不来(把旋钮步进和当前亮度加总起来实现调节,中间有一个获取当前亮度的节点,参数传不过来),最终只实现了简单的开关。再次感谢
回复

使用道具 举报

3

主题

135

帖子

2021

积分

金牌会员

Rank: 6Rank: 6

积分
2021
金钱
1886
HASS币
0
发表于 2024-5-30 13:48:59 | 显示全部楼层
fay000fay 发表于 2024-5-30 13:39
有个问题,function获取原始亮度值的时候,上一节点的灯的状态是关闭,则brightness值为null,获取不到的 ...

你说的没错。简单粗暴做法就是获取为null时,自定义一个亮度值,比如10。
或者用flow.set ,  把亮度值保存一下,然后如果是null时,不保存这个值。这样后面 flow.get 一下获取那个值。

我因为是从最开始没用HA的时候过来的,所以我的node red 里面所有的灯,都自己保存了亮度值。

谢谢提醒
回复

使用道具 举报

11

主题

304

帖子

1635

积分

金牌会员

Rank: 6Rank: 6

积分
1635
金钱
1331
HASS币
0
发表于 2024-5-30 13:51:25 | 显示全部楼层
作个参考。

flows.rar

1.08 KB, 下载次数: 7

回复

使用道具 举报

11

主题

304

帖子

1635

积分

金牌会员

Rank: 6Rank: 6

积分
1635
金钱
1331
HASS币
0
发表于 2024-5-30 13:57:14 | 显示全部楼层
zfgjy2005 发表于 2024-5-30 13:48
你说的没错。简单粗暴做法就是获取为null时,自定义一个亮度值,比如10。
或者用flow.set ,  把亮度值保 ...

我弄了个粗暴的方法,先call service开灯-current event填上if is "on"-出现两个条件,一个为on,一个为false-on连接function(因为只有null才会false)
回复

使用道具 举报

3

主题

135

帖子

2021

积分

金牌会员

Rank: 6Rank: 6

积分
2021
金钱
1886
HASS币
0
发表于 2024-5-30 14:00:15 | 显示全部楼层
fay000fay 发表于 2024-5-30 13:57
我弄了个粗暴的方法,先call service开灯-current event填上if is "on"-出现两个条件,一个为on,一个为fa ...

也是个好办法。
看来这块思考了也很多
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-24 22:33 , Processed in 0.058653 second(s), 35 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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