環境監視システム自作 windows+Apacheサーバー

< 2021/2/17 変更 > 大したシステムの更新もせず放置して4年間ほど使い続けてきました。ここへ来てサーバーPCの不具合が生じたり、内容の誤りも分かったので更新することにしました。

RasPiによるサーバーはお手軽で低価格が魅力なのですが、ファイルシステムがフラッシュメモリであることなど信頼性の面で不安があります。そこでWindowsマシンでWebサーバーを立ち上げ、環境データの蓄積やWeb表示をRasPi版サーバーと同様に行えるようにしました。
当初はPython3によるWebサーバーとしてみましたが、RasPi版と同様に長期間安定して動作させることができませんでした。そこで、これ以上は手に負えないと判断し apache2 によるWebサーバーとしました。
ただし、CGI等のスクリプト言語はPython3とし、基本的なコードはRasPi版と同様にしました。

1.システム概要

・マシン(PC)   :Let’s Note CF-F9 (自宅に眠っていたもの)ハードディスクはシステム領域C:とデータ領域D:にパーティション分割
・OS       :Windows10 Pro 64bit版
・Webサーバー    :apache 2.4.46
・CGIスクリプト言語 :WinPython 3.6.3
・データーベース  :sqlite
・グラフ表示    :matplotlib
・フォルダ構成

2.apache2 によるWeb(CGI)サーバー立ち上げ

apache2のインストール
➀ httpd-2.4.46-win64-VS16.zip をダウンロードして展開。
➁ apache24フォルダをCドライブへコピー
➂ c:\apache24\conf\httpd.confの変更

  37行目 Define SRVROOT "c:/Apache24"
 218行目 ServerAdmin admin@denbei.com
 227行目 ServerName www.denbei.com:80
 251行目 DocumentRoot "d:/web"
 252行目 <Directory "d:/web">
 368行目 ScriptAlias /cgi-bin/ "d:/web/cgi-bin/"
 384行目 <Directory "d:/web/cgi-bin">
 432行目 AddHandler cgi-script .cgi .py

➃ 管理者コマンドプロンプトにて起動してサービスとして常駐

 c:\apache24\bin\> httpd -k install

「Hello World !」などと表示させる簡単な index.html を D:¥web のホルダに作成してブラウザで動作を確かめる。

URL:http://localhost/ または
http://192.168.xxx.xxx/  (サーバーのIPアドレス)

3.Python3 matplotlib 等のインストール

WinPython-64bit-3.6.3.0Qt5.exe をダウンロードしてインストール
SQLite、NumPy、matplotlib、pyserial などは含まれているので、追加する必要はありません。

4.親機2へ AE-FT234X を追加

秋月電子のUSB-シリアル変換モジュール AE-FT234X をブレッドボードの親機2へ追加してRX端子をPICマイコンのTX端子に接続。USBケーブルでPC(CF-F9)に接続して仮想シリアルポートとしてデータ転送できるようにしました。(最初からあったUSB-シリアル変換モジュールはそのままRasPiに接続)

5.親機2からの環境データ受け取りとデータ蓄積

dat_rec.py
文字コードはUTF-8、TABサイズは 4 です。
RasPi版と異なる部分は、ドライブ、ディレクトリ(フォルダ)およびシリアル(com)ポートの指定部分です(シリアルポートは私の環境に合わせて com4 としてあります)。また、RasPi版では envmon.dat を RAMRAMディスクに保存していましたが、ここではその必要がないのでDドライブへ普通に保存しています。

Windows起動後に ‘dat_rec.py’ を常駐実行させるときは、WinPython Command prompt の画面で次のようにします。

 python d:¥web¥cgi-bin¥dat_rec.py

Windowsの起動時に ‘dat_rec.py’ が自動実行されるようにするときは、次のbatスクリプトを作成してタスクスケジューラに登録します(このスクリプトもcgi-binフォルダに置きました)。

call_dat_rec.bat

タスクスケジューラの設定

・ユーザーがログオンしているかどうかにかかわらず実行
・最上位の特権で実行 
・トリガー:システム起動時
・タスクを要求時に実行・・・チェックを外す

動作の解説は「環境監視システム自作 sqlit3によるデータ蓄積とグラフ表示」(RasPi版)をご覧下さい。

6.環境データ表示 CGIスクリプト

envmon.py
文字コードはUTF-8、TABサイズは 4 です。
RasPi版と異なる部分は、ドライブやディレクトリ(フォルダ)の指定部分と日本語表示の部分です。日本語の表示ではWindowsシステムに登録されているフォントファイルをWebフォルダにコピーして使うことにしました。

動作の解説は「環境監視システム自作 sqlit3によるデータ蓄積とグラフ表示」(RasPi版)をご覧下さい。

ブラウザからのアクセスと表示例

 http://192.168.***.***/cgi-bin/envmon.py  (192.168.***.*** はサーバーアドレス)

7.環境データのグラフ表示 CGIスクリプト

envgraph.py
文字コードはUTF-8、TABサイズは 4 です。
RasPi版と異なる主な部分は、ドライブやディレクトリ(フォルダ)の指定と日本語表示です。なお、matplotlibのバージョンを2.2.2とした事により少しの補正が生じました。
動作の解説は「環境監視システム自作 matplotlibによるグラフ表示」(RasPi版)をご覧下さい。
前記ブラウザ表示の「屋外」をクリックした時のグラフ表示例

まとめ・課題・雑感

◆最も興味があったのはコードの互換性です。WindowsとLinuxとの環境の違いの部分を除けば互換性はかなり高く保たれています。当初はRasPiと同様にpython3によるWebサーバーを立ち上げて動作確認を行い、その後apache2.4サーバーに変更しました。この間1~2年程経過しそれぞれのバージョンも上がって動作が改善されてきた事もあるかと思いますが、現在の方が互換性が高まった感があります。
◆matplotlib によるグラフ描画ですが、ブラウザに表示されるまでの処理時間が結構掛かります(当初約5秒、現在約10秒)。Windowsマシンのサーバーにしてもう少し早くなることを期待しましたが、RasPi より1割ほど余計に時間が掛かります。CF-R8が非力なためとは思います。
◆この程度のサーバーでしたら中古ノートPCが良いと考えています。なんと言ってもバッテリーという無停電電源が常備されていますので。
◆最初はPythonも取っつきやすくて良いと思ったのですが、結構奥が深くてぼつぼつ google 頼みに限界を感じています。
◆apache2サーバーとしてからの長期安定性は現在の所確認できていません。問題が生じたらまた報告したいと思います。

関連ページ

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