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

de:code 2020 MVP パーソナルスポンサー

今年の Microsoft de:code 2020でも MVP パーソナルスポンサー(de:code 2020のセッション内容を理解し実践するのに役立つサンプルコードやツールの提供)に応募して採用された。今年で3回目、Microsoft de:code 2018 にこの制度が出来てから毎年である。今年のMicrosoft de:code 2020 は時節柄参加費無料で、誰でも参加できるオンライン・イベントとなった。

今年のサンプルコードは、EnOcean 新製品のマルチセンサー(STM550J)を使用した、Azure IoT PnP (Preview) のサンプルコード。EnOcean マルチセンサーやEnOcean受信機を持たない人でも実験出来る、シミュレーション用のコードも合わせて公開した。

EnOcean マルチセンサー

EnOcean マルチセンサーはその名の通り、温度、湿度、照度、加速度、開閉(マグネット・コンタクト)の5種類のセンサーを備えた、エネルギーハーベスティングのセンサーで、太陽電池とキャパシタによる省電力駆動が可能である。ボタン電池の追加により、4年以上といった長期間、暗所での連続駆動も可能。市販価格もこれまでの各単体センサーよりも低い設定となっている製品である。

余談だが、EnOcean Alliance日本支部が主催して(協力IoT ALGYAN)このマルチセンサーをテーマにした、IoTシステム開発コンテストも開催の予定で準備している。

参考:EnOcean IoT コンテストまとめ

IoT PnP(Preview) の実態

Azure IoT PnP (Preview) は、2019年5月のBUILD 2019で発表された新技術で、IoT Hub などのサービスへのIoTデバイスの登録時に各種属性を自動的に設定するものである。デバイスの属性は、DTDL(Device Twin Definition Language) で記述して、Device Twin機構で管理する。この様にAzure IoT PnP (Preview)は、単なるデバイス属性の自動管理だけにとどまらず、Device Twin への橋渡し的な役割も持つ。

このAzure IoT PnP (Preview)に興味を持ったのは、自社開発製品のEnOceanゲートウェイ には、すでに2年前からプラグアンドプレイ的な仕組みを実装済だからである。

EnOcean無線通信は10年以上前から、IoT的アプリケーションでの利用を前提にして設計・運用され、EEP(EnOcean Equipment Profile)GP(Generic Profile) の2種類のプロファイルにより、各デバイス(センサーとアクチュエータ)の様々な属性をTeach Inテレグラムと呼ぶ手法で伝送し、管理する手段を備えている。これにより各デバイスが何のセンサーなのか(あるいはどの様なデバイスの組み合わせなのか)と、最大値・最小値、解像度、ビット表現手段、表示単位といった特性を瞬時で伝えることが出来、実用化済だった。

しかし世の中でIoTブームが起きても、ほかにはアプリケーションレベルでこれらのデバイス属性を標準的に扱い、管理する仕組みやサービスはこれまで存在しなかった。つまり10という値を送った際に、それが10℃なのか10%なのか、現在値か設定値なのか、相対値か絶対値なのかという意味を示すことや、場合によっては読みだしたビット列の何バイト目に目的の'10'という値のデータが入っているか、他の情報無しには判断できないシステムがほとんどだった。

EnOceanは厳密にアプリケーションレベルのデータの扱いが規定されているため、世界中に約5000以上、日本国内向けに限れば80種以上ある準拠したデバイスであれば、前述の様にボタン一つで瞬時にそのデバイスの仕様や特性、データの意味を確認できる。

既にブログで紹介済みの 「iothub-explorer に代わる素晴らしいもの」 では、EnOceanデバイスのLEARNボタンを押したときに送信されるTeach Inテレグラムを受信した際、ゲートウェイがAzure IoT Hubに対してRESTコマンドを発行することにより、必要なデバイスノードをゲートウェイが自動登録する様にした。しかし従来のIoT Hubには各デバイスの属性を保管する仕組みが無いために、せっかくゲートウェイが取得した属性情報までは、登録・管理することが出来なかった。しかしながら、IoTデバイスの追加・変更があった際に、ボタン一つで自動的にサービスが管理するデバイスノード(この場合はIoT HubのDevice ID)をメンテナンス出来る意義は大きいと考えて、実装していた。

今回の IoT PnP サンプルコード実装では、現状のIoT PnPの構成に合わせて、EnOceanマルチセンサーのプロファイルがデフォルトの EEP:D2-14-41 設定にだけ対応した。ゲートウェイ側はすでに、マルチセンサーSTM550Jに追加された新EEPやSEC_CDM(Secure chained Messages)によるセキュリティ機能に対応済であるので、IoT PnPの実装では、DTDLでデバイスのセンサー情報をEEP:D2-14-41の内容で記述しておけば、Azure IoT Central でデバイス登録要求があった際に自動登録が実行される。他のEEP設定に関しても、今回のサンプルコードとDTDLを少し改変するだけで容易に対応可能だが、EnOceanゲートウェイが扱う可能性があるほぼ無限にあるデバイスの組み合わせ全てに対応することは、実質的に不可能である。動的にデバイスやセンサーが増減するデバイス全体をゲートウェイ経由で扱うためには、IoT PnP Bridge の技術を使う必要があるが、現時点ではPreview版であり、上手く動作していない。

そこで今回はサンプルコードという位置付けでもあるので、登録するデバイスはEnOceanマルチセンサー単体だけとして、コードを作成した。

実際のところ、EnOceanのセンサーをIoT PnPで使用する試みは、2019年10月頃から ignite the tour の資料を作成し始めたときから挑戦しているが、Preview版でもあったのと、公開コードと説明が時おり変わっていたため、実質的に安定動作が確認できたのは、2020年2月以降であった。

まとめ

現状のIoT PnP(Preview) の仕様により、取り扱うデバイスがEnOceanマルチセンサーだけではあるが、5種類のセンサーを持つデバイスのため、IoT Centraとの組み合わせで容易に、まさしくプラグアンドプレイで、利用できることをご確認頂けるはずだ。またデバイスが無くても試せるシミュレーターも用意しているので、是非この機会に一歩進んだIoTの世界を楽しんで欲しい。