Raspberry PiでIoT 温度・湿度・気圧データ編の4回目です。前回までで、Raspberry Piから温度、湿度、気圧データをWebサーバへ送信してそのデータを蓄積、表示出来るようになりました。今回はWebサーバ側にアラートメール送信機能を実装してみます。温度が決まった値以上になると決まったメールアドレスにアラートメールを送信します。
以下が、Raspberry PiでIoT(温度・湿度・気圧データ編)の記事一覧です。
Raspberry PiでIoT(温度・湿度・気圧データ編 その1)BME280でデータ取得
Raspberry PiでIoT(温度・湿度・気圧データ編 その2)Webサーバ側構築とデータ送信
Raspberry PiでIoT(温度・湿度・気圧データ編 その3)データ表示とグラフ表示”
Raspberry PiでIoT(温度・湿度・気圧データ編 その4)アラートメール送信
今回の作業手順は以下です。
1.Webサーバ側のPHPプログラム機能追加
2.Raspberry Piからテストデータ送信とメール受信チェック
1.Webサーバ側のPHPプログラム機能追加
センサーデータ登録のプログラムにアラートメールの機能を追加します。ここでは、40.0度以上になるとメールを送信します。PHPのファイルはUTF-8で保存して下さい。そうしないと文字化けします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | <?php $pdo = new PDO( 'mysql:host=localhost;dbname=dbname;charset=utf8' , 'tblname' , 'password' ); switch ( $_SERVER [ 'REQUEST_METHOD' ]) { case 'GET' : $st = $pdo ->query( "SELECT * FROM sensorvalues order by datetime desc" ); echo json_encode( $st ->fetchAll(PDO::FETCH_ASSOC)); break ; case 'POST' : $in = json_decode( file_get_contents ( 'php://input' ), true); if (!isset( $in [ 'id' ])) { //40.0度をチェック if ( $in [ 'temp' ] >= 40.0) { mb_language( "Japanese" ); mb_internal_encoding( "UTF-8" ); $to = 'to@todomain.com' ; $subject = 'アラートメッセージ' ; $message = '高温状態です。' ; $headers = 'From: from@fromdomain.ccom' . "\r\n" ; mb_send_mail( $to , $subject , $message , $headers ); } $st = $pdo ->prepare( "INSERT INTO sensorvalues(datetime,temp,hum,press) VALUES(:datetime,:temp,:hum,:press)" ); } $st ->execute( $in ); echo json_encode( "normal end" ); break ; } ?> |
2.Raspberry Piからテストデータ送信とメール受信チェック
実際に40度の状態にするのは難しいので、テストメインでセンサーデータを送信します。以下はセンサーデータ送信プログラムですが、ここのメインを使います。温度に41.0を指定しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | import requests import json from datetime import datetime def uploadSensorValues(temp, hum, press): url = 'http://domain.com/subsub/sensvalues.php' sensorsdata = { 'datetime' :datetime.now().strftime( "%Y/%m/%d %H:%M:%S" ), 'temp' :temp, 'hum' :hum, 'press' :press} print json.dumps(sensorsdata) headers = { 'content-type' : 'application/json' } res = requests.post(url, data = json.dumps(sensorsdata), headers = headers, verify = False ) print res.json() pass def main(): uploadSensorValues( 41.0 , 39.1 , 1020 ) if __name__ = = '__main__' : main() |
以下で実行します。
$ sudo python web.py
これでテストしたところ、メールの受信が確認出来ました。
今回で、Raspberry PiでIoT(温度・湿度・気圧データ編)は終了です。またIoT関連で実際に動作させてみる内容でいろいろと書いてみたいと思います。