環境監視システム自作 matplotlibによるグラフ表示

◆ このページは sqlite3によるデータ蓄積とグラフ表示 の続きです。python3によるグラフ表示用CGIスクリプトについて紹介します。

グラフ描画モジュール matplotlib

Pythonのグラフ表示モジュールにもいろいろあるようですが、ネットで評判の良い matplotlib を使うことにし、その使い方についてググりまくりました。易しいところから少し作ってはまたググるといったやりかたでやっと納得のいくところまできました。ネットはありがたいものです。情報を惜しみなく掲載されている皆さんに感謝いたします。

ここでは matplotlib の具体的な解説は省かせていただきます。

グラフ表示までの流れ

1.次の環境監視画面(CGIスクリプト envmon.py による表示画面)で、グラフ表示させたい場所のリンクをクリックする。
環境監視ブラウザ表示

2.表示データの行番号をGET引数としてグラフ表示用CGIスクリプト envgraph.ph を呼び出す。例えば上のブラウザ表示で「ハウス1」をクリックすると、サーバーには次のリクエストが送られる。

http://192.168.xxx.xxx:8000/cgi-bin/envgraph.py?num=3

192.168.xxx.xxx はサーバーのIPアドレス。GET引数 num は0から始まる行番号を表す。

3.グラフ表示用CGIスクリプト envgraph.py では、GET引数を取得して場所名とセンサIDを確定させる。場所名はグラフのタイトルに、センサIDはグラフタイトルとデータベースからデータを取得するためのSQL文に使う。

4.データベースファイル envdat.db から、指定されたセンサIDの現在の日時から20日間前までの温度および湿度データを30分間隔で取得する。

5.温度・湿度と計算により求めた露点温度を matplotlib に渡す。

6.matplotlib によるグラフ描画行う。

7.描画の結果はpng形式でAGG(Anti-Grain Geometry engine)に出力してブラウザに返し表示させる。

ブラウザに表示されたグラフの例を次に示します。envgraph

湿度の変化は気温の変化と逆になります。寒い日があると結露により空気中の水分量が大きく奪われて湿度が平均的に低下し露点温度も更に下がります。12/4~5、12/13~14、12/22 には降雨がありました。空気中の水分量が増えて湿度が100%近くとなり、露点温度が限りなく気温に近づくのがわかります。場所の状態によって環境変化にもそれぞれの特徴が現れます。グラフを見ていても面白いです。

CGIスクリプト envgraph.py

グラフ表示CGIスクリプトの全プログラムを掲載します。ご覧になりたい方はクリック、またはダウンロードしてください。
envgraph.py_.txt
ファイル名の末尾の_.txtを削除して envgraph.py として下さい。コードは UTF-8、TABサイズは 4 です。

<言い訳> python も matplotlib も sqlite も全くの初心者ですのでネットの情報を頼りに作成したスクリプトです。恥じ晒しプログラムかもしれませんが、少しでもお役に立てられるなら嬉しい限りです。これからも勉強しながら改良を加えていく所存です。

まとめ・課題・雑感

◆前回までの課題であった露点温度の表示やグラフ表示を行うことができ、農場の環境監視システムとしての完成度を一層高めることができました。特にグラフ表示により農場の状態がよくわかります。特に1日の環境の変化、季節ごとの環境の変化、天候による環境の変化など、今まで疑問に思ってきたことが分かるようになってきました。

◆表示までに約5秒間掛かります。sqlite2のデータ読み出しとmatplotlibによるグラフ表示に時間が掛かるようです。グラフについてもリアルタイムで更新されるように変更すれば処理の遅れが目立たないようになるかなと思っています。

◆この2ヶ月間(11~12月)は市田柿の生産に追われてきました。特に市田柿は温度・湿度・結露が品質に大きく影響します。実際の管理は私の息子が行っているのですが、データを管理に生かせるようアドバイスすることができます。(アドバイスを息子が受け入れるか否かは別問題です。「親子関係のほうが難しい!」^-^)

◆RasPi による Web(CGI)サーバーを立ち上げてから1ヶ月間以上稼動してみましたが状況により不安定となる時があります。原因究明には至っていません(エラーログの意味がわからない)。今回 RAM-Disk を導入しましたので安定動作に寄与するか確認していきたいと思います。

◆現在、場所名やセンサIDをスクリプト中に直接埋め込んでありますが、できればブラウザから登録できるようにすべきです。これからの課題です。

関連ページ

環境監視システム自作 概要
環境監視システム自作 子機 温湿度センサーユニット
環境監視システム自作 親機1 特定子機監視器
環境監視システム自作 親機2 データ収集 (TWE_Lite+PIC+Serial出力)
環境監視システム自作 Webサーバー(RasPi + Python)
環境監視システム自作 sqlite3によるデータ蓄積とグラフ表示
環境監視システム自作 matplotlibによるグラフ表示
環境監視システム自作 windows+Apacheサーバー
湿度を正確に測る