モノワイヤレス(mono-wireless) データをラズベリーパイ経由でAWSへアップロード

モノワイヤレス(mono-wireless) データをラズベリーパイ経由でAWSへアップロード Data Science
モノワイヤレス(mono-wireless) データをラズベリーパイ経由でAWSへアップロード

『 モノワイヤレス(mono-wireless) データをラズベリーパイ経由でAWSへアップロード 』する方法を記載します。下記の手順を上から順番にAWSの設定から実行してみてください。

AWSの契約方法や簡単な使い方はこちらを参考にしてください。

【AWS IoT Core】

1.モノを作成(デバイスエンドポイントメモ)

①IoT Core → 管理 → すべてのデバイス → モノ

②モノを作成

③1つのモノを作成

④モノの名前:例:test

⑤新しい証明書を自動生成

⑥証明書にポリシーをアタッチ -> モノを作成

⑦証明書をダウンロード

⑦ー1:デバイス証明書:ダウンロード

⑦ー2:パブリックキーファイル:ダウンロード

⑦ー3:プライベートキーファイル:ダウンロード

⑦ー4:ルートCA証明書(RSA2048):ダウンロード

⑧エンドポイントメモ:

設定→デバイスデータエンドポイント:**********-ats.iot.ap-northeast-1.amazonaws.com

2.ポリシー作成

①AWS IoT -> セキュリティ -> ポリシー

②ポリシーを作成

③ポリシー名:任意

④ポリシードキュメント

⑤ポリシー効果:許可

⑥ポリシーアクション:*

⑦ポリシーリソース:*

3.モノにポリシーをアタッチ

①IoT Core → 管理 → すべてのデバイス → モノ

②作成したモノをクリック

③証明書タブ

④証明書IDで作成した証明書をクリック

⑤ポリシータブ

⑥ポリシーをアタッチ

⑦作成したAWS IoTポリシーを選択

⑧ポリシーをアタッチ

【IAM】

4.IAM 作成

『モノワイヤレス(mono-wireless) センサーデータをラズベリーパイ経由でAWSへアップロード』では次に、DynamoDBアクセスユーザー、ロール作成、Streamlitアプリmain.pyからアクセス接続に必要な、アクセスキー、シークレットアクセスキーの取得

①ユーザの追加

②ポリシーを直接アタッチする

<許可ポリシー>

許可を追加

AmazonDynamoDBFullAccesswithDataPipeline

AmazonDynamoDBReadOnlyAccess を追加

アクセスキー、シークレットアクセスキーの取得

セキュリティ認証情報タブ

アクセスキーを作成

コマンドラインインターフェイス(CLI)

アクセスキー、シークレットアクセスキーをメモ

【DynamoDB】

テーブル

テーブルの作成

テーブル名:任意

パーティションキー:timestamp  :文字列

テーブル設定:デフォルト設定

【AWS IoT Core】

6.メッセージのルーティングルール作成(ラズパイからPublish(送信)したSubsribe(受信)した際のルールを指定)※Subsribe(受信)した際、5で作成したDynamoDBにデータを蓄積

AWS IoT → メッセージのルーティング → ルール

ルールを作成

ルール名:任意

作成

SQLステートメント

SQLのバージョン:最新

