TDengine + MQTT :车联网时序数据库如何高效接入

news2025/3/11 4:53:23

现代新能源汽车,作为一种内部系统极为复杂的交通工具,配备了大量传感器、导航设备、应用软件,这些传感器产生的数据都需要上报到车联网平台当中。对于这些车辆的状态数据(如车速、发动机转速等)、位置数据(经纬度等)以及用户行为数据,车联网平台需要对它们进行实时/离线计算分析,从而为用户提升驾驶体验,提供安全保障,为厂商提供质量检测、功能优化,为交通管理部门提供流量、违章监测、甚至为城市规划提供帮助。

在车联网领域中 MQTT 是十分常见的协议,它所具备的:能够适应不稳定的网络环境、轻量级、低延迟等特点,使其非常适合车辆数据的上报,也是目前主流的车联网边端-云端数据交互的通讯协议。

而 TDengine 是一款从诞生之初便致力于为工业、物联网领域推动信息化改革的时序大数据平台。而车联网作为物联网的重要分支,自然也是 TDengine 主攻的领域之一。因此,在 TDengine Enterprise/TDengine Cloud 的外部数据源接入组件中,我们提供了诸如:MQTT、OPC-UA、OPC-DA 等数据直采的功能。让用户可以凭借十分简单的 Web 界面配置,无需任何一行代码,便完成车联网的位置、车辆状态、用户行为等数据的接入。

我们可以想象出这样一个场景:

通过 TDengine 的 web 界面工具,订阅 MQTT 的 “GPS” topic 们获取全部车辆的 GPS 数据,然后把“GPS” topic 和 TDengine 中创建出来的“超级表 GPS”对应起来,再把 MQTT 数据中的“车牌号”, “车型”,“汽车品牌”同 TDengine “GPS” 超级表中不同的标签映射起来。最终, MQTT 数据就可以源源不断地接入TDengine 当中了。

TDengine 的数据采集插件就像是一个翻译官,它能理解 MQTT 数据结构映射到时序库数据结构的需求,最终把他们巧妙地结合在一起。

那么,使用 TDengine 采集车联网上报的 MQTT 数据到底有多简单?

抽象一下,只需要如下步骤:

1. 对于非 TDengine Enterprise(企业版)用户,花 3 分钟时间注册 TDengine Cloud ,https://cloud.taosdata.com/auth/login,根据提示兑换 600 元额度的免费使用。

2. 在TDengine 中提前创建好一个数据库,用于存放MQTT数据。(具体建库参数值如需自定义,可参阅:数据库 | TDengine 文档 | 涛思数据)

3. 确保代理插件和 MQTT server 处在同一网络,然后根据提示,逐步复制粘贴,安装代理插件并启动。

4. 新增数据源。

5. 按顺序填写/选择:自定义的任务名称;MQTT 类型;选择刚刚创建的代理插件;填写MQTT server 的 IP 和端口。 PS:这里可以用一个免费的 MQTT server 做验证(broker.emqx.io:1883)。

6. 填写 MQTT 协议版本、自定义的Client ID、和需要订阅的主题(topic)以及该订阅的 QOS (Quality of Service 服务质量)级别,QOS 可选范围为0、1、2,具体写法参考示例即可。(用户名密码为选填项。)

7. 解析数据,在MQTT Payload 模块中配置解析 MQTT 消息:

可以点击从服务器检索,从 MQTT Broker 获得示例数据。也可以自己填写 MQTT 消息体中的示例数据,例如:{“id”: 1, “message”: “hello-word”}{“id”: 2, “message”: “hello-word”}。

8. 获得数据之后,可以选择自定义的方式依次去处理这个json:

  • 提取出列。
  • 对提取出的列数据,通过分隔符、正则表达式等进行提取或拆分:比如把“中国-北京”拆分成“中国”和“北京” 两列。
  • 对最终的结果进行过滤:比如只取车速大于 xxx 的数据。

9. 创建一个超级表,用于存储MQTT数据。然后把刚刚处理过的 MQTT 数据结构和 TDengine 的超级表做一个映射关系:这里我们可以使用各种灵活的方式处理映射关系。比如设置时间戳自动生成、固定制、默认值、以及最基本的匹配。

