本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
中心 SDK 客户端
Hub SDK 客户端库充当托管集成 Hub SDK 和在同一集线器上运行的您自己的协议堆栈之间的接口。它公开了一组公共信息, APIs 以方便您的协议栈与 Device Hub SDK 组件的交互。用例包括自定义插件控件、自定义插件供应器和本地控制器。
获取您的托管集成 Hub SDK
Hub SDK 客户端附带托管集成 SDK。请通过托管集成控制台
关于 Hub SDK 工具包
下载后,您将看到一个IotMI-DeviceSDK-Toolkit文件夹,其中包含所有公共头.so文件和可以在应用程序中使用的文件。托管集成团队还提供了一个main.cpp用于演示目的的示例,以及您可以直接执行的演示应用程序二进制文件。bin/您可以选择将其用作应用程序的起点。
使用 Hub SDK 客户端创建您的自定义应用程序
使用以下步骤创建您的自定义应用程序。
-
在应用程序中包含头文件 (.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 -
在主应用程序中创建 Hub SDK 客户端。
在主应用程序中,必须先初始化 Hub SDK 客户端,然后才能使用它来处理请求。你可以简单地使用来构造客户端
clientId。拥有客户端后,您可以将其连接到托管集成设备 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中指定的设置相同。
通过执行以下步骤进行发布和订阅。
建立连接后,您现在可以从托管集成 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);建立连接后,您现在可以将来自应用程序的请求发布到托管集成 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);
自己构建
CMakeLists.txt,然后从那里构建应用程序。最终输出可能是可执行的二进制文件,例如MyFirstApplication
运行您的自定义应用程序
在运行自定义应用程序之前,请完成以下步骤来设置中心并启动托管集成 Hub SDK:
-
请按照中的入职说明进行操作。将您的集线器加入托管集成
-
完成中记录的安装过程安装并验证托管集成 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
-
与事件关联的自定义上下文。