You dont have javascript enabled! Please enable it!
RaspberryPi

コンテキスト・プロバイダ型の FIWARE 対応 IoT デバイス (Raspberry Pi)

本記事では、Rapsberry Pi を使って、温湿度、気圧の情報をコンテキスト・ブローカーやコンテキスト・コンシューマにコンテキスト情報を提供する、コンテキスト・プロバイダを紹介します。

Context Provider (CPr)

コンテキスト・プロバイダ (CPr) は、コンテキスト・プロデューサ (CP) の特別な種類です。同期モードでオンデマンドでのコンテキスト情報を提供します。つまり、コンテキスト・ブローカーだけでなく、コンテキスト・コンシューマも、コンテキスト情報を取得するためにコンテキスト・プロバイダを呼び出すことができます。コンテキスト・プロバイダは特定の呼び出しに対してコンテキスト・データのみを提供します。すべてのコンテキスト・プロバイダは、適切なアナウンスをコンテキスト・ブローカーに送信することによりその可用性と機能をレジストレーション (登録) し、コンテキスト・ブローカーおよびコンテキスト・コンシューマにコンテキスト情報を提供するためにインタフェースを公開します。

前提条件

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

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

FIWARE Orion, WireCloud が稼働する環境の構築方法は、「WireCloud のセットアップ」の記事を参照ください。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/02.context_provider” ディレクトリに移動してください。

git clone https://github.com/lets-fiware/lets-fiware.tutorials.git
cd ./lets-fiware.tutorials/raspberrypi/02.context_provider

システム構成

システム構成は、Raspberry Pi で動作するコンテキスト・プロデューサと、Linux サーバで動作する Orion Context  Broker です。

サーバ環境の作成

docker-compose ファイル

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

docker-compose up -d

Raspberry Pi での環境変数の設定

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

export ORION_URL=http://192.168.1.1:1026
export CONTEXT_PROVIDER_URL=http://192.168.1.2:8080

正常性の確認

Raspberry Pi から、Orion のバージョンを取得するクエリを実行して、正しくデプロイされたことを確認してください。

GET /version

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

./00.version.sh

コンテキスト・プロバイダ環境の作成

プログラム概要

本記事で作成するコンテキスト・プロバイダは、コンテキスト・ブローカーからコンテキスト情報取得のリクエストを受け付けるために、次のエンドポイントを提供します。

POST /v1/weatherObserved/op/query

エンドポイントは、Python の Webサーバのライブラリを利用して実現します。具体的には、エンドポイントにアクセスがあると、温湿度、気圧の情報をセンサーから取得し、これらをコンテキスト情報としてレスポンスします。

プログラム全体

プログラム全体は以下のような内容です。この Pythonのプログラムがコンテキスト・プロバイダとして動作します。

コンテキスト・プロバイダの実行

コンテキスト・プロバイダは、環境センサが接続された Raspberry Pi で実行します。

Docker コンテナ内での実行

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

コンテキスト・プロバイダ用のコンテナ・イメージを Docker Hubから取得します。次のコマンドで、fisuda/context_provider01 という名前のコンテナ・イメージを取得できます。

./pull.sh

Docker コンテナのビルド

プログラムをDocker コンテナ内で実行するため、環境センサ用コンテナをビルドします。ビルドには以下のコマンドを実行してい下さい。fisuda/context_provider01 という名前のコンテナ・イメージが作成されます。

./build.sh

Docker コンテナの起動

Dokcer コンテナを起動することで、プログラムを実行できます。起動時に、Orion の IP アドレスとポートを指定します。使用している環境に合わせて、これらの値を変更してください。

./run.sh

コンソールの出力

プログラムが正常に稼働しているかを確認するため、コンソールの出力を確認します。

./logs.sh

コマンドを実行して以下のようなメッセージが出力されば正常に稼働していることを確認できます。

コンテキスト・プロバイダの登録

コンテキスト・ブローカーの FIWARE Orion から、このコンテキスト・プロバイダにアクセスできるように、コンテキスト・プロバイダのレジストレーションが必要です。

POST /v2/registrations

次のコマンドでレジストレーションできます。

./01.create-registration.sh

01.create-registration.sh

実行結果

“201 Created” のレスポンスがあれば正常に登録できています。

実行結果に含まれている Location 中の文字列 ”5ed06731b10dc3f8b36b3c94” がレジストレーション ID です。レジストレーションの情報取得や削除するときに使用します。以下の環境変数に登録しておきます。

export REG_ID=5ed06731b10dc3f8b36b3c94

レジストレーションの一覧情報を取得

レジストレーションの一覧情報は以下のクエリで取得できます。

GET /v2/registrations

02.list-registrations.sh

実行結果

次のような内容がレスポンスとして返却されます。

コンテキスト情報を取得

./run.sh でコンテキスト・プロバイダのコンテナを起動したあと、Orion にアクセスして、コンテキスト情報を取得します。次のクエリで取得できます。

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

03.get_entity.sh

結果

Orion にアクセスすると、Orion がコンテキスト・プロデューサから取得した、次のような情報はレスポンスとして返却されます。

コンソールの出力

./log.sh でコンソールの出力を確認すると、エンティティ情報取得のリクエスト毎に、Orion から コンテキスト・プロバイダへのリクエストと、コンテキスト・プロバイダから Orion へのレスポンスが表示されます。

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

レジストレーションの削除

次のクエリでレジストレーションを削除できます。

DELETE /v2/registrations/{id}

./04.delete-registrations.sh

実行結果

“204 No Content” のレスポンス・コードが返ってくれば、レジストレーションは正常に削除できています。

コンテキスト・プロバイダの停止

次のコマンドを実行することで、コンテキスト・プロバイダのコンテナを停止できます。

./stop.sh

Let’s FIWARE Tutorialsセットアップ WireCloud のセットアップ オープンデータの可視化 避難場所のオープンデータを可視化 ...
error: Alert: Content is protected !!