Armadilloフォーラム

MicroSoft Azure IoTHubへの接続

mak

2016年6月6日 12時24分

2週間のサンプル機をお借りして表題の件を検討しております。

https://github.com/Azure/azure-iot-sdks/blob/master/doc/get_started/deb…

上記を参考に、ATDE5へ開発環境のセットアップSDへのコピー実行をしてみたところ以下のようなメッセージで失敗しているようです。
Starting the IoTHub client sample AMQP...
Info: IoT Hub SDK for C, version 1.0.7
IoTHubClient_SetMessageCallback...successful.
IoTHubClient_SendEventAsync accepted data for transmission to IoT Hub.
IoTHubClient_SendEventAsync accepted data for transmission to IoT Hub.
IoTHubClient_SendEventAsync accepted data for transmission to IoT Hub.
IoTHubClient_SendEventAsync accepted data for transmission to IoT Hub.
IoTHubClient_SendEventAsync accepted data for transmission to IoT Hub.
Press any key to exit the application.

-> [CLOSE]* {}
Confirmation[0] received for message tracking id = 0 with result = IOTHUB_CLIENT_CONFIRMATION_BECAUSE_DESTROY
Confirmation[1] received for message tracking id = 1 with result = IOTHUB_CLIENT_CONFIRMATION_BECAUSE_DESTROY
Confirmation[2] received for message tracking id = 2 with result = IOTHUB_CLIENT_CONFIRMATION_BECAUSE_DESTROY
Confirmation[3] received for message tracking id = 3 with result = IOTHUB_CLIENT_CONFIRMATION_BECAUSE_DESTROY
Confirmation[4] received for message tracking id = 4 with result = IOTHUB_CLIENT_CONFIRMATION_BECAUSE_DESTROY

他に詳しい情報お持ちの方いないでしょうか。

宜しくお願い致します。

コメント

サムシングプレシャスの古賀と申します。

mak さん:
>https://github.com/Azure/azure-iot-sdks/blob/master/doc/get_started/deb…
>
>上記を参考に、ATDE5へ開発環境のセットアップSDへのコピー実行をしてみたところ以下のようなメッセージで失敗しているようです。
>Starting the IoTHub client sample AMQP...
>Info: IoT Hub SDK for C, version 1.0.7
>IoTHubClient_SetMessageCallback...successful.
>IoTHubClient_SendEventAsync accepted data for transmission to IoT Hub.
>IoTHubClient_SendEventAsync accepted data for transmission to IoT Hub.
>IoTHubClient_SendEventAsync accepted data for transmission to IoT Hub.
>IoTHubClient_SendEventAsync accepted data for transmission to IoT Hub.
>IoTHubClient_SendEventAsync accepted data for transmission to IoT Hub.
>Press any key to exit the application.
>
>->[CLOSE]* {}
>Confirmation[0] received for message tracking id = 0 with result = IOTHUB_CLIENT_CONFIRMATION_BECAUSE_DESTROY
>Confirmation[1] received for message tracking id = 1 with result = IOTHUB_CLIENT_CONFIRMATION_BECAUSE_DESTROY
>Confirmation[2] received for message tracking id = 2 with result = IOTHUB_CLIENT_CONFIRMATION_BECAUSE_DESTROY
>Confirmation[3] received for message tracking id = 3 with result = IOTHUB_CLIENT_CONFIRMATION_BECAUSE_DESTROY
>Confirmation[4] received for message tracking id = 4 with result = IOTHUB_CLIENT_CONFIRMATION_BECAUSE_DESTROY

IoTHubClient が、Azure 上の IoT Hub に接続できていないようですね。上のページを確認したところ、一つ抜けている手順があるのに気づきました。Armadillio-IoT G3 のページには書かれているのですが、azure-iot-sdks/tools/iot_hub_e2e_tests_params/iot_device_params.txt というファイルを編集して setiotdeviceparametersfore2etests.sh というスクリプトを実行し、IoT Hub の接続情報を値として持つ環境変数を設定する必要があると思われます。次のページにある "Set environment variables by populating IOT_DEVICE_PARAMS.TXT" が、その手順です:
 https://github.com/Azure/azure-iot-sdks/blob/master/doc/get_started/lin…

なお、iot_device_params.txt に記載する環境変数の値の詳細は、こちらのページをご覧ください:
 https://github.com/Azure/azure-iot-sdks/blob/master/doc/iotcertificatio…

