O IoT Platform oferece o recurso de atualização e gerenciamento over-the-air (OTA). Este tópico descreve os tópicos e formatos de dados usados para transmitir mensagens durante as atualizações OTA. A transmissão ocorre quando dispositivos enviam versões de módulos OTA, o IoT Platform distribui pacotes de atualização para os dispositivos, os dispositivos relatam o progresso da atualização e os dispositivos solicitam informações sobre os pacotes de atualização mais recentes.
Para obter mais informações sobre como executar atualizações OTA, consulte Procedimento de atualização OTA.
Enviar versões de módulos OTA para o IoT Platform
O tópico a seguir é utilizado quando um dispositivo envia dados para o IoT Platform:
Tópico: /ota/device/inform/${productKey}/${deviceName}.
Um dispositivo envia a versão de um módulo OTA para este tópico.
Este tópico permite que o dispositivo envie a versão de apenas um módulo por vez. Caso seja necessário enviar versões de vários módulos OTA, o dispositivo deve mandar múltiplas mensagens. Cada mensagem deve conter a versão de um único módulo.
Exemplo de solicitação:
{
"id": "123",
"params": {
"version": "1.0.1",
"module": "MCU"
}
}
| Parâmetro | Tipo | Descrição |
| id | String | ID da mensagem. Valores válidos: 0 a 4.294.967.295. Cada ID de mensagem deve ser exclusivo para o dispositivo. |
| version | String | Versão do módulo OTA. |
| module | String | Nome do módulo OTA. Nota
|
Distribuir informações de um pacote de atualização OTA para um dispositivo
O tópico abaixo é usado quando o IoT Platform envia dados para um dispositivo:
Tópico: /ota/device/upgrade/${productKey}/${deviceName}.
O IoT Platform publica as informações do pacote de atualização OTA no tópico mencionado. O dispositivo pode assinar esse tópico para receber os dados.
-
Exemplo de informações de um pacote de atualização OTA contendo um único arquivo:
-
Baixe o pacote de atualização OTA via HTTPS:
{ "code": "1000", "data": { "size": 432945, "version": "2.0.0", "isDiff": 1, "url": "https://***/nop***.tar.gz?Expires=1502955804&OSSAccessKeyId=***&Signature=XfgJu7P6DW***qAKU%3D&security-token=***Tz2IHtIf3***", "md5": "93230c3bde425a9d***", "digestsign":"A4WOP***SYHJ6DDDJD9***", "sign": "93230c3bde425a9d***", "signMethod": "MD5", "module": "MCU", "extData":{ "key1":"value1", "key2":"value2", "_package_udi":"{\"ota_notice\":\"Update the camera driver to prevent blurry videos. \"}" } }, "id": 1626969597470, "message": "success" } -
Baixe o pacote de atualização OTA via MQTT:
{ "code":"1000", "data":{ "size":432945, "version":"2.0.0", "isDiff":1, "signMethod":"MD5", "dProtocol":"mqtt", "streamId":1397345, "streamFileId":1, "md5":"93230c3bde425***", "digestsign":"A4WOP***SYHJ6DDDJD9***", "sign":"93230c3bde425***", "module":"MCU", "extData":{ "key1":"value1", "key2":"value2" } }, "id":1507707025, "message":"success" }
-
-
Pacotes de atualização OTA com múltiplos arquivos só podem ser baixados via HTTP. Exemplo de informações:
{ "code": "1000", "data": { "version": "2.0.0", "isDiff": 1, "signMethod": "MD5", "files":[ { "fileSize":432944, "fileName":"file1-name", "fileUrl":"https://***/nop***.tar.gz?Expires=1502955804&OSSAccessKeyId=***&Signature=***XJEH0qAKU%3D&security-token=CAISuQJ***", "fileMd5":"93230c3bde425a9d***", "fileSign":"93230c3bde425a9d****" }, { "fileSize":432945, "fileName":"file2-name", "fileUrl":"https://***/no***.tar.gz?Expires=1502955804&OSSAccessKeyId=***&Signature=***qAKU%3D&security-token=***q6Ft5B2y***", "fileMd5":"93230c3bde425a92***", "fileSign":"93230c3bde425a92****" } ], "module": "MCU", "extData":{ "key1":"value1", "key2":"value2", "_package_udi":"{\"ota_notice\":\"Update the camera driver to prevent blurry videos. \"}" } }, "id": 1626969597470, "message": "success" }
| Parâmetro | Tipo | Descrição |
| id | Long | ID da mensagem. Cada ID de mensagem é exclusivo para o dispositivo. |
| message | String | Mensagem de resposta. |
| code | String | Código de status HTTP. |
| version | String | Versão do pacote de atualização OTA. |
| size | Long | Tamanho do pacote de atualização. Unidade: bytes. Parâmetro disponível apenas se o pacote de atualização OTA contiver um único arquivo. |
| url | String | URL do Object Storage Service (OSS) do pacote de atualização OTA. Parâmetro disponível apenas se o pacote contiver um único arquivo e o protocolo de download for HTTPS. |
| dProtocol | String | Protocolo utilizado para baixar o pacote de atualização OTA. Parâmetro disponível apenas se o protocolo de download for MQTT. |
| streamId | Long | ID exclusivo gerado ao baixar o pacote de atualização OTA via MQTT. Parâmetro disponível apenas se o protocolo de download for MQTT. |
| streamFileId | Integer | ID exclusivo do pacote de atualização OTA que contém um único arquivo. Parâmetro disponível apenas se o protocolo de download for MQTT. |
| isDiff | Long | Indica se o pacote é uma atualização diferencial. Defina o valor como 1. Isso especifica que o pacote contém apenas as diferenças entre a nova versão e a anterior, realizando uma atualização delta. |
| digestsign | String | Assinatura do pacote de atualização OTA após a execução de uma atualização segura. Disponível quando o recurso de atualização segura está ativado para o pacote. Para saber como ativar esse recurso, consulte Adicionar um pacote de atualização. |
| sign | String | Assinatura do pacote de atualização OTA. Parâmetro disponível apenas se o pacote de atualização OTA contiver um único arquivo. |
| signMethod | String | Algoritmo de assinatura. Valores válidos:
|
| md5 | String | Quando o algoritmo de assinatura é MD5, o IoT Platform define valores para os parâmetros sign e md5. Parâmetro disponível apenas se o pacote de atualização OTA contiver um único arquivo. |
| module | String | Nome do módulo ao qual o pacote de atualização OTA se aplica. Nota Se o pacote de atualização OTA for aplicado ao módulo padrão, o IoT Platform não envia o parâmetro module. |
| extData | Object | Tags do lote de atualização e informações personalizadas que o IoT Platform deve enviar ao dispositivo. O campo _package_udi especifica as informações personalizadas. Formato de cada tag: |
| files | Array | Informações sobre os arquivos em um pacote de atualização. Parâmetro disponível se o pacote de atualização OTA contiver múltiplos arquivos. Detalhes de um único arquivo:
|
Relatar o progresso da atualização para o IoT Platform
Utilize o seguinte tópico quando um dispositivo enviar dados para o IoT Platform:
Tópico: /ota/device/progress/${productKey}/${deviceName}.
Durante uma atualização OTA, o dispositivo reporta a porcentagem de conclusão para o tópico acima.
Recomenda-se limitar a frequência de relato de progresso a no máximo uma vez a cada 3 segundos. Frequências superiores podem impedir a visualização completa das informações na página
Batch Details
do pacote de atualização OTA no console do IoT Platform.
Exemplo de solicitação:
{
"id": "123",
"params": {
"step": "-1",
"desc": "OTA update failed because no update package information is found.",
"module": "MCU"
}
}
| Parâmetro | Tipo | Descrição |
| id | String | ID da mensagem. Valores válidos: 0 a 4.294.967.295. Cada ID de mensagem deve ser exclusivo para o dispositivo. |
| step | String | Progresso da atualização OTA. Valores válidos:
Os valores de progresso e descrições podem ser configurados no dispositivo conforme a necessidade. Para detalhes sobre o desenvolvimento do recurso de atualização OTA no dispositivo, consulte Código de exemplo. |
| desc | String | Descrição da etapa atual. Limitado a 128 caracteres. Em caso de exceção, este campo contém a mensagem de erro. |
| module | String | Nome do módulo alvo da atualização OTA. Consulte Adicionar um pacote de atualização. Nota O parâmetro module é opcional ao relatar o progresso do módulo padrão. |
Solicitar informações sobre um pacote de atualização OTA
Os tópicos seguintes são usados quando um dispositivo envia dados para o IoT Platform:
Tópico de solicitação: /sys/${productKey}/${deviceName}/thing/ota/firmware/get.
Tópico de resposta: /sys/${productKey}/${deviceName}/thing/ota/firmware/get_reply.
Exemplo de solicitação:
{
"id": "123",
"version": "1.0",
"params": {
"module": "MCU"
},
"method": "thing.ota.firmware.get"
}
| Parâmetro | Tipo | Descrição |
| id | String | ID da mensagem. Valores válidos: 0 a 4.294.967.295. Cada ID de mensagem deve ser exclusivo para o dispositivo. |
| version | String | Versão do protocolo. Defina o valor como 1,0. |
| params | Object | Parâmetros da solicitação. |
| module | String | Nome do módulo ao qual o pacote de atualização OTA se aplica. Nota Se este parâmetro não for configurado, as informações do pacote de atualização do módulo padrão serão solicitadas. |
| method | String | Método da solicitação. Defina o valor como thing.ota.firmware.get. |
Após receber uma solicitação do dispositivo, o IoT Platform envia uma resposta.
-
O IoT Platform envia as informações do pacote de atualização mais recente para o dispositivo. Exemplos de resposta:
-
Exemplo de informações de um pacote de atualização OTA contendo um único arquivo:
-
Baixe o pacote de atualização OTA via HTTPS:
{ "id": "123", "code": 200, "data": { "size": 93796291, "sign": "f8d85b250d4d787a9f483d89a974***", "version": "10.0.1.9.20171112.1432", "isDiff": 1, "url": "https://the_firmware_url", "signMethod": "MD5", "md5": "f8d85b250d4d787a9f48***", "module": "MCU", "extData":{ "key1":"value1", "key2":"value2", "_package_udi":"{\"ota_notice\":\"Update the camera driver to prevent blurry videos. \"}" } } } -
Baixe o pacote de atualização OTA via MQTT:
{ "id": "123", "code": 200, "data":{ "size":432945, "digestsign":"A4WOP***SYHJ6DDDJD9***", "version":"2.0.0", "isDiff":1, "signMethod":"MD5", "dProtocol":"mqtt", "streamId":1397345, "streamFileId":1, "md5":"93230c3bde***", "sign":"93230c3bde42***", "module":"MCU", "extData":{ "key1":"value1", "key2":"value2" } } }
-
-
Pacotes de atualização OTA com múltiplos arquivos só podem ser baixados via HTTP. Exemplo de informações:
{ "id": "123", "code": 200, "data": { "version": "2.0.0", "isDiff": 1, "signMethod": "MD5", "files":[ { "fileSize":432944, "fileName":"file1-name", "fileUrl":"https://iotx***.aliyuncs.com/nop***.tar.gz?Expires=1502955804&OSSAccessKeyId=***&Signature=XfgJu7***U%3D&security-token=CAISu***", "fileMd5":"93230c3bde425a9d7984a594ac55ea1e", "fileSign":"93230c3bde425a9d7984a594ac55****" }, { "fileSize":432945, "fileName":"file2-name", "fileUrl":"https://iotx-***.aliyuncs.com/no***.tar.gz?Expires=1502955804&OSSAccessKeyId=***&Signature=XfgJu7P***KU%3D&security-token=CAISuQJ***", "fileMd5":"93230c3bde425a9d7984a594ac56ea1f", "fileSign":"93230c3bde425a9d7984a594ac56****" } ], "module": "MCU", "extData":{ "key1":"value1", "key2":"value2", "_package_udi":"{\"ota_notice\":\"Update the camera driver to prevent blurry videos. \"}" } } }
Tabela 5. Parâmetros Parâmetro
Tipo
Descrição
id
String
ID da mensagem. Valores válidos: 0 a 4.294.967.295. Cada ID de mensagem deve ser exclusivo para o dispositivo.
O ID da mensagem na resposta é idêntico ao da solicitação. Verifique o parâmetro
idnos dados enviados ao tópico /sys/${productKey}/${deviceName}/thing/ota/firmware/get.code
Integer
Código de status. O valor 200 indica sucesso na solicitação.
data
Object
Informações do pacote de atualização OTA. Para mais detalhes, consulte Distribuir informações de um pacote de atualização OTA para um dispositivo.
-
-
O IoT Platform retorna uma resposta caso não existam informações de pacotes de atualização. Exemplo:
{ "id": "123", "code": 200, "data": { } }
Iniciar solicitações para download de segmentos de pacote
Se o protocolo de download do pacote de atualização OTA for MQTT, o dispositivo poderá baixar o pacote por segmentos. Utilize os seguintes tópicos:
Pacotes de atualização baixados via protocolo MQTT têm tamanho máximo de 16 MB.
Tópico de solicitação:
/sys/${productKey}/${deviceName}/thing/file/download.Tópico de resposta:
/sys/${productKey}/${deviceName}/thing/file/download_reply.
Exemplo de solicitação:
{
"id": "123456",
"version": "1.0",
"params": {
"fileToken":"1bb8***",
"fileInfo":{
"streamId":1234565,
"fileId":1
},
"fileBlock":{
"size":256,
"offset":2
}
}
}
| Parâmetro | Tipo | Descrição |
| id | String | ID da mensagem. Valores válidos: 0 a 4.294.967.295. Cada ID de mensagem deve ser exclusivo para o dispositivo. |
| version | String | Versão do protocolo. Defina o valor como 1,0. |
| params | Object | Parâmetros da solicitação. |
| fileToken | String | Opcional. Token exclusivo para identificar o pacote de atualização. Aceita até 16 caracteres, incluindo dígitos, letras, sublinhados (_) e pontos (.). Observações de uso:
|
| fileInfo | Object | Informações sobre o pacote de atualização OTA. |
| streamId | Long | ID exclusivo gerado durante o download do pacote de atualização OTA via MQTT. |
| fileId | Integer | ID exclusivo do pacote de atualização OTA. |
| fileBlock | Object | Detalhes de cada segmento. |
| size | Integer | Tamanho de cada segmento a ser baixado. Unidade: bytes. Valores válidos: 256 a 131.072. Para o último segmento, o intervalo é de 1 a 131.072. |
| offset | Integer | Posição inicial do último segmento no pacote de atualização baixado por partes. Unidade: bytes. Valores válidos: 0 a 16.777.216. |
Exemplos de resposta:
-
A figura abaixo ilustra a estrutura de dados de uma resposta.

