设备标签


有两种方式可以给设备添加标签。

1. 在iFLYIoT 物联网平台上,进入设备管理页,然后选择设备详情→添加标签,如下图所示:

2. 直接在设备端,通过API接口上传设备标签。

无论使用哪种方式,在设置标签后,都会通过初始化SDK时注册的回调函数cbCallServices收到设置的结果。

目前支持全量式的标签上传,即一次性上传本设备的所有标签,不支持单独增加或删除标签。

注意:集成方需要自行管理设备标签的存储,SDK内部不会保存标签内容。

上传标签

上传标签的API接口如下:

/**
 * @brief 上传标签信息
 * @param tags 标签信息数组
 * @param num 标签个数
 * @param sub_dev 如果是上传子设备的标签,需要通过此参数传入子设备信息,否则传入NULL即可
 * @return 0为成功,其他为失败
*/
int IotClient_UploadTags(IotTagInfo_t *tags, int num, const IotDeviceInfo_t *sub_dev);

代码示例

// 模拟几个标签内容
IotTagInfo_t tag[2] = {{"xccc", "asdas987"}, {"xcc", "8745436"}};

// 调用接口上传标签
IotClient_UploadTags(tag, 2, NULL);

接收标签更新信息

通过初始化SDK时注册的回调函数cbCallServices收到标签更新的结果。

注册流程请参考“C-SDK-认证与连接.md”。

代码示例

/**
 * @brief 调用服务回调
 * @param inParams 要调用的服务具体类型,格式如下:
 *         {
 *             "identifer": "AdjustVolume", // 服务类型, 是字符串
 *             "params": {                  // 服务包含的内容, 是Json Object
 *                 "Up": 10                 // 具体的操作, 类型根据协议确定
 *             },
 *             "subDevices": true           // 是否为子设备, 是布尔型; 此值为true表示此回调需要设置子设备的属性
 *         }
 * @param device 要设置的设备; 如果是调用子设备服务的话,可以从此参数中得到子设备的产品ID和名称
 * @param msg 设置结果回传指针; 此为二重指针,在设置完后,可对该指针传入用于显示结果的固定字符串,用于平台侧记录日志和调试使用
 */
int cbCallServices(cJSON *inParams, cJSON *outParams, const IotDeviceInfo_t *device, char **msg)
{
    /* 判断是否为子设备的设置结果 */
    if (cJSON_HasObjectItem(inParams, "subDevices")) {
        cJSON *sub_device = cJSON_GetObjectItem(inParams, "subDevices");
        if (cJSON_IsTrue(sub_device)) {
            IotLogInfo("Invoke subdevice service!");
        } else {
            IotLogInfo("Invoke service!");
        }
    } else {
        IotLogInfo("Invoke service!");
    }

    /* 获取标识符,确认是什么回调类型,比如设置标签 */
    cJSON *identifier = cJSON_GetObjectItem(inParams, "identifer");
    if (identifier == NULL) {
        identifier = cJSON_GetObjectItem(inParams, "identifier");
    }

    /* 获取标签的具体内容 */
    inParams = cJSON_GetObjectItem(inParams, "params");

    /* 返回状态给到SDK */
    if (outParams) {
        cJSON_AddBoolToObject(outParams, "status", 1);
    }

    /* 设置返回结果的打印,方便服务端监控 */
    *msg = "call service ok";

    return 0;
}

results matching ""

    No results matching ""