既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新
数据来源
至于历史数据怎么来,这不是 TDengine
要解决的问题,哈哈,因为一般需用到 TDengine
这种时序数据库的,都是数据量达到了一定程度,数据分析时的效率遇到瓶颈。
由于换工作的原因,无法使用实际的生产数据进行迁移,我这里模拟了历史数据,直接往 TDengine
中写入1亿条记录。
数据源这里使用 Node.js
模拟了一个 MQTT
客户端,当然也可以使用很多 MQTT
客户端工具: HiveMQ
, MQTTfx
, MQTTX
等。
主要功能
-
按区域检索并查看当前区域接入设备的实时数据
-
指定区域下设备各项指标的平均值以及数据总量
-
查看指定设备的历史数据,可按照时间段检索
-
查看指定设备仅1小时内的各项指标的趋势
-
导出指定设备的全量数据为
Excel
文件
技术选型
-
物联网终端技术:
-
EMQX
-
Node.js
-
后端技术:
-
SpringBoot
-
TDengine
-
TDengine-alert
-
MyBatisPlus
-
WebSocket
-
HuTool
-
前端技术:
-
Vue
-
vue-router
-
ElementPlus
-
Layout 响应式布局
-
Cascader 级联选择器
-
Card 卡片
-
Dialog 对话框
-
Table 表格
-
Pagination 分页
-
DateTimePicker 日期时间选择器
-
Message 消息提示
-
Echarts
环境配置
CentOS 7
TDengine 2.2.0.0,两台虚拟机实例集群
EMQX 4.2.4
SpringBoot 2.4.3
Node.js 12.22.6
Vue 3.0
服务组件
经过这个项目,我加强了对以下技术点的应用与掌握。
-
Node.js模拟MQTT客户端
-
EMQX Webhook消息路由
-
SpringBoot+MyBatisPlus服务端数据ORM
-
TDengine亿级数据存储与查询
-
TDengine-alert与AlertManager报警监控
-
WebSocket实时消息推送
-
Hutool Excel文件导出
-
ECharts数据可视化图表呈现
-
统一响应封装、全局异常拦截
-
Spring事件与监听
-
MyBatisPlus分页
模拟场景
场景:在两个省份的多个城市、每个城市安装100个设备。
{{“太原”, “大同”, “阳泉”, “长治”, “晋城”, “朔州”, “晋中”, “运城”, “忻州”, “临汾”, “吕梁”},
{“西安”, “铜川”, “宝鸡”, “咸阳”, “渭南”, “延安”, “汉中”, “榆林”, “安康”, “商洛”}};
数据模型设计
根据具体业务,设计超级表与子表。
– ts, 时间戳
– voltage, 电压
– currente, 电流
– temperature, 温度
– sn, 设备序号
– city, 时间戳
– groupid, 分组编号
– 超级表
create stable if not exists iot.power(ts timestamp, voltage int, currente float, temperature float) tags(sn int, city nchar(64), groupid int)
– 子表
create table if not exists iot.device1 using iot.power tags(#{sn}, #{city}, #{groupid})
效果展示
- WebSocket服务端推送
这里用到了 Node.js
模拟的一个 MQTT
客户端,并通过 EMQX
的 WebHook
插件回调后端服务接口,借助 Spring
的事件机制,实现消息入库与 WebSocket
实时数据更新 ;
- TDengine查询效率
总量1亿条记录,分页查询毫无压力,基本都是 ms
级返回结果,这得益于 TDengine
的存储结构设计(其实,底层是分区查询的,扫描的仅是很小一部分数据,所以必须快啊)。
- TDengine压缩效率
这可以到 TDengine
的数据目录 data
,其链接目录: /var/lib/taos/vnode
,观察数据的占用空间。
数据查询
模拟历史数据,通过脚本直接往 TDengine
中写入近1亿条记录。
- 条件查询、聚合查询
select count(1) total, avg(voltage) voltage, avg(currente) currente, avg(temperature) temperature from iot.power where city=‘西安’;
- 按时间范围查询
SELECT COUNT(1)
FROM power
WHERE sn = ‘1100’ AND ts BETWEEN ‘1610168956836’ AND ‘1641704956836’;
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新
836’;
[外链图片转存中…(img-rVI2f1eI-1715686034937)]
[外链图片转存中…(img-RaYwsGKe-1715686034937)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新