集线器控制 - 的托管集成 AWS IoT Device Management

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

集线器控制

集线器控件是托管集成终端设备 SDK 的扩展,允许它与 Hub SDK 中的MQTTProxy组件交互。借助集线器控制,您可以使用终端设备 SDK 实现代码,并通过托管集成云作为单独的设备控制您的集线器。集线器控制 SDK 将作为单独的软件包在 Hub SDK 中提供,标记为iot-managed-integrations-hub-control-x.x.x

先决条件

要设置集线器控制,您需要满足以下条件:

终端设备 SDK 组件

使用终端设备 SDK 中的以下组件:

  • 数据模型的代码生成器

  • 数据模型处理器

由于 Hub SDK 已经具有入门流程和云端连接,因此您不需要以下组件:

  • 预备人

  • PKCS 接口

  • 作业处理者

  • MQTT 代理

与终端设备 SDK 集成

  1. 按照数据模型代码生成器中的说明生成低级 C 代码。

  2. 按照集成终端设备 SDK 中的说明执行以下操作:

    1. 设置构建环境

      作为开发主机,在亚马逊 Linux 2023/x86_64 上构建代码。安装必要的编译依赖项:

      dnf install make gcc gcc-c++ cmake
    2. 开发硬件回调函数

      在实现硬件回调函数之前,请先了解 API 的工作原理。此示例使用 On/Off 群集和 OnOff 属性来控制设备功能。有关 API 的详细信息,请参阅低级 C 函数 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 SDK 包的一部分提供。集线器控制子包标有与未经修改的设备 SDK 不同的库,iot-managed-integrations-hub-control-x.x.x并且包含不同的库。

  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 设备基本诊断

  • iotmi_device_dm_camera_demo

支持的平台

下表显示了支持的集线器控制平台。

架构 操作系统 海湾合作委员会版本 Binutils 版本

X86_64

Linux

10.5.0

2.37

aarch64

Linux

10.5.0

2.37