Skip to content

网关子设备快速连接 IOT 平台示例

场景描述

网关的能力是转换不同设备间的通讯协议,可以让不具有联网能力的子设备通过网关连接上平台。如果我们想要达到该目的,首先需连接网关到平台,再连接子设备至网关,由此实现子设备连接到平台。本章节指导用户通过 QuecOpen 接入方案使得子设备通过网关连接上开发者中心。

涉及指令

函数说明
Qth_subDevSetEventCb()设置子设备回调函数
Qth_subDevConn()发起子设备连接
Qth_subDevDisconn()断开子设备连接
Qth_subDevDeauth()注销子设备
Qth_subDevSendTsl()子设备发送物模型数据
Qth_subDevSendTrans()子设备发送透传数据
Qth_subDevLocReport()子设备发送定位数据
Qth_subOtaUpdateVer()子设备上报版本号
Qth_subOtaReq()子设备发起OTA请求

提示:详情请参考网关子设备 API接口概览

操作步骤

一、登录开发者中心

登录开发者中心,未注册可单击立即注册完成注册。

二、创建产品

1、创建网关产品

创建网关产品与创建蜂窝产品类似,在设备类型选项选择 网关设备 与相匹配的选项即可。

img

2、创建网关子设备产品

img

  • 设备类型:单品设备指的是可以直接接入网络;网关设备是可帮助子设备连接平台的设备;网关子设备是依赖网关连接上网络的设备。
  • 限制网关产品
    • 不启用:表示子设备可通过任意网关设备连接开发者中心。
    • 启用:表示子设备仅能通过指定的网关设备连接开发者中心。
  • 接入网关方式:平台对网关设备授权。
    • 仅代理上网:移动端用户需绑定子设备后方拥有控制权限,适用于把网关当成上网与数据转发通道。
      • 允许动态切换网关:表示子设备通过网关连接到开发者中心后,还允许切换到其它网关连接开发者中心。
      • 不允许动态切换网关:表示子设备通过网关连接到开发者中心后,无法切换到其它网关连接开发者中心。
    • 产品整合:移动端用户绑定网关即拥有子设备控制权限,适用于子设备整合到网关设备。

三、网关设备配置

1、初始化

开发前您还需要完成工程的QuecOpen方案的初始化,需要在使用联网服务前调用。初始化指的是在模组上电后,完成模组基本的配置,达到可以配网连接平台。

c
/* 初始化QuecThing SDK */
oprt_ret ret = OPRT_OK;

ret = Qth_devInit();
if (OPRT_OK != ret)
{
    Quos_logPrintf(APPS_OPEN, LL_ERR, "sdk init error:%d", ret);
    return;
}

2、网关事件回调函数注册

事件回调处理接口简单的说就是为事件源(组件)添加一个监听任务,当网关设备触发了某件事件时,交给监听器去处理,开发者只需要在事件回调函数内相应事件下作具体处理即可。

c
/* 注册QuecThing事件回调函数 */
Qth_eventCb_t event_cb = {0};
Qth_otaEventCb_t otaCb = {0};
otaCb.planCb = otaPlanCb;
otaCb.downloadCb = otaDownloadCb;
otaCb.resultCb = otaResultCb;
otaCb.sotaInfoCb = sotaInfoCb;
otaCb.sotaFileCb = sotaFileCb;
event_cb.devEventCb = devEventCb;
event_cb.ttlvRecvCb = ttlvRecvCb;
event_cb.ttlvReqCb = ttlvReqCb;
event_cb.transRecvCb = transRecvCb;
event_cb.otaEventCb = otaCb;
Qth_configSetEventCb(event_cb);

3、配置产品信息(初次连接需配置)

QuecThing SDK 提供读写设备信息的接口及参考实现,可根据具体的实际的项目需求进行适配。网关设备发送引导认证操作时,开发者中心对其携带的ProductKey、ProductSecret进行认证,若认证通过则建立连接并下发该设备接入所需信息。

c
/* 配置产品信息*/
Qth_configSetProductInfo(DEMO_PK, DEMO_PS);

4、连接开发者中心

模组启动连接开发者中心,在开发者中心和设备间建立安全,稳定的通信并实现设备管理,监测,控制等操作。

