Thingboard id之谜

thingboard使用cassandra-java提供的jar包生成带“-”的uuid;

存储到pg的id是去掉"-"(转换类UUIDConverter),并按照一定规则排序的31位uuid(重点31位MLG)

返回给前端页面使用的,提供是带“-”的uuid(getData方法会转换)

时序数据

启用pg和cassandra混合模式后,cassandra只存储和时序数据相关的三张表

ts_kv_cf、ts_kv_latest_cf、ts_kv_partition_cf

thingsboard时序数据说明文档 https://thingsboard.io/docs/user-guide/telemetry/#websocket-api

主要接口

保存时序数据接口

POST  /api/plugins/telemetry/{entityType}/{entityId}/timeseries/{scope}
// 还有一个接口路径上多一个{ttl}的接口
Head  X-Authorization :token
Body 样例 {"key1":"value1", "key2":true, "key3": 3.0, "key4": 4}
含时间遥测数据,毫秒值
{"ts":1561448813161, "values":{"key1":"value1", "key2":"value2"}}
调用样例:
curl -X POST --header 'Content-Type: application/json' --header 'Accept: */*' --header 'X-Authorization: Bearer –token--' -d '{"key1":"value1", "key2":true, "key3": 3.0, "key4": 4}' 'http://127.0.0.1:8080/api/plugins/telemetry/DEVICE/75a82e30-697f-11e9-8f29-453c4a68cf5e/timeseries/TEST'

名称

类型

含义

是否必填

entityType

String

实体类型,例如DEVICE

entityId

String

实体id

scope

String

无(随意填一个)

body

Application/json

Post消息体,遥测数据

查询时序数据接口

/api/plugins/telemetry/{entityType}/{entityId}/values/timeseries
Head  X-Authorization :token
//调用样例
curl -X GET --header 'Accept: application/json' --header 'X-Authorization: Bearer --token' 'http://127.0.0.1:8080/api/plugins/telemetry/DEVICE/75a82e30-697f-11e9-8f29-453c4a68cf5e/values/timeseries?limit=100&agg=NONE&keys=key1%2Ckey2&startTs=1451649500512&endTs=1556435934100'

名称

类型

含义

是否必填

entityType

String

实体类型,例如DEVICE

entityId

String

实体id

keys

request param

遥测属性键名

limit

request param

返回条数

startTs

request param

开始时间毫秒值

endTs

request param

结束时间毫秒值

注意 startTs要小于查询时序数据的时间

CassandraBaseTimeseriesDao --- > cassandra查询主类 如下:获取所以最新时序数据

private PreparedStatement getFindLatestStmt() {if (findLatestStmt == null) {findLatestStmt = prepare(SELECT_PREFIX +ModelConstants.KEY_COLUMN + "," +ModelConstants.TS_COLUMN + "," +ModelConstants.STRING_VALUE_COLUMN + "," +ModelConstants.BOOLEAN_VALUE_COLUMN + "," +ModelConstants.LONG_VALUE_COLUMN + "," +ModelConstants.DOUBLE_VALUE_COLUMN + " " +"FROM " + ModelConstants.TS_KV_LATEST_CF + " " +"WHERE " + ModelConstants.ENTITY_TYPE_COLUMN + EQUALS_PARAM +"AND " + ModelConstants.ENTITY_ID_COLUMN + EQUALS_PARAM +"AND " + ModelConstants.KEY_COLUMN + EQUALS_PARAM);}return findLatestStmt;
}

查询最新时序数据

注意返回的结果都是String类型

http://localhost:8080/api/plugins/telemetry/DEVICE/ca18f500-2e1b-11eb-9c2a-e7022e5c36ea/values/timeseries

{"mudbus_tag1": [{"ts": 1606719582282,"value": "100.11000061035156"}],"mudbus_tag2": [{"ts": 1606719582282,"value": "58.02734375"}]
}

需要了解cassandra,看这部分博客 cassandra知识点列表

cassandra sql查询样例

cassandra 工具dev-center

