You dont have javascript enabled! Please enable it!
RaspberryPi

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

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

FIWARE IoT Agent for JSON (http) 対応デバイス

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

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

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

前提条件

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

  • FIWARE Orion, IoT Agent が稼働する Linux サーバ環境
  • Raspberry Pi (i2c, spi を有効化)
  • 環境センサ 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/07.json-http-lcd” ディレクトリに移動してください。

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

システム構成

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

サーバ環境の作成

docker-compose ファイル

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

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 に関連する一連のコンテナが実行されます。

docker-compose up -d

Raspberry Pi での環境変数の設定

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

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

正常性の確認

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

GET /iot/about

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

./00.version.sh

結果

JSON 対応デバイスの作成

プログラム全体

Raspberry Pi を利用して、JSON-http 対応デバイスの作成します。プログラムは次のとおりです。IoT Agent からのリクエストをポート 8080 で待ち受ける Web サーバで、IoT Agent から /iot/led001 へ POST リクエストを受け付けます。POST の Payload は、JSON 形式で、LED の ON/OFF の状態を表すパラメータが含まれてます。これにしたがって、LED の状態を変更します。

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

Docker コンテナ内での実行

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

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

./pull.sh

Docker コンテナのビルド

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

./build.sh

Docker コンテナの起動

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

./run.sh

コンソールの出力

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

./logs.sh

コンテナの停止

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

./stop.sh

環境変数の設定

IoT Agent が Raspberry Pi で稼働する JSON-http 対応デバイスのコンテナにアクセスできるよう、Raspberry Pi で環境変数を設定します。Raspberry Pi の IP アドレスが、192.168.1.2 の場合、次のように設定します。IP アドレスは環境に合わせて変更してください。

export DEVICE_URL=http://192.168.1.2:8080

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

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

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

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

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

./01.create_service_group.sh

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

./02.list_service_group.sh

結果

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

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

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

./11.create_device.sh

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

./12.list_device.sh

結果

LCD の制御

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

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

イメージの表示

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 に対して次のようなクエリを実行して、エンティティ lcd001 のコンテキスト情報を確認します。

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

クエリの実行

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

./21.get_entity.sh

実行結果

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

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

JSON-http 対応デバイス・コンテナの停止

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

./stop.sh

デバイスの削除

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

./13.delete_device.sh

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

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

./03.delete_service_group.sh

エンティティの削除

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

./22.delete_entity.sh

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