サンプルプログラムの ソース(iothub_client_sample_amqp.c など)では、connectionString という変数に IoT Hub のホスト名とデバイス ID などを記述した文字列をセットするようになっていますが、それとは別に、IoT Hub のサンプルプログラムが使用しているライブラリが接続情報を得るのに参照する環境変数があり、それも設定する必要があるのではないかと思います。試してみて下さいませ。

> サムシングプレシャスの古賀と申します。
>
> mak さん:
> >https://github.com/Azure/azure-iot-sdks/blob/master/doc/get_started/deb…
> >
> >上記を参考に、ATDE5へ開発環境のセットアップSDへのコピー実行をしてみたところ以下のようなメッセージで失敗しているようです。
> >Starting the IoTHub client sample AMQP...
> >Info: IoT Hub SDK for C, version 1.0.7
> >IoTHubClient_SetMessageCallback...successful.
> >IoTHubClient_SendEventAsync accepted data for transmission to IoT Hub.
> >IoTHubClient_SendEventAsync accepted data for transmission to IoT Hub.
> >IoTHubClient_SendEventAsync accepted data for transmission to IoT Hub.
> >IoTHubClient_SendEventAsync accepted data for transmission to IoT Hub.
> >IoTHubClient_SendEventAsync accepted data for transmission to IoT Hub.
> >Press any key to exit the application.
> >
> >->[CLOSE]* {}
> >Confirmation[0] received for message tracking id = 0 with result = IOTHUB_CLIENT_CONFIRMATION_BECAUSE_DESTROY
> >Confirmation[1] received for message tracking id = 1 with result = IOTHUB_CLIENT_CONFIRMATION_BECAUSE_DESTROY
> >Confirmation[2] received for message tracking id = 2 with result = IOTHUB_CLIENT_CONFIRMATION_BECAUSE_DESTROY
> >Confirmation[3] received for message tracking id = 3 with result = IOTHUB_CLIENT_CONFIRMATION_BECAUSE_DESTROY
> >Confirmation[4] received for message tracking id = 4 with result = IOTHUB_CLIENT_CONFIRMATION_BECAUSE_DESTROY
>
> IoTHubClient が、Azure 上の IoT Hub に接続できていないようですね。上のページを確認したところ、一つ抜けている手順があるのに気づきました。Armadillio-IoT G3 のページには書かれているのですが、azure-iot-sdks/tools/iot_hub_e2e_tests_params/iot_device_params.txt というファイルを編集して setiotdeviceparametersfore2etests.sh というスクリプトを実行し、IoT Hub の接続情報を値として持つ環境変数を設定する必要があると思われます。次のページにある "Set environment variables by populating IOT_DEVICE_PARAMS.TXT" が、その手順です:
>  https://github.com/Azure/azure-iot-sdks/blob/master/doc/get_started/lin…
>
> なお、iot_device_params.txt に記載する環境変数の値の詳細は、こちらのページをご覧ください:
>  https://github.com/Azure/azure-iot-sdks/blob/master/doc/iotcertificatio…
>
> サンプルプログラムの ソース(iothub_client_sample_amqp.c など)では、connectionString という変数に IoT Hub のホスト名とデバイス ID などを記述した文字列をセットするようになっていますが、それとは別に、IoT Hub のサンプルプログラムが使用しているライブラリが接続情報を得るのに参照する環境変数があり、それも設定する必要があるのではないかと思います。試してみて下さいませ。

サムシングプレシャス古賀さん
ご回答ありがとうございます。

設定してみましたが、変わりませんでした。
G3にあってG2にないのはコンパイルのオプションが違うからな気がします。
--run-e2e-tests
を付ける場合には必要なのではないでしょうか?
ちなみにこれをつけた場合はコンパイルはエラーとなります。

http, mqttも実行してみましたが、失敗しているようです。

Starting the IoTHub client sample HTTP...
Info: IoT Hub SDK for C, version 1.0.7
IoTHubClient_LL_SetMessageCallback...successful.
IoTHubClient_LL_SendEventAsync accepted message [0] for transmission to IoT Hub.
IoTHubClient_LL_SendEventAsync accepted message [1] for transmission to IoT Hub.
IoTHubClient_LL_SendEventAsync accepted message [2] for transmission to IoT Hub.
IoTHubClient_LL_SendEventAsync accepted message [3] for transmission to IoT Hub.
IoTHubClient_LL_SendEventAsync accepted message [4] for transmission to IoT Hub.
Error: Time:Sat Jan 1 01:09:28 2000 File:/home/atmark/work/IoT_SDK/azure-iot-sdks/c/azure-c-shared-utility/adapters/httpapi_curl.c Func:HTTPAPI_ExecuteRequest Line:488 curl_easy_perform() failed: Peer certificate cannot be authenticated with given CA certificates

