TDengine 與開源可視化編程工具 Node-RED 集成

在這里插入圖片描述

簡介

Node-RED 是由 IBM 開發的基于 Node.js 的開源可視化編程工具,通過圖形化界面組裝連接各種節點,實現物聯網設備、API 及在線服務的連接。同時支持多協議、跨平臺,社區活躍,適用于智能家居、工業自動化等場景的事件驅動應用開發,其主要特點是低代碼、可視化。

TDengine 與 Node-RED 深度融合為工業 IoT 場景提供全棧式解決方案。通過 Node-RED 的 MQTT/OPC UA/Modbus 等協議節點,實現 PLC、傳感器等設備毫秒級數據采集。同時 Node-RED 中基于 TDengine 的毫秒級實時查詢結果,觸發繼電器動作、閥門開合等物理控制,實現更實時的聯動控制。

node-red-node-tdengine 是 TDengine 為 Node-RED 開發的官方插件,由兩個節點組成:

  • tdengine-operator:提供 SQL 語句執行能力,可實現數據寫入/查詢/元數據管理等功能。
  • tdengine-consumer:提供數據訂閱消費能力,可實現從指定訂閱服務器消費指定 TOPIC 的功能。

前置條件

準備以下環境:

  • TDengine 3.3.2.0 及以上版本集群已部署并正常運行(企業/社區/云服務版均可)。
  • taosAdapter 能夠正常運行,詳細參考 taosAdapter 參考手冊。
  • Node-RED 3.0.0 及以上版本,Node-RED 安裝。
  • Node.js 語言連接器 3.1.8 及以上版本,可從 npmjs.com 下載。
  • node-red-node-tdengine 插件 1.0.0 及以上版本,可從 npmjs.com 下載。

以上各安裝組件調用關系如下圖:

在這里插入圖片描述

配置數據源

插件數據源在節點屬性中配置,通過 Node.js 語言連接器 連接數據源,配置步驟如下:

  1. 啟動 Node-RED 服務,使用瀏覽器進入 Node-RED 主頁。

  2. 畫布左側在節點選擇區域選擇 tdengine-operator 或 tdengine-consumer 節點拖至畫布。

  3. 雙擊畫布中選中節點,彈出屬性設置窗口,填寫數據庫連接信息:

    • tdengine-operator 節點連接串格式:ws://user:password@host:port
    • tdengine-consumer 節點連接串格式:ws://host:port

    更多詳細內容請點擊畫布右側上方區域中字典圖標按鈕,參考在線幫助文檔。

  4. 配置完成后,點擊右上角“部署”按鈕,節點狀態為綠色,表示數據源配置正確且連接正常。

驗證方法

tdengine-operator

參考下一節“使用示例->采集數據”章節:

  1. 配置好 tdengine-operator 數據庫連接屬性。
  2. 節點前增加 inject 節點,配置 msg.topic 為預期寫入 SQL。
  3. 點擊 inject 節點“注入”按鈕觸發 SQL 執行。
  4. 使用 taos-CLI 查詢預期寫入數據是否存在,驗證寫入成功。

tdengine-consumer

參考下一節“使用示例->數據訂閱”章節:

  1. 配置好 tdengine-consumer 節點訂閱各屬性。
  2. 其后增加 debug 節點。
  3. 在節點屬性中勾選“節點狀態”,下拉列表中選擇“消息數量”。
  4. 使用 taos-CLI 向 TOPIC 所在表寫入一條數據。
  5. 觀察 debug 節點計數預期會加 1。
  6. 驗證輸出 payload 數據預期與寫入數據一致。
  7. 全部符合預期即為驗證成功。

使用示例

場景準備

場景介紹

某生產車間有多臺智能電表,電表每一秒產生一條數據,數據準備存儲在 TDengine 數據庫中,要求實時輸出每分鐘各智能電表平均電流、電壓及用電量,同時要對電流 > 25A 或電壓 > 230V 負載過大設備進行報警。

