Node-REDで、ある条件の時、最大一日一回Gメールを自動送信する方法

Node-RED

自宅や工場・仕事などで、IoTを使ってシステムを作ったけど、ある条件になったときにアラートメールを自動送信したいよね!と思うことってよくありますが、一日何回もメールが来たり、夜中にメールが来たりするのはちょっと・・・という場合や、一定の時間の信号は無視したい!という時に便利な手法です。

また、Gmailを設定したけどエラーが出て送れない時の対処方法も記載しました。

前提条件

今回は、Node-REDとGmailを使用しました。複数の方にメールすることを考えると、専用のアドレスを取得するのがおススメです。セキュリティー的にもその方が良いと思います。

使用したノード

使用したノードの例です。3つの条件と3つの送信先を設定した場合です。

先頭のAzure IoT Hub Receiverノードは、例です。それぞれの環境によって変更してください。
必要に応じた信号入力があればOKです。
Raspberrypiなどをつないでいる方は、その信号を使用しても良いと思います。

Azure IoT Hub Receiverの設定方法は以下の記事にあります。良かったら見て下さい。

ノードの設定

番号順に説明します。

①switchノード

これは、信号の選別(振り分け)です。場合にっては不要です。
入ってくる信号が多い条件ではここで必要な信号のみ通します。

これは、3つのデバイスからの信号を分ける場合です。
それぞれの信号に「deviceId」というpayloadがあり、それに含まれる文字列「orange」「apple」「melon」で分岐させています。

②changeノード

このノードで、必要な信号をpayloadに代入します。

今回は、信号に含まれる「qty」を使用します。

③functionノード

ここでメールを送信する条件を設定します。

1行目 現在の時間を取得します。
2行目 メールを送信する時間をIF文で分岐します。上記は朝8時から9時までの間です。
   もし、信号の入力が1時間に1回以下の場合は範囲を広げてください。
3~5行目 このIF文で②の信号のしきい値を設定します。
   上記の場合は、信号の内容が10未満の場合に次の④のノードに進みます。

var now_hour = new Date().getHours();
if ( 8 <= now_hour && now_hour < 9 ){
    if ( msg.payload < 10 ){
    return msg;
    }
} 

④delayノード

このノードで送信回数に制限を掛けます。

上記の例では、1時間に最大1回のみという設定です。

③の2行目で判定時間を広げたりしている場合は、ここも変更してください。

⑤functionノード

メールのタイトルと本文を設定します。

1行目 メールタイトル
2行目 本文
    msg.payloadを挿入すると本文に内容を表示することができます。

⑥emailノード

メールの送信設定です。

ユーザーIDとパスワードは送信元のアドレスとパスワードになります。

今回はGmailですが、Gmailのメールアドレスとパスワードを入れてうまくいく場合は稀だと思います。
Node-REDはGmailから安全性が低いと判定されているようです。
Gmailのアプリパスワードを取得し上記ノードのパスワードに入力しなおせば回避できるはずです。

Gmailアプリパスワード取得

Googleアカウントに行って、セキュリティータブの上記の場所を探してください。
2段階認証プロセスをオンにしていれば「アプリパスワード」という項目がありますので、クリックします。

もし、2段階認証をオンにしていない場合は、「安全性の低いアプリの許可」という項目があると思います。それをオンにしてもメールが送れるようになります。

詳細は以下の外部記事が参考になりますので、良かったらどうぞ。

メーラーからGmailへの接続時に認証(パスワード)のエラーが生じる場合の対処方法

アプリパスワードの設定方法は以下です。

アプリパスワードの項目をクリックすると再認証を求められますので、アカウントのパスワード入力してください。

上記の画面はすでに2つのアプリパスワードが設定してあります。複数設定できます。

アプリを選択は、メールを選択してください。

デバイスを選択は、その他を選択し、適当な名前を入力します。

今回はNode-REDと入力しています。入力したら生成をクリックします。

黄色いところにアプリパスワードが生成されました。
このパスワードをNode-REDのメール送信パスワードに設定すれば完了です。

もし、このアプリパスワードを忘れてしまった場合は、再度生成してください。

さいごに

いかがでしたでしょうか。
自動メール送信を設定して、夜中に何度もメールが送信されてしまって、現場の部長に怒られた苦い経験を経てたどり着いた方法です。皆様のIoTシステム構築の一助になれば幸いです。

コメント

タイトルとURLをコピーしました