Howto

Armadillo-X1, Armadillo-IoT G3/G3L に AWS IoT SiteWise connector をデプロイして動かす

Armadillo-X1, Armadillo-IoT G3/G3L に AWS IoT SiteWise connector をデプロイして、同一 LAN 上の OPC-UA サーバーのデータを、AWS IoT SiteWise へ発行して可視化する手順を説明します。

AWS IoT SiteWise とは

AWS IoT SiteWise は、産業機器から大規模にデータを収集し、モデル化、および分析や視覚化を行わせてくれるマネージドサービスです。AWS IoT SiteWise Monitor を使えば、技術者以外のユーザー向けに、リアルタイムで産業データの表示と分析を行う Web アプリケーションを、簡単に作ることができます。詳細は、AWS IoT SiteWise のページをご覧ください。

AWS IoT SiteWise

AWS IoT SiteWise とは

AWS IoT SiteWise ゲートウェイを、AWS IoT Greengrass によって Armadillo にデプロイすることで、Armadillo と同じ LAN 上の OPC-UA サーバーからデータを受け取り、OPC-UA の産業データを AWS IoT SiteWise にアップロードして、産業データの表示や分析を行うことができます。 この Howto では、Armadillo-X1, Armadillo-IoT G3/G3L に AWS IoT Greengrass Core をインストールして、AWS IoT SiteWise connector をデプロイし、同一 LAN 上の OPC-UA サーバーと AWS IoT SiteWise との間のゲートウェイとして設定する手順、および、OPC-UA サーバーのデータを AWS IoT SiteWise Monitor で可視化するまでの手順を説明します。なお、以下では、"AWS IoT" を省略して、"SiteWise" や "Greengrass" のように表記します。

SiteWise connector と Greengrass Core を使用せずに SiteWise でデータを可視化する方法

ところで、SiteWise Monitor を使ったデータの可視化は、Greengrass Core デバイスと SiteWise ゲートウェイとの組み合わせでしか行えないわけでは、ありません。それ以外の手段で、デバイスで得たデータを SiteWise に渡して可視化することも可能です。たとえば、次のチュートリアルでは、AWS IoT thing の deviceShadow と、SiteWise で作成したアセットモデルとを、AWS IoT Core のルールを使って関連付けて SiteWise に連動させる手順を説明しています。(※アセットモデルについては、OPC-UA サーバーのデータを SiteWise Monitor で可視化するまでの手順の中で説明します。)

Ingesting data to AWS IoT SiteWise from AWS IoT things

このチュートリアルで紹介している方法(AWS IoT Core ルールを使ったデータの取り込み)では、AWS IoT SDK の Device Shadow API を使うアプリケーションが、自身に紐づけられた AWS IoT thing の deviceShadow を更新するごとに、更新をトリガとして AWS IoT Core のルールを動作させ、ルールのアクションによって、deviceShadow のデータ項目を SiteWise へ渡す仕組みです。

SiteWise ゲートウェイがサポートしている OPC-UA や Modbus TCP、Ethernet/IP などの産業機器用プロトコルで収集するデータは扱わず、Greengrass Core もデバイスにインストールしないが、デバイスで計測したデータを SiteWise Monitor で可視化したい、という場合には、この方法が役に立つでしょう。

SiteWise connector を利用可能な Greengrass Core のバージョン

この後、Armadillo に Greengrass Core をインストールして、SiteWise connector をデプロイする手順を述べますが、Greengrass は、最新の v2 ではなく、一つ前の世代のバージョンである v1 を使用します。それは、SiteWise connector を含め、SiteWise ゲートウェイが Greengrass Core v1 用のものしかないからです。おそらく、SiteWise ゲートウェイは、Greengrass の v1 と v2 で互換性の無い部分に依存しており、そのため、Greengrass v2 では利用できないものと思われます。 実際、IoT SiteWise connector のデプロイ で述べるように、SiteWise connector(SiteWise ゲートウェイ)をデプロイする際、デプロイのために Greengrass グループと紐づけますが、Greengrass の v1 と v2 とでは、Greengrass グループの意味が異なっており、別なものであるようです:

