物联网设施OTA固件降级实际
1.前言
OTA(Over-the-Air Technology)即地面下载技术,是IoT物联网平台必备的一项根底性能。通过OTA形式,咱们能够对散布在寰球各地的IoT设施进行设施固件降级,而不用让运维人员各地奔走。本文以MQTT协定下的固件降级为例,介绍OTA固件降级流程、数据流转应用的Topic和数据格式。
2.固件降级OTA流程
MQTT协定下固件降级流程如下图所示
固件降级过程应用的Topic如下列表
1.设施端通过以下Topic上报固件版本给物联网平台 。
/ota/device/inform/${YourProductKey}/${YourDeviceName}
2.设施端订阅以下Topic接管物联网平台的固件降级告诉 。
/ota/device/upgrade/${YourProductKey}/${YourDeviceName}
3.设施端通过以下Topic上报固件降级进度 。
/ota/device/progress/${YourProductKey}/${YourDeviceName}
3.固件降级实战
3.1 设施版本信息
为了实现固件降级性能,首先设施要正确上报以后固件版本,咱们在设施详情能够查看到。
3.2 固件版本散布
当每个设施都精确上报固件版本时,咱们能够在控制台查看到全量设施的版本公布状况。
3.3 上传新版固件
当咱们须要做设施固件降级时,首先要上传新版本固件到IoT物联网平台,标记新版本号。
3.4 验证固件
新固件上传后,咱们须要筛选测试设施,来验证固件是否失常,防止新固件导致设施业务异样。
验证通过后,会看到批量降级性能变为可用状态。
3.5 批量降级
点击批量降级菜单,进入降级配置页面。咱们能够从多个维度筛选待降级的设施,配置降级策略。
3.6 降级过程
启动固件降级工作后,咱们会看到一个降级批次。点击进入详情,能够看到待降级设施列表。
正在降级Tab会展现降级中的设施列表和降级进度。
降级胜利Tab会展现曾经实现固件降级的设施列表。包含以后固件版本,更新工夫,状态。
降级失败Tab会展现曾经降级失败的设施列表。包含以后固件版本,更新工夫,失败起因
附录
IoT物联网平台推送到设施端的降级音讯Payload示例
{ "code":"1000", "data":{ "size":11472299, "sign":"83254ac96e141affb8aa42cbfec93723", "version":"2-45-345b", "url":"https://iotx-ota.oss-cn-shanghai.aliyuncs.com/ota/dbab6f742ae389b40db88fc2500b08d0/ck0q5lyav00003i7hezxe0cbg.zip?Expires=1568951190&OSSAccessKeyId=cS8uRRy54RszYWna&Signature=nk0sogaxtyp7dYvKZnjNQ%2BZ8Q9w%3D", "signMethod":"Md5", "md5":"83254ac96e141affb8aa42cbfec93723" }, "id":1568864790381, "message":"success"}
设施固件降级模仿代码
/** * node aliyun-iot-device.js */const fs = require('fs');const path = require('path');const mqtt = require('aliyun-iot-mqtt');//设施身份三元组+区域const options = { productKey: "替换pk", deviceName: "替换dn", deviceSecret: "替换ds", regionId: "cn-shanghai"}//建设连贯const client = mqtt.getAliyunIotMqttClient(options);//订阅ota音讯的Topicconst deviceUpgrade = `/ota/device/upgrade/${options.productKey}/${options.deviceName}`client.subscribe(deviceUpgrade)//每次连贯后,上报以后固件版本const deviceInform = `/ota/device/inform/${options.productKey}/${options.deviceName}`client.publish(deviceInform, getFirmwareVersion("1-45-345a"))//OTA过程中,上报进度const deviceProgress = `/ota/device/progress/${options.productKey}/${options.deviceName}`// 音讯解决client.on('message', function(topic, message) { if (topic == deviceUpgrade) { //收到ota音讯,开始降级过程 doUpgrade(message) }})// 本地更新function doUpgrade(message) { message = JSON.parse(message) // 1.从url下载固件包,更新下载进度... client.publish(deviceProgress, getOTAUpgradeData(23)) // 2.依据signMethod验证文件签名是否和sign值统一 // verifyFirmware() // 3.重启设施,降级固件 // burn & reboot()}// 更新降级进度function getOTAUpgradeData(step) { const payloadJson = { "id": 1, "params": { "step": step, "desc": " xxxxxxxx " } } console.log(payloadJson) return JSON.stringify(payloadJson);}// 设施以后固件版本function getFirmwareVersion(version) { const payloadJson = { "id": 1, "params": { "version": version } } console.log(payloadJson) return JSON.stringify(payloadJson);}
物联网平台产品介绍详情:https://www.aliyun.com/product/iot/iot_instc_public_cn
阿里云物联网平台客户交换群