IOT SDK(设备端)文档

概述

此文档为IOT SDK文档,用于设备端。本SDK提供源码,设备端可以将整个源码加入到自己的工程编译使用。

集成编译

开发者可将源码加入自己的工程中编译,需要在自己的平台上实现 MQTTMySystem.c 中的接口,主要是网络操作,线程,锁。编译可参考 my_build.sh。

ubuntu_build.sh / my_build.sh 是SDK和测试程序 api_test.c / base_api_test.c 的编译脚本,均可在ubuntu下编译通过。

基本接口

基本接口提供了连接,断开,发布,消息处理等基本操作,这些接口就可以完成所有的工作。

1. 初始化SDK

  • 描述

初始化SDK,使用SDK前必须调用且调用一次即可,调用后SDK会申请一些资源。

int IVY_IOT_Init(const char *profile)
  • 参数
profile profile文件路径
  • 返回值

操作结果,参考 IVY_IOT_RESULT

enum IVY_IOT_RESULT
{
    IVY_IOT_OK = 0,
    IVY_IOT_NOT_INITIALIZE = 1,
    IVY_IOT_FAIL = 2,
    IVY_IOT_INVALID_HANDLE = 3,
    IVY_IOT_PROFILE_NOT_FOUND = 4,
    IVY_IOT_INVALID_PARAM = 5
} ;
  • 备注

profile为一个json文件,他是IoT管理平台的物模型文件,这个文件是针对你自己的设备,可以从平台下载。文件可以路径可以为空,但是你只能使用基本接口。如果填入正确的profile,SDK可以解析物模型的内容,从而使高级接口可以正常工作,这些接口可以帮助开发者减少topic/payload数据组装的操作,方便快速开发。

  • 调用示例
IVY_IOT_Init("/profile/myprofile.json")

2. 反初始化SDK

  • 描述

反初始化SDK,程序退出前调用一次,掉用后会释放调资源

void IVY_IOT_Deinit();
  • 参数

  • 返回值

  • 调用示例
IVY_IOT_Deinit();

3. 创建SDK句柄

  • 描述

创建SDK句柄,每个创建一个句柄是一个单独的实例,相互不影响。

void * IVY_IOT_Create(const char *ip, unsigned short port, 
                      const char *clientId, const char *productId, 
                      const char *username, const char *password, int allCmdTimeoutMS)
  • 参数
ip 服务器地址
port 服务器端口
clientId 设备实例ID,即deviceId,可在后台查看
productId 产品ID
username secureId
password md5(secureId+secureKey),其中+号不参与,32位小写
allCmdTimeoutMS 所有命令超时时间
  • 返回值

SDK句柄,实际就是一个指针,指向一些资源。

  • 备注

请注意要与IVY_IOT_Destroy配对使用。

clientId
productId
username
password

这4个参数可以参考 https://jo5de29djr.feishu.cn/docs/doccny177k5ZsZi6MfaSuVvhVRe# 中的 “CONNECT报文” 部分

  • 调用示例
void *handle = IVY_IOT_Create("172.16.40.165", 1883, 
                              "ABCD123456", "ipc", "ivyiot", 
                              "1a7db7fb586b5f915f9eb66689ab5b3e", 1000 * 20);

4. 连接服务器

  • 描述

连接服务器

int IVY_IOT_Connect(void *handle)
  • 参数
handle SDK handle
  • 返回值

连接结果,参考 IVY_IOT_RESULT

  • 调用示例
void *handle = IVY_IOT_Create("172.16.40.165", 1883, 
                              "ABCD123456", "ipc", "ivyiot", 
                              "1a7db7fb586b5f915f9eb66689ab5b3e", 1000 * 20);

if (IVY_IOT_OK == IVY_IOT_Connect(handle))
{
    // connect success
}

5. 断开服务器

  • 描述

断开服务器

int IVY_IOT_Disconnect(void *handle)
  • 参数
handle SDK handle
  • 返回值

连接结果,参考 IVY_IOT_RESULT

  • 备注

断开服务器不会释放资源。

  • 调用示例
IVY_IOT_Disconnect(handle))

6. 发布

  • 描述

发布

int IVY_IOT_Publish(void *handle, const char *topic, const char *data, int dataSize)
  • 参数
handle SDK handle
topic topic字符串指针
data payload指针
dataSize payload大小
  • 返回值

连接结果,参考 IVY_IOT_RESULT

  • 备注

发布可以参考 https://jo5de29djr.feishu.cn/docs/doccny177k5ZsZi6MfaSuVvhVRe#GbrcOS 中的 “设备订阅Topic” 部分

  • 调用示例
const char *topic = "/ipc/ABCD123456/properties/report";
const char *payload = "{\"timestamp\":1632553196000,\"messageId\":\"12345948\",\"properties\":{\"macAddr\":\"linuxmac\"}}";    

