You dont have javascript enabled! Please enable it!
RaspberryPi

FIWARE IoT Agent for JSON (MQTT) によるデバイス制御 -Raspberry Pi

本記事では、液晶ディスプレイ (LCD) が接続された、JSON-MQTT 対応デバイス を作成し、これを Orion から制御して、LCD にイメージの表示を行います。

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

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

FIWARE は、センサからコンテキスト情報を収集するだけでなく、デバイスを制御することもできます。Orion のコンテキスト情報の属性値を変更することで、デバイスの状態を変更できます。本記事では、LCD が接続された、JSON-MQTT 対応デバイス を作成し、これを Orion から制御して、LCD にイメージの表示を行います。

サーバ側には、Orion と IoT Agent for JSON をデプロイします。JSON-MQTT に対応した IoT デバイスには、Raspberry Pi  を使用します。

前提条件

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

  • FIWARE Orion, IoT Agent が稼働する Linux サーバ環境
  • Raspberry Pi
  • 環境センサ Enviro for Raspberry Pi (Pimoroni)

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/09.json-mqtt-lcd” ディレクトリに移動してください。

git clone https://github.com/lets-fiware/lets-fiware.tutorials.git
cd ./lets-fiware.tutorials/raspberrypi/09.json-mqtt-lcd

システム構成

Linux サーバには、Orion と IoT Agent for JSON, Mosquitto をデプロイします。Raspberry Pi は、JSON-MQTT に対応した FIWARE IoT Device として動作します。

サーバ環境の作成

docker-compose ファイル

Orion, IoT Agent for JSON, Mosquitto は、Docker コンテナを利用して、サーバ上にデプロイします。クローンしたリポジトリには、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, Mosquitto に関連する一連のコンテナが実行されます。

docker-compose up -d

Raspberry Pi での環境変数の設定

Orion と IoT agent, Mosquitte にアクセスするための環境変数を設定します。コンテナが稼働するサーバの 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

結果

JSON-MQTT 対応デバイスの作成

プログラム全体

Raspberry Pi を利用して、MQTT ベースの JSON-MQTT 対応デバイスの作成します。プログラムは次のとおりです。プログラムは MQTT Client として動作し、IoT Agent からのリクエストを MQTT Broker の Mosquitto を介して待ち受けます。MQTT のメッセージは、JSON 形式で、LED の ON/OFF の状態を表すパラメータが含まれてます。これにしたがって、LED の状態を変更します。

JSON-MQTT 対応デバイスの実行

Docker コンテナ内での実行

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

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

./pull.sh

Docker コンテナのビルド

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

./build.sh

Docker コンテナの起動

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

./run.sh

コンソールの出力

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

./logs.sh

コンテナの停止

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

./stop.sh

JSON-MQTT 対応デバイスの接続

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

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

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

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

./01.create_service_group.sh

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

./02.list_service_group.sh

結果

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

次のようなクエリで、JSON-MQTT 対応デバイスをプロビジョニングします。

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

./11.create_device.sh

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

./12.list_device.sh

結果

LCDの制御

JSON-MQTT 対応デバイスの起動

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

イメージの表示

Orion に次のような PATCH リクエストをすることで、LCD にイメージを表示します。

PATCH /v2/entities/urn:ngsi-ld:Lcd:lcd001/attrs

31.on.sh コマンドを実行することで、実際に LCD にイメージが表示されます。

./31.on.sh

イメージの非表示

イメージの表示と同様に、Orion に PATCH リクエストをすることで、LCD のイメージを非表示にできます。

32.off.sh コマンドを実行することで、 LCD のイメージが非表示になります。

./32.off.sh

ログの確認

./log.sh コマンドで、ログを確認すると、On, Off のリクエストを受けると、次のようなログが記録されます。

エンティティの確認

Orion に対して次のようなクエリを実行して、エンティティ lcd002 のコンテキスト情報を確認します。

GET /v2/entities/urn:ngsi-ld:Lcd:lcd002

クエリの実行

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

./21.get_entity.sh

実行結果

On, Off コマンドの実行した時刻や実行結果のステータスが確認できます。

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

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

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

./stop.sh

デバイスの削除

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

./13.delete_device.sh

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

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

./03.delete_service_group.sh

エンティティの削除

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

./22.delete_entity.sh

Let’s FIWARE Tutorialsセットアップ WireCloud のセットアップ オープンデータの可視化 避難場所のオープンデータを可視化 ...