Raspberry Piは、Gnuplot画像出力と電子メールアラート機能を備えた室温監視を制御しました
私が働いているところには、たくさんのコンピューターを収容する非常に重要な部屋があります。これらのシステムのパフォーマンスを最適化するには、この部屋の周囲温度を非常に低くする必要があります。
私は、数人に何らかの形でアラートを送信して通知する機能を備えた監視システムを考案するように依頼されました。その部屋のエアコンに何か問題があります。
このビルドのハードウェアには、RaspberrypiとUSB温度および湿度センサーを使用しました。
モニタリングのために、私はGnuplotを使用して3つの温度グラフをプロットし、それらのグラフの画像を作成しました。次に、Raspberry piでホストされる専用のHTMLページを作成しました。これにより、現在の状況、つまりgnuplotの出力画像をネットワーク内のWebページから監視できます。
警告のために、私はGmailを使うことにしました。 Linuxユーザーマガジンでサンプルコードを見つけました。 (もちろん、必要なポートの割り当てがわかれば、どのメールサーバーでも使用できます。)
そのために、これらのアラート専用のGmailメールアカウントを作成しました。また、追加機能として、アラートがトリガーされたときに1つのグラフをメールに添付して、メールを受信した人がアラートの原因となった大幅な増加を把握できるようにします。
ステップ1:ハードウェアのセットアップ
ハードウェアのセットアップはそれほど多くありません。 Raspberry piはRaspianを実行しており、USB温度センサーはUSBポートの1つに直接接続するだけです。
このセンサーの消費電力は最小限であり、その結果、ラズベリーパイから直接電力を供給しました。ただし、消費電力が少し多いUSB電源デバイスの場合は、Raspberry piのUSBポートから直接ではなく、電源付きUSBハブを介して電源を供給することをお勧めします。
温度センサーに電力が供給されると、現在の状態の温度と湿度の読み取り値を含むシリアル文字列が提供されます。
温度=20.9°C湿度=62.7%露点=13.0°C
Pythonスクリプトはこの文字列を解析し、温度と湿度の値を5分ごとに3つのテキストファイルに保存します。毎日、24時間および48時間のテキストファイル(違いについては、後でHTMLセクションで説明します)。これらのファイルから、Gnuplotはグラフを生成し、続いて各ファイルのデータセットの画像を生成します。
Pythonスクリプトについて説明する前に、Raspberrypiの準備について説明します。
監視はオンラインで行うため、Webサーバーをインストールする必要があります。私はRaspberrypiでそれらのいくつかを試しましたが、少し大きいですが、Apacheが好きです。 Raspberry piにApacheをインストールするには、次のように入力するだけです。
sudo apt-get install apache2
インストールする前にプロンプトが表示されます。「y」を押して「はい」と入力すると、
ラズベリーパイに応じてApacheが数分インストールされます。
それが完了したら、2つのPythonプラグインをインストールする必要があります:python-serialとpython-gnuplotプラグイン。 (最近のRaspianビルドにはpython-serialプラグイン標準があることに気づきましたが、念のためです。)
入力したものをインストールするには:
sudo apt-get install python-serial python-gnuplot
プロンプトを確認した後、これらのプラグインがインストールされます。
これでハードウェアのセットアップは完了です。
ステップ2:ソフトウェアのセットアップ–メールのセットアップと受信者
メールアドレスを作成する
ソフトウェアに深く入り込む前に、メールアラートを送信するためのGmailアカウントを作成する良い機会です。 (この例ではGMailを使用していますが、SMTPポートの設定がわかれば、どのメールサーバーでも使用できます)
Pythonコードは非常に単純ですが、必要なインポートは重要です。それらがなければ何も機能しません。
時間インポートから*
インポート時間
シリアルのインポート
smtplibをインポート
gnuplotをインポート
OSのインポート
sysをインポート
最後に、メーリングリスト。もちろん、メールの受信者を追加する必要があります。各メールアドレスは変数に保存されます。
from_address =‘[メール保護]’
to_address1 =‘recipient1.mail.com’
to_address2 =‘recipient2.mail.com’
ユーザー名=「[メール保護] @ gmail.com」
password =‘custom_email_password’
ステップ3:ソフトウェアのセットアップ–シリアルのセットアップと解析
次に、シリアル設定を確認します。
センサーからのシリアル出力と一致するパラメーターを設定するだけです。センサーは、標準フォーマットである9600 8 N1でシリアル文字列を出力します。
文字列が受信された後、Pythonでこの文字列を解析する方法はいくつかあり、おそらくより確実になります。私のやり方は、シリアル文字列の「一時」文字を探すことです。見つけたら、次の46個のシリアル文字を文字列に読み込むだけです。
収集された文字列は、配列内の要素のようにアドレス指定できるようになりました。目的のデータが文字列から解析され、対応するタイムスタンプとともに3つのファイルに保存されます。
タイムスタンプ=strftime(“%d%b%Y%H:%M:%S“、localtime())
ステップ4:ソフトウェアのセットアップ– Gnuplot
Gnuplotはコマンドライングラフィカルツールです。基本を理解したら、データセットをグラフィカルに表示するための非常に強力なツールになります。
Gnuplotは、フォーマットされたテキストファイルから直接プロットできますが、たまたま前の解析ステップでプロットしたものがあります。
ファイル内のどこにデータがあるかをgnuplotに指定すると、目的の値をプロットできます。 X軸に時間を使用し、Y軸に温度を使用します。
テキストファイルの形式と一致するようにgnuplotで時間形式を取得する必要があるため、私の経験から時間をプロットするのは最も困難です。
すべてのグラフ作成オプションが完了し、好みに応じて、Gnuplotはこのグラフに画像を作成できます。これは、後でWebページで使用する画像になります。 .png画像を使用することにしましたが、Webページの古い画像を置き換えたいので、各画像の名前が同じであるため、このコード行を変更する必要はありません。
画像サイズの設定は、HTMLページの最適化にリンクされています。私は最初に標準サイズで遊んでから、画像が画面に合うように実験しました。このプロジェクトでは、古い画像を保存していないため、ストレージ内のファイルの物理的なサイズは、貴重なRaspberrypiストレージの主要な要因ではありません。
これは、daily.pngグラフ画像を作成して保存するためのコードスニペットです。
g =Gnuplot.Gnuplot(debug =debug)
g( ‘cd“‘ + path + ‘”‘)
g( ‘set xdata time’)
g( ‘set timefmt“%d%b%Y%H:%M:%S”‘)
g( ‘set format x“%H:%M \\ n%d%b”‘)
g( ‘set title” Daily Current Temperature Display”‘)
g(「キーをオフに設定」)
g( ‘set grid’)g( ‘set xlabel“ Time \\ nDate”‘)
g( ‘set yrange [15.0:35.0]’)
g( ‘set ylabel” Temperature“‘)
g( ‘set datafile missing“ NaN”‘)
g( ‘set terminal png size 800,400’)
g( ‘set output“ daily.png”‘)
g( ‘plot“ daily.dat” using 1:($ 3)with lines’)
注:g( ‘set datafile missing“ NaN”‘)を読み取る行。この行の目的は、プロットに空白をプロットすることです。 「NaN」変数は、Pythonスクリプトが特定の読み取りまたはシリアル送信で何か奇妙なことを検出した場合に、ファイルに書き込まれます。
上記の3つのグラフからわかるように、daily.pngはデータの現在の時刻を表示しますが、24_hour.pngは24時間スケールで同じ情報を表示します。 48_hour.pngグラフは、センサーからの過去48時間分のデータを示しています。
詳細:Gnuplot画像出力と電子メールアラート機能を備えたRaspberryPi制御の室温監視
製造プロセス