请教一个关于nodered的问题

“秋风”吹来的板块,只要不恶意捣乱,随意~~~
人生需要奔放66
帖子: 4
注册: 周二 2月 12, 2019 4:34 pm

请教一个关于nodered的问题

帖子人生需要奔放66 » 周日 2月 17, 2019 9:13 pm

我想使用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
您没有权限查看这个主题的附件。
头像
max
帖子: 117
注册: 周六 3月 14, 2015 10:57 am

Re: 请教一个关于nodered的问题

帖子max » 周日 2月 17, 2019 11:25 pm

可以使用join节点,我做了一个示例,导入到node-red中就知道怎么用了。

把两个控制node连入join,然后设置手动join,把连接符设为空,结束条件是两个消息,就可以把它们连起来了。

注意,这种操作方式对实际使用有一些限制,如果slide连续拖动会发送多条消息,这样连接起来的会是两条slide的值,或者连续点工作模式也会类似;
如果希望准确可以考虑添加一个发送按钮,在这个按钮中发送join结束消息,这样会更加可靠。

代码: 全选

[{"id":"baa3b8e5.caa928","type":"ui_dropdown","z":"eb5556d4.3fc348","name":"","label":"","place":"Select option","group":"874f76b0.846cb8","order":0,"width":0,"height":0,"passthru":true,"options":[{"label":"A","value":"A","type":"str"},{"label":"B","value":"B","type":"str"},{"label":"C","value":"C","type":"str"}],"payload":"","topic":"","x":240,"y":260,"wires":[["de1bd277.54b91"]]},{"id":"3a729186.a487ee","type":"ui_slider","z":"eb5556d4.3fc348","name":"","label":"slider","group":"874f76b0.846cb8","order":0,"width":0,"height":0,"passthru":true,"topic":"","min":"1","max":10,"step":1,"x":250,"y":360,"wires":[["de1bd277.54b91"]]},{"id":"f86127da.af9c18","type":"debug","z":"eb5556d4.3fc348","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":550,"y":320,"wires":[]},{"id":"de1bd277.54b91","type":"join","z":"eb5556d4.3fc348","name":"","mode":"custom","build":"string","property":"payload","propertyType":"msg","key":"topic","joiner":"","joinerType":"str","accumulate":false,"timeout":"","count":"2","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"","reduceFixup":"","x":410,"y":320,"wires":[["f86127da.af9c18"]]},{"id":"874f76b0.846cb8","type":"ui_group","z":"","name":"AC","tab":"47d54638.c04408","order":1,"disp":true,"width":"6","collapse":false},{"id":"47d54638.c04408","type":"ui_tab","z":"","name":"Kjxzz IoT","icon":"dashboard"}]
人生需要奔放66
帖子: 4
注册: 周二 2月 12, 2019 4:34 pm

Re: 请教一个关于nodered的问题

帖子人生需要奔放66 » 周一 2月 18, 2019 1:41 pm

还想请问一下。。。如何用按钮发送join结束消息?是在join节点中选中“在收到存在msg.complete的消息后”吗?那么如何操作呢。。
头像
max
帖子: 117
注册: 周六 3月 14, 2015 10:57 am

Re: 请教一个关于nodered的问题

帖子max » 周一 2月 18, 2019 10:16 pm

人生需要奔放66 写了:还想请问一下。。。如何用按钮发送join结束消息?是在join节点中选中“在收到存在msg.complete的消息后”吗?那么如何操作呢。。

msg.complete消息可以使用下面的方式加入:(示例中我把它加在了slider消息里,因为放在新的按钮中消息控制更加复杂。。。)
change_node.jpg

代码: 全选

[{"id":"c6f7b1a5.605f5","type":"change","z":"eb5556d4.3fc348","name":"","rules":[{"t":"set","p":"complete","pt":"msg","to":"","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":290,"y":360,"wires":[["de1bd277.54b91"]]}]

(需要把join节点中的“2”删除)

这个比之前两次消息相对好一点,但也算不上完美的控制流程,因为下拉列表和滑杆两个控件的消息都是直接处理的,会产生重复或缺失。更加完美的控制可以考虑使用专门的函数和变量来实现。
您没有权限查看这个主题的附件。
人生需要奔放66
帖子: 4
注册: 周二 2月 12, 2019 4:34 pm

Re: 请教一个关于nodered的问题

帖子人生需要奔放66 » 周二 2月 19, 2019 3:02 pm

还想请问一下,如果用function节点来实现的话,能不能在function中读取其他节点的属性来作为变量呢?例如有一个slide,能不能在function中定义一个变量且它的值是slide节点的output呢?
头像
max
帖子: 117
注册: 周六 3月 14, 2015 10:57 am

Re: 请教一个关于nodered的问题

帖子max » 周三 2月 20, 2019 11:52 pm

人生需要奔放66 写了:还想请问一下,如果用function节点来实现的话,能不能在function中读取其他节点的属性来作为变量呢?例如有一个slide,能不能在function中定义一个变量且它的值是slide节点的output呢?

node-red的function是处理msg对象的,如果要处理slide的输出,需要将slide链接到function的输入,并且你需要的值存在于msg中,就可以进行相关处理和后续的输出等操作。

https://nodered.org/docs/writing-functions

回到 “问答 | 闲聊”

在线用户

用户浏览此论坛: 没有注册用户 和 0 访客