最近、ちょいちょい使う機会のあるPython。
そういえば、PythonからAzure IoT Hubへの送信ってどうやるんだっけ?と思い、調べて動作確認してみました。
PythonからAzure IoT Hubへテレメトリ送信する手順が、公式ドキュメントに公開されています。
タイトル「クイック スタート:デバイスから IoT ハブに利用統計情報を送信してバックエンド アプリケーションで読み取る (Python)」に違和感、、、
英語表示すると「telemetry」だった。
うーむ、あとでドキュメント変更のプルリクエスト出しておくか、、、
気を取り直して、公式ドキュメントを一通り確認します。
ポイントを箇条書きにすると、
- Pythonサンプルコードをgithubからダウンロード
- IoT Hub作成
- IoT Hubにデバイス追加
- Pythonサンプルコードを修正(上で作ったデバイスの情報に書き換え)
- Pythonサンプルコードを実行
ということらしい。
Azureの操作がAzure CLIで書かれていますが、、、最近のわたしはVSCode拡張のAzure IoT Hub Toolkit推しなので、脳内変換しながらやってみましょう。
Pythonサンプルコードをダウンロード
git cloneでサクッと。
$ git clone https://github.com/Azure-Samples/azure-iot-samples-python
IoT Hub作成
Azure PortalでIoT Hub作成ですね。
わたしは既に作成済みなのでスキップ。
これから作る人は、ここを参考に作成してください。
IoT Hubにデバイス追加
VSCode拡張のAzure IoT Hub Toolkitで、ポチっと作成します。
わたしは、py-device
という名前で作成しました。
Pythonサンプルコードを修正
iot-hub\Quickstarts\simulated-device\SimulatedDevice.py
のCONNECTION_STRING
に、デバイス接続文字列を書きます。
VSCode拡張のAzure IoT Hub Toolkitでデバイス接続文字列をコピーして、
SimulatedDevice.py
を書き換え。
Pythonサンプルコードを実行
さぁ、実行。
$ python SimulatedDevice.py
エラー!?!?
Azureに接続するためのPython用パッケージazure-iot-device
をインストールする部分を見逃していましたorz
azure-iot-deviceパッケージをインストール
pipコマンドで。
$ pip install azure-iot-device
Pythonサンプルコードを実行(2回目)
さぁ、実行。(2回目)
$ python SimulatedDevice.py
テレメトリ(D2Cメッセージ)がIoT Hubに届いているか確認
Python、ちゃんと動いているようなので、VSCode拡張のAzure IoT Hub Toolkitで、D2Cメッセージが届いているか確認します。
ちょっと用語がゴチャゴチャしますが、D2Cメッセージを確認したいときは、ビルトインエンドポイントのモニターを開始
を選んでください。
架空のtemperatureとhumidityが送られてきているのが確認できました。
ソースをチラ見
せっかくなので、SimulatedDevice.py
の中身を軽く確認。
IoTHubDeviceClient.create_from_connection_string(CONNECTION_STRING) while True: message = Message(msg_txt_formatted) client.send_message(message)