Azure IoT SDK for .NET に、IoT Plug and Play用のAPIが追加されたようなので確認しました。
アナウンス
「Azure IoT SDK for .NETに、IoT Plug and Play向けのAPIを追加したのでテストしてフィードバックちょうだい」のようです。
ライブラリはNuGetで配布されています。 NuGet Gallery | Microsoft.Azure.Devices.Client 1.38.0-preview-001
ドキュメントはこちら。IoT Plug And Play (PnP) device/module APIs
IoT Plug and Playを既存APIのコードと新APIのコードを比較して解説していて、すばらしいです。
新APIはすばらしいか?
個々に見ると、、、
Client initializationは、ほとんど変化なし。
Telemetryも、ほとんど変化なし。メッセージプロパティとペイロードを一発で書けるようになっています。
Commandは、少し楽になった感じ。JSONのデシリアライズがSDKに内包されています。
Retrive Property。ここにはプロパティの取り方が書いてあります。ここは大きく違う。既存APIは(デバイスツインの考え方の)DesiredとReportedで分かれていてIoT Plug and Playとミスマッチなので作りにくいのですが、新APIはReadOnlyとWritableというIoT Plug and Playに合わせた形になっています。TryGetValue()一発になったので、まぁまぁうれしいです。
Update Property。ここにはプロパティの書き方が書いてあります。ほとんど変化なし。
Respond to property update requests。これが一番厄介な奴です。新APIは、、、楽だなーという感じはしないです。
もやもや
文句言うだけは簡単。
代案をフィードバックしたいと思っていますが、、、どうも考えがまとまらない。
- Writable Propertyの受け方。Connect時とDesired通知時の2箇所で受けないといけないのがイケていない。Property名でフックして、コールバックしてほしいよね。
- Writable Propertyの初期値を書くべきか。これはSDKというより、フレームワークに近いかも。
- 再接続時の振る舞い。これもフレームワークですね。
IoT Plug and PlayのProperty周りはこう実装すべき!を十分に考えて実装して、それを楽にするAPI/フレームワークがあるとみんなしあわせになれるんじゃないかと思う。
こう実装すべき!なサンプルコードは、ここにあるようなので、後日じっくり見ることにします。