lab03-Node-RED 第二个流

一、目录

1. 实验目的

本实验建立在上一个实验的基础上,制作一个流程,该流程开始从外部来源引入数据并在内部加工处理。本实验将实现以下功能:

  • 定期从网站检索信息
  • 将该信息转换为有用的形式
  • 在调试侧栏中显示结果

2. 实验步骤

2.1 添加注入节点

在之前的实验中,Inject 节点用于在单击其按钮时触发流。本次实验注入节点将被配置为定期触发流。从面板中将一个注入节点拖到工作区上。双击节点以显示编辑对话框。将重复间隔设置为每 5 分钟一次。单击完成关闭对话框。

实现步骤
  • 1.拖拽节点


  • 2.设置节点


2.2 添加 Http 请求节点

HTTP 请求节点可用于在触发时检索网页。向工作区添加一个后,编辑它以将 URL 属性设置为:

https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/significant_month.csv

然后单击完成关闭对话框。此 URL 是来自美国地质调查局网站的上个月重大地震的提要。该站点提供了许多其他选项,在完成本实验后可以尝试这些选项。

实现步骤
  • 1.拖拽Http请求节点


  • 2.设置Http请求节点


2.3 添加 CSV 节点

添加 CSV 节点并编辑其属性。启用“第一行包含列名”选项。然后单击完成关闭。

实现步骤
  • 1.拖拽CSV 节点


  • 2.设置CSV 节点


2.4 添加调试节点

添加一个调试节点到输出

实现步骤
  • 1.拖拽节点


2.5 所有节点连线

添加线路连接:

  • 注入节点输出到 HTTP 请求节点输入。
  • HTTP 请求节点输出到 CSV 节点输入。
  • CSV 节点输出到调试节点输入。
实现步骤
  • 1.连接节点,如下图即可


  • 2.测试是否获取数据,如下图


  • 3.此时输出的数据为,示例其中一条数据
msg.payload : Object
{
    "time": "2022-11-23T01:08:15.522Z",
    "latitude": 40.8471,
    "longitude": 30.967,
    "depth": 10,
    "mag": 6.1,
    "magType": "mww",
    "nst": 114,
    "gap": 30,
    "dmin": 0.414,
    "rms": 0.99,
    "net": "us",
    "id": "us7000irp8",
    "updated": "2022-11-27T05:10:55.686Z",
    "place": "Western Turkey",
    "type": "earthquake",
    "horizontalError": 5.15,
    "depthError": 1.729,
    "magError": 0.052,
    "magNst": 35,
    "status": "reviewed",
    "locationSource": "us",
    "magSource": "us"
}

2.6 添加开关节点 (Switch Node)

将 Switch 节点添加到工作区。编辑其属性并将其配置为检查属性 msg.payload.mag,测试 >= 将其更改为测试数字和值 7。单击完成以关闭。添加从 CSV 节点到此 Switch 节点的第二条连线。

实现步骤
  • 1.拖拽开关节点 (Switch Node)


  • 2.重新连接节点,并设置节点属性
    属性一栏填入
msg.payload.mag
  • 3.测试是否获取数据


2.7 添加变更节点 (Change Node)

添加一个 Change 节点,连接到 Switch 节点的输出。配置它以将 msg.payload 设置为字符串 PANIC!。

实现步骤
  • 1.添加一个 Change 节点


  • 2.连接到 Switch 节点的输出


  • 3.配置它以将 msg.payload 设置为字符串 PANIC!。


  • 4.查看数据


2.8 添加第二个调试节点

将新的 Debug 节点连接到 Change 节点的输出

实现步骤
  • 1.拖拽节点


  • 2.连接起来,最终连接图


2.9 发布

通过单击部署按钮将流部署到运行时。打开 Debug 侧边栏选项卡,单击 Inject 按钮。您应该会看到一个条目列表,其中的一些内容如下所示:

msg.payload : Object
{
    "time": "2017-11-19T15:09:03.120Z",
    "latitude": -21.5167,
    "longitude": 168.5426,
    "depth": 14.19,
    "mag": 6.6,
    "magType": "mww",
    "gap": 21,
    "dmin": 0.478,
    "rms": 0.86,
    "net": "us",
    "id": "us2000brgk",
    "updated": "2017-11-19T17:10:58.449Z",
    "place": "68km E of Tadine, New Caledonia",
    "type": "earthquake",
    "horizontalError": 6.2,
    "depthError": 2.8,
    "magError": 0.037,
    "magNst": 72,
    "status": "reviewed",
    "locationSource": "us",
    "magSource": "us"
}

