影子文档的SDK示例
以下是添加和修改影子文档示例
使用时请将如下示例中的userAccessKey、userSecret、ProductKey、DeviceName、DeviceSecret分别替换成您的accessKey 、secret、productKey、deviceName、DeviceSecret(您需在安服优物联云管理后台个人中心页面查看您的账号的accessKey和secret,其他参数可在安服优物联云平台的对应产品和设备详情中查看)。
package com.afu.common.sdk.test;import com.afu.common.sdk.config.AfuOpenApiConfig;import com.afu.common.sdk.dataobject.ProductInfo;import com.afu.common.sdk.mqtt.AfuOpenApiBase;import com.afu.common.sdk.openapi.AfuOpenApi;public class TestOpenApi {public static void main(String[] args) throws Exception {//设置mqtt服务的连接参数AfuConfig afuConfig = new AfuConfig();String mqttUrl = "tcp://mqtt.afuiot.com:1883"; //连接安服优物联网云平台MQTT服务器afuConfig.setMqttUrl(MqttUrl);afuConfig.setMqttClientId("ClientId");//用于区分MQTT客户端,每个设备请设置唯一的ClientIdafuConfig.setProductKey("productKey");afuConfig.setDeviceName("deviceName");afuConfig.setDeviceSecret("deviceSecret");afuConfig.setUserAccessKey("UserAccessKey");afuConfig.setUserSecret("UserSecret");AfuDeviceLinkMqtt linkMqtt = new AfuDeviceLinkMqtt(afuConfig);//实例化中方法能直接进行相应操作AfuThingShadowKit thingModelKit = new AfuThingShadowKit(linkMqtt);//设置参数JSONObject params = new JSONObject();JSONObject state = new JSONObject();JSONObject attribute = new JSONObject();attribute.put("color","red");state.put("reported",attribute);params.put("state",state);params.put("version",1);thingModelKit.updateShadow(params);}}
在上述代码中的第24行中,开发者在实例化AfuThingShadowKit对象成功后,在该对象下有多种方法,以上是其中一种(添加和修改影子文档),下面将对其中方法进行使用介绍:
影子文档相关方法介绍:
添加和修改影子文档:updateShadow
1、设备主动上报状态时,调用updateShadow方法,如灯泡(设备)使用Topic /shadow/update/a1PbRCF**/bulb**上报最新状态到影子,请求参数如下格式:
{"state": {"reported": {"color": "red"}},"version": 1}
上报参数说明
| state | 表示设备发送给设备影子的状态信息。reported为必填字段,状态信息会同步更新到设备影子的reported部分。 |
|---|---|
| version | 表示设备影子检查请求中的版本信息。 |
设备影子接收到灯泡上报的状态数据后,更新影子文档。
{"state": {"reported": {"color": "red"}},"metadata": {"reported": {"color": {"timestamp": 1469564492}}},"timestamp": 1469564492,"version": 1}
2、应用程序通过调用updateShadow方法下发期望状态给设备影子,设备影子再将文件下发给设备端。设备根据影子更新状态,并上报最新状态至影子,期望参数如下格式:
{"state": {"desired": {"color": "green"}},"version": 2}
设备影子接收到更新请求,更新其影子文档为:
{"state": {"reported": {"color": "red"},"desired": {"color": "green"}},"metadata": {"reported": {"color": {"timestamp": 1469564492}},"desired": {"color": {"timestamp": 1469564576}}},"timestamp": 1469564576,"version": 2}
设备影子更新完成后,发送返回结果到Topic/shadow/get/a1PbRCF**/bulb中。返回结果信息构成由设备影子决定。以灯泡设备为例:
如果设备灯泡在线,并且订阅了Topic/shadow/get/a1PbRCF**/bulb,则会立即收到消息。收到消息后,根据请求文档中desired的值,将灯泡颜色变成绿色。灯泡更新完状态后,上报最新状态到物联网平台。
{"state": {"reported": {"color": "green"}},"version": 3}
获取影子文档:getShadow
以下是获取影子文档示例
使用时请将如下示例中的userAccessKey、userSecret、ProductKey、DeviceName、DeviceSecret分别替换成您的accessKey 、secret、productKey、deviceName、DeviceSecret(您需在安服优物联云管理后台个人中心页面查看您的账号的accessKey和secret,其他参数可在安服优物联云平台的对应产品和设备详情中查看)。
package com.afu.common.sdk.test;import com.afu.common.sdk.config.AfuOpenApiConfig;import com.afu.common.sdk.dataobject.ProductInfo;import com.afu.common.sdk.mqtt.AfuOpenApiBase;import com.afu.common.sdk.openapi.AfuOpenApi;public class TestOpenApi {public static void main(String[] args) throws Exception {//设置mqtt服务的连接参数AfuConfig afuConfig = new AfuConfig();afuConfig.setMqttUrl("MqttUrl");afuConfig.setMqttClientId("ClientId");afuConfig.setProductKey("productKey");afuConfig.setDeviceName("deviceName");afuConfig.setDeviceSecret("deviceSecret");afuConfig.setUserAccessKey("UserAccessKey");afuConfig.setUserSecret("UserSecret");AfuDeviceLinkMqtt linkMqtt = new AfuDeviceLinkMqtt(afuConfig);//实例化中方法能直接进行相应操作AfuThingShadowKit thingModelKit = new AfuThingShadowKit(linkMqtt);//调用获取影子文档方法thingModelKit.getShadow();}}
在上述代码中的第24行中,开发者在实例化AfuThingShadowKit对象成功后,在该对象下有多种方法,以上是其中一种(添加和修改影子文档),下面将对其中方法进行使用介绍:
1、设备主动获取状态时,调用getShadow方法,发送最新状态到Topic/shadow/get/a1PbRCF**/bulb,如灯泡(设备)通过订阅该Topic**获取最新状态。消息内容如下:
{"method": "reply","payload": {"status": "success","state": {"reported": {"color": "red"},"desired": {"color": "green"}},"metadata": {"reported": {"color": {"timestamp": 1469564492}},"desired": {"color": {"timestamp": 1469564492}}}},"version": 2,"timestamp": 1469564576}
