HULFT IoT EdgeStreamingで環境センサーからパトライトを光らせてみた

# はじめに

こんにちは、よろず相談担当 すぎもん :yum: です。

今回は、HULFT IoT EdgeStreamingのLabs版を使用して、環境センサーから取得した値を元にPatliteを光らせてみました。環境センサーを使用することで、身の回りの環境情報（温度、湿度、照度、UV Index、気圧、騒音、不快指数、熱中症警戒度）などをセンシングすることが可能となります。

#システム構成
以下のようなシステム構成にしてみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/aa80706d-f738-5fd4-e5b2-6ad86a93f479.png)


おおまかな流れとしては、
・PC上からストリーム処理を作成します。
・ラズパイ上に実行モジュールを配付し処理を実行します。

#今回やること
環境センサーから取得した照度(Lux)データを元に、閾値を判断させPatliteを緑、黄、赤に
光らせてみようと思います。
それぞれのPatliteの照度(Lux)の閾値は、以下のようにしてみました。
**<font color="Green">・緑（正常値）：151～</font>**
**<font color="Gold">・黄（警告値）：71～150</font>**
**<font color="Red">・赤（異常値）：0～70</font>**

では、実際にやってみましょう。

#事前確認
使用する環境センサーのMACアドレスを事前に調べておきます。
ラズパイ上にssh等でログインします。ログイン後、以下のコマンドを叩き環境センサーのMACアドレスを取得しメモしておきます。


**```$ sudo hcitool lescan```**
※永遠と出力され続けますので、対象のデバイスを見つけたら「Ctrl + c」等で出力を止めます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/ae2de88b-3b6a-3f63-eb5f-b0269199a3aa.png)

#EdgeStreamingの処理について
EdgeStremingの処理は、以下の３つの処理を元に作成していきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/8f5ab382-afeb-435f-5594-a1c72ff5ac54.png)

今回は、下記のような処理を作成し実行してみようと思います。
**・入力処理**
環境センサーからデータを取得する処理

**・マッピング（加工）処理**
取得した照度情報を標準出力へ渡す処理
取得した照度情報の閾値を判定し、Patliteの点灯（緑、黄、赤）を制御する処理

**・出力処理**
標準出力で可視化する処理
Patliteを点灯（緑、黄、赤）する処理

#EdgeStreaming Studioでの処理作成
EdgeStreamingを使用してデータ収集処理を作成してみようと思います。
PC側の HULFT IoT EdgeStreamingを起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/b08b9c5c-32d2-63a6-8c35-5bcce5e42374.png)

###新規プロジェクト、スクリプトの作成
新規プロジェクトから、任意のプロジェクト名を入力します。
※ここでは、プロジェクト名を[sensorToPatlite]、スクリプト名[patlite]としています。

・プロジェクトの作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/d08fd051-80a1-65a0-ac45-f4605128b386.png)


・スクリプトの作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/19c70bf5-acf0-ce78-c209-36f5d9caa851.png)

##1. 環境センサーから取得した照度情報を標準出力する処理##
###入力処理の作成
環境センサーからデータを収集するため、「ツールパレット」の「センサー」→「OMRON環境センサ(BAG型)」から`Latest data受信`をドラッグ＆ドロップで中央のキャンパス内に配置します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/f70bc0e4-d895-684e-6209-bb3ee0775fcf.png)

***環境センサーからデータを取得する処理***
・接続先から「追加」を選択し、環境センサーのMACアドレスを指定します。
※事前確認で調べた環境センサーのMACアドレスをコロンを含めた形で指定してください。 (xx:xx:xx:xx:xx:xx)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/adb36541-ced6-14e0-58e5-0eb6908e389d.png)


・センサーからのデータ取得間隔を指定します。
ここでは、5秒ごとに取得するようにしてみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/e77b6007-76be-8d93-2c25-a5dba6875100.png)


###出力処理の作成（標準出力）
次に出力処理を作成していきます。まずは、標準出力の処理を作成していきます。

***標準出力で可視化する処理***
標準出力にセンサーから取得した照度(Lux)を出力する処理を作成してみます。

・「ツールパレット」の「基本」から、`標準出力`をドラッグ＆ドロップでキャンパス上に配置します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/4be82ba8-5a7c-86b3-3fe6-6b081b8c30aa.png)


・入力処理から出力処理までをつなげます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/21e495bc-2d36-538f-500a-5ddbc80f10c1.png)



###マッピング（加工）処理（標準出力）
環境センサーから取得した値を標準出力するためのマッピング（加工）処理を定義していきます。

***取得した照度情報を標準出力へ渡す処理***
入力処理から出力処理の線上を右クリックして、マッピングの追加を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/83d1c082-925e-bfee-0340-0356fc394cc7.png)


マッピング処理が追加されたら、マッピング処理アイコンをダブルクリックして処理を作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/3fe999b0-d5c8-5d82-83f2-bb4441983790.png)



環境センサーの「照度」を取得したいため、入力元から「light」をドラッグ＆ドロップし出力先へ
つなげます。

出力先の要素追加
・出力データ(stdout)を右クリックし、「ルート要素の追加」を選択。出力側に渡す要素を定義します。
・「ルート要素(root)」を右クリックし、「子要素」を追加します。
（ここでは、lightという要素を追加しています）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/6cbab1b3-9b1c-a9fa-d7ee-3323ca983892.png)

