IEEE1888 SDKをMacで使う:構成確認篇

前回VMの環境設定でしたが、今回は、プログラミングの前にSDKの構成について確認します。

サービス構成

SDKの中核は FIAPStorage コンポーネントで、これに幾つかのツール群を加えてSDKとしています。
個々のツールの説明に関してはSDKのドキュメントに含まれますが、StorageについてはSDKとは別に配布されている FIAPStorage単体パッケージ内のドキュメントが構成の参考になります。具体的には FIAPStorage単体のダウンロード から最新のアーカイブ(私の時は FIAPStorage-20120428.zip でした)をダウンロードして展開、「FIAPStorageインストールマニュアル.pdf」がそれにあたります。

これを見ながら確認すると、FIAPStorage の本体は tomcat 上で動作する AXIS2 のサービスであることがわかります。そして、http のフロントエンドとして apache を置いています。ポート番号80番のトップページである「Sensors in this FIAPStorage」や FIAPSimpleSCADA は apache から起動される php のアプリケーションです。
個々のサービスと対応するURLは以下の通りです。(IPアドレスは各自読み替えてください)

Apache2のトップ:
  http://192.168.11.12/
  ドキュメントルート /var/www/ にある index.php が実行されます。
   (phpサンプルである「Sensors in this FIAPStorage」がコレ)

Tomcat6のトップ:
  http://192.168.11.12:8080/

AXIS2のトップ:
  http://192.168.11.12:8080/axis2/

apache経由で axis2 のサービスを実行するために、ajpapachetomcat を繋いでいます。

$ cat /etc/apache2/httpd.conf
<Location /axis2>
ProxyPass ajp://localhost:8009/axis2
</Location>

これで、例えば http://192.168.11.12/axis2/services/FIAPStorage?wsdl でサービスの WSDL が取得できるようになるわけです。

データベース構成

FIAPStorage ではポイントデータを登録・参照できます。そして、SDKの実装では、このデータ管理のために PostgreSQL を使っています。
そこで、実際にどのようなテーブル構成になっているか確認してみます。
(SDKに付属のドキュメントでは、このあたりの説明は見あたりませんでした。まあ、「中身」については今後変わる事もあるでしょうし、それに依存した作りのアプリを作られても困るので、わざと説明していないのだと思われます。)

テーブル定義

前述のFIAPStorage単体パッケージには gut_storage.sql というファイルが含まれており、これがテーブル定義です。もちろん、psql 等を使用して確認する事も出来ます。

$ sudo su - postgres
$ psql gut_storage

gut_storage=# \d
                リレーションの一覧
 スキーマ |       名前       |    型    |  所有者
----------+------------------+----------+----------
 public   | pointattribute   | テーブル | postgres
 public   | pointsettree     | テーブル | postgres
 public   | pointvalue       | テーブル | postgres
 public   | pointvaluelatest | テーブル | postgres

gut_storage=# \d pointsettree
     テーブル "public.pointsettree"
 カラム  |        型         |  修飾語
---------+-------------------+----------
 id      | character varying | not null
 parent  | character varying |
 ispoint | boolean           | not null

.......

とりあえず、各テーブルの中身を確認すると、SDKの場合には pointsettree, pointvalue の2つのテーブルしか利用していないように見えます。具体的には、PointSet および Point の登録と構成を管理するのが pointsettree テーブル、Pointの値を管理するのが pointvalue テーブルとなっているようです。
更にデータを見ていくと、それぞれのテーブル・カラムは以下のように意味づけされているようです。

pointsettree(ポイントセットとそれに紐づけられたポイントを管理するテーブル)

カラム名 内容
id ポイント(セット)IDが入る。 (ex. http://www.gutp.jp/dummy/)
parent 最上位のポイント(セット)の場合は null。そうでない場合は上位のポイントセットIDが入る。
ispoint ポイントの場合は true。ポイントセットの場合は false。

pointvalue(ポイントの値を入れるテーブル)

カラム名 内容
id ポイント(セット)IDが入る。 (ex. http://www.gutp.jp/dummy/)
time 設定時間。
attrstring 現在はすべて null。本来は値に関する属性情報を設定する?
value 実際の値が入る。

このような構成になっているので、例えばポイントIDの一覧取得をしたい場合は以下のようなSQLを使用すれば良いわけです。

gut_storage=# SELECT id FROM pointsettree WHERE ispoint=true;
....

SQLによる登録確認

これまでの解析が正しいか、実際にデータベースに値を登録して確認します。

まず、 pointsettree に登録することでポイントを追加します。

insert into pointsettree (id, parent, ispoint) \
    values ('http://test.kahnn/ps/', null, false);
insert into pointsettree (id, parent, ispoint) \
    values ('http://test.kahnn/ps/point_int_1', 'http://test.kahnn/ps/', true);

これで、トップページの「Sensors in this FIAPStorage」にポイント「http://test.kahnn/ps/point_int_1」が表示されるようになりました。ただし、値の方はありません。

次はポイントの値を登録してみます。

insert into pointvalue (id, time, attrstring, value) \
    values ('http://test.kahnn/ps/point_int_1', \
            to_timestamp('2012.09.04 00:11:22', 'YYYY.MM.DD HH24:MI:SS'), \
            null, 100);
insert into pointvalue (id, time, attrstring, value) \
    values ('http://test.kahnn/ps/point_int_1', \
            to_timestamp('2012.09.04 00:22:33', 'YYYY.MM.DD HH24:MI:SS'), \
            null, 200);

reload すると、最新の値が表示されました。

ポイントIDをクリックすると、chartが表示されます。確かに登録した2つの値が使用されているようです。

次回

これで、SDK(FIAPStorage)のおおよその構成がわかったので、次回は、今回追加したポイントに対してプログラムで値をWRITEする事をやってみます。まあ、ここまでくれば、後はサンプルの手順どおりにやれば良いはずなので大したことはやらないです。(予定)