SQL ステートメント:SELECT * FROM ‘test’ ← ‘test’トピック名 :ラズパイから取得する仮のテーブル名として理解(ラズパイ側で今回’test’というトピック名の引数を指定したため

ルールアクション

アクション1

DynamoDB(DynamoDBテーブルにメッセージを挿入)

テーブル名:5で作成したテーブル名

パーティションキー:timestamp  → SID

パーティションキーのタイプ:STRING

パーティションキーの値:${timestamp()} → SID

【追加】ソートキー。timestamp

この列にメッセージデータを書き込む – オプション:payload

オペレーション – オプション:INSERT

IAMロール:新しいロールを作成(名前任意) 

【IAM】

7. 4で作成されたユーザーに対して、6で作成されたIAMロールを追加

IAM → ユーザー → 作成したユーザー

許可タブ

許可ポリシー

※6の最後に作成したロール名が記載されたポリシー名を検索

****には6の最後に作成したロール名が記載されているポリシーを追加

aws-iot-rule-****-action-1-role-****

8.ラズパイ構築(ログインユーザー:piの場合)

ここで必要なもの(購入をお願いします)

センサーに豆電池を挿入

MONOSTICKをラズパイに挿入し、/dev/ttyUSB0が認識(表示)されていることを確認

Google Drive : MEIJI-share > Raspi_AWS_Stream_env

raspi_meiji_awsフォルダをダウンロードし、home/pi/ へコピー

1で生成した下記3証明書ファイルをraspi_meiji_awsフォルダにコピー(既に利用されている証明書が存在する場合、ファイル名変更又は、tempフォルダを作成し、移動

フォルダ内【pipython.py】編集

client.tls_set(ca_certs=’./rootCA.pem’, certfile=’./***************************-certificate.pem.crt’, keyfile=’./***********************-private.pem.key’, tls_version=ssl.PROTOCOL_SSLv23)

client.tls_insecure_set(True)

client.connect(“********-ats.iot.ap-northeast-1.amazonaws.com”, 8883, 60) #Taken from REST API endpoint – Use your own.

上記****には、1で生成したファイル名を記載

******-certificate.pem.crt

******-private.pem.key

******-ats.iot.ap-northeast-1.amazonaws.com:1で生成したデバイスエンドポイントを記載

※【鈴木】paho.mqtt.client がないとエラーが出るので、下記を実行

$ sudo pip install paho-mqtt

9.pipython.pyの実行

ラズパイターミナルより、pipython.pyの実行

python pipython.py

加速度、温速度データのPublish(送信)ログが生成されていることを確認

※【鈴木】シリアルが認識できないエラー出力あり cannot open serial port…

/dev/ttyUSB0 として認識しているか $ dmesg で確認すること

【AWS IoT Core】

10.Publish(送信)されたログデータをAWS IoT – MQTTにてSubscrbe(受信)確認

AW IoT -> テスト -> MQTTテストクライアント

トピックをサブスクライブする

トピックのフィルター:test

サブスクライブボタンクリック 

トピックに、ラズパイで生成されたセンサーデータを受信されていることを確認

11.MQTTにてSubscrbe(受信)されてデータがDynamoDBに蓄積されていることを確認

DynamoDB -> テーブル -> 設定の更新

作成したテーブル名を選択

テーブルアイテムの探索

フィルター -> 実行する

返された項目にデータが蓄積されていることを確認  

※【鈴木】データの蓄積が確認できない。「DBの名前が問題か紐づけられていない可能性あり」 ラズパイOSのTopicとメッセージルーティングのルールに記載するトピックを合わせる必要あり!! はまる。ユーザごとに指定する必要あるか?

12.main.pyの編集

手順4で生成した2つのキーに変更

aws_access_key_id

aws_secret_access_key

==========================================================

AWS EC 構築

13. EC2起動

インスタンス起動(名前:任意)

AWS Linux

Instance type: t2.small

新しいキーペアの作成(名前:任意)

Key pair type : RSA

Private key file format : .pem

pemファイル保存(ローカル)

ファイアウォール (セキュリティグループ) 

下記チェックをつける

■からの SSH トラフィックを許可する

■インターネットからの HTTPS トラフィックを許可

■インターネットからの HTTP トラフィックを許可

15. Linuxインスタンスへの接続 : (ローカルPC)

パブリック IPv4 DNS確認

EC2 -> インスタンス

ec2- ***-***-***-***.ap-northeast-1.compute.amazonaws.com

ssh接続(pemファイルが保存されたパスにて下記コマンド実行)

ssh -i  “*****.pem” ec2-user@ec2-***-***-***-***.ap-northeast-1.compute.amazonaws.com

Are you sure you want to continue connecting (yes/no/[fingerprint])? y

更新確認

sudo yum update – y

Pythonインストール

sudo yum install python3 git -y

必要ライブラリインストール

pip3 install streamlit

pip3 install streamlit-authenticator==0.1.5

pip3 install matplotlib

pip3 install streamlit-autorefresh

pip3 install xlsxwriter

pip3 install altair

pip3 install boto3

pip3 install streamlit-aggrid  【鈴木追加 4/7】

16. LinuxインスタンスへStreamlitアプリファイル群をコピー(ローカルPC)

※pemファイルが保存されたパスにて下記コマンド実行

※pemファイル名、IPアドレスは適宜変更

例:

scp -i C:\meiji_sensor.pem -r C:\meiji_aws_product\ ec2-user@ec2-***-***-***-***.ap-northeast-1.compute.amazonaws.com:/home/ec2-user/

17.セッション管理【TMUX】インストールし、セッション維持でStreamlit起動

AWS:

EC2 → ECインスタンスIDをクリック → 接続

EC Instance Connectタブ

接続

Amazon Linux 2 AMI起動

TMUXインストール

sudo yum install tmux -y

tmux new -s mono-test001(セッション名は任意)

4でコピーしたStreamlitアプリを起動

streamlit run main.py

モノワイヤレス(mono-wireless) データをラズベリーパイ経由でAWSへアップロード
モノワイヤレス(mono-wireless) データをラズベリーパイ経由でAWSへアップロード

<このタイミングで読んで欲しい1冊> (詳細は、画像をクリック)


あわせて読んで欲しい記事はこちら

日本で80%が失敗!DX進め方間違ってない?ここからスタートが成功の秘訣
DX進め方間違ってない?ここからスタートが成功の秘訣

コメント

タイトルとURLをコピーしました