

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Hub SDK クライアント
<a name="hub-sdk-client"></a>

Hub SDK クライアントライブラリは、マネージド統合 Hub SDK と、同じハブで実行されている独自のプロトコルスタックとの間のインターフェイスとして機能します。これにより、一連のパブリック APIs公開され、プロトコルスタックと Device Hub SDK コンポーネントとのやり取りが容易になります。ユースケースには、カスタムプラグインコントロール、カスタムプラグインプロビジョナー、ローカルコントローラーが含まれます。

**Topics**
+ [マネージド統合 Hub SDK を取得する](#custom-protocol-plugin-getting-started)
+ [Hub SDK ツールキットについて](#custom-protocol-plugin-toolkit)
+ [Hub SDK クライアントを使用してカスタムアプリケーションを作成する](#custom-protocol-plugin-create-app)
+ [カスタムアプリケーションの実行](#custom-protocol-plugin-running-application)
+ [Hub SDK クライアント API リファレンス](hub-sdk-client-api-reference.md)
+ [データ型](#custom-protocol-plugin-data-types)

## マネージド統合 Hub SDK を取得する
<a name="custom-protocol-plugin-getting-started"></a>

Hub SDK クライアントには、 マネージド統合 SDK が付属しています。ハブ SDK にアクセスするには、 [マネージド統合コンソール](https://console.aws.amazon.com/iot/home#/managed-integrations/intro)からお問い合わせください。

## Hub SDK ツールキットについて
<a name="custom-protocol-plugin-toolkit"></a>

ダウンロードすると、アプリケーションで使用できるすべてのパブリックヘッダーファイルと`.so`ファイルを含む`IotMI-DeviceSDK-Toolkit`フォルダが表示されます。マネージド統合チームには、デモ`main.cpp`用の例と、直接実行できる のデモアプリケーションバイナリも用意`bin/`されています。オプションで、これをアプリケーションの開始点として使用できます。

## Hub SDK クライアントを使用してカスタムアプリケーションを作成する
<a name="custom-protocol-plugin-create-app"></a>

次の手順を使用して、カスタムアプリケーションを作成します。

1. ヘッダーファイル (.h) と共有オブジェクトファイル (.so) をアプリケーションに含めます。

   パブリックヘッダーファイル (.h) と共有オブジェクトファイル (.so) をアプリケーションに含める必要があります。.so ファイルの場合、lib フォルダに配置することができます。最終的なレイアウトは次のようになります。

   ```
   ├── include
   │   ├── iotmi_device_sdk_client
   │   │   └── iotmi_device_sdk_client_common_types.h
   │   ├── iotmi_device_sdk_client.h
   │   └── iotshd_status.h
   ├── lib
   │   ├── libiotmi_devicesdk_client_module.so
   │   └── libiotmi_log_c.so
   ```

1. メインアプリケーションで Hub SDK クライアントを作成します。

   1. メインアプリケーションでは、リクエストの処理に使用する前に、まず Hub SDK クライアントを初期化する必要があります。クライアントは、 を使用して簡単に構築できます`clientId`。

   1. クライアントを取得したら、マネージド統合 Device SDK に接続できます。

      以下は、Hub SDK クライアントの作成方法と接続方法の例です。

      ```
      #include <cstdlib>
      #include <string>
      #include "iotshd_status.h"
      #include "iotmi_device_sdk_client.h"
      
      auto client = std::make_unique<DeviceSDKClient>({{your_own_clientId}});
      iotmi_statusCode_t status = client->connect();
      ```
**注記**  
{{your\_own\_clientId}} は、ユーザーガイド付きセットアップの [start-device-discovery](https://docs.aws.amazon.com/cli/latest/reference/iot-managed-integrations/start-device-discovery.html) で指定するもの、または簡易セットアッププロビジョニングフローの [create-managed-thing](https://docs.aws.amazon.com/cli/latest/reference/iot-managed-integrations/create-managed-thing.html) で指定するものと同じである必要があります。

1. 以下の手順を実行して、パブリッシュおよびサブスクライブします。

   1. 接続が確立されたら、マネージド統合 Hub SDK から受信タスクをサブスクライブできるようになりました。受信タスクは、制御タスクでもプロビジョニングタスクでもかまいません。また、受信したタスクに対して独自のコールバック関数を定義し、独自のトレース目的で独自のカスタムコンテキストを定義する必要があります。

      ```
            // subscribe to provisioning tasks
            iotmi_statusCode_t status = client->iotmi_provision_subscribe_to_tasks(
            example_subscriber_callback, custom_context);
            
            // subscribe to control tasks
            iotmi_statusCode_t status = client->iotmi_control_subscribe_to_tasks(
            example_subscriber_callback, custom_context);
      ```

   1. 接続が確立されたら、アプリケーションからマネージドインテグレーション Hub SDK にリクエストを発行できるようになりました。独自のタスクメッセージタイプを定義できます。ペイロードはビジネス目的によって異なります。リクエストには、サブスクライブフローと同様に、コントロールリクエストとプロビジョニングリクエストの両方を含めることができます。最後に、 のアドレスを割り当て`rspPayload`て、同期された方法でマネージド統合 Hub SDK からレスポンスを取得できます。

      ```
      // publish control request
        iotmi_client_request_t api_payload = {
                  .messageType = C2MIMessageType::C2MI_CONTROL_EVENT,
                  .reqPayload = (uint8_t *)"{{define_your_req_payload}}",
                  .rspPayload = (uint8_t *)calloc(1000, sizeof(uint8_t))
        };
      
        status = client->iotmi_control_publish_request(&api_payload); 
        
        // publish provision request 
        iotmi_client_request_t api_payload = {
                  .messageType = C2MIMessageType::C2MI_DEVICE_ONBOARDED,
                  .reqPayload = (uint8_t *)"{{define_your_req_payload}}",
                  .rspPayload = (uint8_t *)calloc(1000, sizeof(uint8_t))
        };
        status = client->iotmi_provision_publish_request(&api_payload);
      ```

1. 独自の を構築し`CMakeLists.txt`、そこからアプリケーションを構築します。最終出力は、次のような実行可能バイナリにすることができます。 `MyFirstApplication`

## カスタムアプリケーションの実行
<a name="custom-protocol-plugin-running-application"></a>

カスタムアプリケーションを実行する前に、次の手順を実行してハブを設定し、マネージド統合 Hub SDK を起動します。
+ 「」のオンボーディング手順に従ってください[ハブを Managed Integrations にオンボードする](managedintegrations-sdk-v2-cookbook-usinghub.md)。
+ 「」に記載されているインストールプロセスを完了します[マネージド統合 Hub SDK をインストールして検証する](managedintegrations-sdk-v2-cookbook-deployment.md)。

前提条件が満たされたら、カスタムアプリケーションを実行できます。例えば、次のようになります。

```
./MyFirstApplication
```

**重要**  
にリストされている開始スクリプトをスクリプト[スクリプトを使用して Hub SDK をデプロイする](managedintegrations-sdk-v2-cookbook-deployment-nogg.md)で手動で更新して、独自のアプリケーションを起動する必要があります。順序は重要です。順序は変更しないでください。  
以下を更新します。変更  

```
./IotMI-DeviceSDK-Toolkit/bin/DeviceSDKClientDemo >> $LOGS_DIR/logDeviceSDKClientDemo_logs.txt &
```
まで  

```
./MyFirstApplication >> $LOGS_DIR/MyFirstApplication_logs.txtt &
```

## データ型
<a name="custom-protocol-plugin-data-types"></a>

このセクションでは、カスタムプロトコルプラグインに使用されるデータ型を定義します。

**iotmi\_client\_request\_t**  
マネージド統合コンポーネントに発行されるリクエストを表します。    
**messageType**  
メッセージのタイプ (CommonTypes::C2MIMessageType)。次のリストは有効な値を示しています。  
+ `C2MI_DEVICE_ONBOARDED`: 関連するペイロードを含むデバイスのオンボーディングメッセージを示します。
+ `C2MI_DE_PROVISIONING_PRE_ASSOCIATED_COMPLETE`: 事前関連付けられたデバイスのプロビジョニング解除タスク完了通知を示します。
+ `C2MI_DE_PROVISIONING_ACTIVATED_COMPLETE`: アクティブ化されたデバイスのプロビジョニング解除タスク完了通知を示します。
+ `C2MI_DE_PROVISIONING_COMPLETE_RESPONSE`: プロビジョニング解除タスクの完了レスポンスを示します。
+ `C2MI_CONTROL_EVENT`: デバイスの状態が変化する可能性のあるコントロールイベントを示します。
+ `C2MI_CONTROL_SEND_COMMAND`: ローカルコントローラーからのコントロールコマンドを示します。
+ `C2MI_CONTROL_SEND_DEVICE_STATE_QUERY`: ローカルコントローラーからのコントロールデバイスの状態クエリを示します。  
**reqPayload**  
リクエストペイロード。通常は JSON 形式の文字列です。  
**rspPayload**  
マネージド統合コンポーネントによって入力されたレスポンスペイロード。

**iotmi\_client\_event\_t**  
マネージド統合コンポーネントから受信したイベントを表します。    
**event\_id**  
イベントの一意の識別子。  
**length**  
イベントデータの長さ。  
**data**  
を含むイベントデータへのポインタ`messageType`。次のリストは、可能な値を示しています。  
+ `C2MI_PROVISION_UGS_TASK`: UGS フローのプロビジョニングタスクを示します。
+ `C2MI_PROVISION_SS_TASK`: SimpleSetup フローのプロビジョニングタスクを示します。
+ `C2MI_DE_PROVISION_PRE_ASSOCIATED_TASK`: 事前関連付けられたデバイスのプロビジョニング解除タスクを示します。
+ `C2MI_DE_PROVISION_ACTIVATED_TASK`: アクティブ化されたデバイスのプロビジョニング解除タスクを示します。
+ `C2MI_DEVICE_ONBOARDED_RESPONSE`: デバイスのオンボーディングレスポンスを示します。
+ `C2MI_CONTROL_TASK`: コントロールタスクを示します。
+ `C2MI_CONTROL_EVENT_NOTIFICATION`: ローカルコントローラーのコントロールイベント通知を示します。  
**ctx**  
イベントに関連付けられたカスタムコンテキスト。