你现在可以单击每个属性左侧的小箭头以展开它们并检查内容如果发生震级大于 7 的地震,您还会看到如下调试消息:

msg.payload : string(6)
"PANIC!"

你可以将开关阈值 7 更改为较小的值以测试程序。记得在更改后点击部署。


3.实验总结

本实验每 5 分钟自动触发一次,并从 url 检索数据。它解析数据并显示在调试侧栏中。它还检查数据中的幅度值,并为幅度大于或等于 7 的任何消息分支流。此类消息的有效负载被修改并显示在调试侧栏中。

4.全部代码

[
    {
        "id": "0380f5e5c1f1a45c",
        "type": "tab",
        "label": "流程 1",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "f86f4c2110f3389e",
        "type": "tab",
        "label": "流程 1",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "e98aa69a8103f8fe",
        "type": "tab",
        "label": "流程 2",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "fa20ef67192c25e2",
        "type": "inject",
        "z": "f86f4c2110f3389e",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 190,
        "y": 140,
        "wires": [
            [
                "0f05fccf4e2d3fbf"
            ]
        ]
    },
    {
        "id": "977d78dcf57cae66",
        "type": "debug",
        "z": "f86f4c2110f3389e",
        "name": "debug 1",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 580,
        "y": 140,
        "wires": []
    },
    {
        "id": "0f05fccf4e2d3fbf",
        "type": "function",
        "z": "f86f4c2110f3389e",
        "name": "function 1",
        "func": "//生成日期对象\nvar date = new Date(msg.payload);\n// 把msg.payload 设置成现有日期\nmsg.payload = date.toString();\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 380,
        "y": 220,
        "wires": [
            [
                "977d78dcf57cae66"
            ]
        ]
    },
    {
        "id": "b8ee50815174ee99",
        "type": "change",
        "z": "e98aa69a8103f8fe",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "PANIC!",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 670,
        "y": 280,
        "wires": [
            [
                "bb851bebfab99bf4"
            ]
        ]
    },
    {
        "id": "14b27b021218d919",
        "type": "switch",
        "z": "e98aa69a8103f8fe",
        "name": "",
        "property": "payload.mag",
        "propertyType": "msg",
        "rules": [
            {
                "t": "gte",
                "v": "7",
                "vt": "num"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 1,
        "x": 490,
        "y": 320,
        "wires": [
            [
                "b8ee50815174ee99",
                "d4ac9f4b192c2367"
            ]
        ]
    },
    {
        "id": "dd639232c1a75865",
        "type": "inject",
        "z": "e98aa69a8103f8fe",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "300",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 80,
        "y": 280,
        "wires": [
            [
                "99aa8818242bf31d"
            ]
        ]
    },
    {
        "id": "99aa8818242bf31d",
        "type": "http request",
        "z": "e98aa69a8103f8fe",
        "name": "",
        "method": "GET",
        "ret": "txt",
        "paytoqs": "ignore",
        "url": "https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/significant_month.csv",
        "tls": "",
        "persist": false,
        "proxy": "",
        "insecureHTTPParser": false,
        "authType": "",
        "senderr": false,
        "headers": [],
        "x": 220,
        "y": 280,
        "wires": [
            [
                "a08de50d70477fdc"
            ]
        ]
    },
    {
        "id": "a08de50d70477fdc",
        "type": "csv",
        "z": "e98aa69a8103f8fe",
        "name": "",
        "sep": ",",
        "hdrin": true,
        "hdrout": "none",
        "multi": "one",
        "ret": "\\n",
        "temp": "",
        "skip": "0",
        "strings": true,
        "include_empty_strings": "",
        "include_null_values": "",
        "x": 350,
        "y": 280,
        "wires": [
            [
                "14b27b021218d919"
            ]
        ]
    },
    {
        "id": "bb851bebfab99bf4",
        "type": "debug",
        "z": "e98aa69a8103f8fe",
        "name": "debug 7",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 860,
        "y": 280,
        "wires": []
    },
    {
        "id": "d4ac9f4b192c2367",
        "type": "debug",
        "z": "e98aa69a8103f8fe",
        "name": "debug 8",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 680,
        "y": 360,
        "wires": []
    }
]
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 227,533评论 6 531
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 98,055评论 3 414
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 175,365评论 0 373
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 62,561评论 1 307
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 71,346评论 6 404
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 54,889评论 1 321
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 42,978评论 3 439
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 42,118评论 0 286
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 48,637评论 1 333
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 40,558评论 3 354
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 42,739评论 1 369
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 38,246评论 5 355
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 43,980评论 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 34,362评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 35,619评论 1 280
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 51,347评论 3 390
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 47,702评论 2 370

推荐阅读更多精彩内容