ノンコーディングでIoT

- 目次
    - [概要](#link1)
    - [enebular](#link2)
    - [各工程の説明](#link3)
    - [解析](#link4)
    - [終わりに](#link5)


## <a name="link1">概要</a>
ノンコーディングでデータの取得、リアルタイム可視化を行いました！
コーディングいらずなので、エンジニアでない方でも簡単にできちゃいます。
インターン先に設置してあるコーヒーマシンの利用状況を人感センサーで取得し、可視化しました。
元々はコーヒーマシン内の豆が切れたら社員に通知を送るシステムを作ることで、コーヒーマシン周りの業務軽減を目的としてプロジェクトが始まりました。ただ、コーヒーマシンの中身に組み込むのは少し骨が折れるので、センサーを使って人感することで利用状況を把握すれば、豆切れを同定できるのではないかというアプローチをとりました。


ハードウェアはラズパイ、omronのD6Tセンサー(温度センサー)、Groovy-IoT(センサーとラズパイのアダプタ)を使っています。


主な流れは以下の図のフローのようになっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438362/e49924e4-6ad9-58be-7255-4658e05e3200.png)




テーマは、「遠隔操作のみで完結」です！
特徴として4つの点があげられます。

- 簡単にセンサーの変更、保存先の変更、データの形の変更が可能(もちろんリモート!)
- ラズパイをディスプレイにつなぐ必要なし！sshも必要なし！
- リアルタイムでデータが可視化できる
- コーディングいらず！

## <a name="link2">enebular</a> 
フローの全体図に書いてあるようにenebularというソフトウェアを使ってます。上記した4つの特徴のうち、これらの特徴は全てこのenebularによって形成されています。IoTや非エンジニアにはもってこいのソフトウェアです。




## <a name="link3">各工程の説明</a> 
### フローのデプロイ
使ったflowはこちらです[^1]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438362/33c49871-a9cc-da77-5265-081c2e0dc813.png)
https://enebular.com/discover/flow/ff95c7bd-a032-4759-a318-87a64c504b8e

一定間隔でトリガーを起動してhttp requestを受け取り、jsonに変換。その後わかりやすく加工してfirebaseに送っているというflowです。

このフローの末尾のノードのみを編集してflowの準備は完了です。
deployして、下図のようにstatusがdeployedになれば成功です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438362/845459e1-d373-22b2-511a-046242a3dbc6.png)



### kikori
このままではデータは取得できません。deployしたflowはhttp requestを使っていますが、ローカルサーバーが立っていないので、requestが通らないです。
そこでここではkikoriというローカルサーバーを使います。kikoriはGroovy-IoTに対応したローカルサーバーを立てるソフトウェアです。kikoriは https://gitlab.com/myst3m/kikori にてインストールできます。はじめにラズパイにインストールしてください。
shellに自動起動のコマンドを入力しておけばokです。


### infomotion
以上が成功していれば、今頃ラズパイに繋がったセンサーからデータを吸い上げてfirebaseに送っているはずです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438362/6862ceaf-9662-f8a1-252e-179b97af6b7b.png)
これをリアルタイムで可視化してみましょう。D6Tセンサーは温度センサーなのでサーモグラフィーのようなグラフが見れることが期待できます。

可視化にはenebularの機能であるinfomotionを使います。
infomotionの各種設定をし、LIVEボタンをクリックすれば、、、

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">温度センサーから取得したデータのリアルタイムデータ可視化   5秒毎に人が左から右に移動してるのがわかる <a href="https://t.co/FwPfEzM90Y">pic.twitter.com/FwPfEzM90Y</a></p>&mdash; たける (@takeru_okura) <a href="https://twitter.com/takeru_okura/status/1147356999736156160?ref_src=twsrc%5Etfw">2019年7月6日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


リアルタイムデータ可視化の成功です!




## <a name="link4">解析</a> 
3で行った可視化はあくまでパフォーマンス的な可視化です。最後に、蓄積したデータを用いて解析してみました。概要にも書いた通り、社内のコーヒーマシンの利用状況についてデータを取得し、解析します。


データは約22時間取得しました。こんな感じになりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438362/dcdf26a8-193c-77ef-e138-cd222ee8291e.png)

UNIX時間を変換すればわかりますが、夜中の間は検出温度が一定なので、うまくデータが取れていそうです。
ここから、ピークを細かくみて、検知できてるかどうかを確認しましょう。
設置から50eventをみてみると
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438362/150c71ff-b820-b3af-f5df-11a430e4b828.png)
ピークがみて取れます。設置後は僕が目の前をうろうろしていたので、人感できているということで問題ないでしょう。

もう少し解析用のコードを修正すれば、より正確に検知を同定できると思います。


## <a name="link1">終わりに</a> 
要点だけをかいつまんで話したので、細かいセットアップとかは別記事に載せようと思います。
そちらもご参考にしてください。
同じようにenebularを使って同僚がデジタルサイネージしてるのでこちらもよかったらどうぞ
https://qiita.com/datsu0/items/19f6447c090aaf8b9f73




[^1]: http requestのノードが通信エラーを吐いていますが、これはローカルサーバーを立てていないからです。ラズパイにこのflowをdeployしたのちに、ラズパイ内でkikoriというローカルサーバーを立てるので、この時点では気にしないでください。


[^2]: enebular-agentとはenebularで書いたflowを遠隔でエッジ(ここではラズパイ)にdeployするためのソフトウェアです。enebular-agentが起動すれば、node-red(つまりローカル)でflowを実行します。


[^3]: infotypeはinfomotionで可視化をするためのフレームワークみたいなものです