影子文档的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客户端,每个设备请设置唯一的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);
//设置参数
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
}