Azure IoT SDK for .NET に IoT Plug and Play APIが追加された(Preview)

Azure IoT SDK for .NET に、IoT Plug and Play用のAPIが追加されたようなので確認しました。

アナウンス

techcommunity.microsoft.com

「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/フレームワークがあるとみんなしあわせになれるんじゃないかと思う。

こう実装すべき!なサンプルコードは、ここにあるようなので、後日じっくり見ることにします。

azure-iot-samples-csharp/iot-hub/Samples/device/DeviceReconnectionSample at master · Azure-Samples/azure-iot-samples-csharp · GitHub