IoT開発検証 ~センサデータ収集監視と閾値超過通知~

# はじめに
最近AWSを用いた製造現場のDX化の技術検証に携わっております。
そこで検証した内容をアウトプットのため、他にも同じようなことをしている方のため
簡単にですがまとめたいなーと思いました。

構築手順をサクッとまとめるので、わからんことあったら直接ご連絡ください笑

# やること
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/a2f73758-207f-cd0a-518d-865660bb6064.png)
センサデータを収集してニアリアルタイムで分析するため、IoT SiteWiseを利用しています。
また今回は検証しませんが、将来的にエッジでAWSに送信するデータの加工や取捨をしたいのでGreengrassを使用しています。
SNSの理由は言うまでもなく閾値通知ですね

# 検証
実際にセンサデータやサーバを用意するわけにはいかないので、その部分はCloud 9で代用していきます。

## アーキテクチャ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/77fe12a5-6655-1760-d3cc-e25db31baa0e.png)
こんな感じです。
Cloud 9にGreengrassのインストールと、センサデータの代役としてOPC UAサーバを作成しています

## データ収集基盤構築、検証
### cloud9作成
Cloud 9作成手順は飛ばします。
インスタンスタイプは「t3.small」で問題ないです。

### SiteWise Gateway
Greengrass経由でSiteWiseにデータを転送するため、オンプレミスサーバ（検証ではCloud 9）にSiteWise Gatewayをインストールします。
ゲートウェイ名やコアデバイス名は自由でおけ。
「ゲートウェイを作成」をクリックするとデプロイ用のスクリプトがダウンロードできます。
![3.Sitewise gateway.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/2e8036b4-7d48-3ddb-055f-ec35f02d96f9.png)

### Cloud9にSiteWise Gatewayをデプロイ
Upload Fileから先ほどダウンロードしたスクリプトをアップロードします。
![4.Sitewise gateway upload.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/10d20034-6c6a-ca40-37b0-1964660a6eb2.png)

下記コマンドで、スクリプトを実行すると、Cloud9にSiteWise Gatewayがデプロイされます
~~~
$ chmod +x {スクリプト名}.deploy.sh
$ sudo ./{スクリプト名}.deploy.sh
~~~

「AWS IoT」⇒「Greengrassデバイス」⇒「デプロイ」でゲートウェイ名を確認します。
また、以下コンポーネントがデプロイされています
* aws.iot.SiteWiseEdgeCollectorOpcua
* aws.iot.SiteWiseEdgePublisher

![6.greengrass deploy確認.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/121f17be-ba63-6d4c-4620-08613b561225.png)

### OPC UAサーバの作成
仮想のOPC UAサーバを作成します。
asyncuaライブラリをインストールすると、以下GitHubのサンプルをそのまま利用できます。
単純な数値の並びを送信するだけですが、検証なので問題ないです。
~~~
pip install asyncua
~~~

https://github.com/FreeOpcUa/opcua-asyncio/blob/master/examples/server-minimal.py

### モデルの作成
今回は数値の羅列が送られてくるだけなので、「測定」に「count_value」を定義しました。
小数点付きなので、「データ型」はダブルです。
![9. モデル作成.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/283de675-6f71-767a-141e-82be0d6a7079.png)


### アセットの作成
先ほど作成したモデルを選択して、アセットを作成します。
![10.アセット作成.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/b63cd1ef-0d47-5340-23ff-22e771948552.png)


「データストリーム」からSiteWise Gatewayから送られてくるデータとアセットを紐づけます。
![11.データストリーム.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/1b649ecf-2d71-d2f0-481b-253b57ddc721.png)

### SiteWise側データ受信確認
「最新の値」にデータが表示されていれば成功です。
後は各々S3への保管設定をしてください。
![12.アセット受信確認.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/087d6545-7e86-e40e-02ae-be4f308ebc8e.png)

## センサデータ監視
SiteWise Monitorを使用すれば、SiteWiseに収集したデータをグラフで確認できます。
設定方法は各々表示させたい情報によって異なると思うので飛ばしやす。
![13.Sitewise Monitor.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/75a61be8-5c96-5b16-247c-c9aff9a9d886.png)

## 閾値通知検証
SiteWiseに収集したデータを監視し、閾値を超えると通知を送るようにします。
### SNSのサブスクリプション作成
今回はメールで通知を行うのでプロトコルはEMAILを使用します。
![15.SNS.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/ea1e7816-1ffd-8857-feea-37c4f54f53e6.png)

### モデル作成
閾値を超えたときに通知するため、モデルを作成します。
今回は「8」を超えたときに通知しようと思います。
![14.通知用モデル.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/fd4c2981-8727-16d3-98d3-37177e54b08d.png)

### アラーム設定
「モデル」⇒「アラーム」から通知の設定をします。
「IoT Events」をアラームタイプとし、SNSを使用する設定にします。
![16.アラーム設定.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/d9346f6c-1672-d164-2280-bf219e50b55e.png)

これで閾値を超えた時、SNSに通知が届きます

# おわり
IoTはAWSだけでなくいろんなことを理解しないといけないのが難しいですね、、
最近は業務でAWSに触れる機会が増えたので、ブログ更新できていませんでしたが
たまにはここにもアウトプットしようと思います。