Skip navigation.
ホーム
BLOG-ROMMER 日高のブログ

iothub-explorer に代わる素晴らしいもの

先月のことだが、下記の Pull Request が却下された。1か月待たされてからの返事は、Closedだった。

https://github.com/Azure/azure-iot-sdk-c/pull/690

PRの内容は、azure-iot-sdk-ciothub_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 をリンクする独立したツールとして作り直したいと考えている。