Differences between V1 and V2

なお、Greengrass v1 は、2021年7月時点では、deprecated(非推奨)バージョンとは位置付けられていないようで、1.11.3 が6月14日にリリースされています:

https://docs.aws.amazon.com/greengrass/v1/developerguide/what-is-gg.html#ggc-version-1.11 Document history for AWS IoT Greengrass

Armadillo 本体の設定

Greengrass Core v1 の動作要件は、こちらで説明されています:

Supported platforms and requirements

この要件を満たす Armadillo の標準ソフトウェア(Linux ディストリビューション)は、Debian GNU/Linux 9 (stretch) 以降です。 Greengrass Core v1 を動かすには、この他に、バージョン 3.7 以上の Python 3 と、バージョン 8 以上の Java ランタイムが必要です(Armadillo の場合、ARM32 用の Java ランタイムが必要です)。 Java ランタイム(JRE; Java Runtime Environment)の利用条件を考えると、OpenJDK の JRE を利用するのが簡単でしょう。 OpenJDK の ARM32 用 JRE をインストールする手順は、OpenJDK JRE のインストールで述べます。

まとめると、Armadillo で AWS IoT Greengrass Core v1 を動かすために必要な標準ソフトウェアと、インストールが必要なソフトウェアは、次の通りです。標準ソフトウェアについては、Armadillo-X1, Armadillo-IoT G3/G3L の出荷時のもので要件を満たしていますので、標準ソフトウェアを更新する必要は、ありません。

標準ソフトウェア

  • Linux カーネル: Linux 4.9
  • ディストリビューション: Debian GNU/Linux 9 (strech) または Debian GNU/Linux 10 (buster)

インストールが必要なソフトウェア

  • バージョン 3.7 以上の Python 3
  • バージョン 8 以上の Java ランタイム(JRE)
  • AWS IoT Greengrass Core v1

この他に、AWS アカウントと、管理者グループに所属する IAM ユーザーが必要です。 AWS アカウントのセットアップについては、次の説明をご覧ください:

Set up an AWS account

(※このページは、Greengrass v2 の Developer Guide のものですが、v1 の方には該当するページがないため、そちらを紹介しました。)

注意: これ以後の説明では、Armadillo での操作を、root ユーザーではなく、sudo を許可した一般ユーザーで行うものと前提しています。 出荷直後や、インストールイメージをインストールした直後の状態の Armadillo には root ユーザーしか登録されていませんが、製品マニュアルに記載の手順でユーザーを作成できます。

Python 3.8 のインストール

お使いの Armadillo で、標準ソフトウェアのディストリビューションが Debian GNU/Linux 9 (stretch) の場合、Python 3 のバージョンが 3.5 であり、Greengrass Core v1 の動作要件を満たさないため、3.7 以上のバージョンをインストールしなければいけません。apt ではインストールできないため、ここでは、ソースコードをビルドしてインストールする手順を示します。ディストリビューションが Debian GNU/Linux 10 (buster) の場合は、Python 3 のバージョンが 3.7 ですから、次の手順をスキップして、OpenJDK JRE のインストールに進んでください。 ディストリビューションが Debian GNU/Linux 10 (buster) かどうか分からない場合は、次のコマンドで確認できます:

$ cat /etc/os-release | grep PRETTY_NAME
PRETTY_NAME="<ディストリビューション名>"

"<ディストリビューション名> "の部分が "Debian GNU/Linux 9 (strech)" の場合には、次の手順で、Python 3.8 をインストールして下さい。インストール手順は、次の通りです:

パッケージ情報の更新とアップグレード

$ sudo apt update
$ sudo apt upgrade

Python 3.8 のソースコードをビルド(30分ほどかかります)

$ sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev curl libbz2-dev
$ mkdir work
$ cd work
$ wget https://www.python.org/ftp/python/3.8.9/Python-3.8.9.tgz
$ tar zxvf Python-3.8.9.tgz
$ cd Python-3.8.9
$ ./configure
$ sudo make -j 2

ビルドしてできた Python 3.8 のバイナリをインストール

$ sudo make altinstall
$ sudo pip3.8 install --upgrade pip

