アナログ入力信号を Amazon DynamoDB に格納

システム構成

SmartFitPRO Standard(SRL-420-CM1A)を利用して、アナログ信号入力(4-20mA)をAmazon DynamoDBに格納することを目指します。
※以降本書ではSmartFitPRO Standard(SRL-420-CM1A)はSmartFitPRO Standardと記載します。
今回作成するシステムは下図のような構成になります。

AWS、SORACOMプラットフォームの各設定方法は下記HPを参考にさせて頂きました。

AWS Lambda を実行し Slack へ通知する

準備するもの

ハードウェア

品名数量備考
SmartFitPRO Standardスターターキット1LTE通信可能なルーターです。
SIMカードとセットになっています。
特定地域向け IoT SIM (plan-D)サイズ: マイクロ(データ通信のみ/D-300MB)1上記キットとセットになっています。
設定用PC1SmartFitPRO Standardの設定に使用します。
対応OSはWindows 10です。
設定・電源供給用USBケーブル1設定用PCとSmartFitPRO Standardの接続に利用します。SmartFitPRO StandardのUSBポートはUSB Type-Cです。
設定時はデータ通信可能なUSBケーブルをご用意ください。
接点入力用ケーブル18接点入力可能
SmartFitPRO Standardに同梱されています。
アナログ入力用ケーブル1アナログ信号4ch入力可能
SmartFitPRO Standardに同梱されています。
遠隔監視用PC1インターネット接続可能で最新Webブラウザでサイト閲覧が自由にできること。
流量計/制御弁/圧力計1本レシピでは使用例として電流発生器を使用します

ソフトウェア

品名数量価格備考
SmartFitPROSettingTool_SoracomStore_v0201.exe1無料SmartFitPRO Standardの設定ソフトウェアです。保存先は任意です。
SRL-420-CM1A_v001.xml1無料初期パラメータ設定用定義ファイルです。
SRL-420-CM1A_v001.csv1無料初期パラメータ設定用CSVファイルです。

上記ソフトウェアはSmartFitPRO資料ページからダウンロードできます。

必要なクラウドサービスアカウント

サービス名アカウント作成方法
SORACOMアカウントSORACOMアカウントの作成(JP)
AWSアカウントAWSアカウント作成の流れ

利用するクラウドサービス

サービス名概要
SORACOM Air for セルラーIoT 向けのコネクティビティを提供するサービスです。ユーザーコンソールや API を利用して各種設定の変更や、通信量を監視するなど IoT デバイスを一元管理することができます。
SORACOM FunkSORACOMが提供するAWS、Azure、Google Cloudといったパブリッククラウドが提供するFaaS (Function as a Service)のFunctionを呼び出すサービスです。今回はAWS Lambdaを呼び出すのに利用します。
Amazon DynamoDBAmazonが提供するフルマネージドでサーバーレスなkey-value NoSQLデータベースです。このデータベースにPLCの接点データを格納します。
AWS LambdaAmazonが提供するサーバーをプロビジョニングしたり管理しなくてもコードを実行できるコンピューティングサービスです。PLCの接点データをAmazon DynamoDBへ格納するFunctionとして利用します。

(※)各種クラウドサービスに必要な費用は下記HPを参照ください。

SORACOMの課金体系
AWSの料金
AWS Lambda料金
Amazon DynamoDB料金

ステップ1:Amazon DynamoDBの作成

アナログ入力信号データを保存するAmazon DynamoDBを作成します。
以降に記載しています操作手順や画面表示が異なる場合があります。予めご注意ください。

1-1. Amazon DynamoDBの「テーブルの作成」画面にアクセスします。
1-2. テーブル名は任意ですが、今回はテーブル名を「Analog_Database」、パーティションキーを「time」「文字列」とします。
テーブル名とパーティションキーはLambdaコード作成の際に使用するので、変更した場合はメモしておきます。

1-3.「テーブルの作成」をクリックします。

これでアナログ入力用データの保存用テーブルが作成できました。

ステップ2:AWS Lambdaの作成

続いて、AWSに届いたデータを作成したテーブルへ送信するAWS Lambdaの関数を作成します。
2-1. AWS Lambdaの「関数の作成」画面にアクセスします。
2-2. 「一から作成」をクリックし、以下の項目を設定します。

項目説明
関数名関数名は任意ですが、ここでは「Analog-to-Dynamodb」とします。
ランタイム「Python x.x」を選択します。最新のサポート対象のPythonバージョンを選択してください。
アーキテクチャ「arm」を選択します。

