Showing results for 
Search instead for 
Did you mean: 

STM32WB RSSI reporting


Dear ST experts,
I am developing a Zigbee wireless solution where I have a coordinator and several Zigbee routers and end devices from different manufacturers. My coordinator is a HMI, and one of its capabilities is to display the connection quality of the Zigbee devices on its UI. This connection quality value is based on RSSI, and all devices in my network are configured to report their RSSI once per specified amount of time.
One of the types of my Zigbee devices is the Zigbee router developed by our company based on STM32WB55 and my problem is that these routers are not able to report RSSI value because this attribute is not reportable in STM32WB55. I know that according to the Zigbee cluster library specification, the LastMessageRSSI attribute of the diagnostic cluster is read-only but AN5498 section 3.2.1 says that the user can override the built-in definitions of the mandatory attributes. However, it seems impossible to override the LastMessageRSSI attribute because the diagnostic cluster is on CPU2 and therefore I cannot get its instance to use it with ZbZclAttrAppendList to override the attribute. Is there any way to override LastMessageRSSI attribute of diagnostic cluster in STM32WB55?
Thanks in advance for your help!




ST Employee

Hi @d-serj,

The ZCL Diagnostics cluster is accessible from the ZCL library by including the file "zcl.diagnostics.h" to your application. 

You can then configure the attribute  ZCL_DIAG_SVR_ATTR_LAST_MSG_RSSI = 0x011d Optional by default to be reportable.

Kind regards,



Hi @Ouadi ,
Thank you for your response.

ZCL_DIAG_SVR_ATTR_LAST_MSG_RSSI is read-only and cannot be changed. This is because the Diagnostic cluster is allocated on the CPU2. For example here is the signature of the Temperature cluster (Server) which is allocated on the user side:

struct ZbZclClusterT * ZbZclTempMeasServerAlloc(struct ZigBeeT *zb,
  uint8_t endpoint, int16_t min, int16_t max, uint16_t tolerance);

and here is the signature of Diagnostic cluster (Server) which is allocated on CPU2:

bool ZbZclDiagServerAlloc(struct ZigBeeT *zb, uint8_t endpoint,
  uint16_t profileId, enum ZbStatusCodeT minSecurity);

For the temperature cluster, I can change the default attributes or add new attributes using the ZbZclAttrAppendList function (as mentioned in AN5498 section 3.2.1), but I cannot do this for the Diagnostic cluster. I am wondering if there might be a way to communicate with CPU2 to change the Diagnostic cluster.


Hi @d-serj ,

You are right, the stack does not allow to configure Diagnostics Cluster attributes to be reportable, however you can use ZCL RSSI Location Cluster more suitable for this purpose file => "zcl.rssi_loc.h"

A reporting can be possible using the command ZbZclRssiLocServerReportRssi from the server side.

Best regards,