Campo
Descrição
JSON Bytes Length
Define o comprimento do array de bytes convertido a partir da string JSON na resposta. O array deve ter dois bytes, sendo o primeiro o byte alto e o segundo o byte baixo.
Por exemplo, uma string JSON codificada em UTF-8 convertida para bytes resulta no valor decimal 87, equivalente a 0x57 em hexadecimal. Assim, o byte alto é 0x00 e o baixo é 0x57.
JSON String Bytes
Representa o array de bytes convertido da string JSON na resposta, utilizando codificação UTF-8. Consulte a seção "Exemplo de resposta JSON" neste tópico para mais detalhes.
File Block Bytes
Corresponde ao array de bytes do segmento. Os bytes são ordenados de forma crescente com base no deslocamento (offset) em relação ao cabeçalho do pacote.
CRC16/IBM
Valor de verificação do segmento. Deve ter dois bytes de comprimento. Apenas CRC-16-IBM é suportado. O primeiro byte é o alto e o segundo é o baixo.
Por exemplo, se o valor de verificação for 0x0809, o byte alto será 0x08 e o baixo 0x09.
-
Exemplo de resposta JSON:
{ "id": "123456", "code":200, "msg":"file size has exceeded the limit 16 MB", "data": { "fileToken":"1bb8***", "fileLength":1238848, "bSize":1491, "bOffset":2 } }
|
Parâmetro |
Tipo |
Descrição |
|
id |
String |
ID da mensagem. Valores válidos: 0 a 4.294.967.295. Cada ID de mensagem deve ser exclusivo para o dispositivo. O ID da mensagem na resposta corresponde ao ID da solicitação. Verifique o ID no parâmetro id dos dados enviados ao tópico |
|
code |
Integer |
Código de status. O valor 200 indica sucesso na solicitação. |
|
msg |
String |
Mensagem de erro retornada em caso de falha na chamada. |
|
data |
Object |
Dados retornados ao dispositivo. |
|
fileToken |
String |
Token exclusivo do pacote de atualização. Retornado apenas se o parâmetro fileToken tiver sido especificado na solicitação. |
|
fileLength |
Integer |
Tamanho total do pacote de atualização. Unidade: bytes. |
|
bSize |
Integer |
Tamanho do segmento atual. Unidade: bytes. |
|
bOffset |
Integer |
Posição inicial do segmento atual no pacote de atualização. Este valor é idêntico ao do parâmetro de solicitação offset. Unidade: bytes. |
Referências
Para consultar códigos de erro e métodos de solução de problemas, acesse Códigos de erro recebidos por dispositivos.