0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

在Node-RED中如何用ModbusTCP采集存儲Influxdb

IOTRouter ? 來源:成都縱橫智控 ? 作者:成都縱橫智控 ? 2024-06-28 16:26 ? 次閱讀

(以下來源成都縱橫智控公眾號授權更多可見-https://www.iotrouter.com-智控

-需求概述

注:使用Influxdb數據庫節(jié)點,需要插上micro sd卡才可以

本章節(jié)主要實現一個流程:EG8200每10秒采集一次Modbus TCP數據存入Influxdb數據庫,并且每分鐘從Influxdb數據庫中取6條數據打包上報。

Modbus TCP數據采集此處不做過多贅述,可參考其他案例介紹。下文默認已經采集到Modbus TCP數據。

-數據上報格式


[{
  "time": "2023-12-20 14:50:13",
  "value1": 12573,
  "value2": 12568,
  "value3": 12561,
  "value4": 12557,
  "value5": 12552,
  "value6": 12545,
  "value7": 12540,
  "value8": 12535
}, {
  "time": "2023-12-20 14:50:13",
  "value1": 12573,
  "value2": 12568,
  "value3": 12561,
  "value4": 12557,
  "value5": 12552,
  "value6": 12545,
  "value7": 12540,
  "value8": 12535
}, {
  "time": "2023-12-20 14:50:13",
  "value1": 12574,
  "value2": 12569,
  "value3": 12562,
  "value4": 12558,
  "value5": 12553,
  "value6": 12546,
  "value7": 12541,
  "value8": 12536
}, {
  "time": "2023-12-20 14:50:14",
  "value1": 12574,
  "value2": 12569,
  "value3": 12562,
  "value4": 12558,
  "value5": 12553,
  "value6": 12546,
  "value7": 12541,
  "value8": 12536
}, {
  "time": "2023-12-20 14:50:14",
  "value1": 12575,
  "value2": 12570,
  "value3": 12563,
  "value4": 12559,
  "value5": 12554,
  "value6": 12547,
  "value7": 12542,
  "value8": 12537
}, {
  "time": "2023-12-20 14:50:14",
  "value1": 12575,
  "value2": 12570,
  "value3": 12563,
  "value4": 12559,
  "value5": 12554,
  "value6": 12547,
  "value7": 12542,
  "value8": 12537
}]

-需求分析

第一步:配置并連接數據庫

第二步:創(chuàng)建一個數據庫

第三步:指定使用新創(chuàng)建的數據庫

第四步:讀取Modbus TCP數據并存入指定表中

第五步:從數據庫中讀取6個數據

第六步:將讀取出來的數據打包

第七步:將打包的數據發(fā)送到MQTT

-需求實現

第一步:配置并連接數據庫

首次連接EG8200的Influxdb數據庫按照默認的配置即可無需修改

wKgZomZ-cZiADoSDAAE5lU7egz0085.png

第二步:創(chuàng)建一個數據庫

創(chuàng)建一個數據庫需要使用到sql語句 CREATE DATABASE myDatabase ,這條語句的意思是創(chuàng)建一個名字叫做myDatabase的數據庫。按照下面視頻的方式創(chuàng)建,日志窗口打印[empty],說明數據庫創(chuàng)建成功

wKgaomZ-cbaAdOVQAAEI_SMs1_o583.png

第三步:指定使用新創(chuàng)建的數據庫

在第一步創(chuàng)建了一個名字叫做myDatabase的數據庫,現在需要使用這個數據庫,將Influxdb的一個配置名Database改成myDatabase

wKgZomZ-ce-AUa25AAEOLCE9lPY623.png

第四步;DO能控制的設備

Modbus TCP數據采集此處不做過多贅述,這里已經配置好Modbus TCP詳細使用請參考

從節(jié)點庫里面拿出一個寫時序數據庫節(jié)點,選擇前面步驟已經添加的配置信息,并將表名填寫在Measurement,

這里使用myTable作為表名

wKgZomZ-chyAXf-uAAFMg4pamUA342.png

第五步:從數據庫中讀取6個數據

通過函數節(jié)點構造sql讀取指令,通過時間查詢最近6條數據

wKgZomZ-cieAFKQ7AAFRrGKBIRY017.png

上面視頻中使用到的函數代碼


if (global.get("startTime") == undefined || global.get("startTime") == null) global.set("startTime", new Date().getTime())
var startTime = global.get("startTime")
var temp = new Date(startTime).toISOString()
var table = "myTable"
msg.query = "SELECT * FROM" + " "" + table + "" " + " WHERE time > '" + temp + "' LIMIT 6"
return msg;

第六步:將讀取出來的數據打包

使用函數節(jié)點將數據封裝成對應的json字符串

wKgZomZ-ckqAIAH5AAGKUggqfVg185.png

上面視頻中使用到的函數代碼


function dateFormat(fmt, timestamp) {
    let ret;
    const opt = {
        "Y+": timestamp.getFullYear().toString(), // 年
        "m+": (timestamp.getMonth() + 1).toString(),  // 月
        "d+": timestamp.getDate().toString(), // 日
        "H+": timestamp.getHours().toString(), // 時
        "M+": timestamp.getMinutes().toString(), // 分
        "S+": timestamp.getSeconds().toString() // 秒
        // 有其他格式化字符需求可以繼續(xù)添加,必須轉化成字符串
    };
    for (let k in opt) {
        ret = new RegExp("(" + k + ")").exec(fmt);
        if (ret) {
            fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
        };
    };
    return fmt;
}
// const fmt = dateFormat("YYYY-mm-dd HH:MM:SS", new Date())
var dataList = msg.payload
if (dataList.length == 0) {
    node.error("數據庫無數據請檢查")
    return
}
dataList.forEach(item => item.time = dateFormat("YYYY-mm-dd HH:MM:SS", new Date(item.time)))
global.set("startTime", new Date(dataList[dataList.length - 1].time).getTime() + 1000)
msg.payload = JSON.stringify(dataList)
return msg

第七步:將打包的數據發(fā)送到MQTT

新增MQTT發(fā)布節(jié)點

客戶端ID:網關SN

用戶名:網關SN

密碼:EG87654321

發(fā)布主題:${sn}/send

wKgZomZ-co2AC7gLAAGYf4IaLNw616.png

-總結

本章節(jié)介紹了一個相對復雜的流程,旨在表述網關所具備的能力,因此并未對程序的安全性、穩(wěn)定性、靈活性等方面做優(yōu)化。通過理解本流程,相信你已經對網關的可視化編程有了一定的熟悉。接下來,深入學習每個節(jié)點的功能用法吧,掌握它們將會為你制作更復雜的流程提供更多的選擇和可能!

-注意

MQTT配置節(jié)點導出時,不會攜帶用戶名和密碼。因此導入時需要重新錄入用戶名和密碼

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • 存儲
    +關注

    關注

    13

    文章

    4123

    瀏覽量

    85279
  • node
    +關注

    關注

    0

    文章

    23

    瀏覽量

    5916
  • ModbusTCP
    +關注

    關注

    0

    文章

    104

    瀏覽量

    4346
收藏 人收藏

    評論

    相關推薦

    Node-RED實現電表數據采集并上云

    本案例將通過Docker容器安裝DLT-645協議插件采集實現電表數據上云,前面已經講過ModbusRTU協議通過Node-RED上云,如果采用支持ModbusRTU電表可以參考之前的“Docker
    的頭像 發(fā)表于 06-07 08:21 ?2462次閱讀
    <b class='flag-5'>Node-RED</b>實現電表數據<b class='flag-5'>采集</b>并上云

    基于node-Red和Raspberry Pi的物聯網實驗設計

    基于node-Red和Raspberry Pi的物聯網實驗設計,都是小實驗,有人會嗎?
    發(fā)表于 03-06 12:11

    Node-Red是什么?如何去學習Node-Red

    Node-Red是什么?如何去學習Node-Red?有哪些方法可以去學習Node-Red?
    發(fā)表于 07-02 06:11

    新手求助如何去學習Node-Red

    如何去學習Node-Red?怎樣去安裝dashboard這個UI控件庫?
    發(fā)表于 09-01 06:53

    第2部分:使用Node-RED的程序

    Understand how to use the Node-RED* interface to add sensors and send data to the AWS* cloud.
    的頭像 發(fā)表于 10-26 07:17 ?6578次閱讀

    運用 Node-RED 開發(fā) LoRa 應用

    之前的課程LoRa G-IoT模塊基礎應用,我們已經知道如何將從LoRa得到的數值上傳服務器,本文我們將學習撰寫Node-RED,將數據傳送到自己設計的網頁監(jiān)測接口。
    的頭像 發(fā)表于 12-25 17:54 ?705次閱讀

    Raspberry Pi利用Node-RED控制LED

    今天的教程,我們將研究如何使用 Node-RED 樹莓派上部署簡單的項目。
    的頭像 發(fā)表于 09-01 16:00 ?5436次閱讀
    <b class='flag-5'>在</b>Raspberry Pi<b class='flag-5'>中</b>利用<b class='flag-5'>Node-RED</b>控制LED

    Node-REDARM嵌入式工控機上的應用

    BL302 ARM嵌入式工控機Node-RED使用教程
    的頭像 發(fā)表于 03-02 18:45 ?4777次閱讀
    <b class='flag-5'>Node-RED</b><b class='flag-5'>在</b>ARM嵌入式工控機上的應用

    Node-red啟動電腦攝像頭案例

    通過Node-red實現打開電腦自帶的攝像頭或者USB攝像頭
    的頭像 發(fā)表于 06-01 06:50 ?4740次閱讀
    <b class='flag-5'>Node-red</b>啟動電腦攝像頭案例

    搭建Node-RED環(huán)境,將開發(fā)板變身為工業(yè)控制網關——米爾基于NXP LS1028A開發(fā)板

    控制系統LED五、系統命令控制GPIO六、Node-RED控制GPIO七、開發(fā)板上的S3按鍵使用八、Node-RED中使用S3按鍵控制LED九、Node-RED使用I
    的頭像 發(fā)表于 12-05 09:47 ?3227次閱讀
    搭建<b class='flag-5'>Node-RED</b>環(huán)境,將開發(fā)板變身為工業(yè)控制網關——米爾基于NXP LS1028A開發(fā)板

    物聯網與ESP32、Node-REDInfluxDB與WebSocket

    電子發(fā)燒友網站提供《物聯網與ESP32、Node-REDInfluxDB與WebSocket.zip》資料免費下載
    發(fā)表于 07-13 09:51 ?0次下載
    物聯網與ESP32、<b class='flag-5'>Node-RED</b>和<b class='flag-5'>InfluxDB</b>與WebSocket

    Node-RED安裝本地教程

    Node-RED是一個基于流的開發(fā)工具,廣泛應用于物聯網(IoT)、家庭自動化和其他數據驅動的應用程序。它通過圖形化的編程界面,使得非專業(yè)程序員也能輕松上手。本文將介紹如何在本地環(huán)境安裝Node-RED,幫助你快速開始項目開發(fā)
    的頭像 發(fā)表于 06-24 12:10 ?931次閱讀
    <b class='flag-5'>Node-RED</b>安裝本地教程

    Node-RED如何制作漂亮的界面

    Node-RED深度融合(如成都的縱橫智控和蘇州穩(wěn)聯科技將Node-RED與物聯網網關深度融合,打造可視化、硬件加持的物聯網開發(fā)平臺,使用者無需編碼即可快速實現各類應用,開拓物聯網無限可能)。未來或許將會有越來越多的企業(yè)步入此行業(yè)
    的頭像 發(fā)表于 06-26 16:50 ?2546次閱讀
    <b class='flag-5'>Node-RED</b>如何制作漂亮的界面

    Node-RED初學者教程-三分鐘學習

    通過這短短三分鐘的教程,你已經掌握了Node-RED的基本操作。你可以利用Node-RED的強大功能來創(chuàng)建更復雜的數據流和自動化任務,無論是物聯網應用、API集成還是數據處理。Node-RED簡化了編程過程,讓開發(fā)更直觀、更高效
    的頭像 發(fā)表于 06-27 17:09 ?1425次閱讀
    <b class='flag-5'>Node-RED</b>初學者教程-三分鐘學習

    使用Node-RED實現ModBus TCP到RTU的轉換

    ,需要將ModBusTCP數據轉換為ModBusRTU格式或者是將ModBusRTU格式轉換為ModBusTCP數據。本文將詳細介紹如何使用Node-RED來實現M
    的頭像 發(fā)表于 08-02 08:21 ?263次閱讀
    使用<b class='flag-5'>Node-RED</b>實現ModBus TCP到RTU的轉換