if (IVY_IOT_OK == IVY_IOT_Publish(handle, topic, payload, strlen(payload)))
{
    // publish success
}

7. 设置消息回调

  • 描述

设置消息回调,SDK目前没有订阅,所有的消息都会回调到这里,自己可以解析处理。

int IVY_IOT_SetMessageHandler(void *handle, 
                              void (*msgHandler)(char *topic, int lenOfTopic, char *payload, int                                   lenOfPayload, void *handle))
  • 参数
handle SDK handle
msgHandler 回调函数
  • 返回值

连接结果,参考 IVY_IOT_RESULT

  • 调用示例
void Callback(char *topic, int lenOfTopic, char *payload, int lenOfPayload, void *handle)
{
    memset(gTopicBuf, 0, TOPIC_LEN);
    memset(gPayloadBuf, 0, PAYLOAD_LEN);
    printf("callback topic length=%d payload length=%d\n", lenOfTopic, lenOfPayload);

    if (lenOfTopic < TOPIC_LEN)
    {
        memcpy(gTopicBuf, topic, lenOfTopic);
        printf("callback topic=%s\n", gTopicBuf);
    }

    if (lenOfPayload < PAYLOAD_LEN)
    {
        memcpy(gPayloadBuf, payload, lenOfPayload);
        printf("callback payload=%s\n", payload);
    }
}

if (IVY_IOT_OK == IVY_IOT_SetMessageHandler(handle, Callback))
{
    // Set success
}

8. 销毁句柄

  • 描述

销毁句柄,释放资源

int IVY_IOT_Destroy(void *handle);
  • 参数
handle SDK handle
  • 返回值

连接结果,参考 IVY_IOT_RESULT

  • 调用示例
IVY_IOT_Destroy(handle);

9. 检查当前连接状态

  • 描述

检查当前连接状态

int IVY_IOT_State(void *handle)
  • 参数
handle SDK handle
  • 返回值

状态,参考 IVY_IOT_CONNECTION_STATE

enum IVY_IOT_CONNECTION_STATE
{  
    IVY_IOT_STATE_OFFLINE = 0,
    IVY_IOT_STATE_NOT_INITIALIZE = 1,
    IVY_IOT_STATE_ONLINE = 2,
    IVY_IOT_STATE_INVALID_HANDLE = 3,
    IVY_IOT_STATE_UNKNOWN = 4
} ;
  • 调用示例
int state = IVY_IOT_State(handle);
switch (state)
{
case IVY_IOT_STATE_OFFLINE:
    break;
case IVY_IOT_STATE_NOT_INITIALIZE:
    break;
case IVY_IOT_STATE_ONLINE:
    break;
case IVY_IOT_STATE_INVALID_HANDLE:
    break;
case IVY_IOT_STATE_UNKNOWN:
    break;
default:
    break;
}

高级接口

高级接口是在基础接口之上的封装,是为了方便调用者快速开发。

10. 注册服务器读取设备属性回调,服务器读取设备属性时触发

  • 描述

注册回回调,服务器读取设备属性时触发
对应 https://jo5de29djr.feishu.cn/docs/doccny177k5ZsZi6MfaSuVvhVRe#zL5YbX 中的 “读取设备属性” topic

int IVY_IOT_REGISTER_MSG_PropertyRead(void *handle, pFnPropertyRead cb)
  • 参数
handle SDK handle
pFnPropertyRead 回调函数
  • 回调函数
typedef int (*pFnPropertyRead)(const char *childId, const char *msgId, const char *properties, void *handle);
childId 子设备ID,如果为空,表示不是子设备
msgId 服务器发送消息所带的msgID
properties 服务器要读取的属性,JSON数据
handle SDK句柄
  • properties JSON 格式
["deviceName", "deviceMac"]
  • 返回值

操作结果,参考 IVY_IOT_RESULT

  • 备注

可以在回调内调用 IVY_IOT_ReplyProperty 回复服务器的请求。

  • 调用示例

int CB_ProperyRead(const char *childId, const char *msgId, const char *properties, void *handle)
{
    printf("CB_ProperyRead handle=%p, msgId=%s properties=%s\n", handle, msgId, properties);

    // properties like this
    // ["deviceName", "deviceMac"]

    char propertiesToRead[512] = {0};
    IVY_IOT_ReplyProperty(handle, msgId, propertiesToRead, 0, "", childId);

    return 0;
}

......

IVY_IOT_REGISTER_MSG_PropertyRead(handle, CB_ProperyRead);

11. 注册服务器修改设备属性回调,服务器修改设备属性时触发

  • 描述

注册回调,服务器修改设备属性时触发
对应 https://jo5de29djr.feishu.cn/docs/doccny177k5ZsZi6MfaSuVvhVRe#zL5YbX 中的 “修改设备属性” topic