この問題を回避するため、rngd をインストール

$ sudo apt install rng-tools

OpenJDK JRE のインストール

OpenJDK JRE を Armadillo にインストールするには、ARM32 用 JRE のビルド済みバイナリが必要ですが、OpenJDK 公式サイトでは、ARM32 用のビルド済みバイナリが提供されていません。 そのため、AdoptOpenJDKAzul ZuluLiberica OpenJDK などから入手してインストールする必要があります。 ここでは、apt でインストール可能な、AdoptOpenJDK の JRE をインストールする手順を示します。 Armadillo で次のコマンドを実行すれば、OpenJDK 11 の JRE をインストールできます。

$ sudo apt-get install -y wget apt-transport-https gnupg
$ wget https://adoptopenjdk.jfrog.io/adoptopenjdk/api/gpg/key/public
$ gpg --no-default-keyring --keyring ./adoptopenjdk-keyring.gpg --import public
$ gpg --no-default-keyring --keyring ./adoptopenjdk-keyring.gpg --export --output adoptopenjdk-archive-keyring.gpg
$ rm adoptopenjdk-keyring.gpg
$ rm adoptopenjdk-keyring.gpg* public
$ sudo mv adoptopenjdk-archive-keyring.gpg /usr/share/keyrings
$ export vers=`cat /etc/os-release | grep VERSION_CODENAME | awk -F'[=]' '{print $2}'`
$ echo "deb [signed-by=/usr/share/keyrings/adoptopenjdk-archive-keyring.gpg] https://adoptopenjdk.jfrog.io/adoptopenjdk/deb $vers main" | sudo tee /etc/apt/sources.list.d/adoptopenjdk.list
$ sudo apt-get update
$ sudo apt-get install adoptopenjdk-11-hotspot-jre

詳細は、AdoptOpenJDK のインストール手順説明ページ(Linux RPM and DEB installer packages)をご覧ください。

Greengrass Core のインストール

必要なものが揃ったら、次は、Greengrass Core v1 のインストールです。といきたいところですが、もう少しだけ、前準備が必要です。必要なのは、(1)java8 用のシンボリックリンク、(2)セキュリティ設定の追加、(3)Greengrass Core 用のユーザーとグループの追加、です。以下、順に述べます。

インストールの前に必要な設定

  • java8 用のシンボリックリンク: Greengrass Core v1 が、java8 を前提としているようで、/usr/bin/ に java8 が無いと、後述する、インストール環境チェックツール(check_ggc_dependencies)が警告を出します。そのため、/usr/bin/java へのシンボリックリンクを設定して下さい。
$ sudo ln -s /usr/bin/java /usr/bin/java8
  • セキュリティ設定の追加: fs.protected_hardlinks と fs.protected_symlinks を有効にして下さい。デフォルトでは無効になっており、check_ggc_dependencies でチェックすると、「hardlinks/symlinks 保護が無効になっているため、Greengrass Core を非セキュアモードでしか動かせない」という旨の警告が出ます。/etc/sysctl.conf を編集し、fs.protected_hardlinks と fs.protected_symlinks に対する設定行を、次のように変更して下さい。
fs.protected_hardlinks=1
fs.protected_symlinks=1
  • Greengrass Core 用のユーザーとグループの追加: 次のコマンドを実行してユーザー ggc_user とグループ ggc_group を追加して下さい。
$ sudo adduser --system ggc_user
$ sudo addgroup --system ggc_group

インストール環境のチェック

ここまでの手順で、必要なものをセットアップしていれば、Greengrass Core v1 のインストールと動作は問題ないはずですが、念のため、インストール環境のチェックツールである check_ggc_dependencies をダウンロードして、実行してみて下さい。手順は、次の通りです:

$ mkdir greengrass-dependency-checker-GGCv1.11.x
$ cd greengrass-dependency-checker-GGCv1.11.x
$ wget https://github.com/aws-samples/aws-greengrass-samples/raw/master/greengrass-dependency-checker-GGCv1.11.x.zip
$ unzip greengrass-dependency-checker-GGCv1.11.x.zip
$ cd greengrass-dependency-checker-GGCv1.11.x
$ sudo ./check_ggc_dependencies | more

