2020年8月版 Raspberry PiにNode-REDを入れてEnOcean(BLE)の環境センサ-STM550Bと自己発電スイッチEWSDBをつなげる方法のチュートリアル。今回が2回目です。
↓ 第1回目はこちら
チュートリアル:ラズパイにNode-REDを入れてEnOcean(BLE)の環境センサーを接続する1/3


上記EnOceanの環境センサーモジュールSTM550Bと自己発電スイッチEWSDBはスイッチサイエンスさんで販売しています。
法人の方はスマートライト株式会社までお問い合わせください。

まずはラズパイでターミナルを立ち上げ、
$ node-red-start
で、Node-REDを立ち上げてやっていきましょう。
BLEインストール
Node-REDでBLEの信号を受信できるようにするため、”node-red-contrib-beacon-scanner”というライブラリをインストールします。
node-red-contrib-beacon-scanner (node) – Node-RED
ここから先は失敗した例も記述しているので、私が間違えた部分をスキップされる方は、正しいやり方のリンクをクリックしてください。
Node-REDの右上の画面から、①メニューボタンをクリックして現れる中から②”パレットの管理”をクリックします。

①”ノードを追加”のタブをクリックして、②フォームの中に”ble beacon”と入力します。
すると、”node-red-contrib-beacon-scanner”が標示されるので、③”ノードを追加”をクリックします。

このようなウィンドウが標示されるので”追加”をクリック。

Node-REDの”機能”のメニューの中に”BLE Beacon Scanner”のノードが追加されました。
テストのフローを作ってみましょう。

”共通”の中にある”debug”ノードと先程の”BLE Beacon Scanner”ノードをドラッグ&ドロップして、それぞれの2つのノードをつなげます。

右上にある①虫のマークをクリックした後、②”デプロイ”のボタンをクリックします。

エラーが出ました。実は”node-red-contrib-beacon-scanner”は、この方法だとインストールできません。
“node-red-contrib-beacon-scanner”のサイトをチェックしてみます。
node-red-contrib-beacon-scanner (node) – Node-RED

このライブラリを動かすためには”Noble”というnode.jsのモジュールをインストールする必要があります。

$ sudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev
こちらのコマンドをラズパイのターミナルで入力

Yをいれてインストール。

インストールが完了したらこちらもターミナルで入力
$ sudo setcap cap_net_raw+eip $(eval readlink -f `which node`)
再度、Node-REDをスタートさせます。

先程インストールした”node-red-contrib-beacon-scanner”が消えているようです。


これで削除してもフローにノードが残っているので削除できません。

“BLE Beacon Scanner”を削除して”デプロイ”

パレットの管理から削除をクリックすると、無事にライブラリが削除されました。

再び、”ノードを追加”から”node-red-contrib-beacon-scanner”をインストールします。

これでデプロイ。
あれ、やっぱりだめですね。

Node-REDを再起動しても同じでした。
フローも、ライブラリも削除します。
ラズパイのターミナルからインストールします。

$ npm install node-red-contrib-beacon-scanner

いろいろワーニングは出ましたが、インストールはできたようです。再びNode-REDを起動。
あらためて、”パレットの管理”から”node-red-contrib-beacon-scanner”をインストールします。

今度はどうでしょう?

BLE Beacon Scannerとdebugノードをつなげてデプロイを行ったところ、無事にデプロイが成功しました。
BLE Beacon Scannerインストールの正しい手順
こちらが、BLE Beacon Scannerライブラリをインストールする正しい手順です。
1. ラズパイのターミナルから、ライブラリをインストールする。
$ sudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev $ sudo setcap cap_net_raw+eip $(eval readlink -f `which node`)
2. ラズパイのターミナルからnode-red-contrib-beacon-scannerをインストールする
$ npm install node-red-contrib-beacon-scanner
3. Node-REDのパレットの管理から”node-red-contrib-beacon-scanner”を追加する
BLE Beacon Scannerで受信したデータをdebugで確認

LE Beacon Scannerで受信したデータをdebugで確認すると、ひっきりなしにデータを受信しているのがわかります。これは、私達のまわりにBLEの通信をおこなうデバイスが多いためです。
この中から、自分のデバイスからのデータだけ受信できるようにフィルターをかけてみましょう。
環境センサーSTM550Bと自己発電スイッチEWSDBのIDを確認
環境センサーSTM550Bと自己発電スイッチEWSDBのIDは製品の後ろ側に標示されています。
環境センサー「STM550B」のID
自己発電スイッチ「EWSDB」のID
上記のIDをNode-REDのswitchノードに入れてフィルターします。

フローはこちら

switchノードにはこのように各デバイスのIDを入れます。
スイッチの方を試してみましょう。

スイッチを押して離すと複数のメッセージが送られます。実はEnOceanは一度に3回同じメッセージを送ります。なので、重複分はdelayノードを使って削除しましょう。

delayノードを入れたフローはこのようになります。

delayノードは、動作をメッセージの流量制限にして、中間メッセージを削除にします。
これでスイッチを押します。

押した時と離したときで1つづつデータが送られるようになりました。
ここで、もうすこし詳しくデータをみてみます。

ボタンを押した時

ボタンを離した時。
自己発電スイッチ「EWSDB」の場合は、このrawデータの6番目が押された(離された)ボタンの値になります。なので、以下のコードをfunctionノードに記載してデータを取得します。


全体のフローはこのようになります。
自己発電ボタン EWSDBのデータについて

4つのボタンを上のような番号とすると、押した時、離した時に送られるデータは下表のとおりとなります。

このボタンは2つのボタンを同時に押すと、送られるデータも異なります。なので、ボタンとしては8通り、押した時、離した時で合計16の異なるデータを受けることができます。
環境センサー STM550Bのデータについて
STM550Bのデータについてはちょっと複雑なので、結果だけ書きます。詳しい解析方法については、STM550Bマニュアル(英語)の42ページをご覧ください。

フローはこのようになります。

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+'°C', "Humid": Humid+'%', "Lux": Lux+'lux', "Contact": contact, "Energy": Energy+'%' } msg.payload = data return msg
functionノードにはこのようにします。

このようにSTM550Bからのデータを取得することができます。
↓ 参考
EnOcean BLE環境センサー(STM550B)とスイッチ(PTM215B)を試してみた。 – Qiita
まとめ
以上でEnOceanのBLEデバイス、環境センサーと自己発電スイッチからのデータをNode-REDで受信して、必要な値を取得する方法をご紹介しました。
環境センサーであるSTM550Bについては、1日8時間200luxの明るさが取得できる環境であれば、太陽電池だけで運用できますので、たまにやってくるセンサー類の電池交換の手間から開放されるのはとても便利です。
また、自己発電スイッチは、スマートホームやオフィスなどで、なにかデバイス類を操作する際、わざわざスマートフォンなどを使わなくても、コマンドをおくるきっかけに使うこともできます。
ぜひ、EnOceanデバイスの便利さを試していただけると幸いです。
EnOceanの環境センサーモジュールSTM550Bと自己発電スイッチEWSDBはスイッチサイエンスさんで販売しています。