Tibbo-Piを使って在室監視を作ろう

概要

照度センサーを使って室内の照明のオンオフを監視。メールで通知します。

このチュートリアルでは、changeノードを使ってメッセージとコンテキストの設定/変更を行います。

 

使用tibbitブロック

tibbitブロック 使用数
#00-3 2chダイレクトI/O+5V+GND 1
#28 照度センサー 1

 

tibbit配置

SLOT6に#00-3 2chダイレクトI/Oを挿入します。

COM6に#28 照度センサーを挿入します。

Step 1 – センサーデータ取得

#28 照度センサーからデータを読み込み、Node-REDのデバッグウインドウに表示します。

所要時間:10分

 

ノード配置

最初にtibbo-piを初期化するtp initializeノードを配置します。

inject、Tibbit #28、debugの順にノードを配置、接続します。

ノード設定

inject(timestamp)ノードの「Node-RED起動の…」にチェックを入れ、5秒後に設定、繰り返しドロップダウンで「指定した時間間隔」を選択、「時間間隔」を10秒に設定します。

Tibbit #28ノードを開き、スロットにS06を設定します。

 

実行

デプロイをクリックしてフローを実行しましょう。

開始5秒後から10秒ごとにTibbit #28が実行され、照度が表示されます。

 

Step 2 – ブザーを鳴らす

照度が上下したときにtibbo-pi本体のブザーを鳴らします。

所要時間:10分

 

ノード配置

#28 照度センサーの出力にchange、switch、もうひとつchange、tp buzzerノードを配置します。

この時点ではswitchノードの条件分岐が設定されていないので、switchと2つめのchangeは接続しません。

ノード設定

1つめのchangeノードを開き、メッセージとコンテキストの処理を設定します。

  1. msg.payload(#28 照度センサーの値)を、msg.valueに代入。
  2. flow.lastvalueを、msg.lastvalueに代入。
  3. msg.valueをflow.lastvalueに代入。
  4. msg.payloadを削除。

これらの処理によって、msg.valueに今回の照度、msg.lastvalyeに前回の照度がセットされてswitchノードに渡されます。

flow.lastvalueには今回の照度がセットされ、次回の処理で「前回の照度」として参照されます。

 

switchノードでは、明るくなった/暗くなったを判定する条件を設定します。

照度が前回の2倍を超えたとき「明るくなった」、半分未満になったとき「暗くなった」と判定することにします。

判定対象のプロパティはmsg.valueです。条件タイプはexpressionを選択してJSONata形式で記述します。

これら2つの条件の出力は、どちらも2つめのchangeノードの入力に接続します。

次に2つめのchangeノードを開いてブザーに渡すメッセージを設定します。

msg.payload.ptnに1、msg.payload.timeに10をセットします。ptnはブザーの鳴らし方、timeは鳴らす長さです。

 

実行

デプロイをクリックしてフローを実行しましょう。

照度が前回の2倍を超えた、または半分未満になったときtibbo-pi本体のブザーが鳴ります。

 

Step 3 – ブザーの音を変える

明るくなったときと暗くなったときでブザーの鳴らし方を変えます。

所要時間:5分

 

ノード配置

2つめのchangeノードの下にもう1つのchangeノードを追加して、入力にswitchの条件2の出力を接続します。このchangeノードの出力はtp buzzerの入力に接続します。

ノード設定

追加したchangeノードを開いて、ブザーに渡すメッセージを設定します。

msg.payload.ptnに2、msg.payload.timeに10をセットします。

 

実行

デプロイをクリックしてフローを実行しましょう。

明るくなったときは短い音、暗くなったときは長い音でブザーが鳴ります。

 

Step 4 – メールで通知する

ブザーを鳴らすと同時に通知メールを送信します。

遠隔で部屋の照明オンオフを検知することができます。

所要時間:15分

 

ノード配置

functionノードとemail送信ノードを配置して、tp buzzerの前の2つのchangeノードの出力をfunctionの入力に、functionの出力をemailの入力に接続します。

ノード設定

functionのコードに以下のjavascriptを書きます。

changeノードから渡されたmsg.payload.ptnの値で明るくなった/暗くなったを判断してメールの文面を設定しています。

email送信サーバーはデフォルトのgmailを使用します。

設定方法は環境モニターのチュートリアルを参照してください。

実行

デプロイをクリックしてフローを実行しましょう。

明るくなったとき「誰か来た」、暗くなったとき「誰もいなくなった」という文面のメールが送信されます。

 

Step 5 – しきい値を設定する

ここまでのフローでは、単純に照度が2倍または半分になったかで明るくなった/暗くなったを判定していました。もともと暗い状況のとき、照度の微増減(2から5に変化したなど)でも反応するため、無視したい程度の小さな変化でもメールが送信されてしまいます。

しきい値を使って、明るい/暗いの境界を設定しましょう。

所要時間:10分

 

ノード配置

switchノードの条件1、2それぞれの出力の後ろに、さらに1つづつswitchノードを追加します。

これらの追加したswitchノードでしきい値の判定を行います。

 

ノード設定

条件1の出力に追加したswitchノード(上図では上の列のswitch)にmsg.valueが40以上という条件を設定します。

条件2の出力に追加したswitchノード(上図では下の列のswitch)にmsg.lastvalueが40以上という条件を設定します。

 

ここで追加した2つのswitchノードは、照度40以上なら明るいと判定する処理を行っています。

今回の計測は明るい&照度が前回の2倍超なら明るくなった。前回の計測は明るい&照度が前回の半分未満なら暗くなった。と判定されます。

 

実行

デプロイをクリックしてフローを実行しましょう。

このフローでしきい値とした照度20はとくに根拠のある値ではありません。設置する場所の環境によってしきい値を調整してみてください。