check_ggc_dependencies を実行して、最後に出力される "Exit status" の内容が、以下であれば、問題ないはずです:

You can now proceed to installing the Greengrass core 1.11.x software on t
he device.
Please reach out to the AWS Greengrass support if issues arise.

なお、nodejs12.x が存在しないという警告、および、python3.7 または python3.8 が存在しないという警告が出力されると思いますが、その警告は、問題ないはずです。Python 3 については、python3.7 と python3.8 のどちらか一方がインストールされていればよいです。

さて、いよいよ Greengrass Core v1 のインストールです。Greengrass Core v1 のインストール手順には、セットアップスクリプトを使い、Greengrass グループの作成や、デバイス認証用の証明書のプロビジョニングなどを自動処理する手順と、手作業で行う手順がありますが、ここでは、手作業で行う手順で進めます。その理由は、SiteWise connector をデプロイするための Greengrass グループを、分かりやすい名前で作成するためです。この手順(手作業で行う手順)の詳細は、こちらをご覧ください。

Module 2: Installing the AWS IoT Greengrass Core software

大まかな手順は、次の通りです:

1. AWS マネジメントコンソールで Greengrass v1 のグループと Core デバイスを作成する

次のページの説明を参考にして、Greengrass v1 のグループと Greengrass Core デバイスを、デフォルト設定で作成して下さい。グループ名と Core デバイス名は、たとえば "SiteWiseDemo" と "SiteWiseDemo_Core" など、分かりやすいものにするのがよいでしょう:

Configure AWS IoT Greengrass on AWS IoT

注意! リージョンの選択

Greengrass v1 のグループを作成する際に、リージョンの選択を誤らないようにして下さい。Greengrass v1 でデプロイした SiteWise connector を SiteWise と連携させるためには、Greengrass v1 のグループを、SiteWise を利用可能なリージョンで作成しなければいけません。SiteWise を利用可能なリージョン、つまり、SiteWise の service endpoint が存在するリージョンの一覧は、次のページをご覧ください:

AWS IoT SiteWise endpoints and quotas

2. デバイス認証用の証明書類をダウンロードして、Armadillo にコピーする

上のページにある "9. Download your core's security resources and configuration file." のステップでダウンロードした証明書類のアーカイブを、Armadillo にコピーして下さい。コピーする際は、このページに書かれている手順のように、ホスト PC で scp コマンドを使ってネットワーク経由でコピーするか、または、USB メモリ経由でコピーするなどして下さい。 scp コマンドを使う場合は、ssh をインストールして下さい。インストール手順は、Armadillo のソフトウェアマニュアルをご覧下さい:

22.5. sshでArmadillo-IoT G3に接続する

3. Greengrass Core v1 のアーカイブをデバイスへダウンロードする

次のページにある表で、Architecture が Armv7l、Distribution が Raspbian の欄のリンク先のアーカイブをダウンロードして下さい。

AWS IoT Greengrass Core software

PC のブラウザでリンクをクリックしてダウンロードした場合は、証明書類と同じように、ホスト PC から Armadillo にコピーすればよいですし、リンク先の URL を調べて、Armadillo に直接ダウンロードするのでも構いません。Greengrass Core 1.11.3 の場合、URL は https://d1onfpft10uf5o.cloudfront.net/greengrass-core/downloads/1.11.3/greengrass-linux-armv7l-1.11.3.tar.gz ですから、次のコマンドでダウンロードできます。

$ wget https://d1onfpft10uf5o.cloudfront.net/greengrass-core/downloads/1.11.3/greengrass-linux-armv7l-1.11.3.tar.gz

ここから先の手順は、次のページと同じです:

Start AWS IoT Greengrass on the core device

4. アーカイブを展開して Greengrass Core v1 のパッケージと証明書類を配置する

$ sudo tar -xzvf greengrass-linux-armv7l-1.11.3.tar.gz -C /
$ sudo tar -xzvf <ハッシュ値>-setup.tar.gz -C /greengrass 

5. ルート CA をデバイスへ配置する

