試した記事
実行結果
2 つの CLI セッションを準備する
- az extension add コマンドを実行し、Azure CLI 用の Microsoft Azure IoT 拡張機能が CLI シェルにインストールする
$ az extension add --name azure-iot
Default enabled including preview versions for extension installation now. Disabled in May 2024. Use '--allow-preview true' to enable it specifically if needed. Use '--allow-preview false' to install stable version only.
Extension 'azure-iot' 0.21.5 is already installed.
$
デバイスを作成してシミュレートする
- az iot hub device-identity create コマンドを実行し、シミュレートするデバイスのデバイス ID を作成する。
リソースグループを指定しないといけない模様
$ az iot hub device-identity create --device-id 20240301device --hub-name 20240301-IoThub
Unable to find IoT Hub: 20240301-IoThub in resource group: rg-aml-us-001
$
実行しているaz cliのドキュメントでリソースグループを指定する方法があるか確認
az iot hub device-identity create --device-id
[--am {shared_private_key, x509_ca, x509_thumbprint}]
[--auth-type {key, login}]
[--device-scope]
[--edge-enabled {false, true}]
[--hub-name]
[--login]
[--od]
[--pk]
[--primary-thumbprint]
[--resource-group]
[--secondary-key]
[--secondary-thumbprint]
[--sta {disabled, enabled}]
[--star]
[--valid-days]
引数に--resource-group
があるのでこれを指定して再度実行し、問題なく実行できた。
$ az iot hub device-identity create --device-id 20240301device --hub-name 20240301-IoThub --resource-group rg-us-001
{
"authentication": {
"symmetricKey": {
"primaryKey": "<見せられないよ>",
"secondaryKey": "<見せられないよ>"
},
"type": "sas",
"x509Thumbprint": {
"primaryThumbprint": null,
"secondaryThumbprint": null
}
},
"capabilities": {
"iotEdge": false
},
"cloudToDeviceMessageCount": 0,
"connectionState": "Disconnected",
"connectionStateUpdatedTime": "0001-01-01T00:00:00+00:00",
"deviceId": "20240301device",
"deviceScope": null,
"etag": "OTQ2NDI5Mzg2",
"generationId": "638448673261732809",
"lastActivityTime": "0001-01-01T00:00:00+00:00",
"parentScopes": null,
"status": "enabled",
"statusReason": null,
"statusUpdatedTime": "0001-01-01T00:00:00+00:00"
}
$
Azure Portalからも確認できる
- az iot device simulate コマンドを実行し、デバイスをシミュレートする。
こちらもリソースグループを指定しないとダメそうなので指定して実行すると3秒おきに100回device-to-cloud メッセージを送る。progresssが100になる前に次の実行を行う。
$ az iot device simulate --device-id 20240301device --hub-name 20240301-IoThub --resource-group rg-us-001 --method-response-code 201 --method-response-payload '{"result":"Direct method successful"}'
This command is experimental and under development. Reference and support levels: https://aka.ms/CLI_refstatus
Device simulation in progress: 100%|###########################################| 100/100 [05:34<00:00, 3.34s/it]
$
ダイレクト メソッドを呼び出すようにジョブをスケジュールする
意味不明なエラーが発生し、正常に終了しない。
$ az iot hub job create --hub-name 20240301-IoThub --job-id job01 --res
ource-group rg-us-001 --job-type scheduleDeviceMethod --method-name 20240301Me
thod1 --method-payload 'null' --query-condition "deviceId = '20240301device'"
{'Message': 'ErrorCode:IotHubFormatError;cannot decode job request json format', 'ExceptionMessage': 'Tracking ID:403C7217E18443C4BDD6A68C61C805D4-G2:-TimeStamp:2024-03-02T14:01:10.976283713+00:00'}
GWV2になってるのが影響している気がする。
REST API で実行してみる
認証にはSASトークンを使用
$ az iot hub generate-sas-token -n 20240301-IoThub --resource-group rg-us-001
[Warning] This output may compromise security by showing the following secrets: sas. Learn more at: https://go.microsoft.com/fwlink/?linkid=2258669
{
"sas": "<見せられないよ>"
}
Postmanを使って実行したが、同じエラーが発生