ESP32 Zigbee custom_cluster

unclezheng
Posts: 3
Joined: Fri Jan 09, 2026 7:13 am

ESP32 Zigbee custom_cluster

Postby unclezheng » Fri Jan 09, 2026 8:30 am

我想做一个简单的协调器向终端设备发送消息,通过创建custom_cluser然后绑定,直接发送消息。但目前的问题是一切看起来都是正常的,但是绑定表里面的内容是错误的,导致无法发送消息。
static void user_find_cb1(esp_zb_zdp_status_t zdo_status, uint16_t addr, uint8_t endpoint, void *user_ctx)
{
if (zdo_status == ESP_ZB_ZDP_STATUS_SUCCESS) {
ESP_LOGI(TAG, "Found device for cluster match");
ESP_LOGI(TAG, "Device short address: 0x%04x, endpoint: %d", addr, endpoint);
esp_zb_zdo_bind_req_param_t bind_req;
memset(&bind_req, 0, sizeof(bind_req));
esp_zb_get_long_address(bind_req.src_address);
esp_zb_ieee_addr_t dst_address;
esp_zb_ieee_address_by_short(addr, dst_address);
ESP_LOGI(TAG, "Device IEEE address: %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x",
dst_address[7], dst_address[6], dst_address[5], dst_address[4],
dst_address[3], dst_address[2], dst_address[1], dst_address[0]);
memcpy(bind_req.dst_address_u.addr_long, dst_address, sizeof(esp_zb_ieee_addr_t));
ESP_LOGI(TAG, "Bind Table Device IEEE address: %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x",
bind_req.dst_address_u.addr_long[7], bind_req.dst_address_u.addr_long[6], bind_req.dst_address_u.addr_long[5], bind_req.dst_address_u.addr_long[4],
bind_req.dst_address_u.addr_long[3], bind_req.dst_address_u.addr_long[2], bind_req.dst_address_u.addr_long[1], bind_req.dst_address_u.addr_long[0]);
bind_req.src_endp = CUSTOM_CLIENT_ENDPOINT;
bind_req.cluster_id = CUSTOM_CLUSTER_ID; //自定义集群ID
bind_req.dst_addr_mode = ESP_ZB_ZDO_BIND_DST_ADDR_MODE_64_BIT_EXTENDED;
//memcpy(bind_req.dst_address_u.addr_long, dst_ieee_addr, sizeof(esp_zb_ieee_addr_t));
bind_req.dst_endp = endpoint;
ESP_LOGI(TAG, "Custom device endpoint: %d", endpoint);
bind_req.req_dst_addr = esp_zb_get_short_address();
ESP_LOGI(TAG, "Try to bind custom cluster");
esp_zb_zdo_device_bind_req(&bind_req, bind_cb2, NULL);
}
}
这是绑定请求
I (5780) ESP_ZB_ON_OFF_SWITCH: Found device for cluster match
I (5780) ESP_ZB_ON_OFF_SWITCH: Device short address: 0xdb8a, endpoint: 3
I (5790) ESP_ZB_ON_OFF_SWITCH: Device IEEE address: 60:55:f9:ff:fe:f7:46:56
I (5800) ESP_ZB_ON_OFF_SWITCH: Bind Table Device IEEE address: 60:55:f9:ff:fe:f7:46:56
I (5800) ESP_ZB_ON_OFF_SWITCH: Custom device endpoint: 3
I (5810) ESP_ZB_ON_OFF_SWITCH: Try to bind custom cluster
信息都没有问题,但是在回调函数打印的绑定表就是错误的信息。
I (5820) ESP_ZB_ON_OFF_SWITCH: Bound custom cluster successfully! Requesting binding table...
I (5820) ESP_ZB_ON_OFF_SWITCH: Binding table info: total count in response: 3, total records in device: 10
I (5830) ESP_ZB_ON_OFF_SWITCH: Record [0]:
I (5840) ESP_ZB_ON_OFF_SWITCH: Source: Addr(58:8c:81:ff:fe:33:91:f0), Endp(1)
I (5840) ESP_ZB_ON_OFF_SWITCH: Cluster ID: 0x0006
I (5850) ESP_ZB_ON_OFF_SWITCH: Dest Mode: 0x03
I (5850) ESP_ZB_ON_OFF_SWITCH: Dest Addr: 60:55:f9:ff:fe:f7:46:56, Endp(10)
I (5860) ESP_ZB_ON_OFF_SWITCH: Record [1]:
I (5860) ESP_ZB_ON_OFF_SWITCH: Source: Addr(58:8c:81:ff:fe:33:91:f0), Endp(1)
I (5870) ESP_ZB_ON_OFF_SWITCH: Cluster ID: 0xff00
I (5870) ESP_ZB_ON_OFF_SWITCH: Dest Mode: 0x03
I (5880) ESP_ZB_ON_OFF_SWITCH: Dest Addr: 00:00:00:00:00:00:40:81, Endp(255)
I (5890) ESP_ZB_ON_OFF_SWITCH: Record [2]:
I (5890) ESP_ZB_ON_OFF_SWITCH: Source: Addr(58:8c:81:ff:fe:33:91:f0), Endp(1)
I (5900) ESP_ZB_ON_OFF_SWITCH: Cluster ID: 0xff00
I (5900) ESP_ZB_ON_OFF_SWITCH: Dest Mode: 0x01
I (5910) ESP_ZB_ON_OFF_SWITCH: Dest Group Addr: 0xffff
绑定表的第二条的目标地址和端点完全是错误的。不理解为什么会这样。
我是按照开关控制灯的绑定编写的,理论上都是协调器发送命令,但开关成功绑定了,我自定义的custom_cluster绑定表就是有问题

Who is online

Users browsing this forum: Applebot, Bytespider and 3 guests