はじめに
-
仕事やプライベートでもAWS IoTを活用するシーンが増えている今日このごろです。
-
AWS IoTを使えば、簡単にMQTTのPub/Subが実現できます。自分としては、なんとなく読めるJavaのSDKも用意されてるので、デバイス側の実装も容易です。
-
Subscribeを活用したデバイス側の実装としては、以下のような構成で固定IPの振られていない自宅PC(デバイス)に、Subscribeをトリガに処理するといったことが考えられます。
-
例えばリモートから自宅PCを緊急停止してピンチを回避することが可能だったりします。今まで、外出中に急に母親からLINEで「あなたの部屋掃除しておくね」とか言い出された時に \(^o^)/オワタ となってた人必見です。
-
ということで、AWS IoTの簡単な使い方を説明しつつ、IoTとは少し違ったカタチでAWS IoTを活用する方法を紹介します。
-
因みに、今回はDeviceShadowは登場しません。
-
今回は自宅PCをWindowsと仮定して実装していますが、ちょっとアレンジすればラズパイでも使えますし、シャットダウン以外の処理でも流用可能です。
実現すること概要
- 自宅PCの常駐プログラムが一定時間毎にPublishすることでPCのステータスチェックを知る機能と、常駐プログラムが特定TopicのSubscribeを行い、SubscribeをトリガにOSシャットダウンを知らせるPublishして、シャットダウンコマンドの実行を行う機能を実現します。
- 以下 3Topicのやりとりで実現します。
- topic/healthcheck:常駐プログラムが定期的にPublishするTopic。
- topic/shutdown:常駐プログラムがSubscribeするTopic。当該Topicを受け取るとシャットダウンコマンドが実行される。
- topic/shutdownNotify:常駐プログラムがシャットダウンコマンド実行直前にPublishするTopic。
- 使ったソースはGithubで公開しておきます。
https://github.com/ukitiyan/desktop-iot
AWS IoTのセットアップ
Thingsの登録
Ruleの作成
-
自宅PC(デバイス)から定期に生存情報を送信して、AWS IoT経由でSNSでEMail送信するための設定情報としてRuleを作成します。
-
RuleNameとActionの条件である、Attribute、Topic filterを指定し、Add ActionからSNSを指定して、Create roleしてください。
-
この時点でAWS IoTに「topic/healthcheck」TopicがPublishされるとRuleが発動して、SNS経由でEmailが送信されるはずです。
-
AWS IoTにはTestSimulatorが用意されているので、そこからPublishしてEmailが受信されるか確認しましょう。
Thingsに紐付ける証明書の作成・ダウンロード
-
デバイスからはAWS IoTから発行される証明書を利用して、AWS IoTに接続するため、証明書の作成・ダウンロードを行います。
Policyの作成
-
証明書のPolicyを作成します。
-
PolicyNameの入力、statement(Action「iot:」、ResourceARN「」、Effect「Allow」)を設定し、Createを選択します。
エンドポイントの確認
自宅PCに常駐させるJavaプログラムのセットアップ
証明書の配置
-
先程AWS IoTからダウンロードした証明書をPCの適当な場所に配置します。
- 例: C:/aws/xxxxxx-certificate.pem.crt
- C:/aws/xxxxxx-private.pem.key
-
以下からJavaのソースをcloneします。
https://github.com/ukitiyan/desktop-iot -
必要に応じてapplication.ymlの以下を編集して、ビルドしてください。(もちろん編集せずに起動時に環境変数で渡してもOKです。)
- clientEndpoint:AWS IoTで取得したendpoint
- clientId:任意のClientId
- certificateFile:xxxxxx-certificate.pem.crtの配置パス
- privateKeyFile:xxxxxx-private.pem.key
- thingName:AWS IoTで設定したThingsName
- target/desktop-iot-0.0.1-SNAPSHOT.jarがビルドされるので、以下のコマンドで実行します。(jre8は入ってる前提です。)
java -jar target/desktop-iot-0.0.1-SNAPSHOT.jar
動作確認
3600秒(1時間)毎に「topic/healthcheck」TopicがPublishされるか
- 自宅PCに配置したプログラムは、3600秒(1時間)毎に「topic/healthcheck」TopicをPublishします。
- プログラム実行してから、1時間後にSNSに設定したEmail宛に
{"status": "Active"}
のようなメッセージが受信されるか確認します。
AWS IoTに「topic/shutdown」TopicをPublishすると自宅PCがシャットダウンするか
- 自宅PCに配置したプログラムは、「topic/shutdown」TopicをSubscribeしていて、Topicを受信すると「topic/shutdownNotify」TopicをPublishしてから、OCシャットダウンコマンドを実行します。
- Publish用のアプリを作っても良いですが、今回もTestコンソールを使って、当該TopicをPublishします。
まとめ
- 冗談っぽい内容が混じってますが、AWS IoTの基礎や可能性について、触れられたと思います。
- AWS IoT SDKのJavaサンプルも確認しときましょう。
https://github.com/aws/aws-iot-device-sdk-java - 次回はDeviceShadowとか、引き続きAWS IoTついて触れてみたいと思います。