Issue Reporting Tamper Detection via ActiveHardwareFaults (0x0005) – General Diagnostics Cluster (0x0033)

Hi Nordic Team,

I am using NCS v3.0.0 and working on a Matter-based application.

I have enabled the ActiveHardwareFaults attribute (0x0005) in the General Diagnostics cluster (0x0033) using ZAP GUI, and now I am implementing tamper detection functionality (enum value 10: TamperDetected).

  • I have written custom logic to detect tamper events and update the ActiveHardwareFaults attribute accordingly.

  • However, on the chip-tool side, the attribute still shows 0 entries — it does not reflect the tamper fault value.

1. My code logic for how I’m updating the ActiveHardwareFaults attribute.

// Work handler function: runs in thread context
static void tamper_work_handler(struct k_work *work)
{
    GeneralFaults<kMaxHardwareFaults> hwFaultsPrevious;
    GeneralFaults<kMaxHardwareFaults> hwFaultsCurrent;
    using app::Clusters::GeneralDiagnostics::HardwareFaultEnum;

    ReturnOnFailure(hwFaultsCurrent.add(to_underlying(HardwareFaultEnum::kTamperDetected)));
    ReturnOnFailure(hwFaultsPrevious.add(to_underlying(HardwareFaultEnum::kTamperDetected)));
    LOG_ERR("Before OnHardwareFaultsDetect");
    app::Clusters::GeneralDiagnosticsServer::Instance().OnHardwareFaultsDetect(hwFaultsPrevious, hwFaultsCurrent);
    LOG_ERR("After OnHardwareFaultsDetect");
}

// GPIO button interrupt callback
static void button_pressed(const struct device *dev, struct gpio_callback *cb, uint32_t pins)
{
    gpio_pin_toggle_dt(&led);

    tamperDetected = !tamperDetected;

    LOG_INF("TamperDetected set to: %s", tamperDetected ? "true" : "false");

    k_work_submit(&tamper_work); // Defer heavy processing
}

2.A screenshot of chip-tool output showing no tamper entry.

[1745906495.161] [26069:26186] [EM] >>> [E:30943r S:33378 M:217564310] (S) Msg RX from 1:0000000000002231 [DD9E] to 000000000001B669 --- Type 0001:05 (IM:ReportData) (B:70)
[1745906495.161] [26069:26186] [EM] Handling via exchange: 30943r, Delegate: 0x6013e6a79348
[1745906495.161] [26069:26186] [DMG] ReportDataMessage =
[1745906495.161] [26069:26186] [DMG] {
[1745906495.161] [26069:26186] [DMG] 	SubscriptionId = 0xb5a61ce8,
[1745906495.161] [26069:26186] [DMG] 	AttributeReportIBs =
[1745906495.161] [26069:26186] [DMG] 	[
[1745906495.161] [26069:26186] [DMG] 		AttributeReportIB =
[1745906495.161] [26069:26186] [DMG] 		{
[1745906495.161] [26069:26186] [DMG] 			AttributeDataIB =
[1745906495.161] [26069:26186] [DMG] 			{
[1745906495.161] [26069:26186] [DMG] 				DataVersion = 0x25eb9646,
[1745906495.161] [26069:26186] [DMG] 				AttributePathIB =
[1745906495.161] [26069:26186] [DMG] 				{
[1745906495.161] [26069:26186] [DMG] 					Endpoint = 0x0,
[1745906495.161] [26069:26186] [DMG] 					Cluster = 0x33,
[1745906495.161] [26069:26186] [DMG] 					Attribute = 0x0000_0005,
[1745906495.161] [26069:26186] [DMG] 				}
[1745906495.161] [26069:26186] [DMG] 					
[1745906495.161] [26069:26186] [DMG] 				Data = [
[1745906495.161] [26069:26186] [DMG] 						
[1745906495.161] [26069:26186] [DMG] 				],
[1745906495.161] [26069:26186] [DMG] 			},
[1745906495.161] [26069:26186] [DMG] 			
[1745906495.161] [26069:26186] [DMG] 		},
[1745906495.161] [26069:26186] [DMG] 		
[1745906495.161] [26069:26186] [DMG] 	],
[1745906495.161] [26069:26186] [DMG] 	
[1745906495.161] [26069:26186] [DMG] 	InteractionModelRevision = 12
[1745906495.161] [26069:26186] [DMG] }
[1745906495.161] [26069:26186] [TOO] Endpoint: 0 Cluster: 0x0000_0033 Attribute 0x0000_0005 DataVersion: 636196422
[1745906495.161] [26069:26186] [TOO]   ActiveHardwareFaults: 0 entries

Could you please guide me on how to correctly update and report the ActiveHardwareFaults attribute so that the chip-tool reflects the tamper fault?

