株式会社インデペンデンスシステムズ横浜

システム開発エンジニアの西田五郎が運営しております。Raspberry Pi や Arduino その他新規開発案件のご依頼をお待ちしております。

IoT Raspberry Pi

Raspberry PiでIoT(温度・湿度・気圧データ編 その4)アラートメール送信

投稿日:2017年4月2日 更新日:

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関連で実際に動作させてみる内容でいろいろと書いてみたいと思います。

AdSense

AdSense

-IoT, Raspberry Pi

執筆者:

関連記事

感染症対策のためのIoT技術(その2)非接触温度センサーをインターネットへ接続する

前回の続きです。前回は非接触温度センサーでの体温測定について書きました。今回はその非接触温度センサーをインターネットへ接続してクラウドに体温データを蓄積して可視化すという内容で書きます。その上で実務的 …

Raspberry PiでC言語版Lチカを試す(その2)レジスタを操作する

Raspberry PiでC言語を使ったLEDの点灯、消灯(いわいるLチカ)を試してみました。今回は2回目です。前回デバイスドライバを利用する方法を書きました。今回はレジスタを直接操作する方法を使いま …

レーザーカッターでセンサーのケースを作ってみた

前回のセンサー(温湿度センサーBME280)のケースをレーザーカッターで作ってみました。もちろん3Dプリンターで作る方法もあると思いますが単純なボックス型ならレーザーカッターの方が加工時間が短いと思っ …

Raspberry Piをモニターとキーボードなしで導入する(2021年5月版 その1)全体概要からSDカードの作成まで

今現在(2021年5月)の方法でRaspberry Piをモニターとキーボードなしで導入してみます。このモニターとキーボードなしの状態はヘッドレスという表現もあるようですのでここからはこの状態をヘッド …

Raspberry Pi 3でのコンソールケーブル利用と初期設定

Raspberry Pi 3 でコンソールケーブルを利用する方法と初期設定についてです。 以下のページ等で今までこのテーマについて書きました。 Raspberry Piをモニターとキーボードなしで導入 …

S