You dont have javascript enabled! Please enable it!
RaspberryPi

FIWARE IoT Agent for Ultralight 2.0 (MQTT) 対応デバイスの作成 – Raspberry Pi

本記事では、IoT Agent for Ultralight 2.0 を使用して、温度、湿度、気圧の情報を定期的に、FIWARE Orion にプッシュし、コンテキスト情報を更新する、IoT デバイスを作成します。

FIWARE IoT Agent for Ultralight 2.0 (MQTT) 対応デバイス

FIWARE には、IoT Agent と呼ばれる、既存の IoT プロトコルと NGSI の橋渡しをする Generic Enabler があります。これを利用すると、既存 IoT プロトコルを使用して、エンティティ情報を更新することができます。各種 IoT プロトコルに対応した、複数の IoT Agent があり、IDAS と呼ばれています。

IoT Agent for Ultralight 2.0 を使用して、温度、湿度、気圧の情報を定期的に、FIWARE Orion にプッシュし、コンテキスト情報を更新する、IoT デバイスを作成します。Ultralight 2.0 は、帯域幅やデバイスのメモリが制限された、制約のあるデバイスとの通信を目的とした、軽量のテキスト・ベースのプロトコルです。トランスポート・プロトコルとして、MQTT を使用します。

サーバ側には、Orion と IoT Agent for Ultralight 2.0, Mosquitto (MQTT Broker), WireCloud をデプロイします。 Ultralight 2.0 に対応した IoT デバイスには、Raspberry Pi を使用します。

前提条件

次の環境が必要となります。

  • FIWARE Orion, IoT Agent, Mosquitto, WireCloud が稼働する Linux サーバ環境
  • Raspberry Pi (i2c を有効化)
  • 環境センサ Enviro for Raspberry Pi (Pimoroni)
  • git, curl, jq コマンド

Raspberry Pi の種類は、Raspberry Pi Zero WH, 3, 4 等です。Raspberry Pi 4 を使用すると、FIWARE Orion と 環境情報を収集するプログラムを1台で稼働できます。環境センサの Enviro は、発売元の Pimoroni から購入するか、国内では秋月電子通商、スイッチサイエンス等から購入できるようです。

ソースコード

使用するソースコードは、Github の https://github.com/lets-fiware/lets-fiware.tutorials から入手できます。git コマンドで、リポジトリをクローンして、”raspberrypi/05.ul20-mqtt” ディレクトリに移動してください。

git clone https://github.com/lets-fiware/lets-fiware.tutorials.git
cd ./lets-fiware.tutorials/raspberrypi/05.ul20-mqtt

システム構成

Linux サーバには、Orion と IoT Agent for Ultralight 2.0, Mosquitto (MQTT Broker), WireCloud をデプロイします。 Raspberry Pi は、MQTT ベースの Ultralight 2.0 対応デバイス (MQTT Client) として動作します。

サーバ環境の作成

docker-compose ファイル

Orion, IoT Agent for Ultralight 2.0, Mosquitto, WireCloud は、Docker コンテナを利用して、Linux サーバ上にデプロイします。クローンしたリポジトリには、x86_64 (amd64) 用 と Raspberry Pi (aarch64) 用の dokcer-compose.yml ファイルがあります。環境に応じて、以下の設定を行います。

x86_64 (amd64)

ln -s docker-compose-arm64.yml docker-compose.yml

Raspberry Pi (aarch64)

ln -s docker-compose-aarch64.yml docker-compose.yml

Docker コンテナの起動

次のコマンドで、Docker コンテナを起動します。これで、Orion, Iot Agent, Mosquiito, WireCloud に関連する一連のコンテナが実行されます。

docker-compose up -d

Raspberry Pi での環境変数の設定

Raspberry Pi で Orion と IoT agent, Mosquiito にアクセスするための環境変数を設定します。コンテナが稼働するサーバの IP アドレスを 192.168.1.1 として説明しています。環境に合わせて、値を変更してください。

export IOTA_IP=192.168.1.1
export MQTT_IP=192.168.1.1
export ORION_URL=http://192.168.1.1:1026

正常性の確認

Raspberry Pi から Orion や IoT Agent のバージョン取得を実行して、正しくデプロイされたことを確認してください。IoT Agent の場合、以下のクエリで正常性を確認できます。

GET /iot/about

次のコマンドを実行して、レスポンスが返ってくることを確認してください。

./00.version.sh

結果

Ultralight 2.0-MQTT 対応デバイスの作成

プログラム全体

Raspberry Pi を利用して、MQTT ベースの Ultralight 2.0 対応デバイスの作成します。プログラムは次のとおりです。一定間隔でセンサからデータを取得し、Ultralight 2.0 のペイロードを作成して、温湿度、気圧の情報を MQTT Broker の Mosquitto に送信します。

Ultralight 2.0-MQTT 対応デバイスの実行

Docker コンテナ内での実行

Docker コンテナ・イメージの取得

Ultralight 2.0-MQTT 対応デバイス用のコンテナ・イメージを Docker Hubから取得します。次のコマンドで、fisuda/ul20-mqtt-01 という名前のコンテナ・イメージを取得できます。

./pull.sh

Docker コンテナのビルド

