AWS IoTでMQTTの実験をしてみる

ローカルの仮想ubuntuサーバにMQTTブローカー(Mosquitto)を立てていたのですが、いろいろと面倒になって来たので、AWS IoTでMQTTを実験してみました。

AWS IoT Core(デバイスをクラウドに接続)| AWS

とりあえず使ってみる

AWSマネジメントコンソールからAWS IoTサービスに入ると、ウィザードが始まりました。

確認しながら進めて行きます。

AWS IoTに接続する

ここは[開始方法]を押すだけです。

AWS IoT にどのように接続していますか?

ここは利用する予定の環境に合わせてください。とりあえず、デバイスとしてRaspberry Pi を使う予定なので、Linux/OSX、Pythonを選択しました。

モノの登録

名前を入力して、[次のステップ]に進みます。

接続キットのダウンロードを行います。

ダウンロードした接続キットを手順に従って使ってみます。

start.shを実行すると、このような感じで表示されます。

とりあえず動かす事ができました。ここまでの目安は10分です。

samplesの確認

start.shで呼び出している、aws-iot-device-sdk-python/samples/basicPubSub/basicPubSub.py の中を確認してみます。

パラメータ

basicPubSub.pyは、パラメータでいろいろ指定できるという事がわかりました。

# Read in command-line parameters
parser = argparse.ArgumentParser()
parser.add_argument("-e", "--endpoint", action="store", required=True, dest="host", help="Your AWS IoT custom endpoint")
parser.add_argument("-r", "--rootCA", action="store", required=True, dest="rootCAPath", help="Root CA file path")
parser.add_argument("-c", "--cert", action="store", dest="certificatePath", help="Certificate file path")
parser.add_argument("-k", "--key", action="store", dest="privateKeyPath", help="Private key file path")
parser.add_argument("-p", "--port", action="store", dest="port", type=int, help="Port number override")
parser.add_argument("-w", "--websocket", action="store_true", dest="useWebsocket", default=False,
                    help="Use MQTT over WebSocket")
parser.add_argument("-id", "--clientId", action="store", dest="clientId", default="basicPubSub",
                    help="Targeted client id")
parser.add_argument("-t", "--topic", action="store", dest="topic", default="sdk/test/Python", help="Targeted topic")
parser.add_argument("-m", "--mode", action="store", dest="mode", default="both",
                    help="Operation modes: %s"%str(AllowedActions))
parser.add_argument("-M", "--message", action="store", dest="message", default="Hello World!",
                    help="Message to publish")

-M … Message to publish

start.shを開き、python呼び出しの最後に-Mをつけて、メッセージを変更してみます。

ここではaaaaという文字を送ってみました。

ちゃんとaaaaが送られている事を確認しました。

-m … Operation modes

start.shを開き、python呼び出しの最後に-mをつけて、subscribeを指定してみました。

subscribe記載後、start.shを実行して待ち状態にしておきます。

AWSのコンソールから、メッセージを発行してみます。

無事に待ち側にメッセージが表示されました。

-t … Targeted topic

トピックを変えようと思って、-tをつけてみましたが、AWSIoTPythonSDK.exception.AWSIoTExceptions.subscribeTimeoutExceptionというエラーになりました。

いろいろコンソールとかヘルプを眺めてると、トピックはポリシーで定義するとのことでした。なるほど。

ポリシーの定義

ポリシーでトピックを定義してみます。場所は、「管理 - モノ - セキュリティ ー ポリシー」です。

まずは既に定義してあった、topic_1というトピックを指定して確認します。

start.shを開き、python呼び出しの最後に-t topic_1をつけて実行しています。

無事にメッセージが表示されました。

という事で、新しくトピックを指定する場合はポリシーを編集する事がわかりました。MyTopicというポリシーを追記してみます。デフォルトは消した方がいいかもしれませんね。

-m … Publish を指定してみる

start.shを開き、python呼び出しの最後に-m、-t、-Mをつけて、発行してみました。

AWSコンソール側でメッセージが確認できました。

まとめ

AWS IoTを使うと、MQTTが簡単に実装できました。トピックについては、ポリシーを設定しましょう。

今回試した事を利用して、RaspberryPi + OpenVINO でAI監視カメラを作る予定です。