Thanks & Regards,
Rahul Chauhan

  • Hi Rahul,

    I asked the developers for an update. Unfortunately, I do not have anything to share. I cannot comment on the schedule for when this will get done since this needs to be prioritized against other tasks. Please get in touch with RSM if this is critical.

    Best regards,
    Marte

  • Hi Rahul,

    The developers provided an explanation of the issue.

    The main problem is that the code only triggers reporting the hardware fault, but not the hardware fault itself. Therefore, the general diagnostics server code cannot obtain the list of active hardware faults because it is not implemented.

    Reading the ActiveHardwareFaults attribute triggers this:

    case ActiveHardwareFaults::Id: {
        return ReadListIfSupported(&DiagnosticDataProvider::GetActiveHardwareFaults, aEncoder);
    }

    This means that Matter will attempt to read the active hardware faults list, but it relies entirely on DiagnosticDataProvider::GetActiveHardwareFaults being implemented (due to ReadListIfSupported). This means that if DiagnosticDataProvider::GetActiveHardwareFaults is not implemented, the list is empty.

    So, what you need to do is implement your own DiagnosticDataProvider where you implement your own logic for catching the hardware fault and storing it in the list. You can use Zephyr's implementation as a base and inherit functions from there.
    There is an nrfconnect implementation as well, but the only nrfconnect-specific additions are Wi-Fi related, so unless you are using Wi-Fi, there is no reason to use the nrfconnect implementation. As a note, inheriting from the nrfconnect platform is currently blocked because the constructor is private. However, this issue will be addressed by the following PR: https://github.com/nrfconnect/sdk-connectedhomeip/pull/670.

    The developers have also provided an example implementation and provided it as a diff.

    This is for nRF Connect SDK v3.0.0, so make sure that you are on that version.

    Download the diff file and apply it:

    git apply diagnostic_data_provider_temper_example.diff

    This will add two new files to the Template sample diagnostic_data_provider.cpp/.h, which implements the new diagnostic data provider that inherits the Zephyr Diagnostic provider. The cpp file is added to CMakeLists.txt, and the new diagnostic data provider is registered in the Matter server (in app_task.cpp/.h).

    After adding this, reading the attribute will result in seeing 1 active hardware fault:

    [1763651063.542] [351701:351703] [TOO] Endpoint: 0 Cluster: 0x0000_0033 Attribute 0x0000_0005 DataVersion: 2400826327
    [1763651063.542] [351701:351703] [TOO]   ActiveHardwareFaults: 1 entries
    [1763651063.542] [351701:351703] [TOO]     [1]: 10

    diff --git a/samples/matter/template/CMakeLists.txt b/samples/matter/template/CMakeLists.txt
    index 4570e18e3ef..dd79f676e56 100644
    --- a/samples/matter/template/CMakeLists.txt
    +++ b/samples/matter/template/CMakeLists.txt
    @@ -27,6 +27,7 @@ target_include_directories(app PRIVATE
     target_sources(app PRIVATE
         src/app_task.cpp
         src/main.cpp
    +    src/diagnostic_data_provider.cpp
     )
     
     chip_configure_data_model(app
    diff --git a/samples/matter/template/src/app_task.cpp b/samples/matter/template/src/app_task.cpp
    index 6582fe655e7..67f594444a3 100644
    --- a/samples/matter/template/src/app_task.cpp
    +++ b/samples/matter/template/src/app_task.cpp
    @@ -8,26 +8,78 @@
     
     #include "app/matter_init.h"
     #include "app/task_executor.h"
    -#include "board/board.h"
    +#include "diagnostic_data_provider.h"
    +
     #include "lib/core/CHIPError.h"
     #include "lib/support/CodeUtils.h"
     
    +#include <app-common/zap-generated/attributes/Accessors.h>
    +#include <app/clusters/general-diagnostics-server/general-diagnostics-server.h>
     #include <setup_payload/OnboardingCodesUtil.h>
     
     #include <zephyr/logging/log.h>
     
     LOG_MODULE_DECLARE(app, CONFIG_CHIP_APP_LOG_LEVEL);
     
    -using namespace ::chip;
    -using namespace ::chip::app;
    -using namespace ::chip::DeviceLayer;
    +using namespace chip;
    +using namespace chip::app;
    +using namespace chip::DeviceLayer;
    +using namespace chip::app::Clusters;
    +
    +namespace
    +{
    +constexpr EndpointId kTamperEndpointId = 0;
    +#define APPLICATION_BUTTON_MASK DK_BTN2_MSK
    +} /* namespace */
    +
    +static CHIP_ERROR TriggerTamper()
    +{
    +	GeneralFaults<kMaxHardwareFaults> hwFaultsPrevious;
    +	GeneralFaults<kMaxHardwareFaults> hwFaultsCurrent;
    +	using GeneralDiagnostics::HardwareFaultEnum;
    +
    +	ReturnErrorOnFailure(hwFaultsCurrent.add(to_underlying(HardwareFaultEnum::kTamperDetected)));
    +	ReturnErrorOnFailure(hwFaultsPrevious.add(to_underlying(HardwareFaultEnum::kTamperDetected)));
    +	LOG_ERR("Before OnHardwareFaultsDetect");
    +	GeneralDiagnosticsServer::Instance().OnHardwareFaultsDetect(hwFaultsPrevious, hwFaultsCurrent);
    +	LOG_ERR("After OnHardwareFaultsDetect");
    +
    +	return CHIP_NO_ERROR;
    +}
    +
    +void AppTask::ButtonEventHandler(Nrf::ButtonState state, Nrf::ButtonMask hasChanged)
    +{
    +	if ((APPLICATION_BUTTON_MASK & hasChanged) & state) {
    +		Nrf::GetBoard()
    +			.GetLED(Nrf::DeviceLeds::LED2)
    +			.Set(!Nrf::GetBoard().GetLED(Nrf::DeviceLeds::LED2).GetState());
    +
    +		Nrf::PostTask([] { TamperHandler(); });
    +	}
    +}
    +
    +void AppTask::TamperHandler()
    +{
    +	CHIP_ERROR err = CHIP_NO_ERROR;
    +	err = TriggerTamper();
    +	if (err != CHIP_NO_ERROR) {
    +		LOG_ERR("Error in TriggerTamper: %s", chip::ErrorStr(err));
    +	}
    +}
     
     CHIP_ERROR AppTask::Init()
     {
     	/* Initialize Matter stack */
    -	ReturnErrorOnFailure(Nrf::Matter::PrepareServer());
     
    -	if (!Nrf::GetBoard().Init()) {
    +	///////////////////////////////////////////////////////////////
    +	/// We need to set the custom diagnostic data provider here ///
    +	///////////////////////////////////////////////////////////////
    +	ReturnErrorOnFailure(Nrf::Matter::PrepareServer(Nrf::Matter::InitData{ .mPreServerInitClbk = [] {
    +		SetDiagnosticDataProvider(&MyDiagnosticDataProvider::GetDefaultInstance());
    +		return CHIP_NO_ERROR;
    +	} }));
    +
    +	if (!Nrf::GetBoard().Init(ButtonEventHandler)) {
     		LOG_ERR("User interface initialization failed.");
     		return CHIP_ERROR_INCORRECT_STATE;
     	}
    @@ -49,3 +101,4 @@ CHIP_ERROR AppTask::StartApp()
     
     	return CHIP_NO_ERROR;
     }
    +
    diff --git a/samples/matter/template/src/app_task.h b/samples/matter/template/src/app_task.h
    index b5161f6070d..5dbc53b63d4 100644
    --- a/samples/matter/template/src/app_task.h
    +++ b/samples/matter/template/src/app_task.h
    @@ -4,22 +4,30 @@
      * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
      */
     
    -#pragma once
    + #pragma once
     
    -#include <platform/CHIPDeviceLayer.h>
    -
    -struct k_timer;
    -
    -class AppTask {
    -public:
    -	static AppTask &Instance()
    -	{
    -		static AppTask sAppTask;
    -		return sAppTask;
    -	};
    -
    -	CHIP_ERROR StartApp();
    -
    -private:
    -	CHIP_ERROR Init();
    -};
    + #include "board/board.h"
    + 
    + #include <platform/CHIPDeviceLayer.h>
    + 
    + struct k_timer;
    + 
    + enum class TamperButtonAction : uint8_t { Pushed, Released };
    + 
    + class AppTask {
    + public:
    +	 static AppTask &Instance()
    +	 {
    +		 static AppTask sAppTask;
    +		 return sAppTask;
    +	 };
    + 
    +	 CHIP_ERROR StartApp();
    + 
    + private:
    +	 CHIP_ERROR Init();
    +	 
    +	 static void ButtonEventHandler(Nrf::ButtonState state, Nrf::ButtonMask hasChanged);
    +	 static void TamperHandler();
    + };
    + 
    \ No newline at end of file
    diff --git a/samples/matter/template/src/default_zap/template.zap b/samples/matter/template/src/default_zap/template.zap
    index 414d5d8d029..84958777769 100644
    --- a/samples/matter/template/src/default_zap/template.zap
    +++ b/samples/matter/template/src/default_zap/template.zap
    @@ -1785,6 +1785,22 @@
                   "maxInterval": 65534,
                   "reportableChange": 0
                 },
    +            {
    +              "name": "ActiveHardwareFaults",
    +              "code": 5,
    +              "mfgCode": null,
    +              "side": "server",
    +              "type": "array",
    +              "included": 1,
    +              "storageOption": "External",
    +              "singleton": 0,
    +              "bounded": 0,
    +              "defaultValue": "",
    +              "reportable": 1,
    +              "minInterval": 1,
    +              "maxInterval": 65534,
    +              "reportableChange": 0
    +            },
                 {
                   "name": "TestEventTriggersEnabled",
                   "code": 8,
    @@ -1897,6 +1913,15 @@
                   "maxInterval": 65344,
                   "reportableChange": 0
                 }
    +          ],
    +          "events": [
    +            {
    +              "name": "HardwareFaultChange",
    +              "code": 0,
    +              "mfgCode": null,
    +              "side": "server",
    +              "included": 1
    +            }
               ]
             },
             {
    diff --git a/samples/matter/template/src/default_zap/zap-generated/endpoint_config.h b/samples/matter/template/src/default_zap/zap-generated/endpoint_config.h
    index 9a08bb6574d..d9befdacd24 100644
    --- a/samples/matter/template/src/default_zap/zap-generated/endpoint_config.h
    +++ b/samples/matter/template/src/default_zap/zap-generated/endpoint_config.h
    @@ -29,23 +29,19 @@
     #if CHIP_CONFIG_BIG_ENDIAN_TARGET
     #define GENERATED_DEFAULTS                                                                                             \
     	{                                                                                                              \
    -                                                                                                                       \
     		/* Endpoint: 0, Cluster: General Commissioning (server), big-endian */                                 \
                                                                                                                            \
     		/* 0 - Breadcrumb, */                                                                                  \
     		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,                                                        \
    -                                                                                                                       \
     	}
     
     #else // !CHIP_CONFIG_BIG_ENDIAN_TARGET
     #define GENERATED_DEFAULTS                                                                                             \
     	{                                                                                                              \
    -                                                                                                                       \
     		/* Endpoint: 0, Cluster: General Commissioning (server), little-endian */                              \
                                                                                                                            \
     		/* 0 - Breadcrumb, */                                                                                  \
     		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,                                                        \
    -                                                                                                                       \
     	}
     
     #endif // CHIP_CONFIG_BIG_ENDIAN_TARGET
    @@ -59,190 +55,204 @@
     	}
     
     // This is an array of EmberAfAttributeMetadata structures.
    -#define GENERATED_ATTRIBUTE_COUNT 85
    -#define GENERATED_ATTRIBUTES                                                                                                                     \
    -	{                                                                                                                                        \
    -                                                                                                                                                 \
    -		/* Endpoint: 0, Cluster: Descriptor (server) */                                                                                  \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000000, 0, ZAP_TYPE(ARRAY), ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* DeviceTypeList                 \
    -														*/                               \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000001, 0, ZAP_TYPE(ARRAY), ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* ServerList                     \
    -														*/                               \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000002, 0, ZAP_TYPE(ARRAY), ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* ClientList                     \
    -														*/                               \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000003, 0, ZAP_TYPE(ARRAY), ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* PartsList                      \
    -														*/                               \
    -		{ ZAP_EMPTY_DEFAULT(), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32),                                                                        \
    -		  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* FeatureMap */                                                                       \
    -		{ ZAP_EMPTY_DEFAULT(), 0x0000FFFD, 2, ZAP_TYPE(INT16U), ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* ClusterRevision               \
    -														 */                              \
    -                                                                                                                                                 \
    -		/* Endpoint: 0, Cluster: Access Control (server) */                                                                              \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000000, 0, ZAP_TYPE(ARRAY),                                                                           \
    -		  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* ACL */                                               \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000001, 0, ZAP_TYPE(ARRAY),                                                                           \
    -		  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* Extension */                                         \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000002, 2, ZAP_TYPE(INT16U), ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* SubjectsPerAccessControlEntry \
    -														 */                              \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000003, 2, ZAP_TYPE(INT16U), ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* TargetsPerAccessControlEntry  \
    -														 */                              \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000004, 2, ZAP_TYPE(INT16U), ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* AccessControlEntriesPerFabric \
    -														 */                              \
    -		{ ZAP_SIMPLE_DEFAULT(1), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */                                                \
    -		{ ZAP_EMPTY_DEFAULT(), 0x0000FFFD, 2, ZAP_TYPE(INT16U), ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* ClusterRevision               \
    -														 */                              \
    -                                                                                                                                                 \
    -		/* Endpoint: 0, Cluster: Basic Information (server) */                                                                           \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000000, 2, ZAP_TYPE(INT16U),                                                                          \
    -		  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(SINGLETON) }, /* DataModelRevision */                                \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000001, 33, ZAP_TYPE(CHAR_STRING),                                                                    \
    -		  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(SINGLETON) }, /* VendorName */                                       \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000002, 2, ZAP_TYPE(VENDOR_ID),                                                                       \
    -		  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(SINGLETON) }, /* VendorID */                                         \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000003, 33, ZAP_TYPE(CHAR_STRING),                                                                    \
    -		  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(SINGLETON) }, /* ProductName */                                      \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000004, 2, ZAP_TYPE(INT16U),                                                                          \
    -		  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(SINGLETON) }, /* ProductID */                                        \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000005, 33, ZAP_TYPE(CHAR_STRING),                                                                    \
    -		  ZAP_ATTRIBUTE_MASK(TOKENIZE) | ZAP_ATTRIBUTE_MASK(SINGLETON) | ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* NodeLabel                    \
    -														  */                             \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000006, 3, ZAP_TYPE(CHAR_STRING),                                                                     \
    -		  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(SINGLETON) |                                                         \
    -			  ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* Location */                                                                         \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000007, 2, ZAP_TYPE(INT16U),                                                                          \
    -		  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(SINGLETON) }, /* HardwareVersion */                                  \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000008, 65, ZAP_TYPE(CHAR_STRING),                                                                    \
    -		  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(SINGLETON) }, /* HardwareVersionString */                            \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000009, 4, ZAP_TYPE(INT32U),                                                                          \
    -		  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(SINGLETON) }, /* SoftwareVersion */                                  \
    -		{ ZAP_EMPTY_DEFAULT(), 0x0000000A, 65, ZAP_TYPE(CHAR_STRING),                                                                    \
    -		  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(SINGLETON) }, /* SoftwareVersionString */                            \
    -		{ ZAP_EMPTY_DEFAULT(), 0x0000000B, 17, ZAP_TYPE(CHAR_STRING),                                                                    \
    -		  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(SINGLETON) }, /* ManufacturingDate */                                \
    -		{ ZAP_EMPTY_DEFAULT(), 0x0000000F, 33, ZAP_TYPE(CHAR_STRING),                                                                    \
    -		  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(SINGLETON) }, /* SerialNumber */                                     \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000012, 33, ZAP_TYPE(CHAR_STRING),                                                                    \
    -		  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(SINGLETON) }, /* UniqueID */                                         \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000013, 0, ZAP_TYPE(STRUCT), ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* CapabilityMinima              \
    -														 */                              \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000015, 4, ZAP_TYPE(INT32U),                                                                          \
    -		  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(SINGLETON) }, /* SpecificationVersion */                             \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000016, 2, ZAP_TYPE(INT16U),                                                                          \
    -		  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(SINGLETON) }, /* MaxPathsPerInvoke */                                \
    -		{ ZAP_SIMPLE_DEFAULT(0), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */                                                \
    -		{ ZAP_SIMPLE_DEFAULT(4), 0x0000FFFD, 2, ZAP_TYPE(INT16U), ZAP_ATTRIBUTE_MASK(SINGLETON) }, /* ClusterRevision                    \
    -													    */                                   \
    -                                                                                                                                                 \
    -		/* Endpoint: 0, Cluster: OTA Software Update Requestor (server) */                                                               \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000000, 0, ZAP_TYPE(ARRAY),                                                                           \
    -		  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* DefaultOTAProviders */                               \
    -		{ ZAP_SIMPLE_DEFAULT(1), 0x00000001, 1, ZAP_TYPE(BOOLEAN), 0 }, /* UpdatePossible */                                             \
    -		{ ZAP_SIMPLE_DEFAULT(0), 0x00000002, 1, ZAP_TYPE(ENUM8), 0 }, /* UpdateState */                                                  \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000003, 1, ZAP_TYPE(INT8U), ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* UpdateStateProgress                    \
    -													*/                                       \
    -		{ ZAP_SIMPLE_DEFAULT(0), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */                                                \
    -		{ ZAP_SIMPLE_DEFAULT(1), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */                                             \
    -                                                                                                                                                 \
    -		/* Endpoint: 0, Cluster: General Commissioning (server) */                                                                       \
    -		{ ZAP_LONG_DEFAULTS_INDEX(0), 0x00000000, 8, ZAP_TYPE(INT64U), ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* Breadcrumb                     \
    -														*/                               \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000001, 0, ZAP_TYPE(STRUCT), ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* BasicCommissioningInfo        \
    -														 */                              \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000002, 1, ZAP_TYPE(ENUM8), ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* RegulatoryConfig               \
    -														*/                               \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000003, 1, ZAP_TYPE(ENUM8), ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* LocationCapability             \
    -														*/                               \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000004, 1, ZAP_TYPE(BOOLEAN), ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* SupportsConcurrentConnection \
    -														  */                             \
    -		{ ZAP_SIMPLE_DEFAULT(0), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */                                                \
    -		{ ZAP_SIMPLE_DEFAULT(2), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */                                             \
    -                                                                                                                                                 \
    -		/* Endpoint: 0, Cluster: Network Commissioning (server) */                                                                       \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000000, 1, ZAP_TYPE(INT8U), ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* MaxNetworks                    \
    -														*/                               \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000001, 0, ZAP_TYPE(ARRAY), ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* Networks                       \
    -														*/                               \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000002, 1, ZAP_TYPE(INT8U), ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* ScanMaxTimeSeconds             \
    -														*/                               \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000003, 1, ZAP_TYPE(INT8U), ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* ConnectMaxTimeSeconds          \
    -														*/                               \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000004, 1, ZAP_TYPE(BOOLEAN),                                                                         \
    -		  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* InterfaceEnabled */                                  \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000005, 1, ZAP_TYPE(ENUM8),                                                                           \
    -		  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* LastNetworkingStatus */                              \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000006, 33, ZAP_TYPE(OCTET_STRING),                                                                   \
    -		  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* LastNetworkID */                                     \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000007, 4, ZAP_TYPE(INT32S),                                                                          \
    -		  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* LastConnectErrorValue */                             \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000008, 0, ZAP_TYPE(ARRAY), ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* SupportedWiFiBands             \
    -														*/                               \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000009, 2, ZAP_TYPE(BITMAP16), 0 }, /* SupportedThreadFeatures */                                     \
    -		{ ZAP_SIMPLE_DEFAULT(4), 0x0000000A, 2, ZAP_TYPE(INT16U), 0 }, /* ThreadVersion */                                               \
    -		{ ZAP_EMPTY_DEFAULT(), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32),                                                                        \
    -		  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* FeatureMap */                                                                       \
    -		{ ZAP_SIMPLE_DEFAULT(2), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */                                             \
    -                                                                                                                                                 \
    -		/* Endpoint: 0, Cluster: General Diagnostics (server) */                                                                         \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000000, 0, ZAP_TYPE(ARRAY), ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* NetworkInterfaces              \
    -														*/                               \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000001, 2, ZAP_TYPE(INT16U), ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* RebootCount                   \
    -														 */                              \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000002, 8, ZAP_TYPE(INT64U), ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* UpTime                        \
    -														 */                              \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000003, 4, ZAP_TYPE(INT32U), ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* TotalOperationalHours         \
    -														 */                              \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000004, 1, ZAP_TYPE(ENUM8), ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* BootReason                     \
    -														*/                               \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000008, 1, ZAP_TYPE(BOOLEAN), ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* TestEventTriggersEnabled     \
    -														  */                             \
    -		{ ZAP_EMPTY_DEFAULT(), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32),                                                                        \
    -		  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* FeatureMap */                                                                       \
    -		{ ZAP_EMPTY_DEFAULT(), 0x0000FFFD, 2, ZAP_TYPE(INT16U), ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* ClusterRevision               \
    -														 */                              \
    -                                                                                                                                                 \
    -		/* Endpoint: 0, Cluster: Administrator Commissioning (server) */                                                                 \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000000, 1, ZAP_TYPE(ENUM8), ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* WindowStatus                   \
    -														*/                               \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000001, 1, ZAP_TYPE(FABRIC_IDX),                                                                      \
    -		  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* AdminFabricIndex */                                  \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000002, 2, ZAP_TYPE(VENDOR_ID),                                                                       \
    -		  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* AdminVendorId */                                     \
    -		{ ZAP_SIMPLE_DEFAULT(1), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */                                                \
    -		{ ZAP_SIMPLE_DEFAULT(1), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */                                             \
    -                                                                                                                                                 \
    -		/* Endpoint: 0, Cluster: Operational Credentials (server) */                                                                     \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000000, 0, ZAP_TYPE(ARRAY), ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* NOCs                           \
    -														*/                               \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000001, 0, ZAP_TYPE(ARRAY), ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* Fabrics                        \
    -														*/                               \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000002, 1, ZAP_TYPE(INT8U), ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* SupportedFabrics               \
    -														*/                               \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000003, 1, ZAP_TYPE(INT8U), ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* CommissionedFabrics            \
    -														*/                               \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000004, 0, ZAP_TYPE(ARRAY), ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* TrustedRootCertificates        \
    -														*/                               \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000005, 1, ZAP_TYPE(INT8U), ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* CurrentFabricIndex             \
    -														*/                               \
    -		{ ZAP_SIMPLE_DEFAULT(0), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */                                                \
    -		{ ZAP_SIMPLE_DEFAULT(1), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */                                             \
    -                                                                                                                                                 \
    -		/* Endpoint: 0, Cluster: Group Key Management (server) */                                                                        \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000000, 0, ZAP_TYPE(ARRAY),                                                                           \
    -		  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* GroupKeyMap */                                       \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000001, 0, ZAP_TYPE(ARRAY), ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* GroupTable                     \
    -														*/                               \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000002, 2, ZAP_TYPE(INT16U), ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* MaxGroupsPerFabric            \
    -														 */                              \
    -		{ ZAP_EMPTY_DEFAULT(), 0x00000003, 2, ZAP_TYPE(INT16U), ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* MaxGroupKeysPerFabric         \
    -														 */                              \
    -		{ ZAP_EMPTY_DEFAULT(), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32),                                                                        \
    -		  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* FeatureMap */                                                                       \
    -		{ ZAP_EMPTY_DEFAULT(), 0x0000FFFD, 2, ZAP_TYPE(INT16U), ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* ClusterRevision               \
    -														 */                              \
    +#define GENERATED_ATTRIBUTE_COUNT 86
    +#define GENERATED_ATTRIBUTES                                                                                                          \
    +	{                                                                                                                             \
    +		/* Endpoint: 0, Cluster: Descriptor (server) */                                                                       \
    +		{ ZAP_EMPTY_DEFAULT(), 0x00000000, 0, ZAP_TYPE(ARRAY), ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* DeviceTypeList      \
    +														*/                    \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000001, 0, ZAP_TYPE(ARRAY),                                                        \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* ServerList */                                                    \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000002, 0, ZAP_TYPE(ARRAY),                                                        \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* ClientList */                                                    \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000003, 0, ZAP_TYPE(ARRAY),                                                        \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* PartsList */                                                     \
    +			{ ZAP_EMPTY_DEFAULT(), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32),                                                     \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* FeatureMap */                                                    \
    +			{ ZAP_EMPTY_DEFAULT(), 0x0000FFFD, 2, ZAP_TYPE(INT16U),                                                       \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* ClusterRevision */                                               \
    +                                                                                                                                      \
    +			/* Endpoint: 0, Cluster: Access Control (server) */                                                           \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000000, 0, ZAP_TYPE(ARRAY),                                                        \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* ACL */                            \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000001, 0, ZAP_TYPE(ARRAY),                                                        \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* Extension */                      \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000002, 2, ZAP_TYPE(INT16U),                                                       \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* SubjectsPerAccessControlEntry */                                 \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000003, 2, ZAP_TYPE(INT16U),                                                       \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* TargetsPerAccessControlEntry */                                  \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000004, 2, ZAP_TYPE(INT16U),                                                       \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* AccessControlEntriesPerFabric */                                 \
    +			{ ZAP_SIMPLE_DEFAULT(1), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */                             \
    +			{ ZAP_EMPTY_DEFAULT(), 0x0000FFFD, 2, ZAP_TYPE(INT16U),                                                       \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* ClusterRevision */                                               \
    +                                                                                                                                      \
    +			/* Endpoint: 0, Cluster: Basic Information (server) */                                                        \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000000, 2, ZAP_TYPE(INT16U),                                                       \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(SINGLETON) }, /* DataModelRevision                \
    +												   */                                 \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000001, 33, ZAP_TYPE(CHAR_STRING),                                                 \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(SINGLETON) }, /* VendorName */                    \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000002, 2, ZAP_TYPE(VENDOR_ID),                                                    \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(SINGLETON) }, /* VendorID */                      \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000003, 33, ZAP_TYPE(CHAR_STRING),                                                 \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(SINGLETON) }, /* ProductName */                   \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000004, 2, ZAP_TYPE(INT16U),                                                       \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(SINGLETON) }, /* ProductID */                     \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000005, 33, ZAP_TYPE(CHAR_STRING),                                                 \
    +			  ZAP_ATTRIBUTE_MASK(TOKENIZE) | ZAP_ATTRIBUTE_MASK(SINGLETON) |                                              \
    +				  ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* NodeLabel */                                                     \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000006, 3, ZAP_TYPE(CHAR_STRING),                                                  \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(SINGLETON) |                                      \
    +				  ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* Location */                                                      \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000007, 2, ZAP_TYPE(INT16U),                                                       \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(SINGLETON) }, /* HardwareVersion                  \
    +												   */                                 \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000008, 65, ZAP_TYPE(CHAR_STRING),                                                 \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(SINGLETON) }, /* HardwareVersionString            \
    +												   */                                 \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000009, 4, ZAP_TYPE(INT32U),                                                       \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(SINGLETON) }, /* SoftwareVersion                  \
    +												   */                                 \
    +			{ ZAP_EMPTY_DEFAULT(), 0x0000000A, 65, ZAP_TYPE(CHAR_STRING),                                                 \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(SINGLETON) }, /* SoftwareVersionString            \
    +												   */                                 \
    +			{ ZAP_EMPTY_DEFAULT(), 0x0000000B, 17, ZAP_TYPE(CHAR_STRING),                                                 \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(SINGLETON) }, /* ManufacturingDate                \
    +												   */                                 \
    +			{ ZAP_EMPTY_DEFAULT(), 0x0000000F, 33, ZAP_TYPE(CHAR_STRING),                                                 \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(SINGLETON) }, /* SerialNumber */                  \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000012, 33, ZAP_TYPE(CHAR_STRING),                                                 \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(SINGLETON) }, /* UniqueID */                      \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000013, 0, ZAP_TYPE(STRUCT),                                                       \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* CapabilityMinima */                                              \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000015, 4, ZAP_TYPE(INT32U),                                                       \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(SINGLETON) }, /* SpecificationVersion             \
    +												   */                                 \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000016, 2, ZAP_TYPE(INT16U),                                                       \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(SINGLETON) }, /* MaxPathsPerInvoke                \
    +												   */                                 \
    +			{ ZAP_SIMPLE_DEFAULT(0), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */                             \
    +			{ ZAP_SIMPLE_DEFAULT(4), 0x0000FFFD, 2, ZAP_TYPE(INT16U),                                                     \
    +			  ZAP_ATTRIBUTE_MASK(SINGLETON) }, /* ClusterRevision */                                                      \
    +                                                                                                                                      \
    +			/* Endpoint: 0, Cluster: OTA Software Update Requestor (server) */                                            \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000000, 0, ZAP_TYPE(ARRAY),                                                        \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* DefaultOTAProviders               \
    +												  */                                  \
    +			{ ZAP_SIMPLE_DEFAULT(1), 0x00000001, 1, ZAP_TYPE(BOOLEAN), 0 }, /* UpdatePossible */                          \
    +			{ ZAP_SIMPLE_DEFAULT(0), 0x00000002, 1, ZAP_TYPE(ENUM8), 0 }, /* UpdateState */                               \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000003, 1, ZAP_TYPE(INT8U), ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* UpdateStateProgress \
    +														*/                    \
    +			{ ZAP_SIMPLE_DEFAULT(0), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */                             \
    +			{ ZAP_SIMPLE_DEFAULT(1), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */                          \
    +                                                                                                                                      \
    +			/* Endpoint: 0, Cluster: General Commissioning (server) */                                                    \
    +			{ ZAP_LONG_DEFAULTS_INDEX(0), 0x00000000, 8, ZAP_TYPE(INT64U),                                                \
    +			  ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* Breadcrumb */                                                            \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000001, 0, ZAP_TYPE(STRUCT),                                                       \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* BasicCommissioningInfo */                                        \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000002, 1, ZAP_TYPE(ENUM8),                                                        \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* RegulatoryConfig */                                              \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000003, 1, ZAP_TYPE(ENUM8),                                                        \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* LocationCapability */                                            \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000004, 1, ZAP_TYPE(BOOLEAN),                                                      \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* SupportsConcurrentConnection */                                  \
    +			{ ZAP_SIMPLE_DEFAULT(0), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */                             \
    +			{ ZAP_SIMPLE_DEFAULT(2), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */                          \
    +                                                                                                                                      \
    +			/* Endpoint: 0, Cluster: Network Commissioning (server) */                                                    \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000000, 1, ZAP_TYPE(INT8U),                                                        \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* MaxNetworks */                                                   \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000001, 0, ZAP_TYPE(ARRAY),                                                        \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* Networks */                                                      \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000002, 1, ZAP_TYPE(INT8U),                                                        \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* ScanMaxTimeSeconds */                                            \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000003, 1, ZAP_TYPE(INT8U),                                                        \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* ConnectMaxTimeSeconds */                                         \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000004, 1, ZAP_TYPE(BOOLEAN),                                                      \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* InterfaceEnabled                  \
    +												  */                                  \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000005, 1, ZAP_TYPE(ENUM8),                                                        \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* LastNetworkingStatus              \
    +												  */                                  \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000006, 33, ZAP_TYPE(OCTET_STRING),                                                \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* LastNetworkID */                  \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000007, 4, ZAP_TYPE(INT32S),                                                       \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* LastConnectErrorValue             \
    +												  */                                  \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000008, 0, ZAP_TYPE(ARRAY),                                                        \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* SupportedWiFiBands */                                            \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000009, 2, ZAP_TYPE(BITMAP16), 0 }, /* SupportedThreadFeatures */                  \
    +			{ ZAP_SIMPLE_DEFAULT(4), 0x0000000A, 2, ZAP_TYPE(INT16U), 0 }, /* ThreadVersion */                            \
    +			{ ZAP_EMPTY_DEFAULT(), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32),                                                     \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* FeatureMap */                                                    \
    +			{ ZAP_SIMPLE_DEFAULT(2), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */                          \
    +                                                                                                                                      \
    +			/* Endpoint: 0, Cluster: General Diagnostics (server) */                                                      \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000000, 0, ZAP_TYPE(ARRAY),                                                        \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* NetworkInterfaces */                                             \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000001, 2, ZAP_TYPE(INT16U),                                                       \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* RebootCount */                                                   \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000002, 8, ZAP_TYPE(INT64U),                                                       \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* UpTime */                                                        \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000003, 4, ZAP_TYPE(INT32U),                                                       \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* TotalOperationalHours */                                         \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000004, 1, ZAP_TYPE(ENUM8),                                                        \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* BootReason */                                                    \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000005, 0, ZAP_TYPE(ARRAY),                                                        \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* ActiveHardwareFaults */                                          \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000008, 1, ZAP_TYPE(BOOLEAN),                                                      \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* TestEventTriggersEnabled */                                      \
    +			{ ZAP_EMPTY_DEFAULT(), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32),                                                     \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* FeatureMap */                                                    \
    +			{ ZAP_EMPTY_DEFAULT(), 0x0000FFFD, 2, ZAP_TYPE(INT16U),                                                       \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* ClusterRevision */                                               \
    +                                                                                                                                      \
    +			/* Endpoint: 0, Cluster: Administrator Commissioning (server) */                                              \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000000, 1, ZAP_TYPE(ENUM8),                                                        \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* WindowStatus */                                                  \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000001, 1, ZAP_TYPE(FABRIC_IDX),                                                   \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* AdminFabricIndex                  \
    +												  */                                  \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000002, 2, ZAP_TYPE(VENDOR_ID),                                                    \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* AdminVendorId */                  \
    +			{ ZAP_SIMPLE_DEFAULT(1), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */                             \
    +			{ ZAP_SIMPLE_DEFAULT(1), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */                          \
    +                                                                                                                                      \
    +			/* Endpoint: 0, Cluster: Operational Credentials (server) */                                                  \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000000, 0, ZAP_TYPE(ARRAY),                                                        \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* NOCs */                                                          \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000001, 0, ZAP_TYPE(ARRAY),                                                        \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* Fabrics */                                                       \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000002, 1, ZAP_TYPE(INT8U),                                                        \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* SupportedFabrics */                                              \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000003, 1, ZAP_TYPE(INT8U),                                                        \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* CommissionedFabrics */                                           \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000004, 0, ZAP_TYPE(ARRAY),                                                        \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* TrustedRootCertificates */                                       \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000005, 1, ZAP_TYPE(INT8U),                                                        \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* CurrentFabricIndex */                                            \
    +			{ ZAP_SIMPLE_DEFAULT(0), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */                             \
    +			{ ZAP_SIMPLE_DEFAULT(1), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */                          \
    +                                                                                                                                      \
    +			/* Endpoint: 0, Cluster: Group Key Management (server) */                                                     \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000000, 0, ZAP_TYPE(ARRAY),                                                        \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* GroupKeyMap */                    \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000001, 0, ZAP_TYPE(ARRAY),                                                        \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* GroupTable */                                                    \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000002, 2, ZAP_TYPE(INT16U),                                                       \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* MaxGroupsPerFabric */                                            \
    +			{ ZAP_EMPTY_DEFAULT(), 0x00000003, 2, ZAP_TYPE(INT16U),                                                       \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* MaxGroupKeysPerFabric */                                         \
    +			{ ZAP_EMPTY_DEFAULT(), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32),                                                     \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* FeatureMap */                                                    \
    +			{ ZAP_EMPTY_DEFAULT(), 0x0000FFFD, 2, ZAP_TYPE(INT16U),                                                       \
    +			  ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* ClusterRevision */                                               \
     	}
     
     // clang-format off
    -#define GENERATED_EVENT_COUNT 6
    +#define GENERATED_EVENT_COUNT 7
     #define GENERATED_EVENTS { \
       /* Endpoint: 0, Cluster: Basic Information (server) */ \
       /* EventList (index=0) */ \
    @@ -254,6 +264,9 @@
       0x00000000, /* StateTransition */ \
       0x00000001, /* VersionApplied */ \
       0x00000002, /* DownloadError */ \
    +  /* Endpoint: 0, Cluster: General Diagnostics (server) */ \
    +  /* EventList (index=6) */ \
    +  0x00000000, /* HardwareFaultChange */ \
     }
     
     // clang-format on
    @@ -437,19 +450,19 @@
           /* Endpoint: 0, Cluster: General Diagnostics (server) */ \
           .clusterId = 0x00000033, \
           .attributes = ZAP_ATTRIBUTE_INDEX(58), \
    -      .attributeCount = 8, \
    +      .attributeCount = 9, \
           .clusterSize = 0, \
           .mask = ZAP_CLUSTER_MASK(SERVER), \
           .functions = NULL, \
           .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 21 ), \
           .generatedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 24 ), \
    -      .eventList = nullptr, \
    -      .eventCount = 0, \
    +      .eventList = ZAP_GENERATED_EVENTS_INDEX( 6 ), \
    +      .eventCount = 1, \
         },\
       { \
           /* Endpoint: 0, Cluster: Administrator Commissioning (server) */ \
           .clusterId = 0x0000003C, \
    -      .attributes = ZAP_ATTRIBUTE_INDEX(66), \
    +      .attributes = ZAP_ATTRIBUTE_INDEX(67), \
           .attributeCount = 5, \
           .clusterSize = 6, \
           .mask = ZAP_CLUSTER_MASK(SERVER), \
    @@ -462,7 +475,7 @@
       { \
           /* Endpoint: 0, Cluster: Operational Credentials (server) */ \
           .clusterId = 0x0000003E, \
    -      .attributes = ZAP_ATTRIBUTE_INDEX(71), \
    +      .attributes = ZAP_ATTRIBUTE_INDEX(72), \
           .attributeCount = 8, \
           .clusterSize = 6, \
           .mask = ZAP_CLUSTER_MASK(SERVER), \
    @@ -475,7 +488,7 @@
       { \
           /* Endpoint: 0, Cluster: Group Key Management (server) */ \
           .clusterId = 0x0000003F, \
    -      .attributes = ZAP_ATTRIBUTE_INDEX(79), \
    +      .attributes = ZAP_ATTRIBUTE_INDEX(80), \
           .attributeCount = 6, \
           .clusterSize = 0, \
           .mask = ZAP_CLUSTER_MASK(SERVER), \
    @@ -514,10 +527,16 @@ static_assert(ATTRIBUTE_LARGEST <= CHIP_CONFIG_MAX_ATTRIBUTE_STORE_ELEMENT_SIZE,
     
     // Array of endpoints that are supported, the data inside
     // the array is the endpoint number.
    -#define FIXED_ENDPOINT_ARRAY { 0x0000 }
    +#define FIXED_ENDPOINT_ARRAY                                                                                           \
    +	{                                                                                                              \
    +		0x0000                                                                                                 \
    +	}
     
     // Array of profile ids
    -#define FIXED_PROFILE_IDS { 0x0103 }
    +#define FIXED_PROFILE_IDS                                                                                              \
    +	{                                                                                                              \
    +		0x0103                                                                                                 \
    +	}
     
     // Array of device types
     #define FIXED_DEVICE_TYPES                                                                                             \
    @@ -529,13 +548,25 @@ static_assert(ATTRIBUTE_LARGEST <= CHIP_CONFIG_MAX_ATTRIBUTE_STORE_ELEMENT_SIZE,
     	}
     
     // Array of device type offsets
    -#define FIXED_DEVICE_TYPE_OFFSETS { 0 }
    +#define FIXED_DEVICE_TYPE_OFFSETS                                                                                      \
    +	{                                                                                                              \
    +		0                                                                                                      \
    +	}
     
     // Array of device type lengths
    -#define FIXED_DEVICE_TYPE_LENGTHS { 2 }
    +#define FIXED_DEVICE_TYPE_LENGTHS                                                                                      \
    +	{                                                                                                              \
    +		2                                                                                                      \
    +	}
     
     // Array of endpoint types supported on each endpoint
    -#define FIXED_ENDPOINT_TYPES { 0 }
    +#define FIXED_ENDPOINT_TYPES                                                                                           \
    +	{                                                                                                              \
    +		0                                                                                                      \
    +	}
     
     // Array of parent endpoints for each endpoint
    -#define FIXED_PARENT_ENDPOINTS { kInvalidEndpointId }
    +#define FIXED_PARENT_ENDPOINTS                                                                                         \
    +	{                                                                                                              \
    +		kInvalidEndpointId                                                                                     \
    +	}
    diff --git a/samples/matter/template/src/diagnostic_data_provider.cpp b/samples/matter/template/src/diagnostic_data_provider.cpp
    new file mode 100644
    index 00000000000..e21a0c5260a
    --- /dev/null
    +++ b/samples/matter/template/src/diagnostic_data_provider.cpp
    @@ -0,0 +1,30 @@
    +/*
    + * Copyright (c) 2025 Nordic Semiconductor ASA
    + *
    + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
    + */
    +
    +#include "diagnostic_data_provider.h"
    +#include <app-common/zap-generated/cluster-objects.h>
    +
    +using namespace chip;
    +using namespace chip::app;
    +using namespace chip::app::Clusters;
    +using namespace chip::DeviceLayer;
    +
    +DiagnosticDataProvider &GetDiagnosticDataProviderImpl()
    +{
    +	return MyDiagnosticDataProvider::GetDefaultInstance();
    +}
    +
    +MyDiagnosticDataProvider &MyDiagnosticDataProvider::GetDefaultInstance()
    +{
    +	static MyDiagnosticDataProvider sInstance;
    +	return sInstance;
    +}
    +
    +CHIP_ERROR MyDiagnosticDataProvider::GetActiveHardwareFaults(GeneralFaults<kMaxHardwareFaults> &hardwareFaults)
    +{
    +	ReturnErrorOnFailure(hardwareFaults.add(to_underlying(GeneralDiagnostics::HardwareFaultEnum::kTamperDetected)));
    +	return CHIP_NO_ERROR;
    +}
    diff --git a/samples/matter/template/src/diagnostic_data_provider.h b/samples/matter/template/src/diagnostic_data_provider.h
    new file mode 100644
    index 00000000000..3e255298f5a
    --- /dev/null
    +++ b/samples/matter/template/src/diagnostic_data_provider.h
    @@ -0,0 +1,29 @@
    +/*
    + * Copyright (c) 2025 Nordic Semiconductor ASA
    + *
    + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
    + */
    +
    +#pragma once
    +
    +#include <platform/Zephyr/DiagnosticDataProviderImpl.h>
    +
    +namespace chip
    +{
    +namespace DeviceLayer
    +{
    +
    +	class MyDiagnosticDataProvider : public DiagnosticDataProviderImpl {
    +	public:
    +		CHIP_ERROR GetActiveHardwareFaults(GeneralFaults<kMaxHardwareFaults> &hardwareFaults) override;
    +
    +		static MyDiagnosticDataProvider &GetDefaultInstance();
    +
    +	private:
    +		MyDiagnosticDataProvider() = default;
    +	};
    +
    +	DiagnosticDataProvider &GetDiagnosticDataProviderImpl();
    +
    +} // namespace DeviceLayer
    +} // namespace chip
    \ No newline at end of file
    

    Best regards,
    Marte

Related