ABLIC社のバッテリレス漏水センサCLEAN-Boostは水に濡れることで発電しBLEで状態を送るという電池交換も信号線配線も必要無いセンサデバイスです。
CLEAN-Boost® バッテリレス漏水センサ – ABLIC Inc.
今回、弊社にてそのセンサデータを受信するNode-REDアプリケーションを作成いたしましたので方法をご紹介します。
使用機器
今回使用する機器は下記のとおり。
- ABLIC社のバッテリレス漏水センサA (03-02458)
- ABLIC社のバッテリレス漏水センサB (03-02303)
- ReTerminal(Node-REDサーバー&BLEゲートウェイ)
- WinPC
- Adafruit ブルーフルーツLE Sniffer Bluetooth低エネルギー(BLE 4.0) nRF51822 v2.0
WinPCとBluetoothSnifferはWireSharkでデータを確認するために使用しました。
使用方法は下記記事参照ください。
Bluefruit LE SnifferでBLEデータをWiresharkで確認する方法|デジタルライト(Digital-light.jp)
ABLIC社のバッテリレス漏水センサデータをフィルタリング
BLEデータ受信にはnode-red-contrib-blebeacon-scanner (node) – Node-REDを利用しますが、そのまま使うとあらゆるBluetoothデータを受信するのでフィルタをかける必要があります。
本当はデバイスごとのMACアドレスがわかると確実に選別できるのですがセンサ自体にはMajor/Minorしか表示されていないのでその方法は使えません。
最初、WireSharkを使い目GREP(根性で探すこと)でABLICセンサを見つけたところBLE Beacon Scannerで受信するbufferデータの長さは25だったのでそれでフィルタリングするフローを作成しました。
[{"id":"40b48a77636a6525","type":"BLE Beacon Scanner","z":"56c61c2696a160b0","name":"","x":200,"y":60,"wires":[["75a71ad120b66583"]]},{"id":"70b298d288cc7825","type":"debug","z":"56c61c2696a160b0","name":"Length25","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":540,"y":180,"wires":[]},{"id":"08df51133434caa8","type":"switch","z":"56c61c2696a160b0","name":"","property":"len","propertyType":"msg","rules":[{"t":"eq","v":"25","vt":"num"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":310,"y":200,"wires":[["70b298d288cc7825"],["f0c976bcc167aa1f"]]},{"id":"75a71ad120b66583","type":"function","z":"56c61c2696a160b0","name":"ChkDataLength","func":"var data = msg.payload.other;\n\nvar len = data.length;\n\nmsg.len = len;\n\nreturn msg;\n","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":220,"y":140,"wires":[["08df51133434caa8"]]},{"id":"f0c976bcc167aa1f","type":"debug","z":"56c61c2696a160b0","name":"Others","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":530,"y":240,"wires":[]}]
なので上のようなフローを作成し下記の2つのデータを受信しました。
これだけだとABLIC社の漏水センサデータだとは限定できないので、WireSharkを使い下記のようにフィルタリングします。
btle.advertising_address == c5:a2:65:80:b7:56
フィルタリングされたデータを確認。
間違いなくABLIC社の漏水センサデータと確認できました。
もう1つのデータもWireSharkで確認。
btle.advertising_address == fc:c8:13:08:bf:09
こちらもABLIC社の漏水センサデータであることが確認できました。
WireSharkでTelegram確認
漏水センサの仕様書はこちら。
WireSharkのこの部分が仕様書の部分に該当します。
Node-REDで受信したデータを確認すると、4~19番目のデータがUUIDになり、20,21番目でMajor Number、22,22番目でMinor Numberとなります。
データ受信フロー
[{"id":"40b48a77636a6525","type":"BLE Beacon Scanner","z":"56c61c2696a160b0","name":"","x":200,"y":60,"wires":[["75a71ad120b66583"]]},{"id":"08df51133434caa8","type":"switch","z":"56c61c2696a160b0","name":"Length25でフィルタ","property":"len","propertyType":"msg","rules":[{"t":"eq","v":"25","vt":"num"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":460,"y":200,"wires":[["31d84147c777d276"],[]]},{"id":"75a71ad120b66583","type":"function","z":"56c61c2696a160b0","name":"ChkDataLength","func":"var data = msg.payload.other;\n\nvar len = data.length;\n\nmsg.len = len;\n\nreturn msg;\n","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":340,"y":140,"wires":[["08df51133434caa8"]]},{"id":"31d84147c777d276","type":"function","z":"56c61c2696a160b0","name":"データ整理","func":"// MACアドレス取得\nvar Mac = msg.payload.id;\n\n// センサーからのbufferデータ\nvar data = msg.payload.other;\n\n// Majorを計算\nvar Major_MSB = data[20];\nvar Major_LSB = data[21];\nvar Major = Major_LSB + Major_MSB*256;\n\n// Minorを計算\nvar Minor_MSB =data[22];\nvar Minor_LSB =data[23];\nvar Minor = Minor_LSB + Minor_MSB * 256;\n\n// 出力\nmsg.payload = {\n \"Mac\" : Mac,\n \"Major\": Major,\n \"Minor\": Minor\n}\n\nreturn msg;\n\n","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":590,"y":260,"wires":[["ec1319dff963fbea"]]},{"id":"ec1319dff963fbea","type":"debug","z":"56c61c2696a160b0","name":"debug","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":670,"y":320,"wires":[]}]
MACアドレス、Major,Minorを取得フローは上の通り。
データ整理のfunctionノードはこのようにしました。
出力についてはこのようにMACアドレス、Major,Minorが確認できます。
この漏水センサは漏水を検知した時、もしくは、死活監視タイマによって信号を受信するので、データを受信したときはそのいずれかになります。
そのため、アプリケーション側で受信したデータが漏水なのか死活監視タイマによるものかを判断する処理をする必要があります。
まとめ
以上、ABLIC社のバッテリレス漏水センサCLEAN-BoostのデータをNode-REDで受信する方法について紹介しました。
弊社ではこちらのセンサを使用したアプリケーション開発も行っておりますので、ご興味ありましたら、気軽にご連絡ください。