【SORACOM×コロナ対策】アルコール消毒状況から店の混雑度合いを可視化してみた

# はじめに
こんにちは！AITOYA株式会社の胡本(えべすもと)です。

さて、前回作成した**「アルコール消毒状況がひと目で分かるIoTデバイス」**シリーズ第２弾です！

今回は取得した情報をより管理しやすくするために、SORACOM のサービスを使ったクラウド管理をしてみようと思います！

最終的なシステム構成は、以下のようになっています。
<img width="900" alt="システム構成" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287136/315e11d2-5e49-16fb-718b-6616c62cc137.png">
それでは、始めていきます！


# 目次
- [前回のダイジェスト](#前回のダイジェスト)
- [SORACOM SIMの設定](#soracom-simの設定)
- [SORACOM Harvest を使って情報の可視化をやってみた！](#soracom-harvest-を使って情報の可視化をやってみた！)
    - [SORACOM側の設定](#soracom側の設定)
    - [WioLTE側の設定](#wiolte側の設定)
    - [SORACOM Harvest へのデータ送信と結果](#soracom-harvest-へのデータ送信と結果)
- [SORACOM Lagoon を使ってアラート機能を追加してみた！](#soracom-lagoon-を使ってアラート機能を追加してみた！)
- [実際に飲食店で検証実験をやってみた！](#実際に飲食店で検証実験をやってみた！)
- [終わりに](#終わりに)



#前回のダイジェスト
前回の記事では、「アルコール消毒状況がひと目で分かる」デバイスを作る手順について書きました。

具体的な外装の設計や配線内容、システム構成について記載してあります。
[【コロナ対策IoT】アルコール消毒状況がひと目で分かるデバイス作ってみた！](https://qiita.com/smile_besubesu/items/d32b35552096ae7125ba)

#SORACOM SIMの設定
SORACOM のSIMカードを使用する際は、以下のリンクのステップに沿って、
**「アカウント登録」「SIMカードの購入」「SIMの設定」を行う必要** があります。
[SORACOM Air for セルラーの利用方法 - IoT プラットフォーム 株式会社ソラコム](https://soracom.jp/start/) 

今回は SORACOM IoT SIM を購入しました。
１枚からSIMカードを購入できるのでとても便利ですね。

その後、SIMカードが届いたら、以下のリンクに沿って**「ユーザーコンソール」に購入したSIMカードの登録を行います。**
[ユーザーコンソールの使い方 | Getting Started | SORACOM Users](https://dev.soracom.io/jp/start/console/)

ここで自分のSIMカードの名前も変更できるので、自由にカスタマイズしてみるのもよいかもしれません。

最終的に、以下の写真のように**ユーザーコンソール上でSIMの状態が「準備完了」となっていれば成功です。**
<img width="900" alt="SORACOM-Ready" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287136/6fa73b6e-749a-fb85-7b29-44aa32347f2f.png">
ここまでで、SORACOM SIMカードの設定は終了です。


#SORACOM Harvest を使って情報の可視化をやってみた！
さていよいよ、SORACOM Harvest を使った情報の可視化を行っていきます！

……と、その前に SORACOM Harvest についての説明ですが、
そもそも SORACOM Harvest とは、**「IoTデバイスからのデータを収集、可視化およびファイルを保存するサービス」です。**
詳しい説明は以下のリンクに記載してあります。
[SORACOM Harvest](
https://soracom.jp/services/harvest/)

このサービスを使用することによって、**サーバーやストレージの準備をすることなく手軽に情報の可視化や管理ができるようになります。**

前回の記事でアルコールスプレーの噴出情報を取得できるようになったので、今回はこのサービスを使ってデータの管理を行いたいと思います。

まずは WioLTE を使用して SORACOM Harvest と接続ができるかどうかを確認しました。



###SORACOM側の設定
まずはSORACOM側の設定からです。ユーザーコンソール左上のメニューから「SIMグループ」をクリックし、
<img width="500" alt="SORACOM_group" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287136/5232da3e-0ffc-36f5-c437-cf8108dc8680.png">

「追加」のボタンをクリックして新しいSIMグループを作成します。
今回は「hand-wash」という名前のグループを作成しました。
<img width="900" alt="SORACOM-new" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287136/9fcfc60d-97e0-42f6-0087-4227dcfc1488.png">

次に、「SORACOM Harvest Data 設定」という所をクリックし、
<img width="900" alt="SORACOM_Harvest_Data" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287136/bc3cdcab-be56-b406-9ff9-e74ecf5c0281.png">

図のように、設定をONに変更します。
<img width="900" alt="SORACOM_Harvest_Data_ON" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287136/dd677b40-be7f-66a5-2529-90a49303673c.png">
その後、図のように使用したい SIM にチェックを入れ、「所属グループを変更」をクリックすると SIM の所属グループが変更できるので、
<img width="900" alt="SORACOM_Harvest_group" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287136/b88c8106-b406-3479-3280-533439e781d9.png">

先程作成したグループを選択し、保存します。
<img width="900" alt="SORACOM_Harvest_group2" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287136/81cdcd32-1f26-51ef-69bf-1d227d959f0b.png">
これで SORACOM 側の設定は完了しました！


###WioLTE側の設定
WioLTE 側で書くソースコードは、SeeedJP の公式ライブラリに SORACOM Harvest と通信を行うソースコードが記載してあります。

今回もこちらのソースコードを使用させて頂きました 笑
[WioLTEforArduino/soracom-harvest.ino at master · SeeedJP/WioLTEforArduino · GitHub](https://github.com/SeeedJP/WioLTEforArduino/blob/master/examples/soracom/soracom-harvest/soracom-harvest.ino)

このコードを使用する際、32行目の

```cpp:soracom-harvest.ino
if (!Wio.Activate("soracom.io", "sora", "sora")) {
    SerialUSB.println("### ERROR! ###");
    return;
}
```
の部分が
Activate("APN","ユーザー名","パスワード")
となっているので、**自分のSIMカードに合わせて変更しました。**

また、今回はこのコードで使用する温湿度センサーを取り付けていないので、SORACOM Harvest にデータは送信されません。
もしデータを送信したい場合はloop内の処理を変更してみるとよいです。

ソースコードをコンパイルして実行すると、SORACOMのユーザーコンソール上で以下のような表示になります。
<img width="900" alt="SORACOM-Harvest_Connect" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287136/8c437b8e-e87b-7aa5-651c-ac21fd97c604.png">
SIMカードが「使用中」となったので、SORACOM Air での通信確認が出来ました！



###SORACOM Harvest へのデータ送信と結果
SORACOM Air での通信確認が完了したので、本題であるプッシュ回数の可視化を行いました！

実際の送信データは「menu」から「SIM管理」を選択後、
下の画像のように使用しているSIMカードを選択して、「操作」から「データを確認」をクリックして確認します。
<img width="900" alt="SORACOM_Harvest_data_watch" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287136/71fb97d3-fc10-71a4-684a-6c0a3679ccff.png">
今回は、先程記載した SeeedJP のソースコードを参考に、アルコール噴射回数を５分毎に SORACOM Harvest に送信するプログラムを作成し、実行しました。

その結果がこちらです！
<img width="900" alt="Harvest_WioLTE_data" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287136/b9b61074-2e65-9b74-2a5a-85e68f939dd7.png">
実際にデータを可視化できていることが分かります。

また、データの詳細を見てみると、
WioLTE から送ったアルコール噴射回数を記録できていることが分かります。
<img width="900" alt="data-detail" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287136/34c2d680-a7e9-76d4-3ffe-efa78d70fc2a.png">
これで、アルコール噴射回数を記録し可視化することができました！



#SORACOM Lagoon を使ってアラート機能を追加してみた！
データの記録と可視化に成功したので、次は SORACOM Lagoon を使ってデータの整理やアラート機能を実装してみます！

SORACOM Lagoon とは、 **SORACOM Harvest に集められたデータを用いてグラフ等を作成し、共有するためのサービスです。**
詳しい説明は以下のリンクに記載してあります。
[SORACOM Lagoon](https://soracom.jp/services/lagoon/)

今回は、この機能を使って、一定回数以上アルコールが噴射されると Webhook 経由でSNSに通知が行くようなシステムを作っていきます。

はじめに SORACOM Lagoon の設定を行っていきます。
SORACOM Lagoon にはダッシュボードの数やユーザー数に応じて「Free」「Maker」「Pro」のプランがありますが、今回は「Free」のプランを使用していきます。

まず、SORACOM Lagoon はユーザーコンソール内の「menu」から「データ収集・蓄積・可視化」の中の「SORACOM Lagoon」を選択します。
<img width="500" alt="SORACOM-lagoon1" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287136/0a0dabcc-42a9-39fa-6e51-8065252b1539.png">

その後、「ユーザーを追加」の欄を選択後、SORACOM Lagoon console にアクセスするためのアカウントを作成します。
<img width="500" alt="SORACOM-lagoon2" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287136/9ea1258d-ce01-a488-ef58-6cea0dc4fbb4.png">

その後「追加」をクリックし、その後「SORACOM Lagoon console にアクセス」をクリックすると SORACOM Lagoon を使用することができます。

次はグラフを作成していきます。下の図のように「+」の作成ボタンから「ダッシュボード」をクリックし、
<img width="900" alt="SORACOM-lagoon_console1" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287136/bac195b3-e1f3-5c59-9c8d-3f54b4187d45.png">

「追加」の欄にある様々なパネルの中から「グラフ」を選択し、写真のようにグラフの「パネルタイトル」から「編集する」をクリックします。
<img width="900" alt="SORACOM-lagoon_console2" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287136/5eae4b3e-95dc-c37c-1756-8b4cd125ff2e.png">
これでグラフの編集ができるようになります。
あとは右上の日付の欄を SORACOM Harvest 上で測定した日付にすると、SORACOM Harvest 上で測定したデータをまとめることができます。

余談ですが、SORACOM Lagoon は軸の種類を細かく変えることができるのがとても素晴らしいです。
リアルタイムでデータを取得することが出来たとしても、軸表記や凡例表示の設定で可視化までの時間がかかることがあるので、これはとても有り難いですね 笑
<img width="900" alt="SORACOM-lagoon_console3" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287136/187f1739-c857-b02d-2904-bac0f0dc22a8.png">

パラメータを調整した結果できたグラフがこちらです。
<img width="900" alt="SORACOM-lagoon_console4" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287136/fa9e7d23-b8f1-6297-6c97-23e467b08d9b.png">

これでデータのグラフ化を行うことができました！

次にグラフにしきい値をつけてその値を超えると Webhook 経由でSNSに通知が来る設定を行います。
下の写真のように、左側メニューバーの「アラート」から「通知チャンネル」をクリックし、新しいチャンネルを作成します。
<img width="900" alt="SORACOM-lagoon_console5" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287136/82273b09-f704-625b-bc14-54a2098f0168.png">

その後、下の写真のように、名前、Webhook の選択と URL を貼り付けて保存します。
IFTTT を使用した Webhook の作成方法は前回の記事に記載してあります。
[前回／IFTTT を使用した Webhook の作成方法](https://qiita.com/smile_besubesu/items/d32b35552096ae7125ba#%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E6%A7%8B%E6%88%90)

今回は、SNSの送信先を slack に変更して Webhook の設定を行いました。
また名前は「hand_wash」にしました。
<img width="900" alt="SORACOM-lagoon_console6" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287136/cd7e2dd8-e500-e65d-48b5-bb46cb057327.png">

Webhook 自体の設定が完了したら、先程作成したダッシュボードに戻り、「アラート」の「アラート設定」から以下の写真のように各項目を設定します。
<img width="900" alt="SORACOM-lagoon_console7" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287136/3ecbffa8-afc0-6510-f692-a52efe5de8bd.png">
また、「アラート設定」の下にある「通知」を確認すると、Webhook の送り先を設定できます。ここで先程作った「hand_wash」になっていない場合は再度送り先を設定します。

設定が完了すると、図のようにしきい値が表示され、しきい値を超えると Webhook が起動するようになります！
<img width="900" alt="SORACOM-lagoon_console8" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287136/3de07b01-b790-d5c4-0dfa-9bb81ceb50d0.png">

これで SORACOM Lagoon を使ってデータの整理やアラート機能の設定ができました！

前回の記事ではただアルコール噴射回数をSNSに通知するだけでしたが、SORACOM Lagoon を使用することによって「一定回数噴射したら通知する」というより実用的な方法に変更することができました。



#実際に飲食店で検証実験をやってみた！
データの管理と可視化、アラート通知の設定が完了したので、実際に飲食店にご協力いただき使用してみました！

実際に飲食店に設置した様子がこちら
<img width=500" alt="setti1" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287136/009bc7b0-1088-106d-95f3-cfc4d206f58a.jpeg">

お店側のご配慮で、場所が分かる貼り紙までしていただきました。本当にありがとうございます。
<img width="500" alt="setti2" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287136/e28e44a1-6e0e-9ccd-2322-54f9fdac97ea.jpeg">
設置するにあたり、SORACOM Harvest への送信間隔を１時間に設定して測定を行いました。その結果、１時間ごとのアルコール噴射回数を可視化することができ、一定回数以上噴射すると無事 slack に通知を送ることに成功しました。

今回来店した方のほとんどが、このデバイスを使用してくれていたとの事なので、ここから店の混雑状況を把握したり、自動で告知ができるようになりました！



#終わりに
ここまでお読みいただきありがとうございました！

この２回の記事を通して、実際にアルコール噴射回数から店の混雑状況の把握や空席度合いの告知ができるようになりました。
これで安心してご飯が食べられますね 笑

また SORACOM のシステムを使えば本当に簡単にクラウド管理ができたので、ただただびっくりしました。
他にも思いつけば SORACOM のサービスを使って他のIoTデバイスも作ってみようと思います 笑

当社は、cm級位置情報測位デバイスの「**iChidori(いちどり)**」シリーズを始めとした、位置情報ソリューションをお客様に提供しています。
製品の説明は [こちら](https://www.aitoya.com/#products) に記載あります。ご興味のある方は是非ご覧ください！

<img width="500" alt="よい、いちどりを。" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287136/1b173995-df8d-d51d-6607-9764869f0a62.jpeg">
本記事は、AITOYA株式会社HPに掲載している内容と同一のものです。→[AITOYA株式会社HP](https://www.aitoya.com/)