int IVY_IOT_REGISTER_MSG_PropertyWrite(void *handle, pFnPropertyWrite cb)
  • 参数
handle SDK handle
pFnPropertyWrite 回调函数
  • 回调函数
typedef int (*pFnPropertyWrite)(const char *childId, const char *msgId, const char *properties, void *handle)
childId 子设备ID,如果为空,表示不是子设备
msgId 服务器发送消息所带的msgID
properties 服务器要修改的属性,JSON所有的值都是字符串
handle SDK句柄
  • properties JSON 格式
{
    "color":"red",
    "deviceName":"abc"
}
  • 返回值

操作结果,参考 IVY_IOT_RESULT

  • 备注

可以在回调内调用 IVY_IOT_ReplyWriteProperty 回复服务器的请求。

  • 调用示例

int CB_PropertyWrite(const char *childId, const char *msgId, const char *properties, void *handle)
{
    int rst = IVY_IOT_FAIL;
    printf("CB_ProperyWritehandle=%p, msgId=%s properties=%s\n", handle, msgId, properties);

    // parse properties to set devcie
    ......

    // tell broker your operate result
    rst = IVY_IOT_ReplyWriteProperty(handle, msgId, NULL, 0, childId);

    printf("IVY_IOT_ReplyWriteProperty rst=%d\n", rst);

    return 0;    
}


......

IVY_IOT_REGISTER_MSG_PropertyWrite(handle, CB_PropertyWrite);

12. 注册服务器调用设备功能回调

  • 描述

注册回调,服务器调用设备功能时触发
对应 https://jo5de29djr.feishu.cn/docs/doccny177k5ZsZi6MfaSuVvhVRe#zL5YbX 中的 “调用设备功能” topic

int IVY_IOT_REGISTER_MSG_FunctionInvoke(void *handle, pFnFunctionInvoke cb)
  • 参数
handle SDK handle
pFnFunctionInvoke 回调函数
  • 回调函数
typedef int (*pFnFunctionInvoke)(const char *childId, const char *msgId, const char *functionName, const char *functionParameter, void *handle)
childId 子设备ID,如果为空,表示不是子设备
msgId 服务器发送消息所带的msgID
functionName 服务器要调用的功能名字
functionParameter 功能所需要的输入参数,格式为JSON数组
handle SDK句柄
  • functionParameter JSON 格式
[{"name":"text","value":"播放声音"}]
// 数据其实就是服务器下行请求中的inputs部分。
// 具体个格式为你自己定义的格式,需要根据实际形况解析。
// 更详细信息参考
// https://jo5de29djr.feishu.cn/docs/doccny177k5ZsZi6MfaSuVvhVRe#zL5YbX 中的 “调用设备功能” topic
  • 返回值

操作结果,参考 IVY_IOT_RESULT

  • 备注

可以在回调内调用 IVY_IOT_ReplyFunctionInvoke 回复服务器的请求。

  • 调用示例

int CB_FunctionInvoke(const char *childId, const char *msgId, const char *functionName, const char *functionParameter, void *handle)
{
    int rst = IVY_IOT_FAIL;
    const char *functionOutput = "{\"out1\":123, \"out2\":\"test1\", \"array\":[\"abc\", \"111\", \"osk\"]}";
    printf("CB_FunctionInvoke=%p, msgId=%s functionName=%s functionParam=%s\n", handle, msgId, functionName, functionParameter);


    rst = IVY_IOT_ReplyFunctionInvoke(handle, msgId, functionOutput, 0, NULL);

    printf("IVY_IOT_ReplyFunctionInvoke rst=%d\n", rst);

    return 0;    
}


......

IVY_IOT_REGISTER_MSG_FunctionInvoke(handle, CB_FunctionInvoke);

13. 注册服务器读取设备版本回调

  • 描述

注册回调,服务器读取设备版本时触发
对应 https://jo5de29djr.feishu.cn/docs/doccny177k5ZsZi6MfaSuVvhVRe#zL5YbX 中的 “平台获取固件版本” topic

int IVY_IOT_REGISTER_MSG_GetVersion(void *handle, pFnGetVersion cb)
  • 参数
handle SDK handle
pFnGetVersion 回调函数
  • 回调函数
typedef int (*pFnGetVersion)(const char *childId, const char *msgId, void *handle)
childId 子设备ID,如果为空,表示不是子设备
msgId 服务器发送消息所带的msgID
handle SDK句柄
  • 返回值

操作结果,参考 IVY_IOT_RESULT

  • 备注

可以在回调内调用 IVY_IOT_ReplyVersion 回复服务器的请求。

  • 调用示例

