固件升级API

签名

固件升级API签名认证方式与API文档方式一致,具体请查阅API文档请求签名说明

HTTPS升级步骤

HTTP固件升级流程,请查阅固件升级服务

1. 设备端请求上报固件版本接口,等待响应
2. 收到上报版本接口响应,如返回数据中包含固件相关信息,则表示有固件升级,需要设备端进行升级;如不包含固件信息,则无固件升级
3. 根据固件信息中的固件包下载地址,下载固件包到本地
4. 验证固件包,首先验证固件包大小,然后验证固件包内容的MD5值或者固件包内容的SHA256值,都验证通过后表明固件包可用
5. 设备端根据最新的固件包进行升级,并上报固件的升级状态和状态描述
6. 设备端升级成功后,再次请求上报固件版本接口,上报升级后的固件版本
7. 升级成功

验证固件示例

    // Step 1:根据固件下载地址,下载固件
    if params.Url == "" {
        // 固件下载地址错误
        return
    }

    // 根据URL获取文件名称
    index := strings.LastIndex(params.Url, "?")
    fileName := params.Url[:index]
    index = strings.LastIndex(fileName, "/")
    fileName = fileName[index:]
    fileName = strings.Replace(fileName, "/", "", -1)
    fileName = "./firmware/" + deviceName + "_" + fileName

    out, err := os.Create(fileName)
    if err != nil {
        return
    }
    defer out.Close()

    resp, err := http.Get(params.Url)
    if err != nil {
        return
    }
    defer resp.Body.Close()

    size, err := io.Copy(out, resp.Body)
    if err != nil {
        return
    }

    // Step 2:验证固件
    if size != params.Size {
        // 下载的固件大小与服务端不一致
        return
    }

    body, err := ioutil.ReadFile(fileName)
    if err != nil {
        return
    }

    hash := md5.New()
    hash.Write(body)
    md5Str := hex.EncodeToString(hash.Sum(nil))
    if md5Str != params.Md5 {
        // 下载的固件包内容MD5值与服务端固件包不一致
        return
    }

    // 验证成功

上报固件版本

简要描述:

上报固件版本接口,用于设备端主动想服务端上报设备端固件版本

请求URL:

/api/v1/otas/upload/device/version

请求方式:

POST

请求参数

{
    "productKey":"xxx",
    "deviceName":"xxx",
    "version":"xxx"
}

请求参数说明:

参数名 必选 类型 长度 说明
productKey string 产品标识
deviceName string 设备标识
version string 设备版本,目前为设备固件版本

返回参数

{
    "code": 0, 
    "message": "success",
    "data": {
        "size":123123,
        "url":"xxx",
        "md5":"xxx",
        "sha256":"xxx",
        "version":"xxx"
    }
}

返回参数说明:

参数名 类型 长度 说明
code string 状态码
message string 描述
size int64 固件包长度
url string 固件包下载地址
md5 string 固件包MD5签名
sha256 string 固件包SHA256签名
version string 固件包版本

特别说明

固件包下载地址,有效时间为30分钟,固件包下载地址失效,错误码返回403时,请重新上传当前固件版本,获取有效的固件包下载地址。

上报升级状态

简要描述:

上报升级状态接口,用于设备端主动想服务端上报当前升级的状态

请求URL:

/api/v1/otas/upload/device/status

请求方式:

POST

请求参数

{
    "productKey":"xxx",
    "deviceName":"xxx",
    "status":2,
    "desc":"xxx"
}

请求参数说明:

参数名 必选 类型 长度 说明
productKey string 产品标识
deviceName string 设备标识
status int 升级状态,-3:烧写失败 -2:校验失败 -1:下载失败 0:待升级 1:升级中 2:升级成功 3:升级失败
desc string 状态描述

返回参数

{
    "code": 0, 
    "message": "success"
}

返回参数说明:

参数名 类型 长度 说明
code string 状态码
message string 描述

错误码

错误码 描述
0 请求成功
400 错误请求
460 参数错误
500 服务端内部错误

results matching ""

    No results matching ""