设备数据转储
更新时间:2018-08-20 19:19:41
DataHub转储
功能概述
在很多物联网场景中,流计算是刚需,阿里云流计算平台的数据采集模块,均是围绕DataHub作为流式数据采集的目的Pub/Sub系统。 智慧工业平台可以将设备数据实时转发到Datahub,进而和流式计算打通,帮助用户实现对设备数据进行实时计算的场景。 DataHub文档参考 链接
DataHub转储配置
操作说明
首先用户必须要有阿里云账号,需要手动输入阿里云账号对应的access key信息,建议用阿里云账号的子账号AK信息,阿里云账号AccessKey查询地址。
智能工业平台不能操作用户的DataHub资源,必须经过用户的授权才能对用户的DataHub进行写数据。所以,用户需要创建一个具有DataHub写入权限的角色,然后将该角色赋予给飞象工业平台,这样飞象工业平台才能将处理过后的数据写入DataHub中。
用户需要先选择DataHub中的Project,然后根据Project选择Topic。如果没有资源,那就需要去DataHub控制台创建相应的资源。
选择完DataHub中的Topic后,飞象工业平台自动获取Topic中的Schema,接下来需要将飞象工业平台选出来的设备属性映射到对应的DataHub Schema中。
上传配置变更
选择上传配置变更才会真正把设备数据流转dataHub规则写到云端。
开启转储
只有开启转储功能,设备端上报的数据才会开始流转到DataHub
停止转储
如果想停止设备数据转储到DataHub,可以选择停止转储按钮
重置
如果想删除设备转储DataHub功能,或者针对该设备转储到DataHub的其它project和topic,可以选择重置选项。注意:只有先选择停止转储后才可以选择重置。
注意事项
- 飞象工业平台不支持BLOB类型的DataHub topic
示例
设备端上报属性数据
当设备端属性发生变化,设备端可以通过mqtt topic上报数据。
TOPIC: /sys/{productKey}/{deviceName}/thing/event/property/post
REPLY TOPIC: /sys/{productKey}/{deviceName}/thing/event/property/post_reply
request:
{
"id": "123",
"version": "1.0",
"params": {
"twoString": "hello world"
},
"method": "thing.event.property.post"
}
response:
{
"id": "123",
"code": 200,
"data": {}
}
private static String propPostTopic = "/sys/" + productKey + "/" + deviceName + "/thing/event/property/post";
Map<String, Object> paramMap = new HashMap<>(8);
paramMap.put("twoString", "hello world");
Map<String, Object> contentMap = new HashMap<>(8);
contentMap.put("id", 123);
contentMap.put("version", "1.0");
contentMap.put("params", paramMap);
contentMap.put("method", "thing.event.property.post");
MqttMessage message = new MqttMessage(JSON.toJSONString(contentMap).getBytes("utf-8"));
message.setQos(0);
sampleClient.publish(propPostTopic, message);
DataHub控制台查看数据
ONS转储
功能概述
用户通过飞象工业平台将数据转发到消息队列MQ中,从而具备了从设备到飞象工业平台到MQ再到应用服务器全链路高可靠的消息能力。ONS文档参考 链接
ONS转储配置
操作说明
首先用户必须要有阿里云账号,需要手动输入阿里云账号对应的access key信息,建议用阿里云账号的子账号AK信息,阿里云账号AccessKey查询地址。
用户选择region地域。普通版ONS实例,只能选择公网和华东2 region, 铂金版ONS实例,可以选择任意region。
用户根据业务选择需要写入数据的ONS Topic。
用户授权飞象工业平台具有写入消息队列Topic的权限。
保存配置
开启转储
开启转储后,设备端动态上报的数据才会流转到ONS里面
停止转储
选择停止转储后,设备端数据不在转发到ONS队列里面。
清除配置
清除配置后,设备端数据流转ONS规则全部清除。注意:只有选择停止转储后,才可以做清除操作。
注意事项
MQ非铂金实例的Topic不支持跨地域的访问写入。所以用户如果没有创建铂金实例的Topic,那就必须在飞象工业平台所在的华东2 region或者公网 region下创建Topic,否则不能写入,例如飞象工业平台所在地域是华东2,那么消息队列的Topic也需要在华东2或者公网region创建;如果用户需要购买MQ的铂金实例,那可以不用关心在哪个地域购买铂金实例,因为铂金实例的Topic,飞象工业平台都可以有权限写入数据。
MQ存储的设备数据类型包括设备属性数据、设备事件数据、设备上下线数据。
示例
设备端上报属性数据
当设备端属性发生变化,设备端可以通过mqtt topic上报数据。
TOPIC: /sys/{productKey}/{deviceName}/thing/event/property/post
REPLY TOPIC: /sys/{productKey}/{deviceName}/thing/event/property/post_reply
request:
{
"id": "123",
"version": "1.0",
"params": {
"twoString": "hello world"
},
"method": "thing.event.property.post"
}
response:
{
"id": "123",
"code": 200,
"data": {}
}
当设备端事件发生变化,设备端可以通过mqtt topic上报设备事件。
TOPIC: /sys/{productKey}/{deviceName}/thing/event/{dsl.event.identifer}/post
REPLY TOPIC: /sys/{productKey}/{deviceName}/thing/event/{dsl.event.identifer}/post_reply
request:
{
"id": "123",
"version": "1.0",
"params": {
"oneInt": 56,
"twoString": "hello world"
},
"method": "thing.event.{dsl.event.identifer}.post"
}
response:
{
"id": "123",
"code": 200,
"data": {}
}
//设备属性上报java demo
private static String propPostTopic = "/sys/" + productKey + "/" + deviceName + "/thing/event/property/post";
Map<String, Object> paramMap = new HashMap<>(8);
paramMap.put("twoString", "hello world");
Map<String, Object> contentMap = new HashMap<>(8);
contentMap.put("id", 123);
contentMap.put("version", "1.0");
contentMap.put("params", paramMap);
contentMap.put("method", "thing.event.property.post");
MqttMessage message = new MqttMessage(JSON.toJSONString(contentMap).getBytes("utf-8"));
message.setQos(0);
sampleClient.publish(propPostTopic, message);
//设备事件上报java demo
private static String pubEventTopic = "/sys/" + productKey + "/" + deviceName + "/thing/event/eventOne/post";
Map<String, Object> paramMap = new HashMap<>(8);
paramMap.put("oneInt", 108);
paramMap.put("twoString", "hello world");
Map<String, Object> contentMap = new HashMap<>(8);
contentMap.put("id", 123);
contentMap.put("version", "1.0");
contentMap.put("params", paramMap);
contentMap.put("method", "thing.event.eventOne.post");
MqttMessage message = new MqttMessage(JSON.toJSONString(contentMap).getBytes("utf-8"));
message.setQos(0);
sampleClient.publish(pubEventTopic, message);
ONS控制台查看消息数据
消息body格式
设备属性消息格式
{
"deviceType": "FoundryMachinery",
"iotId": "n7m1HbDdinIcXCYh0Gkz0010ae9000",
"productKey": "b1Q03Kb1Yyg",
"gmtCreate": 1529486487121,
"deviceName": "n7m1HbDdinIcXCYh0Gkz",
"items": {
"twoString": {
"time": 1529486487134,
"value": "hello world"
},
"oneInt": {
"time": 1529486487134,
"value": 108
}
}
}
设备事件消息格式
{
"deviceType": "FoundryMachinery",
"identifier": "eventOne",
"iotId": "n7m1HbDdinIcXCYh0Gkz0010ae9000",
"name": "eventOne",
"time": 1529472753511,
"type": "info",
"productKey": "b1Q03Kb1Yyg",
"deviceName": "n7m1HbDdinIcXCYh0Gkz",
"value": {
"twoString": "hello world",
"oneInt": 108
}
}
设备上线消息格式
{
"deviceType": "FoundryMachinery",
"iotId": "n7m1HbDdinIcXCYh0Gkz0010ae9000",
"action": "online",
"productKey": "b1Q03Kb1Yyg",
"gmtCreate": 1530179277738,
"deviceName": "n7m1HbDdinIcXCYh0Gkz",
"status": {
"time": 1530179277738,
"value": "1"
}
}
设备下线消息格式
{
"deviceType": "FoundryMachinery",
"iotId": "n7m1HbDdinIcXCYh0Gkz0010ae9000",
"action": "offline",
"productKey": "b1Q03Kb1Yyg",
"gmtCreate": 1530179280182,
"deviceName": "n7m1HbDdinIcXCYh0Gkz",
"status": {
"time": 1530179280182,
"value": "0"
}
}
HTTP2转储
- http2转储模式,用户在平台上仅需选择转储的触发逻辑,开启后点击保存,就会开启HTTP2转储能力。
两种消息推送机制的解释:
“设备状态变化通知”:指设备上线,下线状态变化时,进行消息推送。
“设备上报信息”:指设备每次上报数据时,就会进行转发。
HTTP2转储功能中,平台端为服务端,用户需要通过http2的client主动来连接平台,获取转储数据。具体的操作方式,请参考平台提供的HTTP2开发SDK的用法。
消息body格式
设备属性消息格式:
{
"deviceType": "PharmaceuticalManufacturing",
"iotId": "ldkhsKJl2W1uoE9Xo46T00103a1800",
"productKey": "a1k3yOhhxRW",
"gmtCreate": 1532572403635,
"deviceName": "ldkhsKJl2W1uoE9Xo46T",
"items": {
"twoString": {
"value": "hello world 1532572403576",
"time": 1532572403671
},
"oneInt": {
"value": 106,
"time": 1532572403671
}
}
}
设备上线消息格式:
{
"deviceType": "PharmaceuticalManufacturing",
"iotId": "ldkhsKJl2W1uoE9Xo46T00103a1800",
"action": "online",
"productKey": "a1k3yOhhxRW",
"gmtCreate": 1532572781265,
"deviceName": "ldkhsKJl2W1uoE9Xo46T",
"status": {
"time": 1532572781265,
"value": "1"
}
}
设备下线消息格式:
{
"deviceType": "PharmaceuticalManufacturing",
"iotId": "ldkhsKJl2W1uoE9Xo46T00103a1800",
"action": "offline",
"productKey": "a1k3yOhhxRW",
"gmtCreate": 1532572795379,
"deviceName": "ldkhsKJl2W1uoE9Xo46T",
"status": {
"time": 1532572795379,
"value": "0"
}
}