ここまでで、環境センサーからデータ収集し、標準出力する処理が完成しました。

##2. 環境センサーから取得した照度情報を元にPatliteを点灯させる処理##
###出力処理の作成（Patlite）
次にPatliteを点灯させる処理を作成します。
Patliteは、閾値により点灯を変更させたいため、３つの出力処理（緑、黄、赤）を作成します。

・「ツールパレット」の「産業機器」→「PATLITE-PNS」から、`動作制御`をドラッグ＆ドロップでキャンパス上に配置します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/c68d16e4-74ed-bcaa-f1d2-4c392d257fa6.png)


・接続先の「追加」を選択し、Patliteのアドレスを指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/79e145b4-3559-9d71-b9cf-cefaf48f3421.png)


同様の物を作成し、Patliteの処理は全部で３つの出力処理があるようにします。
以下のような形になりました。
※Patlite出力処理の名前は、区別を分かりやすくするため変更しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/4b047f67-8286-3844-0801-6a226b48301f.png)

###マッピング（加工）処理（Patlite）
環境センサーから取得した値に対して、閾値ごとに緑、黄、赤に制御を変更させるマッピング処理を作成します。
ここでは、以下の処理を作成します。
・照度情報の取得
・閾値による値を変化させる処理
・Patliteを点灯させる処理

***緑点灯の処理***
閾値を`緑（正常値）：151～`とする処理を作成します。
・環境センサーの入力から、Patliteの出力処理（LED_GREEN）をドラッグ＆ドロップでつなげます。
・つなげた線を右クリックして、マッピング処理を追加します。
・以下のようなマッピング処理を追加します。

```
条件：
環境センサーから「照度」を取得し、151以上の場合出力側へデータを渡す。
合致した場合、Patlite側のLED（緑）に1を渡し、LEDを点灯させる。
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/766d88c9-64cd-6e8b-d8c6-2ce76bac2d1e.png)



***黄点灯の処理***
閾値を`黄（警告値）：71～150`とする処理を作成します。

・環境センサーの入力から、Patliteの出力処理（LED_YELLOW）をドラッグ＆ドロップでつなげます。
・つなげた線を右クリックして、マッピング処理を追加します。
・以下のようなマッピング処理を追加します。

```
条件：
環境センサーから「照度」を取得し、71～150の場合出力側へデータを渡す。
合致した場合、Patlite側のLED（黄）に1を渡し、LEDを点灯させる。
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/bacea983-d929-3920-3374-8389d22604e7.png)


***赤点灯の処理***
閾値を`赤（異常値）：0～70`とする処理を作成します。
・環境センサーの入力から、Patliteの出力処理（LED_RED）をドラッグ＆ドロップでつなげます。
・つなげた線を右クリックして、マッピング処理を追加します。
・以下のようなマッピング処理を追加します。

```
条件：
環境センサーから「照度」を取得し、0～70の場合出力側へデータを渡す。
合致した場合、Patlite側のLED（赤）に1を渡し、LEDを点灯させる。
```


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/75ef0f2f-cdd9-5f67-f083-25f14a705ea5.png)


## 
スクリプトが完成しました。作成したスクリプトの全体像は、このような形となりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/1fe1c9de-4402-0632-f0c8-8037d08032bc.png)

今回は必ずPatliteが点灯するようにしてますが、カスタマイズすることで消灯する処理も作成ができますので、是非試してみてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/f7edc4ae-9b7e-4d89-4440-b688b8f04bff.png)


#作成した実行モジュールの配付と実行
SSH経由で配付と実行をしてみましょう。

**SSHの設定と実行**
EdgeStreaming Studioのメニューから、「SSH」→「リモートデバイス接続設定」を選択します。
SSHの設定を行い、接続テストで問題がないことを確認します。

・作業ディレクトリ
ラズパイ上のモジュール配付先を指定します。※あらかじめ作成しておきます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/dd69402f-e74b-3b07-dfb5-7e7abb677061.png)

次に、「SSH」→「リモートデバイス」を選択します。
※SSHで設定したリモートデバイス上で実行するために選択します。

**実行してみましょう**
メニューの「テスト実行」→「実行」で実行できます。

**環境センサーの照度を変えてみる**
環境センサーの照度を変化させてみましょう。Patliteが緑、黄、赤に変化することが確認できるかと思います。
※実際にPatliteが光る写真を撮り忘れてしまいました。。画像イメージですみません。

・照度変更（緑）
環境センサーの照度を151以上にしてみます。Patliteが緑色に光ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/e93b8177-117b-79b4-9097-4dd6601d6cd8.png)

・照度変更（黄）
環境センサーの照度を71～150にしてみます。Patliteが黄色に光ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/0b138c37-c1f0-5f1d-76f7-e401c2cc578c.png)

・照度変更（赤）
環境センサーの照度を0～70にしてみます。Patliteが赤色に光ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/9a92e91a-7ddb-b090-611b-958def7af725.png)

#最後に
今回は、HULFT IoT EdgeStreamingのLabs版を使用して、Patliteを光らせてみましたがいかがでしたでしょうか。このように閾値超過時の異常を知らせる処理を容易に作成することができましたね。これらを応用して、ちょっとした監視システムを作成してみても面白そうですね。

このブログでは、今後も技術の「よろず相談窓口」で相談を受けた内容や、誕生したワザをご紹介していけたらな、と思っています。

これからも是非チェックいただき、宜しければフォローをお願いします。

それでは、また！