ESA2GJK1DH1K升级篇: 阿里云物联网平台 OTA: 关于阿里云物联网平台 OTA 的升级流程说明

摘要:
前言由于一些用户直接希望使用现有的物联网平台实现OTA远程升级,我将撰写这一系列文章。首先,你需要学习这一部分https://www.cnblogs.com/yangfengwu/p/11828777.html现在我们来谈谈添加固件的具体过程1.在物联网平台中选择固件的名称:随机产品:选择您创建的产品的版本号:1.0签名算法:MD5您可以随意上传

前言

  鉴于有些用户直接想使用现成的物联网平台实现 OTA 远程升级

  我就写一写这系列的文章

  首先大家需要学习完这部分

  https://www.cnblogs.com/yangfengwu/p/11828777.html

  ESA2GJK1DH1K升级篇: 阿里云物联网平台 OTA: 关于阿里云物联网平台 OTA 的升级流程说明第1张

现在说一下具体流程

新增固件

  一,选择物联网平台里面的

    ESA2GJK1DH1K升级篇: 阿里云物联网平台 OTA: 关于阿里云物联网平台 OTA 的升级流程说明第2张

    固件名称: 随意

    所属产品: 选择自己创建的产品

       版本号: 1.0

    签名算法:MD5

   大家随意上传一个固件(文件),这节只是测试.

    ESA2GJK1DH1K升级篇: 阿里云物联网平台 OTA: 关于阿里云物联网平台 OTA 的升级流程说明第3张

提示

  一,提示

    咱在基础篇添加了一个产品,然后产品下添加了一个设备,然后得到的这台设备的信息

    {
    "ProductKey": "a1m7er1nJbQ",
    "DeviceName": "Mqtt",
    "DeviceSecret": "7GUrQwgDUcXWV3EIuLwdEvmRPWcl7VsU"
    }

    然后得到

    IP地址:     a1m7er1nJbQ.iot-as-mqtt.cn-shanghai.aliyuncs.com

    端口号:    1883

    Client ID: 112233445566|securemode=3,signmethod=hmacsha1|

    用户名:    Mqtt&a1m7er1nJbQ

    密码:       8B286A9E99B49E19A0964589E8F3C2DBB1C1A8DE

    咱如果想升级呀,其实也是按照基础篇介绍的那样连接MQTT

    只不过呢订阅和发布的主题有区别

                https://help.aliyun.com/document_detail/85700.html?spm=a2c4g.11186623.6.699.581b740dLmrTn8  说明文档

  二,请求固件

    请求固件的主题:   

    /ota/device/inform/${YourProductKey}/${YourDeviceName}

    对于上面的设备而言发布的主题就是: /ota/device/inform/a1m7er1nJbQ/Mqtt

    设备发送的消息格式   

{
  "id": "123",
  "params": {
    "version": "1.0.1"
  }
}

  三,阿里云回复:

    /ota/device/upgrade/${YourProductKey}/${YourDeviceName}

    对于上面的设备而言需要订阅主题: /ota/device/upgrade/a1m7er1nJbQ/Mqtt

    设备接收的消息格式:

