安価なマイコンボード「Arduino」とLinuxサーバーを組み合わせ、家電を制御してみましょう。出先でスマートフォンなどから手動でエアコンをON/OFFしたり、部屋の気温が高くなったとき自動でエアコンをつけたりします。ECサイトの特売情報もチェックして、目覚ましを鳴らします。前回はマイコンボードを製作しました。今回はLinuxサーバーを構築します。
次にデータを集中管理するLinuxサーバーを構築します。筆者は今後様々なセンサーを、風呂場や階段、仕事で使うデータセンターなどに設置していくことを考えています。Linuxサーバーでデータベースを動かし、多様なデータを蓄積できる環境を作りましょう。
ちなみに、Arduino自体をWebサーバーにして、SDカードに室温データなどを記録することもできます。しかしデータを一元管理して監視サーバーと連携したりするにはArduinoは力不足なので、Linuxサーバーに任せます。
まずはNagiosを使わず、エアコンを制御する部分を動かします。
データベースでテーブルを定義
今回動作させるすべてのプログラムのソースコードを、Eclipseプロジェクトとして電子版向けサイトに用意しました。フォルダー構成を図8に示します。
ここでデータベースに作成するテーブルについて説明します。
データベース関連はフォルダー(5)にまとめてあります。テーブル構成を表2に示しました。基板情報は「Board」、Arduinoへのコマンドは「BoardCmd」、温度などのログは「EventLog」というテーブルにそれぞれ格納します。
カラム名 | 型 | 説明 |
---|---|---|
board_id | long | 主キー |
secret | varchar | 更新用コードネーム |
label | varchar | 表示名 |
delay_in_sec | integer | アクセス間隔 |
last_access_date | timestamp | 最終アクセス時刻 |
board_cmd_id | long | 主キー |
board_id | long | Boardの主キー |
command | integer | コマンド内容 |
extra_param | varchar | 汎用的なメモ欄 |
insert_date | timestamp | コマンド登録時刻 |
exec_date | timestamp | コマンド実行時刻 |
event_log_id | long | 主キー |
board_id | long | Boardの主キー |
type | integer | イベントの種類(1:気温 2:Nagios警告) |
value | varchar | 汎用的なメモ欄(温度や警告レベル) |
event_date | timestamp | イベント発生時刻 |
基板テーブル「Board」に登録するレコードは今回1個です。ボードの数を増やすときや、他人とサーバーをシェアするときにレコードを追加します。