iothub-explorer に代わる素晴らしいもの
先月のことだが、下記の Pull Request が却下された。1か月待たされてからの返事は、Closedだった。
https://github.com/Azure/azure-iot-sdk-c/pull/690
PRの内容は、azure-iot-sdk-c の iothub_service_client の samples 以下にある iothub_registrymanager_sample を次のことを実現する様に修正するものだった。
- iothub_registrymanager_sample のソースコードに、connection string 等のパラメーターを設定するだけで、単体のプログラムとしてビルドして実行可能にする。試せばわかるが、この Sample は「コーディング事例」だけを示すもので、パラメーターを設定だけではプログラムとして意味がある動作をしない。
- Deprecated 扱いになった、IoTHubRegistryManager_GetDeviceList() の正しい使用法を示す。
- このサンプルプログラムが、Deprecated になった、iothub-explorer の代替として利用できる様にする。
- それの README を付加する。
そのそもこのPRを出そうと思いついたのは、全て iothub-explorer が原因である。
iothub-explorer
iothub-explorer は、Windows 以外の環境でIoT Hubへの接続をしようとした時にはほぼ必須のツールであった。Shell のコマンドラインから操作する、npm でインストールする node.js のツールであるが、Windows のDevice Explorer とほぼ同様なことができるので、重宝して使っていた人も多いはずだ。これを使用するとShell や他のアプリケーションから呼び出して、IoT Hubのデバイスに対して次のことができる。
- デバイスの作成(Create)
- デバイスの削除(Delete)
- デバイス一覧のリスト(List)
EdgeやDevice側を中心とした、IoTシステムの運用や構成を考える場合、デバイス自身がこれらの機能を実行できることは非常に有用で、実際に「iothub-explorer」はやや動作が遅い面があるものの、開発中のゲートウェイに組み込んで使用していた。
EnOcean 規格のデバイスは世界で数千種、国内用に数十種類のセンサーが販売されているが、通常 LEARN ボタンやスイッチボタンを押すことで「Teach-In」テレグラムを送出して、ゲートウェイやアクチュエーターに対するデバイス登録が完了する仕組みを持っている。クラウドに登録する時も同様に、デバイス側が自己のDevice IDを管理できる仕組みが必要なのである。
そんな開発中での iothub-explorer の Deprecated であった。現在は各サイトから跡形もなく消えているが、代用としては「Azure IoT Extension CLI」または「Rest API」を使用せよと、記載されていた。それで行きついたのが、これまた Deprecated の IoTHubRegistryManager_GetDeviceList() であった。「Azure IoT Extension CLI」はなぜ代用として使えないかは自明なので省略。そこで、デバイス一覧のリストを取得する IoTHubRegistryManager_GetDeviceList() を使用してみたが、正しく動かなかったので、Issues に上げて見たのが以下である。
https://github.com/Azure/azure-iot-sdk-c/issues/640
すると「1000デバイスの制限があるが、Rest API として動作するよ」という答えが返って来た。半信半疑で、ソースコードと格闘したところ、呼び出し側がAPIで使う構造体に細工をすることで、高速に動作することがわかった。どうやって試したかというと、azure-iot-sdk-c のサンプルソースコードは多くあるが、デバイス一覧のリストを取得する事例としてのサンプルソースがかつて存在したのは、この iothub_registrymanager_sample.c だけなので、それを使ったのである。その部分は今では削除されている。しかし古いコードを呼び起こして細工や実験ができるのだから、GitHubはありがたい。
iothub-explorer に代わる素晴らしいものができたと満足していたのだが、残念だ。PRに使用したソースとせっかく作った README は以下にあるので、興味がある方はお試しを。
https://github.com/ahidaka/azure-iot-sdk-c/tree/registrymanager_sample/iothub_service_client/samples/iothub_registrymanager_sample
現在この「iothub-explorer に代わる素晴らしいもの」は、iothub_registrymanager_sample の名前のままなので、機会をみて azure-iot-sdk-c をリンクする独立したツールとして作り直したいと考えている。
- Atomu Hidakaさんのブログ
- ログインしてコメントを投稿