eternal-echo / zigbee-gateway-stm32

0 stars 0 forks source link

实现zigbee2mqtt网关的功能 #3

Open eternal-echo opened 1 year ago

eternal-echo commented 1 year ago

功能定义

网关功能可参考常用的zigbee网关来实现。

基本原理

zigee模块接收到的所有传感器的数据和id,通过串口传输给协调器mcu,mcu通过rx线程来读取生理参数,并且将数据和id通过消息队列传递给tx线程。
tx线程会持续从消息队列中读取生理参数,通过mqtt协议传输至阿里云平台

步骤

eternal-echo commented 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和应用逻辑。 协调器应用程序需要调用关于云平台通信的接口如下:

eternal-echo commented 1 year ago

资料

术语