自宅や工場・仕事などで、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システム構築の一助になれば幸いです。
コメント