$ cd /greengrass/certs/
$ sudo wget -O root.ca.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem

6. Greengrass Core v1 を起動確認する

$ cd /greengrass/ggc/core/
$ sudo ./greengrassd start

SiteWise connector のデプロイ

Greengrass Core v1 のインストールが終わったら、次は、SiteWise にデータ転送するための SiteWise connector のデプロイです。デプロイに必要な手順は、次のページで説明されています:

Configuring a gateway

大まかな手順は、次の通りです。

1. SiteWise ゲートウェイ用のディレクトリを作成

Armadillo のコンソールで、以下の手順で SiteWise 用のディレクトリを作成して下さい。

$ sudo mkdir /var/sitewise
$ sudo chown ggc_user /var/sitewise
$ sudo chmod 700 /var/sitewise

2. SiteWise 用の IAM ポリシーとロールを作成

この手順では、IAM コンソールを使用します。次の説明をご覧ください:

Creating an IAM policy and role

3. IAM ロールを、SiteWise 用の Greengrass v1 グループに割り当てる

AWS マネジメントコンソールで Greengrass v1 のグループと Core デバイスを作成する」で作成した Greengrass v1 のグループに対し、上の手順で作成した IAM ロールを割り当てて下さい。この手順では、Greengrass v1 コンソールを使用します。詳細は、次の説明をご覧ください:

Configuring an AWS IoT Greengrass group

グループの「設定」タブ画面で、上の手順で説明されている通り、ストリームマネージャーを「有効」に設定して下さい。さらに、「デフォルトの Lambda 関数コンテナ化」で「コンテナなし」を選択して下さい。

4. SiteWise connector を Greengrass v1 グループに追加する

この手順では、引き続き Greengrass v1 コンソールを使用します。次の説明をご覧ください:

Configuring the AWS IoT SiteWise connector

ここで、この Howto で説明する手順では、OPC-UA サーバーを認証なしで動かしますので、シークレットを作る必要は、ありません。シークレットを作らずに進めて下さい。

5. デプロイを実行

「IoT SiteWise」connector を Greengrass v1 グループに追加したら、上の手順の 9. に書かれているように、[アクション] メニューから [デプロイ] を選択して、Sitewise connector をデプロイして下さい。しばらく待つと(※長くとも10分程度)、Armadillo へのデプロイが完了して、デプロイの進行状態表示が「正常に完了しました」に変化するでしょう。

OPC-UA サーバーのセットアップ

SiteWise connector のデプロイが済んだら、次は、SiteWise connector がデータソースとして参照/接続する OPC-UA サーバーのセットアップです。ここでは、FeeOpcUa プロジェクトの python-opcua のサンプルコードを使います。python-opcua については、こちらのページも、ご覧になってみて下さい:

Python OPC-UA Documentation

本来は、OPC-UA サーバーが産業機器からデータを収集し、OPC-UA サーバーが集めたデータを、Armadillo 上の SieteWise connector 経由で SiteWise へアップロードする、という構成になるでしょう。しかし、ここでは、簡単のため OPC-UA サーバー自身がデータを作るようにします。本 Howto は、SiteWise connector と SiteWise の使い方を紹介するものですので、OPC-UA サーバーから先の取り扱いは必要最小限にとどめます。ご了承下さい。

OPC-UA サーバーを動かす環境は、Windows 10 の PC をお使いなのであれば WSL + Ubuntu が簡単だと思います。Linux PC をお使いであれば、そのまま使える場合が多いでしょうし、OPC-UA サーバーも Armadillo で動かす、というやり方も可能です。以下に、こちらで説明した手順で Python 3.8 をインストールした Armadillo にセットアップする場合の手順を示します。Python 3.7 以上が標準インストールされているかまたは、apt でインストールした環境では、以下のコマンドで 'pip3.8' の部分を 'pip3' に置き換えて実行してください。

1. python-opcua に必要なパッケージをインストール

$ sudo apt install libxslt-dev
$ sudo apt install libxml2-dev
$ sudo apt install rustc
$ sudo pip3.8 install lxml
$ sudo pip3.8 install pytz
$ sudo pip3.8 install cryptography
$ sudo pip3.8 install python-dateutil

