IoTデータ収集システム
目的
多回路電力量計から得たデータをインターネット側に設置したデータサーバーに届け、データを蓄積する
システムの構成要素
モノ側
インターネット側
構成図
多回路電力量計について
IoTでいうところのモノに相当するデバイスです。電力計測器として市販されている機器を使用します。計測したい機器の電源線に電流センサ取り付けて接続します。
が今回の多回路電力量計の選定条件です。
組込用コンピュータについて
機器の選定
大規模展開を前提にしない開発であれば、コンピュータの基板を専用筐体に入れた開発用モデルが販売されている機器がおすすめです。Linuxはほとんどの機器でサポートされています。
Internetに接続する通信回線
組込用コンピュータにEthernetインタフェース、WiFiモジュールやSIMモジュールが付いているか、後付け用モジュールが提供されているかによって使用出来る通信回線が変わってきます。
今回はOSにLinuxを採用しているのでアプリケーションは通信回線を意識せずOS任せにすることが出来ますが、OSのビルド時には通信インタフェースのドライバー組込みとネットワーク設定を行います。
アプリケーション
IoTでデータを収集する場合、モノ側の仕様にはあまり多くの注文は出来ないでしょう。モノ側の仕様への対応は組込用コンピュータ側のアプリケーションで行います。
今回は
という処理を行います。
データ受信サーバーへのデータの送信方式はアプリケーションの要件として自前で定めます。今回はインターネットと相性の良いHTTPプロトコルでHTMLコンテンツとしてデータを送信します。部分に計測レコードを記載し計測レコードの形式は自前で定めています。
設定可能な送信間隔は、5分・30分・1時間・1日を選択可能としました。
ソフトウェア構成
項目 | 内容 |
---|---|
OS | Debian、組込用Linux |
DBMS | ----- |
WEBServer | ----- |
Application | データ取得・送信機能 |
使用言語 | Perl |
データ受信サーバーについて
データ受信・登録機能を提供するアプリケーションサーバーです。
サーバー機の選定
インターネット経由でデータを直接受信する場合にはサーバー側もインターネット接続可能な回線を用意する必要があります。サーバーをインターネットに公開することになるのでセキュリティの確保も実施します。
今回はリバースプロキシを入れているのでサーバーをInternetに公開する必要はありません。上記の負担は軽減されます。
リバースプロキシとの安定した通信が見込めるのでリバースプロキシ同じAWSのVPC上に仮想サーバーを設置しました。
アプリケーション
インターネットと相性の良いHTTPプロトコルでデータを待ち受けるアプリケーションサーバーを構築します。
今回は
という処理を行います。
開発言語はPerlを使用し、PSGI仕様のアプリケーションサーバーとしています。
ソフトウェア構成
項目 | 内容 |
---|---|
OS | CentOS |
DBMS | ----- |
WEBServer | ----- |
Application |
データ受信機能 データ提供API機能 |
使用言語 | Perl(PSGI) |
データベースサーバーについて
収集したデータの格納は、データの関連が明確で後々の再利用がしやすいRDBMSで行います。
レコードとして
が格納されているものとします。
サーバー機の選定
データ受信サーバー上のアプリケーションと高速で通信できる所に設置することが望ましいです。
今回はデータ受信サーバー同じAWSのVPC上に仮想サーバーを設置しています。
ソフトウェア構成
項目 | 内容 |
---|---|
OS | CentOS |
DBMS | MySQL |
WEBServer | ----- |
Application | ----- |
使用言語 | ----- |
リバースプロキシについて
今回のシステムにおいてリバースプロキシは必須ではありません。データ閲覧コンピュータからの要求を直接データ提供サーバーで受け付けられますが、後々の運用のしやすさも考慮したシステム構成の例としてリバースプロキシを入れています。
サーバー機の選定
インターネット経由でデータを受信するのでサーバー側もインターネット接続可能な回線を用意する必要があります。サーバーをインターネットに公開することになるのでセキュリティの確保も実施します。
今回はサーバーとしてAWSのVPC上に仮想サーバーを設置しました。通信回線とセキュリティの準備の手軽さを考慮しました。
ソフトウェア構成>
項目 | 内容 |
---|---|
OS | CentOS |
DBMS | ----- |
WEBServer | Nginx |
Application | ----- |
使用言語 | ----- |
組込用コンピュータに関する付記
OSのブートとビルド(Linuxを念頭に)
多くの開発用モデルでは、OSの起動において
両方がサポートされていることでしょう。
アプリケーションの開発段階ではアプリケーションの変更やOS設定の変更が頻繁に発生するので後者で行う事が現実的です。
システムの信頼性としては前者に分があります。開発段階から必要な機能の取捨選択を意識しておいて、後で前者に移行出来ると良いです。
組込用コンピュータは、Distributionと呼ばれているような汎用パッケージで本番システムを稼働させることは前提となっていません。一般のPCと比べて記憶領域が小さいという事も踏まえ、自分のシステム用にOSをビルド出来るようになっています。しかし自分用のビルドは万能ではなく、ビルドしたOSのサイズが大きくて書き込めないという事態に遭遇するかもしれません。そんな時はビルドに含める開発言語のライブラリの取捨選択がスリム化に寄与するかもしれません。
以上