PowerApps でセンサーデータの値を取得してみた！（ソースもあるよ！）

# まずはこちらをご覧ください。
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">フゥハハー！！<br><br>私は<a href="https://twitter.com/hashtag/sharepoint?src=hash&amp;ref_src=twsrc%5Etfw">#sharepoint</a> をデータソースにすることで<a href="https://twitter.com/hashtag/PowerApps?src=hash&amp;ref_src=twsrc%5Etfw">#PowerApps</a> にセンサーデータを表示することに成功した！！<a href="https://twitter.com/hashtag/IoT?src=hash&amp;ref_src=twsrc%5Etfw">#IoT</a> <a href="https://twitter.com/hashtag/office365?src=hash&amp;ref_src=twsrc%5Etfw">#office365</a> <a href="https://twitter.com/hashtag/o365jp?src=hash&amp;ref_src=twsrc%5Etfw">#o365jp</a> <a href="https://twitter.com/hashtag/IoT365?src=hash&amp;ref_src=twsrc%5Etfw">#IoT365</a><a href="https://twitter.com/hashtag/raspberrypi?src=hash&amp;ref_src=twsrc%5Etfw">#raspberrypi</a> <a href="https://twitter.com/hashtag/Python?src=hash&amp;ref_src=twsrc%5Etfw">#Python</a> <a href="https://t.co/Q648pTuEuC">pic.twitter.com/Q648pTuEuC</a></p>&mdash; りなたむ@steed400 (@R_t_A_n_M) <a href="https://twitter.com/R_t_A_n_M/status/1096057686427222016?ref_src=twsrc%5Etfw">2019年2月14日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

# 構成図はこちらです！
![Untitled (1).png](https://qiita-image-store.s3.amazonaws.com/0/269159/775e0e9d-10fb-6471-a067-62682d980700.png)

## 説明
Raspberry Pi に接続している、BME680というセンサーで、温度、湿度、気圧、空気中のガスを計測することができます。
そのデータをPowerAppsに表示させます。
PowerAppsにて使用可能で、API経由でデータ送信可能なデータソースはSQL Serverといったものが使用可能ですが、Office365のみと考えると実はそう多くなく、今回はAPIやリファレンスが豊富なSharePointのカスタムリストを採用しています。
SharePointはモダンサイトでは2万件以上のレコードは動作に支障をきたすため
特定のレコードを都度更新するという処理にすることで、レコードを増やさないようにしています。
なお、データをため込みたい場合は、Power BIのストリーミングデータセットを使用し、Power BIのレポートで参照しましょう。

## 注意
今回のデータソースの使い方は、本来の使い方とはかけ離れています。
実際のプロダクトに使用することは絶対におやめください。
また、万一使用したことにより発生したあらゆる事象について、私及び私が所属するすべての組織は一切の責任を負いかねます。
ご了承ください。

# 作り方
## 各種センサー及びディスプレイ
Amazonさんで購入しましょう！
* [BME680](https://www.amazon.co.jp/Wal-front-%E6%B8%A9%E5%BA%A6-%E6%B9%BF%E5%BA%A6-%E5%9C%A7%E5%8A%9B%E3%82%BB%E3%83%B3%E3%82%B5%E3%83%9C%E3%83%BC%E3%83%89-%E5%A4%9A%E6%A9%9F%E8%83%BD/dp/B07H8WPJN1/ref=sr_1_3?ie=UTF8&qid=1550415393&sr=8-3&keywords=BME680)
* [SSD1306](https://www.amazon.co.jp/HiLetgo%C2%AE-%E3%82%B7%E3%83%AA%E3%82%A2%E3%83%ABOLED%E6%B6%B2%E6%99%B6%E3%83%87%E3%82%A3%E3%82%B9%E3%83%97%E3%83%AC%E3%82%A4%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB-128x32-Arduino-Arduino%E3%81%AB%E5%AF%BE%E5%BF%9C/dp/B01M8JV310/ref=sr_1_6?ie=UTF8&qid=1550415435&sr=8-6&keywords=SSD1306)

## SharePoint側
カスタムリストを以下の通り作成します。

|列名|種類|用途|備考|
|:--|:--|:--|:--|
|Product|1行テキスト|レコード検索用名称|要インデックス|
|Value1|数値|IoT数値データ1（温度）||
|Value2|数値|IoT数値データ2（湿度）||
|Value3|数値|IoT数値データ3（気圧）||
|Value4|数値|IoT数値データ4（ガス）||

## PowerApps側

### データソース接続(IoT_Data)
SharePointで作成したカスタムリストを指定します。

### タイマーコントロール
#### OnTimerStart

```php:OnTimerStart
Refresh(IoT_Data);
ClearCollect(SPSSensor,(LookUp(IoT_Data,Product="PiSensor")))
```
なお、期間や繰り返し、自動開始などは以下の通りに設定しましょう。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269159/d0f92046-3403-c0be-3ac0-e7688b2fb392.png)

##### 解説
作成したデータソース「IoT_Data」のデータを取得して
各種ラベルに表示させる用のコレクション「SPSSensor」に
IoT_DataのProduct列「PiSensor」のレコードに格納します。

### ラベル
#### 温度表示部分

```php:Text
Concatenate(Text(First(SPSSensor).Value1),"℃")
```

#### 湿度表示部分

```php:Text
Concatenate(Text(First(SPSSensor).Value2),"%")
```

#### 気圧表示部分

```php:Text
Concatenate(Text(First(SPSSensor).Value3),"hPa")
```

#### ガス（空気質）表示部分

```php:Text
First(SPSSensor).Value4
```

### サンプルアプリ
[こちらです！](https://github.com/rnakamuramartiny/PowerApps/tree/master/BM680_Sensor_Display/PowerApps)

## Raspberry Pi側
Pythonで作成しています！
ソースコードはこちらに格納しています。
[こちらです！](https://github.com/rnakamuramartiny/PowerApps/tree/master/BM680_Sensor_Display/RaspberryPi)

各種センサー用のドライバが別途必要ですので、それらをインストールしてくださいね！

## Power BI部分
こちらの記事をぜひ参考にしてください！
https://qiita.com/rnakamuramartiny/items/0cd593660f62def90b96

# 最後に
いかがでしたか？
PowerAppsで、センサーデータの取得
また、逆にセンサー側からPowerAppsをコントロールといった制御も
コーディングなどが必要にはなってきますが
実現することは可能です！
この辺りは、まさにエンジニアの仕事です！
PowerPlatformは、みんなが作り
使いたいけど使えないものはエンジニアがバリバリ作ることで
無限大の表現ができるようになります！
みなさんもぜひ、PowerPlatform、楽しんで使ってみてください！