中心 SDK 客户端 - 的托管集成 AWS IoT Device Management

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

中心 SDK 客户端

Hub SDK 客户端库充当托管集成 Hub SDK 和在同一集线器上运行的您自己的协议堆栈之间的接口。它公开了一组公共信息, APIs 以方便您的协议栈与 Device Hub SDK 组件的交互。用例包括自定义插件控件、自定义插件供应器和本地控制器。

获取您的托管集成 Hub SDK

Hub SDK 客户端附带托管集成 SDK。请通过托管集成控制台联系我们,访问 Hub SDK。

关于 Hub SDK 工具包

下载后,您将看到一个IotMI-DeviceSDK-Toolkit文件夹,其中包含所有公共头.so文件和可以在应用程序中使用的文件。托管集成团队还提供了一个main.cpp用于演示目的的示例,以及您可以直接执行的演示应用程序二进制文件。bin/您可以选择将其用作应用程序的起点。

使用 Hub SDK 客户端创建您的自定义应用程序

使用以下步骤创建您的自定义应用程序。

  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
  2. 在主应用程序中创建 Hub SDK 客户端。

    1. 在主应用程序中,必须先初始化 Hub SDK 客户端,然后才能使用它来处理请求。你可以简单地使用来构造客户端clientId

    2. 拥有客户端后,您可以将其连接到托管集成设备 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中或简单设置配置流程create-managed-thing中指定的设置相同。

  3. 通过执行以下步骤进行发布和订阅。

    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);
    2. 建立连接后,您现在可以将来自应用程序的请求发布到托管集成 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);
  4. 自己构建CMakeLists.txt,然后从那里构建应用程序。最终输出可能是可执行的二进制文件,例如 MyFirstApplication

运行您的自定义应用程序

在运行自定义应用程序之前,请完成以下步骤来设置中心并启动托管集成 Hub SDK:

满足先决条件后,您就可以运行您的自定义应用程序了。例如:

./MyFirstApplication
重要

必须使用脚本部署 Hub SDK使用脚本手动更新中列出的启动脚本才能启动自己的应用程序。顺序很重要,不要更改顺序。

更新以下内容。更改

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

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

数据类型

本节定义了用于自定义协议插件的数据类型。

iotmi_client_request_t

表示要发布到托管集成组件的请求。

消息类型

消息的类型 (CommonTypes:: C2 MIMessage 类型)。以下列表显示了有效值。

  • 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: 表示来自本地控制器的控制设备状态查询。

reqPayl

请求负载,通常是 JSON 格式的字符串。

RSPPayloa

由托管集成组件填充的响应有效负载。

iotmi_client_event_t

表示从托管集成组件收到的事件。

事件_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

与事件关联的自定义上下文。