c
/* 启动平台连接 */
Qth_devStart();

提示:网关成功连接开发者中心后,开始转发子设备消息到开发者中心,在此之前所有收到子设备发往开发者中心消息皆丢弃,不做保存。

四、子设备操作步骤

网关的能力是转换不同设备间的通讯协议,可以让不具有联网能力的子设备通过网关连接上平台。如果我们想要达到该目的,需要将子设备添加到网关下,建立子设备与网关的联系。

1、子设备事件回调注册

事件回调处理接口简单的说就是为事件源(组件)添加一个监听任务,当子设备触发了某件事件时,交给监听器去处理,开发者只需要在事件回调函数内相应事件下作具体处理即可。

c
/* 注册事件回调函数 */
Qth_subEventCb_t subEventCb = {0};
Qth_subOtaCb_t subOtaCb = {0};
subOtaCb.planCb = subOtaPlanCb;
subOtaCb.downloadCb = subOtaDownloadCb;
subOtaCb.resultCb = subOtaResultCb;
subOtaCb.infoCb = subOtaInfoCb;
subOtaCb.fileCb = subOtaFileCb;
subEventCb.devEventCb = subDevEventCb;
subEventCb.ttlvRecvCb = subTtlvRecvCb;
subEventCb.ttlvReqCb = subTtlvReqCb;
subEventCb.transRecvCb = subTransRecvCb;
subEventCb.otaEventCb = subOtaCb;
Qth_subDevSetEventCb(subEventCb);

2、子设备认证

首次连接平台时,须进行子设备认证。可通过 Qth_subDevConn()进行设备认证。MCU 接收到认证成功事件上报后,子设备将自动连接到平台。已通过认证的子设备,在未连接至平台时,仍可通过 Qth_subDevDeauth() 注销子设备。

c
/* 子设备注册 */
Qth_subDevConn("pxxxxm", VnhyxxxxxxxxSTFh, "123xxxx89", NULL);

提示:该函数用于连接子设备至网关或认证子设备。连接/认证结果通过子设备与网关设备的交互事件进行通知。设置 subDs为 NULL 时,表示认证子设备;指定 subDs 时,表示连接子设备至网关。

五、子设备物模型数据交互

需要实现一个智能设备的远程控制,最基本的能力就是设备的状态上报以及接收来自平台的命令并执行。因此数据传输部分是网关的核心能力。以下将以智能三色灯子设备作为物模型交互示例。

物模型数据上行

子设备可根据业务场景需求,对数据属性采取一定的策略进行检测处理,例如子设备可通过串口读取智能三色灯传感器开关等数据后,子设备则将读取到的数据通过网关上传到开发者中心。

发送物模型数据如下表所示。

ID类型
1Booltrue
2Int30

示例代码如下所示。

c
void *ttlvHead = NULL;
Quos_ttlvAddIdBool(&ttlvHead, 1, TRUE);
Quos_ttlvAddIdInt(&ttlvHead, 2, 30);
Qth_subDevSendTsl("pxxxxm","123xxxx89",QTH_SEND_AT_LEAST_ONCE,ttlvHead,NULL,NULL);
Quos_ttlvFree(&ttlvHead);

注意:在添加物模型节点且调用完后,开发者请调用 Quos_ttlvFree() 函数,该函数会释放指针指向的一个内存块,从而避免内存泄漏等问题。

物模型数据下行

1、开发者中心下发物模型服务

在开发者中心 设备调试 页面,第一步点击 属性调试,第二步选择要下发的物模型属性,第三步点击左下角的 发送指令 即可下发物模型属性到子设备。

img

2、子设备收到查询指令解析处理

当模组接收到物模型请求数据后,则会自动进入 Qth_subDevSetEventCb 子设备事件处理回调函数,您可根据相对应的事件进行数据响应处理。

  • 事件回调处理示例代码如下所示:

    c
    void subTtlvRecvCb(const char *subPk, const char *subDk, void *ttlvHead)
    {
        Quos_logPrintf(APPS_OPEN, LL_DBG, "subPk:%s,subDk:%s", subPk, subDk);
        Quos_ttlvHeadPrintf(ttlvHead);
    }