10. 填写完成以上信息后,下拉到底部点击“保存并应用”按钮,即可直接启动从 MQTT 到 TDengine 的数据同步了。

11.在这里看到连接代理和数据源任务都处于正常状态之后,就可以去TDengine 中使用 SQL 语句检查我们的 MQTT 数据了。

现在,我们已经看到MQTT server 的数据正在源源不断地写入 TDengine 了。

在这个配置过程中,我们还能在 WEB 页面看到很多其他配置项,但是他们都是选填项,这部分用户可以根据实际情况填写,比如:

  1. 用户名/密码,SSL 认证。
  2. Keep Alive 和 Clean Session 为具体使用时候关于空连接释放和是否记录订阅进度的配置。
  3. 代理插件的日志级别、日志保留天数、mqtt原始数据的保留设置。

现在,我们就已经轻松完成了车辆 MQTT 数据的上传。整个过程中,唯一耗时的地方,可能就在于 MQTT 数据结构和 TDengine 的超级表结构的匹配环节。如果您对 TDengine 的“超级表-子表”的数据模型十分熟悉的话,想必不会花很多时间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2272795.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

jenkins入门3 --执行一个小demo

1、新建视图 视图可以理解为是item的集合,这样可以将item分类。新建视频可以选择加入已有的item 2、新建item 1)输入任务名称、选择一个类型,常用的是第一个freestyle project 2)进行item相关配置,general 设置项目名字,描述,参数…

【Vue.js】监听器功能(EventListener)的实际应用【合集】

目录 🤔在实际开发过程中,我遇到了一个颇为棘手的小问题 😋解决这个小问题 问题出现的原因剖析 解决方法阐述 问题成功解决!​ 📖相关知识总结 基本概念 使用方法 实际应用场景 🤔在实际开发过程中…

【C++数据结构——线性表】顺序表的基本运算(头歌实践教学平台习题)【合集】

目录😋 任务描述 相关知识 一、线性表的基本概念 二、初始化线性表 三、销毁线性表 四、判定是否为空表 五、求线性表的长度 六、输出线性表 七、求线性表中某个数据元素值 八、按元素值查找 九、插入数据元素 十、删除数据元素 测试说明 通关代码 测…

【C++数据结构——查找】二分查找(头歌实践教学平台习题)【合集】

目录😋 任务描述 相关知识 一、根据键盘输入的一组有序数据建立顺序表 二、顺序表的输出 三、二分查找算法 测试说明 通关代码 测试结果 任务描述 本关任务:实现二分查找的算法。 相关知识 为了完成本关任务,你需要掌握: …

20250103在Ubuntu20.04.5的Android Studio 2024.2.1.12中跑通Hello World

20250103在Ubuntu20.04.5的Android Studio 2024.2.1.12中跑通Hello World 2025/1/3 14:06 百度:android studio helloworld android studio hello world kotlin helloword kotlin 串口 no run configurations added android studio no run configurations added 1、…

卸载干净 IDEA(图文讲解)

目录 1、卸载 IDEA 程序 2、注册表清理 3、残留清理 1、卸载 IDEA 程序 点击屏幕左下角 Windows 图标 -> 设置-控制面板->intellij idea 勾选第一栏 Delete IntelliJ IDEA 2022.2 caches and local history,表示同时删除 IDEA 本地缓存以及历史。 Delete I…

【HarmonyOS】鸿蒙应用实现屏幕录制详解和源码

【HarmonyOS】鸿蒙应用实现屏幕录制详解和源码 一、前言 官方文档关于屏幕录制的API和示例介绍获取简单和突兀。使用起来会让上手程度变高。所以特意开篇文章,讲解屏幕录制的使用。官方文档参见:使用AVScreenCaptureRecorder录屏写文件(ArkTS) 二、方…

我的创作纪念日——《惊变128天》

我的创作纪念日——《惊变128天》 机缘收获日常成就憧憬 机缘 时光飞逝,转眼间,我已在这条创作之路上走过了 128 天。回顾起 2024 年 8 月 29 日,我满怀忐忑与期待,撰写了第一篇技术博客《讲解LeetCode第1题:两数之和…

stm32第一次烧录或者上电运行卡死问题分析