Error: Time:Sat Jan 1 01:09:28 2000 File:/home/atmark/work/IoT_SDK/azure-iot-sdks/c/azure-c-shared-utility/adapters/httpapi_curl.c Func:HTTPAPI_ExecuteRequest Line:490 (result = HTTPAPI_OPEN_REQUEST_FAILED)
Error: Time:Sat Jan 1 01:09:28 2000 File:/home/atmark/work/IoT_SDK/azure-iot-sdks/c/azure-c-shared-utility/src/httpapiex.c Func:HTTPAPIEX_ExecuteRequest Line:476 unable to recover sending to a working state
Error: Time:Sat Jan 1 01:09:28 2000 File:/home/atmark/work/IoT_SDK/azure-iot-sdks/c/iothub_client/src/iothubtransporthttp.c Func:DoEvent Line:1573 unable to HTTPAPIEX_SAS_ExecuteRequest
Error: Time:Sat Jan 1 01:09:29 2000 File:/home/atmark/work/IoT_SDK/azure-iot-sdks/c/azure-c-shared-utility/adapters/httpapi_curl.c Func:HTTPAPI_ExecuteRequest Line:488 curl_easy_perform() failed: Peer certificate cannot be authenticated with given CA certificates

Starting the IoTHub client sample MQTT...
Info: IoT Hub SDK for C, version 1.0.7amples/iothub_client_sample_amqp/iothub_cli
IoTHubClient_LL_SetMessageCallback...successful.
IoTHubClient_LL_SendEventAsync accepted message [0] for transmission to IoT Hub.
IoTHubClient_LL_SendEventAsync accepted message [1] for transmission to IoT Hub.
IoTHubClient_LL_SendEventAsync accepted message [2] for transmission to IoT Hub.
IoTHubClient_LL_SendEventAsync accepted message [3] for transmission to IoT Hub.
IoTHubClient_LL_SendEventAsync accepted message [4] for transmission to IoT Hub.

サムシングプレシャスの古賀です。

mak さん:
>>IoTHubClient が、Azure 上の IoT Hub に接続できていないようですね。上のページを確認したところ、一つ抜けている手順があるのに気づきました。Armadillio-IoT G3 のページには書かれているのですが、azure-iot-sdks/tools/iot_hub_e2e_tests_params/iot_device_params.txt というファイルを編集して setiotdeviceparametersfore2etests.sh というスクリプトを実行し、IoT Hub の接続情報を値として持つ環境変数を設定する必要があると思われます。次のページにある "Set environment variables by populating IOT_DEVICE_PARAMS.TXT" が、その手順です:
>> https://github.com/Azure/azure-iot-sdks/blob/master/doc/get_started/lin…
>>
>>なお、iot_device_params.txt に記載する環境変数の値の詳細は、こちらのページをご覧ください:
>> https://github.com/Azure/azure-iot-sdks/blob/master/doc/iotcertificatio…
>>
>>サンプルプログラムの ソース(iothub_client_sample_amqp.c など)では、connectionString という変数に IoT Hub のホスト名とデバイス ID などを記述した文字列をセットするようになっていますが、それとは別に、IoT Hub のサンプルプログラムが使用しているライブラリが接続情報を得るのに参照する環境変数があり、それも設定する必要があるのではないかと思います。試してみて下さいませ。
>
>
>サムシングプレシャス古賀さん
>ご回答ありがとうございます。
>
>設定してみましたが、変わりませんでした。
>G3にあってG2にないのはコンパイルのオプションが違うからな気がします。
>--run-e2e-tests
>を付ける場合には必要なのではないでしょうか?
>ちなみにこれをつけた場合はコンパイルはエラーとなります。

コンパイルエラーするということですが、差支えなければ、エラーメッセージをコピーしたテキストファイルを添付するなどして、エラーメッセージの内容を教えて頂けますか。コンパイルエラーの内容が、ヒントになるかも知れません。

なお、G2 と G3 で手順が少し違う(build.sh に渡す引数に違いがある)のは、IoT SDK のバージョンの違いによるものです。
 https://github.com/Azure/azure-iot-sdks/blob/master/c/build_all/linux/b…

上の URL で閲覧できる、GitHub にある現状最新版の build.sh を見ると、build.sh のコマンド引数に '--run-e2e-tests' があると、run_e2e_tests という、初期値が OFF の変数に ON がセットされます。この変数が cmake に渡され、その値(ON or OFF)により、e2e-tests (End To End Tests) のテストケースやサンプルプログラムがビルド(及びテストケースは実行も)されるかどうかが変わる、というわけです。

