

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

# ハブコントロール
<a name="hub-control"></a>

ハブコントロールは、 マネージド統合の拡張です。エンドデバイス SDK は、Hub SDK の `MQTTProxy`コンポーネントとインターフェイスできます。ハブコントロールを使用すると、エンドデバイス SDK を使用してコードを実装し、マネージド統合クラウドを介してハブを別のデバイスとして制御できます。ハブコントロール SDK は、 というラベルの Hub SDK に別のパッケージとして提供されます`iot-managed-integrations-hub-control-x.x.x`。

**Topics**
+ [前提条件](#getting-started-tutorial-prequisites)
+ [エンドデバイス SDK コンポーネント](#device-sdk-components)
+ [エンドデバイス SDK との統合](#device-sdk-integration)
+ [例: ハブコントロールを構築する](#build-hub-control)
+ [サポートされている例](#hub-control-examples)
+ [サポートされているプラットフォーム](#hub-control-platforms)

## 前提条件
<a name="getting-started-tutorial-prequisites"></a>

ハブコントロールを設定するには、以下が必要です。
+ Hub [SDK](managedintegrations-sdk-v2.md) バージョン 0.4.0 以降にオンボードされたハブ。
+  から [End Device SDK](managedintegrations-sdk-devices.md) の最新バージョンをダウンロードします AWS マネジメントコンソール。
+ ハブ、バージョン 0.5.0 以降で実行されている [MQTT プロキシ](managedintegrations-sdk-v2.md)コンポーネント。

## エンドデバイス SDK コンポーネント
<a name="device-sdk-components"></a>

[エンドデバイス SDK](managedintegrations-sdk-devices.md) の次のコンポーネントを使用します。
+ データモデルのコードジェネレーター
+ データモデルハンドラー

Hub SDK にはすでにオンボーディングプロセスとクラウドへの接続があるため、以下のコンポーネントは必要ありません。
+ プロビジョニング先
+ PKCS インターフェイス
+ ジョブハンドラー
+ MQTT エージェント

## エンドデバイス SDK との統合
<a name="device-sdk-integration"></a>

1. [データモデルのコードジェネレータ](managedintegrations-sdk-device-codegen.md)ーの指示に従って、低レベル C コードを生成します。

1. [「エンドデバイス SDK の統合](managedintegrations-sdk-device-onboarding.md)」の手順に従って、次の操作を行います。

   1. <a name="managedintegrations-sdk-device-onboarding-buildenv"></a>

**ビルド環境をセットアップします。**

      開発ホストとして Amazon Linux 2023/x86\_64 でコードを構築します。必要なビルドの依存関係をインストールします。

      ```
      dnf install make gcc gcc-c++ cmake
      ```

   1. <a name="managedintegrations-sdk-device-onboarding-hardwarecallback"></a>

**ハードウェアコールバック関数の開発**

      ハードウェアコールバック関数を実装する前に、API の仕組みを理解してください。この例では、On/Off クラスターと OnOff 属性を使用してデバイス関数を制御します。API の詳細については、「」を参照してください[低レベルの C 機能 APIs](managedintegrations-sdk-device-api.md)。

      ```
      struct DeviceState
      {
        struct iotmiDev_Agent *agent;
        struct iotmiDev_Endpoint *endpointLight;
        /* This simulates the HW state of OnOff */
        bool hwState;   
      };
      
      /* This implementation for OnOff getter just reads
         the state from the DeviceState */
      iotmiDev_DMStatus exampleGetOnOff(bool *value, void *user)
      {
         struct DeviceState *state = (struct DeviceState *)(user);
        *value = state->hwState;
        return iotmiDev_DMStatusOk;
      }
      ```

   1. <a name="managedintegrations-sdk-device-onboarding-endpoints"></a>

**エンドポイントをセットアップし、ハードウェアコールバック関数をフックする**

      関数を実装したら、エンドポイントを作成し、コールバックを登録します。以下のタスクを完了します。

      1. デバイスエージェントを作成する

      1. サポートするクラスター構造ごとにコールバック関数ポイントを埋める

      1. エンドポイントをセットアップし、サポートされているクラスターを登録する

      ```
      struct DeviceState
      {
          struct iotmiDev_Agent * agent;
          struct iotmiDev_Endpoint *endpoint1;
      
          /* OnOff cluster states*/
          bool hwState;
      };
      
      
      /* This implementation for OnOff getter just reads
         the state from the DeviceState */
      iotmiDev_DMStatus exampleGetOnOff( bool * value, void * user )
      {
          struct DeviceState * state = ( struct DeviceState * ) ( user );
          *value = state->hwState;
          printf( "%s(): state->hwState: %d\n", __func__, state->hwState );
          return iotmiDev_DMStatusOk;
      }
      
      iotmiDev_DMStatus exampleGetOnTime( uint16_t * value, void * user )
      {
          *value = 0;
          printf( "%s(): OnTime is %u\n", __func__, *value );
          return iotmiDev_DMStatusOk;
      }
      
      iotmiDev_DMStatus exampleGetStartUpOnOff( iotmiDev_OnOff_StartUpOnOffEnum * value, void * user )
      {
          *value = iotmiDev_OnOff_StartUpOnOffEnum_Off;
          printf( "%s(): StartUpOnOff is %d\n", __func__, *value );
          return iotmiDev_DMStatusOk;
      }
      
      void setupOnOff( struct DeviceState *state )
      {
          struct iotmiDev_clusterOnOff clusterOnOff = {
              .getOnOff = exampleGetOnOff,
              .getOnTime = exampleGetOnTime,
              .getStartUpOnOff = exampleGetStartUpOnOff,
          };
          iotmiDev_OnOffRegisterCluster( state->endpoint1,
                                          &clusterOnOff,
                                          ( void * ) state);
      }
      
      
      /* Here is the sample setting up an endpoint 1 with OnOff
         cluster. Note all error handling code is omitted. */
      void setupAgent(struct DeviceState *state)
      {
          struct iotmiDev_Agent_Config config = {
              .thingId = IOTMI_DEVICE_MANAGED_THING_ID,
              .clientId = IOTMI_DEVICE_CLIENT_ID,
          };
          iotmiDev_Agent_InitDefaultConfig(&config);
      
          /* Create a device agent before calling other SDK APIs */
          state->agent = iotmiDev_Agent_new(&config);
          
          /* Create endpoint#1 */
          state->endpoint1 = iotmiDev_Agent_addEndpoint( state->agent,
                                                          1,
                                                          "Data Model Handler Test Device",
                                                          (const char*[]){ "Camera" },
                                                          1 );
          setupOnOff(state);
      }
      ```

## 例: ハブコントロールを構築する
<a name="build-hub-control"></a>

ハブコントロールは、Hub SDK パッケージの一部として提供されます。ハブコントロールサブパッケージには というラベルが付けられ`iot-managed-integrations-hub-control-x.x.x`、変更されていないデバイス SDK とは異なるライブラリが含まれています。

1. コード生成ファイルを `example`フォルダに移動します。

   ```
   cp codegen/out/* example/dm
   ```

1. ハブコントロールを構築するには、次のコマンドを実行します。

   ```
   cd <hub-control-root-folder>
   ```

   ```
   mkdir build
   ```

   ```
   cd build
   ```

   ```
   cmake -DBUILD_EXAMPLE_WITH_MQTT_PROXY=ON -DIOTMI_USE_MANAGED_INTEGRATIONS_DEVICE_LOG=ON ..
   ```

   ```
   cmake -build .
   ```

1. ハブの `MQTTProxy`コンポーネントで例を実行し、 `HubOnboarding` および `MQTTProxy`コンポーネントを実行します。

   ```
   ./examples/iotmi_device_sample_camera/iotmi_device_sample_camera
   ```

 データモデル[マネージド統合データモデル](managedintegrations-data-model.md)については、「」を参照してください。のステップ 5 に従ってエンドポイント[End Device SDK の使用を開始する](managedintegrations-sdk-device-onboarding.md)を設定し、エンドユーザーと iot-managed-integrations 間の通信を管理します。

## サポートされている例
<a name="hub-control-examples"></a>

以下の例が構築され、テストされています。
+ iotmi\_device\_dm\_air\_purifier\_demo
+ iotmi\_device\_basic\_diagnostics
+ iotmi\_device\_dm\_camera\_demo

## サポートされているプラットフォーム
<a name="hub-control-platforms"></a>

次の表に、ハブ制御でサポートされているプラットフォームを示します。


| アーキテクチャ | オペレーティングシステム | GCC バージョン | Binutils バージョン | 
| --- | --- | --- | --- | 
| X86\_64 | Linux | 10.5.0 | 2.37 | 
| AARCH64 | Linux | 10.5.0 | 2.37 | 