安価なマイコンボード「Arduino」とLinuxサーバーを組み合わせ、家電を制御してみましょう。出先でスマートフォンなどから手動でエアコンをON/OFFしたり、部屋の気温が高くなったとき自動でエアコンをつけたりします。ECサイトの特売情報もチェックして、目覚ましを鳴らします。前回はマイコンボードを製作しました。今回はLinuxサーバーを構築します。

 次にデータを集中管理するLinuxサーバーを構築します。筆者は今後様々なセンサーを、風呂場や階段、仕事で使うデータセンターなどに設置していくことを考えています。Linuxサーバーでデータベースを動かし、多様なデータを蓄積できる環境を作りましょう。

 ちなみに、Arduino自体をWebサーバーにして、SDカードに室温データなどを記録することもできます。しかしデータを一元管理して監視サーバーと連携したりするにはArduinoは力不足なので、Linuxサーバーに任せます。

 まずはNagiosを使わず、エアコンを制御する部分を動かします。

データベースでテーブルを定義

 今回動作させるすべてのプログラムのソースコードを、Eclipseプロジェクトとして電子版向けサイトに用意しました。フォルダー構成を図8に示します。

図8●Eclipseプロジェクトの構成
図8●Eclipseプロジェクトの構成
[画像のクリックで拡大表示]

 ここでデータベースに作成するテーブルについて説明します。

 データベース関連はフォルダー(5)にまとめてあります。テーブル構成を表2に示しました。基板情報は「Board」、Arduinoへのコマンドは「BoardCmd」、温度などのログは「EventLog」というテーブルにそれぞれ格納します。

表2●データベースのテーブル構成
基板テーブル「Board」
カラム名 説明
board_id long 主キー
secret varchar 更新用コードネーム
label varchar 表示名
delay_in_sec integer アクセス間隔
last_access_date timestamp 最終アクセス時刻
コマンドテーブル「BoardCmd」
board_cmd_id long 主キー
board_id long Boardの主キー
command integer コマンド内容
extra_param varchar 汎用的なメモ欄
insert_date timestamp コマンド登録時刻
exec_date timestamp コマンド実行時刻
イベントテーブル「EventLog」
event_log_id long 主キー
board_id long Boardの主キー
type integer イベントの種類(1:気温 2:Nagios警告)
value varchar 汎用的なメモ欄(温度や警告レベル)
event_date timestamp イベント発生時刻

 基板テーブル「Board」に登録するレコードは今回1個です。ボードの数を増やすときや、他人とサーバーをシェアするときにレコードを追加します。