AWS IoT Device SDK for Python
今回はAWS IoT Device SDK for Python付属のsampleをRaspberryPiで動かして、S3にデータを格納してみます。
用意したもの
RaspberryPi 3
てもとにあるどのRaspberryPiでもよいでしょう
RASPBIAN JESSIE
OSはさいしんにアップデートしました
pi@raspberrypi:~ $ uname -a
Linux raspberrypi 4.4.13-v7+ #894 SMP Mon Jun 13 13:13:27 BST 2016 armv7l GNU/Linux
AWSアカウント
AWS IoTの準備
AWSマネジメントコンソールから設定していきます。
Create a thing
ここでは、名前をraspi1にしました。
Create a rule
つぎにthingに対するruleをつくります。
さきほど作った「raspi1」thingをクリックすると右側にDetailが出てきます。さらに右下のCreate a ruleボタンを押します。
ここではルールの名前はraspi1_ruleにしました。
SQLっぽいところには、thingから送られるデータに対しフィルターをかけることができます。SDKのサンプルコードでは、「sdk/test/Python」というTopicを送ってきますので、ここでは次のように入力します。
name | value |
---|---|
Attribute | * |
Topic filter | sdk/test/Python |
画面をスクロールして、つぎに設定するChoose an actionは、受け取ったデータに対してどうするかを決めるところです。
ここではS3にデータを格納することにします。
S3 bucket、Key、Role nameをよしなに入力します。
Create a new resourceでその場で作って設定することもできますので、テスト用に一時的なバケットをつくりました。既存のものをつかうときはアクセス許可などお気をつけになってください。
Add Action→Createとボタンを押していくと、ruleの完成です。
Connect a device
さいごにthingに対して実際に接続するデバイスからの認証情報を設定します。
ruleを作ったボタンの右隣りにあるConnect a deviceボタンを押します。
すると、どのSDKつかうのー?と選べるのですが、Pythonがみあたりません。
しかたがないのでNodeJSを選ぶと、Generate certificate and policyというボタンが出てくるので押します。
まずDownload〜のリンク3つをクリックして証明書をダウンロードします。
- Download public key
- Download private key
- Download certificate
ダウンロード後、Confirm & start connectingボタンを押します。
ここのテキストボックス内をコピペしておいて、Return to Thing Detailボタンを押します。
RaspberryPiの準備
AWS IoT Device SDK for Pythonのインストール
さいしんのRASPBIAN JESSIEはpipが入ってたのでpipでインストール。
sudo pip install AWSIoTPythonSDK
適宜sudoしたりしなかったり。
サンプルコードをダウンロード
ソースツリーにサンプルコードも入ってるので、githubからcloneしておきます。
git clone https://github.com/aws/aws-iot-device-sdk-python.git
証明書の準備
サンプルコード実行にあたり、証明書ファイルが3つ必要です。
今回はサンプルコードと同じディレクトリに置きます。
AWS IoTを準備した時にダウンロードした証明書をすべてRaspberryPiにscp等で送ります。
- ほにゃらら-certificate.pem.crt
- ほにゃらら-private.pem.key
つぎに、AWS IoT root CAを準備します。
curl https://www.symantec.com/content/en/us/enterprise/verisign/roots/VeriSign-Class%203-Public-Primary-Certification-Authority-G5.pem -o rootCA.pem
rootCA.pemという名前で保存されます。
サンプルコードを実行
引数でendpointと各種証明書のパスを指定します。
endpointは、AWSのホスト名でAWS IoT準備の最後に出てきたテキストボックス内に「"host":"どこかの"」と出てきます。
もしくは、マネジメントコンソールにて、thingをクリックしてでてくるDetail内にもホスト名が出てきます(正しくはREST APIの送り先なので、それのホスト名部分だけ)
python basicPubSub.py -e どこかの.amazonaws.com -r rootCA.pem -c ほにゃらら-certificate.pem.crt -k ほにゃらら-private.pem.key
実行すると、1秒間隔でメッセージを投げます。
表示されるログを確認して問題なさそうなら、10秒くらいでCtrl+Cします。
S3バケットをみる
今回設定したバケットにファイルが出来上がります。
中身がサンプルコードを実行した秒数だけ更新されていれば成功です。
New Message 10