我們使用 Node-RED + TDengine 來實現需求:

  • 使用 Inject + function 節點模擬設備產生數據。
  • tdengine-operator 節點負責寫入數據。
  • 實時統計使用 tdengine-operator 節點查詢功能。
  • 過載報警使用 tdengine-consumer 訂閱功能。

假設:

  • TDengine 服務器:www.example.com
  • WEBSOCKET 端口:6041。
  • 用戶名/密碼:默認。
  • 模擬設備:三臺(d0,d1,d2)。
數據建模

使用數據庫管理工具 taos-CLI,為采集數據進行手工建模,采用一張設備一張表建模思路:

  • 創建超級表:meters。
  • 創建子表:d0,d1,d2。

建模 SQL 如下:

create database test;
create stable test.meters (ts timestamp, current float, voltage int, phase float ) tags (groupid int, location varchar(24));
create table test.d0 using test.meters tags(1, 'workshop1');
create table test.d1 using test.meters tags(2, 'workshop1');
create table test.d2 using test.meters tags(2, 'workshop2');

業務處理

數據采集

示例使用生成隨機數方式模擬真實設備生產數據,tdengine-operator 節點配置 TDengine 數據源連接信息,并把數據寫入 TDengine,同時使用 debug 節點監控寫入成功數據量并展示于界面。

操作步驟如下:

  • 增加寫入節點

    1. 在節點選擇區域選擇 tdengine-operator 節點,拖動至畫布中。
    2. 雙擊節點打開屬性設置,名稱填寫 ‘td-writer’,數據庫項右側點擊“+”號圖標。
    3. 彈出窗口中,名稱填寫 ‘db-server’,連接類型選擇使用字符串連接,輸入:
    ws://root:taosdata@www.example.com:6041 
    
    1. 點擊“添加”并返回。
  • 模擬設備產生數據

    1. 在節點選擇區域選擇 function 節點,拖動至畫布 td-writer 節點前。
    2. 雙擊節點打開屬性設置,名稱填寫‘write d0’,下面選項卡選擇“運行函數”,填寫如下內容后保存并返回畫布。
       // generate randconst value2 = Math.floor(Math.random() * (30 - 5 + 1)) + 5; // 5-30const value3 = Math.floor(Math.random() * (240 - 198 + 1)) + 198; // 198-240const value4 = Math.floor(Math.random() * (3 - 1 + 1)) + 1; // 1-3// sqlmsg.topic = `insert into test.d0 values (now, ${value2}, ${value3}, ${value4});`;return msg;
    
    1. 在節點選擇區域選擇 inject 節點,拖動至畫布 write d0 節點前。

    2. 雙擊節點打開屬性設置,名稱填寫‘inject1’,下拉列表中選擇“周期性執行”,周期選擇每隔 1 秒,保存并返回畫布。

    3. 重復 1 ~ 4 步完成另外兩臺設備 (d1,d2) 流程。

  • 增加信息輸出

    1. 在節點選擇區域選擇 debug 節點,拖動至畫布 td-writer 節點后。
    2. 雙擊節點打開屬性設置,勾選“節點狀態”,下拉列表中選擇消息數量。

以上節點增加完成后,依次把上面節點按順序連接起來,形成一條流水線,數據采集流程制作完成。

點擊右上角“部署”按鈕發布修改內容,運行成功后可以看到:

  • td-writer 節點狀態變成綠色,表示流程工作正常。
  • debug 節點下的數字表示成功采集次數。

在這里插入圖片描述

向下游節點輸出寫入成功結果,若失敗拋出異常:

{"topic":  "insert into test.d1 values (now, 20, 203, 2);","isQuery":  false,"payload":{"affectRows": 1,"totalTime":  2,"timing":     "961982"}
}
數據查詢

查詢流程由三個節點(inject/tdengine-operator/debug)組成,完成每分鐘實時輸出各智能電表平均電流、電壓及用電量需求。
由 inject 節點完成觸發查詢請求,結果輸出至下游 debug 節點中,節點上顯示查詢執行成功數量。

操作步驟如下:

  1. 將 inject 節點拖動至畫布中,雙擊節點設置屬性,名稱填寫 ‘query’, msg.topic 填寫并保存并返回畫布:
select tbname, avg(current), avg(voltage), sum(p) 
from ( select tbname,current,voltage,current*voltage/60 as p from test.meters where  ts > now-60s partition by tbname)
group by tbname;
  1. 將 tdengine-operator 節點拖動至畫布中,雙擊節點設置屬性,“數據庫”選擇前面已創建好的數據源 ‘db-server’,保存并返回畫布。
  2. 將 debug 節點拖動至畫布中,雙擊節點設置屬性,勾選“節點狀態”,下拉列表中選擇“消息數量”,保存并返回畫布。
  3. 依次把以上節點按順序連接起來,點擊“部署”按鈕發布修改內容。

流程啟動成功后:

  • td-reader 節點狀態變成“綠色”,表示流程工作正常。
  • debug 節點顯示查詢成功次數。

在這里插入圖片描述

向下游節點輸出查詢結果,若失敗拋出異常:

{"topic":  "select tbname,avg(current) ...","isQuery":  true,"payload": [{"tbname":      "d2","avg(current)": 26.7,"avg(voltage)": 235,"sum(p)":       6329},{"tbname":       "d0","avg(current)": 16.5,"avg(voltage)": 222,"sum(p)":       121},{"tbname":       "d1","avg(current)": 29,"avg(voltage)": 202,"sum(p)":       5833}]
}
數據訂閱

數據訂閱流程由兩個節點(tdengine-consumer/debug)組成,實現過載告警。
debug 節點展示向下游節點推送數據次數,生產中可把 debug 節點更換為處理訂閱數據的功能節點。

操作步驟如下:

  1. 使用 taos-CLI 手工創建訂閱主題”topic_overload“, SQL 如下:
create topic topic_overload as select tbname,* from test.meters where current > 25 or voltage > 230;
  1. tdengine-consumer 節點拖動至畫布中,雙擊節點設置屬性,填寫如下內容后保存并返回畫布。

    • 名稱:td-consumer
    • 訂閱服務器:ws://www.example.com:6041
    • 用戶名:root
    • 密碼:taosdata
    • 訂閱主題:topic_overload
    • 消費開始位置:latest
    • 其它項保持默認
  2. 將 debug 節點拖動至畫布中,雙擊節點設置屬性,勾選“節點狀態”,下拉列表中選擇“消息數量”,保存并返回畫布。

  3. 依次把以上節點按順序連接起來,點擊”部署“按鈕發布修改內容。

流程啟動成功后可看到 td-consumer 節點狀態變成“綠色”表示流程工作正常,debug 節點數字表示消費次數,如下圖:

在這里插入圖片描述

向下游節點推送的過載設備警告信息,若失敗拋出異常:

{"topic": "topic_overload","payload": [{"tbname":   "d1","ts":       "1750140456777","current":  31,"voltage":  217,"phase":    2,"groupid":  4,"location": "California.MountainView"}],"database":  "test","vgroup_id": 4,"precision": 0
}

異常捕獲

在數據采集、查詢及訂閱流程中,發生錯誤均按拋出異常機制來處理,需建立異常監控流程:

  1. 將 catch 節點拖動至畫布中。
  2. 雙擊節點打開屬性設置,名稱填寫 ‘catch all except’,捕獲范圍選擇“所有節點”。
  3. 將 debug 節點拖動至畫布 catch all except 節點后。
  4. 雙擊節點設置屬性,勾選“節點狀態”,下拉列表中選擇“消息數量”,保存并返回畫布。
  5. 依次把以上節點按順序連接起來,點擊”部署“按鈕發布修改內容。
    流程啟動后監控所有節點異常產生:
  • debug 節點展示發生異常數量。
  • 可通過 NODE-RED 日志系統查看異常詳細。

在這里插入圖片描述

運行效果

以上流程制作完成后,點擊“部署”發布,進入運行狀態,如下:
在這里插入圖片描述

總結