2-3.「関数の作成」をクリックします。
2-4.「コードソース」に以下のサンプルプログラムを入力します。
「payload」の「time」は「ステップ1:Amazon DynamoDBの作成」で作成したテーブルの
パーティションキー名にしてください。

import json
from datetime import datetime, timedelta, timezone
import boto3
import os

TZ = timezone(timedelta(hours=+9), 'JST')
TABLE_NAME = os.environ['DYNAMODB_TABLE_NAME']
dynamodb = boto3.resource('dynamodb')

def lambda_handler(event, context):

    payload = {
            'time': datetime.now(TZ).strftime('%Y/%m/%d %H:%M:%S'),
            'devicetype':       str(event.get('devicetype')),
            'fw_ver':           str(event.get('fw_ver')),
            'message_type':     str(event.get('message_type')),
            'timestamp':        str(event.get('timestamp')),
            'device_state':     str(event.get('device_state')),
            'di0':              str(event.get('di0'))
            'di1':              str(event.get('di1'))
            'di2':              str(event.get('di2'))
            'di3':              str(event.get('di3'))
            'di4':              str(event.get('di4'))
            'di5':              str(event.get('di5'))
            'di6':              str(event.get('di6'))
            'di7':              str(event.get('di7'))
            'AD1':              str(event.get('AD1'))
            'AD2':              str(event.get('AD2'))
            'AD3':              str(event.get('AD3'))
            'AD4':              str(event.get('AD4'))        
    }

    dynamodb.Table(TABLE_NAME).put_item(Item=payload)

2-5.「デプロイ」をクリックします。
2-6.上記コードではデータを保存するDynamoDBのテーブル名を環境変数として取り込んでいるため、環境変数を設定します。
2-7.「設定」⇒「環境変数」⇒「編集」の順にクリックします。

2-8.「キー」に「DYNAMODB_TABLE_NAME」、値に「ステップ1:Amazon DynamoDBの作成」で作成したテーブル名を入力して「保存」をクリックします。
「キー」値はコードで指定しているため、変更しないようにしてください。

次に作成した関数に「ステップ1:Amazon DynamoDBの作成」で作成したテーブルにデータを保存する(PutItem)権限を与えます。

2-9.「設定」⇒「アクセス権限」の順にクリックします。

2-10.「実行ロール」に関数作成時に自動で作成されたロールが表示されているので、
クリックします。
2-11.新しいウィンドウでIAMロールコンソールが開かれるので、「許可を追加」⇒
「インラインポリシーを作成」の順にクリックします。

12.以下の項目を設定し、「リソース」⇒「特定」の順にクリックします。

項目説明
サービス「サービスの選択」をクリックして、「DynamoDB」をクリックします。
アクション「フィルタアクション」に「putitem」と入力し、「PutItem」にチェックを入れます。

13.「ARNの追加」を選択し、「Region」にDynamoDBを作成したリージョン名を入力します。
DynamoDBコンソールからリージョン名は確認出来ます。
14.「Table name」に「ステップ1:Amazon DynamoDBの作成」で作成したテーブル名を
入力します。
15.「ARNを追加」をクリックします。

16.「ポリシーの確認」をクリックします。
17.「名前」にAWS IAMポリシーの名前を入力して「ポリシーの作成」をクリックします。
ポリシー名は任意ですが、ここでは「Analog_to_DynamoDB_Lambda_policy」とします。

これで作成した関数に「ステップ1:Amazon DynamoDBの作成」で作成したテーブルにデータを保存する権限が与えられました。

18.Lambdaコンソールに戻って、この関数のARNをコピーします。
このARNはこれ以降、${lambda_func_arn}と表記します。
image.png

ステップ3:IAMロールの作成

Funkが動作するSORACOMプラットフォームのAWSアカウントに対して、作成したLambdaの実行を許可するためのAWS IAMロールを作成します。

1.IAMコンソールにアクセスして、「アクセス管理」⇒「ロール」の順にクリックして、「ロールを作成」をクリックします。

image.png

2.「AWSアカウント」⇒「別のAWSアカウント」の順にクリックし、「アカウントID」にSORACOMプラットフォームのAWSアカウントIDを入力します。
Funkが動作するSORACOMプラットフォームのAWSアカウントのIDはカバレッジタイプによって
異なります。
 ・日本カバレッジ:762707677580
 ・グローバルカバレッジ:950858143650

image.png

3.「外部IDを要求する」にチェックを入れ、「外部ID」に任意の文字列を入力します。
「外部ID」に入力した文字列はこれ以降、${external_id}と表記します。
(例: External-ID-Mej73gfhrFhimGKb)

image.png