{
  "code": "1000",
  "data": {
    "size": 432945,
    "version": "2.0.0",
    "url": "https://iotx-ota-pre.oss-cn-shanghai.aliyuncs.com/nopoll_0.4.4.tar.gz?Expires=1502955804&OSSAccessKeyId=XXXXXXXXXXXXXXXXXXXX&Signature=XfgJu7P6DWWejstKJgXJEH0qAKU%3D&security-token=CAISuQJ1q6Ft5B2yfSjIpK6MGsyN1Jx5jo6mVnfBglIPTvlvt5D50Tz2IHtIf3NpAusdsv03nWxT7v4flqFyTINVAEvYZJOPKGrGR0DzDbDasumZsJbo4f%2FMQBqEaXPS2MvVfJ%2BzLrf0ceusbFbpjzJ6xaCAGxypQ12iN%2B%2Fr6%2F5gdc9FcQSkL0B8ZrFsKxBltdUROFbIKP%2BpKWSKuGfLC1dysQcO1wEP4K%2BkkMqH8Uic3h%2Boy%2BgJt8H2PpHhd9NhXuV2WMzn2%2FdtJOiTknxR7ARasaBqhelc4zqA%2FPPlWgAKvkXba7aIoo01fV4jN5JXQfAU8KLO8tRjofHWmojNzBJAAPpYSSy3Rvr7m5efQrrybY1lLO6iZy%2BVio2VSZDxshI5Z3McKARWct06MWV9ABA2TTXXOi40BOxuq%2B3JGoABXC54TOlo7%2F1wTLTsCUqzzeIiXVOK8CfNOkfTucMGHkeYeCdFkm%2FkADhXAnrnGf5a4FbmKMQph2cKsr8y8UfWLC6IzvJsClXTnbJBMeuWIqo5zIynS1pm7gf%2F9N3hVc6%2BEeIk0xfl2tycsUpbL2FoaGk6BAF8hWSWYUXsv59d5Uk%3D",
    "md5": "93230c3bde425a9d7984a594ac55ea1e",
    "sign": "93230c3bde425a9d7984a594ac55ea1e",
    "signMethod": "Md5"
  },
  "id": "1507707025",
  "message": "success"
}
 
  然后单片机提取 url 然后访问,即可获取到固件了.

  四,升级过程中设备上报进度或者失败

    /ota/device/progress/${YourProductKey}/${YourDeviceName}

    对于上面的设备而言发布的主题就是:  /ota/device/progress/a1m7er1nJbQ/Mqtt

    消息格式:

{
  "id": "123",
  "params": {
    "step": "-1",
    "desc": "固件升级失败,请求不到固件信息。"
  }
}

 ESA2GJK1DH1K升级篇: 阿里云物联网平台 OTA: 关于阿里云物联网平台 OTA 的升级流程说明第4张

  五,设备升级完以后:

    阿里云规定升级完以后,和一开始一样上报一下版本

    /ota/device/inform/${YourProductKey}/${YourDeviceName}

    对于上面的设备而言发布的主题就是: /ota/device/inform/a1m7er1nJbQ/Mqtt

{
  "id": "123",
  "params": {
    "version": "1.0.1"
  }
}

不过现在的版本 应该是上报的升级以后的版本号

然后就完成了升级

