cancel
Showing results for 
Search instead for 
Did you mean: 

Active Endpoint Response missing

eskomj
Associate III

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

 

 

8 REPLIES 8
Ouadi
ST Employee

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

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)

 

 

 

 

 

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

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.

 

Ouadi
ST Employee

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

 

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."

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

Ouadi
ST Employee

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