4.「次へ」をクリックします。
「許可を追加」画面が表示されます。
5.「ポリシーの作成」をクリックします。

image.png

別のウィンドウまたは別のタブで「ポリシーの作成」画面が表示されます。

ここからは「ポリシーの作成」画面でポリシーを作成します

「ポリシーの作成」画面の操作が終わったら、[ポリシーの作成] が表示されている「許可を追加」画面に戻ってきて IAM ロールを作成する操作を続けます。画面を閉じないでください。

6.以下の項目を設定します。

項目説明
サービス「サービスの選択」をクリックして、「Lambda」をクリックします。
アクション「フィルタアクション」に「InvokeFunction」と入力し、「InvokeFunction」にチェックを入れます。
image.png

7.「リソース」⇒「指定」⇒「ARNの追加」の順にクリックします。
image.png
「ARNの追加」画面が表示されます。
8.「Lambda_functionのARN設定」に${lambda_func_arn}を入力して、「追加」をクリックします。

image.png

9.「次のステップ:タグ」⇒「次のステップ:確認」の順にクリックします。
10.「名前」にAWS IAMポリシーの名前を入力して「ポリシーの作成」をクリックします。
ポリシー名は任意ですが、ここでは「PLCdata_To_DynamoDB_policy」とします。

image.png

11.ポリシー画面が表示されているウィンドウまたはタブを閉じて、「許可を追加」画面に戻ります。
12.「更新ボタン」をクリックして手順12で入力したAWS IAMポリシーの名前をテキストボックスに入力して、Enterキーを押します。

image.png

13.作成したAWS IAMポリシーにチェックを入れて、「次へ」をクリックします。
14.「ロール名」にIAMロールの名前を入力して、「ロールを作成」をクリックします。
   ここでは「PLCdata_to_DynamoDB_role」とします。
image.png

15.作成したIAMロールの名前をクリックし、「ARN」をメモします。
このARNはこれ以降、${iam_role_arn}と表記します。
image.png

これでAWSでの設定は完了です。

ステップ4:Funkのセットアップ

FunkからAWS Lambdaの関数を呼び出すための設定をSORACOMユーザーコンソールで行います。

認証情報ストアにAWS IAMロール認証情報を登録する

Funk から AWS Lambda の関数を呼び出すための認証情報を登録します。

1.認証情報ストアの「認証情報を登録」画面を表示します。
詳しくは、認証情報を登録するを参照してください。
2. 以下の項目を設定します。

項目説明
認証情報ID認証情報を識別するために任意の名前を入力します。ここでは「PLCdata-AWS-DynamoDB-cert」とします。
種別「AWS IAMロール認証情報」を選択します。
ロールARN${iam_role_arn}を入力します。
外部ID${external_id}を入力します。
image.png

3.「登録」をクリックします。

Funkを有効化する

IoT SIMに対してFunkを有効化します。

Funk の設定はグループに対して行います
ここでは、グループの設定を変更する操作のみを説明します。グループの仕組みやグループを作成する操作について詳しくは、グループ設定を参照してください。

1.SIM グループ画面で [SORACOM Funk 設定] をクリックします。
SIM グループ画面を表示する操作について詳しくは、グループの設定を変更するを参照してください。
2.スイッチをクリックして「ON」にします。
3.各項目を設定します。

項目説明
サービス「AWS Lambda」を選択します。
関数のARN${lambda_func_arn}を入力します。
認証情報認証情報ストアにAWS IAMロール認証情報を登録するで登録した認証情報を選択します。
送信データ形式ここでは「JSON」を選択します。
image.png

4.「保存」をクリックします。
5.IoT SIM が所属するグループを切り替えます。

これでIoT SIM の Funk の設定が完了しました。

ステップ5:SmartFitPRO Standardのセットアップ

下記からダウンロードできるSmartFitPRO Standardの取り扱い説明書を参照して、SmartFitPROのセットアップを行っていきます。

SmartFitPRO Standard取り扱い説明書

SIMを挿入するため、ケースを開ける

ケース側面(下記写真)の爪部にマイナスドライバ等を差し込み、持ち上げ、ケースを外します。
反対側の2か所も同様に外し、最後にケース蓋を上方向に外します。

image.png

SIMを挿入

1.下記写真の、SIMスロット部のシルバーの部分を指で軽く上から抑え、手前(矢印)方向にスライドします。(ロックが外れます)
2~ 3. SIMスロットのカバーを上方向に持ちあげて、カバーを開けます。
4.SIMを写真のように置きます。
5.写真の②の部分を下に下ろします。
6.カバーを抑えながら、1)と逆の方向(奥方向)にスライドし、スロットをロックします。

