Hub 控制 - 的受管整合 AWS IoT Device Management

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Hub 控制

Hub 控制是受管整合終端裝置 SDK 的延伸,允許它與 Hub SDK 中的 MQTTProxy 元件連接。透過中樞控制,您可以使用結束裝置 SDK 實作程式碼,並透過受管整合雲端將中樞控制為個別裝置。中樞控制 SDK 會在中樞 SDK 中以單獨的套件提供,標記為 iot-managed-integrations-hub-control-x.x.x

先決條件

若要設定中樞控制,您需要下列項目:

  • 已加入 Hub SDK 0.4.0 版或更新版本的中樞。

  • 從 下載最新版本的結束裝置 SDK AWS 管理主控台。

  • 在中樞上執行的 MQTT 代理元件,0.5.0 版或更新版本。

終端裝置 SDK 元件

結束裝置 SDK 使用下列元件:

  • 資料模型的程式碼產生器

  • 資料模型處理常式

由於 Hub SDK 已有加入程序和雲端連線,因此您不需要下列元件:

  • 佈建者

  • PKCS 介面

  • 任務處理常式

  • MQTT 代理程式

與終端裝置 SDK 整合

  1. 遵循資料模型的程式碼產生器中的指示來產生低階 C 程式碼。

  2. 遵循整合終端裝置 SDK 中的指示,以:

    1. 設定建置環境

      在 Amazon Linux 2023/x86_64 上建置程式碼做為您的開發主機。安裝必要的建置相依性:

      dnf install make gcc gcc-c++ cmake
    2. 開發硬體回呼函數

      實作硬體回呼函數之前,請先了解 API 的運作方式。此範例使用 On/Off 叢集和 OnOff 屬性來控制裝置函數。如需 API 詳細資訊,請參閱 低階 C-Function APIs

      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; }
    3. 設定端點和掛接硬體回呼函數

      實作函數之後,請建立端點並註冊您的回呼。完成這些任務:

      1. 建立裝置代理程式

      2. 為您要支援的每個叢集結構填入回呼函數點

      3. 設定端點並註冊支援的叢集

      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); }

範例:建置中樞控制

Hub 控制項是 Hub SDK 套件的一部分。中樞控制子套件會標記 ,iot-managed-integrations-hub-control-x.x.x並包含與未修改的裝置 SDK 不同的程式庫。

  1. 將程式碼產生的檔案移至 example 資料夾:

    cp codegen/out/* example/dm
  2. 若要建置中樞控制,請執行下列命令:

    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 .
  3. 使用中樞上的 MQTTProxy 元件執行範例,並執行 HubOnboardingMQTTProxy元件。

    ./examples/iotmi_device_sample_camera/iotmi_device_sample_camera

如需資料模型受管整合資料模型,請參閱 。遵循 中的步驟 5 開始使用結束裝置 SDK 設定端點,並管理最終使用者與 iot-managed-integrations 之間的通訊。

支援的範例

下列範例已經過建置和測試:

  • iotmi_device_dm_air_purifier_demo

  • iotmi_device_basic_diagnostics

  • iotmi_device_dm_camera_demo

支援平台

下表顯示支援用於中樞控制的平台。

架構 作業系統 GCC 版本 Binutils 版本

X86_64

Linux

10.5.0

2.37

aarch64

Linux

10.5.0

2.37