概要
照度センサーを使って室内の照明のオンオフを監視。メールで通知します。
このチュートリアルでは、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ノードを開き、メッセージとコンテキストの処理を設定します。
- msg.payload(#28 照度センサーの値)を、msg.valueに代入。
- flow.lastvalueを、msg.lastvalueに代入。
- msg.valueをflow.lastvalueに代入。
- 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の値で明るくなった/暗くなったを判断してメールの文面を設定しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
var comment = ''; if (msg.payload.ptn == 2) { comment = "誰もいなくなった"; } else if (msg.payload.ptn == 1) { comment = "誰か来た"; } var lf = String.fromCharCode(10); var now = new Date(); var tstamp = "" + now.getFullYear() + "-" + ('0' + (now.getMonth() + 1)).slice(-2) + "-" + ('0' + now.getDate()).slice(-2) + " " + ('0' + now.getHours()).slice(-2) + ":" + ('0' + now.getMinutes()).slice(-2) + ":" + ('0' + now.getSeconds()).slice(-2); msg.payload = comment + lf + tstamp + lf + '照度:' + msg.value; return msg; |
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はとくに根拠のある値ではありません。設置する場所の環境によってしきい値を調整してみてください。