「智能家居」智能家居自动化平台nodered基础教程

「智能家居」智能家居自动化平台nodered基础教程在 nodered 中默认节点大概分为 共通节点 功能节点 网络节点 序列节点 解析节点 存储节点 输入节点 仔细观察各个节点 你会发现 有些节点只有输入 有些节点只有输出 有一些节点既有输入也有输出 还有一些节点既没有输入也没有输出

欢迎大家来到IT世界,在知识的湖畔探索吧!

在nodered中默认节点大概分为:共通节点、功能节点、网络节点、序列节点、解析节点、存储节点、输入节点。

「智能家居」智能家居自动化平台nodered基础教程



欢迎大家来到IT世界,在知识的湖畔探索吧!

仔细观察各个节点,你会发现:有些节点只有输入,有些节点只有输出,有一些节点既有输入也有输出,还有一些节点既没有输入也没有输出。

PS:每一个节点的配置区域底部都有一个有效单选,可以将该节点设置为失效或有效。

我们简单的过一遍,先从共通类别开始,该模块共有8个节点分别是

inject 手动或定期地将消息注入流中;

debug 打印流中的数据;

complete 当另一个节点完成对消息的处理时触发流;

catch 捕获在同一个流中的所有或指定节点引发的错误;

status 获取在同一流所有节点或指定节点的状态消息;

link in 在流之间创建虚拟连线;

link out 在流之间创建虚拟连线;

comment 可用于向流添加注释的节点。

「智能家居」智能家居自动化平台nodered基础教程

我们深入了解下各节点的使用方法:

Inject:该节点的作用是手动或定期得将消息注入流中,可以是文本,变量,表达式,时间戳等。该节点前面没有可以流入的节点,消息体只能往后流。

「智能家居」智能家居自动化平台nodered基础教程

PS:点击节点的前部分可以触发该节点,也可以设置该节点为循环触发。该节点单独使用没有任何意义,我可以和debug节点放到一起来进行演示。编写一个inject节点和debug节点,将它们连接在首尾相连.inject在前,debug在后,部署之后,点击inject节点的头部,就能在调试面板里看到被注入到消息体的内容了

「智能家居」智能家居自动化平台nodered基础教程

debug:该节点用于调试流中的消息体,只能用于打印,无法看到真正的堆栈,使用方法是,将该节点连接到一个可输出的节点后,配置要打印的参数,以msg开头,默认打印msg.payload。也可以打印消息体的全部内容,只需要在配置该节点时选择,与调试输入相同。此外还要注意要勾选控制台选项,只有这样才能在调试面板打印出消息体。

「智能家居」智能家居自动化平台nodered基础教程

Complete:当另一个节点完成对消息的处理时会触发该节点。可以配置用于监控那些节点。没有输入,只需要将该节点拖拽到流中即可,不需要与现有流中的其他节点连线。比如我们要在发送完邮件后触发一些逻辑,就可以使用这个节点来监听发送邮件的节点。并不是所有的节点都可以被监听。如下图我们配置complete监听inject节点的完成,触发后在debug节点打印由complete触发的调试流程。

「智能家居」智能家居自动化平台nodered基础教程

Catch:是为了处理流中报错的节点,有时程序并不像我们想的那样健壮,也会有很多意外情况发生,这时候我们就可以使用catch节点来监听这些节点的错误信息,进行上报,或者给出友好提示。可以配置捕获那些节点的错误信息。 输出的信息为

error对象

类型

描述

error.message

字符串

错误消息。

error.source.id

字符串

引发错误的节点的ID。

error.source.type

字符串

引发错误的节点的类型。

error.source.name

字符串

引发错误的节点的名称。(如果已设置)

「智能家居」智能家居自动化平台nodered基础教程

Status:是用于监控某些节点的状态变化,比如http节点,tcp,udp节点,只有节点存在状态的改变,被status节点监听之后才会被触发,而想inject,debug节点是不存在状态改变的,所以即使被status监听了也不会被触发。

「智能家居」智能家居自动化平台nodered基础教程

「智能家居」智能家居自动化平台nodered基础教程