2. python-opcua のリポジトリを取得

$ sudo apt install git
$ git clone https://github.com/FreeOpcUa/python-opcua.git

3. OPC-UA サーバーのサンプルコードを改変

OPC-UA サーバーとして、python-opcua 付属のサンプルコードのうち、server-minimal.py を利用します。このサンプルでは、"MyObject" という名前のオブジェクトに "MyVariable" という名前の変数を持たせ、その初期値を 6.7 とした後、1秒おきに 0.1 ずつ増やしていくようになっています。そのままでも、SiteWise connector の動作確認には十分ですが、次のように変更してみて下さい。 server-minimal.py は、python-opcua/examples/ ディレクトリに収録されています:

    try:
        count = 0
        while True:
            time.sleep(1)
            count += 0.1
            if (count > 10.0):  ★
                count = 0       ★
            myvar.set_value(count)
    finally:
        #close connection, remove subcsriptions, etc
        server.stop()

上に引用したのは、server-minimal.py の、ループ動作部分です。末尾に ★ を付けた行は、SiteWise Monitor でグラフ化する際に、グラフを見やすくするために追加した行です(server-minimal.py の内容を変更する時は、★ は入れないでください)。この2行を追加することで、傾き一定の単調増加するグラフ(つまり、右上がりの直線)ではなく、鋸歯状波のようなグラフになるはずです。

4. OPC-UA サーバーの起動

$ cd python-opcua/examples
$ python3.8 ./server-minimal.py
Endpoints other than open requested but private key and certificate are not set.
Listening on 0.0.0.0:4840

5. OPC-UA サーバーの動作確認

server-minimal.py を実行開始した後、上のようなメッセージが出れば、無事に起動していますが、それだけですと、実際に動作しているのかどうか分かりづらいですから、OPC-UA クライアントを使って動作確認してみて下さい。FreeOpcUa プロジェクトが公開している、opcua-client-gui というオープンソースのクライアントがあります。Windows であれば、OPC Foundation のサイトで紹介されている、Integration Objects 社の OPC UA Client というフリーのツールもあります。

SiteWise の設定

長い準備が続きましたが、ここから、ようやく SiteWise コンソールでの操作になります。SiteWise コンソールで行う設定操作は、次の通りです:

  1. SiteWise connector 用に作ったGreengras v1 グループを紐づけた、SiteWise gateway を追加する。
  2. SiteWise gateway のデータソースとして OPC-UA サーバーを設定する。
  3. OPC-UA サーバーのデータに対するアセットモデルを作成する。
  4. アセットモデルからアセットを作成して、SiteWise gateway のデータソースの計測値を、アセットのプロパティにマッピングする。

この手順のうち、2 の、SiteWise gateway に対するデータソースの設定では、設定した内容が、SiteWise gateway に紐づけた Greengras v1 グループを通じて、Greengrass によって Core デバイス(Armadillo)にデプロイされます。それにより、設定した内容が Core デバイス上の SiteWise connector の動作に反映されます。そして、4 では、SiteWise connector がアップロードする計測値データを、SiteWise でどう解釈処理するかを設定します。 つまり、1 と 2 は、SiteWise からの、Greengrass Core デバイスに対する関連付けと設定を行うための操作であり、3 と 4 は、Greengrass Core デバイスがアップロードするデータに対する、SiteWise による解釈処理の設定を行うための操作です。

以下、それぞれの手順について、順に説明します。それぞれ、SiteWise のドキュメントへのリンクを記しますので、詳細は、リンク先のドキュメントをご覧ください。

1. SiteWise gateway を追加

SiteWise のコンソールを開き、トップページにある「ゲートウェイを作成」をクリックして、SiteWise にゲートウェイ (gateway)を追加します。詳しい手順は、このドキュメントをご覧ください:

Adding the gateway to AWS IoT SiteWise

ゲートウェイの設定画面で、「Greengrass グループ ID」に、作成済みの Greengrass v1 グループを指定することで、SiteWise 上に作成するゲートウェイ(SiteWise gateway)が、そのグループに紐づけられた Core デバイス上の SiteWise connector に紐づけられるのです。