プログラムをDocker コンテナ内で実行するため、Ultralight 2.0-MQTT 対応デバイス用コンテナをビルドします。ビルドには以下のコマンドを実行してい下さい。fisuda/ul20-mqtt-01 という名前のコンテナ・イメージが作成されます。

./build.sh

Docker コンテナの起動

Dokcer コンテナを起動することで、プログラムを実行できます。

./run.sh

コンソールの出力

次のコマンドを実行することで、コンソールの出力を確認できます。

./logs.sh

コンテナの停止

次のコマンドを実行することで、コンテナを停止できます。

./stop.sh

Ultralight 2.0-MQTT 対応デバイスの接続

Ultralight 2.0-MQTT 対応デバイスをIoT Agentに登録します。このため、最初にサービス・グループをプロビジョニングし、次にデバイスをプロビジョニングします。

サービス・グループのプロビジョニング

次のようなクエリを IoT Agent の ポート 4041 に POST することで、サービス・グループのプロビジョニングができます。

次のコマンドを実行して、サービス・グループをプロビジョニングしてください。正常に実行できると、201 Created のステータス・コードが返されます。

./01.create_service_group.sh

次のコマンドを実行すると、プロビジョニングされたサービス・グループの一覧を表示できます。

./02.list_service_group.sh

結果

Ultralight 2.0-MQTT 対応デバイスのプロビジョニング

次のようなクエリで、動的な属性値として、温度、湿度、気圧、取得時刻を、静的な属性値として位置情報をもつデバイスとして、Ultralight 2.0-MQTT 対応デバイスをプロビジョニングします。

次のコマンドを実行して、Ultralight 2.0-MQTT 対応デバイスをプロビジョニングしてください。正常に実行できると、201 Created のステータス・コードが返されます。

./11.create_device.sh

次のコマンドを実行すると、プロビジョニングされたデバイスの一覧を表示できます。

./12.list_device.sh

結果

センサデータの送信

サーバ環境の作成、デバイスのプロビジョニングが完了したら、Ultralight 2.0-MQTT 対応デバイスのコンテナを起動するため、./run.sh コマンドを実行します。./logs.sh コマンドでコンソール出力を確認します。次のような出力があれば、MQTT Broker の Mosquitto に正しくデータが送信できています。

エンティティの確認

Orion に対して次のようなクエリを実行して、エンティティ sensor005 のコンテキスト情報が正しく更新されているかを確認します。

GET /v2/entities/urn:ngsi-ld:WeatherObserved

クエリの実行

次のコマンドを実行して、コンテキスト情報を確認します。

./21.get_entity.sh

実行結果

WireCloud でのエンティティ情報の表示

次に、WireCloud でエンティティの情報を表示するダッシュボードを作成ます。WireCloud の環境設定の詳細は「WireCloud のセットアップ」を参照してください。

Widget のインストール

マーケットプレイスから以下の2つのウィジェットをインストールします。

  • FISUDA/ngsi-source/4.2.0b2
  • CoNWeT/spy-wiring/1.0.3

Widgetのワイヤーリング

新しいワークスペースを作成して、Spy wiring をワークスペースに追加します。次に、ワイヤーリング画面で、NGSI source と Spy wiring を以下のようにワイヤーリングします。

Widget の設定

NGSI Source の設定値を以下のように設定します。

  • NGSI server URL: http://192.168.1.1:1026/
  • NGSI proxy URL: http://192.168.1.1:3000
  • FIWARE-Service: openiot
  • FIWARE-ServicePath: /
  • Id pattern: urn:ngsi-ld:WeatherObserved:sensor005
  • Monitored NGSI: temperature,relativeHumidity,atmosphericPressure

NGSI server URL には Orion の IP アドレスとポートを NGSI proxy URL には ngsiproxy の IP アドレスとポートをそれぞれ、稼働している環境に合わせて指定してください。

Monitored NGSI には、Orion に対してサブスクリプションを設定する属性名を指定します。ここでは温度、湿度、気圧の属性名を指定しています。エンティティ中のこれらの属性値が変化したときに、クライアントのWeb ブラウザが Orion からノーティフィケーションを受け取ります (ノーティフィケーションは、ngsiproxy を経由します)。ノーティフィケーションを受けると、Spy wiring の表示値が更新されます。

ワークスペースの表示

Widget の設定を終えた後、WeatherObserved エンティティを更新するプログラムを稼働させて、ワークスペースを表示すると、Spy wiring の表示値が変化することを確認できるはずです。

環境設定のクリーンアップ

Ultralight 2.0-MQTT 対応デバイス用コンテナの停止

次のコマンドで、Ultralight 2.0-MQTT 対応デバイス用コンテナを停止できます。

./stop.sh

デバイスの削除

次のコマンドで、Iot Agent にプロビジョニングしたデバイスを削除できます。

./13.delete_device.sh

サービス・グループの削除

次のコマンドで、Iot Agent にプロビジョニングしたサービス・グループを削除できます。

./03.delete_service_group.sh

エンティティの削除

次のコマンドで、Orion にある、sensor005 のエンティティを削除できます。

./22.delete_entity.sh

WireCloud のセットアップ本記事では、FIWARE WireCloud と Orion を導入する方法を紹介します。 前提条件 Linux OS (x...
Let’s FIWARE Tutorialsセットアップ WireCloud のセットアップ オープンデータの可視化 避難場所のオープンデータを可視化 ...