BLE Beacon Scannerを使ったNode-REDフローをOpenBlocks IoTに移植する方法

RaspberryPIやReTerminalをサーバーとしてBLEセンサーのデータを受信するNode-REDフローを作成する場合、BLE Beacon Scanner というNode-REDのライブラリーを使うことが多いと思います。

軽い開発段階ではこれで問題ないのですが、現場に入れる際はOpenBlocksIoTをサーバーとして採用するケースがあり、この場合はBLE Beacon Scannerを使うことができないので、その移植方法をご紹介します。

*OpenBlocksIoTのFW5で設定しています。

OpenBlocksでBLEセンサー受信の設定

拡張機能IoTデータをクリック

Dev登録のBT I/Fを使用する

ぷらっとほーむ社で登録のあるBLEデバイス類を使用する場合は、この後にBLE登録の流れになるのですが、BLE BeaconScannerで作成されたNode-REDフローでは下記のようにBufferデータを使用しているため、別の方法にする必要があります。

とりあえず、IoTデータタブでPD RepearterとPD Handler BLEを使用するに設定

デフォルトモジュール起動制御も同様にします。

送受信設定では、ドメインソケット(Isocket)を使用するにして、インターバルを1秒、有効時間を2秒とします。

ここが重要なのですが、BLE Beacon Scannerと同じように受信するには「ビーコン送信設定」を使います。

また、ペイロード管理ではdataにチェックマークをいれます。

デバイス番号”device_beacon”をNode-REDで使用するので覚えておきます。

Node-REDの設定

Node-REDのフローは上記の様になります。

ipc-inノードのPathにはビーコン設定のデバイス番号を上記のように記載します。

その後にjsonノードを挿入。JavaScriptオブジェクトに変換とします。

そのままだと他の通信も受信してしまうので、SwitchノードにBLEセンサーのMACアドレスを入れてフィルターをかけます。この時MACアドレスは”:”を抜いた形式で記述します。

BLE BeaconScannerでOtherに入るデータは先頭の10文字を抜いたものになるので、ここで合わせます。

// payloadを16進数の文字列として受け取る
let hexString = msg.payload;

// 文字列から直接Bufferオブジェクトを生成
let buffer = Buffer.from(hexString, 'hex');

// Bufferオブジェクトをpayloadにセット
msg.payload = { other: buffer };

// 変更したmsgを次のノードへ渡す
return msg;

ここでBLE BeaconScannerと同じようにpayload.otherにbufferとして格納する処理をします。

BLE BeaconScannerでohterのデータを使っていたフローはこの処理をすることで移植できます。other以外が必要であれば自分で設定してみてください。

まとめ

以上、「BLE Beacon Scannerを使ったNode-REDフローをOpenBlocks IoTに移植する方法」について紹介しました。

弊社スマートライトではNode-REDを使ったアプリケーションの開発を行っております。今まで社内で一人でNode-REDの開発をしていて、外部の技術顧問に開発をサポートして欲しいというお話から、アプリケーション開発の依頼まで、どうぞ、お気軽にご相談ください。