私はAzure IOTハブでAzureデバイスツインを使用していますが、この問題はデバイスツインビヘイビアに関するものです。Azureデバイスツインは以前のデータを保持します
私は以下のようなDeviceTwin構造を持っています。純粋なMQTTプロトコルを使用してデータを公開しています。
私は双子のデータを公開するために使用トピックは次のとおりです。?$ iothub /ツイン/ PATCH /プロパティ/報告/ $ = c1a12cc8-4168-4e16-a1bb
を取り除く私が送信されたペイロードは、次のとおりです。
{
"deviceId": "34aa078e",
"properties": {
"desired": {
},
"reported": {
"notifications": {
"notification1": {
"primaryCode": "crprim1",
"statusChangeTimestamp": 1507115005615
},
"notification2": {
"primaryCode": "crprim2",
"statusChangeTimestamp": 1507117507027
}
},
"location": {
}
}
}
}
DeviceTwinのドキュメントに記載されているように、すべての機能が正常に動作していますが、このDeviceTwinのビヘビアに関してクリアする必要があります。
IはDeviceTwin上に更新するMQTTを介して(notificaion3
と命名)一つの新たな通知を含むメッセージペイロードを送信すると、それだけではなく、単にnotification3
notifications
と全体のコンテンツを置き換えるのnotifications
notification3
オブジェクトに追加します。
私が送信され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": {
}
}
}
}
しかし、デバイスツイン特定のデバイスの最新のスナップショットが含まれている必要があり、以前のデータを保持してはいけません(ウィットオブジェクトレベルとの関係)。 これはAzure Device Twinの通常の動作ですか?それとも何らかのバグですか?
はい、あなたが正しい、私はこのケースでは、3つのすべての通知を見ることができます - 私ははっきりそう」で述べています私は最終的には上記のDeviceTwin構造に従います。実際には私の本当の問題は、これはデバイスのツインの意図された正しい動作ですか?歴史的なデータを維持する... – gbids
通知のデバイスのツイン状態をこの "通知"のために変更する必要があります:{ "id":3, "primaryCode": "crprim3"、 "statusChangeTimestamp":1607115005615 } –