暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

“设备配置”遇到“超级表”,City 不City?

TDengine 2024-11-28
89




小T导读

本篇文章来自“2024,我想和 TDengine 谈谈”征文活动的二等奖作品。作者巧妙地将 Thingsboard 的“设备配置”与 TDengine 的超级表功能相结合,实现了设备管理和时序数据存储的高效协作。从安装部署到业务场景展示,文章详细介绍了车辆管理系统的搭建过程,包括车辆实时定位追踪和车队维护预警等功能,展现了两大开源技术的创新应用。

1

写在前面

在 Thingsboard 中,“设备配置”和“设备”呈现出一对多的关系:每个设备都可以基于其对应的设备配置文件设置不同的参数。而这一机制,与 TDengine 中的超级表概念不谋而合。

TDengine 的超级表是一种特殊的表结构,用于代表一类具有相同数据模式的数据采集点。每个超级表下可以包含多个子表,而每个子表只能隶属于唯一的超级表。

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

2

灵魂的碰撞

安装部署


安装过程可以直接参考官方安装教程:https://thingsboard.io/docs/user-guide/install/ubuntu/

但是有两点需要注意:

  • 请联系 TDengine 获取适配版本:Thingsboard 官方版本不支持 TDengine 作为时序引擎

  • 配置文件增加 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}'

        界面中更新数据:



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

        3

        业务展示

        场景一:车辆实时定位追


        • 数据采集:车辆 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);


          • 查看流计算结果


          4

          一些遗憾

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

          往期推荐

          客户盘点:北微传感青山钢铁首自信国电投江河信息寓信科技前晨汽车华风数据协鑫鑫光双合电气路特斯昆船电子天合富家红有软件上海晶澳太阳能极氪汽车威士顿树根互联福州城建积成电子西电电力中船九院大唐水电院

          Use Case:泛能网产业智能平台电芯容量预测系统煤矿安全生产综合管控平台虚拟电厂运营管理平台明阳集团能源大数据应用系统知轮智慧轮胎系统中国地震台网中心中移物联智慧出行场景搜狐基金智光电气黑格智能设备追踪场景韵达订单扫描系统顺丰大数据监控平台车辆轨迹定位存储引擎项目西门子轻量级数字化解决方案

          技术分享:TDengine S3 存储TDengine 流计算TDengine 建模实战与工业 SCADA 深度融合TDengine 与新型电力系统TDgpt 如何助力数据预测Historian Connector+TDengine长查询问题实战分享TDengine 数据订阅TDengine SQL 查询规则万字长文解读怎样激活 TDengine 最高性价比

          测试报告:TDengine 线性扩展能力测试IoT 场景下 TDengine 3.0 性能对比分析报告DevOps 场景下 TDengine 3.0 性能对比分析报告

          👇 点击阅读原文立即体验 TDgpt

          文章转载自TDengine,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

          评论