use thingsboard;
--- 查询最新遥测数据
select * from ts_kv_latest_cf where entity_type = 'DEVICE' and entity_id = 6f4c5940-672b-11e9-87c3-1b15e9582776;--查询key分区
select * from ts_kv_partitions_cf where entity_type = 'DEVICE' and entity_id = 2523e9d0-60f7-11e9-b7b8-edae55f030fc and key = '定子温度';use thingsboard;
--强制查询
---select * from ts_kv_cf where entity_type = 'DEVICE' and entity_id  = 2523e9d0-60f7-11e9-b7b8-edae55f030fc ALLOW FILTERING;
---select * from ts_kv_cf where entity_type = 'DEVICE' and entity_id  = 2523e9d0-60f7-11e9-b7b8-edae55f030fc and key = '定子温度' ALLOW FILTERING;
select * from ts_kv_cf where entity_type = 'DEVICE' and entity_id  = 2523e9d0-60f7-11e9-b7b8-edae55f030fc and key = '定子温度' and partition = 1554076800000;use thingsboard;select * from ts_kv_latest_cf where entity_type = 'DEVICE' and entity_id = 75a82e30-697f-11e9-8f29-453c4a68cf5e;select * from ts_kv_partitions_cf where entity_type = 'DEVICE' and entity_id = 75a82e30-697f-11e9-8f29-453c4a68cf5e ALLOW FILTERING;select * from ts_kv_cf where entity_type = 'DEVICE' and entity_id  = 75a82e30-697f-11e9-8f29-453c4a68cf5e ALLOW FILTERING;select * from ts_kv_latest_cf where entity_type = 'DEVICE' and entity_id = 75a82e30-697f-11e9-8f29-453c4a68cf5e;

属性数据

thingsboard将属性数据分为三类:服务端属性(SERVER_SCOPE)、客户端属性(CLIENT_SCOPE)

SHARED_SCOPE(共享属性),属性存放在表attribute_kv

 relation 关联表也是thingsboard很重要的一张表

20200206 Add

顾名思义,服务端属性,是thingsboard服务平台上可以添加的属性,可以添加、修改和删除。

共享属性和服务端属性操作类似;这两个相当于服务端维护人员给设备和资产打标签;

客户端属性是通过mqtt协议或者其他协议从设备上上传的属性(一般是变化比较小的标志例如设备型号等),此属性不可修改和删除,只能通过协议上报。

猜测: 共享属性的设置,从设计上应该是为了向外部共享一些信息或者配置;例如gateway的配置就是通过共享属性进行保存,然后下发到gateway网关。

时序数据和thingsboard传输:MQTT /COAP/HTTP

### HTTP
# 单条数据
curl -v -X POST -d "{\"temperature\": 25}"  http://10.201.82.69:8080/api/v1/IszSkvcSoFJBJnCr70oB/telemetry --header "Content-Type:application/json"
//多条数据
curl -v -X POST -d  "{\"index\": 34,\"latitude\":35.66,\"longitude\":104.88}" http://10.201.82.69:8080/api/v1/yiizf25Xx938rJQUsQeT/telemetry --header "Content-Type:application/json"

时序数据和websocket

https://thingsboard.io/docs/user-guide/telemetry/#websocket-api

ws(s)://host:port/api/ws/plugins/telemetry?token=$JWT_TOKEN

### 页面数据显示
{"tsSubCmds":[{"entityType":"DEVICE","entityId":"2523e9d0-60f7-11e9-b7b8-edae55f030fc","scope":"LATEST_TELEMETRY","cmdId":5}],"historyCmds":[],"attrSubCmds":[{"entityType":"DEVICE","entityId":"2523e9d0-60f7-11e9-b7b8-edae55f030fc","scope":"CLIENT_SCOPE","cmdId":4}]}{"subscriptionId":4,"errorCode":0,"errorMsg":null,"data":{},"latestValues":{}}{"subscriptionId":5,"errorCode":0,"errorMsg":null,"data":{"出口压力":[[1555495102815,"19.4283"]],"定子温度":[[1555495102815,"53.856"]],"流量":[[1555495102815,"63.3829"]]},"latestValues":{"出口压力":1555495102815,"流量":1555495102815,"定子温度":1555495102815}}