ソフトウェアパラメータの設定

SmartFitPRO Standardは工場出荷時、SORACOM Harvestに接続する設定となっているため、今回、設定をSORACOM Funkに接続する設定に変更します。

1.先端の細いピンセット等でSmartFitPRO Standardのユーザースイッチを押しながら、
PCとUSBケーブルを接続します。
※ユーザースイッチのクリックを確認し、それ以上は強く押さないでください。

緑LEDが約500ms間隔で点滅したら、設定モードに移行しています。

2.設定アプリケーション「SmartFitPROSettingTool_SoracomStore.exe」を起動します。
※起動時に下図のようなエラー画面が表示されますが、「OK」をクリックしていただくと。
設定アプリケーションが起動します。

3.アプリケーションが起動しましたら、「接続」をクリックします。

4.「ツール定義ファイル読込」をクリックし、「設定ツールダウンロードページ」からダウンロード
   したzipファイル内の「SRL-420-CM1A_v001.xml」を選択します。

5.「インポート」をクリックし、「設定ツールダウンロードページ」からダウンロードした
  zipファイル内の「SRL-420-CM1A_v001.csv」を選択します。

6.SRL-420-CM1A_v001.csvを開くと下図のように「ロック状態でインポートしますか?」と確認画面
  が表示されますので「いいえ」を選択します。
  ※「はい」を選択された場合は再度インポートを実施ください。

7.「設定ツールダウンロードページ」からダウンロードしたzipファイル内の
  「readme_SRL-420-CM1A.pdf」に記載されている方法で「管理者モード」に移行します。

8.工場出荷時からの設定の変更について、例として送信周期を「300」(5分)から
  「600」(10分)に変更します。
  送信周期の変更後「書込」をクリックします。
  ①LEVEL1の項目全体を書込み ②1項目のみ書込み

9.「LTE/Cloud Setting」タブ⇒「TCP/UDP」タブの順にクリックします。
10.下記設定を変更して、「書込」をクリックします。

項目説明
エンドポイント「harvest.soracom.io」⇒「uni.soracom.io」に変更します。
エンドポイント(HTTP)「http\://harvest.soracom.io」⇒「http\://uni.soracom.io」に変更します。
PORT「8514」⇒「23080」に変更します。


11.「切断」をクリックし設定アプリケーションを閉じます。


12.USBケーブルを外します。

これでソフトウェアパラメータの設定は完了です。

SmartFitPRO Standard起動

SmartFitPRO StandardとUSBケーブルを接続します。

緑LEDが不規則に点滅した後、10秒に1回程度の点滅に落ち着きます。

これで初回起動時の通信が完了しました。

ステップ6:Amazon DynamoDBのデータ確認

SmartFitPRO StandardからSORACOM Funkを通して、Amazon DynamoDBへデータが送信されているはずなので、Amazon DynamoDBを確認しにいきます。

1.「Amazon DynamoDB」コンソールにアクセスして、「テーブル」⇒「項目の探索」の順にクリックします。
2.作成した「PLCdata_Database」をクリックします。

image.png

SmartFitPRO Standardからの送信された各種データが「返された項目」で確認できます。
「message_type」が「1」で起動時の送信であることが分かります。

これでSmartFitPROのセットアップは完了です。

ステップ7:アナログ信号入力でDynamoDBに
      データが送られるか確認する

今回は(株)エム・システム技研製 携帯型電流信号発生器「C-HCL-A」を使用してデータ送信がされる
ことを確認します。接点入力による状態変化通知時に電流結果が送信されるため接点変化用として
PLCも使用します。

SmartFitPRO Standardと電流信号発生器の接続

1.SmartFitPRO Standardと電流信号発生器、PLCを構成図通りに接続します。

2.SmartFitPRO本体にUSBケーブルを接続し電源を入れます。
3.電源起動時のデータが送信されていることを確認します。
4.電流信号発生器から4mAの信号をAD1±へ入力します。
5.PLCにて接点DI1+をOFF→ONに変化させます。

image.png

接点入力変化による発報にてアナログ値が、表示されていることが分かります。
「message_type」は「接点入力変化による発報」を意味1する「3」になっています。

以上でDynamoDBへアナログ入力データが送られていることが確認できます。

ステップ8:実用例

以下はSmartFitPRO Standardを使用した実用例のブロック図となります

1.リレー接点機能付き流量センサの使用

リレー接点機能付き流量センサの接点動作により電流値が確認可能です。

以上でSmartFitPRO Standard(SRL-420-CM1A)、クラウドの確認方法及び利用方法となります。

TOP