验证固件

  一,  有了上面的提示以后咱接着说具体的步骤

    阿里云规定,一开始先测试下固件好不好使,所以需要验证固件

    先不要点击...

    ESA2GJK1DH1K升级篇: 阿里云物联网平台 OTA: 关于阿里云物联网平台 OTA 的升级流程说明第5张 

  二, 咱需要先用一个设备上报一个与当前云端固件不一样的版本

    咱用调试助手模拟这台设备 我设置我这个设备当前的版本号是    0.0  

    ESA2GJK1DH1K升级篇: 阿里云物联网平台 OTA: 关于阿里云物联网平台 OTA 的升级流程说明第6张

  三, 点击验证固件

    ESA2GJK1DH1K升级篇: 阿里云物联网平台 OTA: 关于阿里云物联网平台 OTA 的升级流程说明第7张

    3.2  现在待升级里面的版本号就有了0.0

    

    ESA2GJK1DH1K升级篇: 阿里云物联网平台 OTA: 关于阿里云物联网平台 OTA 的升级流程说明第8张

    3.3  选择咱刚才用调试助手模拟的设备

      注: 以后咱肯定不止一台设备,阿里希望咱每次更新固件的时候,先拿一台设备做下测试

    ESA2GJK1DH1K升级篇: 阿里云物联网平台 OTA: 关于阿里云物联网平台 OTA 的升级流程说明第9张

    3.4 点击确定

    ESA2GJK1DH1K升级篇: 阿里云物联网平台 OTA: 关于阿里云物联网平台 OTA 的升级流程说明第10张

    3.5  看一下调试助手

    ESA2GJK1DH1K升级篇: 阿里云物联网平台 OTA: 关于阿里云物联网平台 OTA 的升级流程说明第11张

    {"code":"1000","data":{"size":15824,"sign":"d91b82d73681f83eb57f1f791af61563","version":"1.0","url":"https://ota.iot-thing.cn-shanghai.aliyuncs.com/ota/5f0103cd96ad6ac7d12b5492a54b003c/ck4ibxt1000002m201sk6bmx1.bin?Expires=1577454705&OSSAccessKeyId=cS8uRRy54RszYWna&Signature=Xv%2B21YX%2Fy7eE2LKz31UeK%2B2YCIg%3D","signMethod":"Md5","md5":"d91b82d73681f83eb57f1f791af61563"},"id":1577368305108,"message":"success"}

    如果咱是真实的设备,咱就应该提取url  去下载程序

    https://ota.iot-thing.cn-shanghai.aliyuncs.com/ota/5f0103cd96ad6ac7d12b5492a54b003c/ck4ibxt1000002m201sk6bmx1.bin?Expires=1577454705&OSSAccessKeyId=cS8uRRy54RszYWna&Signature=Xv%2B21YX%2Fy7eE2LKz31UeK%2B2YCIg%3D"

    

    3.6 咱用MQTT调试助手发送下最新的版本给阿里云,告诉阿里云我已经升级成功

    ESA2GJK1DH1K升级篇: 阿里云物联网平台 OTA: 关于阿里云物联网平台 OTA 的升级流程说明第12张

    3.7 点击查看,

    ESA2GJK1DH1K升级篇: 阿里云物联网平台 OTA: 关于阿里云物联网平台 OTA 的升级流程说明第13张

    3.8 点击返回

    ESA2GJK1DH1K升级篇: 阿里云物联网平台 OTA: 关于阿里云物联网平台 OTA 的升级流程说明第14张

 

    3.9  现在就可以正常的升级设备了

      点击批量升级

    ESA2GJK1DH1K升级篇: 阿里云物联网平台 OTA: 关于阿里云物联网平台 OTA 的升级流程说明第15张

现在才是重点

  一,你会发现第一项没有东西可选

    ESA2GJK1DH1K升级篇: 阿里云物联网平台 OTA: 关于阿里云物联网平台 OTA 的升级流程说明第16张

    其实阿里呢是这个步骤:

    假设我当前所有设备的版本号是 0.0

    我重新在阿里云OTA上传了固件,设置了固件版本是 1.0

    我现在想让0.0版本的设备去升级新版本

    你的设备必须通过MQTT上报当前的版本号,也就是0.0

    ESA2GJK1DH1K升级篇: 阿里云物联网平台 OTA: 关于阿里云物联网平台 OTA 的升级流程说明第17张

    然后才会出现需要升级的版本号

    ESA2GJK1DH1K升级篇: 阿里云物联网平台 OTA: 关于阿里云物联网平台 OTA 的升级流程说明第18张

    然后设置版本是0.0的设备的升级配置

    ESA2GJK1DH1K升级篇: 阿里云物联网平台 OTA: 关于阿里云物联网平台 OTA 的升级流程说明第19张

 这个地方测试的有点懵逼.......

 ESA2GJK1DH1K升级篇: 阿里云物联网平台 OTA: 关于阿里云物联网平台 OTA 的升级流程说明第20张

测试下这个让我懵逼的地方

  一,再弄个新设备

    ESA2GJK1DH1K升级篇: 阿里云物联网平台 OTA: 关于阿里云物联网平台 OTA 的升级流程说明第21张

  二,这个新设备只要不上报自己的版本则不会收到服务器的任何东西

    咱上报一下版本0.0

    我现在的设备就是 "待升级" 状态

    ESA2GJK1DH1K升级篇: 阿里云物联网平台 OTA: 关于阿里云物联网平台 OTA 的升级流程说明第22张

  三,假设现在设备不小心重启了

    云端主动推送升级信息来了

    ESA2GJK1DH1K升级篇: 阿里云物联网平台 OTA: 关于阿里云物联网平台 OTA 的升级流程说明第23张

 