int CB_GetVersion(const char *childId, const char *msgId, void *handle)
{
    int rst = IVY_IOT_FAIL;
    printf("CB_GetVersion=%p, msgId=%s \n", handle, msgId);

    // Get device version
    rst = IVY_IOT_ReplyVersion(handle, msgId, "1.1.1.1", "1.1.1.2", "1.1.1.3", "1.1.1.6", NULL);

    printf("IVY_IOT_ReplyVersion rst=%d\n", rst);

    return 0;        
}



......

IVY_IOT_REGISTER_MSG_GetVersion(handle, CB_GetVersion);

14. 注册服务器回复设备从平台拉取固件版本回调

  • 描述

注册回调,当设备发送请求固件版本信息,服务器回复设备固件版本时触发
对应 https://jo5de29djr.feishu.cn/docs/doccny177k5ZsZi6MfaSuVvhVRe#zL5YbX 中的 “设备拉取固件更新” topic

int IVY_IOT_REGISTER_MSG_PullVersion(void *handle, pFnPullVersion cb)
  • 参数
handle SDK handle
pFnPullVersion 回调函数
  • 回调函数
typedef int (*pFnPullVersion)(const char *childId, const char *msgId, 
                              char *url, char *vesrion, int onUpgradeLine, 
                              char *sign, char *signMethod, 
                              char *firmwareId, unsigned int size, void *handle)
childId 子设备ID,如果为空,表示不是子设备
msgId 服务器发送消息所带的msgID
url 固件文件下载地址
vesrion 版本号
onUpgradeLine 是否在升级链上,1:yes 0:no
sign 文件签名
signMethod 文件签名方式
firmwareId 固件类型
size 升级文件大小
handle SDK句柄
  • 返回值

操作结果,参考 IVY_IOT_RESULT

  • 备注
  • 调用示例

int CB_PullVersion(const char *childId, const char *msgId, char *url, char *version, int onUpgradeLine, char *sign, char *signMethod, char *firmwareId, unsigned int size, void *handle)
{

    printf("CB_PullVersion=%p, msgId=%s\n url=%s\n version=%s onUpgradeLine=%d\n sign=%s signMethod=%s\n firmwareId=%s\n size=%u\n", 
            handle, msgId, url, version, onUpgradeLine, sign, signMethod, firmwareId, size);


    return 0;    
}




......

IVY_IOT_REGISTER_MSG_PullVersion(handle, CB_PullVersion)

15. 注册服务器回复子设备列表请求回调

  • 描述

注册回调,当设备发送请求子设备列表,服务器回复时触发
对应 https://jo5de29djr.feishu.cn/docs/doccny177k5ZsZi6MfaSuVvhVRe#zL5YbX 中的 “网关请求子设备清单” topic

int IVY_IOT_REGISTER_MSG_QueryChildList(void *handle, pFnQueryChildList cb)
  • 参数
handle SDK handle
pFnQueryChildList 回调函数
  • 回调函数
typedef int (*pFnQueryChildList)(const char *childId, const char *msgId, 
                                int pageIndex, int pageSize, int total, 
                                char *listData, void *handle)
childId 子设备ID,如果为空,表示不是子设备
msgId 服务器发送消息所带的msgID
pageIndex 索引页,每页20条
pageSize 每页数据大小
total 总共有多少数据
listData 子设备列表数据 JSON数组
handle SDK句柄
  • 返回值

操作结果,参考 IVY_IOT_RESULT

  • listData Json 格式
[{
    "id": "子设备ID",
    "name": "子设备名称",
    "productId": "子设备产品ID",
    "productName": "子设备产品名称",
    "configuration": {
        "selfManageState": false //子设备自己管理状态(默认false).为true时,平台将发送DeviceCheckMessage到网关来检查子设备状态
    },
    "state": {
        "text": "在线", //子设备状态
        "value": "online"
    },
    "creatorId": "1199596756811550720",
    "createTime": 1627367330619, //创建时间
    "registryTime": 1627367330589, //注册时间
    "orgId": "", //所属机构编号
    "parentId": "网关设备ID",
    "features": [] //设备特性,整形数组
}]

 //listData就是跟自己定义的数据结构相关,请根据具体结构解析。其数据就是服务器返回数据中的data Json中的data数组。
//具体参考 https://jo5de29djr.feishu.cn/docs/doccny177k5ZsZi6MfaSuVvhVRe#zL5YbX 中的 “网关请求子设备清单” 的数据响应
  • 调用示例

int CB_QueryChildList(const char *childId, const char *msgId, int pageIndex, int pageSize, int total, char *listData, void *handle)
{
    printf("CB_QueryChildList=%p, msgId=%s pageIndex=%d pageSize=%d total=%d listData=%p\n", 
            handle, msgId, pageIndex, pageSize, total, listData);

    if (listData != NULL)
    {
        printf("CB_QueryChildList %s\n", listData);
        free(listData);
    }

    return 0;    
}




