阿里云IoT物模型上报数据流转到实例内TSDB

article/2025/9/2 20:44:57

阿里云物联网平台上存储的数据最多为30天,为了能让数据永久保存下来,就需要把物联网平台的数据流转到其他的数据库,对于企业版实例,内部有一个实例内的时空数据库TSDB,正好可以利用。下边就介绍一下物联网平台的物模型上报数据怎么流转到实例内TSDB,怎么查看TSDB内的数据。

目录

一、阿里云物联网设备物模型属性数据格式

1、Topic

2、数据格式

二、本例items具体内容

三、数据流转设置

1、本例数据源Topic设置

2、本例数据目的设置

3、本例脚本代码

四、TSDB内容查询

1、本例主程序

2、本例程序要添加的依赖

3、代码需要改动的部分

(1)连接数据库变量

(2)查询变量

4、测试结果


一、阿里云物联网设备物模型属性数据格式

此部分内容来自阿里云物联网平台官网介绍,具体可以参考:数据格式 (aliyun.com)

1、Topic

Topic:/${productKey}/${deviceName}/thing/event/property/post

通过该Topic获取设备上报的属性信息。

2、数据格式

{"iotId":"4z819VQHk6VSLmmBJfrf00107e****","requestId":"2","productKey":"al12345****","deviceName":"deviceName1234","gmtCreate":1510799670074,"deviceType":"Ammeter","items":{"Power":{"value":"on","time":1510799670074},"Position":{"time":1510292697470,"value":{"latitude":39.9,"longitude":116.38}}},"checkFailedData":{"attribute_8":{"time": 1510292697470,"value": 715665571,"code":6304,"message":"tsl parse: params not exist -> attribute_8"}}
}

参数说明:

参数 类型 说明 iotId String 设备在平台内的唯一标识。 requestId String 设备上报消息的原始数据中的Id,String类型的数字,取值范围为0~4294967295,且每个消息ID在当前设备中具有唯一性。 productKey String 设备所属产品的唯一标识。 deviceName String 设备名称。 gmtCreate Long 数据流转消息产生时间。 deviceType String

设备所属品类。

该品类是您在物联网平台创建产品时选择的品类。具体说明,请参见创建产品或CreateProduct。

items Object 设备数据。 Power String 属性标识符。产品所具有的属性名称请参见产品的TSL描述。如果是自定义模块属性,属性标识符格式为 ${模块标识符}:${属性标识符}(中间为半角冒号)。例如,物模型自定义模块标识符为test,数据格式为:
"items":{"test:Power":{"value":"on","time":1510799670074},"test:Position":{"time":1510292697470,"value":{"latitude":39.9,"longitude":116.38}}}
Position attribute_8 checkFailedData Object 未通过物模型数据校验的数据。 value 根据TSL定义 属性值。 time Long 上报属性的时间,如果设备没有上报数据,默认采用在物联网平台生成的时间。 code Integer 数据未通过物模型数据校验时,返回的错误码。详细说明,请参见 设备端接收的错误码。 message String 数据未通过物模型数据校验时,返回的错误码信息,包含错误原因和具体的错误参数。

二、本例items具体内容

注意,上述数据格式内容里items中的那部分内容才是最核心的东西,是设备属性上报的具体内容,其他部分都是跟系统、产品、设备本身相关的属性,除deviceName之外其他可以不用关注。

本例要流转两个数据:RH(Relative Humidity,相对湿度),CT(Current Temperature,当前温度),items内的数据内容如下:

    "items":{"RH":{"value":56,"time":1510799670074},"CT":{"value":32,"time":1510799670074}}

三、数据流转设置

数据流转的具体操作步骤见以下文章介绍:

阿里云物联网Iot设备上下线状态数据流转的设置_m0_72963799的博客-CSDN博客

上文介绍的是设备状态流转到其他设备,跟本文的区别在于数据源的topic、数据目的和脚本内容不一致,其他操作步骤完全一样。

1、本例数据源Topic设置

  

设置完的结果如下图

