この記事はobniz Advent Calendar 2020の8日目の記事になります。
”現実世界をオブジェクト化する”をうたう”obniz(オブナイズ)”は、設備とIoT機器のゲートウェイとしてとても興味があり実際にビジネスにも使いたいと思っています。
↓ 過去記事
obnizを設備とIoT機器のゲートウェイとして期待している件|デジタルライト(Digital-light.jp)
しかしながら、購入していくつか試してからそのままになっているので、私と同世代の方々が共通で関心のある分野、「高齢者のゆるい見守りに!EnOcean環境センサとobnizを使った見守りシステム」について紹介したいとおもいます。
obnizのすごいところ
obnizのすごいところ、それはインターネットに接続さえしていれば空間に縛られずにデータを送ったり受け取ったりできること。
私のやっている設備の制御は遠隔からの監視や状態の変更が求められることが多いのですが、obnizを使えば、そこそこ簡単なことは、そこそこ簡単に実現できちゃいます。
なので、今回はさくっと簡単なケースをご紹介して、これを発展させたらどんなふうに仕事につながるかのネタになればいいなぁと思っております。
今回、obnizを使ってやること

今回、obnizを使ってやることは、
太陽電池で自己発電するEnOceanの無線環境センサーをつかって、温度、湿度、照度、マグネットコンタクの状態をローカルのラズパイで動かすNode-REDで取得、そこからobnizノードを使って遠隔地にあるobnizのスクリーンに表示させる。
という流れです。
EnOcean環境センサーについて
今回使うEnOcean環境センサーについて解説します。

EnOcean環境センサーは、2.4GHzのBLEタイプ(STM550B)と、928MHzのEnOceanタイプ(EMSIJ)の2種類があります。
どちらも取得できるセンサーデータは同じですが、違いは、BLEタイプはBLEで通信できれば受信可能ですが、928Mhzタイプは別途EnOceanのレシーバーが必要になることと、STM550Bはモジュールタイプなのでカバーなし、EMSIJはカバーありとなっています。
1日200luxで6時間以上の光を受けることができれば、本体の太陽電池で稼働することができ、温度、湿度、照度、加速度、加速度の専用センサーとマグネットコンタクトが内蔵され、60秒ごとに状態を送信するという、電池交換などのメンテがいらないとても使いやすいセンサーです。
ちなみに今回はスイッチサイエンスさんで販売しているBLEタイプを使って解説します。
↓ 商品の詳細についてこちらをご参照ください。
↓ 参考過去記事
Node-REDのフローについて

Node-REDのフローは上記の通り。
↓ こちらのフローです。
[{"id":"dfd8995c.6a0588","type":"obniz-function","z":"da22126.e0222f","obniz":"4ea9cf05.2f90f","name":"obniz","code":"var value = msg.payload;\r\n\r\nobniz.display.clear();\r\n\r\n//obniz.display.print(value);\r\n\r\nobniz.display.print('Temp:'+value['Temp']+'\\n');\r\nobniz.display.print('Humid:'+value['Humid']+'\\n');\r\nobniz.display.print('Lux:'+value['Lux']+'\\n');\r\nobniz.display.print('Contact:'+value['Contact']+'\\n');","x":590,"y":280,"wires":[[]]},{"id":"4ea9cf05.2f90f","type":"obniz","z":"","obnizId":"00000000","deviceType":"obnizboard","name":"","accessToken":"","code":""}]
では、解説していきます。
BLE Beacon ScannerからEnOcean電文デコードまで

環境センサーからのデータを受信するには、”node-red-contrib-blebeacon-scanner”ノードを利用します。
↓このライブラリのインストールはこちらの記事を参考にしてください。
チュートリアル:ラズパイにNode-REDを入れてEnOcean(BLE)の環境センサーを接続する2/2|デジタルライト(Digital-light.jp)
さて、そのままだと非常に多くのBLEデータを受信しますので、Switchノードを使ってフィルターをかけます。

環境センサーの裏側に表示されているIDをチェック。

Switchノードのプロパティに、”msg.payload.id”として先程のIDを入力。

同じメッセージが複数回飛んでくるので、delayノードを使って流量制限をします。

受け取ったメッセージをfunctionノードを使ってデコードします。
var Packet = msg.payload.other var Temp = (Packet[8]*256+Packet[7])/100 var Humid = Packet[10]/2 var Lux = Packet[13]*256+Packet[12] var Energy = Packet[22]/2 var contact = Packet[20] if ( contact == 2 ) { contact = "Close" } else { contact = "Open" } var data = { "Temp": Temp, "Humid": Humid+'%', "Lux": Lux+'lux', "Contact": contact, "Energy": Energy+'%' } msg.payload = data return msg
functionノードには上記のコードを利用ください。
* ちなみに、BLEではなく928MHzのEnOcean版の方については、杉山寛幸さんからコードをいただいておりますので、ご興味ある方は連絡ください。
obnizノード
ここからは結果をobnizに出力するフローです。

Node-REDの”パレットの管理”から”node-red-contrib-obniz”をインストール。

obniz functionノードを使います。

obnizには、ご自分がお持ちのobnizのIDを入力してください。

var value = msg.payload; obniz.display.clear(); //obniz.display.print(value); obniz.display.print('Temp:'+value['Temp']+'\n'); obniz.display.print('Humid:'+value['Humid']+'\n'); obniz.display.print('Lux:'+value['Lux']+'\n'); obniz.display.print('Contact:'+value['Contact']+'\n');
obnizに表示させるコードは上記のようにしました。
フローの確認

BLE Beacon Scannerとobnizの両方とも緑になっていれば、正常に動いております。
結果


結果はこのように、1分ごとに環境センサーから送られた、温度、湿度、照度、マグネットコンタクトの状態をobnizで表示することができます。

また、この環境センサーにはマグネットコンタクトがついており、上の写真の位置にマグネットを近づけると”Open”と”Close”のデータが即時に送られます。

まとめ
以上、太陽電池で自己発電するEnOceanの無線環境センサーをつかって、温度、湿度、照度、マグネットコンタクのの状態をローカルのラズパイで動かすNode-REDで取得、そこからobnizノードを使って遠隔地にあるobnizのスクリーンに表示させるの方法をご紹介しました。
オフィスや家庭でIoTセンサーを使う場合、なにげに電池の交換ってかなり手間だったりしますが、これであればその手間からは開放されます。
また、遠く離れた場所に済んでいる高齢の両親宅で、センサーを必ず使うドアに設置し、開閉したらマグネットコンタクトで情報を拾い、ラズパイでそのデータを受け取ることで、ネットさえつながっていれば安価に【ゆる〜い見守り】システムを構築することができます。
もし連絡が取れなくても、ドアが最後にいつ開閉されたか?部屋の明るさや温度はどれぐらいか?といった情報があれば、問題ないけど電話に気づかなかっただけなのか、なにかあったのではないか?などといった推測のヒントにもなります。
本当は監視カメラいれたいところだけど、さすがにそれは抵抗ありますからねぇ。
ということで、EnOceanのセンサーやobnizを使って、なにかお役に立てれば幸いです。
ではでは!