EnOcean BLE環境センサー(STM550B)とスイッチ(PTM215B)を試してみた

# はじめに

<a href="https://node-red.connpass.com/event/181754/">「実践Node-RED活用マニュアル」書籍出版記念イベント</a>で<a href="https://twitter.com/nakachon">なかちょん</a>さんが紹介していたEnOcean BLE <a href="https://www.switch-science.com/catalog/6525/">環境センサー(STM550B)</a>と<a href="https://www.switch-science.com/catalog/6526/">スイッチ(PTM215B)</a>を試してみた。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/813e0636-34f0-6792-ea0a-805539c45995.png" width="45%"> <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/b6340900-0dc7-1954-120f-f7e36e3860ff.jpeg" width="38%">

# BLEデバイスの動作
環境センサー(STM550B)もスイッチ(PTM215B)もBLEブロードキャストモードでアドバタイズパケットにデータが含まれるのでラズパイでスキャンするだけで良い。
![スクリーンショット 2020-08-09 13.34.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/82244acb-c2e7-796e-595d-26f1d775b901.png)

# パケットキャプチャー
最初は<a href="https://www.switch-science.com/catalog/3347/">Bluefruit LE Sniffer</a>を使用してBLEパケットデータをキャプチャーして動作を確認しました。
環境センサー(STM550B)はデフォルトで1分毎にデータを送信(1回の送信毎に同じデータを3回送信)し、スイッチ(PTM215B)は押す/離す度に同じデータを2回(押す→離すの時間間隔が短い場合、押す操作のデータ送信が2回になる)、または、3回送信することを確認しました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/40b80534-86ac-478d-a69b-4fd41e011136.png" width="40%">
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/5db965a1-acf5-9af6-4505-1c6854c85de4.png" width="50%">
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/fc3d9061-e801-e85c-a799-126a1e5caa28.png" width="100%">

# 構成
環境センサー(STM550B)はラズパイ上のNode-REDでBLEデータを受信し、センサーデータを抽出・加工して<a href="https://ambidata.io/">Ambient</a>へ送信し、データを可視化してみました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/93f38f7d-c4b5-ea01-2443-48f1bb174da9.png" width="75%">

スイッチ(PTM215B)はラズパイ上のNode-REDでBLEデータを受信し、Sonosスピーカーを操作してみました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/f35e215f-7a7b-ea79-d122-809acb83d66d.png" width="75%">

# Node-REDフロー

### 必要なノード

- node-red-contrib-blebeacon-scanner
- node-red-contrib-ambient
- node-red-contrib-better-sonos

BLE beacon scannerノードで環境センサー(STM550B)とスイッチ(PTM215B)のデータを受信します。
そのあと、BLEデバイスIDの情報をもとに環境センサー(STM550B)とスイッチ(PTM215B)でフローを分けます。(青枠)
環境センサー(STM550B)のフローは受信したデータからセンサーデータを抽出し、JSONデータに加工してAmbientへデータを送信します。(上の赤枠)
スイッチ(PTM215B)のフローは受信したデータからボタンの操作データを抽出し、Sonosスピーカーへ再生・一時停止・音量を上げる・音量を下げる等のコマンドを送信します。(下の赤枠)

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/93124672-b137-c900-b124-a2d8de50930f.png" width="100%">

フローサンプルは<a href="https://raw.githubusercontent.com/kitazaki/STM550B_PTM215B/master/flows.json">こちら</a>です。

### BLEデータ(ペイロード)の仕様
それぞれの製品のユーザーマニュアルにBLEデータ(ペイロード)の仕様が記載されています。
(仕様書の抜粋を載せておきます)

- <a href="https://www.enocean.com/en/products/enocean_modules_24ghz_ble/stm-550b-multisensor-module/user-manual-pdf/">環境センサー(STM550B)</a>

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/1740145b-265a-6ef5-4a50-2a69379c61a1.png" width="75%">
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/34dddf8d-d089-78fe-2fd3-3bf078683dd7.png" width="75%">
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/910f3dce-ba91-e1e9-0236-8b7cf942086a.png" width="75%">

- <a href="https://www.enocean.com/en/products/enocean_modules_24ghz_ble/ptm-215b/user-manual-pdf/">スイッチ(PTM215B)</a>

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/8a215d61-c292-dc1c-97fa-21b9bb0dc8f3.png" width="75%">
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/a8435ce8-15e8-3d5c-1ea0-9602f74230ae.png" width="75%">

# まとめ
EnOceanは超低消費電力性能が売りの1つですが、デフォルト設定で1日6時間200Luxの環境で動作し、バックアップバッテリー(CR1632)を併用すると数年単位で動作するとのことで、実際にどの程度電池が保つのか興味がありました。
実際に試した結果、夜間(太陽電池による発電が無い状態)で電池容量20%消費/6時間、昼間200Lux以上の環境で電池容量20%蓄電/1時間で、想像以上に性能が良いと感じました。
また、短い期間ですがデータの欠損も見られませんでした。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/f989ae71-2f78-cfd7-2bb9-5ff87ddf0a7d.png" width="100%">