2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SORACOM GPSマルチユニットで取得した情報をAWS Timestreamへ送信させる

Posted at

はじめに

AWSサービス上で地図画像を作成できるようにしたので、次は地図画像に乗せるデータをAWSサービスに取り込みたい。
…ということで、SORACOMのGPSマルチユニットで取得した気温データをAWSサービス上に取り込むことにする。

構成

SORACOM Funnelサービスを利用し、GPSマルチユニットの情報をIoTCore経由でTimestreamに送信する。
使用するデータベースはDynamoDBとTimestreamで迷ったのだが、まだ使ったことのないサービスを使いたいという単純な理由でTimestreamを選択。
007_Timestream_01.png

手順

1.GPSマルチユニットがデータを取得・送信していることの確認
2.Timestreamデータベースの作成
3.Funnelを利用するための準備
4.Funnelのセットアップ
5.IoTCoreの設定

手順1.GPSマルチユニットがデータを取得・送信していることの確認

まずGPSマルチユニットのデータがSORACOMのサービスまで到達していなければ元も子もないので、SORACOMのユーザコンソールでデータが届いていることを確認する。
ついでにデータの内容も確認して、Timestreamにどのデータを登録するかを検討しておく。

・SORACOMユーザコンソールで、左上のメニューマークをクリック
007_Timestream_02.png

・「ガジェット管理」>「GPSマルチユニット」をクリック
007_Timestream_03.png

・GPSマルチユニット一覧画面で、データの確認をしたいマルチユニットを選択して「SORACOM Harvest Data」をクリック。
007_Timestream_04.png

・Harvest Dataの画面にデータが表示されることを確認する。
007_Timestream_05.png

・GPSマルチユニットから送信されるデータの種類の確認
Harvest Dataで、GPSマルチユニットから送信されているデータの種類を確認しておく。
公式ガイドの「送信されるデータフォーマット」を参照しつつ確認すると、下記データが安定して取れている様子。

プロパティ 内容
lat 緯度
lon 経度
bat 電池残量
rs 電波強度
temp 温度
humi 湿度
type 送信種別

加速度が取得できていないのは、移動していないので仕方ない(今回は必要ないし)。
取れているデータのうち、今回は地図上に温度データを表現したいので、緯度・経度・温度(ついでに湿度も取っておこう)が必要になる。

手順2.Timestreamデータベースの作成

次はAWSのマネジメントコンソールでTimestreamデータベースを作成する。

・Timestreamの画面で、「データベースを作成」をクリック。

・「標準データベース」を選択してデータベースの名前を入力して「データベースの作成」をクリック。
 ※暗号化キーは自動的に作られる。作成後、KMSコンソールでAWSマネージド型キー一覧を確認すると、aws/timestreamが作成されている。
007_Timestream_06.png

・データベース一覧画面で、作成されたデータベース名をクリック。
007_Timestream_07.png

・データベースの概要画面で、「テーブル」>「テーブルを作成」をクリック。
007_Timestream_08.png

・それぞれ設定を入力して「テーブルを作成」をクリック。
007_Timestream_09.png
今回設定した値は以下。(テーブル名は任意なので省略)
マグネティックストレージの書き込みをONにすると、保持期間より過去のデータも書き込めるとのことだが、今回は必要ないのでOFFで作成する。

項目 設定値
メモリストアの保持期間 12時間
マグネティックストアの保持期間 1月
マグネティックストレージの書き込み チェックなし

手順3.Funnelを利用するための準備

・事前にSORACOMユーザコンソールで、Funnelを利用するIoT SIMのカバレッジタイプを確認する。
SORACOMユーザコンソールの上部に「日本」とあれば日本カバレッジ、「グローバル」とあればグローバルカバレッジとなる。
007_Timestream_11.png

・IoTCoreへのメッセージをPublishするためのIAMロールを作成する。
AWSマネジメントコンソールでIAMのロール一覧画面へ移動し、「ロールを作成」をクリック。
007_Timestream_10.png

・信頼されたエンティティタイプに「AWSアカウント」を選択、AWSアカウントは「別のAWSアカウント」を選択し、先に確認したカバレッジタイプが日本であればアカウントID欄に「762707677580」、グローバルであれば「950858143650」を入力する。
007_Timestream_12.png

・画面下部の「外部IDを要求する」にチェックを入れ、外部ID欄に任意の文字列を入力して「次へ」をクリック。
※ここで入力した外部IDは、これ以降、[External-ID] で表記する。
007_Timestream_13.png

・許可を追加画面が表示されるので、「ポリシーを作成」をクリック。
007_Timestream_14.png

・ポリシーの作成画面のビジュアルエディタで、サービスにIoTを選択し、フィルタアクションに「Publish」と入力して"Publish"にチェックを入れる。
007_Timestream_15.png

・「リソース」>「指定」を選択し、「ARNの追加」をクリック。
007_Timestream_16.png

・ARNの追加画面が開くので、Region、Account、Topic nameを入力する。
ここではRegion:「すべて」にチェック、Account:自分のアカウントID、Topic name:"topic-pyGMT/*"を入力した。
※ここで入力したトピック名(この例では"topic-pyGMT")を、以降、[topic_name] として表現する。
007_Timestream_17.png

