Last Updated on : 2025-07-15 01:46:40download
Zigbee local management provides the capability to directly manage and control Zigbee sub-devices within the local network, eliminating complete reliance on cloud interactions. This feature is primarily implemented in smart home gateway devices and enables the following functionalities:
This localized management mechanism enhances real-time device control responsiveness while reducing cloud dependency, ensuring core device control remains functional even during network instability.
/**
* @brief setup permit joining
*
* @param[in] tp protocol type, 0xFF means ignore the type
* @param[in] permit TRUE: enable joining, FALSE: disable joining
* @param[in] timeout timeout of permit joining (sec)
*
* @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
*/
OPERATE_RET tuya_iot_dev_join_permit(GW_PERMIT_DEV_TP_T tp, BOOL_T permit, UINT_T timeout);
0, the system default value is used (usually 180 seconds)./**
* @brief execute obj DP command
*
* @param[in] cmd obj DP data, see TY_RECV_OBJ_DP_S
* @param[in] retrans TRUE: retransmit, FALSE: not retransmit
*
* @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
*/
OPERATE_RET tuya_iot_dev_obj_cmd_send(CONST TY_RECV_OBJ_DP_S *cmd, BOOL_T retrans);
cmd: A pointer to the TY_RECV_OBJ_DP_S struct. The struct encapsulates all necessary command details, including the command type, transmission type, target device CID, multicast ID, DP count, and DP array.retrans: A boolean value indicating whether retransmission is required. When this parameter is set to TRUE, the system will attempt retransmission if command delivery fails. When it is set to FALSE, no retransmission will occur.OPERATE_RET type value. OPRT_OK indicates successful command transmission, while any failure returns an error code. Refer to tuya_error_code.h for specific error code definitions.typedef struct {
/** see DP_CMD_TYPE_E */
DP_CMD_TYPE_E cmd_tp;
/** see DP_TRANS_TYPE_T */
DP_TRANS_TYPE_T dtt_tp;
/** if(NULL == cid) then then the cid represents gwid */
CHAR_T *cid;
/** mb id */
CHAR_T *mb_id;
/** count of dp */
UINT_T dps_cnt;
/** the dp data */
TY_OBJ_DP_S dps[0];
} TY_RECV_OBJ_DP_S;
tuya_iot_dev_obj_cmd_send function.cmd_tp: The command type. For its value range, see DP_CMD_TYPE_E.dtt_tp: The transmission type. For its value range, see DP_TRANS_TYPE_T.cid: The CID of the target device, which is the unique identifier of the device. If the value is NULL, commands are sent to the gateway itself.mb_id: The multicast ID for group control.dps_cnt: The number of data points (DPs) in the command.dps: The flexible array storing DP data, with size determined by dps_cnt. Each DP’s structure follows TY_OBJ_DP_S definition.typedef struct {
/** dp id */
BYTE_T dpid;
/** dp type, see DP_PROP_TP_E */
DP_PROP_TP_E type;
/** dp value, see TY_OBJ_DP_VALUE_U */
TY_OBJ_DP_VALUE_U value;
/** dp happen time. if 0, mean now */
UINT_T time_stamp;
} TY_OBJ_DP_S;
dpid: The ID of a DP.type: The type of a DP. See the DP_PROP_TP_E enumeration.value: The value of a DP. See the TY_OBJ_DP_VALUE_U union.time_stamp: The time when a DP occurs. 0 represents the current time.Local management callbacks
/**
* @brief register local management callback.
*
* @param[in] cbs callback function.
*
* @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
*/
OPERATE_RET tuya_zigbee_reg_lc_mgr(CONST TY_Z3_DEV_LC_MGR_S *cbs);
cbs: A pointer to the TY_Z3_DEV_LC_MGR_S struct (referenced above). This struct contains pointers to local management callbacks, covering device join/leave/offline events, heartbeat queries, update status/progress, DP reporting, and raw data reporting. You must provide callback implementations in the struct based on actual requirements.OPERATE_RET type value. OPRT_OK indicates successful registration, while any failure returns an error code. Refer to tuya_error_code.h for specific error code definitions.typedef struct {
TY_Z3_DEV_JOIN_CB dev_join_cb;
TY_Z3_DEV_LEAVE_CB dev_leave_cb;
TY_Z3_DEV_OFFLINE_CB dev_offline_cb;
TY_Z3_DEV_HEARTBEAT_QUERY_CB dev_heartbeat_query_cb;
TY_Z3_DEV_UPGRADE_STATUS_CB dev_upgrade_status_cb;
TY_Z3_DEV_UPGRADE_PROGRESS_CB dev_upgrade_progress_cb;
TY_Z3_DEV_OBJ_DP_REPT_CB dev_obj_dp_rept_cb;
TY_Z3_DEV_RAW_DP_REPT_CB dev_raw_dp_rept_cb;
} TY_Z3_DEV_LC_MGR_S;
Feature: This struct encapsulates local management callbacks for Zigbee devices. This struct provides a mechanism that enables you to associate custom functions with various Zigbee device events, thereby achieving flexible control and management of device behaviors.
Member variables:
dev_join_cb: A pointer to the device joining callback function. The system invokes this function when a new device joins the Zigbee network, allowing you to implement custom join-handling logic.
dev_leave_cb: A pointer to the device leaving callback function. The system invokes this function when a device leaves the Zigbee network, allowing you to implement custom leave-handling logic.
dev_offline_cb: A pointer to the device offline callback function. The system invokes this function when a device goes offline, allowing you to implement custom offline-handling logic.
dev_heartbeat_query_cb: A pointer to the heartbeat query callback function. The system invokes this function to check a device’s liveliness status, allowing you to implement custom heartbeat query logic.
dev_upgrade_status_cb: A pointer to the update state callback function. The system invokes this function when a device’s update state changes, allowing you to implement custom management logic for update states.
dev_upgrade_progress_cb: A pointer to the update progress callback function. The system invokes this function when a device’s update progress changes, allowing you to implement custom management logic for update progress.
dev_obj_dp_rept_cb: A pointer to the DP reporting callback function. The system invokes this function when a device reports DP updates, allowing you to implement custom processing logic for DP reporting.
dev_raw_dp_rept_cb: A pointer to the raw data reporting callback function. The system invokes this function when a device reports raw data, allowing you to implement custom processing logic for raw data reporting.
// Initialize Zigbee local management
OPERATE_RET user_zigbee_local_init(VOID)
{
TY_Z3_DEV_LC_MGR_S __z3_dev_lc_mgr = {
.dev_join_cb = __z3_lc_dev_join_cb,
.dev_leave_cb = __z3_lc_dev_leave_cb,
.dev_offline_cb = __z3_lc_dev_offline_cb,
.dev_heartbeat_query_cb = __z3_lc_dev_hb_query_cb,
.dev_upgrade_status_cb = __z3_lc_dev_upgrade_status_cb,
.dev_upgrade_progress_cb = __z3_lc_dev_upgrade_progress_cb,
.dev_obj_dp_rept_cb = __z3_lc_dev_obj_dp_report_cb,
.dev_raw_dp_rept_cb = __z3_lc_dev_raw_dp_report_cb,
};
return tuya_zigbee_reg_lc_mgr(&__z3_dev_lc_mgr);
}
VOID test_subdev_list(VOID)
{
DEV_DESC_IF_S *dev_if = NULL;
VOID *iterator = NULL;
do {
dev_if = tuya_iot_dev_traversal(&iterator);
if (dev_if) {
PR_DEBUG("id: %s, type: %d", dev_if->id, dev_if->tp);
}
} while(dev_if);
}
/*Sub-device pairing*/
OPERATE_RET user_zigbee_permit_join(IN BOOL_T enable, IN UINT_T timeout)
{
OPERATE_RET ret = OPRT_OK;
if (enable) {
// Enable Permit Join mode
PR_DEBUG("Enable Zigbee permit join for %d seconds", timeout);
ret = tuya_iot_dev_join_permit(timeout);
if (ret != OPRT_OK) {
PR_ERR("Enable permit join failed, ret=%d", ret);
return ret;
}
} else {
// Disable Permit Join mode
PR_DEBUG("Disable Zigbee permit join");
ret = tuya_iot_dev_join_permit(0);
if (ret != OPRT_OK) {
PR_ERR("Disable permit join failed, ret=%d", ret);
return ret;
}
}
return ret;
}
VOID test_subdev_cmd(VOID)
{
UINT_T dp_cnt = 3;
TY_RECV_OBJ_DP_S *obj_cmd = NULL;
obj_cmd = Malloc(SIZEOF(TY_RECV_OBJ_DP_S) + dp_cnt * SIZEOF(TY_OBJ_DP_S));
if (obj_cmd == NULL) {
PR_ERR("Malloc error");
return;
}
obj_cmd->cid = "112233aabbcc";
obj_cmd->cmd_tp = DP_CMD_LAN;
obj_cmd->dtt_tp = DTT_SCT_UNC;
obj_cmd->dps_cnt = dp_cnt;
for (INT_T i = 0; i < dp_cnt; i++) {
obj_cmd->dps[i].dpid = (i + 1);
obj_cmd->dps[i].type = PROP_BOOL;
obj_cmd->dps[i].value.dp_bool = TRUE;
}
tuya_iot_dev_obj_cmd_send(obj_cmd);
Free(obj_cmd);
}
Is this page helpful?
YesFeedbackIs this page helpful?
YesFeedback