我是靠谱客的博主 大方小伙,这篇文章主要介绍阿里云IoT物模型上报数据流转到实例内TSDB一、阿里云物联网设备物模型属性数据格式二、本例items具体内容三、数据流转设置四、TSDB内容查询,现在分享给大家,希望可以做个参考。

阿里云物联网平台上存储的数据最多为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、数据格式

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
{ "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,数据格式为:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
"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内的数据内容如下:

复制代码
1
2
3
4
5
6
7
8
9
10
11
"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、本例脚本代码

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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、本例主程序

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
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 = "************"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); new Thread(new Runnable() { @Override public 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、本例程序要添加的依赖

复制代码
1
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窗口看到结果。

复制代码
1
System.out.println(lastDataValues);

查询结果如下:

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

最后

以上就是大方小伙最近收集整理的关于阿里云IoT物模型上报数据流转到实例内TSDB一、阿里云物联网设备物模型属性数据格式二、本例items具体内容三、数据流转设置四、TSDB内容查询的全部内容,更多相关阿里云IoT物模型上报数据流转到实例内TSDB一、阿里云物联网设备物模型属性数据格式二、本例items具体内容三、数据流转设置四、TSDB内容查询内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(96)

评论列表共有 0 条评论

立即
投稿
返回
顶部