Thingsboard 时序数据和属性数据相关推荐

  1. LTSM 实现多元素时序数据植物健康预测

    作者 | 李秋键 出品 | AI科技大本营(ID:rgznai100) 引言: 近些年来,"预测"一词在各个领域被频繁提及,所谓预测,实际上就是根据历史规律,推测未来结果.在科学技 ...

  2. Pandas处理时序数据(初学者必会)!

    ↑↑↑关注后"星标"Datawhale每日干货 & 每月组队学习,不错过Datawhale干货 作者:耿远昊,Datawhale成员,华东师范大学 时序数据是指时间序列数据 ...

  3. 积微论坛报告视频+PPT:用微生物组时序数据重现生物膜装配动态过程

    点击阅读原文观看视频!后台回复"王金锋"获得视频和讲稿下载链接. 用微生物组时序数据重现生物膜装配动态过程 主讲人介绍 王金锋,博士.2011年入职中国科学院北京生命科学研究院工作 ...

  4. pandas基于时序数据计算模型预测推理需要的统计数据(累计时间、长度变化、变化率、方差、均值、最大、最小等):范围内的统计量、变化率、获得数据集最后的几条数据的统计量、变化率、获得范围内的统计量

    pandas基于时序数据计算模型预测推理需要的统计数据(累计时间.长度变化.变化率.方差.均值.最大.最小等):范围内的统计量.变化率.获得数据集最后的几条数据的统计量.变化率.获得范围内的统计量 目 ...

  5. R语言window函数提取时序数据数据子集(subset):使用xts包将dataframe数据转化为时间序列数据(time series)、使用window函数从时间序列对象中提取数据子集

    R语言window函数提取时序数据数据子集(subset):使用xts包将dataframe数据转化为时间序列数据(time series).使用window函数从时间序列对象中提取数据子集 目录

  6. pandas基于时序数据计算模型预测推理需要的统计数据(累计时间、长度变化、变化率、方差、均值、最大、最小等):数据持续的时间(分钟)、获得某一节点之后的数据总变化量、获得范围内的统计量

    pandas基于时序数据计算模型预测推理需要的统计数据(累计时间.长度变化.变化率.方差.均值.最大.最小等):数据持续的时间(分钟).获得某一节点之后的数据总变化量.获得范围内的统计量 目录

  7. python使用pandas通过聚合获取时序数据的最后一个指标数据(例如长度指标、时间指标)生成标签并与原表连接(join)进行不同标签特征的可视化分析

    python使用pandas通过聚合获取时序数据的最后一个指标数据(例如长度指标.时间指标)生成标签并与原表连接(join)进行不同标签特征的可视化分析 目录

  8. 手把手教你用Python玩转时序数据,从采样、预测到聚类

    本文经AI新媒体量子位(公众号 ID: QbitAI)授权转载,转载请联系出处 本文约1800字,建议阅读5分钟 如果你有朝一日碰到了时序数据,该怎么用Python搞定它呢? 时序数据,也就是时间序列 ...

  9. 数据蒋堂 | 时序数据从分表到分库

    作者:蒋步星 来源:数据蒋堂 本文共5500字,建议阅读10+分钟. 一个物理表的数据量太大时,就会影响查询和计算的性能. 这里的时序数据泛指一切随时间推移而不断增长的数据,比如通话记录.银行交易记录 ...

最新文章

  1. 杭电oj1257最少拦截系统—贪心/dp最大递增子序列
  2. 概率分布的熵归一化(Entropy Normalization)
  3. java正则表达式 引用_java – 正则表达式检索引用的字符串和引用字符
  4. linux查看信息文件,lsof---Linux查看文件信息的强大工具
  5. javascript --- 创建一个二维数组
  6. setInterval
  7. OOP的几个不常用的方法
  8. iOS高仿微信悬浮窗、忍者小猪游戏、音乐播放器、支付宝、今日头条布局滚动效果等源码...
  9. 协同办公OA系统 沉淀企业文化
  10. request对象_爬虫:request库的简介
  11. MYSQL file types redo log
  12. ColorBlinder(我是色盲)
  13. java excel 列合并单元格_java怎么操作excel合并单元格
  14. AI资源对接需求汇总:第3期
  15. 基于SSM的餐厅点餐系统设计与实现(Java+MySQL)
  16. 腾讯微博Android客户端开发 - OAuth1.0认证介绍
  17. HNU计算机系统lab3
  18. PT100热电阻温度阻值对应表
  19. 苹果手机黑屏一直转圈怎么办
  20. 大锤老湿教您如何配置TP-Link路由器组建wifi上网

热门文章

  1. JavaSE基础阶段学习笔记
  2. Qt编写自定义控件:简单的方式绘制渐变进度条
  3. 路再长也有尽头,别往回走
  4. 上半年要完成的博客55
  5. vscode C++ debug: lldb: unrecognized option `--interpreter=mi'
  6. yum报Exiting on user cancel
  7. 【本人秃顶程序员】高级 Java 必须突破的 10 个知识点!
  8. Hutool(Excel工具使用)
  9. 你觉得作为一个开发人员应该具备哪些素质呢?
  10. 白告王旋的前端开发笔记——性能优化