You dont have javascript enabled! Please enable it!
Tech

コンテキスト・コンシューマ型の FIWARE 対応 IoT デバイス

Context Consumer (CC) とは

Context Consumer(CC)、つまり、コンテキストの消費者は、コンテキスト情報を利用するエンティティで、コンテキスト・ベースのアプリケーションです。CC は、Context Broker (CB) にリクエストを送信し、コンテキスト情報を取得したり、特定のインタフェースを介して Context Producer (CP) を直接呼び出すことができます。CC が情報を取得するもう1つの方法は、特定の条件に一致するコンテキスト情報の更新をサブスクライブすることです。例えば、特定のエンティティのセットに関連する情報をサブスクリプションするなどです。CC は、目的のためにサブスクリプションにコールバック操作を登録するので、CB は、このコールバック機能を呼び出すことによって、コンテキストに関連する更新について、CB に CC に通知します。

本記事では、温度の情報を LCD (液晶ディスプレイ) に表示する、コンテキスト・コンシューマ型の FIWARE 対応 IoT デバイス を作成します。温度は、Orion Context Broker に保持されている WeatherObserved 型エンティティの temperature 属性から取得します。その方法は、定期的に取得するポーリングのような同期方式ではなく、温度のコンテキスト情報の更新をサブスクライブすることで、温度に変化があった場合に通知を受ける、非同期方式です。

WeatherObserved 型のエンティティの情報を提供する、デバイスには、以前の記事で作成したコンテキスト・プロデューサ型の FIWARE 対応 IoT デバイスを利用します。

温度情報のサブスクライブ

IoT デバイスが温度の変化の通知を受けるために、Orion にサブスクライブのリクエストを行います。

POST /v2/subscriptions

Orion へのサブスクライブのリクエスト

WeatherObserved 型のエンティティである、urn:ngsi-ld:WeatherObserved:sensor001 の temperature 属性値が変化したときに、Orion が http://192.168.1.2/ に通知を行います。

Orion からデバイスへの通知

サブスクライブしたエンティティの温度に変化があった場合、デバイスは、Orion から通知を受け取ります。

コンテキスト・コンシューマ型の IoT デバイスの作成

先ほど説明した、サブスクリプションとノーティフィケーション (通知)を受信の仕組みを IoT デバイスに実装することで、デバイスは、温度に変化があったときに、温度値を含む通知を受け取り、LCD に 温度値を表示できます。サブスクリプションは、createSubscription() 関数で、受信したノーティフィケーションの処理は、accumulator() 関数で行っています。

IoT デバイスを起動

IoT デバイスを起動して、プログラムの実行が開始すると、Orion にサブスクリプションをリクエストし、Orion からの通知を待ちます。Orion から通知がある度に、LCD に温度値が更新されます。

参考情報 : LCD について

LCD には、秋月電子通商の AE-AQM0802 という、I2C接続小型 LCD モジュール (8×2行) ピッチ変換キットを利用しました。液晶のコントローラ IC に ST7032 を利用していました。ST7032 を使用する LCD モジュールであれば、I2C のアドレスに注意すれば、プログラムはそのまま使えると思われます。

シリアル・コンソールの出力

シリアル・コンソールの出力は、次のようなものです。直後に、Orion へサブスクリプションを行った後、Orion からの通知がある度に、通知の内容を表示します。

サブスクリプション

サブスクリプションの一覧

Orion に対して、次のリクエストを実行すると、サブスクリプションの一覧が取得できます。サブスクリプションの実行状況も確認できます。

GET /v2/subscriptions

実行すると、次のようなレスポンスが返り、温度のサブスクリプションを確認できます。

サブスクリプションの削除

サブスクリプションの一覧で確認した、サブスクリプション ID を指定して、サブスクリプションを削除することができます。

DELETE /v2/subscriptions/{id}

上記の場合、サブスクリプション ID は、”5c15aeea998dcaffc9c14ddf” なので、これを指定すると削除できます。サブスクリプションを削除すると、Orion から デバイスへの通知が行われず、LCD の温度値の更新も行われなくなります。