2024-02-27 11:04 AM - edited 2024-02-27 11:07 AM
Hello,
When using device as temperature measurement server and device joins to the network where coordinator is also trust center, joining to the network works fine, but binding not. I wander, why device don't send Active Enpoint Response message when it gets the active endpoint request from the coordinator. There is no response function in zsdk but ZbZdoActiveEpReq is. I suppose, this is because the stack should send response automatically. I have understood that when using find and bind identifyQuery is different matter.
This belongs to my ealier post . Joining to the network works fine and device confirms key with success, but the problem seems to be binding now.
Specification says:
"The Active_EP_req command is generated from a local device wishing to acquire the list of endpoints on a remote device with simple descriptors
Upon receipt of this command, the recipient device shall process the command and generate an Active_EP_rsp command in response, according to the description in section"
Esko
2024-03-04 09:13 AM
Hello @eskomj ,
Could you please share the Trust center link key and the network key so I can decrypt exchanged messages on you capture ?
Kind regards,
Ouadi
2024-03-05 08:25 AM
Hello,
Here is the link key
// Using the ZigBeeAlliance09 5a:69:67:42:65:65:41:6c:6c:69:61:6e:63:65:30:39)
memcpy(config.security.distributedGlobalKey, sec_key_ha, ZB_SEC_KEYSIZE);
The network key is not set, because startUpControl is starttypeJoin and there is said in startup.h:
// Only applicable if startupControl is ZbStartTypePreconfigured.
If I try with OnOff server it handels the active endpoint request and the simple descriptor requests and logs after joining:
[M4 APPLICATION] ZbStartup Callback (status = 0x00)
[M4 APPLICATION] Startup done !
[M0] [00000017.918][PLATFORM] ZbApsBindTick : ZDO IEEE ADDR request (0x0000) to verify address map for binding entry (0x9035eafffef257cc)
[M0] [00000018.131][PLATFORM] ZbApsBindTick : ZDO IEEE ADDR request (0x0000) to verify address map for binding entry (0x9035eafffef257cc)
2024-03-07 03:08 AM
Hi @eskomj,
The preconfigured global key is used to encrypt the network key generated by the trust center and sent over a key-transport to all joined devices. this network key is needed to decrypt packets on Wireshark capture.
You can retrieve the used network key via the API : ZbNwkGetActiveKey()
In the other side, I tried using ZbZdoActiveEpReq sent from a Zigbee_TempMeas_Server_Coord to a Zigbee_TempMeas_Client_Router and the response is generated and received on the coordinator side successfully according to the spec.
BR,
Ouadi
2024-03-07 10:37 PM - edited 2024-03-07 11:10 PM
Hello,
I got this key:
[M4 APPLICATION] Network key 2002ff8a
with code:
bool tulos = ZbNwkGetActiveKey(zigbee_app_info.zb, zigbee_app_info.secMaterial);
if (tulos) APP_DBG("Network key %x", zigbee_app_info.secMaterial->key);
May be the reason for the problem is that TempMeasServer is type 2 Server which is reporting one. How can I see from the Nedis sensor's Wireshark capture does it work as client? I suppose, OnOff server responds, because it is Type 1 server.
2024-03-08 05:46 AM
Hi,
The Network key size is 128-bits, please find below the implementation of ZbNwkGetActiveKey to retrive the right network key :
struct ZbNwkSecMaterialT *active_key = NULL;
static char strBuf[64];
active_key->keyType = ZB_SEC_KEYTYPE_STANDARD_NWK;
ZbNwkGetActiveKey(zigbee_app_info.zb, active_key);
for(int i=0; i<ZB_SEC_KEYSIZE;i++){
snprintf(&strBuf[i * 2], 3, "%02X", active_key->key[i]);
}
APP_DBG(" Network Key: %s", strBuf);
What do you mean by type 2 server and type 1 server ? could you try to test by connecting only TempMeas device ?
Waiting for your network key to analyze further the Wireshark capture.
Regards,
Ouadi
2024-03-08 09:26 AM
Hello,
With your code, I'll get this:
[M4 APPLICATION] Network Key: 0320416A0008698A0008778A00087D8A
I mean by types what is said in the Zigbee cluster library specification:
"Type 1 Cluster: A type 1 cluster’s primary function is to initiate transactions from the client to the server.
Type 2 Cluster: A type 2 cluster’s primary function is to initiate transactions from the server to the client."
2024-03-11 03:19 AM
Hello,
The cluster id which is included in the Active endpoint request is 0x0005, which is scenes cluster. In order to reply there should be the scenes cluster?
Esko
2024-03-11 08:51 AM
Hi,
ZDO commands have their own clusters ID and are not associated to ZCL clusters ID , as for example Active Endpoints Request => Cluster ID : 0x0005 and Match Descriptor Request => Cluster ID : 0x0006
If we compare Zigbee_TempMeas vs Zigbee_OnOff wireshark captures, I noticed that the basic attributes are not set with the same configuration, I think that the issue could be caused by the capabilities of your device which are not set correctly as the gateway expects.
Is your device RFD or FFD ?
Also I noticed in file "stm32wb_Zigbee_onoff_server_coord_2.pcapng" that the device does not respond to active end point request, however the join seems to work after that.
Regards,
Ouadi