......

IVY_IOT_REGISTER_MSG_QueryChildList(handle, CB_QueryChildList);

16. 注册服务器回复同步时间回调

  • 描述

注册回调,当设备发送同步时间请求后,服务器回复时触发
对应 https://jo5de29djr.feishu.cn/docs/doccny177k5ZsZi6MfaSuVvhVRe#zL5YbX 中的 “时间同步” topic

int IVY_IOT_REGISTER_MSG_SyncTime(void *handle, pFnSyncTime cb)
  • 参数
handle SDK handle
pFnSyncTime 回调函数
  • 回调函数
typedef int (*pFnSyncTime)(const char *childId, const char *msgId, 
                          unsigned int timestamp, int timeZone, void *handle)
childId 子设备ID,如果为空,表示不是子设备
msgId 服务器发送消息所带的msgID
timestamp 时间戳
timeZone 时区
handle SDK句柄
  • 返回值

操作结果,参考 IVY_IOT_RESULT

  • 调用示例

int CB_SyncTime(const char *childId, const char *msgId, unsigned int timestamp, int timeZone, void *handle)
{
    printf("CB_SyncTime=%p, msgId=%s timestamp=%u timeZone=%d\n", handle, msgId, timestamp, timeZone);

    // sync device time

    return 0;        
}




......

IVY_IOT_REGISTER_MSG_SyncTime(handle, CB_SyncTime);

17. 注册服务器回复设备上报账号绑定回调

  • 描述

注册回调,当设备上报账号绑定,服务器回复时触发
对应 https://jo5de29djr.feishu.cn/docs/doccny177k5ZsZi6MfaSuVvhVRe#zL5YbX 中的 “设备账号绑定” topic

int IVY_IOT_REGISTER_MSG_BindUser(void *handle, pFnBindUser cb)
  • 参数
handle SDK handle
pFnBindUser 回调函数
  • 回调函数
typedef int (*pFnBindUser)(const char *msgId, int success, void *handle)
childId 子设备ID,如果为空,表示不是子设备
msgId 服务器发送消息所带的msgID
success 1:success 0: fail
handle SDK句柄
  • 返回值

操作结果,参考 IVY_IOT_RESULT

  • 调用示例

int CB_BindUser(const char *msgId, int success, void *handle)
{
    printf("CB_SyncTime=%p, msgId=%s success=%d\n", handle, msgId, success);

    return 0;
}




......

IVY_IOT_REGISTER_MSG_BindUser(handle, CB_BindUser);

18. 设备上报属性

  • 描述

设备上报属性
对应 https://jo5de29djr.feishu.cn/docs/doccny177k5ZsZi6MfaSuVvhVRe#zL5YbX 中的 “设备属性上报” topic

int IVY_IOT_ReportProperty(void *handle, const char *properties, const char *childId)
  • 参数
handle SDK handle
properties 上报属性,JSON
childId 子设备ID,可以为空,如果要操作的是子设备,传入子设备ID
  • properties JSON格式
{
"deviceName":"devname",
"length":"28"
}
// 所有的值都为字符串,SDK内部会做转换
  • 返回值

操作结果,参考 IVY_IOT_RESULT

  • 调用示例

    int rst = IVY_IOT_FAIL;
    char properties[512] = {0};
    sprintf(properties, "{\"deviceName\":\"ivy_dev_name_%d\", \"macAddr\":\"ivy_addr_%d\",
            \"productName\":\"ivy_product_%d\",\"supportP2p\":\"%d\"}", counter++, counter++,
            counter++, counter++);
    rst = IVY_IOT_ReportProperty(handle, properties, NULL);

19. 回复设备属性

  • 描述

回复设备属性,当 IVY_IOT_REGISTER_MSG_PropertyRead 设置的回调被调用,可在回调中调用此接口。
对应 https://jo5de29djr.feishu.cn/docs/doccny177k5ZsZi6MfaSuVvhVRe#zL5YbX 中的 “读取设备属性” topic

int IVY_IOT_ReplyProperty(void *handle, const char *msgId, 
                          const char *properties, 
                          int errorCode, const char *errorReason, const char *childId)
  • 参数
handle SDK handle
msgId 服务器请求所带的msgID
properties 回复属性,JSON
errorCode 0:成功,其他值:失败
errorReason 失败的原因,可以为空
childId 子设备ID,可以为空,如果要操作的是子设备,传入子设备ID
  • properties JSON格式
{
"deviceName":"devname",
"length":"28"
}
// 所有的值都为字符串,SDK内部会做转换
  • 返回值

操作结果,参考 IVY_IOT_RESULT

  • 调用示例

    char propertiesToRead[512] = {0};
    sprintf(propertiesToRead, "{\"devName\":\"%s\"}", "my_dev_name");
    IVY_IOT_ReplyProperty(handle, msgId, propertiesToRead, 0, "", childId);

