以前の記事でSensorTagのデータが手軽に取れるようになったので、温度湿度データをRaspberry Pi Node-REDでAmbientに送るメモです。
今回の仕組み
SensorTag BluetoothをRaspberry Pi Node-REDで扱うメモ をもとにRaspberry Pi Node-REDで以下のようなフローを作ります。
SensorTagの温度湿度データを10秒ごとに送る仕様にしています。
変化が分かるように時間短めにしていますが、普段であればもっと間隔が広くてもいいでしょう。
設定
SensorTagノード
SensorTagノードは温度と湿度のチェックボックスだけチェックしておきます。
switchノード
switchノードは念のためtemperature自体の値の有無をチェックします。
今回は狙った値のみ取得していますが、複数のセンサーを取得しようとするとバラバラ来るので温度湿度データだけ間引くようにしています。
changeノード
changeノードは温度をd1の値に割り当て、湿度をd2に割り当てることで、Ambientでデータを貯めてもらえるようにします。
以前は、functionノードで律儀に書いてましたが、changeノードのほうが何をしているかが分かりやすくて良いですね。
triggerノード
triggerノードは10秒ごとに送る設定です。
Ambientノード
ChannelIdとWriteKeyにはAmbientの設定を入力します。
ここで準備完了です。
動かしてみる
デプロイをして実際に動かしてみましょう。
しばらく待って接続が開始されたら、
こちらのdebugノードに流れている内容を見てみます。
このように10秒ごとに値が発生して、同時にAmbientにも送られています。
Ambientサイトで値を表示してみます。
このように青が温度、赤が湿度で表示されます。
ちょっとSensotTagを手にもっていると、すこし手の湿り気に反応したようです。変化していますね。
今回のNode-REDフロー
今回のNode-REDフローは以下に置いておきます。SensotTagノードをインストールした上で、このノードインポートすれば使えます。
なお、AmbientのchannelId、writeKeyについては空欄にしてあるのでご自分のchannelId、writeKeyを入れてみて下さい。
[{"id":"9256982.9c33b68","type":"Ambient","z":"38f9aa23.c3e836","name":"","channelId":"","writeKey":"","x":1071,"y":350,"wires":[]},{"id":"537205a6.4191cc","type":"sensorTag","z":"38f9aa23.c3e836","name":"","topic":"sensorTag","uuid":"","temperature":false,"humidity":true,"pressure":false,"magnetometer":false,"accelerometer":false,"gyroscope":false,"keys":false,"luxometer":false,"x":103,"y":332,"wires":[["47ccd799.495578"]]},{"id":"463b22e6.7d99cc","type":"debug","z":"38f9aa23.c3e836","name":"","active":false,"console":"false","complete":"false","x":563,"y":297,"wires":[]},{"id":"18494484.66f09b","type":"change","z":"38f9aa23.c3e836","name":"温度 d1・湿度 d2 を割り当て","rules":[{"t":"set","p":"payload.d1","pt":"msg","to":"payload.temperature","tot":"msg"},{"t":"set","p":"payload.d2","pt":"msg","to":"payload.humidity","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":623,"y":349,"wires":[["c212dbf4.4594c8"]]},{"id":"47ccd799.495578","type":"switch","z":"38f9aa23.c3e836","name":"temperature 有無判定","property":"payload.temperature","propertyType":"msg","rules":[{"t":"nnull"}],"checkall":"true","outputs":1,"x":348,"y":349,"wires":[["18494484.66f09b","463b22e6.7d99cc"]]},{"id":"70765daf.43f0b4","type":"debug","z":"38f9aa23.c3e836","name":"","active":true,"console":"false","complete":"payload","x":1081,"y":296,"wires":[]},{"id":"c212dbf4.4594c8","type":"trigger","z":"38f9aa23.c3e836","op1":"","op2":"","op1type":"nul","op2type":"payl","duration":"10","extend":false,"units":"s","reset":"","name":"10 secごとに送る","x":882,"y":350,"wires":[["70765daf.43f0b4","9256982.9c33b68"]]}]
磁石センサー例
この流れで磁石センサーも試してみました。
SensorTag BluetoothをRaspberry Pi Node-REDで扱うメモでも言及していましたが、磁石センサーも使えます。
Button pressをオンにすると取得できまして、磁石がついてない状態をtrueなのでd3に1を送り、磁石がついてない状態をfalseなのでd3に0を送りAmbientでグラフにしてみました。
磁石センサーに磁石を近づけたり離したりしたときのグラフです。上手く反応しています。磁石センサーは、磁石を付けたオブジェクトのなんらかの近接・移動といった判定ができるので、可視化にはもってこいですね。
ということで、SensorTagの温度湿度データをRaspberry Pi Node-REDでAmbientに送ってみました。
センサーデータが取り出しやすく可視化がすぐにできるということは、それを元にして解決したいことへの対策や改善の一手が早く打てるということなので、この事例が試すことで片鱗が見え、ワクワクします。
それではよき、SensorTag & Node-RED & Ambient Life を。