ここで、build.sh の History を見ると、5/18 のコミット(commit ID: 8c26a0aeb28676179a7bfe06e15b72a141ad004b) で '--run-e2e-tests' というコマンド引数が追加されたことが分かります:
 https://github.com/Azure/azure-iot-sdks/commit/8c26a0aeb28676179a7bfe06…
 https://github.com/Azure/azure-iot-sdks/commits/master
このコミットにおける変更の前は、run_e2e_tests の初期値は OFF でなく ON であり、'--skip-e2e-tests' というコマンドを指定すると run_e2e_tests に OFF がセットされるようになっていました。

というわけで、G3 の手順は IoT SDK の 5/18 のコミット以降の版に対して書かれている一方、G2 の手順は、それより前の版に対して書かれているため、手順に若干の違いが出ているのでしょう。

>http, mqttも実行してみましたが、失敗しているようです。
>
>Starting the IoTHub client sample HTTP...
>Info: IoT Hub SDK for C, version 1.0.7
>IoTHubClient_LL_SetMessageCallback...successful.
>IoTHubClient_LL_SendEventAsync accepted message [0] for transmission to IoT Hub.
>IoTHubClient_LL_SendEventAsync accepted message [1] for transmission to IoT Hub.
>IoTHubClient_LL_SendEventAsync accepted message [2] for transmission to IoT Hub.
>IoTHubClient_LL_SendEventAsync accepted message [3] for transmission to IoT Hub.
>IoTHubClient_LL_SendEventAsync accepted message [4] for transmission to IoT Hub.
>Error: Time:Sat Jan 1 01:09:28 2000 File:/home/atmark/work/IoT_SDK/azure-iot-sdks/c/azure-c-shared-utility/adapters/httpapi_curl.c Func:HTTPAPI_ExecuteRequest Line:488 curl_easy_perform() failed: Peer certificate cannot be authenticated with given CA certificates
>
>Error: Time:Sat Jan 1 01:09:28 2000 File:/home/atmark/work/IoT_SDK/azure-iot-sdks/c/azure-c-shared-utility/adapters/httpapi_curl.c Func:HTTPAPI_ExecuteRequest Line:490 (result = HTTPAPI_OPEN_REQUEST_FAILED)
>Error: Time:Sat Jan 1 01:09:28 2000 File:/home/atmark/work/IoT_SDK/azure-iot-sdks/c/azure-c-shared-utility/src/httpapiex.c Func:HTTPAPIEX_ExecuteRequest Line:476 unable to recover sending to a working state
>Error: Time:Sat Jan 1 01:09:28 2000 File:/home/atmark/work/IoT_SDK/azure-iot-sdks/c/iothub_client/src/iothubtransporthttp.c Func:DoEvent Line:1573 unable to HTTPAPIEX_SAS_ExecuteRequest
>Error: Time:Sat Jan 1 01:09:29 2000 File:/home/atmark/work/IoT_SDK/azure-iot-sdks/c/azure-c-shared-utility/adapters/httpapi_curl.c Func:HTTPAPI_ExecuteRequest Line:488 curl_easy_perform() failed: Peer certificate cannot be authenticated with given CA certificates
>
>Starting the IoTHub client sample MQTT...
>Info: IoT Hub SDK for C, version 1.0.7amples/iothub_client_sample_amqp/iothub_cli
>IoTHubClient_LL_SetMessageCallback...successful.
>IoTHubClient_LL_SendEventAsync accepted message [0] for transmission to IoT Hub.
>IoTHubClient_LL_SendEventAsync accepted message [1] for transmission to IoT Hub.
>IoTHubClient_LL_SendEventAsync accepted message [2] for transmission to IoT Hub.
>IoTHubClient_LL_SendEventAsync accepted message [3] for transmission to IoT Hub.
>IoTHubClient_LL_SendEventAsync accepted message [4] for transmission to IoT Hub.

もし可能であれば、お手元の IoT SDK の作業ディレクトリの内容を、以下のコマンドで少し前のコミットまで戻してから G2 の手順を行ってみるとどうなるか、試してみて頂けますか:

$ git checkout -b test 52e3146bc1840a331f28c497080df55dde276443
$ git submodule update --init --recursive

この二つのコマンドを実行すると、作業ディレクトリの内容が、4/26 の "Update the sample nugets references." というコミットメッセージのコミットの状態に戻ります。それをビルドして出来たサンプルを実行して正常動作するのであれば、それ以降に加えられた IoT SDK の変更が、お手元の環境でサンプルプログラムが期待通りに動作しない要因だと考えられます。