2. SiteWise gateway のデータソースを設定

SiteWise にゲートウェイを追加したら、ゲートウェイの一覧表示画面を開き、追加したゲートウェイの名前の隣にある「管理」というドロップダウンメニューから「詳細を表示」を選択して、ゲートウェイの詳細表示画面を開いてから、データソースを設定します。詳しい手順は、SiteWise のドキュメントの、このページをご覧ください:

Configure an OPC-UA source (console)

OPC-UA データソースの設定画面で、「ローカルエンドポイント」には、OPC-UA サーバーを稼働させている Armadillo または PC の IP アドレスと、待ち受けポート番号(server-minimal.py では 4840)を、次のように指定してください:

opc.tcp://<IP アドレス>:<ポート番号>

なお、server-minimal.py では、全てのネットワークインタフェースに対して待ち受けするために、サーバーの待ち受け IP アドレスとして 0.0.0.0 を指定していますが、ここでは、具体的な IP アドレスを設定しなければいけません。ここで設定するのは、OPC-UA サーバーが待ち受け時に指定する IP アドレスではなく、SiteWise connector(SiteWise gateway)が OPC-UA サーバーへ接続する際に指定する IP アドレスだからです。Windows PC であれば ipconfig、Armadillo や Linux PC であれば ifconfig を使って、ネットワークインタフェースに割当たっている IP アドレスを調べ、そのアドレスを指定してください。

注意: 実際の運用環境では、OPC-UA サーバーの IP アドレスが変わらないように、OPC-UA サーバーを稼働させるコンピューターには、DHCP ではなく、固定 IP アドレス設定を行うようにして下さい。

3. アセットモデルを作成

SiteWise gateway を追加して、データソースである OPC-UA を gateway に設定したら、次は SiteWise 側での解釈処理のための設定です。解釈処理のために必要なのが、アセットモデルです。アセットモデルは、SiteWise にデータをアップロードする送信元が、どのようなデータ項目や属性を持っているかを定義するものです。産業機器であれば、その機器が計測する測定値の集まりを記述したのがデータモデルです。詳しくは、SiteWise のドキュメントの、このページをご覧ください:

Modeling industrial assets

Microsoft の Azure IoT Plug and Play サービスをご利用になったことのある方なら、Azure IoT Plug and Play の「デバイスモデル」に相当するのがアセットモデルだと考えればよいでしょう。 アセットモデルを作成するには、SiteWise コンソールの、画面左端にあるメニューから [ビルド] > [モデル] を選んでアセットモデル管理ページを開き、「モデルの作成」をクリックしてください。詳しい手順は、このページをご覧ください:

Creating an asset model (console)

アセットモデルを作成したら、そのモデルが持つ計測値を定義します。モデル編集画面を開き、「測定の定義」で測定値を追加して下さい。この Howto で使う OPC-UA サーバーは、0 から 10.0 まで 0.1 ずつカウントアップして 10.0 で折り返す、カウンタ値を計測値として持ちますので、測定の名前を "count" にするのが、分かりやすいかも知れません。「測定の定義」を追加する手順は、このページをご覧ください:

Defining data streams from equipment (measurements)

4. 計測値データをアセットのプロパティにマッピング

アセットモデルの作成と測定の定義が済んだら、次は、アセットモデルの実体(インスタンス)であるアセットを作成して、アセットのプロパティに計測値データをマッピングします。ここで、計測値データをマッピングするするアセットのプロパティは、アセットモデルで定義した「測定」のことです。詳しい手順は、このページををご覧ください:

Mapping industrial data streams to asset properties

この Howto で使う OPC-UA サーバー(server-minimal.py)が計測値として持つカウンタ値は、サンプルコードの説明で書いたように、"MyObject" という名前のオブジェクトが持つ "MyVariable" という名前の変数です。この変数の値は、SiteWise connector によって、"/MyObject/MyVariable" というパスの計測値として SiteWise にアップロードされます。従って、アセットの編集画面で、"count" という名前の測定の値(測定の「エイリアス」)には /MyObject/MyVariable を設定して下さい。

