更新时间:2024-06-25 05:48:24下载pdf
TuyaOS 框架根据设备当前连接通路的状态,自动选择合适的 DP 通道进行传输。
通道 | 通道描述 |
---|---|
LAN | App 和设备连接在同一台路由器上,三者组成一个局域网。 |
WAN(MQTT) | App 和设备均能够连接涂鸦 IoT 云,设备 MQTT 在线。 |
蓝牙 | App 的蓝牙与设备的蓝牙连接成功。 |
LAN > WAN(MQTT)> 蓝牙,App 会优先选择高优先级通道与设备交互。
目前,涂鸦提供两种方式设置 DP 通道的优先级。
调用 API 接口进行设置
框架提供设置通道优先级的接口进行配置。该接口设置是针对全部 DP,即一旦设置了,所有 DP 交互的通道优先级都按照设置的运行。
在涂鸦开发者平台上进行配置
可针对单个 DP 设置,即可只对部分的 DP 交互通道优先级有效,其他的 DP 通道优先级还是按照默认的优先级。
设备上报数据时,先判断哪几个通道是连接正常的,只会在 连接正常的通道 内进行上报。
蓝牙与 LAN 和 WAN 这两个通道相 互斥。
如果 LAN 和 WAN 通道都连着,设备在上报数据时两个通道都会上报。即 App 可能会收到 多个通道上报 的数据。
tuya_iot_com_api.h
smart_frame.h
使用默认通道优先级
通过接口设置通道优先级
由于每个双模模组上的资源不一样,并不会打开所有功能,您需要检查 tuya_iot_config.h
确认如下宏是否定义。
#define ENABLE_COMMUNICATE_PRIORITY 1
在 设备初始化 过程中注册设备功能回调函数前,调用设置通道优先级接口。之后 DP 的数据上报和下发就会按照您设置的优先级进行处理。
在涂鸦开发者平台上进行配置
您如果想要启用这个功能,请先前往 涂鸦开发者平台 创建产品,进入产品开发界面。在 功能定义 > 标准功能 > 编辑标准功能 > 特殊配置 处配置 DP 路由 选项。
如果您在 特殊配置 中找不到 DP 路由 的选项,是因为该产品方案并未绑定该功能。如果您有需求,联系您的涂鸦客户经理,或者 提交工单 申请绑定该能力。
DP 路由的选项说明:
路由类型 | 意义和使用场景 |
---|---|
不设置 | 该 DP 按照默认的上报通道优先级处理。 |
蓝牙优先 | 该 DP 优先从蓝牙通道上报,没有蓝牙连接的时候,也可以从其他通道上报。 |
强制蓝牙 | 该 DP 仅从蓝牙通道上报,没有蓝牙连接的时候不上报。 |
支持修改 DP 上报、下发通道的优先级。设置之后,通道优先级会针对所有的 DP 生效。通过接口可以修改默认的通道优先级,优先级不会保存,每次设备重新启动,都需要设置。
该接口需要在调用 设备初始化 设备功能回调函数接口前调用。
/**
* @brief Set the reporting channel for DP
*
* @param[in] chan: array of channel for DP report, refer to TY_DP_REPT_CHAN_TP_T
* @param[in] cnt: count of array member
* @param[in] only: report DP only on the first channel
*
* @note This API is used for setting the reporting channel for DP. This API should be called before or during device initialization.
*
* @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
*/
OPERATE_RET ty_set_dp_rept_chan(IN UINT8_T chan[], UINT8_T cnt, BOOL_T only);
设置通道优先级为:蓝牙 LE > LAN > WAN(MQTT)。
// Set the DP reporting channel priority as BLE > LAN > WAN(MQTT)
OPERATE_RET example_set_dp_report_chan(VOID)
{
OPERATE_RET rt = OPRT_OK;
UCHAR_T chan_para[] = {TY_DP_REPT_CHAN_BLE,TY_DP_REPT_CHAN_LAN,TY_DP_REPT_CHAN_MQTT};
TUYA_CALL_ERR_RETURN(ty_set_dp_rept_chan(chan_para, CNTSOF(chan_para), TRUE));
// Device init
//...
return rt;
}
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