该节点的输出信息为

status消息体

类型

描述

status.text

字符串

状态文本。

status.source.type

字符串

报告状态的节点的类型。

status.source.id

字符串

报告状态的节点的ID。

status.source.name

字符串

报告状态的节点的名称(如果已设置)。

link in:是用于在流之间创建连接,是为了实现将另一个流流入当前的流中,即设置当前流的上游。如果一个流存在link in节点,那么该流会被流入,对拥有link out的流可见,也可以配置包含link out节点的流link in与link out必须搭配使用,后者为前者的上级。

link out:将当前流流出,能够配置下一级的流,或节点.只能配置含有link in的节点作为下一级或下游。用于二个流之间的通信。

「智能家居」智能家居自动化平台nodered基础教程

「智能家居」智能家居自动化平台nodered基础教程

Commont:用于备注当前流。相当于代码中的注释。不会被执行。没有输入也没有输出。

函数类别大概有function、switch、change、range、template、delay、trigger、exec、rbe等等节点。

Function:可以用于操作消息体.可以通过该节点,修改或验证消息体中的数据,在编写函数中,msg对象是函数体中可以直接操作的数据, 你可以这样msg.name=’fizz’将name属性定义为fizz,如果之前已经有了name属性,这句话则会变成修改。最后将msg返回到下一节点return msg。

「智能家居」智能家居自动化平台nodered基础教程

PS:一个函数节点可以设置输出次数,在节点编辑区域的底部可以设置,如果设置n次,则该节点的出口则会有n个。

「智能家居」智能家居自动化平台nodered基础教程

Switch:是用于处理逻辑分支,比如判断一个变量,小于x,走第一条线,等于x走第二条线,大于x走第三条线,使用此节点首先要有一个变量用于判断,可以是消息体中的变量,也可以是流中的变量,也可以是环境变量。也可以是一个表达式 而逻辑关系也有很多种,等于、大于、小于、包含、为真、为假……

「智能家居」智能家居自动化平台nodered基础教程

PS:举例说明,判断年龄age,如果大于0小于18则打印青少年,如果大于18小于30则打印青年,大于30小于60则打印中年

switch配置

「智能家居」智能家居自动化平台nodered基础教程

流配置

「智能家居」智能家居自动化平台nodered基础教程

该流的json配置为

