Raspberry Pi + Node-RED + センサー + メール で室内のコンディションを通知する

今回のTALKでは、“Node-RED”をインストールした“Raspberry Pi”に接続した

DHT11 温度センサー モジュール “HiLetgo 3個セット DHT11温度センサー モジュール湿度センサーモジュール デュポンラインと付属 Arduinoと互換

aitendo“で買った”PIRセンサーモジュール [HC-SR501]“を使って、

部屋に人がいない時だけ、室内の温度温度をメールで伝える仕組みを作ってみます。自宅に不在時、お留守番中のペットくんたちのために、お部屋のコンディションをチェックする、といったシチュエーションを想定しています。

 

< Raspberry PiにNode-REDをインストールする >

・先日のTALk (““Raspberry Pi + Node-RED + Google Home で明日の天気を定刻にアナウンス””)をご覧下さい。

 

< 温度センサー周りをセットアップする >

・温度センサーの取り扱いについては、”ワンコインでお部屋の温度をHomeKitをベースに外出先でもモニターできるようにしてみました“をご覧下さい。

・DHT11 温度センサー モジュールと”Node-RED”の”node-red-contrib-dht-sensor“ノードのセットアップについては、先日のTALk (“Raspberry Pi + Node-RED + ダッシュボード でお部屋の温度と湿度を可視化“)をご覧下さい。

 

< 人感センサーをセットアップする >

・人感センサーをRaspberry Piに接続する詳しい手順は、“Raspberry Pi 4 4GBモデルでこれまで構築したラズパイ環境を統合化してみる (4) “人感センサーで照明を自動制御””をご覧下さい。

・人感センサーの検出結果は、”Node-RED”の”rpi-gpio-in”ノードで取得します。

“rpi-gpio-in”ノードのプロパティ画面では、人感センサーの”out”端子を接続したGPIOピンヘッドの番号を設定するだけです。検出結果は、人を検知したら”1″、検知していなければ”0″が返ってきます。

フローをデプロイすると、”rpi-gpio-in”ノードは常時動作し、GPIOピンヘッドからの信号が変化する都度、メッセージ (msg.payload)が後方のノードに向けて送信されます。

 

< Node-REDでメールを扱えるようにする >

“Node-RED”からメールを送受信できる”node-red-node-email“ノードを追加して下さい。

“node-red-node-email”ノードのプロパティ画面では、下図のように、メールサーバ、使用ポート、送信者の認証情報などを設定します。デフォルトはGoogleメール です。iCloudメールを”iCloud メールクライアント向けのメールサーバ設定“をもとに設定してみましたが、なぜかうまく行きませんでした。

メールを送信する時は、msg.topicにメールタイトル、msg.payloadにメール本文をセットしたメッセージをこのノードに送るだけです。

今回は、Googleメールで室内のコンディションを送ることにしました。

とは言え、普通のユーザ認証情報だけではエラーになってしまいます。エラーメッセージでも分かる通り、アプリ パスワードを事前に設定する必要があるようです。

Googleアカウント画面 (“https://myaccount.google.com“)にアクセスし、”セキュリティ”画面の”Google へのアクセス”欄にある”アプリ パスワード”をクリックして下さい。

続く画面下のアプリ パスワード生成欄で、アプリとデバイスを選択し、”生成”ボタンをクリックします。

生成されたアプリ パスワードを、”node-red-node-email”ノードのプロパティ画面のパスワード欄に設定すれば準備完了です。

 

“Node-RED”のフロー画面は、こんな感じで、”inject”-“function”-“email” (“node-red-node-email”)ノードを配置して接続します。

“function”ノードで、”email”ノード用のメールタイトルと本文を用意します。

“デプロイ”後、フローを実行するとメールが届くはずです。

 

< 温度センサーの計測値をメール送信する >

それでは、温度センサーで測定した値をメールで送信してみましょう。

前回作成したフローをもとに、”inject”と”function”ノードの間に”rpi dht22″ノード (”node-red-contrib-dht-sensor”)を配置します。

”rpi dht22″ノードのプロパティ画面はこんな感じです。

”rpi dht22″ノードに続く”function”ノードのプロパティ画面は、下図のように編集します。

msg.topic = '自宅のリビングルームの温度と湿度'
msg.payload = '現在の温度は' + msg.payload + '℃、湿度は' + msg.humidity +'%です';

return msg;

“デプロイ”後、フローを実行するとメールが届くはずです。

 

< 人感センサーの検出結果でメール送信の是非を判断する >

まずは、完成したフローを紹介します。

このフローの特徴は、温度センサーの測定値をメール送信するフローと、人感センサーの検出結果を保存するフローが独立しているところです。

その理由は、人感センサーはいくら調整しても多少の誤検知が避けられないので、フローの先頭に配置しずらいからです。人感センサーは、人が正面にいても全く動かない時間があると不在と検知したり、人がいないのにいると検知することが稀にあります。

とは言え、連続的に誤検知を繰り返すわけではないので、”rpi-gpio-in”ノードに繋いだ”change”ノードで、人感センサーが検出した結果を”Node-RED”の”コンテキスト” (詳しいことが”コンテキストを利用する“を参照。)を使い、タブ内の全フローで共有可能な”flow.xxxx”変数に保存し、いつでも参照できるようにしました。

 

一方、”rpi dht22″ノードと”function”ノードの間に、メール送信の是非を判定する”function”ノードを配置し、プロパティ画面の”コード”欄では、人感センサーの検出結果である”コンテキスト”変数を取り出し、人がいる時 (=== 1)は後方のノードに”null”を送ることでフローを終了させ、人がいない場合は温度センサーの値をメール本文を作成する”function”ノードに送るようにしました。

最後に、先頭の”inject”ノードのプロパティ画面で、”繰り返し”設定をしておきます。

 

完成したフローをデプロイしましょう。

今回のサンプル例では、外出時、1時間に一度のペースで、自宅の温度と湿度をメールで確認できるようになりました。

 

 

 

 

ホームページ “THE POOH FILES”にも是非お立ち寄り下さい。
Adobe Stock“でベストショットな写真素材を販売中です。是非ご覧下さい。

tomohiko

長年に渡りMacintosh向けの自作アプリを作り続けているPOOHです。最近はiPhone,iPad向けアプリ開発にも挑戦中。グルメ、旅行、露天風呂、写真、サイクリング、映画、STAR TREKが大好き。レトロでSFなおもちゃを大量にコレクション。プレーリードッグと同居中。

おすすめ

コメントを残す