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

 找回密码
 立即注册
查看: 7529|回复: 10

[求助] 请问nodered中能不能将两个输出的消息合并?

[复制链接]

1

主题

2

帖子

23

积分

新手上路

Rank: 1

积分
23
金钱
21
HASS币
0
发表于 2019-2-19 17:33:21 | 显示全部楼层 |阅读模式
我想使用nodered来制作一个控制物联网空调的界面。
我用一个dropdown来选择模式,用一个slide来选择温度。

我的思路是这样的:模式选择的输出为H、C、A;分别代表制热制冷和自动。
温度的输出则是16-30之间的整数。
然后将两个输出连接起来(比如制热26度就是H26;制冷18度就是C18)发送到MQTT服务器来进行控制。

问题就是。。。请问如何把dropdown的输出和slide的输出连接起来呢?是用function吗?该如何操作?
QQ截图20190217211221.jpg
QQ截图20190217211214.jpg
QQ截图20190217211202.jpg
回复

使用道具 举报

40

主题

3057

帖子

1万

积分

超级版主

Nero

Rank: 8Rank: 8

积分
11135
金钱
8028
HASS币
182
发表于 2019-2-19 17:44:18 | 显示全部楼层
join节点了解下
Nero
回复

使用道具 举报

1

主题

2

帖子

23

积分

新手上路

Rank: 1

积分
23
金钱
21
HASS币
0
 楼主| 发表于 2019-2-19 19:51:25 | 显示全部楼层

有大佬给过我这个建议  但是不能完美地解决。。
QQ截图20190219195057.jpg
回复

使用道具 举报

40

主题

3057

帖子

1万

积分

超级版主

Nero

Rank: 8Rank: 8

积分
11135
金钱
8028
HASS币
182
发表于 2019-2-20 08:19:15 | 显示全部楼层
人生需要奔放66 发表于 2019-2-19 19:51
有大佬给过我这个建议  但是不能完美地解决。。

你要想清楚逻辑是怎么做的,join只是做消息结合

node-red的ui我没用过
Nero
回复

使用道具 举报

5

主题

92

帖子

1034

积分

金牌会员

Rank: 6Rank: 6

积分
1034
金钱
942
HASS币
0
发表于 2020-3-25 10:07:13 | 显示全部楼层
本帖最后由 johnnyit 于 2020-3-25 10:10 编辑

使用join配合代码可以完美解决。示例:
1585101883409.jpg