・「追加」をクリックしてポリシーの作成画面に戻り、「次のステップ:タグ」>「次のステップ:確認」の順にクリック。

・ポリシーの確認画面でポリシーの名前を入力し、「ポリシーの作成」をクリック。
007_Timestream_18.png

・ポリシー画面を閉じて、許可を追加画面に戻る。

・更新ボタンをクリックしてポリシー一覧を更新し、先ほど作成したポリシーの名前で検索する。
007_Timestream_19.png

・検索で表示されたポリシーにチェックを入れ、「次へ」をクリック。
007_Timestream_20.png

・任意のロール名を入力し、「ロールを作成」をクリック。
ロール一覧画面に戻るので、作成したロール名で検索し、作成されたロールのARNを確認・メモしておく。
※以降、このロールARNを [role_arn] で表記する。
007_Timestream_21.png

・AWS IoTのコンソールに移動して、左メニューの「設定」をクリック。
007_Timestream_22.png

・デバイスデータのエンドポイントの「エンドポイント」をメモする。
※ここでメモしたエンドポイントは、これ以降、[device_endpoint] で表記する。
007_Timestream_23.png

手順4.Funnelのセットアップ

・SORACOMユーザコンソールで、画面右上のメールアドレス欄をクリック。
007_Timestream_24.png

・表示されるメニューの「セキュリティ」をクリック。
007_Timestream_25.png

・SAMユーザー一覧画面が表示されるので、左メニューの「認証情報ストア」を選択し、認証情報一覧画面の「認証情報を登録」をクリック。

・認証情報を登録画面で、以下の情報を入力する。

項目 設定値
認証情報ID 任意の文字列を入力
種別 「AWS IAM ロール認証情報」を選択
ロールARN [role_arn]を入力
外部ID [External-ID]を入力

007_Timestream_26.png

・Funnelを有効化する。
SORACOMユーザコンソールの画面左上のメニューボタンをクリックし、表示されたメニューの「SIMグループ」を選択する。
007_Timestream_27.png

・SIMグループ一覧画面で該当のSIMグループを選択し、「SORACOM Funnel 設定」をクリックする。
※該当のSIMグループがない場合は公式のグループ設定を参照。
007_Timestream_28.png

・表示されたスイッチをクリックしてONにする。

・各項目を設定し、「保存」をクリック。
TimestreamにSIM IDを登録させるため、「SIM IDを追加」はONにする。

項目 設定値
転送先サービス 「AWS IoT」を選択
転送先 URL 「[device_endpoint]/[topic_name]/#{imsi}」を入力
認証情報 先の手順で登録した認証情報を選択
送信データ形式 「JSON」を選択
SIM ID を追加 ON

007_Timestream_29.png

・AWS側へデータが連携されることを確認する。
AWSマネジメントコンソールのAWS IoT画面へ移動し、左メニューから「MQTTテストクライアント」を選択する。
007_Timestream_30.png

・「トピックのフィルター」欄に「[topic_name]/#」と入力し(今回の例では"topic-pyGMT/#"となる)、「サブスクライブ」をクリック。
007_Timestream_31.png

・SORACOM側からデータが送信されるまでしばらく待つ。サブスクリプション欄に送られてきたデータが表示されればFunnelの設定はOK。

手順5.IoTCoreの設定

・マネジメントコンソールのAWS IoT画面の左メニューで「ルール」を選択し、表示されたルール一覧画面で「ルールの作成」をクリック。
007_Timestream_32.png

・ルール作成画面が開く。ルール名は任意のものを入力し、「次へ」をクリック。
007_Timestream_33.png

・SQLステートメントに、緯度・経度・温度・湿度を取得するクエリを入力して「次へ」をクリック。

SELECT payloads.lat, payloads.lon, payloads.temp, payloads.humi FROM '[topic_name]/#'

007_Timestream_34.png

・ルールアクションをアタッチ画面で、ルールアクションに「Timestream table」を選択し、作成しておいたTimestreamデータベース名、テーブル名を選択する。
007_Timestream_35.png

・ディメンション欄には以下のように入力する。
また、「新しいロールを作成」をクリックして、作成するロール名を入力する。

ディメンション名 ディメンション値
timestamp ${timestamp}
simId ${simId}

007_Timestream_36.png

・ここまで設定したら「次へ」をクリックし、確認画面で「作成」をクリック。

・AWSマネジメントコンソールでTimestreamの画面へ移動し、左メニューで「クエリエディタ」を選択。
007_Timestream_37.png

・テーブルに対して全件検索をかける。

SELECT * FROM "[データベース名]"."[テーブル名]"

007_Timestream_38.png

・クエリ結果に緯度・経度・温度・湿度が返ってこればOK。
007_Timestream_39.png

参考リンク

(SORACOM公式ドキュメント)AWS IoT アダプターを使用する
AWS IoTをつかってSORACOM GPSマルチユニットからAmazon Timestreamへ温湿度データを送信してみた

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?