20. 回复服务器的修改属性请求

  • 描述

回复服务器修改设备属性的请求,当 IVY_IOT_REGISTER_MSG_PropertyWrite 设置的回调被调用,可在回调中调用此接口。
对应 https://jo5de29djr.feishu.cn/docs/doccny177k5ZsZi6MfaSuVvhVRe#zL5YbX 中的 “修改设备属性” topic

int IVY_IOT_ReplyWriteProperty(void *handle, const char *msgId, 
                                const char *propertiesUpdated, 
                                int errorCode, const char *childId)
  • 参数
handle SDK handle
msgId 服务器请求所带的msgID
propertiesUpdated 可以为空,不需要传
errorCode 0:成功,其他值:失败
childId 子设备ID,可以为空,如果要操作的是子设备,传入子设备ID
  • properties JSON格式
{
"deviceName":"devname",
"length":"28"
}
// 所有的值都为字符串,SDK内部会做转换
  • 返回值

操作结果,参考 IVY_IOT_RESULT

  • 调用示例

    int rst = IVY_IOT_FAIL;
    rst = IVY_IOT_ReplyWriteProperty(handle, msgId, NULL, 0, childId);

21. 回复服务器调用设备功能的请求

  • 描述

回复服务器调用设备功能的请求,当 IVY_IOT_REGISTER_MSG_FunctionInvoke 设置的回调被调用,可在回调中调用此接口。
对应 https://jo5de29djr.feishu.cn/docs/doccny177k5ZsZi6MfaSuVvhVRe#zL5YbX 中的 “调用设备功能” topic

int IVY_IOT_ReplyFunctionInvoke(void *handle, const char *msgId, 
                                const char *outputData, int errorCode, const char *childId)
  • 参数
handle SDK handle
msgId 服务器请求所带的msgID
outputData 功能执行后需要返回给服务器的数据,如果没有,可以不填,JSON
errorCode 0:成功,其他值:失败
childId 子设备ID,可以为空,如果要操作的是子设备,传入子设备ID
  • outputData JSON格式
返回数据的格式为自己在平台定义的格式,因此要根据组合JSON数据。传入的数据应该为物模型文件中'function'中的'output'部分
  • 返回值

操作结果,参考 IVY_IOT_RESULT

  • 调用示例

    int rst = IVY_IOT_FAIL;
    const char *functionOutput = "{\"out1\":123, \"out2\":\"test1\", \"array\":[\"abc\", \"111\", \"osk\"]}";
    printf("CB_FunctionInvoke=%p, msgId=%s functionName=%s functionParam=%s\n", 
            handle, msgId, functionName, functionParameter);
    rst = IVY_IOT_ReplyFunctionInvoke(handle, msgId, functionOutput, 0, NULL);

22. 设备上报事件

  • 描述

设备向服务器上报事件,
对应 https://jo5de29djr.feishu.cn/docs/doccny177k5ZsZi6MfaSuVvhVRe#zL5YbX 中的 “设备事件上报” topic

int IVY_IOT_ReportEvent(void *handle, const char *eventId, 
                        const char *eventData, const char *childId)
  • 参数
handle SDK handle
eventId 事件的ID,字符串,此项为自己在平台的定义,可以在物模型文件中看到
eventData 事件数据,此项为自己在平台的定义,可以在物模型文件中看到
childId 子设备ID,可以为空,如果要操作的是子设备,传入子设备ID
  • 返回值

操作结果,参考 IVY_IOT_RESULT

  • 调用示例

    int rst = IVY_IOT_FAIL;
    char eventData[512] = {0};
    sprintf(eventData, "%s", 
            "{\"appTitle\":\"apptitle\", \"appDesc\":\"appDesc\", \"alarmType\":\"18\"}");
    rst = IVY_IOT_ReportEvent(handle, "doorbellCall", eventData, NULL);

23. 设备上报版本号

  • 描述

设备向服务器上报固件版本号,
对应 https://jo5de29djr.feishu.cn/docs/doccny177k5ZsZi6MfaSuVvhVRe#zL5YbX 中的 “设备上报固件版本” topic

int IVY_IOT_ReportVersion(void *handle, 
                          const char *appVer, const char *sysVer, 
                          const char *patchVer, const char *chipVer, const char *childId)
  • 参数
handle SDK handle
appVer 应用固件版本号
sysVer 系统固件版本号
patchVer 补丁版本号
chipVer 芯片版本号
childId 子设备ID,可以为空,如果要操作的是子设备,传入子设备ID
  • 返回值

操作结果,参考 IVY_IOT_RESULT

  • 调用示例
