アライボデバイスツインチェンジディープダイブ
Azure IOTハブメッセージルーティングは、iOTハブサービスで直接ルールに基づいて別のエンドポイントにメッセージを送信できる素晴らしい機能です.これは主にルーティングテレメトリメッセージのために使用されますが、LifeStyleまたはデバイスツイン変更イベントなどの他の種類のイベントを送信することもできます.
デバイスのツイン変更イベントに初めて使用したとき、以下の質問に対する回答は見つかりませんでした. それは、ツインの任意のセクションの変更のためのイベントをトリガします(報告、目的とタグ)? 何がイベントペイロードの内容ですか? ルートの条件は変更前か後に実行されますか? このポストでは、これらの質問に答えるために、デバイスツインチェンジイベントのIOTハブメッセージルーティングへの深いダイビングを行います.
メッセージルーティングとデバイスツインの概念に慣れていない場合は、まず以下の内容を読んでください. Message routing for telemetry Device twin presentation TLあなたが急いでいるならば、そして、たった今答えを必要としてくださいsummary このポストのセクション、そうでなければ、あなたが全部を読むならば、私は感謝します🤗
このデモでは、次のコンポーネントを使用します Azureでは、単一リソースとしてIOTハブ 私のラップトップでは、いくつかのWSLタブを使用したWindows端末: AZ CLIコマンドを使用してデバイスのツインを更新します Aを実行する.デバイスをシミュレートするNET 他のAZ CLIコマンドを使用してIOTハブからイベントを監視します 私はそれをより快適にしたいのでbashからAZ CLIだけを使うことを選びました、しかし、あなたはIOTハブを構成して、Twin、またはPowerShell Cmdletsの望ましい特性とタグ部分をアップデートするためにAzureポータルを使うこともできます.The Azure IoT Hub VSのコードの拡張子はまた、ツインとモニタのイベントを更新するには最適です.
セットアップ全体を示します.
私たちは自由または標準の層でIOTハブを必要とします.そして、それが装置双子機能をサポートしないので、我々は基本的な層を使用することができません.
iotハブが作成されると、組み込みのエンドポイントへのルートを追加します.
私たちはデバイスを必要とします.したがって、デーモンのためにいつも簡単に使用できるようにSAS認証を使用して作成します.
報告されたプロパティの変更については、デバイスをシミュレートする必要がありますので、簡単に準備している.ネットコンソールアプリ利用可能here . プロジェクトフォルダから、次のコマンドを実行して、デバイス接続文字列を確実に格納し、ツールを実行してレポートのプロパティを初期化します.
目的のプロパティとタグの変更のために、私たちは
設定が行われ、最初のテストにジャンプしましょう!
各々のテストのために、私はWSLで2つのペインを開いているWindows端末を使っています:Longの上で1つは、変化をモニターするために、左右の変化をモニターするためにLEFにあります
上のイメージで見られるように、左のペインでデバイスツールをruningすると
要約すると、イベントペイロードでは次のようになります. The 変更に含まれるプロパティの新しい値 The The そして、我々にはありません: 変更されなかった報告されたプロパティと デバイス双の他のセクションからのデータ(希望、タグ)
私のWindows端末に戻ると、左区画に次のコマンドを入力して、新しいセクションを指定します.
The タグのセクション 全体の所望のプロパティセクション
同じテストを行いますが、タグのセクションに新しいプロパティを追加することで、次のコマンドを実行します.
さて、私たちは、イベントが双子の各セクションに対して引き起こされ、ペイロードにあることを知っているので、3番目の質問に移動することができます.
経路を更新しましょう.
DotNetツールを使用してデバイスをシミュレートする
それで、答えは明確です:最初に、変化はデバイス双子でなされます、そして、ルーティング・条件は評価されます.そして、装置双子の更新されたバージョンで評価されます.
このポストを終えるために、イントロからの2つの最初の質問に答えるこのテーブルで学んだことをまとめましょう.
更新ツインセクション
イベントトリガ?
イベントのペイロード
報告財産
はい
報告されたセクションの一部(デバイスによって送られるパッチ)を更新しました
望ましい特性
はい
すべてのタグと望ましいプロパティ
タグ
はい
望ましいプロパティの更新と同じ内容
最後に、ルート上の条件がある場合は、デバイスのツイン変更の適用後に評価されます.
私はこのポストが有用だったことを願って、私は質問をしている上に手を差し伸べるか、以下のコメントを残して躊躇しないでください.
デバイスのツイン変更イベントに初めて使用したとき、以下の質問に対する回答は見つかりませんでした.
メッセージルーティングとデバイスツインの概念に慣れていない場合は、まず以下の内容を読んでください.
デモ環境の作成
概要
このデモでは、次のコンポーネントを使用します
セットアップ全体を示します.
IOTハブの設定
私たちは自由または標準の層でIOTハブを必要とします.そして、それが装置双子機能をサポートしないので、我々は基本的な層を使用することができません.
iotハブが作成されると、組み込みのエンドポイントへのルートを追加します.
$ hub_name="<ENTER-HUB-NAME>"
$ az iot hub route create --hub-name $hub_name -n route-device-twin-changes --source twinchangeevents --endpoint-name events
サンプルデバイスの作成
私たちはデバイスを必要とします.したがって、デーモンのためにいつも簡単に使用できるようにSAS認証を使用して作成します.
$ device_id="<ENTER-DEVICE-ID>"
$ az iot hub device-identity create --hub-name $hub_name -d $device_id
$ device_connection_string=$(az iot hub device-identity show-connection-string --hub-name $hub_name -d $device_id -o tsv)
デバイスのツインイベントを送信するには2つのことが必要です.$ dotnet user-secrets set "DeviceConnectionString" $device_connection_string
$ dotnet run
DeviceClient created ! Getting current twin...
First time with this device, let's initialize it !
Done ! Exiting now...
ツールの最初の実行は2つの報告されたプロパティを作成します.propertyUsedOnlyOnce
再び使用されません😔 color
設定するRed
, ツールの次の実行はBlue
, その後Red
, その後Blue
, などaz iot hub device-twin update
コマンド.最初にデバイスの初期化を終了しましょう.$ az iot hub device-twin update --hub-name $hub_name -d $device_id --set tags='{"tagProperty":"tagValue"}'
$ az iot hub device-twin update --hub-name $hub_name -d $device_id --set properties.desired.desiredProperty='desiredValue'
これは、今後のテストによって変更されませんデバイスツインの目的とタグのセクションのプロパティを作成します.これらのプロパティがイベントペイロードに埋め込まれるかどうかを確認します.設定が行われ、最初のテストにジャンプしましょう!
プロパティの変更をテスト
各々のテストのために、私はWSLで2つのペインを開いているWindows端末を使っています:Longの上で1つは、変化をモニターするために、左右の変化をモニターするためにLEFにあります
az iot hub monitor-events
コマンド)レポートのプロパティのテスト
上のイメージで見られるように、左のペインでデバイスツールをruningすると
color
レポートプロパティRed
to Blue
. 右区画では、次のペイロードを持つイベントが表示されます.{
"version": 10,
"properties": {
"reported": {
"color": "Blue",
"$metadata": {
"$lastUpdated": "2021-02-13T17:56:23.2704925Z",
"color": {
"$lastUpdated": "2021-02-13T17:56:23.2704925Z"
}
},
"$version": 7
}
}
}
比較として、Device Twinの全体の報告されたセクションは、ここにあります:"reported": {
"propertyUsedOnlyOnce": "This is set only once",
"color": "Blue",
"$metadata": {
"$lastUpdated": "2021-02-13T17:56:23.2704925Z",
"propertyUsedOnlyOnce": {
"$lastUpdated": "2021-02-13T16:07:58.6609507Z"
},
"color": {
"$lastUpdated": "2021-02-13T17:56:23.2704925Z"
}
},
"$version": 7
}
おもしろいことはpropertyUsedOnlyOnce
ペイロードはデバイスによって送られたパッチだけを含んでいます.要約すると、イベントペイロードでは次のようになります.
version
デバイスツインの全体$metadata
変化の性質の$version
プロパティセクションの$metadata
) 望ましい特性の試験
私のWindows端末に戻ると、左区画に次のコマンドを入力して、新しいセクションを指定します.
az iot hub device-twin update --hub-name $hub_name -d $device_id --set properties.desired.desiredColor='Orange'
右側のウィンドウでは、次のペイロードを使用してイベントを受け取ります.{
"version": 11,
"tags": {
"tagProperty": "tagValue"
},
"properties": {
"desired": {
"desiredProperty": "desiredValue",
"desiredColor": "Orange",
"$metadata": {
"$lastUpdated": "2021-02-14T18:05:38.5825801Z",
"$lastUpdatedVersion": 3,
"desiredProperty": {
"$lastUpdated": "2021-02-14T18:05:38.5825801Z",
"$lastUpdatedVersion": 3
},
"desiredColor": {
"$lastUpdated": "2021-02-14T18:05:38.5825801Z",
"$lastUpdatedVersion": 3
}
},
"$version": 3
}
}
}
このペイロードにはもっと内容があります.version
デバイスツインの全体$metadata
と$version
IOT - HUB ( DeviceId , ConnectionState , ...)によって管理されるツインの報告されたセクションと内容だけがない場合、ペイロードにはクラウド側から変更可能なすべてが含まれます.タグのテスト
同じテストを行いますが、タグのセクションに新しいプロパティを追加することで、次のコマンドを実行します.
az iot hub device-twin update --hub-name $hub_name -d $device_id --set tags.newTagProperty='newTagValue'
次のペイロードを使用してイベントを生成します.{
"version": 12,
"tags": {
"tagProperty": "tagValue",
"newTagProperty": "newTagValue"
},
"properties": {
"desired": {
"desiredProperty": "desiredValue",
"desiredColor": "Orange",
"$metadata": {
"$lastUpdated": "2021-02-14T19:53:14.4410421Z",
"$lastUpdatedVersion": 4,
"desiredProperty": {
"$lastUpdated": "2021-02-14T19:53:14.4410421Z",
"$lastUpdatedVersion": 4
},
"desiredColor": {
"$lastUpdated": "2021-02-14T19:53:14.4410421Z",
"$lastUpdatedVersion": 4
}
},
"$version": 4
}
}
}
基本的には、希望するプロパティを更新するのと同じイベントがあります.$metadata
.ルート上の条件の追加
さて、私たちは、イベントが双子の各セクションに対して引き起こされ、ペイロードにあることを知っているので、3番目の質問に移動することができます.
経路を更新しましょう.
az iot hub route update --hub-name $hub_name -n route-device-twin-changes --condition '$twin.properties.reported.color = "Red"
'
この状態では、現在のデバイスからのレポートの色に設定された色Red
エンドポイントに送信されます.DotNetツールを使用してデバイスをシミュレートする
Blue
, 入力は、報告された色がRed
:$ dotnet run
DeviceClient created ! Getting current twin...
Changing 'color' reported property from 'Blue' to 'Red'...
Done ! Exiting now...
監視ペインでは、イベントが流れます.{
"version": 13,
"properties": {
"reported": {
"color": "Red",
"$metadata": {
"$lastUpdated": "2021-02-14T22:50:11.6725239Z",
"color": {
"$lastUpdated": "2021-02-14T22:50:11.6725239Z"
}
},
"$version": 8
}
}
}
DotNetツールを再度実行すると、報告された色がBlue
:$ dotnet run
DeviceClient created ! Getting current twin...
Changing 'color' reported property from 'Red' to 'Blue'...
Done ! Exiting now...
監視ペインではイベントは流れません.それで、答えは明確です:最初に、変化はデバイス双子でなされます、そして、ルーティング・条件は評価されます.そして、装置双子の更新されたバージョンで評価されます.
概要
このポストを終えるために、イントロからの2つの最初の質問に答えるこのテーブルで学んだことをまとめましょう.
更新ツインセクション
イベントトリガ?
イベントのペイロード
報告財産
はい
報告されたセクションの一部(デバイスによって送られるパッチ)を更新しました
望ましい特性
はい
すべてのタグと望ましいプロパティ
タグ
はい
望ましいプロパティの更新と同じ内容
最後に、ルート上の条件がある場合は、デバイスのツイン変更の適用後に評価されます.
私はこのポストが有用だったことを願って、私は質問をしている上に手を差し伸べるか、以下のコメントを残して躊躇しないでください.
Reference
この問題について(アライボデバイスツインチェンジディープダイブ), 我々は、より多くの情報をここで見つけました https://dev.to/xaviermignot/azure-iot-hub-routing-device-twin-changes-deep-dive-52p8テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol