时序数据库 TDengine 支持集成开源的物联网平台 ThingsBoard

Thingsboard 中"设备配置"和"设备"的关系是一对多的关系,通过设备配置为每个设备设置不同的配置,每个设备都会有一个与其关联的设备配置文件。等等,这不就是TDengine 中超级表的概念:

超级表是一种特殊的表结构,用于代表一类具有相同数据模式的数据采集点。一个超级表有多个子表,一个子表只能隶属于一个超级表。

因此,将两者有机结合起来:TDengine 中创建超级表作为"设备配置",Thingsboard 中添加设备则自动在TDengine 中创建子表,伟大的设计殊途同归。

灵魂的碰撞

安装部署

安装过程可以直接参考官方安装教程:Installing ThingsBoard CE on Ubuntu Server | ThingsBoard Community Edition

但是有两点需要注意:

  • 请点击这里,联系我们获取适配版本。

  • 配置文件增加 TDengine 相关连接配置:

    spring.tdengine

    export TDENGINE_URL=jdbc:TAOS-RS://127.0.0.1:6041/thingsboard
    export TDENGINE_USERNAME=root
    export TDENGINE_PASSWORD=taosdata
    export TDENGINE_STR_LEN=1024
    export TDENGINE_STR_COL_MAX=65517
    export TDENGINE_STR_TAG_MAX=16382

操作步骤

1.创建"设备配置"

以一个车辆管理系统为例,需要记录车辆的车牌号、数据上报时间、经度、纬度、车速这几个变量。因此,我们调用接口来创建一个新的"设备配置"。

复制代码
curl -X POST 'http://127.0.0.1:8080/api/deviceProfile' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer $YOUR_JWT_TOKEN_HERE' \
--data-raw '{
    "name": "truck",
    "type": "DEFAULT",
    "image": null,
    "defaultQueueName": null,
    "transportType": "DEFAULT",
    "provisionType": "DISABLED",
    "description": "",
    "profileData": {
        "configuration": {
            "type": "DEFAULT"
        },
        "transportConfiguration": {
            "type": "DEFAULT"
        },
        "alarms": null,
        "provisionConfiguration": {
            "type": "DISABLED"
        }
    },
    "tableInfo": {
        "columns": [{"name":"longtitude","type":"double","len":10},{"name":"latitude","type":"double"},{"name":"speed","type":"float"}],
        "tags": [{"name":"license_plate_number","type":"nchar","len":8}]
    }
}'

Thingsboard 中成功创建名称为"profileStable" 的"设备配置":

数据库中成功创建超级表:

2.添加新设备

选择已有配置"profileStable",创建新的设备。

成功创建了一个名叫"测A88888″ 的设备,具体的子表名称可以通过"复制设备ID" 查看。

3.测试写入数据

直接通过访问令牌,调用接口发送数据

复制代码
curl -X POST 'http://127.0.0.1:8080/api/v1/$YOU_DEVICE_TOKEN/telemetry' \
--header 'Content-Type: application/json' \
--data-raw '{"license_plate_number":"京A88888","longtitude":108.938744,"latitude":34.368150,"speed":60}'

界面中更新数据

数据库中也写入了最新的记录

业务展示

场景一:车辆实时定位追踪

  • 数据采集:车辆GPS定位信息每秒传输到Thingsboard。
  • 数据存储:在TDengine中创建表存储定位数据。
  • 数据展示:在Thingsboard创建地理位置图表,展示车辆实时位置。

场景二:车队维护预警

按日生成车辆每日超速次数。

  • 创建流计算:在TDengine 中创建流计算

    create stream high_speed fill_history 1 into high_speed subtable(concat('tb_', device_name)) as
    select
    _wstart as 日期,
    count(speed) as 超速次数,
    device_name as 设备名称
    from
    1e169050-86e6-11ef-a5cf-2de52a1b0351
    where
    speed > 90 partition by device_name interval(1d);

  • 查看流计算结果

注:本次适配没有修改原有前端页面,需要调用HTTP API 来创建设备配置。感兴趣的小伙伴可以完善一下,欢迎提交代码交流。

相关推荐
nvd115 分钟前
基于 LangChain + Gemini + CloudSQL (pgvector) 的 RAG 实现指南
数据库·langchain
oMcLin21 分钟前
Ubuntu 22.04 系统升级后 PostgreSQL 无法启动:如何解决数据库迁移中的兼容性问题
数据库·ubuntu·postgresql
福尔摩斯张22 分钟前
STM32数码管和LCD显示技术深度解析(超详细)
数据库·stm32·单片机·嵌入式硬件·mongodb
公众号:ITIL之家30 分钟前
服务价值体系重构:在变化中寻找不变的运维本质
java·运维·开发语言·数据库·重构
橙汁味的风36 分钟前
《数据库系统概论》陈红、卢卫 - 11 - 数据库恢复技术
数据库·数据库系统概论
qq_4557608540 分钟前
redis - 事务
数据库·redis·缓存
清风66666641 分钟前
基于单片机的多路热电偶温度监测与报警器
数据库·单片机·mongodb·毕业设计·课程设计·期末大作业
大巨头42 分钟前
SQL Server 完整锁类型详解
数据库
Damon小智1 小时前
NiFi实现数据存储到数据库
数据库·mysql·docker·postgresql·nifi
任子菲阳1 小时前
学JavaWeb第六天——JDBC & Mybatis
java·数据库·mybatis