更新时间:2023-09-06 10:19:56下载pdf
本文介绍如何使用 TuyaOS 网关开发框架支持 Matter 协议的网关产品。
本小节介绍使用 TuyaOS 网关开发框架如何开启 Matter 功能,通过搭配涂鸦 ZS3L 模组,实现 Matter 网关能力。完成开发后,可以接入 Thread 子设备,以及桥接 Zigbee 子设备到 Matter 网络中。
0
即可。接入 Thread 子设备,以及桥接 Zigbee 子设备到 Matter 网络,您需要编写 DP 引擎文件,上传到 涂鸦 IoT 开发平台 即可。有关 DP 引擎文件编写方法以及上传流程,请参考 Matter 网关开发包。
开启 Matter 功能主要涉及两个接口:
初始化以及启动接口的参数都是相同的 JSON 数据,区别在于配置信息不同。
typedef struct {
BOOL_T isinit;
CHAR_T *matterDacCrt;
UINT_T matterDacCrtLen;
CHAR_T *matterPaiCrt;
UINT_T matterPaiCrtLen;
CHAR_T *matterResource;
UINT_T matterResourceLen;
CHAR_T *matterPrivateKey;
UINT_T matterPrivateKeyLen;
CHAR_T *matterPubKey;
UINT_T matterPubKeyLen;
} MATTER_MANUFACTYORY_DATA_T;
typedef MATTER_MANUFACTYORY_DATA_T* (*MATTER_MANUFACTORY_DATA_GET_CB)(VOID);
实现读出保存在网关设备非易失性存储区的 Matter 产测数据,保存在结构体 MATTER_MANUFACTYORY_DATA_T
中,供 SDK 使用。当前为了方便体验,直接提供回调函数方式。
配置说明
JSON 数据字段说明如下:
字段 | 描述 |
---|---|
thread |
|
使用示例
int main(int argc, char **argv)
{
...
/* init tuya service */
ty_cJSON *js_tuya_cfg = ty_cJSON_GetObjectItem(cfg, "tuya");
if (js_tuya_cfg != NULL) {
// built-in Zigbee service
ty_cJSON *js_zb_cfg = ty_cJSON_GetObjectItem(js_tuya_cfg, "zigbee");
if (js_zb_cfg != NULL) {
tuya_zigbee_svc_init(js_zb_cfg);
}
// built-in mattter service
ty_cJSON *js_matter_cfg = ty_cJSON_GetObjectItem(js_tuya_cfg, "matter");
if (js_matter_cfg != NULL) {
matter_svc_init(js_matter_cfg);
}
}
...
// start tuya service
if (js_tuya_cfg != NULL) {
ty_cJSON *js_matter_cfg = ty_cJSON_GetObjectItem(js_tuya_cfg, "matter");
if (js_matter_cfg != NULL) {
matter_manufactory_data_set(user_prod_test_matter_get);
matter_svc_start(js_matter_cfg);
}
}
...
return 0;
}
user_prod_test_matter_get
函数为产测代码中获取 Matter 相关产测时配置的证书信息。
当网关解绑时,需要调用此函数,SDK 内部会删除绑定数据。
/**
* @brief: the unbind of matter gateway. when reset type is GW_REMOTE_UNACTIVE or GW_LOCAL_UNACTIVE.
*
* @param[in] VOID:
* @return OPRT_OK on success. Others on error
*/
OPERATE_RET matter_unactive(VOID);
当网关重置时,调用此函数,清除保存在设备上的数据。
/**
* @brief: clear data when resetting. when reset type is GW_RESET_DATA_FACTORY
*
* @param[in] VOID: .
* @return OPRT_OK on success. Others on error
*/
OPERATE_RET matter_clear_data(VOID);
当网关重置时,调用此函数,SDK 执行 Matter 恢复出厂设置流程。
/**
* @brief: the reset of Matter gateway. When reset type is GW_REMOTE_RESET_FACTORY or GW_LOCAL_RESET_FACTORY
*
* @param[in] VOID:
* @return OPRT_OK on success. Others on error
*/
OPERATE_RET matter_factory_reset(VOID);
STATIC VOID __gw_reset_cb(GW_RESET_TYPE_E type)
{
PR_DEBUG("gw reset callback, type: %d", type);
if ((GW_REMOTE_RESET_FACTORY == type) || (GW_LOCAL_RESET_FACTORY == type)) {
matter_factory_reset();
}
else if ((GW_REMOTE_UNACTIVE == type) || (GW_LOCAL_UNACTIVE == type)){
matter_unactive();
}
else if(GW_RESET_DATA_FACTORY == type) {
matter_clear_data();
}
else{
PR_DEBUG("NOT SUPPORTED, type: %d", type);
}
if (type != GW_RESET_DATA_FACTORY) {
sleep(3);
/* restart GW */
system("/tmp/tuya/tuya_start.sh /tmp/tuya &");
}
}
int main(int argc, char **argv)
{
(VOID_T) argc;
(VOID_T) argv;
OPERATE_RET rt = OPRT_OK;
TY_GW_INFRA_CBS_S gw_cbs = {
.gw_reset_cb = __gw_reset_cb,
.gw_reboot_cb = __gw_reboot_cb,
.gw_active_stat_cb = __gw_active_cb,
.gw_upgrade_cb = __gw_upgrade_cb,
};
TUYA_CALL_ERR_RETURN(user_svc_init((VOID *)&gw_cbs));
...
while (1) {
tal_system_sleep(10*1000);
}
return 0;
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