EnOcean

チュートリアル:ラズパイにNode-REDを入れてEnOcean(BLE)の環境センサーを接続する2/2

2020年8月版 Raspberry PiにNode-REDを入れてEnOcean(BLE)の環境センサ-STM550Bと自己発電スイッチEWSDBをつなげる方法のチュートリアル。今回が2回目です。

↓ 第1回目はこちら
チュートリアル:ラズパイにNode-REDを入れてEnOcean(BLE)の環境センサーを接続する1/3

EnOcean環境センサー STM550B
EnOcean 自己発電スイッチ EWSDB

上記EnOceanの環境センサーモジュールSTM550Bと自己発電スイッチEWSDBはスイッチサイエンスさんで販売しています。

EnOcean STM 550B マルチセンサーモジュール(BLE) – スイッチサイエンス

EnOcean Easyfit Single ダブルロッカー壁面スイッチ EWSDB(BLE) – スイッチサイエンス

法人の方はスマートライト株式会社までお問い合わせください。

スマートライト株式会社

08 16

まずはラズパイでターミナルを立ち上げ、

$ node-red-start

で、Node-REDを立ち上げてやっていきましょう。

BLEインストール

Node-REDでBLEの信号を受信できるようにするため、”node-red-contrib-beacon-scanner”というライブラリをインストールします。

node-red-contrib-beacon-scanner (node) – Node-RED

ここから先は失敗した例も記述しているので、私が間違えた部分をスキップされる方は、正しいやり方のリンクをクリックしてください。

08 16
Node-REDの右上の画面から、①メニューボタンをクリックして現れる中から②”パレットの管理”をクリックします。

08 16

①”ノードを追加”のタブをクリックして、②フォームの中に”ble beacon”と入力します。

すると、”node-red-contrib-beacon-scanner”が標示されるので、③”ノードを追加”をクリックします。

08 16

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

08 16

Node-REDの”機能”のメニューの中に”BLE Beacon Scanner”のノードが追加されました。

テストのフローを作ってみましょう。

08 16

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

08 16

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

08 16

エラーが出ました。実は”node-red-contrib-beacon-scanner”は、この方法だとインストールできません。

“node-red-contrib-beacon-scanner”のサイトをチェックしてみます。

node-red-contrib-beacon-scanner (node) – Node-RED

08 16

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

08 16
$ sudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev

こちらのコマンドをラズパイのターミナルで入力

08 16

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

08 16

インストールが完了したらこちらもターミナルで入力

$ sudo setcap cap_net_raw+eip $(eval readlink -f `which node`)

再度、Node-REDをスタートさせます。

08 16

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

08 16 08 16

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

08 16

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

08 16

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

08 16

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

08 16

これでデプロイ。

あれ、やっぱりだめですね。

08 16

Node-REDを再起動しても同じでした。

フローも、ライブラリも削除します。

ラズパイのターミナルからインストールします。

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

いろいろワーニングは出ましたが、インストールはできたようです。再びNode-REDを起動。

あらためて、”パレットの管理”から”node-red-contrib-beacon-scanner”をインストールします。

08 16

今度はどうでしょう?

08 16

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で確認

08 16

LE Beacon Scannerで受信したデータをdebugで確認すると、ひっきりなしにデータを受信しているのがわかります。これは、私達のまわりにBLEの通信をおこなうデバイスが多いためです。

この中から、自分のデバイスからのデータだけ受信できるようにフィルターをかけてみましょう。

環境センサーSTM550Bと自己発電スイッチEWSDBのIDを確認

環境センサーSTM550Bと自己発電スイッチEWSDBのIDは製品の後ろ側に標示されています。

環境センサー「STM550B」のID
08 16

自己発電スイッチ「EWSDB」のID
08 16

上記のIDをNode-REDのswitchノードに入れてフィルターします。

08 16

フローはこちら

08 16

switchノードにはこのように各デバイスのIDを入れます。

スイッチの方を試してみましょう。

08 16

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

08 16

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

08 16

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

これでスイッチを押します。

08 16

押した時と離したときで1つづつデータが送られるようになりました。

ここで、もうすこし詳しくデータをみてみます。

08 16

ボタンを押した時

08 16

ボタンを離した時。

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

08 16 08 16

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

自己発電ボタン EWSDBのデータについて

08 16

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

08 16

このボタンは2つのボタンを同時に押すと、送られるデータも異なります。なので、ボタンとしては8通り、押した時、離した時で合計16の異なるデータを受けることができます。

環境センサー STM550Bのデータについて

STM550Bのデータについてはちょっと複雑なので、結果だけ書きます。詳しい解析方法については、STM550Bマニュアル(英語)の42ページをご覧ください。

STM550Bマニュアル(英語)

08 16

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

08 16
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ノードにはこのようにします。

08 16

このようにSTM550Bからのデータを取得することができます。

↓ 参考
EnOcean BLE環境センサー(STM550B)とスイッチ(PTM215B)を試してみた。 – Qiita

まとめ

以上でEnOceanのBLEデバイス、環境センサーと自己発電スイッチからのデータをNode-REDで受信して、必要な値を取得する方法をご紹介しました。

環境センサーであるSTM550Bについては、1日8時間200luxの明るさが取得できる環境であれば、太陽電池だけで運用できますので、たまにやってくるセンサー類の電池交換の手間から開放されるのはとても便利です。

また、自己発電スイッチは、スマートホームやオフィスなどで、なにかデバイス類を操作する際、わざわざスマートフォンなどを使わなくても、コマンドをおくるきっかけに使うこともできます。

ぜひ、EnOceanデバイスの便利さを試していただけると幸いです。

EnOceanの環境センサーモジュールSTM550Bと自己発電スイッチEWSDBはスイッチサイエンスさんで販売しています。

EnOcean STM 550B マルチセンサーモジュール(BLE) – スイッチサイエンス

EnOcean Easyfit Single ダブルロッカー壁面スイッチ EWSDB(BLE) – スイッチサイエンス

ABOUT ME
中畑 隆拓
スマートライト㈱ 代表取締役。DALIやKNX導入のコンサルティング・コンフィグレーション・機器の販売、AI-IoTを組み合わせたシステムの提案を行っています。