MQTT物聯網套件支援用戶通過設備鏡像實現設備狀態、配置信息的同步,如下圖所示,詳情見設備鏡像
設備鏡像topic 簇topic 列表如下:
系統topic | 用途 | QoS | 可訂閱 | 可發佈 |
---|---|---|---|---|
$sys/{pid}/{device- name}/image/update | 設備更新鏡像中屬性 | 0/1 | √ | |
$sys/{pid}/{device- name}/image/update/accepted | 系統通知"設備鏡像更新成功" | 0 | √ | |
$sys/{pid}/{device- name}/image/update/rejected | 系統通知"設備鏡像更新失敗" | 0 | √ | |
$sys/{pid}/{device- name}/image/update/delta | 系統通知"屬性中上報值與期望值存在差異" | 0 | √ | |
$sys/{pid}/{device- name}/image/get | 設備鏡像信息查詢 | 0/1 | √ | |
$sys/{pid}/{device- name}/image/get/accepted | 系統通知"設備鏡像查詢成功" | 0 | √ | |
$sys/{pid}/{device- name}/image/get/rejected | 系統通知"設備鏡像查詢失敗" | 0 | √ |
設備可以通過向系統topic:$sys/{pid}/{device-name}/image/update發佈消息更新,payload示例:
{
"state": {
"desired": {
"color": "green"
},
"reported": {
"color": "red"
}
}
}
其中,參數說明如下:
參數 | 類型 | 是否必填 | 說明 |
---|---|---|---|
state | object | Yes | - |
desired | object | - | 用於更新設備狀態/配置信息期望狀態,與 reported至少存在一項 |
reported | object | - | 用於更新設備狀態/配置信息當前狀態,與 desired至少存在一項 |
設備鏡像更新支援QoS1,若publish QoS=1,則平台回復publish ack
若鏡像更新成功,平台通過系統topic:$sys/{pid}/{device-name}/image/update/accepted 下發成功消息
若鏡像更新失敗,平台通過系統topic:$sys/{pid}/{device-name}/image/update/rejected 下發更新失敗消息,見錯誤碼表
設備進行更新成功後,若reported內容與desired內容產生了差異,則觸發delta消息,設備可以通過訂閱系統topic:$sys/{pid}/{device- name}/image/update/delta 獲取該差異消息
當應用/設備更新reported或者desired屬性後,平台會計算屬性差異delta,若delta存在,平台會發送該差異消息至系統topic:$sys/{pid}/{device-name}/image/update/delta,設備可以通過訂閱該topic獲取屬性差異消息,消息示例如下:
{
"state": {
"color": "green"
},
"metadata": {
"color": {
"timestamp": 1469574492
}
},
"version":2,
"timestamp":1469574492
}
設備可以通過向系統topic:$sys/{pid}/{device-name}/image/get 發佈空消息查詢當前鏡像最新數據
設備鏡像查詢支援QoS1,若publish QoS=1,則平台回復publish ack
若鏡像查詢成功,平台通過系統topic:$sys/{pid}/{device- name}/image/get/accepted 下發鏡像最新數據
若鏡像更新失敗,平台通過系統topic:$sys/{pid}/{device- name}/image/get/rejected 下發更新失敗消息,見錯誤碼表
錯誤碼 err_code | 錯誤消息err_msg | 說明 |
---|---|---|
128 | unspecified error | 未明確的錯誤 |
160 | illegal json | 非法json |
161 | json out of bound | json數據過長 |
162 | json depth out of bound | json嵌套層級過多 |
163 | state key not found | state欄位不存在 |
164 | desired or reported key not found | 未包含"desired" 與"reported"欄位 |
165 | invalid parameters | 存在非法參數 |
166 | device image existed | 設備鏡像已存在 |
167 | device image not exists | 設備鏡像不存在 |