面对 IoT 设备在线运营和远程管理的诉求,IoT企业物联网平台发布了任务管理功能,可按产品维度、分组、或根据业务诉求批量选取设备,发起设备重启、配置参数变更、资源包更新、固件升级等业务定义任务。
任务管理的系统Topic和业务流程设计如下图:
任务管理实战
我们以批量设备远程更新运行参数场景为例,讲解任务管理的开发过程。
我们业务中有10000多台洗衣机,7836台处于在线状态,其余离线或未激活。如下图:
1.设备端开发
通过阅读任务管理文档,我们知道在线设备需要订阅任务Topic,才能实时获取到任务通知。
对应Topic和Payload如下:
/sys/{productKey}/{deviceName}/thing/job/notify
{
"id":"7542940",
"version":"1.0",
"params":{
"task":{
"taskId":"i5Ks6F010101",
"status":"SENT",
"jobDocument":{
"operatingMode":23
},
"jobFile":{
"signMethod":"Md5",
"sign":"wssxff56dhdsd",
"fileUrl":"https://iotx-oss.aliyuncs.com/ota.zip"
}
}
}
}
离线设备上线后,需要主动拉取任务Topic,才能获取到历史任务信息。
请求任务对应Topic和Payload如下:
/sys/{productKey}/{deviceName}/thing/job/get
{
"id":"127542",
"version":"1.0.0",
"params":{
"taskId":"$next"
}
}
```
IoT物联网平台响应任务信息的Topic和Payload如下:
> /sys/{productKey}/{deviceName}/thing/job/get_reply
```json
{
"code":200,
"data":{
"task":{
"jobDocument":{
"operatingMode":23
},
"taskId":"b2ceb5ddsd69",
"status":"SENT"
},
"taskId":"$next"
},
"id":"1610526478300",
"method":"thing.job.get",
"version":"1.0"
}
设备接收到任务信息后,需要根据业务情况主动上报设备任务执行进度和结果信息,对应Topic和Payload如下:
/sys/{productKey}/{deviceName}/thing/job/update
{
"id":"175423",
"version":"1.0",
"params":{
"taskId":"i5Kssgc010101",
"status":"IN_PROGRESS",
"statusDetails":{
"endTime":1610629200000
},
"progress":64
}
}
2.IoT控制台创建任务
在企业物联网实例控制台,选择设备管理的任务,选择指定产品,上传任务模板,模板中携带了运行参数 "operatingMode":23。
在作业配置选择每分钟执行的设备数量和任务超时时间。
点击完成,我们看到新建的任务处于执行中,如下图:
3.任务执行
进入任务详情,在作业概览,我们可以看到处于执行中,成功,失败,已超时等不同状态下的设备情况。
同理,我们可以借助任务管理来批量更新设备端资源包,批量重启设备,甚至固件升级功能。