不过感觉阿里应该再优化的地方-1

  阿里的固件的校验方式

  ESA2GJK1DH1K升级篇: 阿里云物联网平台 OTA: 关于阿里云物联网平台 OTA 的升级流程说明第24张

  ESA2GJK1DH1K升级篇: 阿里云物联网平台 OTA: 关于阿里云物联网平台 OTA 的升级流程说明第25张

  我感觉这样有点不好.

  其实应该可以让用户自定义个参数

  因为很多用户已经实现了升级,而且都有自己的程序文件校验方式.

  这样就给很多用户增加了工作量....

不过感觉阿里应该再优化的地方-2

  应该很多单片机的升级都是使用的 乒乓升级

  就是说每次升级的时候两块内存区来回的切换升级

  这就需要两份文件.

  列如我的升级篇使用的单片机分配情况

  ESA2GJK1DH1K升级篇: 阿里云物联网平台 OTA: 关于阿里云物联网平台 OTA 的升级流程说明第26张

  而阿里提供的是每次访问的时候只能是一套......

  那我们只能把原来的乒乓升级改一下

  

  用其中一块区域专门接收程序文件,然后对程序文件做校验

  保证了程序文件确实没有问题以后

  再把文件拷贝过去运行......

  这样有个问题是,,,万一写的程序有问题,就不能实现程序回滚了

  

  感觉最好可以上传两套程序文件

  然后自定义一个参数 可以访问哪一套

  

免责声明:文章转载自《ESA2GJK1DH1K升级篇: 阿里云物联网平台 OTA: 关于阿里云物联网平台 OTA 的升级流程说明》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇AspxGridView使用手记运维工具大宝典之开源平台篇下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

阿里云天池新人赛——docker练习场比赛心得

由于在阿里的淘宝商品直播识别大赛中提交结果需要用到docker,以前也没有用过。正好阿里提供了docker的新人赛,借此机会学习一下。 既然学习docker,首先就要了解docker是什么:   Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可...

pywinauto客户端自动化---自动打开PC端程序

继续介绍pywinauto,上一篇已经可以打开记事本了,这里安静在提供其他方法进行打开记事本和非电脑自带程序 运行指定程序 这里安静分别拿电脑自带程序和电脑非自带程序进行模拟打开。 1、windows自带程序: 这里需要start后面的参数,可以通过上一篇介绍的工具进行获取,也可以通过鼠标右键--属性查看 #coding:utf-8 from pywin...

www.nocmd.com 精品软件 坚持绿色之路 共筑生态之基

https://www.nocmd.com/ www.nocmd.com 精品软件 坚持绿色之路 共筑生态之基 https://www.vipc6.com/VIPC6资源网,VIPC6免费提供 ,优质付费破解资源 https://www.sharerj.com/ 软件铺...

“永恒之蓝"漏洞的紧急应对--毕业生必看

  早上6点多起床了,第一次起这么早,昨天晚上12点多,看到了一则紧急通知,勒索软件通过微软“永恒之蓝"漏洞针对教育网进行了大规模的攻击,而且有很多同学中招。中招后的结果如下图所示。(我的新书《Python爬虫开发与项目实战》出版了,大家可以看一下样章) 下面看一下紧急通知的内容: 关于防范ONION勒索软件病毒攻击的紧急通知 校园网用户: 近期国内多所院...

《软件安装》VMware Workstation 不注册 下载

问答环节 问:为什么要下载安装VMware Workstation 答:VMware Workstation 可以安装虚拟机,我们可以把我们安装的一些软件装在虚拟机上面,防止自己的电脑卡顿(软件装多了,我还怎么能流畅的玩游戏??),后面的很多教程我也是在虚拟机上操作 问:除了VMware Workstation还有别的类似软件吗? 答:有,比如 Oracl...

Linux新建用户并赋予文件读写权限

Linux命令 新建用户,并赋予文件夹权限 groupadd mvn #添加一个用户组 useradd -r -g mvn -s /bin/false mvn #添加一个用户 passwd mvn #修改mvn用户的密码 cd /usr/local/tomcat/apache-tomcat-7.0.54/webapps #...