设备数据订阅服务

更新时间:2019-11-16 11:38:47

设备连接物联网平台后,数据将直接上报至平台,平台上的数据可以通过HTTP/2通道流转至您的服务器。这一步中,我们将配置HTTP/2服务端订阅功能,并设置HTTP/2 SDK。您的服务器可以通过接入HTTP/2 SDK,接收设备数据。当前版本支持订阅所有已配网的设备上报的属性、事件、上下线状态。

image.png

操作步骤

  1. 智能人居开放平台上,找到扩展服务->设备数据订阅,打开数据同步开关。
  2. 接入HTTP/2 SDK。如果您使用Apache Maven来管理Java项目,需在项目的pom.xml文件中加入以下依赖项。说明 目前仅提供Java8版SDK。
    <dependency>
     <groupId>com.aliyun.openservices</groupId>
     <artifactId>iot-client-message</artifactId>
     <version>1.1.3</version>
    </dependency>
    <dependency>
     <groupId>com.aliyun</groupId>
     <artifactId>aliyun-java-sdk-core</artifactId>
     <version>3.7.1</version>
    </dependency>
    
  3. 基于您的阿里云账号AccessKey进行身份认证,建立SDK与平台的连接。
    // 阿里云accessKey
    String accessKey = "xxxxxxxxxxxxxxx";
    // 阿里云accessSecret
    String accessSecret = "xxxxxxxxxxxxxxx";
    // regionId
    String regionId = "cn-shanghai";
    // 阿里云uid
    String uid = "xxxxxxxxxxxx";
    // endPoint:  https://${uid}.iot-as-http2.${region}.aliyuncs.com
    String endPoint = "https://" + uid + ".iot-as-http2." + regionId + ".aliyuncs.com";
    // 连接配置
    Profile profile = Profile.getAccessKeyProfile(endPoint, regionId, accessKey, accessSecret);
    // 构造客户端
    MessageClient client = MessageClientFactory.messageClient(profile);
    // 数据接收
    client.connect(messageToken -> {
     Message m = messageToken.getMessage();
     System.out.println("receive message from " + m);
     return MessageCallback.Action.CommitSuccess;
    });
    
  4. 其中, a. accessKey和accessSecret:登录阿里云控制台后,将光标移至账号头像上,在选项框中单击accesskeys,即可跳转至用户信息管理页,获取您的Access Key ID和Access Key Secret。 b. uid:登录阿里云控制台后,将光标移至账号头像上,在选项框中单击安全设置,即可跳转至账号管理页面,获取您的账号ID。 c. regionId:您物联网平台服务所在地域。RegionId 的表达方法,请参见通用参考地域与可用区
  5. 确认HTTP/2 SDK可以接收到设备消息。若成功监听,可以通过SDK的消息回调获得以下数据:
参数 说明
messageId 物联网平台生成的消息ID,19位大小。
topic 消息来自的Topic,此处的Topic为/sys/${productKey}/${deviceName}/homelink/device。${productKey}和${deviceName}分别表示设备在物联网平台上的设备证书中的ProductKey和DeviceName。
payload 消息内容:根据其中的messageType字段区分消息类型
DEVICE_PROPERTY 物的属性变更消息
DEVICE_EVENT 物的事件变更消息
DEVICE_STATUS_CHANGE 物的状态变更消息
详见下面的字段说明和消息范例。
generateTime 消息生成时间戳,以毫秒表示。
qos 0:消息最多投递1次。
1:消息最少投递1次。

(1) 属性变更消息
消息字段说明:

参数 类型 含义
messageType String DEVICE_PROPERTY
属性变更消息
deviceType String 设备品类Key
gmtCreate Long 数据流转消息产生时间, 自1970-1-1起流逝的毫秒值
iotId String 物的唯一id
productKey String 设备所属产品
deviceName String 设备名称
items JSON 变更的状态列表,列表元素包括:attribute - 变更属性, value - 变更值, time - 采样时间

消息范例:

{
    "messageType": "PROPERTIES_CHANGED",
    "deviceType": "SmartDoor",
    "iotId": "Xzf15db9sucTHBgUo6WR001046b400",
    "productKey": "a17xxd5TYNA",
    "gmtCreate": 1534299145304,
    "deviceName": "Xzf15db9sucTHBgUo6WR",
    "items": {
        "WIFI_Rx_Rate": {
            "value": 74274,
            "time": 1534299145344
        }
    }
}

(2) 事件变更消息
消息字段说明:

参数 类型 含义
messageType String DEVICE_EVENT
事件变更消息
deviceType String 设备品类Key
iotId String 物的唯一id
productKey String 设备所属产品
deviceName String 设备名称
identifier String 事件标识符,对应事件的 identifier
name String 事件名称
type String 事件类型
time Long 设备上报value对应的时间戳(毫秒)
value JSON 变更的事件属性列表:key - value 键值对

消息范例:

{
  "messageType":"DEVICE_EVENT",
  "deviceType":"test_device_type",
  "productKey":"test_pk",
  "deviceName":"test_dn",
  "iotId":"test_id",
  "gmtCreate":1551258879819,
  "identifier":"test_code",  //eventCode
  "name":"test_name",   //eventName
  "type":"test_type",   //eventType
  "time":1551266428908,
  "value":{
    "test_attr":"test_val"
  }
}

(3) 状态变更消息
消息字段说明:

参数 类型 含义
messageType String DEVICE_STATUS_CHANGE
状态变更消息
deviceType String 设备品类Key
gmtCreate Long 数据流转消息产生时间, 自1970-1-1起流逝的毫秒值
iotId String 物的唯一id
action String 设备状态变更动作: online - 上线动作,offline - 下线动作
productKey String 设备所属产品
deviceName String 设备名称
status JSON 状态信息,元素包括:value - 状态值, time - 采样时间 value状态值定义:1(在线), 0(离线)

消息范例:

{
  "messageType":"DEVICE_STATUS_CHANGE",
  "deviceType":"test_device_type",
  "productKey":"test_pk",
  "deviceName":"test_dn",
  "iotId":"test_id",
  "gmtCreate":1551258879819,
  "action":"online",
  "status":{
    "time":1551258879819,
    "value":"1"
  }
}

使用限制:https://help.aliyun.com/document_detail/89935.html

results matching ""

    No results matching ""