阿里云物联网平台远程配置功能JAVA 示例参考
生活随笔
收集整理的這篇文章主要介紹了
阿里云物联网平台远程配置功能JAVA 示例参考
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
概述
很多場景下,開發者需要更新設備的配置信息,包括設備的系統參數、網絡參數、本地策略等。通常情況下,是通過固件升級的方式更新設備的配置信息。但是,這將加大固件版本的維護工作,并且需要設備中斷運行以完成更新。為了解決上述問題,物聯網平臺提供了遠程配置更新的功能,設備無需重啟或中斷運行即可在線完成配置信息的更新。本文主要演示如何使用JAVA SDK實現兩種應用場景。
原理說明
1、物聯網平臺提供的遠程配置功能,支持:
- 開啟/關閉遠程配置。
- 在線編輯配置文件,并管理版本。
- 批量更新設備配置信息。
- 設備主動請求更新配置信息。
2、流程圖
3、遠程配置大致分為三部分:
- 生成配置文件:您在物聯網平臺控制臺編輯并保存配置信息。
- 推送配置文件:您在物聯網平臺控制臺批量推送配置信息給設備。設備接收后,修改本地配置文件。
- 設備主動請求配置信息:設備主動向云端請求新的配置文件,并進行更新。
遠程配置使用分為兩種場景,一種是云端推送配置信息給設備端,一種是設備端主動請求配置信息。根據場景的不同,遠程配置的步驟也有所區別。
場景一:云端推送配置信息給設備端
1、設備端業務代碼實現
import com.aliyun.alink.dm.api.DeviceInfo; import com.aliyun.alink.dm.api.InitResult; import com.aliyun.alink.dm.api.IoTApiClientConfig; import com.aliyun.alink.linkkit.api.ILinkKitConnectListener; import com.aliyun.alink.linkkit.api.IoTMqttClientConfig; import com.aliyun.alink.linkkit.api.LinkKit; import com.aliyun.alink.linkkit.api.LinkKitInitParams; import com.aliyun.alink.linksdk.cmp.connect.channel.MqttSubscribeRequest; import com.aliyun.alink.linksdk.cmp.core.base.AMessage; import com.aliyun.alink.linksdk.cmp.core.base.ConnectState; import com.aliyun.alink.linksdk.cmp.core.listener.IConnectNotifyListener; import com.aliyun.alink.linksdk.cmp.core.listener.IConnectSubscribeListener; import com.aliyun.alink.linksdk.tools.AError;public class DeviceCOTADemo1 {public static void main(String[] args) {String regionId = "cn-shanghai";DeviceInfo deviceInfo = new DeviceInfo();deviceInfo.productKey = "******";deviceInfo.deviceName = "******";deviceInfo.deviceSecret = "********";LinkKitInitParams params = new LinkKitInitParams();IoTMqttClientConfig config = new IoTMqttClientConfig();config.productKey = deviceInfo.productKey;config.deviceName = deviceInfo.deviceName;config.deviceSecret = deviceInfo.deviceSecret;config.channelHost = deviceInfo.productKey + ".iot-as-mqtt." + regionId + ".aliyuncs.com:1883";params.mqttClientConfig = config;params.connectConfig = new IoTApiClientConfig();params.deviceInfo = deviceInfo;/**建立連接**/LinkKit.getInstance().init(params, new ILinkKitConnectListener() {@Overridepublic void onError(AError aError) {System.out.println("初始化失敗 " + aError.getMsg());}@Overridepublic void onInitDone(InitResult initResult) {System.out.println("初始化成功 " + initResult.tsl);String pd = deviceInfo.productKey + "/" + deviceInfo.deviceName;// 1、cota 請求 TopicString requestcotaTopic = "/sys/"+pd+"/thing/config/push";// 訂閱TopicMqttSubscribeRequest upgradeTopicRequest = new MqttSubscribeRequest();upgradeTopicRequest.topic = requestcotaTopic;upgradeTopicRequest.isSubscribe = true;// 直接做Topic的訂閱LinkKit.getInstance().subscribe(upgradeTopicRequest, new IConnectSubscribeListener(){@Overridepublic void onSuccess() {System.out.println("cota訂閱成功");}@Overridepublic void onFailure(AError aError) {System.out.println("直接訂閱失敗" + aError.getMsg());}});// 注冊ota下行監聽LinkKit.getInstance().registerOnNotifyListener(new IConnectNotifyListener() {@Overridepublic void onNotify(String s, String s1, AMessage aMessage) {System.out.println("cota 監聽響應:");System.out.println(new String((byte[])aMessage.getData()));}@Overridepublic boolean shouldHandle(String s, String s1) {return false;}@Overridepublic void onConnectStateChange(String s, ConnectState connectState) {System.out.println("連接狀態發生變化 :" + s + connectState);}});}});} }2、管理門戶配置遠程控制,詳細步驟參考鏈接。
3、啟動設備端程序,管理門戶批量更新,設備端獲取信息(批量更新頻率限制:一小時內僅允許操作一次):
?
{"method":"thing.config.push","id":"1296799269","params":{"getType":"file","configId":"92eb82a17a7441111f7dcb830e93ed79","sign":"568e9211117eedc9eadbc2907719fe2086348f572ddd3f373d6f297ba5aba4d1","configSize":12,"signMethod":"Sha256","url":"https://otx-devicecenter-thing-config-cn-shanghai-online.oss-cn-shanghai.aliyuncs.com/11zisMUtYDk/1567338668042_gz2Qs7hl?Expires=1567340568&OSSAccessKeyId=1111113rx5dg2JBm&Signature=S0LS9H%1111zJqTg%2Fphf19%2BfE%2F2bs%3D"},"version":"1.0"}場景二:設備主動請求配置信息
1、設備端業務代碼實現
import com.aliyun.alink.dm.api.DeviceInfo; import com.aliyun.alink.dm.api.InitResult; import com.aliyun.alink.dm.api.IoTApiClientConfig; import com.aliyun.alink.linkkit.api.ILinkKitConnectListener; import com.aliyun.alink.linkkit.api.IoTMqttClientConfig; import com.aliyun.alink.linkkit.api.LinkKit; import com.aliyun.alink.linkkit.api.LinkKitInitParams; import com.aliyun.alink.linksdk.cmp.connect.channel.MqttPublishRequest; import com.aliyun.alink.linksdk.cmp.connect.channel.MqttSubscribeRequest; import com.aliyun.alink.linksdk.cmp.core.base.AMessage; import com.aliyun.alink.linksdk.cmp.core.base.ARequest; import com.aliyun.alink.linksdk.cmp.core.base.AResponse; import com.aliyun.alink.linksdk.cmp.core.base.ConnectState; import com.aliyun.alink.linksdk.cmp.core.listener.IConnectNotifyListener; import com.aliyun.alink.linksdk.cmp.core.listener.IConnectSendListener; import com.aliyun.alink.linksdk.cmp.core.listener.IConnectSubscribeListener; import com.aliyun.alink.linksdk.tools.AError;public class DeviceCOTADemo2 {public static void main(String[] args) {String regionId = "cn-shanghai";DeviceInfo deviceInfo = new DeviceInfo();deviceInfo.productKey = "******";deviceInfo.deviceName = "******";deviceInfo.deviceSecret = "********";LinkKitInitParams params = new LinkKitInitParams();IoTMqttClientConfig config = new IoTMqttClientConfig();config.productKey = deviceInfo.productKey;config.deviceName = deviceInfo.deviceName;config.deviceSecret = deviceInfo.deviceSecret;config.channelHost = deviceInfo.productKey + ".iot-as-mqtt." + regionId + ".aliyuncs.com:1883";params.mqttClientConfig = config;params.connectConfig = new IoTApiClientConfig();params.deviceInfo = deviceInfo;/**建立連接**/LinkKit.getInstance().init(params, new ILinkKitConnectListener() {@Overridepublic void onError(AError aError) {System.out.println("初始化失敗 " + aError.getMsg());}@Overridepublic void onInitDone(InitResult initResult) {System.out.println("初始化成功 " + initResult.tsl);String pd = deviceInfo.productKey + "/" + deviceInfo.deviceName;// 1、設備端訂閱Topic:/sys/${productKey}/${deviceName}/thing/config/get_replyString requestcotaTopic = "/sys/"+pd+"/thing/config/get_reply";MqttSubscribeRequest upgradeTopicRequest = new MqttSubscribeRequest();upgradeTopicRequest.topic = requestcotaTopic;upgradeTopicRequest.isSubscribe = true;LinkKit.getInstance().subscribe(upgradeTopicRequest, new IConnectSubscribeListener(){@Overridepublic void onSuccess() {System.out.println("ota訂閱成功");}@Overridepublic void onFailure(AError aError) {System.out.println("直接訂閱失敗" + aError.getMsg());}});// 注冊下行監聽LinkKit.getInstance().registerOnNotifyListener(new IConnectNotifyListener() {@Overridepublic void onNotify(String s, String s1, AMessage aMessage) {System.out.println("cota 監聽響應:");System.out.println(new String((byte[])aMessage.getData()));}@Overridepublic boolean shouldHandle(String s, String s1) {return false;}@Overridepublic void onConnectStateChange(String s, ConnectState connectState) {System.out.println("連接狀態發生變化 :" + s + connectState);}});// 4、設備通過Topic /sys/${productKey}/${deviceName}/thing/config/get主動查詢最新的配置信息String requestTopic = "/sys/"+pd+"/thing/config/get";System.out.println("發送消息" + requestTopic);// 訂閱TopicMqttPublishRequest request = new MqttPublishRequest();request.topic = requestTopic;request.payloadObj = "{\"id\":\"123\",\"method\":\"thing.config.get\",\"params\":{\"getType\":\"file\",\"configScope\":\"product\"},\"version\":\"1.0\"}";// 直接做Topic的發送LinkKit.getInstance().publish(request, new IConnectSendListener() {@Overridepublic void onResponse(ARequest aRequest, AResponse aResponse) {System.out.println("請求發送成功 " + aResponse.getData());}@Overridepublic void onFailure(ARequest aRequest, AError aError) {System.out.println("請求發送成功 " + aError.getMsg());}});}});} }2、運行結果(/sys/${productKey}/${deviceName}/thing/config/get_reply 訂閱獲取的內容)
{"code":200,"data":{"configId":"a9415f2d6e444d7f9e60a3d46f11d566","configSize":18,"getType":"file","sign":"112f38e7345a2ac46d9f80a401886727f27de96ebf1c82b6825df4b31116ab02","signMethod":"Sha256","url":"https://otx-devicecenter-thing-config-cn-shanghai-online.oss-cn-shanghai.aliyuncs.com/11D8NwXCe56/1567337893929_gpUFnE69?Expires=1567339979&OSSAccessKeyId=11AIRY3rx5dg2JBm&Signature=1112qy8bOsa48elOQFt4qHQGaqk%3D"},"id":"123","method":"thing.config.get","version":"1.0"}
原文鏈接
本文為云棲社區原創內容,未經允許不得轉載。
總結
以上是生活随笔為你收集整理的阿里云物联网平台远程配置功能JAVA 示例参考的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何造一个“钉钉”?谈谈消息系统架构的实
- 下一篇: 高可用 kubernetes 集群部署实