[{"id":"1d46653.604e69b","type":"tab","label":"流程1","disabled":false,"info":""},{"id":"b7d30c66.c3d7","type":"inject","z":"1d46653.604e69b","name":"","topic":"","payload":"开始","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":90,"y":1040,"wires":[["81f18e10.92c77","7dfee0ca.464ad","8b6a66ef.3f81b8"]]},{"id":"7dfee0ca.464ad","type":"change","z":"1d46653.604e69b","name":"开机","rules":[{"t":"set","p":"payload1","pt":"msg","to":"0001","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":250,"y":1000,"wires":[["4849658d.b57eac"]]},{"id":"81f18e10.92c77","type":"change","z":"1d46653.604e69b","name":"温度","rules":[{"t":"set","p":"payload3","pt":"msg","to":"0003","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":250,"y":1120,"wires":[["4849658d.b57eac"]]},{"id":"8b6a66ef.3f81b8","type":"change","z":"1d46653.604e69b","name":"风速","rules":[{"t":"set","p":"payload2","pt":"msg","to":"0002","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":250,"y":1060,"wires":[["4849658d.b57eac"]]},{"id":"23b9d530.9a3e8a","type":"debug","z":"1d46653.604e69b","name":"","active":true,"tosidebar":true,"console":true,"tostatus":false,"complete":"payload","targetType":"msg","x":480,"y":1260,"wires":[]},{"id":"4849658d.b57eac","type":"function","z":"1d46653.604e69b","name":"合并输出","func":"//var ac =['0','0','0','0','0','0','0','0','0'];\n//var msg1 = { payload:msg.payload1 };\n//var msg2 = { payload:msg.payload2 };\n//var msg3 = { payload:msg.payload3 };\n//var msg4 = { payload:msg.payload4 };\n//var msg5 = { payload:msg.payload5 };\n//var msg6 = { payload:msg.payload6 };\n//var msg7 = { payload:msg.payload7 };\n//var msg8 = { payload:msg.payload8 };\n//var msg9 = { payload:msg.payload9 };\nvar ac =[];\n\nvar lst = [msg.payload1, msg.payload2,msg.payload3];\nvar s1 = lst.join(); \n//for (x in msg)\n//{\n//    data = s1+s1;\n    \n//}\nreturn { payload:s1};\n//return msg;","outputs":1,"noerr":0,"x":440,"y":1060,"wires":[["4f295d7f.a465f4"]]},{"id":"4f295d7f.a465f4","type":"join","z":"1d46653.604e69b","name":"","mode":"custom","build":"array","property":"payload","propertyType":"msg","key":"topic","joiner":"","joinerType":"str","accumulate":false,"timeout":"","count":"3","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"","reduceFixup":"","x":450,"y":1140,"wires":[["c8ab7c03.2e19f","23b9d530.9a3e8a"]]},{"id":"c8ab7c03.2e19f","type":"function","z":"1d46653.604e69b","name":"参数转换","func":"var data=''\nfor (x in msg.payload)\n{\n    \n    ms1= msg.payload[x]\n    \n    //for (y in ms1)\n    //{\n\n    //data = ms1.split(",")\n    //}\n\n    data = ms1.split(",")\n    \n    \n    if (data[0].length)\n    {\n        arr0=data[0]\n    }\n    \n    if (data[1].length)\n    {\n        arr1=data[1]\n    }\n        \n    if (data[2].length)\n    {\n        arr2=data[2]\n    }\n\n\n\n    \n}\nvar das= arr0+arr1+arr2;\n//var das= arr5\n\nreturn { payload:das};\n","outputs":1,"noerr":0,"x":460,"y":1200,"wires":[["23b9d530.9a3e8a"]]}]



回复

使用道具 举报

32

主题

302

帖子

1732

积分

金牌会员

Rank: 6Rank: 6

积分
1732
金钱
1425
HASS币
40
发表于 2020-5-26 14:36:27 | 显示全部楼层
看看流程
回复

使用道具 举报

4

主题

136

帖子

707

积分

高级会员

Rank: 4

积分
707
金钱
571
HASS币
0
发表于 2020-12-23 13:16:06 | 显示全部楼层
johnnyit 发表于 2020-3-25 10:07
使用join配合代码可以完美解决。示例:

不知道为什么,代码无法导入
回复

使用道具 举报

7

主题

56

帖子

296

积分

中级会员

Rank: 3Rank: 3

积分
296
金钱
240
HASS币
0
发表于 2020-12-30 16:32:56 | 显示全部楼层
johnnyit 发表于 2020-3-25 10:07
使用join配合代码可以完美解决。示例:

如果是需要3个平行的节点(开机、风速、温度)都收到消息后才,合并输出的节点才往下继续,要怎么设置?
回复

使用道具 举报

5

主题

92

帖子

1034

积分

金牌会员

Rank: 6Rank: 6

积分
1034
金钱
942
HASS币
0
发表于 2020-12-31 18:35:56 | 显示全部楼层
discuz 发表于 2020-12-30 16:32
如果是需要3个平行的节点(开机、风速、温度)都收到消息后才,合并输出的节点才往下继续,要怎么设置? ...

3个平行的节点 分别作为一个触发动作吗?
这样的场景建议使用web端接收每次触发的数据,进行存储。
后端接收完毕三组数据后,输出结果。
nodered 作为最后刷新web地址,获取完整三组数据后执行指令,并清空web端数据(web端设置数据过期时间)
原因:由于平行节点均作为触发动作,nodered是无法记录上组动作返回结果。因此要借助第三方存储数据实现。
回复

使用道具 举报

7

主题

56

帖子

296

积分

中级会员

Rank: 3Rank: 3

积分
296
金钱
240
HASS币
0
发表于 2020-12-31 23:29:50 | 显示全部楼层
johnnyit 发表于 2020-12-31 18:35
3个平行的节点 分别作为一个触发动作吗?
这样的场景建议使用web端接收每次触发的数据,进行存储。
后端 ...

谢谢!明白了,光靠节点是无法完成的,分开的节点,只要有一个数据往下传递,后面的收到后也会接着往下传,除非在某一个节点里获取到三个数据了再往下传
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-4-26 07:32 , Processed in 0.059541 second(s), 40 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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