Node-RED学习心得(操作篇)

架构图

基本功能

本篇会介绍6项常用的子模块,并适时使用案例来介绍它们的功能以及再使用上的一些细节

inject

共通模块最常用到的子模块之一,作为输入用途,可以自行选择payload类型

创立inject节点时点击模块可以进入设定,选单中主要分为5个要素:

  1. 模块名称
    • 为inject设定名称
  2. 物件属性
    • 预设为payload
    • 可以自行添加属性
  3. 物件属性资料类型
    • 指定属性类型,包含常见的字串、数字、布林、json等
  4. 主题
    • 指定topic名
  5. 选择输入机制
    • 手动输入模式
    • 循环输入模式
    • 指定时间输入模式

debug

输出模块,用来将输入结果显示在指定视窗上(通常是除错视窗),点击可以进入设定选单

设定选单主要包含:

  1. 输出属性
    • 预设payload
    • 亦可指定已存在的属性
  2. 选择输出窗口
    • 选择输出视窗
  3. 模块名称
    • debug模块名称

function

使用javascript编写的函式模块,可以提供使用者自定义的功能,我们可以对传入的物件属性进行处理,透过返回msg物件,後续的模块可以得到加工後的结果

例如我编写一个用来判断result值是否为真的模块,如果成立便新增一个新的属性note,并给予它一个值

if(msg.payload.result == true){
    msg.payload.note = "test"
}
return msg;

或者编写一个判断属性长度的模块

var new_msg = {payload:msg.payload.length}
msg.payload = new_msg
return msg;

一样点击function模块进入设定,在函数栏位编写自定义的程序码就可以了

change

改变物件属性类型,可以进行增、删、修改、转移等操作

点击模块後可以进入设定选单,change模块的重点在操作指令

  1. 模块名称
    • change模块名称
  2. 操作指令
    • 设定
      • 将属性设定为指定值
      • 也可以用来新增一个属性,并给值
    • 修改
      • 搜寻特定值然後取代
    • 删除
      • 删除物件中指定属性
    • 转移
      • 将物件中的属性值转移到另一个属性上
  3. 物件属性
    • 跟上面介绍得差不多,用来指定属性,预设是payload

switch

这是一个很有趣的模块,它类似程序中的switch语句,可以用来当作流程控制

switch(msg.payload){
        case 1:
        /*do something*/
        break;
        
        case 2:
        /*do something*/
        break;
        
        ...
}

选单中4个重点,分别对应switch的功能

  1. 属性
    • switch(var)
    • 属性栏位相当於设定var
  2. 判断类型
    • 相当於条件判断子
  3. 判断值指定值
    • 依照不同判断子填入的参数
    • case x:
    • 相当於x的功用

其实不只常见的判断子,Node-RED提供非常多的判断模式供使用者使用,这些就留给大家慢慢摸索

template

template模块可以提供使用者自定HTML模板

模板内可以输入指定的HTML格式,举个例子来看看这个模块的功用,把以下html程序码写进template模块内

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Hello~</title>
    </head>
    <body>
            <h2>This is Node-RED<h2>
    </body>
</html>

在侧边拦栏位找到httpin模块,拖曳进来并起双击设定

  1. 请求方法
    • 选择http协议的GET method
    • URL可以自订,这里设定绝对路径/hello
    • 名称表示模块名,可有可无

在侧边栏位找到将http response模块,拖曳进来并将template尾部连上它。完成後应该会如下图所示

最後然後按下deploy键,在网址栏为输入url 127.0.0.1:1880/hello就可以看到我们设定的html内容

实际案例练习

实现目标:

  1. 输入一串json字串,将该字串转换成json物件,例如
{"id":"device0","result":true}
{"id":"device1","result":false}
  1. 若判断result为true,则新增一个属性note,并且定义它的内容为test字串,并输出json物件
  2. 若判断result为false,则原封不动输出json物件

方法一: 利用function

  1. 首先加入两个inject模块,payload类型均设定为字串,字串格请参考上面json案例
  2. 在解析栏位选择json模块,双击并设定操作栏位为JSON字串与物件互转
  3. 选择function模块,然後输入以下程序码
if(msg.payload.result == true){
    msg.payload.note = "test"
}
return msg;
  1. 拉取debug模块,并且把上述模块都连接起来

方法二: 利用change与switch

  1. 首先加入两个inject模块,payload类型均设定为字串,字串格请参考上面json案例
  2. 在解析栏位选择json模块,双击并设定操作栏位为JSON字串与物件互转
  3. 选择switch模块,设定payload.result的判断式
  1. 若result为真,则从输出端口一输出,并且连接上change模块,利用设定操作把payload.note设定成字串"test"
  1. 拉取debug模块,并且把上述模块都连接起来

输出结果

手动注入inject模块,经过测试可以发现右侧除错式窗成功打印我们要的结果,两种方法接测试正确


<<:  C# win form 下拉清单

>>:  国际电子表单及文件管理系统

Microflows的Java升级版

在写Java以前想一下 在决定用Java解决问题前,其实很多功能在内建的Microflows中都能够...

Day 30 - 完赛啦!! 做个总结

睽违两年的完赛!!! 经过这两年真的感受到时间跟工作的压力,比起两年前待业中可以好好撰写文章的自己,...

RWD问题

不知道为甚麽,旁边无缘无故多了一条空白区域,但那个区域根本没有其他元件 程序码好像也不知道该贴哪段,...

[FGL] 程序开发(3) - 输入用的INPUT系指令与DIALOG

本篇跟着 程序开发(2) ,接续往下讨论 INPUT数组(RECORD或单一变数)资料输入 INP...

Day 4-Visual Studio 环境安装与介绍第一只测试专案 HelloBank (基础-3)

工欲善其事,必先利其器—该先装 Visual Studio 了 今天的内容会开始介绍我们要使用的整合...