- IOT SDK(设备端)文档
- 概述
- 集成编译
- 基本接口
- 1. 初始化SDK
- 2. 反初始化SDK
- 3. 创建SDK句柄
- 4. 连接服务器
- 5. 断开服务器
- 6. 发布
- 7. 设置消息回调
- 8. 销毁句柄
- 9. 检查当前连接状态
- 高级接口
- 10. 注册服务器读取设备属性回调,服务器读取设备属性时触发
- 11. 注册服务器修改设备属性回调,服务器修改设备属性时触发
- 12. 注册服务器调用设备功能回调
- 13. 注册服务器读取设备版本回调
- 14. 注册服务器回复设备从平台拉取固件版本回调
- 15. 注册服务器回复子设备列表请求回调
- 16. 注册服务器回复同步时间回调
- 17. 注册服务器回复设备上报账号绑定回调
- 18. 设备上报属性
- 19. 回复设备属性
- 20. 回复服务器的修改属性请求
- 21. 回复服务器调用设备功能的请求
- 22. 设备上报事件
- 23. 设备上报版本号
- 24. 回复服务器读设备固件版本号
- 25. 设备向服务器请求查看是否有新固件可以升级
- 26. 设备向服务器请求子设备列表
- 27. 注册子设备
- 28. 注销子设备
- 29. 设备向服务器上报子设备上线
- 30. 设备向服务器上报子设备下线
- 31. 回复服务器查看子设备状态的请求
- 32. 同步时间
- 33. 设备向服务器发送自定义消息
- 34. 设备向服务器上报日志
- 35. 设备绑定账号
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);