Open eternal-echo opened 1 year ago
使用ali-iotkit的sdk连接到阿里云iot平台,首先协调器需要先将自身设备连接到云平台,然后分别建立子设备与云平台间的连接。
子设备和网关连接的demo参考LINKSDK\demos\subdev_basic_demo.c
,先在ali-iotkit上运行业务逻辑,调通整个协调器,实现路由转发的功能,后续决定是否移植最新的linksdk
网关demo
static int example_add_subdev(iotx_linkkit_dev_meta_info_t *meta_info)
{
int res = 0, devid = -1;
devid = IOT_Linkkit_Open(IOTX_LINKKIT_DEV_TYPE_SLAVE, meta_info);
if (devid == FAIL_RETURN) {
EXAMPLE_TRACE("subdev open Failed\n");
return FAIL_RETURN;
}
EXAMPLE_TRACE("subdev open susseed, devid = %d\n", devid);
res = IOT_Linkkit_Connect(devid);
if (res == FAIL_RETURN) {
EXAMPLE_TRACE("subdev connect Failed\n");
return res;
}
EXAMPLE_TRACE("subdev connect success: devid = %d\n", devid);
res = IOT_Linkkit_Report(devid, ITM_MSG_LOGIN, NULL, 0);
if (res == FAIL_RETURN) {
EXAMPLE_TRACE("subdev login Failed\n");
return res;
}
EXAMPLE_TRACE("subdev login success: devid = %d\n", devid);
return res;
}
发布属性消息和更新设备属性的接口如下:
void user_post_property(void)
{
int res = 0;
user_example_ctx_t *user_example_ctx = user_example_get_ctx();
char *property_payload = "{\"Counter\":1}";
res = IOT_Linkkit_Report(user_example_ctx->master_devid, ITM_MSG_POST_PROPERTY,
(unsigned char *)property_payload, strlen(property_payload));
EXAMPLE_TRACE("Post Property Message ID: %d", res);
}
void user_deviceinfo_update(void)
{
int res = 0;
user_example_ctx_t *user_example_ctx = user_example_get_ctx();
char *device_info_update = "[{\"attrKey\":\"abc\",\"attrValue\":\"hello,world\"}]";
res = IOT_Linkkit_Report(user_example_ctx->master_devid, ITM_MSG_DEVICEINFO_UPDATE,
(unsigned char *)device_info_update, strlen(device_info_update));
EXAMPLE_TRACE("Device Info Update Message ID: %d", res);
}
使用结构体和函数指针解耦阿里云sdk和应用逻辑。 协调器应用程序需要调用关于云平台通信的接口如下:
void *userdata
:sdk的私有数据,包括三元组等mqtt参数
功能定义
网关功能可参考常用的zigbee网关来实现。
基本原理
zigee模块接收到的所有传感器的数据和id,通过串口传输给协调器mcu,mcu通过rx线程来读取生理参数,并且将数据和id通过消息队列传递给tx线程。
tx线程会持续从消息队列中读取生理参数,通过mqtt协议传输至阿里云平台
步骤
待办
init
connect
publish
三个接口