EnOceanのスイッチストライクエアーでトイレセンサーを作ってみた

EnOceanのスイッチストライクエアーという製品を使ってトイレセンサーを作ってみました。
電池不要のIoTデバイスで今後ますます増えていくのではないでしょうか？
今回はNode-REDを使ってセンサー値をFirebaseにアップするところまでを行います。

# そもそもEnOceanって？
![enocean-logo.jpg](https://qiita-image-store.s3.amazonaws.com/0/154355/09d2b77b-57fd-2bc0-51fa-3d8318e2abeb.jpeg)

EnOcean(エンオーシャン)はエネルギーハーベスティング無線通信技術のことを指します。
小型ソーラーパネルやスイッチ動作などで得られる様々な微弱エネルギー源から電力を生成し、その電力を用いてセンサーを動作させ、無線通信を行います。 「電池が不要、かつ、配線が不要なセンサー」という事です。免許不要な無線帯域(928MHz帯)を使っています。

# スイッチストライクエアー
[スイッチストライクエアー](https://www.shibutani.co.jp/special/switchestrikeair.html)は株式会社シブタニの製品です。特徴は、トイレの鍵のスライド動作に反応し、発電します。鍵の部分に小さなスイッチがあり、スライドする毎にスイッチが押されます。
そのスイッチが押されると、センサーが反応し無線通信を行います。

![スイッチストライクエアー.jpg](https://qiita-image-store.s3.amazonaws.com/0/154355/42c394d8-3104-bd35-a53c-b863e8fecce1.jpeg)

![IMG_0732.png](https://qiita-image-store.s3.amazonaws.com/0/154355/7fd1f79d-ff16-d68f-4a2e-4530d2a3b4f6.png)

# EnOcean受信ゲートウェイ環境
送信されたデータを受信するために必要なゲートウェイ環境は以下の通りです。
基本的に送信された信号を受信するUSBドングルとラズパイで行います。

* [USB400J](https://www.amazon.co.jp/gp/product/B0107UUUGG/)
* [Raspberry Pi3 Model B+](https://www.amazon.co.jp/gp/product/B07CNRTCZ9/)

# イメージ図
スイッチストライクエアーが反応したらラズパイで信号を受け取り、Firebaseに情報を保存する形です。
Google Homeと連携して通知することも可能です。
![トイレセンサー構成図.png](https://qiita-image-store.s3.amazonaws.com/0/154355/0a63c0c9-1763-361f-c16a-96858ed0c882.png)


# 1: ラズパイにNode-REDをセットアップ
ラズパイのOSを入れるとデフォルトでNode-REDが入ると思います。
`node-red-start`してNode-REDを起動しましょう。

# 2: Node-REDの設定
Node-REDの設定を順番に行っていきます。

## 2-1: serialノード設定
inputノードにあるserialノードをドラッグアンドドロップしてダブルクリックします。
Serial Portは右側の虫メガネアイコンをクリックして検索します。

ボーレートや各種値は画面のように設定しましょう。
<img width="1050" alt="スクリーンショット_2018-10-30_10_57_22.png" src="https://qiita-image-store.s3.amazonaws.com/0/154355/b9bf7a7d-f6a1-549f-e3a4-48f2e5ceb492.png">


## 2-2: 電文デコーダーダウンロード
serialで受信した電文をデコードします。EnOceanを取り扱っているアーミン株式会社の方が作成したNode-RED用のデコーダーがあるので、ありがたく使わせてもらいます。

http://ermine.co.jp/download/4446/

## 2-3: デコーダーをNode-REDへ追加
右上のハンバーガーメニューからImport→Clipboardをクリックし、2-2でダウンロードした`EnOceanTelegramDecoder.json`の中身をコピペして貼り付けます。右下のImportボタンをクリックすればNodeが追加されます。

![トイレセンサー.002.png](https://qiita-image-store.s3.amazonaws.com/0/154355/188a76a4-4083-e9ec-87e3-fc1ef11ef97b.png)

## 2-4: デバッグノードをつないで受信チェック
デバッグノードを設置して各ノードを接続しましょう。スイッチストライクエアーのボタンを押下すると、データが受信できるかと思います。スイッチストライクエアーはドアが閉まっていればData1の値が「00」でドアが空いていれば「80」の信号が来ます。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">EnOceanのスイッチストライクエアーのデータをNode-REDで受信 <a href="https://t.co/BJqYW6MalZ">pic.twitter.com/BJqYW6MalZ</a></p>&mdash; がおまる@スマートスピーカーアプリ開発入門発売中！ (@gaomar) <a href="https://twitter.com/gaomar/status/1057547252472832001?ref_src=twsrc%5Etfw">2018年10月31日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

# 3: Firebaseプロジェクト作成
[Firebase](https://console.firebase.google.com/?hl=ja)へアクセスして新規プロジェクト作成してください。

## 3-1: RealtimeDatabaseの設定
誰でもアクセスできるようにルールの設定を変更します。

```javascript:ルール
{
  "rules": {
    ".read": true,
    ".write": true
  }
}
```

<img width="1245" alt="スクリーンショット 2018-10-31 17.27.40.png" src="https://qiita-image-store.s3.amazonaws.com/0/154355/9b862cf1-003c-fcc3-657d-c2265779542d.png">

## 3-2: Firebaseのデータベースに保存するノードを設置する
再びNode-REDを開いてFirebaseに保存するためのノードを設置します。
まずはアップするためのデータを成形します。templateノードをドラッグアンドドロップして下記コードを入力します。

```javascript:functionノード
var flg = '空室';

if (msg.payload.Data1 === '00') {
    flg = '使用中'
}
msg.payload = {
    "word": flg
}
return msg;

```

<img width="1173" alt="スクリーンショット_2018-10-31_17_34_50.png" src="https://qiita-image-store.s3.amazonaws.com/0/154355/53d673ff-b2ed-ca2b-0c69-2755b7204322.png">

## 3-3: FirebaseへPUTする
http responseノードをドラッグアンドドロップしてダブルクリックします。
メソッドは必ず「PUT」を選択して、URLにFirebaseのURLを指定します。toilet.jsonに保存したいので、json名を指定しました。

`https://<FirebaseのプロジェクトID>.firebaseio.com/toilet.json`

![トイレセンサー_003.png](https://qiita-image-store.s3.amazonaws.com/0/154355/1066a67a-2594-071e-6736-1100d9752d7c.png)

## 3-4: 各ノードをつなげる
各ノードをつないで、スイッチストライクエアーのボタンを押下するとFirebaseはデータがアップされます。

<img width="1053" alt="スクリーンショット_2018-10-31_17_52_58.png" src="https://qiita-image-store.s3.amazonaws.com/0/154355/a37c52cb-108a-be5c-88a1-0b3cfe35d9ba.png">

# まとめ
かなり簡単にEnOceanのデータを受信してFirebaseにデータの可視化をすることができました。
EnOceanは今後ますます増えていくこと間違いなしかと思います。
次回はこのデータを活用してLINE BotやGoogle Homeの連携してトイレが空いているかどうかさらに可視化したいと思います。

システム化のご検討やご相談は弊社までお問い合わせください。
https://i-enter.co.jp/contact/