最初に
こんにちは、tinaです。
このブログでは、私が今年力をいれているプロジェクトについて紹介します。
現在、2つのOSSの開発を行っています。
目的は、FIAP(別名 IEEE1888, UGCCNet) というIoTに利用されるアプリケーションプロトコルをGrafanaでデータソースとして利用できるようにすることです。
以下のようなシリーズとして連載していく予定です。
- 【はじめてのOSS開発】Grafana FIAPデータソースプラグイン ①FIAPって何? ← 今回はこちら
- 【はじめてのOSS開発】Grafana FIAPデータソースプラグイン ②Go版FIAPクライアントライブラリ
- 【はじめてのOSS開発】Grafana FIAPデータソースプラグイン ③Grafana FIAPデータソースプラグイン
今回はFIAPというプロトコルについての説明、OSSの作成に至った経緯とOSSの詳細について説明します。
FIAPについて
概要
FIAPは、あらゆるセンサーデータと制御データを、インターネットを用いて自由に交換するためのオープンなアプリケーションプロトコルです。
ベンダーニュートラルなBEMS(Building Energy Management System)や、スマートグリッドなどのエネルギー管理システム開発に利用されることを期待して開発されました。
内部では時刻ラベル付きデータの読み書きを行っており、エネルギー管理以外のシステムにも活用することができます。
アーキテクチャ
FIAPのシステムは、以下の2つで構成されます。
-
コンポーネント
①GW(ゲートウェイ)、②Storage(ストレージ)、③APP(アプリケーション) の3つに分類される
-
レジストリ
コンポーネント群の自動連携を司る
以下の図は、FIAPのシステムアーキテクチャ図です。
FIAP通信の形式は、大きく2つに分類され、詳細は以下の通りです。
-
コンポーネント間通信
-
WRITE手順
あるコンポーネントから別のコンポーネントに対して能動的にデータを送りつけ、書き込みを行う手順。
例) GWからStorageにセンサの測定データを送る、APPからGWに対し制御コマンドを送る
-
FETCH手順
あるコンポーネントが別のコンポーネントに存在するデータを取得する手順。
例) APPがGWやStorageから、最新値や過去データを取得する
-
TRAP手順
値やタイムスタンプの変化を事前にリクエストのあった他のコンポーネントに通知する
例) APPがGWに対しTRAPを設定しておくと、指定したセンサの値や時刻にGW上で変化した際に、その変化をAPPに通知する
-
-
コンポーネント対レジストリ間通信
-
REGISTRATION手順
コンポーネント・ポイントの登録
-
LOOKUP手順
コンポーネント・ポイントの検索
-
FIAPの開発を以前行っていた方にお話しを伺ったところ、レジストリの実装は難しく、コンポーネント対レジストリ通信の実装を行わないプロジェクトも多くあったようです。
今回のOSS開発では、可視化のためにGWまたはStorageからデータを取得することができれば良いため、コンポーネント間通信のFETCH手順のみを実装します。
使用用途、使用例
FIAPはもともと、東大グリーンICTプロジェクトというスマートグリッド組織によって作成されたプロトコルです。そのため、スマートグリッドシステムに多く使われています。
東大グリーンICTプロジェクトのページにも導入事例 があり、データの統合、可視化、制御などに利用されていることが確認できます。
さらに、植物工場や動物園の環境監視といったその他のIoT分野でも一部活用されています。
作成するGrafana FIAP Datasource Pluginについて
開発理由
今回2つのOSSを開発する理由は、既存のFIAPシステムのデータをGrafanaを使って可視化するためです。
私の出身校である木更津高専ではIoTの研究にFIAPシステム使用しており、完成物を既に千葉市動物公園でのゴリラの周辺の環境改善のための実験にテスト導入して頂いております。
千葉市動物公園様のXでもご紹介を頂きました。
開発する2つのOSSの説明
最終目的はGrafanaでFIAPのデータを収集し、可視化を実現することです。
そのために、2つのOSSを作成します。1つ目は、Grafana FIAP Datasource Pluginで、2つ目は、Go版のFIAPクライアントライブラリです。
Grafanaと開発する2つのOSSの関係は、以下の図の通りです。
- Grafanaはグラフを表示するアプリで、FIAPシステムのアーキテクチャでいうAPPの役割を果たす。
- Grafanaにデータを取り込むために、FIAP対応Grafanaプラグインがあり、プラグインは内部でFIAP対応Go版クライアントライブラリを呼び出す。
- これらが連携し、GrafanaでFIAPデータの可視化を実現する。
ここで、なぜ2つのOSSに分けて開発を行うか説明します。
GrafanaデータソースプラグインのバックエンドはGoで開発します。そこで直接プラグインにGo言語でFIAPのFETCH手順を実装することもできます。しかしこれまで、Go言語によるFIAPの実装は存在しませんでした。
そこで、Grafanaプラグイン内でFIAPのFETCH手順を直接実装するのではなく、GoのライブラリとしてFIAPのFETCH手順を行うクライアントを作成することで、Grafana以外でGoを使ってFIAPのFetch手順を利用したいユーザーが使いまわすことができるようにしました。
最後に
こちらまでお読みいただき、ありがとうございます。
次回は、Go版FIAPクライアントライブラリを紹介し、開発時の感想等も紹介していきたいと思います。よろしくお願いします。