最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Node-RED系列(四):Node-RED函数节点的使用

    正文概述 掘金(Fizz在掘金38275)   2021-02-19   2362

    Node-RED系列(四):Node-RED函数节点的使用

    上一期我们讲到了Node-RED中公共节点的使用,利用公共节点我们可以调试程序,捕获错误,监听状态的改变,本篇文章我再来给大家讲一下Node-RED中函数功能分类下的节点,该分类下有9个节点,主要是用于处理流中的逻辑部分,还有一些命令行的执行,以及模板的使用. 分别是function, switch,change,range,template,delay,trigger,exec,rbe,让我们来一个一个地分析如何使用这些节点完成Iot中流的处理。

    function

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

    Node-RED系列(四):Node-RED函数节点的使用

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

    Node-RED系列(四):Node-RED函数节点的使用

    switch

    switch是用于处理逻辑分支,比如判断一个变量,小于x,走第一条线,等于x走第二条线,大于x走第三条线,

    使用此节点首先要有一个变量用于判断,可以是消息体中的变量,也可以是流中的变量,也可以是环境变量。也可以是一个表达式 而逻辑关系也有很多种,等于,大于,小于,包含,为真,为假。。。。

    如下图 Node-RED系列(四):Node-RED函数节点的使用

    下面以实际情况演示一下,判断年龄age,如果大于0小于18则打印青少年,如果大于18小于30则打印青年,大于30小于60则打印中年

    switch配置 Node-RED系列(四):Node-RED函数节点的使用

    流配置 Node-RED系列(四):Node-RED函数节点的使用

    该流的json配置为

    [
        {
            "id": "adbf762d.d91148",
            "type": "tab",
            "label": "流程 1",
            "disabled": false,
            "info": ""
        },
        {
            "id": "77961796.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": [
                [
                    "77961796.2ab1a8"
                ]
            ]
        },
        {
            "id": "ae855879.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": [
                [
                    "ae855879.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": [
                [
                    "ae855879.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": [
                [
                    "ae855879.0d1968"
                ]
            ]
        }
    ]
    

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

    change

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

    如下面 Node-RED系列(四):Node-RED函数节点的使用

    range

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

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

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

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

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

    模式输入输出
    scale12120limit12100wrap1220

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

    Node-RED系列(四):Node-RED函数节点的使用

    template

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

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

    最后演示结果是 Node-RED系列(四):Node-RED函数节点的使用

    流的json数据是

    [
        {
            "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

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

    trigger

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

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

    Node-RED系列(四):Node-RED函数节点的使用

    exec

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

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

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

    输入

    • payload 字符串 如果这样配置,则将被附加到执行命令中。
    • kill 字符串 指定发送到现有的exec节点进程的kill信号类型。
    • pid 数值|字符串 要杀死的现有exec节点进程的进程ID

    输出

    • payload字符串 命令的标准输出。
    • rcobject (仅执行模式)一个返回代码对象的副本(在端口3上也可用

    Node-RED系列(四):Node-RED函数节点的使用

    rbe

    一个提供异常报告(RBE)和死区功能的Node-RED节点。

    除非传入值发生更改-RBE模式,或更改幅度超过一定量(绝对值或百分比)-带隙模式,否则该节点将阻塞。

    仅在数据已更改的情况下传递数据。

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


    起源地下载网 » Node-RED系列(四):Node-RED函数节点的使用

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元