最近、ちょいちょい使う機会のある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)