问题描述 单片机烧录代码(刚上电)无法立即运行,必须要复位一次或多次才能运行;跟踪调试会进入HardFault_Handler中断。 问题分析 烧录配置如下图,首先排除配置问题那么该问题就比较让人头大了,理论上&am…

YOLOV8训练好的best.pt模型转best.onnx并部署成python可调用

今天这篇博文是学习大佬作品以后,执行我的需求后的总结,做了一些代码调整,就此记录一下,非常感谢大佬提供如此好的输出。 已知yolov8 训练好的模型一般是pt格式,比如best.pt,现在我期望这个模型可以转成可以…

君正T41交叉编译ffmpeg、opencv并做h264软解,利用君正SDK做h264硬件编码

目录 1 交叉编译ffmpeg----错误解决过程,不要看 1.1 下载源码 1.2 配置 1.3 编译 安装 1.3.1 报错:libavfilter/libavfilter.so: undefined reference to fminf 1.3.2 报错:error: unknown type name HEVCContext; did you mean HEVCPr…

基于ASP.NET的动漫网站

一、系统架构与技术实现 系统架构:基于ASP.NET的MVC框架构建,实现网站的层次结构,使得网站更加易于维护和扩展。 技术实现:利用ASP.NET的技术特点,如强大的后端开发能力、丰富的UI控件等,结合前端技术如HT…

「Java 数据结构全面解读」:从基础到进阶的实战指南

「Java 数据结构全面解读」:从基础到进阶的实战指南 数据结构是程序设计中的核心部分,用于组织和管理数据。Java 提供了丰富的集合框架和工具类,涵盖了常见的数据结构如数组、链表、栈、队列和树等。本文将系统性地介绍这些数据结构的概念、…

安卓NDK视觉开发——手机拍照文档边缘检测实现方法与库封装

一、项目创建 创建NDK项目有两种方式,一种从新创建整个项目,一个在创建好的项目添加NDK接口。 1.创建NDK项目 创建 一个Native C项目: 选择包名、API版本与算法交互的语言: 选择C版本: 创建完之后,可…

MATLAB仿真:基于GS算法的经大气湍流畸变涡旋光束波前校正仿真

GS算法流程 GS(Gerchberg-Saxton)相位恢复算法是一种基于傅里叶变换的最速下降算法,可以通过输出平面和输入平面上光束的光强分布计算出光束的相位分布。图1是基于GS算法的涡旋光束畸变波前校正系统框图,在该框图中,已…

【React+TypeScript+DeepSeek】穿越时空对话机

引言 在这个数字化的时代,历史学习常常给人一种距离感。教科书中的历史人物似乎永远停留在文字里,我们无法真正理解他们的思想和智慧。如何让这些伟大的历史人物"活"起来?如何让历史学习变得生动有趣?带着这些思考&…

深入刨析数据结构之排序(上)

目录 1.内部排序 1.1概述 1.2插入排序 1.2.1其他插入排序 1.2.1.1 折半插入排序 1.2.1.2 2-路插入排序 1.3希尔排序 1.4快速排序 1.4.1起泡排序 1.4.2快速排序 1.4.2.1hoare版本 1.4.2.2挖坑版本 1.4.2.3前后指针版本 1.4.2.4优化版本 1.4.2.4.1小区间插入排序优…

AIA - APLIC之三(附APLIC处理流程图)

本文属于《 RISC-V指令集基础系列教程》之一,欢迎查看其它文章。 1 APLIC复位 APLIC复位后,其所有状态都变得有效且一致,但以下情况除外: 每个中断域的domaincfg寄存器(spec第 4.5.1 节);可能是machine-level interrupt domain的MSI地址配置寄存器(spec第4.5.3 和4.5…

openwrt 清缓存命令行

一、查看缓存 : free -m 二、清缓存:echo 3 > /proc/sys/vm/drop_caches  三、详解。 释放物理页缓存 echo 1 > /proc/sys/vm/drop_caches 释放可回收的slab对象,包含inode and dentry echo 2 > /proc/sys/vm/drop_caches 同时…

Linux -- 端口号、套接字、网络字节序、sockaddr 结构体

目录 什么是端口号? 什么是套接字? 网络字节序 struct sockaddr 结构体 什么是端口号? 我们日常上网的时候,主机其实是在进行两种操作: 1、把远端的数据拉取到本地,比如刷抖音的时候,手机向…