int rst = IVY_IOT_ReportVersion(handle, "1.1.1.1", "2.2.2.2", "3.3.3.3", "4.4.4.4", NULL);

24. 回复服务器读设备固件版本号

  • 描述

回复服务器读设备固件版本号,当 IVY_IOT_REGISTER_MSG_GetVersion 设置的回调被调用,可在回调中调用此接口。
对应 https://jo5de29djr.feishu.cn/docs/doccny177k5ZsZi6MfaSuVvhVRe#zL5YbX 中的 “平台获取固件版本” topic

int IVY_IOT_ReplyVersion(void *handle, 
                        const char *appVer, const char *sysVer, 
                        const char *patchVer, const char *chipVer, const char *childId)
  • 参数
handle SDK handle
appVer 应用固件版本号
sysVer 系统固件版本号
patchVer 补丁版本号
chipVer 芯片版本号
childId 子设备ID,可以为空,如果要操作的是子设备,传入子设备ID
  • 返回值

操作结果,参考 IVY_IOT_RESULT

  • 调用示例
int rst = IVY_IOT_ReplyVersion(handle, "1.1.1.1", "2.2.2.2", "3.3.3.3", "4.4.4.4", NULL);

25. 设备向服务器请求查看是否有新固件可以升级

  • 描述

设备向服务器请求查看是否有新固件可以升级,此命令可以触发 IVY_IOT_REGISTER_MSG_PullVersion设置的回调。
对应 https://jo5de29djr.feishu.cn/docs/doccny177k5ZsZi6MfaSuVvhVRe#zL5YbX 中的 “设备拉取固件更新” topic

int IVY_IOT_CheckUpdate(void *handle, 
                        int lastestVer, int versionType, 
                        const char *version, const char *childId)
  • 参数
handle SDK handle
lastestVer 1:强制获取最新版本的固件 0:否
versionType 版本号类型 0: application 1: system 2: patch 3: chip
version 版本号
childId 子设备ID,可以为空,如果要操作的是子设备,传入子设备ID
  • 返回值

操作结果,参考 IVY_IOT_RESULT

  • 调用示例
    int rst = IVY_IOT_FAIL;
    rst = IVY_IOT_CheckUpdate(handle, 1, 0, "1.0.0.1", NULL);

26. 设备向服务器请求子设备列表

  • 描述

设备向服务器请求子设备列表,此命令可以触发 IVY_IOT_REGISTER_MSG_QueryChildList 设置的回调。
对应 https://jo5de29djr.feishu.cn/docs/doccny177k5ZsZi6MfaSuVvhVRe#zL5YbX 中的 “网关请求子设备清单” topic

int IVY_IOT_QueryChildDevicesList(void *handle, int pageIndex, const char *childId)
  • 参数
handle SDK handle
pageIndex 请求页索引号,从0开始,每1页数据20个
childId 子设备ID,可以为空,如果要操作的是子设备,传入子设备ID
  • 返回值

操作结果,参考 IVY_IOT_RESULT

  • 调用示例
    int rst = IVY_IOT_FAIL;
    rst = IVY_IOT_QueryChildDevicesList(handle, 0, NULL);

27. 注册子设备

  • 描述

注册子设备,
对应 https://jo5de29djr.feishu.cn/docs/doccny177k5ZsZi6MfaSuVvhVRe#zL5YbX 中的 “子设备注册(自注册&绑定)” topic

int IVY_IOT_RegisterChildDevice(void *handle, const char *childId, 
                                const char *childName, const char *productId, 
                                int selfManageState)
  • 参数
handle SDK handle
childId 子设备ID
childName 子设备名称
productId 产品ID,可以在平台中查看
selfManageState 子设备是否自己管理状态,目前请填 0
  • 返回值

操作结果,参考 IVY_IOT_RESULT

  • 调用示例
    int rst = IVY_IOT_FAIL;
    rst = IVY_IOT_RegisterChildDevice(handle, "ABCD1111", "my_device_name", "DDESAAA1224", 0);

28. 注销子设备

  • 描述

注销子设备,
对应 https://jo5de29djr.feishu.cn/docs/doccny177k5ZsZi6MfaSuVvhVRe#zL5YbX 中的 “子设备注销(解绑)” topic

int IVY_IOT_UnregisterChildDevice(void *handle, const char *childId)
  • 参数
handle SDK handle
childId 子设备ID
  • 返回值

操作结果,参考 IVY_IOT_RESULT

  • 调用示例
    int rst = IVY_IOT_FAIL;
    rst = IVY_IOT_UnregisterChildDevice(handle, "ABCD1111");

29. 设备向服务器上报子设备上线

  • 描述

设备向服务器上报子设备上线,
对应 https://jo5de29djr.feishu.cn/docs/doccny177k5ZsZi6MfaSuVvhVRe#zL5YbX 中的 “子设备上线” topic

