はじめに
以前、室温をGrafanaで監視する仕組みを作ってみました。
今回はIoTに少し興味が湧いてきたので、IoT関連の記事です。
スマホアプリAWS IoT Sensorsを触ってみて雰囲気を掴み、AWS IoTに入門するのもいいんじゃない?って記事です。
AWS IoT Sensorsとは?
AWS IoT Sensorsは、以下で公開されているAmazon Mobile LLC公式のスマホアプリです。
当初はiOSだけでしたが、今見るとAndroid版も公開されています。
概要は以下のような感じ。
AWS IoT Sensors enables you to easily collect, and visualize data from sensors on your iPhone or iPad using AWS IoT Core and related services like Amazon Location Service. With a single click, you can start streaming sensor data from your mobile device to AWS IoT Core and view real-time visualizations in the app and on a web dashboard.
AWS IoT Core や Amazon Location Service などを利用し、スマホのセンサーからデータを収集・可視化できるみたい。
また、AWS IoT Core へのストリーミングにも対応していて、WEBからリアルタイムの可視化もできます。
(AWSアカウントは不要。)
起動するとこんな画面になっていて、各種センサーの状態が確認できます。
Connect to AWS IoT Coreを押すと、AWS IoT Qucik Connectへのリンク先URLが表示されます。
リンク先をブラウザで開くと、ほぼリアルタイムでセンサーの情報がWEBで可視化されてます。(すごい!)
ここまですごいものを体験すると、自分のAWSアカウント内でも実施してみたくなりますね!
自アカウントのAWS IoT Coreで動作させてみる。
ということで、次は自分のアカウントで動かしてみます。
AWSサンプルで以下ソースが公開されているので、この通りに実施すれば簡単に確認できるみたい。
手順は以下に書かれてます。が、すっごく簡潔。
では、やってみますか。
モノの設定
最初に1個のデバイスの接続からモノの設定をしていきます。
デバイスの準備等書かれてますが、気にせず次へ。
今回はmobileって名前つけました。
ここはデフォルトのままで進めます。
次に接続キットをダウンロードを押下して、接続キットをダウンロードしておきます。
あとはそのまま設定を進めて、モノの設定は完了です。
証明書の配置
ダウンロードした接続キットを見てみると、以下のファイルが入っています。
今回は秘密鍵とクライアント証明書があればいいので、mobile.cert.pemとmoobile.private.keyをnode-javascriptのフォルダに格納します。
index.jsの編集
あとは、以下のところを書き換えていきます。
今回の場合、こんな感じ。
// REPLACE THE FOLLOWING WITH YOUR OWN VALUES
const BROKER = "xxxxxxxxx-ats.iot.ap-northeast-1.amazonaws.com"
const THING_NAME = "mobile"
const CERT_FILE_NAME = "mobile.cert.pem"
const PRIVATE_KEY_FILE_NAME = "mobile.private.key"
BROKERの項目はドメイン設定のところから確認可能です。
動作確認!
これで書いてある手順が全て終わったので、node index.jsで実行してみますが、なんか動いていません。
% node index.js
reconnecting
reconnecting
reconnecting
reconnecting
reconnecting
reconnecting
AWS IoT ポリシーの編集
調べてみるとAWS IoT ポリシーの設定が必要みたいです。
セキュリティ->ポリシーからポリシーの編集をしてみます。
今回は直接JSONを編集し、Publishや接続の対象リソースに今回作ったモノmobileを追加してみます。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:Publish",
"iot:Receive",
"iot:PublishRetain"
],
"Resource": [
"arn:aws:iot:ap-northeast-1:853835738220:topic/sdk/test/java",
"arn:aws:iot:ap-northeast-1:853835738220:topic/sdk/test/python",
"arn:aws:iot:ap-northeast-1:853835738220:topic/sdk/test/js",
+ "arn:aws:iot:ap-northeast-1:853835738220:topic/mobile"
]
},
{
"Effect": "Allow",
"Action": "iot:Subscribe",
"Resource": [
"arn:aws:iot:ap-northeast-1:853835738220:topicfilter/sdk/test/java",
"arn:aws:iot:ap-northeast-1:853835738220:topicfilter/sdk/test/python",
"arn:aws:iot:ap-northeast-1:853835738220:topicfilter/sdk/test/js"
]
},
{
"Effect": "Allow",
"Action": "iot:Connect",
"Resource": [
"arn:aws:iot:ap-northeast-1:853835738220:client/sdk-java",
"arn:aws:iot:ap-northeast-1:853835738220:client/basicPubSub",
"arn:aws:iot:ap-northeast-1:853835738220:client/sdk-nodejs-*",
+ "arn:aws:iot:ap-northeast-1:853835738220:client/mobile"
]
}
]
}
これで無事動きました!
% node index.js
connected
39
40
41
42
43
MQTTテストクライアントで確認すると1秒ごとにデータが送信されていて、無事動いてそうです。
最後に
AWS IoT Sensorsで雰囲気を掴み、AWSサンプルで簡単に実装することができました。
ただこのサンプルは実際のデータではなく、ランダムに作成したデータなので、次回実際にiphoneのセンサーデータを取得し、送信する記事を書いてみます!