本文通過工業監控場景展示了:

  1. Node-RED 與 TDengine 的三種集成模式:
    • 數據采集(tdengine-operator 寫入)
    • 實時查詢(tdengine-operator 查詢)
    • 事件驅動(tdengine-consumer 訂閱)
  2. 完整的錯誤處理機制
  3. 生產環境部署參考方案

本文側重從示例角度介紹,全部功能文檔請在 Node-RED 節點在線文檔中獲取。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/84543.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/84543.shtml
英文地址,請注明出處:http://en.pswp.cn/web/84543.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

OpenCV——圖像形態學

圖像形態學 一、像素的距離二、像素的鄰域三、膨脹與腐蝕3.1、結構元素3.2、腐蝕3.3、膨脹 四、形態學操作4.1、開運算和閉運算4.2、頂帽和黑帽4.3、形態學梯度4.4、擊中擊不中 一、像素的距離 圖像中像素之間的距離有多種度量方式,其中常用的有歐式距離、棋盤距離…

在Django中把Base64字符串保存為ImageField

在數據model中使用ImageField來管理avatar。 class User(models.Model):AVATAR_COLORS ((#212736, Black),(#2161FD, Blue),(#36B37E, Green),(#F5121D, Red),(#FE802F, Orange),(#9254DE, Purple),(#EB2F96, Magenta),)def generate_filename(self, filename):url "av…

使用 R 處理圖像

在 R 中進行圖像處理,使用像 imager 這樣的包,可以實現強大的數字圖像分析和處理。本博客將基于"圖像數據分析"文檔的概念,演示使用 imager 包進行的關鍵技術——圖像增強、去噪和直方圖均衡化,并通過可視化結果展示這些…

一命速通Prometheus+Grafana+Consul+VictoriaMetrics

Prometheus業務 搭建及使用 注意:優先看完提供的博客鏈接,可以快速了解該工具的功能及其搭建和使用。 prometheusgrafana 一、PrometheusGrafana普羅米修斯,搭建和使用_普羅米修斯 grafana-CSDN博客 ./prometheus --config.fileprometheus.ym…

螞蟻百寶箱快速創建智能體AI小程序

螞蟻百寶箱官網https://tbox.alipay.com/community?operationSource1006/ 以下是一篇關于螞蟻百寶箱快速創建智能體 AI 小程序的圖文并茂的博客: 標題:螞蟻百寶箱快速創建智能體 AI 小程序,開啟智能應用新體驗 引言 在數字化飛速發展的當…

大模型面試題:RL Scaling Law 中的“過優化”現象及其緩解方法是啥?

更多面試題,請看 大模型面試題總結-CSDN博客 或者 https://gitee.com/lilitom/ai_interview_questions/blob/master/README.md 最好將URL復制到瀏覽器中打開,不然可能無法直接打開 ---------------------------------------------------------------…

Filecoin系列 - IPLD 技術分析

1. 用途 1.1 存儲數據 為了成功地將數據加到 Filecoin 網絡, 需要成功完成以下步驟: 客戶端導入數據生成CAR文件: 數據必須打包成 CAR file (內容可尋址檔案) - CAR是IPLD規范的序列化歸檔文件.存儲交易: 存儲供應商和客戶之間的存儲交易必須由客戶發起, 并由存儲供應商接受…

Apptrace如何幫我精準追蹤移動廣告效果?

開發者視角:Apptrace如何幫我精準追蹤移動廣告效果??? 作為獨立開發者,我最頭疼的就是?“廣告投放到底有沒有用?”?——錢花出去了,用戶是刷量機器人還是真實用戶?哪個渠道的ROI最高?Apptr…

【MySQL篇07】:redo log日志與buffer pool詳解

文章目錄 1. Buffer Pool 緩沖池2. redo log (重做日志)redo log 的作用:為什么需要 redo log buffer?什么時候刷盤呢? 3. 總結一下 redo log 和 Buffer Pool 在更新數據時的協同工作關鍵組件關系圖刷盤完成后 1. Buffer Pool 緩沖池 首先&a…

Qt Library庫系列----Serial串口

前言 每次寫串口相關的功能時,總是需要重新寫或者復制原來寫過的文件,容易出錯不說,這也不是碼農的風格,所以還是得有一套自己得代碼庫,方便調用,又能保持神秘感。 一、開發需求 1.有個實例類;…

第八節:Vben Admin 最新 v5.0 (vben5) 快速入門 - 用戶管理(下)

Vben5 系列文章目錄 ?? 基礎篇 ? 第一節:Vben Admin 最新 v5.0 (vben5) 快速入門 ? 第二節:Vben Admin 最新 v5.0 (vben5) 快速入門 - Python Flask 后端開發詳解(附源碼) ? 第三節:Vben Admin 最新 v5.0 (vben5) 快速入門 - 對接后端登錄接口(上) ? 第四節:Vben Ad…

Redis 性能瓶頸時如何處理?

當 Redis 遇到性能瓶頸時,需要從多個維度進行排查和優化。以下是系統化的解決方案,涵蓋硬件、配置、數據模型、網絡等關鍵點: 一、硬件資源優化 內存瓶頸 現象:頻繁觸發 OOM 或 used_memory 接近物理內存。解決: 升級服…

多相機三維人臉掃描儀:超寫實數字人模型制作“加速器”

超寫實數字人,又稱“數字分身”,是以真人形象為原型構建的高仿真虛擬形象,按維度可分為2D數字人與3D數字人。這類數字人已廣泛應用于影視制作、游戲交互、品牌直播等場景,其核心價值在于通過技術手段實現真人形象的數字化復刻&…

ceph 自動調整 pg_num

要讓 Ceph 的 pool 自動調整 pg_num(PG 數量),你需要啟用 PG autoscaler。這是從 Ceph Octopus(15.x) 開始引入的功能,能根據池的容量和對象數量自動建議或調整 pg_num,以實現負載均衡。 ? 一步步開啟 Pool 的 pg_num 自動調整 1. 啟用 PG autoscaler 模塊(通常默認啟…

Python Beautiful Soup 4【HTML/XML解析庫】 簡介

全面剖析大模型 圖解大模型:生成式AI原理與實戰 大語言模型大模型應用開發Transformer DeepSeek模型原理開發深度學習 圖靈出品 大模型強化學習詳解 大模型算法:強化學習、微調與對齊(全彩)詳解強化學習 RLHF GRPO DPO SFT CoT D…

AI Agent開發與安全

AI Agent的核心演進 Level 1:LLM Agent(聊天機器人) 特點:靠提示詞工程賦予人設(如星座占卜、角色扮演),但存在幻覺問題,輸出不可控。局限:娛樂性強,難勝任嚴…

NumPy玩轉數據科學

本文在創作過程中借助 AI 工具輔助資料整理與內容優化。圖片來源網絡。 文章目錄 一、引言二、NumPy 概述2.1 NumPy 的定義與發展2.2 NumPy 的重要性 三、NumPy 的多維數組支持3.1 多維數組的概念3.2 多維數組的創建與操作3.2.1 數組的創建3.2.2 數組的索引和切片3.2.3 數組的運…

【uniapp小程序開發】圖表組件ucharts的使用(入門)

一、插件的安裝 安裝非常簡單,打開uniapp的插件市場,導入到項目中即可 下載地址:https://ext.dcloud.net.cn/plugin?id271 二、開始實踐 先看頁面的效果 頁面中實現了三個基本圖形的展示:折線圖、餅圖和柱狀圖。 上圖左一&a…

APISIX+etcd高可用集群部署方案詳解

#作者:任少近 文章目錄 一、背景二、部署etcd1、etcd的svc部署yaml2、Etcd 服務定義說明3、etcd的statefulset部署yaml4、Etcd 狀態集(StatefulSet)配置說明5、查看集群狀態 三、部署apisix的deployment部署1、apisix部署yaml文件2、APISIX …

Excel常用公式大全

資源寶整理分享:https://www.httple.net Excel常用公式大全可以幫助用戶提高工作效率,掌握常用的Excel公式,讓數據處理和計算工作更加便捷高效。了解公式學習方法、用途,不再死記硬背,拒絕漫無目的。 命令用途注釋說…