我在Azure IOT Hub中使用Azure Device Twin,此問題與設備Twin的行爲有關。Azure設備Twin保留以前的數據
我有一個DeviceTwin結構如下,我正在使用純MQTT協議發佈數據到它。
這是我用來發布雙數據的題目是:$ iothub /雙/ PATCH /屬性/報告/ $ RID = c1a12cc8-4168-4e16-a1bb
我發送的有效載荷是:
{
"deviceId": "34aa078e",
"properties": {
"desired": {
},
"reported": {
"notifications": {
"notification1": {
"primaryCode": "crprim1",
"statusChangeTimestamp": 1507115005615
},
"notification2": {
"primaryCode": "crprim2",
"statusChangeTimestamp": 1507117507027
}
},
"location": {
}
}
}
}
所有的功能都正常工作,如在DeviceTwin文檔中記錄的,但是我有一個澄清要關於此DeviceTwin的行爲。
當我發送包含一個新的通知(命名爲notificaion3
)通過MQTT來更新上述DeviceTwin消息有效載荷,它只是添加notification3
到notifications
對象,而不是隻是notification3
更換整個notifications
內容。
MQTT有效載荷我送:
{
"notifications": {
"notification3": {
"primaryCode": "crprim3",
"statusChangeTimestamp": 1607115005615
}
}
}
所以我將最終需要在DeviceTwin結構下,
{
"deviceId": "34aa078e",
"properties": {
"desired": {
},
"reported": {
"notifications": {
"notification1": {
"primaryCode": "crprim1",
"statusChangeTimestamp": 1507115005615
},
"notification2": {
"primaryCode": "crprim2",
"statusChangeTimestamp": 1507117507027
},
"notification3": {
"primaryCode": "crprim3",
"statusChangeTimestamp": 1607115005615
}
},
"location": {
}
}
}
}
而不是之後,
{
"deviceId": "34aa078e",
"properties": {
"desired": {
},
"reported": {
"notifications": {
"notification3": {
"primaryCode": "crprim3",
"statusChangeTimestamp": 1607115005615
}
},
"location": {
}
}
}
}
但設備雙牀應該包含給定設備的最新快照,並且它不應該保留以前的數據(例如, h尊重對象級別)。 這是Azure Device Twin的常見行爲嗎?或者它是一種錯誤?
是的,你是正確的,我可以看到在這種情況下,所有三個通知 - 這是我在明確提出「所以我將最終在DeviceTwin結構中遵循上面的部分。其實我真正的問題是,這是一個設備雙胞胎的預期和正確的行爲 - 保持歷史數據... – gbids
您的設備雙通知狀態通知應該改變這個「通知」:{ 「ID」:3, 「primaryCode」:「crprim3」, 「statusChangeTimestamp」:1607115005615 } –