网关请求方式设计
到目前为止,我们已经知道如何获取任意设备的升级包,需要deviceId和tenantId就能获取,但我们知道,网关一般只知道设备的deviceName,这个deviceName是设备上报信息必须要带的,如何由deviceName得到deviceId和tenantId呢?这个问题经过我看代码,也找到了方法,transport mqtt已经有这种功能的方法,我们只需要调用,就能通过deviceName得到deviceId,后面一篇文章再介绍这个方法。
现在已经彻底可以想获取哪个设备的升级包,就能获取哪个设备的升级包。现在任务就是想好 transport mqtt 如何与网关交互,网关如何请求某个设备的升级包。这个随便设计,我的设计如下:
firmware升级包
| 用途 | topic |
|---|---|
| 网关发送请求的topic | v1/gateway/fw/request/{chunk} |
| 网关收到响应的topic | v1/gateway/fw/response/+/chunk/+ |
| 网关收到错误的topic | v1/gateway/fw/error |
网关发送请求
需要准备的参数
| 变量名 | 用途 |
|---|---|
| requestId | 请求ID,收到响应时,若responseId与该请求ID一样,代表是该请求的响应 |
| deviceName | 哪个设备 |
| chunk | 升级包第几块,从0开始 |
| chunkSize | 每块多少字节 |
将 requestId、chunk 参数填入该主题中 v1/gateway/fw/request/{chunk}
并发送负载 {deviceName: deviceName, chunkSize: chunkSize}
网关收到响应
从 v1/gateway/fw/response/+/chunk/+ 提取参数,第一个+号的位置是responseId,第二个+号的位置是chunk,负载是升级包数据。
网关收到错误
负载是个json,{requestId: requestId, error: "xxx"}
software升级包
与 firmware 类似,就不写了。