目次
はじめに
こんにちは、omkです。
前回はPythonでOPC UAのサーバを構築してクライアントからデータを連携出来るようにしました。
PythonでOPC UAで通信してみた
今回はこちらのサーバをAWS IoT SiteWiseに接続してデータをグラフで可視化して確認していきます。
IoT SiteWiseとは
産業機器からのデータを収集・保存し、リアルタイムな可視化を提供してくれるサービスです。
これにより機器の故障の検出や問題の特定、予知保全などが迅速に行えるようになります。
シリーズ
やってみた
構成としてはこんな感じになっていきます。
検証のために用意した環境なのでOPC UAのところはとりあえずEC2で作っていますが用途的には物理マシンとかのほうが多いと思います。
python-opcuaで作成したOPC UAサーバにAWS IoT SiteWiseを接続してクラウド側にデータを連携します。
この連携はAWS IoT Greengrassを利用してAWS IoT SiteWise Edge GatewayをOPC UAサーバに導入することで実現します。
以下の流れで実施します。
- AWS IoT Greengrassの導入
- AWS IoT SiteWise Edge Gatewayの導入
- AWS IoT SiteWiseの導入
動作環境
SiteWise Edge Gatewayの動作要件は以下のドキュメントに記載があります。
SiteWise Edge セルフホストゲートウェイの要件
OS・マシンスペックが動作要件を満たしており、AWS IoT Greengrass V2 Coreが導入されていることが要件となります。
詳細はAWS公式のドキュメントを参照ください。
前提OPC UA環境について
前回「python-opcua」で作成した環境を流用します。
OPC UAのデータ構造としては、ルート配下に各端末のオブジェクトがあり、端末ごとのCPU使用率・メモリ使用率・SWAP使用率を変数として連携します。
構造としては以下になります。
root/
├─ Client_A
│ ├─ CPU_USAGE
│ ├─ MEM_USAGE
│ └─ SWAP_USAGE
│
└─ Client_B
├─ CPU_USAGE
├─ MEM_USAGE
└─ SWAP_USAGE
AWS IoT Greengrassの導入
今回はOPC UAサーバと同じマシンにGreengrassコアデバイスを導入します。
IoT Greengrassの導入は今回の本筋から外れるので省略します。
以下のドキュメントを参考にしながら進めるのが良いです。
自動リソースプロビジョニングを使用して AWS IoT Greengrass Core ソフトウェアをインストールする
ドキュメント中にrootユーザーの権限を設定する箇所があります。
ユーザーの権限が次の例のようになっていることを確認します。
root ALL=(ALL:ALL) ALL
Greengrassでaws.iot.SiteWiseEdgePublisherのコンポーネントをデプロイする際に依存関係でaws.greengrass.StreamManagerもデプロイされますが、その際にこの設定が出来ていないと正常に動かない問題が発生するケースがあるので注意です。
またGreengrassコアソフトが正常にインストール出来ない場合にはバージョンを下げると問題なくインストール出来ることがあります。
マシン上でサービスが起動してコンソール上にコアデバイスが認識されたらOKです。
AWS IoT SiteWise Edge Gatewayの導入
IoT SiteWiseのコンソールからゲートウェイを作成します。
今回は先にGreengrassのセットアップを実施して、それを指定してゲートウェイを作成する流れで進めますが、
ここでGreengrassの自動セットアップを行うことも可能です。
その場合はGreengrassに必要な権限設定などが行われた上でインストール用のシェルスクリプトが提供されます。
では、セルフホストゲートウェイの設定をしていきます。
コアデバイスには先ほど作成したデバイスを設定します。
これでゲートウェイを作成したら自動でGreengrassのコンポーネントのデプロイが実行されます。
デプロイのステータスが「完了」になるのを待ちましょう。
AWS IoT SiteWiseの導入
ここまででOPC UAサーバ側の設定は完了したのでSiteWise側の設定を進めていきます。
データソース
署名や暗号化を利用する場合はアドバンスト設定を行います。
これでデータソースと同期されたらOPC UAサーバからデータを取得出来る状態になっています。
試しにクライアントからサーバに変数をセットするとSiteWise側でデータストリームとして認識されます。
モデル
連携されるデータの構造を定義します。
改めて構造を確認しましょう。
root/
├─ Client_A
│ ├─ CPU_USAGE
│ ├─ MEM_USAGE
│ └─ SWAP_USAGE
│
└─ Client_B
├─ CPU_USAGE
├─ MEM_USAGE
└─ SWAP_USAGE
Client_A、Client_BというオブジェクトにCPU_USAGE、MEM_USAGE、SWAP_USAGEという変数が設定されます。
なのでここではクライアント用のモデルを作成しそのプロパティとしてCPU_USAGE、MEM_USAGE、SWAP_USAGEを定義します。
Client_A、Client_Bのそれぞれのオブジェクトについてはこのモデルに規定されるアセットとして定義します。
「測定」は連携されたデータをそのまま格納する場合のプロパティです。
他にもプロパティをかけ合わせた値を設定したり時間で集計することも出来ます。
アセット
モデルが出来たらアセットを作成します。
アセットはモデルで定義された属性を持つ実体です。クラスとインスタンスの関係みたいな感じですね。
作成したモデルを選択してアセット名を割り当てるだけでアセット自体は完成です。
ですがこのままではデータストリーム(連携されたデータ)とアセットが紐づかないのでモデルのプロパティを編集して「プロパティエイリアス」を設定します。
これによりこのデータがこのアセットのものである、という紐づけが行われます。
SiteWise Monitor ポータル
ここまででSiteWiseへのデータの連携と連携されたデータの特定が出来ました。
SiteWise Monitorでポータルを作成することでこれらのデータを可視化することが出来ます。
ポータルの作成ボタンからちゃちゃっと設定してステータスが「アクティブ」になったら払い出されたURLにアクセスします。
ダッシュボードを作成することで分かりやすく表示することも可能ですが、
個別の値としてはアセットからアセットごとのプロパティが取得できます。
試しにクライアントAで何度かメモリ爆食いスクリプトを実行してみたところしたのようなグラフになりました。
ほぼリアルタイムにデータが連携されています。
おわりに
SiteWiseにOPC UAでデータを連携できました。
次回はポータル上でダッシュボードを作成して分かりやすく表示してみます。
アーキテクト課のomkです。
AWSについて雑多に取り組んだ内容を発信しています!!