■はじめに
この記事は新人プログラマによる奮闘記です。記事もOpenBlocksもAWSも初めて触ります。よって不慣れなところがありますが、暖かい目で見てください。
だらだらと長い文章になっています。手順を1から10まで書いているので適宜読み飛ばして下さい。
今回は様々なセンサをOpenBlocks IoTとAWSを使って可視化していきます。
OpenBlocks IoTとAWSを組み合わせることでノンプログラミングでの可視化が可能(らしい)です。
実は、私は、OpenBlocksって何…?というところから始まりました。(ここで言ってはマズイのですが)
OpenBlocks IoT VX2はインテリジェントエッジIoTゲートウェイ製品です。高性能ハードウェアに加えLTE/3G通信や次世代IoT通信規格LoRaWANにも対応、安定した通信事業品質のLinux カーネルを含んでいます。さらにDocker管理機能やMicrosoft Azure IoT Edgeにも対応するIoTゲートウェイ用ソフトウェア「Plat’Home IoT Gateway Software FW3」を搭載しています。OpenBlocks IoT VX2によって、大量・広域・多地点展開を前提とするIoTシステムの構築はもちろん工場やプラント施設、気象、防犯など、IoTエッジコンピューティングの利用が最適とされる分野におけるIoTシステムの本格導入が実現できます。
https://www.plathome.co.jp/product/openblocks-iot/vx2/
…なるほどIoTゲートウェイのすごいヤツなのね、くらいの認識でした。が・・できることの多いこと!
今回は基礎動作しかしてないのですが、これ一つで様々なことが出来そうです。
上司から渡された簡易的なシステム構成図を基にした、データ可視化までの道筋をここに記します。
システム概略図はこちら
■センサ⇒OpenBlocks IoT
まず始めにセンサとOpenBlocks IoTの接続から始めます。
今回使用するセンサは
アイテック社製
- 大気圧センサ
- 照度センサ
- CO2センサ
- Pressac Sensing 3クランプCTセンサ(60A
以上の4つのセンサを使用していこうと思います。
そしてこれらのセンサを束ねるIoTゲートウェイである、OpenBlocks IoT VX2を使用します。
まずはセンサとOpenBlocks IoT VX2(以下OpenBlocks)の設定をしていきます。
◇センサ設定
今回使用するセンサはEnOceanと呼ばれる無線無給電通信技術を使用したセンサです。
EnOceanのエネルギーハーベスティング無線センサ技術は、環境エネルギーを利用します。私たちの周囲のエネルギー、例えば、運動エネルギー、圧力、光、温度差をワイアレスコミュニケーションのためのエネルギーに変換します。EnOceanの小型化されたエネルギーハーベスタと超低消費電力の無線技術の組み合わせにより、ビル、スマートホーム、産業用アプリケーションやモノのインターネット用のメンテナンスフリーの無線センサソリューションが実現できます。
https://www.enocean.com/jp/technology/energy-harvesting/
EnOceanにはペアリング等の機構はなく、基本的にセンサからのブロードキャストになっています。
更に送信データの中にセンサデータのプロファイル情報(EEP)が含まれないため、受信機側(今回はOpenBlocks)でどのプロファイルを使用しているかを登録する必要があります。
OpenBlocksではこちらの対応センサ一覧に送信プロファイルがありますので、センサに対応した送信プロファイルをOpenBlocksに設定します。
センサ側について特に設定をすることはありませんが、それぞれ発電方法がありますので設置場所には気を配ります。また、初期設定の際はセンサとOpenBlocksを離しすぎないよう気をつけてください。
◇OpenBlocks側の設定
OpenBlocksの初期セットアップについては公式ドキュメントを参考にしてください。
今回はWebUIを使用して設定を行うのでこちらに設定の方法が載っています。
ネットワーク設定等が終わりましたらセンサの登録を行います。
1.ダッシュボード画面から上部のタブ欄にあるサービスを選び、基本機能のリンクを押下します。
2.基本タブ下、BT I/Fタブのhci0使用設定を使用するに変更し、下の保存ボタンを押下。
※編集部注:今回はEnOceanデバイスのみ利用のため、BT I/Fのhci0 使用設定はやらなくてもOKです。
3.EnOcean登録タブで、デバイスIDとEEP(送信プロファイル)を入力。
今回のセンサのEEPはそれぞれ
・大気圧センサ・・・A50501
・照度センサ・・・A50602
・CO2センサ・・・A50904
・クランプCTセンサ・・・D23202
でしたのでそれを入力します。デバイスIDはセンサに記載があります。
4.それぞれ入力したセンサが一覧に表示されます。
これでセンサの登録は完了です。簡単ですね。新人にも出来ました。
■OpenBlocks IoT ⇒ AWS IoT
センサーとOpenBlocksの接続が完了したら、次はデータのクラウドへの送信です。
OpenBlocks ではWebUIにてAWS IoTとの連携が簡単に可能となっています。
WebUIでの設定なので、プログラミングに慣れていない方でも設定が出来ます。因みに新人はプログラミング全然できません。
◇AWS IoT側の設定
まずはデータを受け取る側の設定を行います。
AWS アカウント作成は省略します。調べるとたくさん出てきますので。
リージョンは全て東京で設定してます。
AWSのサービス欄からAWS IoT Coreを選択し、「モノ」の登録をします
…いやモノって何?英訳下手か?と思いましたが原文が「Thing」だったので何も言えなくなりました。
左側の管理タブのモノを選択し、作成を押下してモノの作成をします。
AWS IoTモノを作成する画面では単一のモノを作成するを押下。
モノの名前を付ける画面になります。今回はわかりやすいようそのまま「OpenBlocks-IoT-VX2」にしたいと思います。タイプなどは設定しなくてよいと思います。(そこまで扱いきれてない)
次に進むと証明書の作成画面に遷移します。ここでは1click証明書作成を選択します。作成ボタンを押下すると自動で証明書が作成されます。
証明書が作成されるとダウンロードできるようになります。モノの証明書、パブリックキー、プライベートキー全てダウンロードして保管します。これらは後ほど使います。
そして忘れずに有効化を行います。これを忘れると証明書がただの文字列になってしまうので注意してください。(1敗)
その3つの下にルートCA(証明書)ダウンロードがあります。ダウンロードをクリックすると別ページに飛ばされ、その先でルート証明書のダウンロードができます。
推奨エンドポイントのRSA 2048ビットキ―:Amazon ルート CA 1を右クリックし、名前を付けてリンク先を保存することでルート証明書を手に入れることが出来ます。デフォルトネームは「AmazonRootCA1.pem」でした。
元の画面に戻り、完了をクリックします。ポリシーのアタッチはまだポリシーを作成していないので出来ません。
それではポリシーの作成を行います。ポリシーは許可する通信の範囲やクライアントの制限などを設定できます。左の安全性タブ、ポリシーを選択し作成を押下します。
ポリシーの名前とステートメントを入力します。
名前はモノにちなんで「OpenBlocks-IoT-VX2-policy」としました。
ステートメントのポリシー構文はこちらをご覧ください。
今回は「iot:Publish, iot:Connect」のみ許可しました。接続と送信のみの動作なのでこれで十分です。
リソースARNはクライアントデバイスの許可範囲を設定できますが、今回はモノが一つのみなので「*」で全許可にしてあります。
作成したポリシーを証明書にアタッチ(接続)します。安全性タブの証明書から先ほど作成した証明書を選択します。
このとき証明書がアクティブになっていることを確認してください。なってない場合は三点リーダー(・・・)部分から有効化をしてください。
証明書を選択したらアクションからポリシーのアタッチを選択します。
先ほど作成したポリシーを選択し、アタッチを押下します。
これでモノの登録は完了です。最後にエンドポイントの取得をします。
エンドポイントはAWSの各サービスに接続するためのポイントで、今回はAWS IoTに接続するのでAWS IoTのエンドポイントを取得します。
まず、今回作成したモノを表示します。管理タブのモノからOpenBlocks-IoT-VX2を選択。
左の操作タブのところに「amazonaws.com」で締められる文字列があります。これがエンドポイントです。この文字列をどこかに控えておいてください。後ほど使います。
これでAWS IoT側の設定は完了です。
◇OpenBlocks側の設定
次はOpenBlocks側の設定です。
まず、先ほど作成した証明書をOpenBlocksに追加します。
OpenBlocksのWebUIへ行き、システムタブ下ファイル管理タブへ移動します。
アップロード欄があるのでそこに先ほど作成した証明書とキーをアップロードします。
アップロードするものは、
・モノの証明書(拡張子が.crt)
・プライベートキー(拡張子が.key)
・ルート証明書(拡張子が.pem)
の三つです。
これで証明書をOpenBlocksへアップロードすることが出来ました。
次に、AWSと通信するための拡張機能をインストールする必要があります。
メンテナンスタブ下拡張機能タブのインストール機能からIoTデータ制御を選択しインストールを実行します。インストールが完了するまで操作を受け付けないので少し待ちます。
待っている間はOpenBlocksの公式ドキュメントを読みましょう。
インストールが終わるとサービスの機能欄にIoTデータが追加されています。リンクを押下し設定をしていきます。
IoTデータタブ下アプリ設定タブで今回必要な機能の起動を行います。
それぞれの機能についてはこちら
今回使用する機能はPD RepeaterとPD Handler UARTの2つです。
それぞれにチェックするのですが、デフォルト使用アプリモード表示の欄をチェックして下の方に表示されるデフォルトアプリ起動制御の欄を先にチェックしないと有効にできないので注意してください。
PD Handler UART についてはプルダウンからEnOceanを選択してください。
下の保存ボタンを押し、設定を反映させます。
次に同じくIoTデータタブ下送受信設定タブを開きます。
この設定欄では様々な接続方法がありますが、今回はAWS IoT(awsiot)を使用します。[WebSocket]の方ではないので注意してください。(WebSocketでの通信もそのうち挑戦します。)
使用するを選択すると、記入欄がいくつか出てきます。基本デフォルトで大丈夫ですが、空欄の2つは埋めます。
送信先ホストには先ほど取得したエンドポイントをいれます。
ルート証明書はOpenBlocksへの移行が完了しているのでルート証明書へのパスを入力します。特に動かしていなければ「/var/webui/upload_dir/」下にあるはずなので、パスの最後にルート証明書の名前を入れて完了です。(名前変更していなければ[AmazonRootCA1.pem]です)
次に下にスクロールし、EnOceanデバイス設定です。
設定欄には登録したデバイスの送受信設定があるはずなので、設定を使用するに変更します。
するとまた入力欄が出てきますが、送受信設定のみ設定します。
送受信設定の欄でawsiotにチェックを入れます。また入力欄が出てくるので入力します。
・クライアントIDは任意で変更していいですが、デフォルト(デバイスID)で大丈夫です。
・モノの名前は作成したモノの名前、今回は「OpenBlocks-IoT-VX2」を記入します。
・トピック欄には任意の名称を付けます。が、後ほど使用するので安直に「obs/pub」にしました。こちらは送信用のトピックです。
・受信トピックもわかりやすく、「obs/sub」としました。
・証明書はルート証明書と同じくパスの入力です。拡張子が.crtのファイルのパスを入力します。
・プライベートキーも同じく、拡張子が.keyのファイルのパスを入力します。
・WILLトピックとWILLメッセージは空欄で大丈夫です。(使い方わかりません)
記入が完了したら保存を忘れずに押します。
これで送信ができるようになりました。送信できているかのチェックをするためにログを確認します。
送受信設定タブの隣にログタブがあります。タブ内のログ選択で「pd-repeater.log」を選択します。うまく接続できていれば下図のようにデータを送信している状態が見れるはずです。
送信がうまくいってない場合の多くは送受信設定での打ち間違いなのでうまくいかないときはもう一度確認しましょう。(2敗)
■AWS IoT ⇒ AWS S3
OpenBlocksからAWS IoT経由でクラウドにあげたデータをS3(Simple Strage Service)に保管します。
データを保管することで、データ分析や過去データとの比較が容易になり可視化にも繋がります。
S3はAWSのその他サービスと連携することが可能なので、可視化のみならず様々なことができるようになりました。
◇AWS S3側の設定
S3ではバケットをあらかじめ作成しておく必要があります。バケットの作成は特別な設定は無いので省略します。
作成したバケットの中にセンサデータを入れておくフォルダを作成しておきましょう。名前に縛りは特にありませんが、後々パスとして使用します。ここでは「ph_obs」とします。安直ですね
S3の設定は以上です。
◇AWS IoT側の設定
OpenBlocksから受け取ったデータをS3に送信するためにルールを設定しなくてはいけません。
AWS IoT画面の左側ACTタブルールからルールの作成を行います。
ルールの作成では名前の設定、ルールクエリステートメントの設定、アクションの設定があります。
ルールの名前は任意で決めてください。今回は「OpenBlocks_rule」としました。安直(ry
ルールクエリステートメントはSQLに似た構文で受信データの抽出とアクショントリガを設定します。詳しくはこちら
今回はデータの選別はここで行わないので「SELECT * FROM ‘obs/pub’」としました。
FROM ‘obs/pub’はOpenBlocksで設定したトピックと同じです。ここの文字列でフィルタをかけて、一致したものをルールトリガとして作用させます。
アクションの追加を押下し、アクションリストからアクションを選択します。
ここでAmazon S3にメッセージを格納するを選択し、S3と接続します。
アクションの設定で、先ほど作成したS3バケットの選択とキーの入力をします。
キーはメッセージを格納するパスの指定のようなものです。構成としては、
「バケットの中に作成したファイル/クライアントID/送信されてきた時間.json」
となり、実際入力する値は
「ph_obs/${clientid()}/${timestamp()}.json」
となります。キーの指定には関数が使え、${clientid()}で送信元のクライアントIDが、${timestamp()}で送信された時間が取得できます。
これにより、それぞれのセンサごとのファイルの中に時間毎のセンサデータが保存されることになります。
ロールの選択では新たにロールを作成します。名前はOpenBlocksとしました。ロールの更新をして、アクションの追加を押します。
アクションの追加が完了したらルールの作成を押下し、ルール追加は完了です。
S3へ行き、作成したフォルダ下にセンサごとのフォルダが作成され、フォルダ内にセンサデータの入ったJsonファイルが追加されていたら確認完了です。
S3へデータを保存出来たところでお次は可視化です。(既に疲労困憊)
■AWS S3 ⇒ AWS Quicksight
AWS Quicksightは、データを視覚化できるBIサービスでS3に保管されているデータをグラフ化することができます。これによりセンサデータの可視化が行えます。
可視化は主にAWS Quicksightでの操作となります。
最初の登録、サインイン等のセットアップは省略しますのでこちら等を参考にしてください。
◇S3とQuicksightの連携
Quicksightへのサインインが完了したらS3との連携設定を行います。
Quicksightホームの右上のユーザーアイコンの中からQuicksightの管理を選択、管理画面が表示されたらセキュリティとアクセス権限(下図)画面を表示
接続された製品とサービス欄の追加または削除するを押下し、Amazon S3の追加を行います。
下図一覧の中からS3を選択するのですが、S3は特にバケットの選択が可能です。詳細の欄から先ほど作成したバケットを選択します。
バケットを選択し、更新ボタンを押下するとS3との連携は完了です。
◇Quicksightで可視化
S3との連携が完了したため、センサデータをQuicksightで表示することが出来るようになりました。早速表示してみます。
Quicksightのホーム画面の左上にある、新しい分析を押下
続けて新しいデータセットを押下し、データセットの作成画面に遷移。
新規データソースの中にS3があるはずなのでそれを押下すると、以下の画面が表示されます。
データソース名には作成する任意の名前を入れます。
突然マニフェストファイルが出てきましたが、こちらは以下のJsonファイルを作成してアップロードします。
{
"fileLocations": [
{
"URIPrefixes": [
"https://*******************************/ph_obs/********/" #ここはそれぞれのURL
]
}
],
"globalUploadSettings": {
"format": "JSON",
}
}
各部分の意味については公式ユーザガイドをご覧ください。
URIPrefixes部分のURLはS3にあるセンサデータファイルのオブジェクトURLから取得できます。この際気を付けるのは、ここのパスはフォルダの指定をするのでJsonファイルを含んだパスにしないことです。
例:”https://foobazzhogehoge.iot.ap-northeast-1.amazonaws.com/ph_obs/123456789/”
今回は値の変動がわかりやすい照度センサの可視化を最初に行ってみます。
なのでマニフェストファイルのURLを「https://******/ph_obs/照度センサのクライアントID/」に置き換えてアップロードします。
ここではデータセットの名前を「ill_data」とし、マニフェストファイルをアップロードしたらデータの編集/プレビューでデータの編集を行います。
データの編集では可視化に必要ない情報の除外や、データ型の変更など行えます。
今回可視化に必要なのは時間とセンサ測定値のみなのでそれ以外は除外します。それぞれのデータの内容はこちらに載っています。
必要なデータ以外を除外したら上部の保存して可視化を選択し、可視化フィールドへ移行します。
可視化フィールドでは整理したデータでグラフの作成ができます。
グラフ化の順序としては
①ビジュアルタイプからグラフの種類を選択する。
②グラフ化するデータを選択する。
③デフォルトでは時間間隔が日ごとなので分ごとに変更する
これでグラフ化が可能です。
また、グラフの最小単位が分なので値を合計値にしてしまうと、送信エラーなどの原因で正しいおかしなグラフになってしまうので最大や最小など一つの値にしてください。(1敗)
ここでは値を最大にしてグラフ化してみます。
これでセンサからのデータを可視化することが出来ました。他のセンサデータも同様にすることで可視化できます。
この可視化フィールドに他のセンサデータセットを追加することも可能です。
左上のデータセットの文字の横にあるペンマークをクリックし、データセットを追加をすることで他のデータセットを使用することができます。
今回使用したセンサのデータセットを作成し、4つ並べたのがこちら↓
グラフのビジュアル調整等はいろいろ試してみるとなかなか楽しいです。ここについてはまだまだQuicksightを十全に扱えてるとは言い難いので各自いい感じに仕上げてください。
データセットの更新をすることで最新状態をいつでも表示することが出来るので、センサデータ監視も可能です。
ただし、テスト等で作成した場合、送信を止めないとデータがどんどん蓄積してAWSの従量課金が勿体ないことになるので注意してください。(0敗)
以上でセンサデータの可視化は完了です。
■終わりに
今回はOpenBlocksとAWSを使用したノンプログラミングでのセンサデータの可視化を行いました。
OpenBlocksもAWSも初めて触りましたが、一番苦労したのはAWS用語を理解するところでした。
日本語のドキュメントを読んでいるはずなのに常に隣にGoogle先生が座ってました…
このシステムでは単純にデータを送信するだけですが、OpenBlocksの機能やシステムの間に様々なツールを挟むことで、より高度な分析等が出来るようになります。
次は更に使用するツールを増やし、よりリッチなデータの可視化にチャレンジする予定です。
筆者情報
塚田 陽
IoTを触りたての新人プログラマ。日夜先輩とGoogle先輩にお世話になりながら勉強中。 最近バイクを買ったので休日は風になっている。
コメント