操作要点:
消息类型选:物模型数据上报

Topic余下部分选:thing/event/property/post

当选择好产品、设备名称后,会自动生成最终的topic:/gbs********/20210095/thing/event/property/post

2、本例数据目的设置

3、本例脚本代码

var data = payload("json");var RH=getOrNull(data,"items","RH","value");
var CT=getOrNull(data,"items","CT","value");if(RH!=null){writeTsdb(1013,timestamp(),"RH",RH,{"deviceName":deviceName()});}
if(CT!=null){writeTsdb(1013,timestamp(),"CT",CT,{"deviceName":deviceName()});}

 存入tsdb的函数writeTsdb(),本例有五个参数,第一个1013为数据目的ID,第二个为时间戳timestamp(),第三个"RH"就是要存入数据库的字段名,第四个RH及为相对湿度的具体数值,第五个{"deviceName":deviceName()}为设备名称的map数据,如果系统内有多个设备的RH数据,就都会搜索出来。

四、TSDB内容查询

由于实例内的tsdb不能直接从阿里云物联网平台上查看数据库内的内容,只能借助API编写程序来查询。本例使用Android studio3.6.3开发的查询程序。

1、本例主程序

package com.example.mytsdb;import androidx.appcompat.app.AppCompatActivity;import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextClock;
import android.widget.TextView;import com.aliyun.hitsdb.client.TSDB;
import com.aliyun.hitsdb.client.TSDBClientFactory;
import com.aliyun.hitsdb.client.TSDBConfig;
import com.aliyun.hitsdb.client.value.request.LastPointQuery;
import com.aliyun.hitsdb.client.value.request.LastPointSubQuery;
import com.aliyun.hitsdb.client.value.response.LastDataValue;import java.util.HashMap;
import java.util.List;
import java.util.Map;public class MainActivity extends AppCompatActivity {//实例详情页面中的时序数据存储的连接地址、用户名、密码。String connectString = "ts-2ze0*************.hitsdb.rds.aliyuncs.com";int port = 3242;   String username = "iotuser";String password = "************";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);new Thread(new Runnable() {@Overridepublic void run() {try {final TSDBConfig config = TSDBConfig.address(connectString, port).basicAuth(username, password)// 网络连接池大小,默认为64。.httpConnectionPool(64)// HTTP 等待时间,单位为秒,默认为90秒。.httpConnectTimeout(90)// IO 线程数,默认为1。.ioThreadCount(1).config();TSDB tsdbClient = TSDBClientFactory.connect(config);//按标签筛选数据。Map<String, String> tags = new HashMap<String, String>();String metric = "RH";long now = System.currentTimeMillis();LastPointQuery query = LastPointQuery.builder().timestamp(now).backScan(-1).msResolution(true).sub(LastPointSubQuery.builder(metric, tags).build()).build();List<LastDataValue> lastDataValues = tsdbClient.queryLast(query);System.out.println(lastDataValues);} catch (Exception e) {e.printStackTrace();}}}).start();}}

2、本例程序要添加的依赖

implementation 'com.aliyun:hitsdb-client:0.2.7'

3、代码需要改动的部分

(1)连接数据库变量

连接数据库变量有4个:connectString、port、username、password,这四个变量为阿里云实例内的系统参数,查询步骤如下:
 

1、在实例页面点实例详情。

2、点右侧“查看开发配置”按钮。

在开发配置页面最下侧就是时序存储配置,用户名、密码、连接地址及端口号都在这里。

(2)查询变量

代码中的metric变量就是在数据流转脚本里设置的存入数据库的变量字段名,本例一共存入两个字段:“RH”、“CT”,所以查询的时候,metric只能为“RH”、“CT”。

4、测试结果

 java程序中,下边这句代码是将查询结果输出到屏幕上,可以在Android studio的Run窗口看到结果。

System.out.println(lastDataValues);

查询结果如下:

 结果已经能查询到,说明数据已经写入TSDB,流转配置成功!


http://chatgpt.dhexx.cn/article/A4Uh8SXC.shtml

相关文章

使用TSDB自动检测时序数据的异常情况

本期Jesse就带大家来继续了解一下TSDB的应用问题&#xff0c;小伙伴们&#xff0c;让我们直接步入正题吧。 本文仅代表个人观点&#xff0c;如有偏颇之处&#xff0c;还请海涵&#xff5e; 现今&#xff0c;每天都有数千亿个传感器产生大量时序数据。公司收集大量数据使得分析…

TSDB 存储引擎介绍

本文介绍 DolphinDB 在2.0版本中新推出的存储引擎 TSDB。 1. OLAP 与 TSDB 适用的场景 OLAP 是 DolphinDB 在2.0版本之前的唯一存储引擎。数据表中每个分区的每一列存为一个文件。数据在表中的存储顺序与数据写入的顺序一致&#xff0c;数据写入有非常高的效率。 OLAP 引擎的…

TSDB与Blockchain

各位小伙伴们我们又见面了&#xff0c;伴随着区块链技术的推广&#xff0c;很多企业也在思考是否将其应用。其实TSDB与区块链有很多共通之处&#xff0c;本期Jesse就来和大家聊聊TSDB与区块链。本文参考了Nicolas Hourcard的文章“You Don’t Need a Blockchain, You Need a Ti…

FlashDB嵌入式数据库之TSDB数据存储解析

一、驱动层&#xff1a;SFUD&#xff08;Serial Flash Universal Driver&#xff09; 是一款开源的串行 SPI Flash 通用驱动库 二、中间层&#xff1a;FAL&#xff08;FLASH ABSTRACTION LAYER)&#xff09;FLASH 抽象层 三、应用层&#xff1a;FlashDB&#xff08;FlashDB 是一…

时间序列数据库 (TSDB)

参考文档&#xff1a;时间序列数据库 TSDB_时间序列数据库 TSDB-阿里云帮助中心 什么是时序数据库 时序数据是随时间不断产生的一系列数据&#xff0c;简单来说&#xff0c;就是带时间戳的数据。数据可能来自服务器和应用程序的指标、物联网传感器的读数、网站或应用程序上的…

TSDB在高速公路大数据平台的应用

好久没有跟大家聊TSDB的应用场景了&#xff0c;Jesse也在国庆期间进行了补课&#xff0c;今天就跟大家聊聊TSDB在高速公路大数据平台的应用。本文借鉴了郝建明、袁逸涛发表在《上海船舶运输科学研究生学报》的《基于时序数据库的高速公路数据集成平台》一文&#xff0c;感谢二位…

时序数据库(TSDB)

时序数据库&#xff08;TSDB&#xff09;是一种特定类型的数据库&#xff0c;主要用来存储时序数据。随着5G技术的不断成熟&#xff0c;物联网技术将会使得万物互联。物联网时代之前只有手机、电脑可以联网&#xff0c;以后所有设备都会联网&#xff0c;这些设备每时每刻都会吐…

TSDB数据库

目录 为什么需要时序数据库&#xff1a; 时间序列数据库的特点&#xff1a; 常见的时间序列数据库&#xff1a; 时间序列数据库存储&#xff1a; 时间序列数据库问题&#xff1a; 参考资料&#xff1a; 内容是在我球的docs上直接复制过来的&#xff0c;懒得写两份&#x…

关于时许数据库的相关名词解释

1 时序数据库TSDB 英文全称为 Time Series Database&#xff0c;提供高效存取时序数据和统计分析功能的数据管理系统。 2 时序数据&#xff08;Time Series Data&#xff09; 基于稳定频率持续产生的一系列指标监测数据。例如&#xff0c;监测某城市的空气质量时&#xff0c…

物联网平台搭建的全过程介绍(六)——物联网TSDB之基本知识及读写代码介绍

目录 一、TSDB基本知识 二、物联网平台数据流通架构 三、TSDB数据结构 1、TSDB数据包的组成 2、TSDB的另外两个相关概念 四、阿里云物联网平台实例内TSDB功能介绍 1、数据写入 &#xff08;1&#xff09;需要添加的依赖 &#xff08;2&#xff09;写入数据代码 2、数据…

ES6—简介

目录 一、概述 二、扩展&#xff1a;Babel转码器 三、拓展&#xff1a;编译打包 一、概述 概念 ES6全称ECMAScript 6.0&#xff0c;是Javascript语言的下一代标准&#xff0c;2015年6月正式发布。 注意&#xff0c;ES6既是一个历史名词&#xff0c;也是一个泛指&#xff0c;…

深入浅出ES6(一):ES6是什么

深入浅出ES6&#xff08;一&#xff09;&#xff1a;ES6是什么 作者 Jason Orendorff &#xff0c;译者 刘振涛 发布于 2015年6月5日 | http://www.infoq.com/cn/articles/es6-in-depth-an-introduction 我的阅读清单 编者按&#xff1a;ECMAScript 6离我们越来越近了&#…

[ 前端开发 ] 为什么要学习ES6?

ECMAScript 6 概念 ECMAScript 6 简称 ES6 为什么要学习ES6? ES6 是 JavaScript 的下一个版本标准&#xff0c;诞生于2015年6月份。ES6 的主要目的是为了解决 ES5 的先天不足。ES6 的终极目标是为了使 JavaScript 语言可以用来编写复杂的大型应用程序&#xff0c;成为企业…

前端基础之ES6

ES6 ES6简介 ES6实际上是一个泛指&#xff0c;泛指ES2015及后续版本 为什么使用ES6&#xff1f; 每一次标准的诞生都意味着语言的完善&#xff0c;功能的加强。JavaScript语言本身也有一些令人不满意的地方。 变量提升特性增加了程序运行时的不可预测性语法过于松散&#x…

第一节:ES是什么?ES6是什么?

系列文章目录 第一节&#xff1a;ES是什么&#xff1f;ES6是什么&#xff1f; 文章目录 系列文章目录前言一、ES是什么&#xff1f;二、ES6是什么&#xff1f; 前言 学习一下ES&#xff0c;都是自己学习的总结和理解&#xff0c;大家有什么问题都可以提出&#xff0c;一起讨论…

1.什么是ES6,为什么使用它

1.什么是ES6&#xff1f; ECMAScript 6&#xff08;以下简称ES6&#xff09;是JavaScript语言的下一代标准&#xff0c;已经在2015年6月正式发布了。Mozilla公司将在这个标准的基础上&#xff0c;推出JavaScript 2.0。ES6主要是为了解决ES5的先天不足&#xff0c;比如JavaScri…

ES6是什么

ES6是什么 ECMAScript 6.0&#xff08;以下简称 ES6&#xff09;是 JavaScript 语言的下一代标准&#xff0c;已经在 2015 年 6 月正式发布了。 它的目标&#xff0c;是使得 JavaScript 语言可以用来编写复杂的大型应用程序&#xff0c;成为企业级开发语言。 现在大部分的编…

ES6是什么?通俗理解

1.了解一门语言&#xff0c;首先要搞明白它到底是什么&#xff1f; ECMA (Eurupean Compuler Manuluclurers Assuxiation)中文名为欧洲计算机制造商协会&#xff0c;这个组织的日常是评估、开发和认可电信和计算机标准。19919 年后该组织改名为ECMA国际。 ES6是门脚本语言&…

list集合转换成string字符串

集合转换成字符串 闲来无事&#xff0c;总结了几种list转换成string的方法 第一种 <jdk8新特性&#xff0c;string集合、integer集合均可随意转换成string> 个人觉得这个方法应该属于jdk8的新特性 ArrayList<String> arrayList new ArrayList<String>(){{…

python set转为list_python 怎么把set转成list

今天小就为大家分享一篇python-list,set间的转换实例&#xff0c;具有很好的参考价值&#xff0c;推荐手册&#xff1a;Python 基础入门教程 其实python中&#xff0c;set转list的非常的简单&#xff0c;直接将set的值放入list()的括号中即可&#xff0c;相反&#xff0c;list转…