[ { "id": "adbf762d.d91148", "type": "tab", "label": "流程 1", "disabled": false, "info": "" }, { "id": ".2ab1a8", "type": "switch", "z": "adbf762d.d91148", "name": "age逻辑分支", "property": "age", "propertyType": "msg", "rules": [ { "t": "btwn", "v": "0", "vt": "num", "v2": "17", "v2t": "num" }, { "t": "btwn", "v": "18", "vt": "num", "v2": "30", "v2t": "num" }, { "t": "btwn", "v": "31", "vt": "num", "v2": "59", "v2t": "num" } ], "checkall": "false", "repair": false, "outputs": 3, "x": 610, "y": 340, "wires": [ [ "e93cd13a.4fc8e" ], [ "def579e4.e9feb8" ], [ "ae7e827b.fbc1b" ] ] }, { "id": "8dcde4d8.9befa8", "type": "inject", "z": "adbf762d.d91148", "name": "注入年龄", "props": [ { "p": "age", "v": "15", "vt": "num" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "x": 160, "y": 340, "wires": [ [ "c68b2fe.99a75d" ] ] }, { "id": "c68b2fe.99a75d", "type": "function", "z": "adbf762d.d91148", "name": "改变年龄", "func": "msg.age = 37\nreturn msg;", "outputs": 1, "noerr": 0, "initialize": "", "finalize": "", "x": 360, "y": 340, "wires": [ [ ".2ab1a8" ] ] }, { "id": "ae.0d1968", "type": "debug", "z": "adbf762d.d91148", "name": "", "active": true, "tosidebar": true, "console": true, "tostatus": false, "complete": "ageRange", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 1150, "y": 340, "wires": [] }, { "id": "e93cd13a.4fc8e", "type": "function", "z": "adbf762d.d91148", "name": "青少年", "func": "msg.ageRange = '青少年'\nreturn msg;", "outputs": 1, "noerr": 0, "initialize": "", "finalize": "", "x": 890, "y": 200, "wires": [ [ "ae.0d1968" ] ] }, { "id": "def579e4.e9feb8", "type": "function", "z": "adbf762d.d91148", "name": "青年", "func": "msg.ageRange = '青年'\nreturn msg;", "outputs": 1, "noerr": 0, "initialize": "", "finalize": "", "x": 890, "y": 340, "wires": [ [ "ae.0d1968" ] ] }, { "id": "ae7e827b.fbc1b", "type": "function", "z": "adbf762d.d91148", "name": "中年", "func": "msg.ageRange = '中年'\nreturn msg;", "outputs": 1, "noerr": 0, "initialize": "", "finalize": "", "x": 890, "y": 480, "wires": [ [ "ae.0d1968" ] ] } ]

欢迎大家来到IT世界,在知识的湖畔探索吧!

PS:如果要使用该流的话,可以点击右上角的菜单按钮,选择导入,将json内容复制到剪贴板中,点击导入。

Change:是用于操作消息体中某些变量,比如讲msg.payload的值修改为Mizz,搜索msg.payload的值将其中的z替换为x 也可以删除一个值,或者新增一个值。

如下面

「智能家居」智能家居自动化平台nodered基础教程

Range:可以将一个原有的属性通过一种线性算法映射出新的值,如规定,原有的值区域在0-10,映射后的区域是0-100,那么就是讲原有的值乘以10,其实就是设计一个线性的函数,只不过不是直接写,而是规定二个定义域来展示。

来看下官方的解释 该节点将线性缩放所接收到的数值。在默认情况下,结果不限于节点中定义的范围。

缩放并限制到目标范围表示结果永远不会超出目标范围内指定的范围。

在目标范围内缩放并折叠表示结果将会被限制(折叠)在目标范围内。

例如,输入0-10映射到0-100。

模式

输入

输出

scale

12

120

limit

12

100

wrap

12

20

示例,将0-5 映射成0-100,

「智能家居」智能家居自动化平台nodered基础教程

Template:可用于将一个或多个变量填充到一个文本中,首先是设置好一个模板,在模板中不确定的文本使用一个变量作为占位符,如 ${name}同学的成绩是${scoce}分。

PS:我们使用inject,template,debug三个节点来演示一下首先在inject节点注入msg.payload = { “name”: “Fizz”, “score”: 90},然后在template节点,使用mustache语法,将msg.payload的值映射成模板{{payload.name}}同学的分数为{{payload.score}}!最后我们再打印msg对象

最后演示结果是

「智能家居」智能家居自动化平台nodered基础教程

流的json数据是

欢迎大家来到IT世界,在知识的湖畔探索吧![ { "id": "36273aee.b79d06", "type": "tab", "label": "流程 6", "disabled": false, "info": "" }, { "id": "282daeb.736bb52", "type": "template", "z": "36273aee.b79d06", "name": "同学分数模板", "field": "payload", "fieldType": "msg", "format": "handlebars", "syntax": "mustache", "template": "\n{{payload.name}}同学的分数为{{payload.score}}!", "output": "str", "x": 480, "y": 420, "wires": [ [ "be5d4acc.2292f8" ] ] }, { "id": "c49cfc3.76723", "type": "inject", "z": "36273aee.b79d06", "name": "学生成绩", "props": [ { "p": "payload" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "{\"name\":\"小明\",\"score\":90}", "payloadType": "json", "x": 230, "y": 420, "wires": [ [ "282daeb.736bb52" ] ] }, { "id": "be5d4acc.2292f8", "type": "debug", "z": "36273aee.b79d06", "name": "", "active": true, "tosidebar": true, "console": true, "tostatus": false, "complete": "true", "targetType": "full", "statusVal": "", "statusType": "auto", "x": 740, "y": 420, "wires": [] } ]

Delay:可以对节点的消息进行延迟发送或限制。应用场景是,如果并发量大的话,服务器处理不过来,就可以使用该节点来限制一定时间内 通过允许通过多少条,你也可以在流中重置延迟的时间,可以很好低动态调整消息的处理权重,有了这个节点可以很容易就复现一些耗时任务的中间状态的变化。 延迟有二种一种是延迟每一条消息,第二种是限制信息的速率。

「智能家居」智能家居自动化平台nodered基础教程

Trigger:触发后,将会发送一条消息。如果被拓展或重置,则可以选择发送第二条消息。

该节点可用于在流中创建一个超时。 默认情况下,当它收到一条消息时,它将发送一条带有1的有效荷载的消息。然后它将等待250毫秒,再发送第二条消息,其有效荷载为0。这可以用于使连接到Raspberry Pi GPIO引脚的LED闪烁等例子上。

「智能家居」智能家居自动化平台nodered基础教程

Exec:运行系统命令并返回其输出。

可以将节点配置为等待命令完成,或者在命令生成时发送其输出。

运行的命令可以在节点中配置,也可以由收到的消息提供。

输入

payload 字符串 如果这样配置,则将被附加到执行命令中。

kill 字符串 指定发送到现有的exec节点进程的kill信号类型。

pid 数值|字符串 要杀死的现有exec节点进程的进程ID

输出

payload字符串 命令的标准输出。

rcobject (仅执行模式)一个返回代码对象的副本(在端口3上也可用 )

rbe:一个提供异常报告(RBE)和死区功能的节点。除非传入值发生更改-RBE模式,或更改幅度超过一定量(绝对值或百分比)-带隙模式,否则该节点将阻塞。仅在数据已更改的情况下传递数据。

这在每个msg.topic基础上起作用。这意味着单个rbe节点可以同时处理多个主题。

序列类别有以下4个节点:split、joib、sort、batch,让下边来一个个了解。

Split:可以将一msg.payload基于一个字符串进行分割,比如有一个字符串msg.payload = ‘1;2;3;4;5’调用split节点后,使用;来分割msg.payload,那么split的下一级节点将会被触发5次

「智能家居」智能家居自动化平台nodered基础教程

此节点也可以用于处理二进制,使用长度分割。

关于这个节点详细的解释

输入

payload

节点的行为由msg.payload的类型决定:

字符串/buffer – 使用指定的字符(默认值:\n),缓冲区序列或固定长度将消息拆分。

数组 – 消息被拆分为单个数组元素或固定长度的数组。

object – 将为对象的每个键/值对发送一条消息。

输出 partsobject 此属性包含有关如何将消息与原始消息分开的信息。如果传递给join节点,则可以将序列重组为单个消息。该属性具有以下属性:

id – 一组消息的标识符

index – 组中的位置

count – 如果已知组中的邮件总数。请参阅下面的“流媒体模式”

type – 消息的类型-字符串/数组/对象/buffer

ch – 对于字符串或buffer,用于将消息拆分为字符串或字节数组的数据

key – 对于对象,创建此消息的属性的键。可以将节点配置为也将此值复制到另一个消息属性,例如msg.topic

len – 使用固定长度值拆分消息时,每段子消息的长度

在使用join节点将序列重新组合为单个消息之前,推荐使用此节点来轻松地创建跨消息序列,执行通用操作的流。 它使用msg.parts属性跟踪序列的各个部分。

流媒体模式

该节点还可以用于重排消息流。例如,发送换行符终止命令的串行设备可能会传递一条消息,并在其末尾带有部分命令。 在“流模式”下,此节点将拆分一条消息并发送每个完整的段。如果末尾有部分片段,则该节点将保留该片段,并将其添加到收到的下一条消息之前。

在此模式下运行时,该节点将不会设置msg.parts.count属性,因为流中期望的消息数还是未知的。这意味着它不能在自动模式下与join节点一起使用。

Join:将消息序列合并为一条消息.。此模式假定此节点与split相连, 或者接收到的消息有正确配置的msg.parts属性。共有三种模式:

自动模式 与split节点配对时,它将自动将已被拆分的消息进行合并。

手动模式 手动地以各种方式合并消息序列。

列聚合模式 对消息列中的所有消息应用表达式以将其简化为单个消息。

输入 parts 使用自动模式时,所有的消息都应包含此属性。split节点会生成此属性,但也可以手动进行设置。该属性具有以下属性:

id – 消息组的标识符

index – 组中的位置

count – 如果已知组中的邮件总数。请参阅下面的“流媒体模式”

type – 消息的类型-字符串/数组/对象/buffer

ch – 对于字符串或buffer,用于将消息拆分为字符串或字节数组的数据

key – 对于对象,创建此消息的属性的键。可以将节点配置为也将此值复制到另一个消息属性,例如msg.topic/li>

len – 使用固定长度值拆分消息时,每段子消息的长度

complete 如果设置,则节点将以其当前状态发送其输出消息

详细

自动模式 自动模式使用传入消息的parts属性来确定应如何连接序列。这使它可以自动逆转split节点的操作。

手动模式 设置为以手动模式时,该节点能以各种不同的方法来处理消息:

「智能家居」智能家居自动化平台nodered基础教程

字符串或缓冲区-通过将每条消息的选定属性与指定的连接字符或缓冲区连接起来。 数组 – 通过将每个选定的属性或整个消息添加到输出数组 键/值对象 – 通过使用每个消息的属性来确定存储所需值的键。 merged object – 通过将每个消息的属性合并到一个对象下。 输出消息的其他属性都取自发送结果前的最后一条消息。

可以用计数来确定应接收多少条消息来进行合并。对于对象输出,可以设置为达到此计数后的每条后续消息都发送一条输出。

可以用超时来设置发送新消息之前的等待时间。

如果收到设置了msg.complete属性的消息时发送输出消息并重置消息列数。

如果收到设置了msg.reset属性的消息,则部分收到的消息将被删除而不发送,同时重置消息列数。

列聚合模式 选择列聚合模式时,将表达式应用于组成消息列的每条消息,并使用聚合值组成一条消息。

Sort:对消息属性或消息序列进行排序的函数。

当配置为对消息属性进行排序时,节点将对指定消息属性所指向的数组数据进行排序。

当配置为对消息序列排序时,它将对消息重新排序。

排序顺序可以是:

升序

降序 对于数字,可以通过复选框指定数字顺序。

排序键可以是元素值,也可以是JSONata表达式来对属性值进行排序,还可以是message属性或JSONata表达式来对消息序列进行排序。

在对消息序列进行排序时,排序节点依赖于接收到的消息来设置msg.parts。拆分节点将生成此属性,但也可以手动创建。它具有以下属性:

id – 消息组的标识符

index – 组中的位置

count – 群组中的邮件总数 注意:在此节点的处理中,消息在内部存储。通过指定要累积的最大消息数,可以防止意外的高内存使用。默认设置是不限制消息数量。

nodeMessageBufferMaxLength属性在settings.js中设置。

「智能家居」智能家居自动化平台nodered基础教程

Batch:根据各种规则创建消息序列。详细有三种创建消息序列的模式:

讯息数 将消息分组为给定长度的序列。 overlap(重叠)选项指定在一个序列的末尾应重复多少消息。

时间间隔 对在指定时间间隔内到达的邮件进行分组。如果在该时间间隔内没有消息到达,则该节点可以选择发送空消息。

串联序列 通过串联输入序列来创建消息序列。每条消息必须具有msg.topic属性和标识其序列的msg.parts属性。该节点配置有topic值列表,以标识所连接的顺序序列。储存讯息该节点将在内部缓冲消息,以便跨序列工作。运行时设置
nodeMessageBufferMaxLength可用于限制节点将缓存多少消息。

PS:nodered的基础教程太长了,后边慢慢讲了。

— — — — — — END — — — — — —

我是小白,智能家居爱好者、一卡通行业从业者、曾经的建筑智能化从业者。致力为开源智能家居平台添砖加瓦。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/106488.html

(0)
上一篇 8分钟前
下一篇 2025年 1月 28日 下午6:23

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信