ここまで済んだら、必要な設定は全て揃いました。動作確認してみましょう。

動作確認

ここまでの手順で、次のことを行いました。まず、Greengrass Core v1 を Armadillo にインストールして、Greengrass v1 に作成したグループに Core デバイスとして割り当てました。次に、Greengerass v1 から SiteWise connector をデプロイした後、SiteWise で gateway の追加とデータソースの設定を行い、データソースとして参照する OPC-UA サーバーをセットアップしました。最後に、アセットモデルの作成と、アセットモデルから作成したアセットとデータソースの計測値のマッピングを行いました。これで、Armadillo にデプロイされた SiteWise connector が、同一 LAN 上の OPC-UA サーバーのデータを取得して SiteWise にアップロードし、SiteWise が、計測値をマッピングされたアセットの定義(アセットモデル)に従って解釈処理します。 それらの動作が正しく機能しているかどうかを、SiteWise Monitor で確認してみましょう。SiteWise Monitor の詳細は、次のページをご覧ください:

Monitoring data with AWS IoT SiteWise Monitor

SiteWise Monitor を使って計測データを可視化する手順は、次の通りです。

1. SiteWise Monitor ポータルを作成

iteWise コンソールの、画面左端にあるメニューから [モニタリング] > [ポータル] を選んで SiteWise Monitor のポータル一覧画面を開き、「ポータルを作成」をクリックしてポータルを作成します。詳しい手順は、このページをご覧ください:

Creating a portal

ポータルの作成画面で、ユーザー認証方式として AWS SSO と IAM を選択できますが、IAM を選択した場合、上のページに書いてあるように、認証対象の IAM アカウントには、iotsitewise:DescribePortal パーミッションを与える必要があります。それから、「管理者の招待」と「ユーザーの割り当て」は、試しに使ってみるだけであれば、どちらも自分自身を割り当てるのが簡単です。

2. ダッシュボードを作成

ポータルを作成した後、「リンク先」の URL を開くか、またはポータルの詳細画面で「ポータルを開く」をクリックすると、ダッシュボード画面が開きます。ダッシュボード画面で「Create dashboard」を選択すると、ダッシュボードを作成できます。ダッシュボードの作成画面で、計測値のグラフ表示領域をドラッグ&ドロップ操作で配置でき、配置した後、"Save dashboard" をクリックすると、ダッシュボードが保存されて、計測値のグラフが表示されます。詳しい手順は、SiteWise のチュートリアルの、このページをご覧ください:

Creating dashboards to visualize wind farm data

この Howto で使っている OPC-UA サーバーのカウンタ値の場合は、鋸歯状波の形のグラフが表示されるはずです。試してみて下さい。

Greengrass Core v1 をシステムサービスに設定する

無事に、OPC-UA サーバーのデータを SiteWise Monitor のダッシュボードでグラフ表示できたでしょうか?もしうまくいかない場合は、手順を読み返して、手違いがないか確認してみて下さい。どうしてもうまくいかない場合は、お使いの Armadillo の機種名と、具体的に、どこがうまくいかないのかの情報を添えて、Armadillo フォーラムに質問を投稿してみて下さいませ。

さて、Greengrass Core v1 のセットアップについて、一つ補足しておきます。「Greengrass Core v1 を起動確認する」で述べたように、この Howto で述べた Greengrass Core v1 のセットアップ手順では、Greengrass Core v1 を自動起動できず、greengrassd コマンドを使って手動起動しなければいけません。Armadillo の起動時に Greengrass Core v1 が自動起動されるようにする方法は、このページで説明されています:

Configure the init system to start the Greengrass daemon

/etc/systemd/sysetem/ ディレクトリに greengrass.service という名前のファイルを作り、上のページに載っている、"service file for systemd" の内容を greengrass.service に書き込めば、Armadillo の起動時に Greenngrass Core v1 が自動起動されるようになります('greengrassd start' を、sytemd が起動時に実行するようになります)。

補足

この Howto を作成するにあたり、次のブログを参考にしました。有難うございます。

AWSでOPC UAの使い方!Greengrassで接続してみた