int IVY_IOT_ReportChildDeviceOnline(void *handle, const char *childId)
  • 参数
handle SDK handle
childId 子设备ID
  • 返回值

操作结果,参考 IVY_IOT_RESULT

  • 调用示例
    int rst = IVY_IOT_FAIL;
    rst = IVY_IOT_ReportChildDeviceOnline(handle, "ABCD1111");

30. 设备向服务器上报子设备下线

  • 描述

设备向服务器上报子设备上线,
对应 https://jo5de29djr.feishu.cn/docs/doccny177k5ZsZi6MfaSuVvhVRe#zL5YbX 中的 “子设备离线” topic

int IVY_IOT_ReportChildDeviceOffline(void *handle, const char *childId)
  • 参数
handle SDK handle
childId 子设备ID
  • 返回值

操作结果,参考 IVY_IOT_RESULT

  • 调用示例
    int rst = IVY_IOT_FAIL;
    rst = IVY_IOT_ReportChildDeviceOffline(handle, "ABCD1111");

31. 回复服务器查看子设备状态的请求

  • 描述

回复服务器查看子设备状态的请求,当
对应 https://jo5de29djr.feishu.cn/docs/doccny177k5ZsZi6MfaSuVvhVRe#zL5YbX 中的 “子设备状态检查回复” topic

int ReplyChildDevcieState(void *handle, const char *childId, int state)
  • 参数
handle SDK handle
childId 子设备ID
state 0:不在线 1:在线
  • 返回值

操作结果,参考 IVY_IOT_RESULT

  • 调用示例
    int rst = IVY_IOT_FAIL;
    rst = ReplyChildDevcieState(handle, "ABCD1111"0);

32. 同步时间

  • 描述

同步时间,调用后可触发 IVY_IOT_REGISTER_MSG_SyncTime 设置的回调,
对应 https://jo5de29djr.feishu.cn/docs/doccny177k5ZsZi6MfaSuVvhVRe#zL5YbX 中的 “时间同步” topic

int IVY_IOT_SyncTime(void *handle, const char *childId)
  • 参数
handle SDK handle
childId 子设备ID,可以为空,如果要操作的是子设备,传入子设备ID
  • 返回值

操作结果,参考 IVY_IOT_RESULT

  • 调用示例
    int rst = IVY_IOT_FAIL;
    rst = IVY_IOT_SyncTime(handle, NULL);

33. 设备向服务器发送自定义消息

  • 描述

设备向服务器发送自定义消息,
对应 https://jo5de29djr.feishu.cn/docs/doccny177k5ZsZi6MfaSuVvhVRe#zL5YbX 中的 “透传设备消息” topic

int IVY_IOT_PostMessage(void *handle, char *buffer, int bufferSize, const char *childId)
  • 参数
handle SDK handle
buffer 自定义消息数据
bufferSize 自定义消息数据大小
childId 子设备ID,可以为空,如果要操作的是子设备,传入子设备ID
  • 返回值

操作结果,参考 IVY_IOT_RESULT

  • 调用示例
    int rst = IVY_IOT_FAIL;
    const char *buffer = "{\"data\":\"123\"}";
    rst = IVY_IOT_PostMessage(handle, buffer, strlen(buffer), NULL);

34. 设备向服务器上报日志

  • 描述

设备向服务器上报日志,
对应 https://jo5de29djr.feishu.cn/docs/doccny177k5ZsZi6MfaSuVvhVRe#zL5YbX 中的 “设备日志上报” topic

int IVY_IOT_ReportLog(void *handle, const char *logText, int logTextSize, const char *childId)
  • 参数
handle SDK handle
logText log内容
logTextSize log大小
childId 子设备ID,可以为空,如果要操作的是子设备,传入子设备ID
  • 返回值

操作结果,参考 IVY_IOT_RESULT

  • 调用示例
    int rst = IVY_IOT_FAIL;
    const char *log = "I send a message!";
    rst = IVY_IOT_ReportLog(handle, log, strlen(log), NULL);

35. 设备绑定账号

  • 描述

设备绑定账号,调用后 IVY_IOT_REGISTER_MSG_BindUser 设置的回调被触发。
对应 https://jo5de29djr.feishu.cn/docs/doccny177k5ZsZi6MfaSuVvhVRe#zL5YbX 中的 “设备账号绑定” topic

int IVY_IOT_BindUser(void *handle, const char *token)
  • 参数
handle SDK handle
token APP可以从平台获取token,提供给设备
  • 返回值

操作结果,参考 IVY_IOT_RESULT

  • 调用示例
    int rst = IVY_IOT_FAIL;
    const char *token = "ab12feaa3123bbc331";
    rst = IVY_IOT_BindUser(handle, token);
文档更新时间: 2021-11-03 17:18   作者:庄小婵