Allow client applications to parse command responses using the underlying ZCL stack (#4661)

* Update chip-tool to be a client application using ZAP

* Disable clients clusters from the all-clusters-app zap config

* Get src/darwin to push down command responses down into the ZCL stack.

The above changes introduce a new callback based API for command responses instead of hand crafted code inside the iOS ChipTool application.

* Map ZCL responses to command using sequence number identifier

* Add nlio path to the esp32 all-clusters-app

Co-authored-by: Justin Wood <woody@apple.com>
diff --git a/examples/all-clusters-app/all-clusters-common/BUILD.gn b/examples/all-clusters-app/all-clusters-common/BUILD.gn
index 8988b02..618c2fc 100644
--- a/examples/all-clusters-app/all-clusters-common/BUILD.gn
+++ b/examples/all-clusters-app/all-clusters-common/BUILD.gn
@@ -27,19 +27,15 @@
     "${chip_root}/src/app/clusters/basic/basic.cpp",
     "${chip_root}/src/app/clusters/bindings/bindings.cpp",
     "${chip_root}/src/app/clusters/color-control-server/color-control-server.cpp",
-    "${chip_root}/src/app/clusters/door-lock-client/door-lock-client.cpp",
     "${chip_root}/src/app/clusters/door-lock-server/door-lock-server-core.cpp",
     "${chip_root}/src/app/clusters/door-lock-server/door-lock-server-logging.cpp",
     "${chip_root}/src/app/clusters/door-lock-server/door-lock-server-schedule.cpp",
     "${chip_root}/src/app/clusters/door-lock-server/door-lock-server-user.cpp",
-    "${chip_root}/src/app/clusters/groups-client/groups-client.cpp",
     "${chip_root}/src/app/clusters/groups-server/groups-server.cpp",
     "${chip_root}/src/app/clusters/ias-zone-server/ias-zone-server.cpp",
-    "${chip_root}/src/app/clusters/identify-client/identify-client.cpp",
     "${chip_root}/src/app/clusters/identify/identify.cpp",
     "${chip_root}/src/app/clusters/level-control/level-control.cpp",
     "${chip_root}/src/app/clusters/on-off-server/on-off.cpp",
-    "${chip_root}/src/app/clusters/scenes-client/scenes-client.cpp",
     "${chip_root}/src/app/clusters/scenes/scenes.cpp",
     "${chip_root}/src/app/clusters/temperature-measurement-server/temperature-measurement-server.cpp",
     "${chip_root}/src/app/reporting/reporting-default-configuration.cpp",
diff --git a/examples/all-clusters-app/all-clusters-common/all-clusters-app.zap b/examples/all-clusters-app/all-clusters-common/all-clusters-app.zap
index 5854cbc..25ed573 100644
--- a/examples/all-clusters-app/all-clusters-common/all-clusters-app.zap
+++ b/examples/all-clusters-app/all-clusters-common/all-clusters-app.zap
@@ -2824,7 +2824,24 @@
           "mfgCode": null,
           "define": "BASIC_CLUSTER",
           "side": "client",
-          "enabled": 1,
+          "enabled": 0,
+          "attributes": [
+            {
+              "name": "cluster revision",
+              "code": 65533,
+              "mfgCode": null,
+              "side": "client",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "3",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            }
+          ],
           "commands": [
             {
               "name": "ResetToFactoryDefaults",
@@ -2923,7 +2940,7 @@
           "mfgCode": null,
           "define": "IDENTIFY_CLUSTER",
           "side": "client",
-          "enabled": 1,
+          "enabled": 0,
           "commands": [
             {
               "name": "Identify",
@@ -3016,7 +3033,7 @@
           "mfgCode": null,
           "define": "GROUPS_CLUSTER",
           "side": "client",
-          "enabled": 1,
+          "enabled": 0,
           "commands": [
             {
               "name": "AddGroup",
@@ -3165,7 +3182,7 @@
           "mfgCode": null,
           "define": "SCENES_CLUSTER",
           "side": "client",
-          "enabled": 1,
+          "enabled": 0,
           "commands": [
             {
               "name": "AddScene",
@@ -3398,7 +3415,24 @@
           "mfgCode": null,
           "define": "ON_OFF_CLUSTER",
           "side": "client",
-          "enabled": 1,
+          "enabled": 0,
+          "attributes": [
+            {
+              "name": "cluster revision",
+              "code": 65533,
+              "mfgCode": null,
+              "side": "client",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "2",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            }
+          ],
           "commands": [
             {
               "name": "Off",
@@ -3490,7 +3524,7 @@
           "mfgCode": null,
           "define": "LEVEL_CONTROL_CLUSTER",
           "side": "client",
-          "enabled": 1,
+          "enabled": 0,
           "commands": [
             {
               "name": "MoveToLevel",
@@ -3622,7 +3656,7 @@
           "mfgCode": null,
           "define": "DOOR_LOCK_CLUSTER",
           "side": "client",
-          "enabled": 1,
+          "enabled": 0,
           "commands": [
             {
               "name": "LockDoor",
@@ -4296,7 +4330,7 @@
           "mfgCode": null,
           "define": "BARRIER_CONTROL_CLUSTER",
           "side": "client",
-          "enabled": 1,
+          "enabled": 0,
           "commands": [
             {
               "name": "BarrierControlGoToPercent",
@@ -4425,7 +4459,7 @@
           "mfgCode": null,
           "define": "COLOR_CONTROL_CLUSTER",
           "side": "client",
-          "enabled": 1,
+          "enabled": 0,
           "commands": [
             {
               "name": "MoveToHue",
@@ -5605,7 +5639,7 @@
           "mfgCode": null,
           "define": "BINDING_CLUSTER",
           "side": "client",
-          "enabled": 1,
+          "enabled": 0,
           "commands": [
             {
               "name": "Bind",
@@ -5687,4 +5721,4 @@
       "networkId": 0
     }
   ]
-}
\ No newline at end of file
+}
diff --git a/examples/all-clusters-app/all-clusters-common/gen/CHIPClientCallbacks.cpp b/examples/all-clusters-app/all-clusters-common/gen/CHIPClientCallbacks.cpp
new file mode 100644
index 0000000..f5f88af
--- /dev/null
+++ b/examples/all-clusters-app/all-clusters-common/gen/CHIPClientCallbacks.cpp
@@ -0,0 +1,842 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+#include "gen/CHIPClientCallbacks.h"
+
+#include "gen/enums.h"
+#include <app/util/CHIPDeviceCallbacksMgr.h>
+#include <app/util/af-enums.h>
+#include <app/util/af.h>
+#include <app/util/basic-types.h>
+#include <core/CHIPEncoding.h>
+#include <support/SafeInt.h>
+#include <support/logging/CHIPLogging.h>
+
+using namespace ::chip;
+
+#define CHECK_MESSAGE_LENGTH(value)                                                                                                \
+    if (!chip::CanCastTo<uint16_t>(value))                                                                                         \
+    {                                                                                                                              \
+        ChipLogError(Zcl, "CHECK_MESSAGE_LENGTH expects a uint16_t value, got: %d", value);                                        \
+        if (onFailureCallback != nullptr)                                                                                          \
+        {                                                                                                                          \
+            Callback::Callback<DefaultFailureCallback> * cb =                                                                      \
+                Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);                                     \
+            cb->mCall(cb->mContext, static_cast<uint8_t>(EMBER_ZCL_STATUS_INVALID_VALUE));                                         \
+        }                                                                                                                          \
+        return true;                                                                                                               \
+    }                                                                                                                              \
+                                                                                                                                   \
+    if (messageLen < value)                                                                                                        \
+    {                                                                                                                              \
+        ChipLogError(Zcl, "Unexpected response length: %d", messageLen);                                                           \
+        if (onFailureCallback != nullptr)                                                                                          \
+        {                                                                                                                          \
+            Callback::Callback<DefaultFailureCallback> * cb =                                                                      \
+                Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);                                     \
+            cb->mCall(cb->mContext, static_cast<uint8_t>(EMBER_ZCL_STATUS_INVALID_VALUE));                                         \
+        }                                                                                                                          \
+        return true;                                                                                                               \
+    }                                                                                                                              \
+                                                                                                                                   \
+    messageLen = static_cast<uint16_t>(messageLen - static_cast<uint16_t>(value));
+
+#define GET_RESPONSE_CALLBACKS(name)                                                                                               \
+    Callback::Cancelable * onSuccessCallback = nullptr;                                                                            \
+    Callback::Cancelable * onFailureCallback = nullptr;                                                                            \
+    NodeId sourceId                          = emberAfCurrentCommand()->source;                                                    \
+    uint8_t sequenceNumber                   = emberAfCurrentCommand()->seqNum;                                                    \
+    CHIP_ERROR err = gCallbacks.GetResponseCallback(sourceId, sequenceNumber, &onSuccessCallback, &onFailureCallback);             \
+                                                                                                                                   \
+    if (CHIP_NO_ERROR != err)                                                                                                      \
+    {                                                                                                                              \
+        if (onSuccessCallback == nullptr)                                                                                          \
+        {                                                                                                                          \
+            ChipLogDetail(Zcl, "%s: Missing success callback", name);                                                              \
+        }                                                                                                                          \
+                                                                                                                                   \
+        if (onFailureCallback == nullptr)                                                                                          \
+        {                                                                                                                          \
+            ChipLogDetail(Zcl, "%s: Missing failure callback", name);                                                              \
+        }                                                                                                                          \
+                                                                                                                                   \
+        return true;                                                                                                               \
+    }
+
+#define GET_REPORT_CALLBACK(name)                                                                                                  \
+    Callback::Cancelable * onReportCallback = nullptr;                                                                             \
+    CHIP_ERROR err = gCallbacks.GetReportCallback(sourceId, endpointId, clusterId, attributeId, &onReportCallback);                \
+                                                                                                                                   \
+    if (CHIP_NO_ERROR != err)                                                                                                      \
+    {                                                                                                                              \
+        if (onReportCallback == nullptr)                                                                                           \
+        {                                                                                                                          \
+            ChipLogDetail(Zcl, "%s: Missing report callback", name);                                                               \
+        }                                                                                                                          \
+                                                                                                                                   \
+        return true;                                                                                                               \
+    }
+
+void LogStatus(uint8_t status)
+{
+    switch (status)
+    {
+    case EMBER_ZCL_STATUS_SUCCESS:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_SUCCESS (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_FAILURE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_FAILURE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_NOT_AUTHORIZED:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_NOT_AUTHORIZED (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_MALFORMED_COMMAND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_MALFORMED_COMMAND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNSUP_COMMAND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNSUP_CLUSTER_COMMAND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNSUP_GENERAL_COMMAND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNSUP_GENERAL_COMMAND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNSUP_MANUF_CLUSTER_COMMAND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNSUP_MANUF_CLUSTER_COMMAND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNSUP_MANUF_GENERAL_COMMAND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNSUP_MANUF_GENERAL_COMMAND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INVALID_FIELD:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INVALID_FIELD (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNSUPPORTED_ATTRIBUTE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNSUPPORTED_ATTRIBUTE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INVALID_VALUE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INVALID_VALUE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_READ_ONLY:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_READ_ONLY (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INSUFFICIENT_SPACE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INSUFFICIENT_SPACE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_DUPLICATE_EXISTS:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_DUPLICATE_EXISTS (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_NOT_FOUND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_NOT_FOUND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNREPORTABLE_ATTRIBUTE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNREPORTABLE_ATTRIBUTE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INVALID_DATA_TYPE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INVALID_DATA_TYPE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INVALID_SELECTOR:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INVALID_SELECTOR (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_WRITE_ONLY:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_WRITE_ONLY (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INCONSISTENT_STARTUP_STATE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INCONSISTENT_STARTUP_STATE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_DEFINED_OUT_OF_BAND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_DEFINED_OUT_Of_BAND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_ACTION_DENIED:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_ACTION_DENIED (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_TIMEOUT:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_TIMEOUT (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_ABORT:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_ABORT (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INVALID_IMAGE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INVALID_IMAGE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_WAIT_FOR_DATA:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_WAIT_FOR_DATA (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_NO_IMAGE_AVAILABLE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_NO_IMAGE_AVAILABLE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_REQUIRE_MORE_IMAGE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_REQUIRE_MORE_IMAGE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_HARDWARE_FAILURE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_HARDWARE_FAILURE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_SOFTWARE_FAILURE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_SOFTWARE_FAILURE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNSUPPORTED_CLUSTER:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNSUPPORTED_CLUSTER (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_LIMIT_REACHED:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_LIMIT_REACHED (0x%02x)", status);
+        break;
+    default:
+        ChipLogError(Zcl, "Unknow status: 0x%02x", status);
+        break;
+    }
+}
+
+// Singleton instance of the callbacks manager
+app::CHIPDeviceCallbacksMgr & gCallbacks = app::CHIPDeviceCallbacksMgr::GetInstance();
+
+bool emberAfDefaultResponseCallback(ClusterId clusterId, CommandId commandId, EmberAfStatus status)
+{
+    ChipLogProgress(Zcl, "DefaultResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+    ChipLogProgress(Zcl, "  CommandId: 0x%02x", commandId);
+    LogStatus(status);
+
+    GET_RESPONSE_CALLBACKS("emberAfDefaultResponseCallback");
+    if (status == EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultSuccessCallback> * cb =
+            Callback::Callback<DefaultSuccessCallback>::FromCancelable(onSuccessCallback);
+        cb->mCall(cb->mContext);
+    }
+    else
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, static_cast<uint8_t>(status));
+    }
+
+    return true;
+}
+
+bool emberAfReadAttributesResponseCallback(ClusterId clusterId, uint8_t * message, uint16_t messageLen)
+{
+    ChipLogProgress(Zcl, "ReadAttributesResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+
+    GET_RESPONSE_CALLBACKS("emberAfReadAttributesResponseCallback");
+
+    // struct readAttributeResponseRecord[]
+    while (messageLen)
+    {
+        CHECK_MESSAGE_LENGTH(2);
+        uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+        ChipLogProgress(Zcl, "  attributeId: 0x%04x", attributeId);
+
+        CHECK_MESSAGE_LENGTH(1);
+        uint8_t status = chip::Encoding::Read8(message); // zclStatus
+        LogStatus(status);
+
+        if (status == EMBER_ZCL_STATUS_SUCCESS)
+        {
+            CHECK_MESSAGE_LENGTH(1);
+            uint8_t attributeType = chip::Encoding::Read8(message);
+            ChipLogProgress(Zcl, "  attributeType: 0x%02x", attributeType);
+
+            switch (attributeType)
+            {
+            case 0x00: // nodata / No data
+            case 0x0A: // data24 / 24-bit data
+            case 0x0C: // data40 / 40-bit data
+            case 0x0D: // data48 / 48-bit data
+            case 0x0E: // data56 / 56-bit data
+            case 0x1A: // map24 / 24-bit bitmap
+            case 0x1C: // map40 / 40-bit bitmap
+            case 0x1D: // map48 / 48-bit bitmap
+            case 0x1E: // map56 / 56-bit bitmap
+            case 0x22: // uint24 / Unsigned 24-bit integer
+            case 0x24: // uint40 / Unsigned 40-bit integer
+            case 0x25: // uint48 / Unsigned 48-bit integer
+            case 0x26: // uint56 / Unsigned 56-bit integer
+            case 0x2A: // int24 / Signed 24-bit integer
+            case 0x2C: // int40 / Signed 40-bit integer
+            case 0x2D: // int48 / Signed 48-bit integer
+            case 0x2E: // int56 / Signed 56-bit integer
+            case 0x38: // semi / Semi-precision
+            case 0x39: // single / Single precision
+            case 0x3A: // double / Double precision
+            case 0x41: // octstr / Octet string
+            case 0x42: // string / Character string
+            case 0x43: // octstr16 / Long octet string
+            case 0x44: // string16 / Long character string
+            case 0x48: // array / Array
+            case 0x49: // struct / Structure
+            case 0x50: // set / Set
+            case 0x51: // bag / Bag
+            case 0xE0: // ToD / Time of day
+            {
+                ChipLogError(Zcl, "attributeType 0x%02x is not supported", attributeType);
+                Callback::Callback<DefaultFailureCallback> * cb =
+                    Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+                cb->mCall(cb->mContext, EMBER_ZCL_STATUS_INVALID_VALUE);
+                return true;
+            }
+
+            case 0x08: // data8 / 8-bit data
+            case 0x18: // map8 / 8-bit bitmap
+            case 0x20: // uint8 / Unsigned  8-bit integer
+            case 0x30: // enum8 / 8-bit enumeration
+            {
+                CHECK_MESSAGE_LENGTH(1);
+                uint8_t value = chip::Encoding::Read8(message);
+                ChipLogProgress(Zcl, "  value: 0x%02x", value);
+
+                Callback::Callback<Int8uAttributeCallback> * cb =
+                    Callback::Callback<Int8uAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x09: // data16 / 16-bit data
+            case 0x19: // map16 / 16-bit bitmap
+            case 0x21: // uint16 / Unsigned 16-bit integer
+            case 0x31: // enum16 / 16-bit enumeration
+            case 0xE8: // clusterId / Cluster ID
+            case 0xE9: // attribId / Attribute ID
+            case 0xEA: // bacOID / BACnet OID
+            case 0xF1: // key128 / 128-bit security key
+            case 0xFF: // unk / Unknown
+            {
+                CHECK_MESSAGE_LENGTH(2);
+                uint16_t value = chip::Encoding::LittleEndian::Read16(message);
+                ChipLogProgress(Zcl, "  value: 0x%04x", value);
+
+                Callback::Callback<Int16uAttributeCallback> * cb =
+                    Callback::Callback<Int16uAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x0B: // data32 / 32-bit data
+            case 0x1B: // map32 / 32-bit bitmap
+            case 0x23: // uint32 / Unsigned 32-bit integer
+            case 0xE1: // date / Date
+            case 0xE2: // UTC / UTCTime
+            {
+                CHECK_MESSAGE_LENGTH(4);
+                uint32_t value = chip::Encoding::LittleEndian::Read32(message);
+                ChipLogProgress(Zcl, "  value: 0x%08x", value);
+
+                Callback::Callback<Int32uAttributeCallback> * cb =
+                    Callback::Callback<Int32uAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x0F: // data64 / 64-bit data
+            case 0x1F: // map64 / 64-bit bitmap
+            case 0x27: // uint64 / Unsigned 64-bit integer
+            case 0xF0: // EUI64 / IEEE address
+            {
+                CHECK_MESSAGE_LENGTH(8);
+                uint64_t value = chip::Encoding::LittleEndian::Read64(message);
+                ChipLogProgress(Zcl, "  value: 0x%16x", value);
+
+                Callback::Callback<Int64uAttributeCallback> * cb =
+                    Callback::Callback<Int64uAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x10: // bool / Boolean
+            {
+                CHECK_MESSAGE_LENGTH(1);
+                uint8_t value = chip::Encoding::Read8(message);
+                ChipLogProgress(Zcl, "  value: %d", value);
+
+                Callback::Callback<BooleanAttributeCallback> * cb =
+                    Callback::Callback<BooleanAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x28: // int8 / Signed 8-bit integer
+            {
+                CHECK_MESSAGE_LENGTH(1);
+                int8_t value = chip::CastToSigned(chip::Encoding::Read8(message));
+                ChipLogProgress(Zcl, "  value: %" PRId8, value);
+
+                Callback::Callback<Int8sAttributeCallback> * cb =
+                    Callback::Callback<Int8sAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x29: // int16 / Signed 16-bit integer
+            {
+                CHECK_MESSAGE_LENGTH(2);
+                int16_t value = chip::CastToSigned(chip::Encoding::LittleEndian::Read16(message));
+                ChipLogProgress(Zcl, "  value: %" PRId16, value);
+
+                Callback::Callback<Int16sAttributeCallback> * cb =
+                    Callback::Callback<Int16sAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x2B: // int32 / Signed 32-bit integer
+            {
+                CHECK_MESSAGE_LENGTH(4);
+                int32_t value = chip::CastToSigned(chip::Encoding::LittleEndian::Read32(message));
+                ChipLogProgress(Zcl, "  value: %" PRId32, value);
+
+                Callback::Callback<Int32sAttributeCallback> * cb =
+                    Callback::Callback<Int32sAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x2F: // int64 / Signed 64-bit integer
+            {
+                CHECK_MESSAGE_LENGTH(8);
+                int64_t value = chip::CastToSigned(chip::Encoding::LittleEndian::Read64(message));
+                ChipLogProgress(Zcl, "  value: %" PRId64, value);
+
+                Callback::Callback<Int64sAttributeCallback> * cb =
+                    Callback::Callback<Int64sAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+            }
+        }
+        else
+        {
+            Callback::Callback<DefaultFailureCallback> * cb =
+                Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+            cb->mCall(cb->mContext, status);
+        }
+
+        // The current code is written matching the current API where there is a single attribute read
+        // per read command. So if multiple attributes are read at the same time, something is wrong
+        // somewhere.
+        if (messageLen)
+        {
+            ChipLogError(Zcl, "Multiple attributes read at the same time. Something went wrong.");
+            break;
+        }
+    }
+
+    return true;
+}
+
+bool emberAfWriteAttributesResponseCallback(ClusterId clusterId, uint8_t * message, uint16_t messageLen)
+{
+    ChipLogProgress(Zcl, "WriteAttributesResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+
+    GET_RESPONSE_CALLBACKS("emberAfWriteAttributesResponseCallback");
+
+    // struct writeAttributeResponseRecord[]
+    while (messageLen)
+    {
+        CHECK_MESSAGE_LENGTH(1);
+        uint8_t status = chip::Encoding::Read8(message); // zclStatus
+        LogStatus(status);
+
+        if (status == EMBER_ZCL_STATUS_SUCCESS)
+        {
+            Callback::Callback<DefaultSuccessCallback> * cb =
+                Callback::Callback<DefaultSuccessCallback>::FromCancelable(onSuccessCallback);
+            cb->mCall(cb->mContext);
+        }
+        else
+        {
+            CHECK_MESSAGE_LENGTH(2);
+            uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+            ChipLogProgress(Zcl, "  attributeId: 0x%04x", attributeId);
+
+            Callback::Callback<DefaultFailureCallback> * cb =
+                Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+            cb->mCall(cb->mContext, status);
+        }
+
+        // The current code is written matching the current API where there is a single attribute written
+        // per write command. So if multiple attributes are written at the same time, something is wrong
+        // somewhere.
+        if (messageLen)
+        {
+            ChipLogError(Zcl, "Multiple attributes written at the same time. Something went wrong.");
+            break;
+        }
+    }
+
+    return true;
+}
+
+bool emberAfConfigureReportingResponseCallback(ClusterId clusterId, uint8_t * message, uint16_t messageLen)
+{
+    ChipLogProgress(Zcl, "ConfigureReportingResponseCallback:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+
+    GET_RESPONSE_CALLBACKS("emberAfConfigureReportingResponseCallback");
+
+    // struct configureReportingResponseRecord[]
+    while (messageLen)
+    {
+        CHECK_MESSAGE_LENGTH(1);
+        uint8_t status = chip::Encoding::Read8(message); // zclStatus
+        LogStatus(status);
+
+        if (status == EMBER_ZCL_STATUS_SUCCESS)
+        {
+            Callback::Callback<DefaultSuccessCallback> * cb =
+                Callback::Callback<DefaultSuccessCallback>::FromCancelable(onSuccessCallback);
+            cb->mCall(cb->mContext);
+        }
+        else
+        {
+            CHECK_MESSAGE_LENGTH(1);
+            uint8_t direction = chip::Encoding::Read8(message); // reportingRole
+            ChipLogProgress(Zcl, "  direction: 0x%02x", direction);
+
+            CHECK_MESSAGE_LENGTH(2);
+            uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+            ChipLogProgress(Zcl, "  attributeId: 0x%04x", attributeId);
+
+            Callback::Callback<DefaultFailureCallback> * cb =
+                Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+            cb->mCall(cb->mContext, status);
+        }
+
+        // The current code is written matching the current API where there is a single attribute report
+        // per configure command. So if multiple attributes are configured at the same time, something is wrong
+        // somewhere.
+        if (messageLen)
+        {
+            ChipLogError(Zcl, "Multiple attributes reports configured at the same time. Something went wrong.");
+            break;
+        }
+    }
+
+    return true;
+}
+
+bool emberAfReadReportingConfigurationResponseCallback(chip::ClusterId clusterId, uint8_t * message, uint16_t messageLen)
+{
+    ChipLogProgress(Zcl, "ReadReportingConfigurationResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+
+    GET_RESPONSE_CALLBACKS("emberAfReadReportingConfigurationResponseCallback");
+
+    // struct readReportingConfigurationResponseRecord[]
+    while (messageLen)
+    {
+        CHECK_MESSAGE_LENGTH(1);
+        uint8_t direction = chip::Encoding::Read8(message); // reportingRole
+        ChipLogProgress(Zcl, "  direction: 0x%02x", direction);
+
+        CHECK_MESSAGE_LENGTH(2);
+        uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+        ChipLogProgress(Zcl, "  attributeId: 0x%04x", attributeId);
+
+        if (direction == EMBER_ZCL_REPORTING_DIRECTION_REPORTED)
+        {
+            CHECK_MESSAGE_LENGTH(1);
+            uint8_t attributeType = chip::Encoding::Read8(message); // zclType
+            ChipLogProgress(Zcl, "  attributeType: 0x%02x", attributeType);
+
+            CHECK_MESSAGE_LENGTH(2);
+            uint16_t minimumReportingInterval = chip::Encoding::LittleEndian::Read16(message); // uint16
+            ChipLogProgress(Zcl, "  minimumReportingInterval: %" PRIu16, minimumReportingInterval);
+
+            CHECK_MESSAGE_LENGTH(2);
+            uint16_t maximumReportingInterval = chip::Encoding::LittleEndian::Read16(message); // uint16
+            ChipLogProgress(Zcl, "  maximumReportingInterval: %" PRIu16, maximumReportingInterval);
+
+            // FIXME: unk is not supported yet.
+
+            Callback::Callback<ReadReportingConfigurationReportedCallback> * cb =
+                Callback::Callback<ReadReportingConfigurationReportedCallback>::FromCancelable(onSuccessCallback);
+            cb->mCall(cb->mContext, minimumReportingInterval, maximumReportingInterval);
+        }
+        else
+        {
+            CHECK_MESSAGE_LENGTH(2);
+            uint16_t timeout = chip::Encoding::LittleEndian::Read16(message); // uint16
+            ChipLogProgress(Zcl, "  timeout: %" PRIu16, timeout);
+
+            Callback::Callback<ReadReportingConfigurationReceivedCallback> * cb =
+                Callback::Callback<ReadReportingConfigurationReceivedCallback>::FromCancelable(onSuccessCallback);
+            cb->mCall(cb->mContext, timeout);
+        }
+    }
+
+    return true;
+}
+
+bool emberAfDiscoverAttributesResponseCallback(ClusterId clusterId, bool discoveryComplete, uint8_t * message, uint16_t messageLen,
+                                               bool extended)
+{
+    ChipLogProgress(Zcl, "DiscoverAttributesResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+    ChipLogProgress(Zcl, "  discoveryComplete: %d", discoveryComplete);
+    ChipLogProgress(Zcl, "  extended: %d", extended);
+
+    GET_RESPONSE_CALLBACKS("emberAfDiscoverAttributesCallback");
+
+    // struct discoverAttributesResponseRecord[]
+    while (messageLen)
+    {
+        CHECK_MESSAGE_LENGTH(2);
+        uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+        ChipLogProgress(Zcl, "  attributeId: 0x%04x", attributeId);
+
+        CHECK_MESSAGE_LENGTH(1);
+        uint8_t attributeType = chip::Encoding::Read8(message); // zclType
+        ChipLogProgress(Zcl, "  attributeType: 0x%02x", attributeType);
+    }
+
+    Callback::Callback<DefaultSuccessCallback> * cb = Callback::Callback<DefaultSuccessCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfDiscoverCommandsGeneratedResponseCallback(ClusterId clusterId, uint16_t manufacturerCode, bool discoveryComplete,
+                                                      CommandId * commandIds, uint16_t commandIdCount)
+{
+    ChipLogProgress(Zcl, "DiscoverCommandsGeneratedResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+    ChipLogProgress(Zcl, "  manufacturerCode: 0x%04x", manufacturerCode);
+    ChipLogProgress(Zcl, "  discoveryComplete: %d", discoveryComplete);
+    ChipLogProgress(Zcl, "  commandIdCount: %" PRIu16, commandIdCount);
+
+    for (uint16_t i = 0; i < commandIdCount; i++)
+    {
+        ChipLogProgress(Zcl, "  commandId: 0x%02x", commandIds++);
+    }
+
+    GET_RESPONSE_CALLBACKS("emberAfDiscoverCommandsGeneratedResponseCallback");
+    Callback::Callback<DefaultSuccessCallback> * cb = Callback::Callback<DefaultSuccessCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfDiscoverCommandsReceivedResponseCallback(ClusterId clusterId, uint16_t manufacturerCode, bool discoveryComplete,
+                                                     CommandId * commandIds, uint16_t commandIdCount)
+{
+    ChipLogProgress(Zcl, "DiscoverCommandsReceivedResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+    ChipLogProgress(Zcl, "  manufacturerCode: 0x%04x", manufacturerCode);
+    ChipLogProgress(Zcl, "  discoveryComplete: %d", discoveryComplete);
+    ChipLogProgress(Zcl, "  commandIdCount: %" PRIu16, commandIdCount);
+
+    for (uint16_t i = 0; i < commandIdCount; i++)
+    {
+        ChipLogProgress(Zcl, "  commandId: 0x%02x", commandIds++);
+    }
+
+    GET_RESPONSE_CALLBACKS("emberAfDiscoverCommandsGeneratedResponseCallback");
+    Callback::Callback<DefaultSuccessCallback> * cb = Callback::Callback<DefaultSuccessCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfReportAttributesCallback(ClusterId clusterId, uint8_t * message, uint16_t messageLen)
+{
+    ChipLogProgress(Zcl, "emberAfReportAttributeCallback:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+
+    NodeId sourceId = emberAfCurrentCommand()->source;
+    ChipLogProgress(Zcl, "  Source NodeId: %" PRIu64, sourceId);
+
+    EndpointId endpointId = emberAfCurrentCommand()->apsFrame->sourceEndpoint;
+    ChipLogProgress(Zcl, "  Source EndpointId: 0x%04x", endpointId);
+
+    // TODO onFailureCallback is just here because of the CHECK_MESSAGE_LENGTH macro. It needs to be removed.
+    Callback::Cancelable * onFailureCallback = nullptr;
+
+    while (messageLen)
+    {
+        CHECK_MESSAGE_LENGTH(2);
+        uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+        ChipLogProgress(Zcl, "  attributeId: 0x%04x", attributeId);
+
+        GET_REPORT_CALLBACK("emberAfReportAttributesCallback");
+
+        CHECK_MESSAGE_LENGTH(1);
+        uint8_t attributeType = chip::Encoding::Read8(message);
+        ChipLogProgress(Zcl, "  attributeType: 0x%02x", attributeType);
+
+        switch (attributeType)
+        {
+        case 0x00: // nodata / No data
+        case 0x0A: // data24 / 24-bit data
+        case 0x0C: // data40 / 40-bit data
+        case 0x0D: // data48 / 48-bit data
+        case 0x0E: // data56 / 56-bit data
+        case 0x1A: // map24 / 24-bit bitmap
+        case 0x1C: // map40 / 40-bit bitmap
+        case 0x1D: // map48 / 48-bit bitmap
+        case 0x1E: // map56 / 56-bit bitmap
+        case 0x22: // uint24 / Unsigned 24-bit integer
+        case 0x24: // uint40 / Unsigned 40-bit integer
+        case 0x25: // uint48 / Unsigned 48-bit integer
+        case 0x26: // uint56 / Unsigned 56-bit integer
+        case 0x2A: // int24 / Signed 24-bit integer
+        case 0x2C: // int40 / Signed 40-bit integer
+        case 0x2D: // int48 / Signed 48-bit integer
+        case 0x2E: // int56 / Signed 56-bit integer
+        case 0x38: // semi / Semi-precision
+        case 0x39: // single / Single precision
+        case 0x3A: // double / Double precision
+        case 0x41: // octstr / Octet string
+        case 0x42: // string / Character string
+        case 0x43: // octstr16 / Long octet string
+        case 0x44: // string16 / Long character string
+        case 0x48: // array / Array
+        case 0x49: // struct / Structure
+        case 0x50: // set / Set
+        case 0x51: // bag / Bag
+        case 0xE0: // ToD / Time of day
+        {
+            ChipLogError(Zcl, "attributeType 0x%02x is not supported", attributeType);
+            return true;
+        }
+
+        case 0x08: // data8 / 8-bit data
+        case 0x18: // map8 / 8-bit bitmap
+        case 0x20: // uint8 / Unsigned  8-bit integer
+        case 0x30: // enum8 / 8-bit enumeration
+        {
+            CHECK_MESSAGE_LENGTH(1);
+            uint8_t value = chip::Encoding::Read8(message);
+            ChipLogProgress(Zcl, "  value: 0x%02x", value);
+
+            Callback::Callback<Int8uAttributeCallback> * cb =
+                Callback::Callback<Int8uAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x09: // data16 / 16-bit data
+        case 0x19: // map16 / 16-bit bitmap
+        case 0x21: // uint16 / Unsigned 16-bit integer
+        case 0x31: // enum16 / 16-bit enumeration
+        case 0xE8: // clusterId / Cluster ID
+        case 0xE9: // attribId / Attribute ID
+        case 0xEA: // bacOID / BACnet OID
+        case 0xF1: // key128 / 128-bit security key
+        case 0xFF: // unk / Unknown
+        {
+            CHECK_MESSAGE_LENGTH(2);
+            uint16_t value = chip::Encoding::LittleEndian::Read16(message);
+            ChipLogProgress(Zcl, "  value: 0x%04x", value);
+
+            Callback::Callback<Int16uAttributeCallback> * cb =
+                Callback::Callback<Int16uAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x0B: // data32 / 32-bit data
+        case 0x1B: // map32 / 32-bit bitmap
+        case 0x23: // uint32 / Unsigned 32-bit integer
+        case 0xE1: // date / Date
+        case 0xE2: // UTC / UTCTime
+        {
+            CHECK_MESSAGE_LENGTH(4);
+            uint32_t value = chip::Encoding::LittleEndian::Read32(message);
+            ChipLogProgress(Zcl, "  value: 0x%08x", value);
+
+            Callback::Callback<Int32uAttributeCallback> * cb =
+                Callback::Callback<Int32uAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x0F: // data64 / 64-bit data
+        case 0x1F: // map64 / 64-bit bitmap
+        case 0x27: // uint64 / Unsigned 64-bit integer
+        case 0xF0: // EUI64 / IEEE address
+        {
+            CHECK_MESSAGE_LENGTH(8);
+            uint64_t value = chip::Encoding::LittleEndian::Read64(message);
+            ChipLogProgress(Zcl, "  value: 0x%16x", value);
+
+            Callback::Callback<Int64uAttributeCallback> * cb =
+                Callback::Callback<Int64uAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x10: // bool / Boolean
+        {
+            CHECK_MESSAGE_LENGTH(1);
+            uint8_t value = chip::Encoding::Read8(message);
+            ChipLogProgress(Zcl, "  value: %d", value);
+
+            Callback::Callback<BooleanAttributeCallback> * cb =
+                Callback::Callback<BooleanAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x28: // int8 / Signed 8-bit integer
+        {
+            CHECK_MESSAGE_LENGTH(1);
+            int8_t value = chip::CastToSigned(chip::Encoding::Read8(message));
+            ChipLogProgress(Zcl, "  value: %" PRId8, value);
+
+            Callback::Callback<Int8sAttributeCallback> * cb =
+                Callback::Callback<Int8sAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x29: // int16 / Signed 16-bit integer
+        {
+            CHECK_MESSAGE_LENGTH(2);
+            int16_t value = chip::CastToSigned(chip::Encoding::LittleEndian::Read16(message));
+            ChipLogProgress(Zcl, "  value: %" PRId16, value);
+
+            Callback::Callback<Int16sAttributeCallback> * cb =
+                Callback::Callback<Int16sAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x2B: // int32 / Signed 32-bit integer
+        {
+            CHECK_MESSAGE_LENGTH(4);
+            int32_t value = chip::CastToSigned(chip::Encoding::LittleEndian::Read32(message));
+            ChipLogProgress(Zcl, "  value: %" PRId32, value);
+
+            Callback::Callback<Int32sAttributeCallback> * cb =
+                Callback::Callback<Int32sAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x2F: // int64 / Signed 64-bit integer
+        {
+            CHECK_MESSAGE_LENGTH(8);
+            int64_t value = chip::CastToSigned(chip::Encoding::LittleEndian::Read64(message));
+            ChipLogProgress(Zcl, "  value: %" PRId64, value);
+
+            Callback::Callback<Int64sAttributeCallback> * cb =
+                Callback::Callback<Int64sAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+        }
+    }
+
+    return true;
+}
diff --git a/examples/all-clusters-app/all-clusters-common/gen/CHIPClientCallbacks.h b/examples/all-clusters-app/all-clusters-common/gen/CHIPClientCallbacks.h
new file mode 100644
index 0000000..14a3742
--- /dev/null
+++ b/examples/all-clusters-app/all-clusters-common/gen/CHIPClientCallbacks.h
@@ -0,0 +1,39 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+#pragma once
+
+#include <inttypes.h>
+
+// Global Response Callbacks
+typedef void (*DefaultSuccessCallback)(void * context);
+typedef void (*DefaultFailureCallback)(void * context, uint8_t status);
+typedef void (*BooleanAttributeCallback)(void * context, bool value);
+typedef void (*Int8uAttributeCallback)(void * context, uint8_t value);
+typedef void (*Int8sAttributeCallback)(void * context, int8_t value);
+typedef void (*Int16uAttributeCallback)(void * context, uint16_t value);
+typedef void (*Int16sAttributeCallback)(void * context, int16_t value);
+typedef void (*Int32uAttributeCallback)(void * context, uint32_t value);
+typedef void (*Int32sAttributeCallback)(void * context, int32_t value);
+typedef void (*Int64uAttributeCallback)(void * context, uint64_t value);
+typedef void (*Int64sAttributeCallback)(void * context, int64_t value);
+typedef void (*ReadReportingConfigurationReportedCallback)(void * context, uint16_t minInterval, uint16_t maxInterval);
+typedef void (*ReadReportingConfigurationReceivedCallback)(void * context, uint16_t timeout);
+
+// Cluster Specific Response Callbacks
diff --git a/examples/all-clusters-app/all-clusters-common/gen/CHIPClustersObjc.h b/examples/all-clusters-app/all-clusters-common/gen/CHIPClustersObjc.h
new file mode 100644
index 0000000..033de92
--- /dev/null
+++ b/examples/all-clusters-app/all-clusters-common/gen/CHIPClustersObjc.h
@@ -0,0 +1,536 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+#ifndef CHIP_CLUSTERS_H
+#define CHIP_CLUSTERS_H
+
+#import <Foundation/Foundation.h>
+
+typedef void (^ResponseHandler)(NSError * _Nullable error, NSDictionary * _Nullable values);
+
+@class CHIPDevice;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CHIPBarrierControl : NSObject
+
+- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
+- (BOOL)barrierControlGoToPercent:(uint8_t)percentOpen completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)barrierControlStop:(ResponseHandler)completionHandler;
+
+- (BOOL)readAttributeBarrierMovingState:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeBarrierSafetyStatus:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeBarrierCapabilities:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeBarrierPosition:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler;
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CHIPBasic : NSObject
+
+- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
+- (BOOL)mfgSpecificPing:(ResponseHandler)completionHandler;
+- (BOOL)resetToFactoryDefaults:(ResponseHandler)completionHandler;
+
+- (BOOL)readAttributeZclVersion:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePowerSource:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler;
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CHIPBinding : NSObject
+
+- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
+- (BOOL)bind:(uint64_t)nodeId
+              groupId:(uint16_t)groupId
+           endpointId:(uint8_t)endpointId
+            clusterId:(uint16_t)clusterId
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)unbind:(uint64_t)nodeId
+              groupId:(uint16_t)groupId
+           endpointId:(uint8_t)endpointId
+            clusterId:(uint16_t)clusterId
+    completionHandler:(ResponseHandler)completionHandler;
+
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler;
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CHIPColorControl : NSObject
+
+- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
+- (BOOL)moveColor:(int16_t)rateX
+                rateY:(int16_t)rateY
+          optionsMask:(uint8_t)optionsMask
+      optionsOverride:(uint8_t)optionsOverride
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)moveColorTemperature:(uint8_t)moveMode
+                        rate:(uint16_t)rate
+     colorTemperatureMinimum:(uint16_t)colorTemperatureMinimum
+     colorTemperatureMaximum:(uint16_t)colorTemperatureMaximum
+                 optionsMask:(uint8_t)optionsMask
+             optionsOverride:(uint8_t)optionsOverride
+           completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)moveHue:(uint8_t)moveMode
+                 rate:(uint8_t)rate
+          optionsMask:(uint8_t)optionsMask
+      optionsOverride:(uint8_t)optionsOverride
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)moveSaturation:(uint8_t)moveMode
+                  rate:(uint8_t)rate
+           optionsMask:(uint8_t)optionsMask
+       optionsOverride:(uint8_t)optionsOverride
+     completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)moveToColor:(uint16_t)colorX
+               colorY:(uint16_t)colorY
+       transitionTime:(uint16_t)transitionTime
+          optionsMask:(uint8_t)optionsMask
+      optionsOverride:(uint8_t)optionsOverride
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)moveToColorTemperature:(uint16_t)colorTemperature
+                transitionTime:(uint16_t)transitionTime
+                   optionsMask:(uint8_t)optionsMask
+               optionsOverride:(uint8_t)optionsOverride
+             completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)moveToHue:(uint8_t)hue
+            direction:(uint8_t)direction
+       transitionTime:(uint16_t)transitionTime
+          optionsMask:(uint8_t)optionsMask
+      optionsOverride:(uint8_t)optionsOverride
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)moveToHueAndSaturation:(uint8_t)hue
+                    saturation:(uint8_t)saturation
+                transitionTime:(uint16_t)transitionTime
+                   optionsMask:(uint8_t)optionsMask
+               optionsOverride:(uint8_t)optionsOverride
+             completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)moveToSaturation:(uint8_t)saturation
+          transitionTime:(uint16_t)transitionTime
+             optionsMask:(uint8_t)optionsMask
+         optionsOverride:(uint8_t)optionsOverride
+       completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)stepColor:(int16_t)stepX
+                stepY:(int16_t)stepY
+       transitionTime:(uint16_t)transitionTime
+          optionsMask:(uint8_t)optionsMask
+      optionsOverride:(uint8_t)optionsOverride
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)stepColorTemperature:(uint8_t)stepMode
+                    stepSize:(uint16_t)stepSize
+              transitionTime:(uint16_t)transitionTime
+     colorTemperatureMinimum:(uint16_t)colorTemperatureMinimum
+     colorTemperatureMaximum:(uint16_t)colorTemperatureMaximum
+                 optionsMask:(uint8_t)optionsMask
+             optionsOverride:(uint8_t)optionsOverride
+           completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)stepHue:(uint8_t)stepMode
+             stepSize:(uint8_t)stepSize
+       transitionTime:(uint8_t)transitionTime
+          optionsMask:(uint8_t)optionsMask
+      optionsOverride:(uint8_t)optionsOverride
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)stepSaturation:(uint8_t)stepMode
+              stepSize:(uint8_t)stepSize
+        transitionTime:(uint8_t)transitionTime
+           optionsMask:(uint8_t)optionsMask
+       optionsOverride:(uint8_t)optionsOverride
+     completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)stopMoveStep:(uint8_t)optionsMask
+      optionsOverride:(uint8_t)optionsOverride
+    completionHandler:(ResponseHandler)completionHandler;
+
+- (BOOL)readAttributeCurrentHue:(ResponseHandler)completionHandler;
+- (BOOL)configureAttributeCurrentHue:(uint16_t)minInterval
+                         maxInterval:(uint16_t)maxInterval
+                              change:(uint8_t)change
+                   completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)reportAttributeCurrentHue:(ResponseHandler)reportHandler;
+- (BOOL)readAttributeCurrentSaturation:(ResponseHandler)completionHandler;
+- (BOOL)configureAttributeCurrentSaturation:(uint16_t)minInterval
+                                maxInterval:(uint16_t)maxInterval
+                                     change:(uint8_t)change
+                          completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)reportAttributeCurrentSaturation:(ResponseHandler)reportHandler;
+- (BOOL)readAttributeRemainingTime:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeCurrentX:(ResponseHandler)completionHandler;
+- (BOOL)configureAttributeCurrentX:(uint16_t)minInterval
+                       maxInterval:(uint16_t)maxInterval
+                            change:(uint16_t)change
+                 completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)reportAttributeCurrentX:(ResponseHandler)reportHandler;
+- (BOOL)readAttributeCurrentY:(ResponseHandler)completionHandler;
+- (BOOL)configureAttributeCurrentY:(uint16_t)minInterval
+                       maxInterval:(uint16_t)maxInterval
+                            change:(uint16_t)change
+                 completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)reportAttributeCurrentY:(ResponseHandler)reportHandler;
+- (BOOL)readAttributeDriftCompensation:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeCompensationText:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorTemperature:(ResponseHandler)completionHandler;
+- (BOOL)configureAttributeColorTemperature:(uint16_t)minInterval
+                               maxInterval:(uint16_t)maxInterval
+                                    change:(uint16_t)change
+                         completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)reportAttributeColorTemperature:(ResponseHandler)reportHandler;
+- (BOOL)readAttributeColorMode:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorControlOptions:(ResponseHandler)completionHandler;
+- (BOOL)writeAttributeColorControlOptions:(uint8_t)value completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeNumberOfPrimaries:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary1X:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary1Y:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary1Intensity:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary2X:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary2Y:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary2Intensity:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary3X:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary3Y:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary3Intensity:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary4X:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary4Y:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary4Intensity:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary5X:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary5Y:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary5Intensity:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary6X:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary6Y:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary6Intensity:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeWhitePointX:(ResponseHandler)completionHandler;
+- (BOOL)writeAttributeWhitePointX:(uint16_t)value completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeWhitePointY:(ResponseHandler)completionHandler;
+- (BOOL)writeAttributeWhitePointY:(uint16_t)value completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorPointRX:(ResponseHandler)completionHandler;
+- (BOOL)writeAttributeColorPointRX:(uint16_t)value completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorPointRY:(ResponseHandler)completionHandler;
+- (BOOL)writeAttributeColorPointRY:(uint16_t)value completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorPointRIntensity:(ResponseHandler)completionHandler;
+- (BOOL)writeAttributeColorPointRIntensity:(uint8_t)value completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorPointGX:(ResponseHandler)completionHandler;
+- (BOOL)writeAttributeColorPointGX:(uint16_t)value completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorPointGY:(ResponseHandler)completionHandler;
+- (BOOL)writeAttributeColorPointGY:(uint16_t)value completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorPointGIntensity:(ResponseHandler)completionHandler;
+- (BOOL)writeAttributeColorPointGIntensity:(uint8_t)value completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorPointBX:(ResponseHandler)completionHandler;
+- (BOOL)writeAttributeColorPointBX:(uint16_t)value completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorPointBY:(ResponseHandler)completionHandler;
+- (BOOL)writeAttributeColorPointBY:(uint16_t)value completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorPointBIntensity:(ResponseHandler)completionHandler;
+- (BOOL)writeAttributeColorPointBIntensity:(uint8_t)value completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeEnhancedCurrentHue:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeEnhancedColorMode:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorLoopActive:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorLoopDirection:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorLoopTime:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorCapabilities:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorTempPhysicalMin:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorTempPhysicalMax:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeCoupleColorTempToLevelMinMireds:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeStartUpColorTemperatureMireds:(ResponseHandler)completionHandler;
+- (BOOL)writeAttributeStartUpColorTemperatureMireds:(uint16_t)value completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler;
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CHIPDoorLock : NSObject
+
+- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
+- (BOOL)clearAllPins:(ResponseHandler)completionHandler;
+- (BOOL)clearAllRfids:(ResponseHandler)completionHandler;
+- (BOOL)clearHolidaySchedule:(uint8_t)scheduleId completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)clearPin:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)clearRfid:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)clearWeekdaySchedule:(uint8_t)scheduleId userId:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)clearYeardaySchedule:(uint8_t)scheduleId userId:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)getHolidaySchedule:(uint8_t)scheduleId completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)getLogRecord:(uint16_t)logIndex completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)getPin:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)getRfid:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)getUserType:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)getWeekdaySchedule:(uint8_t)scheduleId userId:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)getYeardaySchedule:(uint8_t)scheduleId userId:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)lockDoor:(char *)pin completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)setHolidaySchedule:(uint8_t)scheduleId
+                localStartTime:(uint32_t)localStartTime
+                  localEndTime:(uint32_t)localEndTime
+    operatingModeDuringHoliday:(uint8_t)operatingModeDuringHoliday
+             completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)setPin:(uint16_t)userId
+           userStatus:(uint8_t)userStatus
+             userType:(uint8_t)userType
+                  pin:(char *)pin
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)setRfid:(uint16_t)userId
+           userStatus:(uint8_t)userStatus
+             userType:(uint8_t)userType
+                   id:(char *)id
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)setUserType:(uint16_t)userId userType:(uint8_t)userType completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)setWeekdaySchedule:(uint8_t)scheduleId
+                    userId:(uint16_t)userId
+                  daysMask:(uint8_t)daysMask
+                 startHour:(uint8_t)startHour
+               startMinute:(uint8_t)startMinute
+                   endHour:(uint8_t)endHour
+                 endMinute:(uint8_t)endMinute
+         completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)setYeardaySchedule:(uint8_t)scheduleId
+                    userId:(uint16_t)userId
+            localStartTime:(uint32_t)localStartTime
+              localEndTime:(uint32_t)localEndTime
+         completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)unlockDoor:(char *)pin completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)unlockWithTimeout:(uint16_t)timeoutInSeconds pin:(char *)pin completionHandler:(ResponseHandler)completionHandler;
+
+- (BOOL)readAttributeLockState:(ResponseHandler)completionHandler;
+- (BOOL)configureAttributeLockState:(uint16_t)minInterval
+                        maxInterval:(uint16_t)maxInterval
+                  completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)reportAttributeLockState:(ResponseHandler)reportHandler;
+- (BOOL)readAttributeLockType:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeActuatorEnabled:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler;
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CHIPGroups : NSObject
+
+- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
+- (BOOL)addGroup:(uint16_t)groupId groupName:(char *)groupName completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)addGroupIfIdentifying:(uint16_t)groupId groupName:(char *)groupName completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)getGroupMembership:(uint8_t)groupCount groupList:(uint16_t)groupList completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)removeAllGroups:(ResponseHandler)completionHandler;
+- (BOOL)removeGroup:(uint16_t)groupId completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)viewGroup:(uint16_t)groupId completionHandler:(ResponseHandler)completionHandler;
+
+- (BOOL)readAttributeNameSupport:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler;
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CHIPIasZone : NSObject
+
+- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
+
+- (BOOL)readAttributeZoneState:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeZoneType:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeZoneStatus:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeIasCieAddress:(ResponseHandler)completionHandler;
+- (BOOL)writeAttributeIasCieAddress:(uint64_t)value completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeZoneId:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler;
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CHIPIdentify : NSObject
+
+- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
+- (BOOL)identify:(uint16_t)identifyTime completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)identifyQuery:(ResponseHandler)completionHandler;
+
+- (BOOL)readAttributeIdentifyTime:(ResponseHandler)completionHandler;
+- (BOOL)writeAttributeIdentifyTime:(uint16_t)value completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler;
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CHIPLevelControl : NSObject
+
+- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
+- (BOOL)move:(uint8_t)moveMode
+                 rate:(uint8_t)rate
+           optionMask:(uint8_t)optionMask
+       optionOverride:(uint8_t)optionOverride
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)moveToLevel:(uint8_t)level
+       transitionTime:(uint16_t)transitionTime
+           optionMask:(uint8_t)optionMask
+       optionOverride:(uint8_t)optionOverride
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)moveToLevelWithOnOff:(uint8_t)level
+              transitionTime:(uint16_t)transitionTime
+           completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)moveWithOnOff:(uint8_t)moveMode rate:(uint8_t)rate completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)step:(uint8_t)stepMode
+             stepSize:(uint8_t)stepSize
+       transitionTime:(uint16_t)transitionTime
+           optionMask:(uint8_t)optionMask
+       optionOverride:(uint8_t)optionOverride
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)stepWithOnOff:(uint8_t)stepMode
+             stepSize:(uint8_t)stepSize
+       transitionTime:(uint16_t)transitionTime
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)stop:(uint8_t)optionMask optionOverride:(uint8_t)optionOverride completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)stopWithOnOff:(ResponseHandler)completionHandler;
+
+- (BOOL)readAttributeCurrentLevel:(ResponseHandler)completionHandler;
+- (BOOL)configureAttributeCurrentLevel:(uint16_t)minInterval
+                           maxInterval:(uint16_t)maxInterval
+                                change:(uint8_t)change
+                     completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)reportAttributeCurrentLevel:(ResponseHandler)reportHandler;
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler;
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CHIPOnOff : NSObject
+
+- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
+- (BOOL)off:(ResponseHandler)completionHandler;
+- (BOOL)on:(ResponseHandler)completionHandler;
+- (BOOL)toggle:(ResponseHandler)completionHandler;
+
+- (BOOL)readAttributeOnOff:(ResponseHandler)completionHandler;
+- (BOOL)configureAttributeOnOff:(uint16_t)minInterval
+                    maxInterval:(uint16_t)maxInterval
+              completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)reportAttributeOnOff:(ResponseHandler)reportHandler;
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler;
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CHIPScenes : NSObject
+
+- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
+- (BOOL)addScene:(uint16_t)groupId
+              sceneId:(uint8_t)sceneId
+       transitionTime:(uint16_t)transitionTime
+            sceneName:(char *)sceneName
+            clusterId:(uint16_t)clusterId
+               length:(uint8_t)length
+                value:(uint8_t)value
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)getSceneMembership:(uint16_t)groupId completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)recallScene:(uint16_t)groupId
+              sceneId:(uint8_t)sceneId
+       transitionTime:(uint16_t)transitionTime
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)removeAllScenes:(uint16_t)groupId completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)removeScene:(uint16_t)groupId sceneId:(uint8_t)sceneId completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)storeScene:(uint16_t)groupId sceneId:(uint8_t)sceneId completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)viewScene:(uint16_t)groupId sceneId:(uint8_t)sceneId completionHandler:(ResponseHandler)completionHandler;
+
+- (BOOL)readAttributeSceneCount:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeCurrentScene:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeCurrentGroup:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeSceneValid:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeNameSupport:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler;
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CHIPTemperatureMeasurement : NSObject
+
+- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
+
+- (BOOL)readAttributeMeasuredValue:(ResponseHandler)completionHandler;
+- (BOOL)configureAttributeMeasuredValue:(uint16_t)minInterval
+                            maxInterval:(uint16_t)maxInterval
+                                 change:(int16_t)change
+                      completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)reportAttributeMeasuredValue:(ResponseHandler)reportHandler;
+- (BOOL)readAttributeMinMeasuredValue:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeMaxMeasuredValue:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler;
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif /* CHIP_CLUSTERS_H */
diff --git a/examples/all-clusters-app/all-clusters-common/gen/CHIPClustersObjc.mm b/examples/all-clusters-app/all-clusters-common/gen/CHIPClustersObjc.mm
new file mode 100644
index 0000000..702aec4
--- /dev/null
+++ b/examples/all-clusters-app/all-clusters-common/gen/CHIPClustersObjc.mm
@@ -0,0 +1,4832 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+#import <Foundation/Foundation.h>
+
+#import "CHIPDevice.h"
+#import "CHIPDevice_Internal.h"
+#import "gen/CHIPClientCallbacks.h"
+#import "gen/CHIPClustersObjc.h"
+
+#include <controller/CHIPClusters.h>
+
+using namespace ::chip;
+
+class CHIPDefaultSuccessCallbackBridge : public Callback::Callback<DefaultSuccessCallback> {
+public:
+    CHIPDefaultSuccessCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DefaultSuccessCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDefaultSuccessCallbackBridge() {};
+
+    static void CallbackFn(void * context)
+    {
+        CHIPDefaultSuccessCallbackBridge * callback = reinterpret_cast<CHIPDefaultSuccessCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, nil);
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDefaultFailureCallbackBridge : public Callback::Callback<DefaultFailureCallback> {
+public:
+    CHIPDefaultFailureCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DefaultFailureCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDefaultFailureCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint8_t status)
+    {
+        CHIPDefaultFailureCallbackBridge * callback = reinterpret_cast<CHIPDefaultFailureCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                NSError * error = [NSError errorWithDomain:@"ZCL" code:status userInfo:@ { NSLocalizedDescriptionKey : @"" }];
+                callback->mHandler(error, nil);
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPUnsupportedAttributeCallbackBridge : public Callback::Callback<DefaultSuccessCallback> {
+public:
+    CHIPUnsupportedAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DefaultSuccessCallback>(CallbackFn, this)
+    {
+    }
+
+    ~CHIPUnsupportedAttributeCallbackBridge() {};
+
+    static void CallbackFn(void * context)
+    {
+        CHIPUnsupportedAttributeCallbackBridge * callback = reinterpret_cast<CHIPUnsupportedAttributeCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                NSError * error = [NSError errorWithDomain:@"ZCL"
+                                                      code:0
+                                                  userInfo:@ { NSLocalizedDescriptionKey : @"Unsuported attribute type" }];
+                callback->mHandler(error, nil);
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPBooleanAttributeCallbackBridge : public Callback::Callback<BooleanAttributeCallback> {
+public:
+    CHIPBooleanAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
+        : Callback::Callback<BooleanAttributeCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+        , mKeepAlive(keepAlive)
+    {
+    }
+
+    ~CHIPBooleanAttributeCallbackBridge() {};
+
+    static void CallbackFn(void * context, bool value)
+    {
+        CHIPBooleanAttributeCallbackBridge * callback = reinterpret_cast<CHIPBooleanAttributeCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ { @"value" : [NSNumber numberWithBool:value] });
+                if (!callback->mKeepAlive) {
+                    callback->Cancel();
+                    delete callback;
+                }
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+    bool mKeepAlive;
+};
+
+class CHIPInt8uAttributeCallbackBridge : public Callback::Callback<Int8uAttributeCallback> {
+public:
+    CHIPInt8uAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
+        : Callback::Callback<Int8uAttributeCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+        , mKeepAlive(keepAlive)
+    {
+    }
+
+    ~CHIPInt8uAttributeCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint8_t value)
+    {
+        CHIPInt8uAttributeCallbackBridge * callback = reinterpret_cast<CHIPInt8uAttributeCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ { @"value" : [NSNumber numberWithUnsignedChar:value] });
+                if (!callback->mKeepAlive) {
+                    callback->Cancel();
+                    delete callback;
+                }
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+    bool mKeepAlive;
+};
+
+class CHIPInt8sAttributeCallbackBridge : public Callback::Callback<Int8sAttributeCallback> {
+public:
+    CHIPInt8sAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
+        : Callback::Callback<Int8sAttributeCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+        , mKeepAlive(keepAlive)
+    {
+    }
+
+    ~CHIPInt8sAttributeCallbackBridge() {};
+
+    static void CallbackFn(void * context, int8_t value)
+    {
+        CHIPInt8sAttributeCallbackBridge * callback = reinterpret_cast<CHIPInt8sAttributeCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ { @"value" : [NSNumber numberWithChar:value] });
+                if (!callback->mKeepAlive) {
+                    callback->Cancel();
+                    delete callback;
+                }
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+    bool mKeepAlive;
+};
+
+class CHIPInt16uAttributeCallbackBridge : public Callback::Callback<Int16uAttributeCallback> {
+public:
+    CHIPInt16uAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
+        : Callback::Callback<Int16uAttributeCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+        , mKeepAlive(keepAlive)
+    {
+    }
+
+    ~CHIPInt16uAttributeCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint16_t value)
+    {
+        CHIPInt16uAttributeCallbackBridge * callback = reinterpret_cast<CHIPInt16uAttributeCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ { @"value" : [NSNumber numberWithUnsignedShort:value] });
+                if (!callback->mKeepAlive) {
+                    callback->Cancel();
+                    delete callback;
+                }
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+    bool mKeepAlive;
+};
+
+class CHIPInt16sAttributeCallbackBridge : public Callback::Callback<Int16sAttributeCallback> {
+public:
+    CHIPInt16sAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
+        : Callback::Callback<Int16sAttributeCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+        , mKeepAlive(keepAlive)
+    {
+    }
+
+    ~CHIPInt16sAttributeCallbackBridge() {};
+
+    static void CallbackFn(void * context, int16_t value)
+    {
+        CHIPInt16sAttributeCallbackBridge * callback = reinterpret_cast<CHIPInt16sAttributeCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ { @"value" : [NSNumber numberWithShort:value] });
+                if (!callback->mKeepAlive) {
+                    callback->Cancel();
+                    delete callback;
+                }
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+    bool mKeepAlive;
+};
+
+@interface CHIPBarrierControl ()
+
+@property (readonly) Controller::BarrierControlCluster cppCluster;
+@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
+@end
+
+@implementation CHIPBarrierControl
+
+- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(EndpointId)endpoint queue:(dispatch_queue_t)queue
+{
+    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
+
+    if (err != CHIP_NO_ERROR) {
+        return nil;
+    }
+
+    if (self = [super init]) {
+        _callbackQueue = queue;
+    }
+
+    return self;
+}
+
+- (BOOL)barrierControlGoToPercent:(uint8_t)percentOpen completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.BarrierControlGoToPercent(onSuccess->Cancel(), onFailure->Cancel(), percentOpen);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)barrierControlStop:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.BarrierControlStop(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeBarrierMovingState:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeBarrierMovingState(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeBarrierSafetyStatus:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeBarrierSafetyStatus(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeBarrierCapabilities:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeBarrierCapabilities(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeBarrierPosition:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeBarrierPosition(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+@end
+
+@interface CHIPBasic ()
+
+@property (readonly) Controller::BasicCluster cppCluster;
+@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
+@end
+
+@implementation CHIPBasic
+
+- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(EndpointId)endpoint queue:(dispatch_queue_t)queue
+{
+    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
+
+    if (err != CHIP_NO_ERROR) {
+        return nil;
+    }
+
+    if (self = [super init]) {
+        _callbackQueue = queue;
+    }
+
+    return self;
+}
+
+- (BOOL)mfgSpecificPing:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.MfgSpecificPing(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)resetToFactoryDefaults:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ResetToFactoryDefaults(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeZclVersion:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeZclVersion(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePowerSource:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePowerSource(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+@end
+
+@interface CHIPBinding ()
+
+@property (readonly) Controller::BindingCluster cppCluster;
+@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
+@end
+
+@implementation CHIPBinding
+
+- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(EndpointId)endpoint queue:(dispatch_queue_t)queue
+{
+    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
+
+    if (err != CHIP_NO_ERROR) {
+        return nil;
+    }
+
+    if (self = [super init]) {
+        _callbackQueue = queue;
+    }
+
+    return self;
+}
+
+- (BOOL)bind:(uint64_t)nodeId
+              groupId:(uint16_t)groupId
+           endpointId:(uint8_t)endpointId
+            clusterId:(uint16_t)clusterId
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.Bind(onSuccess->Cancel(), onFailure->Cancel(), nodeId, groupId, endpointId, clusterId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)unbind:(uint64_t)nodeId
+              groupId:(uint16_t)groupId
+           endpointId:(uint8_t)endpointId
+            clusterId:(uint16_t)clusterId
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.Unbind(onSuccess->Cancel(), onFailure->Cancel(), nodeId, groupId, endpointId, clusterId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+@end
+
+@interface CHIPColorControl ()
+
+@property (readonly) Controller::ColorControlCluster cppCluster;
+@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
+@end
+
+@implementation CHIPColorControl
+
+- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(EndpointId)endpoint queue:(dispatch_queue_t)queue
+{
+    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
+
+    if (err != CHIP_NO_ERROR) {
+        return nil;
+    }
+
+    if (self = [super init]) {
+        _callbackQueue = queue;
+    }
+
+    return self;
+}
+
+- (BOOL)moveColor:(int16_t)rateX
+                rateY:(int16_t)rateY
+          optionsMask:(uint8_t)optionsMask
+      optionsOverride:(uint8_t)optionsOverride
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err
+        = self.cppCluster.MoveColor(onSuccess->Cancel(), onFailure->Cancel(), rateX, rateY, optionsMask, optionsOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)moveColorTemperature:(uint8_t)moveMode
+                        rate:(uint16_t)rate
+     colorTemperatureMinimum:(uint16_t)colorTemperatureMinimum
+     colorTemperatureMaximum:(uint16_t)colorTemperatureMaximum
+                 optionsMask:(uint8_t)optionsMask
+             optionsOverride:(uint8_t)optionsOverride
+           completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.MoveColorTemperature(onSuccess->Cancel(), onFailure->Cancel(), moveMode, rate,
+        colorTemperatureMinimum, colorTemperatureMaximum, optionsMask, optionsOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)moveHue:(uint8_t)moveMode
+                 rate:(uint8_t)rate
+          optionsMask:(uint8_t)optionsMask
+      optionsOverride:(uint8_t)optionsOverride
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err
+        = self.cppCluster.MoveHue(onSuccess->Cancel(), onFailure->Cancel(), moveMode, rate, optionsMask, optionsOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)moveSaturation:(uint8_t)moveMode
+                  rate:(uint8_t)rate
+           optionsMask:(uint8_t)optionsMask
+       optionsOverride:(uint8_t)optionsOverride
+     completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err
+        = self.cppCluster.MoveSaturation(onSuccess->Cancel(), onFailure->Cancel(), moveMode, rate, optionsMask, optionsOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)moveToColor:(uint16_t)colorX
+               colorY:(uint16_t)colorY
+       transitionTime:(uint16_t)transitionTime
+          optionsMask:(uint8_t)optionsMask
+      optionsOverride:(uint8_t)optionsOverride
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.MoveToColor(
+        onSuccess->Cancel(), onFailure->Cancel(), colorX, colorY, transitionTime, optionsMask, optionsOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)moveToColorTemperature:(uint16_t)colorTemperature
+                transitionTime:(uint16_t)transitionTime
+                   optionsMask:(uint8_t)optionsMask
+               optionsOverride:(uint8_t)optionsOverride
+             completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.MoveToColorTemperature(
+        onSuccess->Cancel(), onFailure->Cancel(), colorTemperature, transitionTime, optionsMask, optionsOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)moveToHue:(uint8_t)hue
+            direction:(uint8_t)direction
+       transitionTime:(uint16_t)transitionTime
+          optionsMask:(uint8_t)optionsMask
+      optionsOverride:(uint8_t)optionsOverride
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.MoveToHue(
+        onSuccess->Cancel(), onFailure->Cancel(), hue, direction, transitionTime, optionsMask, optionsOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)moveToHueAndSaturation:(uint8_t)hue
+                    saturation:(uint8_t)saturation
+                transitionTime:(uint16_t)transitionTime
+                   optionsMask:(uint8_t)optionsMask
+               optionsOverride:(uint8_t)optionsOverride
+             completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.MoveToHueAndSaturation(
+        onSuccess->Cancel(), onFailure->Cancel(), hue, saturation, transitionTime, optionsMask, optionsOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)moveToSaturation:(uint8_t)saturation
+          transitionTime:(uint16_t)transitionTime
+             optionsMask:(uint8_t)optionsMask
+         optionsOverride:(uint8_t)optionsOverride
+       completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.MoveToSaturation(
+        onSuccess->Cancel(), onFailure->Cancel(), saturation, transitionTime, optionsMask, optionsOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)stepColor:(int16_t)stepX
+                stepY:(int16_t)stepY
+       transitionTime:(uint16_t)transitionTime
+          optionsMask:(uint8_t)optionsMask
+      optionsOverride:(uint8_t)optionsOverride
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.StepColor(
+        onSuccess->Cancel(), onFailure->Cancel(), stepX, stepY, transitionTime, optionsMask, optionsOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)stepColorTemperature:(uint8_t)stepMode
+                    stepSize:(uint16_t)stepSize
+              transitionTime:(uint16_t)transitionTime
+     colorTemperatureMinimum:(uint16_t)colorTemperatureMinimum
+     colorTemperatureMaximum:(uint16_t)colorTemperatureMaximum
+                 optionsMask:(uint8_t)optionsMask
+             optionsOverride:(uint8_t)optionsOverride
+           completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.StepColorTemperature(onSuccess->Cancel(), onFailure->Cancel(), stepMode, stepSize,
+        transitionTime, colorTemperatureMinimum, colorTemperatureMaximum, optionsMask, optionsOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)stepHue:(uint8_t)stepMode
+             stepSize:(uint8_t)stepSize
+       transitionTime:(uint8_t)transitionTime
+          optionsMask:(uint8_t)optionsMask
+      optionsOverride:(uint8_t)optionsOverride
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.StepHue(
+        onSuccess->Cancel(), onFailure->Cancel(), stepMode, stepSize, transitionTime, optionsMask, optionsOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)stepSaturation:(uint8_t)stepMode
+              stepSize:(uint8_t)stepSize
+        transitionTime:(uint8_t)transitionTime
+           optionsMask:(uint8_t)optionsMask
+       optionsOverride:(uint8_t)optionsOverride
+     completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.StepSaturation(
+        onSuccess->Cancel(), onFailure->Cancel(), stepMode, stepSize, transitionTime, optionsMask, optionsOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)stopMoveStep:(uint8_t)optionsMask
+      optionsOverride:(uint8_t)optionsOverride
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.StopMoveStep(onSuccess->Cancel(), onFailure->Cancel(), optionsMask, optionsOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeCurrentHue:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeCurrentHue(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)configureAttributeCurrentHue:(uint16_t)minInterval
+                         maxInterval:(uint16_t)maxInterval
+                              change:(uint8_t)change
+                   completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err
+        = self.cppCluster.ConfigureAttributeCurrentHue(onSuccess->Cancel(), onFailure->Cancel(), minInterval, maxInterval, change);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)reportAttributeCurrentHue:(ResponseHandler)reportHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onReport = new CHIPInt8uAttributeCallbackBridge(reportHandler, _callbackQueue, true);
+    if (!onReport) {
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReportAttributeCurrentHue(onReport->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onReport;
+        return NO;
+    }
+
+    return YES;
+}
+
+- (BOOL)readAttributeCurrentSaturation:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeCurrentSaturation(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)configureAttributeCurrentSaturation:(uint16_t)minInterval
+                                maxInterval:(uint16_t)maxInterval
+                                     change:(uint8_t)change
+                          completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ConfigureAttributeCurrentSaturation(
+        onSuccess->Cancel(), onFailure->Cancel(), minInterval, maxInterval, change);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)reportAttributeCurrentSaturation:(ResponseHandler)reportHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onReport = new CHIPInt8uAttributeCallbackBridge(reportHandler, _callbackQueue, true);
+    if (!onReport) {
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReportAttributeCurrentSaturation(onReport->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onReport;
+        return NO;
+    }
+
+    return YES;
+}
+
+- (BOOL)readAttributeRemainingTime:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeRemainingTime(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeCurrentX:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeCurrentX(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)configureAttributeCurrentX:(uint16_t)minInterval
+                       maxInterval:(uint16_t)maxInterval
+                            change:(uint16_t)change
+                 completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err
+        = self.cppCluster.ConfigureAttributeCurrentX(onSuccess->Cancel(), onFailure->Cancel(), minInterval, maxInterval, change);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)reportAttributeCurrentX:(ResponseHandler)reportHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onReport = new CHIPInt16uAttributeCallbackBridge(reportHandler, _callbackQueue, true);
+    if (!onReport) {
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReportAttributeCurrentX(onReport->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onReport;
+        return NO;
+    }
+
+    return YES;
+}
+
+- (BOOL)readAttributeCurrentY:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeCurrentY(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)configureAttributeCurrentY:(uint16_t)minInterval
+                       maxInterval:(uint16_t)maxInterval
+                            change:(uint16_t)change
+                 completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err
+        = self.cppCluster.ConfigureAttributeCurrentY(onSuccess->Cancel(), onFailure->Cancel(), minInterval, maxInterval, change);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)reportAttributeCurrentY:(ResponseHandler)reportHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onReport = new CHIPInt16uAttributeCallbackBridge(reportHandler, _callbackQueue, true);
+    if (!onReport) {
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReportAttributeCurrentY(onReport->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onReport;
+        return NO;
+    }
+
+    return YES;
+}
+
+- (BOOL)readAttributeDriftCompensation:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeDriftCompensation(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeCompensationText:(ResponseHandler)completionHandler
+{
+    CHIPUnsupportedAttributeCallbackBridge * onSuccess
+        = new CHIPUnsupportedAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeCompensationText(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorTemperature:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorTemperature(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)configureAttributeColorTemperature:(uint16_t)minInterval
+                               maxInterval:(uint16_t)maxInterval
+                                    change:(uint16_t)change
+                         completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ConfigureAttributeColorTemperature(
+        onSuccess->Cancel(), onFailure->Cancel(), minInterval, maxInterval, change);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)reportAttributeColorTemperature:(ResponseHandler)reportHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onReport = new CHIPInt16uAttributeCallbackBridge(reportHandler, _callbackQueue, true);
+    if (!onReport) {
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReportAttributeColorTemperature(onReport->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onReport;
+        return NO;
+    }
+
+    return YES;
+}
+
+- (BOOL)readAttributeColorMode:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorMode(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorControlOptions:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorControlOptions(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)writeAttributeColorControlOptions:(uint8_t)value completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.WriteAttributeColorControlOptions(onSuccess->Cancel(), onFailure->Cancel(), value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeNumberOfPrimaries:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeNumberOfPrimaries(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary1X:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary1X(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary1Y:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary1Y(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary1Intensity:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary1Intensity(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary2X:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary2X(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary2Y:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary2Y(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary2Intensity:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary2Intensity(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary3X:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary3X(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary3Y:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary3Y(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary3Intensity:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary3Intensity(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary4X:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary4X(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary4Y:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary4Y(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary4Intensity:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary4Intensity(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary5X:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary5X(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary5Y:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary5Y(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary5Intensity:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary5Intensity(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary6X:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary6X(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary6Y:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary6Y(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary6Intensity:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary6Intensity(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeWhitePointX:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeWhitePointX(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)writeAttributeWhitePointX:(uint16_t)value completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.WriteAttributeWhitePointX(onSuccess->Cancel(), onFailure->Cancel(), value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeWhitePointY:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeWhitePointY(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)writeAttributeWhitePointY:(uint16_t)value completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.WriteAttributeWhitePointY(onSuccess->Cancel(), onFailure->Cancel(), value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorPointRX:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorPointRX(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)writeAttributeColorPointRX:(uint16_t)value completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.WriteAttributeColorPointRX(onSuccess->Cancel(), onFailure->Cancel(), value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorPointRY:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorPointRY(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)writeAttributeColorPointRY:(uint16_t)value completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.WriteAttributeColorPointRY(onSuccess->Cancel(), onFailure->Cancel(), value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorPointRIntensity:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorPointRIntensity(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)writeAttributeColorPointRIntensity:(uint8_t)value completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.WriteAttributeColorPointRIntensity(onSuccess->Cancel(), onFailure->Cancel(), value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorPointGX:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorPointGX(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)writeAttributeColorPointGX:(uint16_t)value completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.WriteAttributeColorPointGX(onSuccess->Cancel(), onFailure->Cancel(), value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorPointGY:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorPointGY(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)writeAttributeColorPointGY:(uint16_t)value completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.WriteAttributeColorPointGY(onSuccess->Cancel(), onFailure->Cancel(), value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorPointGIntensity:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorPointGIntensity(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)writeAttributeColorPointGIntensity:(uint8_t)value completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.WriteAttributeColorPointGIntensity(onSuccess->Cancel(), onFailure->Cancel(), value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorPointBX:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorPointBX(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)writeAttributeColorPointBX:(uint16_t)value completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.WriteAttributeColorPointBX(onSuccess->Cancel(), onFailure->Cancel(), value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorPointBY:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorPointBY(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)writeAttributeColorPointBY:(uint16_t)value completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.WriteAttributeColorPointBY(onSuccess->Cancel(), onFailure->Cancel(), value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorPointBIntensity:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorPointBIntensity(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)writeAttributeColorPointBIntensity:(uint8_t)value completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.WriteAttributeColorPointBIntensity(onSuccess->Cancel(), onFailure->Cancel(), value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeEnhancedCurrentHue:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeEnhancedCurrentHue(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeEnhancedColorMode:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeEnhancedColorMode(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorLoopActive:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorLoopActive(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorLoopDirection:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorLoopDirection(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorLoopTime:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorLoopTime(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorCapabilities:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorCapabilities(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorTempPhysicalMin:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorTempPhysicalMin(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorTempPhysicalMax:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorTempPhysicalMax(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeCoupleColorTempToLevelMinMireds:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeCoupleColorTempToLevelMinMireds(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeStartUpColorTemperatureMireds:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeStartUpColorTemperatureMireds(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)writeAttributeStartUpColorTemperatureMireds:(uint16_t)value completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.WriteAttributeStartUpColorTemperatureMireds(onSuccess->Cancel(), onFailure->Cancel(), value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+@end
+
+@interface CHIPDoorLock ()
+
+@property (readonly) Controller::DoorLockCluster cppCluster;
+@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
+@end
+
+@implementation CHIPDoorLock
+
+- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(EndpointId)endpoint queue:(dispatch_queue_t)queue
+{
+    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
+
+    if (err != CHIP_NO_ERROR) {
+        return nil;
+    }
+
+    if (self = [super init]) {
+        _callbackQueue = queue;
+    }
+
+    return self;
+}
+
+- (BOOL)clearAllPins:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ClearAllPins(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)clearAllRfids:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ClearAllRfids(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)clearHolidaySchedule:(uint8_t)scheduleId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ClearHolidaySchedule(onSuccess->Cancel(), onFailure->Cancel(), scheduleId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)clearPin:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ClearPin(onSuccess->Cancel(), onFailure->Cancel(), userId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)clearRfid:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ClearRfid(onSuccess->Cancel(), onFailure->Cancel(), userId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)clearWeekdaySchedule:(uint8_t)scheduleId userId:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ClearWeekdaySchedule(onSuccess->Cancel(), onFailure->Cancel(), scheduleId, userId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)clearYeardaySchedule:(uint8_t)scheduleId userId:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ClearYeardaySchedule(onSuccess->Cancel(), onFailure->Cancel(), scheduleId, userId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)getHolidaySchedule:(uint8_t)scheduleId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.GetHolidaySchedule(onSuccess->Cancel(), onFailure->Cancel(), scheduleId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)getLogRecord:(uint16_t)logIndex completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.GetLogRecord(onSuccess->Cancel(), onFailure->Cancel(), logIndex);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)getPin:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.GetPin(onSuccess->Cancel(), onFailure->Cancel(), userId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)getRfid:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.GetRfid(onSuccess->Cancel(), onFailure->Cancel(), userId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)getUserType:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.GetUserType(onSuccess->Cancel(), onFailure->Cancel(), userId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)getWeekdaySchedule:(uint8_t)scheduleId userId:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.GetWeekdaySchedule(onSuccess->Cancel(), onFailure->Cancel(), scheduleId, userId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)getYeardaySchedule:(uint8_t)scheduleId userId:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.GetYeardaySchedule(onSuccess->Cancel(), onFailure->Cancel(), scheduleId, userId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)lockDoor:(char *)pin completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDoorLockClusterLockDoorResponseCallbackBridge * onSuccess
+        = new CHIPDoorLockClusterLockDoorResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.LockDoor(onSuccess->Cancel(), onFailure->Cancel(), pin);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)setHolidaySchedule:(uint8_t)scheduleId
+                localStartTime:(uint32_t)localStartTime
+                  localEndTime:(uint32_t)localEndTime
+    operatingModeDuringHoliday:(uint8_t)operatingModeDuringHoliday
+             completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.SetHolidaySchedule(
+        onSuccess->Cancel(), onFailure->Cancel(), scheduleId, localStartTime, localEndTime, operatingModeDuringHoliday);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)setPin:(uint16_t)userId
+           userStatus:(uint8_t)userStatus
+             userType:(uint8_t)userType
+                  pin:(char *)pin
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.SetPin(onSuccess->Cancel(), onFailure->Cancel(), userId, userStatus, userType, pin);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)setRfid:(uint16_t)userId
+           userStatus:(uint8_t)userStatus
+             userType:(uint8_t)userType
+                   id:(char *)id
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.SetRfid(onSuccess->Cancel(), onFailure->Cancel(), userId, userStatus, userType, id);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)setUserType:(uint16_t)userId userType:(uint8_t)userType completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.SetUserType(onSuccess->Cancel(), onFailure->Cancel(), userId, userType);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)setWeekdaySchedule:(uint8_t)scheduleId
+                    userId:(uint16_t)userId
+                  daysMask:(uint8_t)daysMask
+                 startHour:(uint8_t)startHour
+               startMinute:(uint8_t)startMinute
+                   endHour:(uint8_t)endHour
+                 endMinute:(uint8_t)endMinute
+         completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.SetWeekdaySchedule(
+        onSuccess->Cancel(), onFailure->Cancel(), scheduleId, userId, daysMask, startHour, startMinute, endHour, endMinute);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)setYeardaySchedule:(uint8_t)scheduleId
+                    userId:(uint16_t)userId
+            localStartTime:(uint32_t)localStartTime
+              localEndTime:(uint32_t)localEndTime
+         completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.SetYeardaySchedule(
+        onSuccess->Cancel(), onFailure->Cancel(), scheduleId, userId, localStartTime, localEndTime);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)unlockDoor:(char *)pin completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDoorLockClusterUnlockDoorResponseCallbackBridge * onSuccess
+        = new CHIPDoorLockClusterUnlockDoorResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.UnlockDoor(onSuccess->Cancel(), onFailure->Cancel(), pin);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)unlockWithTimeout:(uint16_t)timeoutInSeconds pin:(char *)pin completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.UnlockWithTimeout(onSuccess->Cancel(), onFailure->Cancel(), timeoutInSeconds, pin);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeLockState:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeLockState(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)configureAttributeLockState:(uint16_t)minInterval
+                        maxInterval:(uint16_t)maxInterval
+                  completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err
+        = self.cppCluster.ConfigureAttributeLockState(onSuccess->Cancel(), onFailure->Cancel(), minInterval, maxInterval);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)reportAttributeLockState:(ResponseHandler)reportHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onReport = new CHIPInt8uAttributeCallbackBridge(reportHandler, _callbackQueue, true);
+    if (!onReport) {
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReportAttributeLockState(onReport->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onReport;
+        return NO;
+    }
+
+    return YES;
+}
+
+- (BOOL)readAttributeLockType:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeLockType(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeActuatorEnabled:(ResponseHandler)completionHandler
+{
+    CHIPBooleanAttributeCallbackBridge * onSuccess = new CHIPBooleanAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeActuatorEnabled(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+@end
+
+@interface CHIPGroups ()
+
+@property (readonly) Controller::GroupsCluster cppCluster;
+@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
+@end
+
+@implementation CHIPGroups
+
+- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(EndpointId)endpoint queue:(dispatch_queue_t)queue
+{
+    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
+
+    if (err != CHIP_NO_ERROR) {
+        return nil;
+    }
+
+    if (self = [super init]) {
+        _callbackQueue = queue;
+    }
+
+    return self;
+}
+
+- (BOOL)addGroup:(uint16_t)groupId groupName:(char *)groupName completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPGroupsClusterAddGroupResponseCallbackBridge * onSuccess
+        = new CHIPGroupsClusterAddGroupResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.AddGroup(onSuccess->Cancel(), onFailure->Cancel(), groupId, groupName);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)addGroupIfIdentifying:(uint16_t)groupId groupName:(char *)groupName completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.AddGroupIfIdentifying(onSuccess->Cancel(), onFailure->Cancel(), groupId, groupName);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)getGroupMembership:(uint8_t)groupCount groupList:(uint16_t)groupList completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPGroupsClusterGetGroupMembershipResponseCallbackBridge * onSuccess
+        = new CHIPGroupsClusterGetGroupMembershipResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.GetGroupMembership(onSuccess->Cancel(), onFailure->Cancel(), groupCount, groupList);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)removeAllGroups:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.RemoveAllGroups(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)removeGroup:(uint16_t)groupId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPGroupsClusterRemoveGroupResponseCallbackBridge * onSuccess
+        = new CHIPGroupsClusterRemoveGroupResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.RemoveGroup(onSuccess->Cancel(), onFailure->Cancel(), groupId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)viewGroup:(uint16_t)groupId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPGroupsClusterViewGroupResponseCallbackBridge * onSuccess
+        = new CHIPGroupsClusterViewGroupResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ViewGroup(onSuccess->Cancel(), onFailure->Cancel(), groupId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeNameSupport:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeNameSupport(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+@end
+
+@interface CHIPIasZone ()
+
+@property (readonly) Controller::IasZoneCluster cppCluster;
+@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
+@end
+
+@implementation CHIPIasZone
+
+- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(EndpointId)endpoint queue:(dispatch_queue_t)queue
+{
+    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
+
+    if (err != CHIP_NO_ERROR) {
+        return nil;
+    }
+
+    if (self = [super init]) {
+        _callbackQueue = queue;
+    }
+
+    return self;
+}
+
+- (BOOL)readAttributeZoneState:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeZoneState(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeZoneType:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeZoneType(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeZoneStatus:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeZoneStatus(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeIasCieAddress:(ResponseHandler)completionHandler
+{
+    CHIPInt64uAttributeCallbackBridge * onSuccess = new CHIPInt64uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeIasCieAddress(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)writeAttributeIasCieAddress:(uint64_t)value completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.WriteAttributeIasCieAddress(onSuccess->Cancel(), onFailure->Cancel(), value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeZoneId:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeZoneId(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+@end
+
+@interface CHIPIdentify ()
+
+@property (readonly) Controller::IdentifyCluster cppCluster;
+@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
+@end
+
+@implementation CHIPIdentify
+
+- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(EndpointId)endpoint queue:(dispatch_queue_t)queue
+{
+    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
+
+    if (err != CHIP_NO_ERROR) {
+        return nil;
+    }
+
+    if (self = [super init]) {
+        _callbackQueue = queue;
+    }
+
+    return self;
+}
+
+- (BOOL)identify:(uint16_t)identifyTime completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.Identify(onSuccess->Cancel(), onFailure->Cancel(), identifyTime);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)identifyQuery:(ResponseHandler)completionHandler
+{
+    CHIPIdentifyClusterIdentifyQueryResponseCallbackBridge * onSuccess
+        = new CHIPIdentifyClusterIdentifyQueryResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.IdentifyQuery(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeIdentifyTime:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeIdentifyTime(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)writeAttributeIdentifyTime:(uint16_t)value completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.WriteAttributeIdentifyTime(onSuccess->Cancel(), onFailure->Cancel(), value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+@end
+
+@interface CHIPLevelControl ()
+
+@property (readonly) Controller::LevelControlCluster cppCluster;
+@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
+@end
+
+@implementation CHIPLevelControl
+
+- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(EndpointId)endpoint queue:(dispatch_queue_t)queue
+{
+    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
+
+    if (err != CHIP_NO_ERROR) {
+        return nil;
+    }
+
+    if (self = [super init]) {
+        _callbackQueue = queue;
+    }
+
+    return self;
+}
+
+- (BOOL)move:(uint8_t)moveMode
+                 rate:(uint8_t)rate
+           optionMask:(uint8_t)optionMask
+       optionOverride:(uint8_t)optionOverride
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.Move(onSuccess->Cancel(), onFailure->Cancel(), moveMode, rate, optionMask, optionOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)moveToLevel:(uint8_t)level
+       transitionTime:(uint16_t)transitionTime
+           optionMask:(uint8_t)optionMask
+       optionOverride:(uint8_t)optionOverride
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err
+        = self.cppCluster.MoveToLevel(onSuccess->Cancel(), onFailure->Cancel(), level, transitionTime, optionMask, optionOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)moveToLevelWithOnOff:(uint8_t)level
+              transitionTime:(uint16_t)transitionTime
+           completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.MoveToLevelWithOnOff(onSuccess->Cancel(), onFailure->Cancel(), level, transitionTime);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)moveWithOnOff:(uint8_t)moveMode rate:(uint8_t)rate completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.MoveWithOnOff(onSuccess->Cancel(), onFailure->Cancel(), moveMode, rate);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)step:(uint8_t)stepMode
+             stepSize:(uint8_t)stepSize
+       transitionTime:(uint16_t)transitionTime
+           optionMask:(uint8_t)optionMask
+       optionOverride:(uint8_t)optionOverride
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.Step(
+        onSuccess->Cancel(), onFailure->Cancel(), stepMode, stepSize, transitionTime, optionMask, optionOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)stepWithOnOff:(uint8_t)stepMode
+             stepSize:(uint8_t)stepSize
+       transitionTime:(uint16_t)transitionTime
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.StepWithOnOff(onSuccess->Cancel(), onFailure->Cancel(), stepMode, stepSize, transitionTime);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)stop:(uint8_t)optionMask optionOverride:(uint8_t)optionOverride completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.Stop(onSuccess->Cancel(), onFailure->Cancel(), optionMask, optionOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)stopWithOnOff:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.StopWithOnOff(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeCurrentLevel:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeCurrentLevel(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)configureAttributeCurrentLevel:(uint16_t)minInterval
+                           maxInterval:(uint16_t)maxInterval
+                                change:(uint8_t)change
+                     completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ConfigureAttributeCurrentLevel(
+        onSuccess->Cancel(), onFailure->Cancel(), minInterval, maxInterval, change);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)reportAttributeCurrentLevel:(ResponseHandler)reportHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onReport = new CHIPInt8uAttributeCallbackBridge(reportHandler, _callbackQueue, true);
+    if (!onReport) {
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReportAttributeCurrentLevel(onReport->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onReport;
+        return NO;
+    }
+
+    return YES;
+}
+
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+@end
+
+@interface CHIPOnOff ()
+
+@property (readonly) Controller::OnOffCluster cppCluster;
+@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
+@end
+
+@implementation CHIPOnOff
+
+- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(EndpointId)endpoint queue:(dispatch_queue_t)queue
+{
+    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
+
+    if (err != CHIP_NO_ERROR) {
+        return nil;
+    }
+
+    if (self = [super init]) {
+        _callbackQueue = queue;
+    }
+
+    return self;
+}
+
+- (BOOL)off:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.Off(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)on:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.On(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)toggle:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.Toggle(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeOnOff:(ResponseHandler)completionHandler
+{
+    CHIPBooleanAttributeCallbackBridge * onSuccess = new CHIPBooleanAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeOnOff(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)configureAttributeOnOff:(uint16_t)minInterval
+                    maxInterval:(uint16_t)maxInterval
+              completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ConfigureAttributeOnOff(onSuccess->Cancel(), onFailure->Cancel(), minInterval, maxInterval);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)reportAttributeOnOff:(ResponseHandler)reportHandler
+{
+    CHIPBooleanAttributeCallbackBridge * onReport = new CHIPBooleanAttributeCallbackBridge(reportHandler, _callbackQueue, true);
+    if (!onReport) {
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReportAttributeOnOff(onReport->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onReport;
+        return NO;
+    }
+
+    return YES;
+}
+
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+@end
+
+@interface CHIPScenes ()
+
+@property (readonly) Controller::ScenesCluster cppCluster;
+@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
+@end
+
+@implementation CHIPScenes
+
+- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(EndpointId)endpoint queue:(dispatch_queue_t)queue
+{
+    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
+
+    if (err != CHIP_NO_ERROR) {
+        return nil;
+    }
+
+    if (self = [super init]) {
+        _callbackQueue = queue;
+    }
+
+    return self;
+}
+
+- (BOOL)addScene:(uint16_t)groupId
+              sceneId:(uint8_t)sceneId
+       transitionTime:(uint16_t)transitionTime
+            sceneName:(char *)sceneName
+            clusterId:(uint16_t)clusterId
+               length:(uint8_t)length
+                value:(uint8_t)value
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPScenesClusterAddSceneResponseCallbackBridge * onSuccess
+        = new CHIPScenesClusterAddSceneResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.AddScene(
+        onSuccess->Cancel(), onFailure->Cancel(), groupId, sceneId, transitionTime, sceneName, clusterId, length, value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)getSceneMembership:(uint16_t)groupId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPScenesClusterGetSceneMembershipResponseCallbackBridge * onSuccess
+        = new CHIPScenesClusterGetSceneMembershipResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.GetSceneMembership(onSuccess->Cancel(), onFailure->Cancel(), groupId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)recallScene:(uint16_t)groupId
+              sceneId:(uint8_t)sceneId
+       transitionTime:(uint16_t)transitionTime
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.RecallScene(onSuccess->Cancel(), onFailure->Cancel(), groupId, sceneId, transitionTime);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)removeAllScenes:(uint16_t)groupId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPScenesClusterRemoveAllScenesResponseCallbackBridge * onSuccess
+        = new CHIPScenesClusterRemoveAllScenesResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.RemoveAllScenes(onSuccess->Cancel(), onFailure->Cancel(), groupId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)removeScene:(uint16_t)groupId sceneId:(uint8_t)sceneId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPScenesClusterRemoveSceneResponseCallbackBridge * onSuccess
+        = new CHIPScenesClusterRemoveSceneResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.RemoveScene(onSuccess->Cancel(), onFailure->Cancel(), groupId, sceneId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)storeScene:(uint16_t)groupId sceneId:(uint8_t)sceneId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPScenesClusterStoreSceneResponseCallbackBridge * onSuccess
+        = new CHIPScenesClusterStoreSceneResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.StoreScene(onSuccess->Cancel(), onFailure->Cancel(), groupId, sceneId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)viewScene:(uint16_t)groupId sceneId:(uint8_t)sceneId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPScenesClusterViewSceneResponseCallbackBridge * onSuccess
+        = new CHIPScenesClusterViewSceneResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ViewScene(onSuccess->Cancel(), onFailure->Cancel(), groupId, sceneId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeSceneCount:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeSceneCount(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeCurrentScene:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeCurrentScene(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeCurrentGroup:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeCurrentGroup(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeSceneValid:(ResponseHandler)completionHandler
+{
+    CHIPBooleanAttributeCallbackBridge * onSuccess = new CHIPBooleanAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeSceneValid(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeNameSupport:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeNameSupport(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+@end
+
+@interface CHIPTemperatureMeasurement ()
+
+@property (readonly) Controller::TemperatureMeasurementCluster cppCluster;
+@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
+@end
+
+@implementation CHIPTemperatureMeasurement
+
+- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(EndpointId)endpoint queue:(dispatch_queue_t)queue
+{
+    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
+
+    if (err != CHIP_NO_ERROR) {
+        return nil;
+    }
+
+    if (self = [super init]) {
+        _callbackQueue = queue;
+    }
+
+    return self;
+}
+
+- (BOOL)readAttributeMeasuredValue:(ResponseHandler)completionHandler
+{
+    CHIPInt16sAttributeCallbackBridge * onSuccess = new CHIPInt16sAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeMeasuredValue(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)configureAttributeMeasuredValue:(uint16_t)minInterval
+                            maxInterval:(uint16_t)maxInterval
+                                 change:(int16_t)change
+                      completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ConfigureAttributeMeasuredValue(
+        onSuccess->Cancel(), onFailure->Cancel(), minInterval, maxInterval, change);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)reportAttributeMeasuredValue:(ResponseHandler)reportHandler
+{
+    CHIPInt16sAttributeCallbackBridge * onReport = new CHIPInt16sAttributeCallbackBridge(reportHandler, _callbackQueue, true);
+    if (!onReport) {
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReportAttributeMeasuredValue(onReport->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onReport;
+        return NO;
+    }
+
+    return YES;
+}
+
+- (BOOL)readAttributeMinMeasuredValue:(ResponseHandler)completionHandler
+{
+    CHIPInt16sAttributeCallbackBridge * onSuccess = new CHIPInt16sAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeMinMeasuredValue(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeMaxMeasuredValue:(ResponseHandler)completionHandler
+{
+    CHIPInt16sAttributeCallbackBridge * onSuccess = new CHIPInt16sAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeMaxMeasuredValue(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+@end
diff --git a/examples/all-clusters-app/all-clusters-common/gen/call-command-handler.cpp b/examples/all-clusters-app/all-clusters-common/gen/call-command-handler.cpp
index f9f1aa8..8c7cd77 100644
--- a/examples/all-clusters-app/all-clusters-common/gen/call-command-handler.cpp
+++ b/examples/all-clusters-app/all-clusters-common/gen/call-command-handler.cpp
@@ -28,26 +28,16 @@
 
 using namespace chip;
 
-EmberAfStatus emberAfBarrierControlClusterClientCommandParse(EmberAfClusterCommand * cmd);
 EmberAfStatus emberAfBarrierControlClusterServerCommandParse(EmberAfClusterCommand * cmd);
-EmberAfStatus emberAfBasicClusterClientCommandParse(EmberAfClusterCommand * cmd);
 EmberAfStatus emberAfBasicClusterServerCommandParse(EmberAfClusterCommand * cmd);
-EmberAfStatus emberAfBindingClusterClientCommandParse(EmberAfClusterCommand * cmd);
 EmberAfStatus emberAfBindingClusterServerCommandParse(EmberAfClusterCommand * cmd);
-EmberAfStatus emberAfColorControlClusterClientCommandParse(EmberAfClusterCommand * cmd);
 EmberAfStatus emberAfColorControlClusterServerCommandParse(EmberAfClusterCommand * cmd);
-EmberAfStatus emberAfDoorLockClusterClientCommandParse(EmberAfClusterCommand * cmd);
 EmberAfStatus emberAfDoorLockClusterServerCommandParse(EmberAfClusterCommand * cmd);
-EmberAfStatus emberAfGroupsClusterClientCommandParse(EmberAfClusterCommand * cmd);
 EmberAfStatus emberAfGroupsClusterServerCommandParse(EmberAfClusterCommand * cmd);
 EmberAfStatus emberAfIasZoneClusterServerCommandParse(EmberAfClusterCommand * cmd);
-EmberAfStatus emberAfIdentifyClusterClientCommandParse(EmberAfClusterCommand * cmd);
 EmberAfStatus emberAfIdentifyClusterServerCommandParse(EmberAfClusterCommand * cmd);
-EmberAfStatus emberAfLevelControlClusterClientCommandParse(EmberAfClusterCommand * cmd);
 EmberAfStatus emberAfLevelControlClusterServerCommandParse(EmberAfClusterCommand * cmd);
-EmberAfStatus emberAfOnOffClusterClientCommandParse(EmberAfClusterCommand * cmd);
 EmberAfStatus emberAfOnOffClusterServerCommandParse(EmberAfClusterCommand * cmd);
-EmberAfStatus emberAfScenesClusterClientCommandParse(EmberAfClusterCommand * cmd);
 EmberAfStatus emberAfScenesClusterServerCommandParse(EmberAfClusterCommand * cmd);
 EmberAfStatus emberAfTemperatureMeasurementClusterServerCommandParse(EmberAfClusterCommand * cmd);
 
@@ -80,42 +70,6 @@
     {
         switch (cmd->apsFrame->clusterId)
         {
-        case ZCL_BARRIER_CONTROL_CLUSTER_ID:
-            // No commands are enabled for cluster Barrier Control
-            result = status(false, true, cmd->mfgSpecific);
-            break;
-        case ZCL_BASIC_CLUSTER_ID:
-            // No commands are enabled for cluster Basic
-            result = status(false, true, cmd->mfgSpecific);
-            break;
-        case ZCL_BINDING_CLUSTER_ID:
-            // No commands are enabled for cluster Binding
-            result = status(false, true, cmd->mfgSpecific);
-            break;
-        case ZCL_COLOR_CONTROL_CLUSTER_ID:
-            // No commands are enabled for cluster Color Control
-            result = status(false, true, cmd->mfgSpecific);
-            break;
-        case ZCL_DOOR_LOCK_CLUSTER_ID:
-            result = emberAfDoorLockClusterClientCommandParse(cmd);
-            break;
-        case ZCL_GROUPS_CLUSTER_ID:
-            result = emberAfGroupsClusterClientCommandParse(cmd);
-            break;
-        case ZCL_IDENTIFY_CLUSTER_ID:
-            result = emberAfIdentifyClusterClientCommandParse(cmd);
-            break;
-        case ZCL_LEVEL_CONTROL_CLUSTER_ID:
-            // No commands are enabled for cluster Level Control
-            result = status(false, true, cmd->mfgSpecific);
-            break;
-        case ZCL_ON_OFF_CLUSTER_ID:
-            // No commands are enabled for cluster On/off
-            result = status(false, true, cmd->mfgSpecific);
-            break;
-        case ZCL_SCENES_CLUSTER_ID:
-            result = emberAfScenesClusterClientCommandParse(cmd);
-            break;
         default:
             // Unrecognized cluster ID, error status will apply.
             break;
@@ -880,48 +834,6 @@
     }
     return status(wasHandled, true, cmd->mfgSpecific);
 }
-EmberAfStatus emberAfDoorLockClusterClientCommandParse(EmberAfClusterCommand * cmd)
-{
-    bool wasHandled = false;
-
-    if (!cmd->mfgSpecific)
-    {
-        switch (cmd->commandId)
-        {
-        case ZCL_LOCK_DOOR_RESPONSE_COMMAND_ID: {
-            uint16_t payloadOffset = cmd->payloadStartIndex;
-            uint8_t status;
-
-            if (cmd->bufLen < payloadOffset + 1)
-            {
-                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
-            }
-            status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
-
-            wasHandled = emberAfDoorLockClusterLockDoorResponseCallback(status);
-            break;
-        }
-        case ZCL_UNLOCK_DOOR_RESPONSE_COMMAND_ID: {
-            uint16_t payloadOffset = cmd->payloadStartIndex;
-            uint8_t status;
-
-            if (cmd->bufLen < payloadOffset + 1)
-            {
-                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
-            }
-            status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
-
-            wasHandled = emberAfDoorLockClusterUnlockDoorResponseCallback(status);
-            break;
-        }
-        default: {
-            // Unrecognized command ID, error status will apply.
-            break;
-        }
-        }
-    }
-    return status(wasHandled, true, cmd->mfgSpecific);
-}
 EmberAfStatus emberAfDoorLockClusterServerCommandParse(EmberAfClusterCommand * cmd)
 {
     bool wasHandled = false;
@@ -1389,112 +1301,6 @@
     }
     return status(wasHandled, true, cmd->mfgSpecific);
 }
-EmberAfStatus emberAfGroupsClusterClientCommandParse(EmberAfClusterCommand * cmd)
-{
-    bool wasHandled = false;
-
-    if (!cmd->mfgSpecific)
-    {
-        switch (cmd->commandId)
-        {
-        case ZCL_ADD_GROUP_RESPONSE_COMMAND_ID: {
-            uint16_t payloadOffset = cmd->payloadStartIndex;
-            uint8_t status;
-            uint16_t groupId;
-
-            if (cmd->bufLen < payloadOffset + 1)
-            {
-                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
-            }
-            status        = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
-            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
-            if (cmd->bufLen < payloadOffset + 2)
-            {
-                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
-            }
-            groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
-
-            wasHandled = emberAfGroupsClusterAddGroupResponseCallback(status, groupId);
-            break;
-        }
-        case ZCL_GET_GROUP_MEMBERSHIP_RESPONSE_COMMAND_ID: {
-            uint16_t payloadOffset = cmd->payloadStartIndex;
-            uint8_t capacity;
-            uint8_t groupCount;
-            /* TYPE WARNING: array array defaults to */ uint8_t * groupList;
-
-            if (cmd->bufLen < payloadOffset + 1)
-            {
-                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
-            }
-            capacity      = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
-            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
-            if (cmd->bufLen < payloadOffset + 1)
-            {
-                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
-            }
-            groupCount    = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
-            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
-            groupList     = cmd->buffer + payloadOffset;
-
-            wasHandled = emberAfGroupsClusterGetGroupMembershipResponseCallback(capacity, groupCount, groupList);
-            break;
-        }
-        case ZCL_REMOVE_GROUP_RESPONSE_COMMAND_ID: {
-            uint16_t payloadOffset = cmd->payloadStartIndex;
-            uint8_t status;
-            uint16_t groupId;
-
-            if (cmd->bufLen < payloadOffset + 1)
-            {
-                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
-            }
-            status        = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
-            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
-            if (cmd->bufLen < payloadOffset + 2)
-            {
-                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
-            }
-            groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
-
-            wasHandled = emberAfGroupsClusterRemoveGroupResponseCallback(status, groupId);
-            break;
-        }
-        case ZCL_VIEW_GROUP_RESPONSE_COMMAND_ID: {
-            uint16_t payloadOffset = cmd->payloadStartIndex;
-            uint8_t status;
-            uint16_t groupId;
-            uint8_t * groupName;
-
-            if (cmd->bufLen < payloadOffset + 1)
-            {
-                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
-            }
-            status        = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
-            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
-            if (cmd->bufLen < payloadOffset + 2)
-            {
-                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
-            }
-            groupId       = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
-            payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
-            if (cmd->bufLen < payloadOffset + 1u)
-            {
-                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
-            }
-            groupName = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
-
-            wasHandled = emberAfGroupsClusterViewGroupResponseCallback(status, groupId, groupName);
-            break;
-        }
-        default: {
-            // Unrecognized command ID, error status will apply.
-            break;
-        }
-        }
-    }
-    return status(wasHandled, true, cmd->mfgSpecific);
-}
 EmberAfStatus emberAfGroupsClusterServerCommandParse(EmberAfClusterCommand * cmd)
 {
     bool wasHandled = false;
@@ -1633,35 +1439,6 @@
     }
     return status(wasHandled, true, cmd->mfgSpecific);
 }
-EmberAfStatus emberAfIdentifyClusterClientCommandParse(EmberAfClusterCommand * cmd)
-{
-    bool wasHandled = false;
-
-    if (!cmd->mfgSpecific)
-    {
-        switch (cmd->commandId)
-        {
-        case ZCL_IDENTIFY_QUERY_RESPONSE_COMMAND_ID: {
-            uint16_t payloadOffset = cmd->payloadStartIndex;
-            uint16_t timeout;
-
-            if (cmd->bufLen < payloadOffset + 2)
-            {
-                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
-            }
-            timeout = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
-
-            wasHandled = emberAfIdentifyClusterIdentifyQueryResponseCallback(timeout);
-            break;
-        }
-        default: {
-            // Unrecognized command ID, error status will apply.
-            break;
-        }
-        }
-    }
-    return status(wasHandled, true, cmd->mfgSpecific);
-}
 EmberAfStatus emberAfIdentifyClusterServerCommandParse(EmberAfClusterCommand * cmd)
 {
     bool wasHandled = false;
@@ -1939,240 +1716,6 @@
     }
     return status(wasHandled, true, cmd->mfgSpecific);
 }
-EmberAfStatus emberAfScenesClusterClientCommandParse(EmberAfClusterCommand * cmd)
-{
-    bool wasHandled = false;
-
-    if (!cmd->mfgSpecific)
-    {
-        switch (cmd->commandId)
-        {
-        case ZCL_ADD_SCENE_RESPONSE_COMMAND_ID: {
-            uint16_t payloadOffset = cmd->payloadStartIndex;
-            uint8_t status;
-            uint16_t groupId;
-            uint8_t sceneId;
-
-            if (cmd->bufLen < payloadOffset + 1)
-            {
-                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
-            }
-            status        = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
-            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
-            if (cmd->bufLen < payloadOffset + 2)
-            {
-                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
-            }
-            groupId       = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
-            payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
-            if (cmd->bufLen < payloadOffset + 1)
-            {
-                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
-            }
-            sceneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
-
-            wasHandled = emberAfScenesClusterAddSceneResponseCallback(status, groupId, sceneId);
-            break;
-        }
-        case ZCL_GET_SCENE_MEMBERSHIP_RESPONSE_COMMAND_ID: {
-            uint16_t payloadOffset = cmd->payloadStartIndex;
-            uint8_t status;
-            uint8_t capacity;
-            uint16_t groupId;
-            uint8_t sceneCount;
-            /* TYPE WARNING: array array defaults to */ uint8_t * sceneList;
-
-            if (cmd->bufLen < payloadOffset + 1)
-            {
-                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
-            }
-            status        = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
-            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
-            if (cmd->bufLen < payloadOffset + 1)
-            {
-                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
-            }
-            capacity      = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
-            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
-            if (cmd->bufLen < payloadOffset + 2)
-            {
-                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
-            }
-            groupId       = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
-            payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
-            if (status == 0)
-            {
-                if (cmd->bufLen < payloadOffset + 1)
-                {
-                    return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
-                }
-                sceneCount    = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
-                payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
-            }
-            else
-            {
-                sceneCount = UINT8_MAX;
-            }
-            if (status == 0)
-            {
-                sceneList = cmd->buffer + payloadOffset;
-            }
-            else
-            {
-                sceneList = NULL;
-            }
-
-            wasHandled = emberAfScenesClusterGetSceneMembershipResponseCallback(status, capacity, groupId, sceneCount, sceneList);
-            break;
-        }
-        case ZCL_REMOVE_ALL_SCENES_RESPONSE_COMMAND_ID: {
-            uint16_t payloadOffset = cmd->payloadStartIndex;
-            uint8_t status;
-            uint16_t groupId;
-
-            if (cmd->bufLen < payloadOffset + 1)
-            {
-                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
-            }
-            status        = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
-            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
-            if (cmd->bufLen < payloadOffset + 2)
-            {
-                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
-            }
-            groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
-
-            wasHandled = emberAfScenesClusterRemoveAllScenesResponseCallback(status, groupId);
-            break;
-        }
-        case ZCL_REMOVE_SCENE_RESPONSE_COMMAND_ID: {
-            uint16_t payloadOffset = cmd->payloadStartIndex;
-            uint8_t status;
-            uint16_t groupId;
-            uint8_t sceneId;
-
-            if (cmd->bufLen < payloadOffset + 1)
-            {
-                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
-            }
-            status        = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
-            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
-            if (cmd->bufLen < payloadOffset + 2)
-            {
-                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
-            }
-            groupId       = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
-            payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
-            if (cmd->bufLen < payloadOffset + 1)
-            {
-                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
-            }
-            sceneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
-
-            wasHandled = emberAfScenesClusterRemoveSceneResponseCallback(status, groupId, sceneId);
-            break;
-        }
-        case ZCL_STORE_SCENE_RESPONSE_COMMAND_ID: {
-            uint16_t payloadOffset = cmd->payloadStartIndex;
-            uint8_t status;
-            uint16_t groupId;
-            uint8_t sceneId;
-
-            if (cmd->bufLen < payloadOffset + 1)
-            {
-                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
-            }
-            status        = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
-            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
-            if (cmd->bufLen < payloadOffset + 2)
-            {
-                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
-            }
-            groupId       = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
-            payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
-            if (cmd->bufLen < payloadOffset + 1)
-            {
-                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
-            }
-            sceneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
-
-            wasHandled = emberAfScenesClusterStoreSceneResponseCallback(status, groupId, sceneId);
-            break;
-        }
-        case ZCL_VIEW_SCENE_RESPONSE_COMMAND_ID: {
-            uint16_t payloadOffset = cmd->payloadStartIndex;
-            uint8_t status;
-            uint16_t groupId;
-            uint8_t sceneId;
-            uint16_t transitionTime;
-            uint8_t * sceneName;
-            /* TYPE WARNING: array array defaults to */ uint8_t * extensionFieldSets;
-
-            if (cmd->bufLen < payloadOffset + 1)
-            {
-                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
-            }
-            status        = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
-            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
-            if (cmd->bufLen < payloadOffset + 2)
-            {
-                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
-            }
-            groupId       = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
-            payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
-            if (cmd->bufLen < payloadOffset + 1)
-            {
-                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
-            }
-            sceneId       = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
-            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
-            if (status == 0)
-            {
-                if (cmd->bufLen < payloadOffset + 2)
-                {
-                    return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
-                }
-                transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
-                payloadOffset  = static_cast<uint16_t>(payloadOffset + 2);
-            }
-            else
-            {
-                transitionTime = UINT16_MAX;
-            }
-            if (status == 0)
-            {
-                if (cmd->bufLen < payloadOffset + 1u)
-                {
-                    return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
-                }
-                sceneName     = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
-                payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(sceneName) + 1u);
-            }
-            else
-            {
-                sceneName = NULL;
-            }
-            if (status == 0)
-            {
-                extensionFieldSets = cmd->buffer + payloadOffset;
-            }
-            else
-            {
-                extensionFieldSets = NULL;
-            }
-
-            wasHandled = emberAfScenesClusterViewSceneResponseCallback(status, groupId, sceneId, transitionTime, sceneName,
-                                                                       extensionFieldSets);
-            break;
-        }
-        default: {
-            // Unrecognized command ID, error status will apply.
-            break;
-        }
-        }
-    }
-    return status(wasHandled, true, cmd->mfgSpecific);
-}
 EmberAfStatus emberAfScenesClusterServerCommandParse(EmberAfClusterCommand * cmd)
 {
     bool wasHandled = false;
diff --git a/examples/all-clusters-app/all-clusters-common/gen/callback.h b/examples/all-clusters-app/all-clusters-common/gen/callback.h
index 1079909..1869dfe 100644
--- a/examples/all-clusters-app/all-clusters-common/gen/callback.h
+++ b/examples/all-clusters-app/all-clusters-common/gen/callback.h
@@ -136,77 +136,6 @@
 // Cluster Server/Client Init Functions
 
 //
-// Barrier Control Cluster client
-//
-
-/** @brief Barrier Control Cluster Client Init
- *
- * Client Init
- *
- * @param endpoint    Endpoint that is being initialized
- */
-void emberAfBarrierControlClusterClientInitCallback(chip::EndpointId endpoint);
-
-/** @brief Barrier Control Cluster Client Attribute Changed
- *
- * Client Attribute Changed
- *
- * @param endpoint    Endpoint that is being initialized
- * @param attributeId Attribute that changed
- */
-void emberAfBarrierControlClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
-
-/** @brief Barrier Control Cluster Client Manufacturer Specific Attribute Changed
- *
- * Client Manufacturer Specific Attribute Changed
- *
- * @param endpoint          Endpoint that is being initialized
- * @param attributeId       Attribute that changed
- * @param manufacturerCode  Manufacturer Code of the attribute that changed
- */
-void emberAfBarrierControlClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
-                                                                                    chip::AttributeId attributeId,
-                                                                                    uint16_t manufacturerCode);
-
-/** @brief Barrier Control Cluster Client Message Sent
- *
- * Client Message Sent
- *
- * @param type               The type of message sent
- * @param indexOrDestination The destination or address to which the message was sent
- * @param apsFrame           The APS frame for the message
- * @param msgLen             The length of the message
- * @param message            The message that was sent
- * @param status             The status of the sent message
- */
-void emberAfBarrierControlClusterClientMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
-                                                           EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
-                                                           EmberStatus status);
-
-/** @brief Barrier Control Cluster Client Pre Attribute Changed
- *
- * client Pre Attribute Changed
- *
- * @param endpoint      Endpoint that is being initialized
- * @param attributeId   Attribute to be changed
- * @param attributeType Attribute type
- * @param size          Attribute size
- * @param value         Attribute value
- */
-EmberAfStatus emberAfBarrierControlClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint,
-                                                                            chip::AttributeId attributeId,
-                                                                            EmberAfAttributeType attributeType, uint8_t size,
-                                                                            uint8_t * value);
-
-/** @brief Barrier Control Cluster Client Tick
- *
- * client Tick
- *
- * @param endpoint  Endpoint that is being served
- */
-void emberAfBarrierControlClusterClientTickCallback(chip::EndpointId endpoint);
-
-//
 // Barrier Control Cluster server
 //
 
@@ -278,74 +207,6 @@
 void emberAfBarrierControlClusterServerTickCallback(chip::EndpointId endpoint);
 
 //
-// Basic Cluster client
-//
-
-/** @brief Basic Cluster Client Init
- *
- * Client Init
- *
- * @param endpoint    Endpoint that is being initialized
- */
-void emberAfBasicClusterClientInitCallback(chip::EndpointId endpoint);
-
-/** @brief Basic Cluster Client Attribute Changed
- *
- * Client Attribute Changed
- *
- * @param endpoint    Endpoint that is being initialized
- * @param attributeId Attribute that changed
- */
-void emberAfBasicClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
-
-/** @brief Basic Cluster Client Manufacturer Specific Attribute Changed
- *
- * Client Manufacturer Specific Attribute Changed
- *
- * @param endpoint          Endpoint that is being initialized
- * @param attributeId       Attribute that changed
- * @param manufacturerCode  Manufacturer Code of the attribute that changed
- */
-void emberAfBasicClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
-                                                                           uint16_t manufacturerCode);
-
-/** @brief Basic Cluster Client Message Sent
- *
- * Client Message Sent
- *
- * @param type               The type of message sent
- * @param indexOrDestination The destination or address to which the message was sent
- * @param apsFrame           The APS frame for the message
- * @param msgLen             The length of the message
- * @param message            The message that was sent
- * @param status             The status of the sent message
- */
-void emberAfBasicClusterClientMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
-                                                  EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message, EmberStatus status);
-
-/** @brief Basic Cluster Client Pre Attribute Changed
- *
- * client Pre Attribute Changed
- *
- * @param endpoint      Endpoint that is being initialized
- * @param attributeId   Attribute to be changed
- * @param attributeType Attribute type
- * @param size          Attribute size
- * @param value         Attribute value
- */
-EmberAfStatus emberAfBasicClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
-                                                                   EmberAfAttributeType attributeType, uint8_t size,
-                                                                   uint8_t * value);
-
-/** @brief Basic Cluster Client Tick
- *
- * client Tick
- *
- * @param endpoint  Endpoint that is being served
- */
-void emberAfBasicClusterClientTickCallback(chip::EndpointId endpoint);
-
-//
 // Basic Cluster server
 //
 
@@ -414,76 +275,6 @@
 void emberAfBasicClusterServerTickCallback(chip::EndpointId endpoint);
 
 //
-// Binding Cluster client
-//
-
-/** @brief Binding Cluster Client Init
- *
- * Client Init
- *
- * @param endpoint    Endpoint that is being initialized
- */
-void emberAfBindingClusterClientInitCallback(chip::EndpointId endpoint);
-
-/** @brief Binding Cluster Client Attribute Changed
- *
- * Client Attribute Changed
- *
- * @param endpoint    Endpoint that is being initialized
- * @param attributeId Attribute that changed
- */
-void emberAfBindingClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
-
-/** @brief Binding Cluster Client Manufacturer Specific Attribute Changed
- *
- * Client Manufacturer Specific Attribute Changed
- *
- * @param endpoint          Endpoint that is being initialized
- * @param attributeId       Attribute that changed
- * @param manufacturerCode  Manufacturer Code of the attribute that changed
- */
-void emberAfBindingClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
-                                                                             chip::AttributeId attributeId,
-                                                                             uint16_t manufacturerCode);
-
-/** @brief Binding Cluster Client Message Sent
- *
- * Client Message Sent
- *
- * @param type               The type of message sent
- * @param indexOrDestination The destination or address to which the message was sent
- * @param apsFrame           The APS frame for the message
- * @param msgLen             The length of the message
- * @param message            The message that was sent
- * @param status             The status of the sent message
- */
-void emberAfBindingClusterClientMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
-                                                    EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
-                                                    EmberStatus status);
-
-/** @brief Binding Cluster Client Pre Attribute Changed
- *
- * client Pre Attribute Changed
- *
- * @param endpoint      Endpoint that is being initialized
- * @param attributeId   Attribute to be changed
- * @param attributeType Attribute type
- * @param size          Attribute size
- * @param value         Attribute value
- */
-EmberAfStatus emberAfBindingClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
-                                                                     EmberAfAttributeType attributeType, uint8_t size,
-                                                                     uint8_t * value);
-
-/** @brief Binding Cluster Client Tick
- *
- * client Tick
- *
- * @param endpoint  Endpoint that is being served
- */
-void emberAfBindingClusterClientTickCallback(chip::EndpointId endpoint);
-
-//
 // Binding Cluster server
 //
 
@@ -554,76 +345,6 @@
 void emberAfBindingClusterServerTickCallback(chip::EndpointId endpoint);
 
 //
-// Color Control Cluster client
-//
-
-/** @brief Color Control Cluster Client Init
- *
- * Client Init
- *
- * @param endpoint    Endpoint that is being initialized
- */
-void emberAfColorControlClusterClientInitCallback(chip::EndpointId endpoint);
-
-/** @brief Color Control Cluster Client Attribute Changed
- *
- * Client Attribute Changed
- *
- * @param endpoint    Endpoint that is being initialized
- * @param attributeId Attribute that changed
- */
-void emberAfColorControlClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
-
-/** @brief Color Control Cluster Client Manufacturer Specific Attribute Changed
- *
- * Client Manufacturer Specific Attribute Changed
- *
- * @param endpoint          Endpoint that is being initialized
- * @param attributeId       Attribute that changed
- * @param manufacturerCode  Manufacturer Code of the attribute that changed
- */
-void emberAfColorControlClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
-                                                                                  chip::AttributeId attributeId,
-                                                                                  uint16_t manufacturerCode);
-
-/** @brief Color Control Cluster Client Message Sent
- *
- * Client Message Sent
- *
- * @param type               The type of message sent
- * @param indexOrDestination The destination or address to which the message was sent
- * @param apsFrame           The APS frame for the message
- * @param msgLen             The length of the message
- * @param message            The message that was sent
- * @param status             The status of the sent message
- */
-void emberAfColorControlClusterClientMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
-                                                         EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
-                                                         EmberStatus status);
-
-/** @brief Color Control Cluster Client Pre Attribute Changed
- *
- * client Pre Attribute Changed
- *
- * @param endpoint      Endpoint that is being initialized
- * @param attributeId   Attribute to be changed
- * @param attributeType Attribute type
- * @param size          Attribute size
- * @param value         Attribute value
- */
-EmberAfStatus emberAfColorControlClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
-                                                                          EmberAfAttributeType attributeType, uint8_t size,
-                                                                          uint8_t * value);
-
-/** @brief Color Control Cluster Client Tick
- *
- * client Tick
- *
- * @param endpoint  Endpoint that is being served
- */
-void emberAfColorControlClusterClientTickCallback(chip::EndpointId endpoint);
-
-//
 // Color Control Cluster server
 //
 
@@ -694,76 +415,6 @@
 void emberAfColorControlClusterServerTickCallback(chip::EndpointId endpoint);
 
 //
-// Door Lock Cluster client
-//
-
-/** @brief Door Lock Cluster Client Init
- *
- * Client Init
- *
- * @param endpoint    Endpoint that is being initialized
- */
-void emberAfDoorLockClusterClientInitCallback(chip::EndpointId endpoint);
-
-/** @brief Door Lock Cluster Client Attribute Changed
- *
- * Client Attribute Changed
- *
- * @param endpoint    Endpoint that is being initialized
- * @param attributeId Attribute that changed
- */
-void emberAfDoorLockClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
-
-/** @brief Door Lock Cluster Client Manufacturer Specific Attribute Changed
- *
- * Client Manufacturer Specific Attribute Changed
- *
- * @param endpoint          Endpoint that is being initialized
- * @param attributeId       Attribute that changed
- * @param manufacturerCode  Manufacturer Code of the attribute that changed
- */
-void emberAfDoorLockClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
-                                                                              chip::AttributeId attributeId,
-                                                                              uint16_t manufacturerCode);
-
-/** @brief Door Lock Cluster Client Message Sent
- *
- * Client Message Sent
- *
- * @param type               The type of message sent
- * @param indexOrDestination The destination or address to which the message was sent
- * @param apsFrame           The APS frame for the message
- * @param msgLen             The length of the message
- * @param message            The message that was sent
- * @param status             The status of the sent message
- */
-void emberAfDoorLockClusterClientMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
-                                                     EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
-                                                     EmberStatus status);
-
-/** @brief Door Lock Cluster Client Pre Attribute Changed
- *
- * client Pre Attribute Changed
- *
- * @param endpoint      Endpoint that is being initialized
- * @param attributeId   Attribute to be changed
- * @param attributeType Attribute type
- * @param size          Attribute size
- * @param value         Attribute value
- */
-EmberAfStatus emberAfDoorLockClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
-                                                                      EmberAfAttributeType attributeType, uint8_t size,
-                                                                      uint8_t * value);
-
-/** @brief Door Lock Cluster Client Tick
- *
- * client Tick
- *
- * @param endpoint  Endpoint that is being served
- */
-void emberAfDoorLockClusterClientTickCallback(chip::EndpointId endpoint);
-
-//
 // Door Lock Cluster server
 //
 
@@ -834,76 +485,6 @@
 void emberAfDoorLockClusterServerTickCallback(chip::EndpointId endpoint);
 
 //
-// Groups Cluster client
-//
-
-/** @brief Groups Cluster Client Init
- *
- * Client Init
- *
- * @param endpoint    Endpoint that is being initialized
- */
-void emberAfGroupsClusterClientInitCallback(chip::EndpointId endpoint);
-
-/** @brief Groups Cluster Client Attribute Changed
- *
- * Client Attribute Changed
- *
- * @param endpoint    Endpoint that is being initialized
- * @param attributeId Attribute that changed
- */
-void emberAfGroupsClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
-
-/** @brief Groups Cluster Client Manufacturer Specific Attribute Changed
- *
- * Client Manufacturer Specific Attribute Changed
- *
- * @param endpoint          Endpoint that is being initialized
- * @param attributeId       Attribute that changed
- * @param manufacturerCode  Manufacturer Code of the attribute that changed
- */
-void emberAfGroupsClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
-                                                                            chip::AttributeId attributeId,
-                                                                            uint16_t manufacturerCode);
-
-/** @brief Groups Cluster Client Message Sent
- *
- * Client Message Sent
- *
- * @param type               The type of message sent
- * @param indexOrDestination The destination or address to which the message was sent
- * @param apsFrame           The APS frame for the message
- * @param msgLen             The length of the message
- * @param message            The message that was sent
- * @param status             The status of the sent message
- */
-void emberAfGroupsClusterClientMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
-                                                   EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
-                                                   EmberStatus status);
-
-/** @brief Groups Cluster Client Pre Attribute Changed
- *
- * client Pre Attribute Changed
- *
- * @param endpoint      Endpoint that is being initialized
- * @param attributeId   Attribute to be changed
- * @param attributeType Attribute type
- * @param size          Attribute size
- * @param value         Attribute value
- */
-EmberAfStatus emberAfGroupsClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
-                                                                    EmberAfAttributeType attributeType, uint8_t size,
-                                                                    uint8_t * value);
-
-/** @brief Groups Cluster Client Tick
- *
- * client Tick
- *
- * @param endpoint  Endpoint that is being served
- */
-void emberAfGroupsClusterClientTickCallback(chip::EndpointId endpoint);
-
-//
 // Groups Cluster server
 //
 
@@ -1044,76 +625,6 @@
 void emberAfIasZoneClusterServerTickCallback(chip::EndpointId endpoint);
 
 //
-// Identify Cluster client
-//
-
-/** @brief Identify Cluster Client Init
- *
- * Client Init
- *
- * @param endpoint    Endpoint that is being initialized
- */
-void emberAfIdentifyClusterClientInitCallback(chip::EndpointId endpoint);
-
-/** @brief Identify Cluster Client Attribute Changed
- *
- * Client Attribute Changed
- *
- * @param endpoint    Endpoint that is being initialized
- * @param attributeId Attribute that changed
- */
-void emberAfIdentifyClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
-
-/** @brief Identify Cluster Client Manufacturer Specific Attribute Changed
- *
- * Client Manufacturer Specific Attribute Changed
- *
- * @param endpoint          Endpoint that is being initialized
- * @param attributeId       Attribute that changed
- * @param manufacturerCode  Manufacturer Code of the attribute that changed
- */
-void emberAfIdentifyClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
-                                                                              chip::AttributeId attributeId,
-                                                                              uint16_t manufacturerCode);
-
-/** @brief Identify Cluster Client Message Sent
- *
- * Client Message Sent
- *
- * @param type               The type of message sent
- * @param indexOrDestination The destination or address to which the message was sent
- * @param apsFrame           The APS frame for the message
- * @param msgLen             The length of the message
- * @param message            The message that was sent
- * @param status             The status of the sent message
- */
-void emberAfIdentifyClusterClientMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
-                                                     EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
-                                                     EmberStatus status);
-
-/** @brief Identify Cluster Client Pre Attribute Changed
- *
- * client Pre Attribute Changed
- *
- * @param endpoint      Endpoint that is being initialized
- * @param attributeId   Attribute to be changed
- * @param attributeType Attribute type
- * @param size          Attribute size
- * @param value         Attribute value
- */
-EmberAfStatus emberAfIdentifyClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
-                                                                      EmberAfAttributeType attributeType, uint8_t size,
-                                                                      uint8_t * value);
-
-/** @brief Identify Cluster Client Tick
- *
- * client Tick
- *
- * @param endpoint  Endpoint that is being served
- */
-void emberAfIdentifyClusterClientTickCallback(chip::EndpointId endpoint);
-
-//
 // Identify Cluster server
 //
 
@@ -1184,76 +695,6 @@
 void emberAfIdentifyClusterServerTickCallback(chip::EndpointId endpoint);
 
 //
-// Level Control Cluster client
-//
-
-/** @brief Level Control Cluster Client Init
- *
- * Client Init
- *
- * @param endpoint    Endpoint that is being initialized
- */
-void emberAfLevelControlClusterClientInitCallback(chip::EndpointId endpoint);
-
-/** @brief Level Control Cluster Client Attribute Changed
- *
- * Client Attribute Changed
- *
- * @param endpoint    Endpoint that is being initialized
- * @param attributeId Attribute that changed
- */
-void emberAfLevelControlClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
-
-/** @brief Level Control Cluster Client Manufacturer Specific Attribute Changed
- *
- * Client Manufacturer Specific Attribute Changed
- *
- * @param endpoint          Endpoint that is being initialized
- * @param attributeId       Attribute that changed
- * @param manufacturerCode  Manufacturer Code of the attribute that changed
- */
-void emberAfLevelControlClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
-                                                                                  chip::AttributeId attributeId,
-                                                                                  uint16_t manufacturerCode);
-
-/** @brief Level Control Cluster Client Message Sent
- *
- * Client Message Sent
- *
- * @param type               The type of message sent
- * @param indexOrDestination The destination or address to which the message was sent
- * @param apsFrame           The APS frame for the message
- * @param msgLen             The length of the message
- * @param message            The message that was sent
- * @param status             The status of the sent message
- */
-void emberAfLevelControlClusterClientMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
-                                                         EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
-                                                         EmberStatus status);
-
-/** @brief Level Control Cluster Client Pre Attribute Changed
- *
- * client Pre Attribute Changed
- *
- * @param endpoint      Endpoint that is being initialized
- * @param attributeId   Attribute to be changed
- * @param attributeType Attribute type
- * @param size          Attribute size
- * @param value         Attribute value
- */
-EmberAfStatus emberAfLevelControlClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
-                                                                          EmberAfAttributeType attributeType, uint8_t size,
-                                                                          uint8_t * value);
-
-/** @brief Level Control Cluster Client Tick
- *
- * client Tick
- *
- * @param endpoint  Endpoint that is being served
- */
-void emberAfLevelControlClusterClientTickCallback(chip::EndpointId endpoint);
-
-//
 // Level Control Cluster server
 //
 
@@ -1324,74 +765,6 @@
 void emberAfLevelControlClusterServerTickCallback(chip::EndpointId endpoint);
 
 //
-// On/off Cluster client
-//
-
-/** @brief On/off Cluster Client Init
- *
- * Client Init
- *
- * @param endpoint    Endpoint that is being initialized
- */
-void emberAfOnOffClusterClientInitCallback(chip::EndpointId endpoint);
-
-/** @brief On/off Cluster Client Attribute Changed
- *
- * Client Attribute Changed
- *
- * @param endpoint    Endpoint that is being initialized
- * @param attributeId Attribute that changed
- */
-void emberAfOnOffClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
-
-/** @brief On/off Cluster Client Manufacturer Specific Attribute Changed
- *
- * Client Manufacturer Specific Attribute Changed
- *
- * @param endpoint          Endpoint that is being initialized
- * @param attributeId       Attribute that changed
- * @param manufacturerCode  Manufacturer Code of the attribute that changed
- */
-void emberAfOnOffClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
-                                                                           uint16_t manufacturerCode);
-
-/** @brief On/off Cluster Client Message Sent
- *
- * Client Message Sent
- *
- * @param type               The type of message sent
- * @param indexOrDestination The destination or address to which the message was sent
- * @param apsFrame           The APS frame for the message
- * @param msgLen             The length of the message
- * @param message            The message that was sent
- * @param status             The status of the sent message
- */
-void emberAfOnOffClusterClientMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
-                                                  EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message, EmberStatus status);
-
-/** @brief On/off Cluster Client Pre Attribute Changed
- *
- * client Pre Attribute Changed
- *
- * @param endpoint      Endpoint that is being initialized
- * @param attributeId   Attribute to be changed
- * @param attributeType Attribute type
- * @param size          Attribute size
- * @param value         Attribute value
- */
-EmberAfStatus emberAfOnOffClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
-                                                                   EmberAfAttributeType attributeType, uint8_t size,
-                                                                   uint8_t * value);
-
-/** @brief On/off Cluster Client Tick
- *
- * client Tick
- *
- * @param endpoint  Endpoint that is being served
- */
-void emberAfOnOffClusterClientTickCallback(chip::EndpointId endpoint);
-
-//
 // On/off Cluster server
 //
 
@@ -1460,76 +833,6 @@
 void emberAfOnOffClusterServerTickCallback(chip::EndpointId endpoint);
 
 //
-// Scenes Cluster client
-//
-
-/** @brief Scenes Cluster Client Init
- *
- * Client Init
- *
- * @param endpoint    Endpoint that is being initialized
- */
-void emberAfScenesClusterClientInitCallback(chip::EndpointId endpoint);
-
-/** @brief Scenes Cluster Client Attribute Changed
- *
- * Client Attribute Changed
- *
- * @param endpoint    Endpoint that is being initialized
- * @param attributeId Attribute that changed
- */
-void emberAfScenesClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
-
-/** @brief Scenes Cluster Client Manufacturer Specific Attribute Changed
- *
- * Client Manufacturer Specific Attribute Changed
- *
- * @param endpoint          Endpoint that is being initialized
- * @param attributeId       Attribute that changed
- * @param manufacturerCode  Manufacturer Code of the attribute that changed
- */
-void emberAfScenesClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
-                                                                            chip::AttributeId attributeId,
-                                                                            uint16_t manufacturerCode);
-
-/** @brief Scenes Cluster Client Message Sent
- *
- * Client Message Sent
- *
- * @param type               The type of message sent
- * @param indexOrDestination The destination or address to which the message was sent
- * @param apsFrame           The APS frame for the message
- * @param msgLen             The length of the message
- * @param message            The message that was sent
- * @param status             The status of the sent message
- */
-void emberAfScenesClusterClientMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
-                                                   EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
-                                                   EmberStatus status);
-
-/** @brief Scenes Cluster Client Pre Attribute Changed
- *
- * client Pre Attribute Changed
- *
- * @param endpoint      Endpoint that is being initialized
- * @param attributeId   Attribute to be changed
- * @param attributeType Attribute type
- * @param size          Attribute size
- * @param value         Attribute value
- */
-EmberAfStatus emberAfScenesClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
-                                                                    EmberAfAttributeType attributeType, uint8_t size,
-                                                                    uint8_t * value);
-
-/** @brief Scenes Cluster Client Tick
- *
- * client Tick
- *
- * @param endpoint  Endpoint that is being served
- */
-void emberAfScenesClusterClientTickCallback(chip::EndpointId endpoint);
-
-//
 // Scenes Cluster server
 //
 
@@ -1881,20 +1184,6 @@
 bool emberAfColorControlClusterStopMoveStepCallback(uint8_t optionsMask, uint8_t optionsOverride);
 
 /**
- * @brief Door Lock Cluster LockDoorResponse Command callback
- * @param status
- */
-
-bool emberAfDoorLockClusterLockDoorResponseCallback(uint8_t status);
-
-/**
- * @brief Door Lock Cluster UnlockDoorResponse Command callback
- * @param status
- */
-
-bool emberAfDoorLockClusterUnlockDoorResponseCallback(uint8_t status);
-
-/**
  * @brief Door Lock Cluster ClearAllPins Command callback
  */
 
@@ -2081,41 +1370,6 @@
 bool emberAfDoorLockClusterUnlockWithTimeoutCallback(uint16_t timeoutInSeconds, uint8_t * pin);
 
 /**
- * @brief Groups Cluster AddGroupResponse Command callback
- * @param status
- * @param groupId
- */
-
-bool emberAfGroupsClusterAddGroupResponseCallback(uint8_t status, uint16_t groupId);
-
-/**
- * @brief Groups Cluster GetGroupMembershipResponse Command callback
- * @param capacity
- * @param groupCount
- * @param groupList
- */
-
-bool emberAfGroupsClusterGetGroupMembershipResponseCallback(uint8_t capacity, uint8_t groupCount,
-                                                            /* TYPE WARNING: array array defaults to */ uint8_t * groupList);
-
-/**
- * @brief Groups Cluster RemoveGroupResponse Command callback
- * @param status
- * @param groupId
- */
-
-bool emberAfGroupsClusterRemoveGroupResponseCallback(uint8_t status, uint16_t groupId);
-
-/**
- * @brief Groups Cluster ViewGroupResponse Command callback
- * @param status
- * @param groupId
- * @param groupName
- */
-
-bool emberAfGroupsClusterViewGroupResponseCallback(uint8_t status, uint16_t groupId, uint8_t * groupName);
-
-/**
  * @brief Groups Cluster AddGroup Command callback
  * @param groupId
  * @param groupName
@@ -2169,13 +1423,6 @@
 bool emberAfIasZoneClusterZoneEnrollResponseCallback(uint8_t enrollResponseCode, uint8_t zoneId);
 
 /**
- * @brief Identify Cluster IdentifyQueryResponse Command callback
- * @param timeout
- */
-
-bool emberAfIdentifyClusterIdentifyQueryResponseCallback(uint16_t timeout);
-
-/**
  * @brief Identify Cluster Identify Command callback
  * @param identifyTime
  */
@@ -2279,67 +1526,6 @@
 bool emberAfOnOffClusterToggleCallback();
 
 /**
- * @brief Scenes Cluster AddSceneResponse Command callback
- * @param status
- * @param groupId
- * @param sceneId
- */
-
-bool emberAfScenesClusterAddSceneResponseCallback(uint8_t status, uint16_t groupId, uint8_t sceneId);
-
-/**
- * @brief Scenes Cluster GetSceneMembershipResponse Command callback
- * @param status
- * @param capacity
- * @param groupId
- * @param sceneCount
- * @param sceneList
- */
-
-bool emberAfScenesClusterGetSceneMembershipResponseCallback(uint8_t status, uint8_t capacity, uint16_t groupId, uint8_t sceneCount,
-                                                            /* TYPE WARNING: array array defaults to */ uint8_t * sceneList);
-
-/**
- * @brief Scenes Cluster RemoveAllScenesResponse Command callback
- * @param status
- * @param groupId
- */
-
-bool emberAfScenesClusterRemoveAllScenesResponseCallback(uint8_t status, uint16_t groupId);
-
-/**
- * @brief Scenes Cluster RemoveSceneResponse Command callback
- * @param status
- * @param groupId
- * @param sceneId
- */
-
-bool emberAfScenesClusterRemoveSceneResponseCallback(uint8_t status, uint16_t groupId, uint8_t sceneId);
-
-/**
- * @brief Scenes Cluster StoreSceneResponse Command callback
- * @param status
- * @param groupId
- * @param sceneId
- */
-
-bool emberAfScenesClusterStoreSceneResponseCallback(uint8_t status, uint16_t groupId, uint8_t sceneId);
-
-/**
- * @brief Scenes Cluster ViewSceneResponse Command callback
- * @param status
- * @param groupId
- * @param sceneId
- * @param transitionTime
- * @param sceneName
- * @param extensionFieldSets
- */
-
-bool emberAfScenesClusterViewSceneResponseCallback(uint8_t status, uint16_t groupId, uint8_t sceneId, uint16_t transitionTime,
-                                                   uint8_t * sceneName,
-                                                   /* TYPE WARNING: array array defaults to */ uint8_t * extensionFieldSets);
-
-/**
  * @brief Scenes Cluster AddScene Command callback
  * @param groupId
  * @param sceneId
diff --git a/examples/all-clusters-app/all-clusters-common/gen/endpoint_config.h b/examples/all-clusters-app/all-clusters-common/gen/endpoint_config.h
index 1197299..d4a423f 100644
--- a/examples/all-clusters-app/all-clusters-common/gen/endpoint_config.h
+++ b/examples/all-clusters-app/all-clusters-common/gen/endpoint_config.h
@@ -89,62 +89,37 @@
 
 #define ZAP_ATTRIBUTE_MASK(mask) ATTRIBUTE_MASK_##mask
 // This is an array of EmberAfAttributeMetadata structures.
-#define GENERATED_ATTRIBUTE_COUNT 103
+#define GENERATED_ATTRIBUTE_COUNT 93
 #define GENERATED_ATTRIBUTES                                                                                                       \
     {                                                                                                                              \
-        { 0xFFFD, ZAP_TYPE(INT16U), 2, ZAP_ATTRIBUTE_MASK(CLIENT), { (uint8_t *) 3 } }, /* Basic (client): cluster revision */     \
-            { 0xFFFD, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 3 } },                      /* Basic (server): cluster revision */     \
-            { 0x0000, ZAP_TYPE(INT8U), 1, 0, { (uint8_t *) 0x08 } },                    /* Basic (server): ZCL version */          \
-            { 0x0007, ZAP_TYPE(ENUM8), 1, 0, { (uint8_t *) 0x00 } },                    /* Basic (server): power source */         \
-            {                                                                                                                      \
-                0xFFFD, ZAP_TYPE(INT16U), 2, ZAP_ATTRIBUTE_MASK(CLIENT), { (uint8_t *) 2 }                                         \
-            },                                                     /* Identify (client): cluster revision */                       \
-            { 0xFFFD, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 2 } }, /* Identify (server): cluster revision */                       \
+        { 0xFFFD, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 3 } },       /* Basic (server): cluster revision */                        \
+            { 0x0000, ZAP_TYPE(INT8U), 1, 0, { (uint8_t *) 0x08 } }, /* Basic (server): ZCL version */                             \
+            { 0x0007, ZAP_TYPE(ENUM8), 1, 0, { (uint8_t *) 0x00 } }, /* Basic (server): power source */                            \
+            { 0xFFFD, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 2 } },   /* Identify (server): cluster revision */                     \
             {                                                                                                                      \
                 0x0000, ZAP_TYPE(INT16U), 2, ZAP_ATTRIBUTE_MASK(WRITABLE), { (uint8_t *) 0x0000 }                                  \
-            }, /* Identify (server): identify time */                                                                              \
-            {                                                                                                                      \
-                0xFFFD, ZAP_TYPE(INT16U), 2, ZAP_ATTRIBUTE_MASK(CLIENT), { (uint8_t *) 3 }                                         \
-            },                                                      /* Groups (client): cluster revision */                        \
-            { 0xFFFD, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 3 } },  /* Groups (server): cluster revision */                        \
-            { 0x0000, ZAP_TYPE(BITMAP8), 1, 0, { (uint8_t *) 0 } }, /* Groups (server): name support */                            \
-            {                                                                                                                      \
-                0xFFFD, ZAP_TYPE(INT16U), 2, ZAP_ATTRIBUTE_MASK(CLIENT), { (uint8_t *) 3 }                                         \
-            },                                                          /* Scenes (client): cluster revision */                    \
+            },                                                          /* Identify (server): identify time */                     \
+            { 0xFFFD, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 3 } },      /* Groups (server): cluster revision */                    \
+            { 0x0000, ZAP_TYPE(BITMAP8), 1, 0, { (uint8_t *) 0 } },     /* Groups (server): name support */                        \
             { 0xFFFD, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 3 } },      /* Scenes (server): cluster revision */                    \
             { 0x0000, ZAP_TYPE(INT8U), 1, 0, { (uint8_t *) 0x00 } },    /* Scenes (server): scene count */                         \
             { 0x0001, ZAP_TYPE(INT8U), 1, 0, { (uint8_t *) 0x00 } },    /* Scenes (server): current scene */                       \
             { 0x0002, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 0x0000 } }, /* Scenes (server): current group */                       \
             { 0x0003, ZAP_TYPE(BOOLEAN), 1, 0, { (uint8_t *) 0x00 } },  /* Scenes (server): scene valid */                         \
             { 0x0004, ZAP_TYPE(BITMAP8), 1, 0, { (uint8_t *) 0 } },     /* Scenes (server): name support */                        \
-            {                                                                                                                      \
-                0xFFFD, ZAP_TYPE(INT16U), 2, ZAP_ATTRIBUTE_MASK(CLIENT), { (uint8_t *) 2 }                                         \
-            },                                                         /* On/off (client): cluster revision */                     \
-            { 0xFFFD, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 2 } },     /* On/off (server): cluster revision */                     \
-            { 0x0000, ZAP_TYPE(BOOLEAN), 1, 0, { (uint8_t *) 0x00 } }, /* On/off (server): on/off */                               \
-            {                                                                                                                      \
-                0xFFFD, ZAP_TYPE(INT16U), 2, ZAP_ATTRIBUTE_MASK(CLIENT), { (uint8_t *) 3 }                                         \
-            },                                                       /* Level Control (client): cluster revision */                \
-            { 0xFFFD, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 3 } },   /* Level Control (server): cluster revision */                \
-            { 0x0000, ZAP_TYPE(INT8U), 1, 0, { (uint8_t *) 0x00 } }, /* Level Control (server): current level */                   \
-            {                                                                                                                      \
-                0xFFFD, ZAP_TYPE(INT16U), 2, ZAP_ATTRIBUTE_MASK(CLIENT), { (uint8_t *) 3 }                                         \
-            },                                                      /* Door Lock (client): cluster revision */                     \
-            { 0xFFFD, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 3 } },  /* Door Lock (server): cluster revision */                     \
-            { 0x0000, ZAP_TYPE(ENUM8), 1, 0, { (uint8_t *) 0 } },   /* Door Lock (server): lock state */                           \
-            { 0x0001, ZAP_TYPE(ENUM8), 1, 0, { (uint8_t *) 0 } },   /* Door Lock (server): lock type */                            \
-            { 0x0002, ZAP_TYPE(BOOLEAN), 1, 0, { (uint8_t *) 0 } }, /* Door Lock (server): actuator enabled */                     \
-            {                                                                                                                      \
-                0xFFFD, ZAP_TYPE(INT16U), 2, ZAP_ATTRIBUTE_MASK(CLIENT), { (uint8_t *) 0x0001 }                                    \
-            },                                                          /* Barrier Control (client): cluster revision */           \
+            { 0xFFFD, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 2 } },      /* On/off (server): cluster revision */                    \
+            { 0x0000, ZAP_TYPE(BOOLEAN), 1, 0, { (uint8_t *) 0x00 } },  /* On/off (server): on/off */                              \
+            { 0xFFFD, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 3 } },      /* Level Control (server): cluster revision */             \
+            { 0x0000, ZAP_TYPE(INT8U), 1, 0, { (uint8_t *) 0x00 } },    /* Level Control (server): current level */                \
+            { 0xFFFD, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 3 } },      /* Door Lock (server): cluster revision */                 \
+            { 0x0000, ZAP_TYPE(ENUM8), 1, 0, { (uint8_t *) 0 } },       /* Door Lock (server): lock state */                       \
+            { 0x0001, ZAP_TYPE(ENUM8), 1, 0, { (uint8_t *) 0 } },       /* Door Lock (server): lock type */                        \
+            { 0x0002, ZAP_TYPE(BOOLEAN), 1, 0, { (uint8_t *) 0 } },     /* Door Lock (server): actuator enabled */                 \
             { 0xFFFD, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 0x0001 } }, /* Barrier Control (server): cluster revision */           \
             { 0x0001, ZAP_TYPE(ENUM8), 1, 0, { (uint8_t *) 0 } },       /* Barrier Control (server): barrier moving state */       \
             { 0x0002, ZAP_TYPE(BITMAP16), 2, 0, { (uint8_t *) 0 } },    /* Barrier Control (server): barrier safety status */      \
             { 0x0003, ZAP_TYPE(BITMAP8), 1, 0, { (uint8_t *) 0 } },     /* Barrier Control (server): barrier capabilities */       \
             { 0x000A, ZAP_TYPE(INT8U), 1, 0, { (uint8_t *) 0 } },       /* Barrier Control (server): barrier position */           \
-            {                                                                                                                      \
-                0xFFFD, ZAP_TYPE(INT16U), 2, ZAP_ATTRIBUTE_MASK(CLIENT), { (uint8_t *) 3 }                                         \
-            },                                                          /* Color Control (client): cluster revision */             \
             { 0xFFFD, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 3 } },      /* Color Control (server): cluster revision */             \
             { 0x0000, ZAP_TYPE(INT8U), 1, 0, { (uint8_t *) 0x00 } },    /* Color Control (server): current hue */                  \
             { 0x0001, ZAP_TYPE(INT8U), 1, 0, { (uint8_t *) 0x00 } },    /* Color Control (server): current saturation */           \
@@ -236,11 +211,8 @@
             { 0x0002, ZAP_TYPE(BITMAP16), 2, 0, { (uint8_t *) 0x0000 } }, /* IAS Zone (server): zone status */                     \
             {                                                                                                                      \
                 0x0010, ZAP_TYPE(IEEE_ADDRESS), 8, ZAP_ATTRIBUTE_MASK(WRITABLE), { (uint8_t *) ZAP_LONG_DEFAULTS_INDEX(254) }      \
-            },                                                       /* IAS Zone (server): IAS CIE address */                      \
-            { 0x0011, ZAP_TYPE(INT8U), 1, 0, { (uint8_t *) 0xff } }, /* IAS Zone (server): Zone ID */                              \
-            {                                                                                                                      \
-                0xFFFD, ZAP_TYPE(INT16U), 2, ZAP_ATTRIBUTE_MASK(CLIENT), { (uint8_t *) 0x0001 }                                    \
-            },                                                          /* Binding (client): cluster revision */                   \
+            },                                                          /* IAS Zone (server): IAS CIE address */                   \
+            { 0x0011, ZAP_TYPE(INT8U), 1, 0, { (uint8_t *) 0xff } },    /* IAS Zone (server): Zone ID */                           \
             { 0xFFFD, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 0x0001 } }, /* Binding (server): cluster revision */                   \
             { 0xFFFD, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 3 } },      /* Basic (server): cluster revision */                     \
             { 0x0000, ZAP_TYPE(INT8U), 1, 0, { (uint8_t *) 0x08 } },    /* Basic (server): ZCL version */                          \
@@ -283,93 +255,71 @@
     };
 
 #define ZAP_CLUSTER_MASK(mask) CLUSTER_MASK_##mask
-#define GENERATED_CLUSTER_COUNT 24
+#define GENERATED_CLUSTER_COUNT 14
 #define GENERATED_CLUSTERS                                                                                                         \
     {                                                                                                                              \
-        { 0x0000, ZAP_ATTRIBUTE_INDEX(0), 1, 2, ZAP_CLUSTER_MASK(CLIENT), NULL },     /* Endpoint: 1, Cluster: Basic (client) */   \
-            { 0x0000, ZAP_ATTRIBUTE_INDEX(1), 3, 4, ZAP_CLUSTER_MASK(SERVER), NULL }, /* Endpoint: 1, Cluster: Basic (server) */   \
-            {                                                                                                                      \
-                0x0003, ZAP_ATTRIBUTE_INDEX(4), 1, 2, ZAP_CLUSTER_MASK(CLIENT), NULL                                               \
-            }, /* Endpoint: 1, Cluster: Identify (client) */                                                                       \
+        { 0x0000, ZAP_ATTRIBUTE_INDEX(0), 3, 4, ZAP_CLUSTER_MASK(SERVER), NULL }, /* Endpoint: 1, Cluster: Basic (server) */       \
             { 0x0003,                                                                                                              \
-              ZAP_ATTRIBUTE_INDEX(5),                                                                                              \
+              ZAP_ATTRIBUTE_INDEX(3),                                                                                              \
               2,                                                                                                                   \
               4,                                                                                                                   \
               ZAP_CLUSTER_MASK(SERVER) | ZAP_CLUSTER_MASK(INIT_FUNCTION) | ZAP_CLUSTER_MASK(ATTRIBUTE_CHANGED_FUNCTION),           \
               chipFuncArrayIdentifyServer }, /* Endpoint: 1, Cluster: Identify (server) */                                         \
-            { 0x0004, ZAP_ATTRIBUTE_INDEX(7), 1, 2, ZAP_CLUSTER_MASK(CLIENT), NULL }, /* Endpoint: 1, Cluster: Groups (client) */  \
             { 0x0004,                                                                                                              \
-              ZAP_ATTRIBUTE_INDEX(8),                                                                                              \
+              ZAP_ATTRIBUTE_INDEX(5),                                                                                              \
               2,                                                                                                                   \
               3,                                                                                                                   \
               ZAP_CLUSTER_MASK(SERVER) | ZAP_CLUSTER_MASK(INIT_FUNCTION),                                                          \
-              chipFuncArrayGroupsServer },                                             /* Endpoint: 1, Cluster: Groups (server) */ \
-            { 0x0005, ZAP_ATTRIBUTE_INDEX(10), 1, 2, ZAP_CLUSTER_MASK(CLIENT), NULL }, /* Endpoint: 1, Cluster: Scenes (client) */ \
+              chipFuncArrayGroupsServer }, /* Endpoint: 1, Cluster: Groups (server) */                                             \
             { 0x0005,                                                                                                              \
-              ZAP_ATTRIBUTE_INDEX(11),                                                                                             \
+              ZAP_ATTRIBUTE_INDEX(7),                                                                                              \
               6,                                                                                                                   \
               8,                                                                                                                   \
               ZAP_CLUSTER_MASK(SERVER) | ZAP_CLUSTER_MASK(INIT_FUNCTION),                                                          \
-              chipFuncArrayScenesServer },                                             /* Endpoint: 1, Cluster: Scenes (server) */ \
-            { 0x0006, ZAP_ATTRIBUTE_INDEX(17), 1, 2, ZAP_CLUSTER_MASK(CLIENT), NULL }, /* Endpoint: 1, Cluster: On/off (client) */ \
+              chipFuncArrayScenesServer }, /* Endpoint: 1, Cluster: Scenes (server) */                                             \
             { 0x0006,                                                                                                              \
-              ZAP_ATTRIBUTE_INDEX(18),                                                                                             \
+              ZAP_ATTRIBUTE_INDEX(13),                                                                                             \
               2,                                                                                                                   \
               3,                                                                                                                   \
               ZAP_CLUSTER_MASK(SERVER) | ZAP_CLUSTER_MASK(INIT_FUNCTION),                                                          \
               chipFuncArrayOnOffServer }, /* Endpoint: 1, Cluster: On/off (server) */                                              \
-            {                                                                                                                      \
-                0x0008, ZAP_ATTRIBUTE_INDEX(20), 1, 2, ZAP_CLUSTER_MASK(CLIENT), NULL                                              \
-            }, /* Endpoint: 1, Cluster: Level Control (client) */                                                                  \
             { 0x0008,                                                                                                              \
-              ZAP_ATTRIBUTE_INDEX(21),                                                                                             \
+              ZAP_ATTRIBUTE_INDEX(15),                                                                                             \
               2,                                                                                                                   \
               3,                                                                                                                   \
               ZAP_CLUSTER_MASK(SERVER) | ZAP_CLUSTER_MASK(INIT_FUNCTION),                                                          \
               chipFuncArrayLevelControlServer }, /* Endpoint: 1, Cluster: Level Control (server) */                                \
-            {                                                                                                                      \
-                0x0101, ZAP_ATTRIBUTE_INDEX(23), 1, 2, ZAP_CLUSTER_MASK(CLIENT), NULL                                              \
-            }, /* Endpoint: 1, Cluster: Door Lock (client) */                                                                      \
             { 0x0101,                                                                                                              \
-              ZAP_ATTRIBUTE_INDEX(24),                                                                                             \
+              ZAP_ATTRIBUTE_INDEX(17),                                                                                             \
               4,                                                                                                                   \
               5,                                                                                                                   \
               ZAP_CLUSTER_MASK(SERVER) | ZAP_CLUSTER_MASK(ATTRIBUTE_CHANGED_FUNCTION),                                             \
               chipFuncArrayDoorLockServer }, /* Endpoint: 1, Cluster: Door Lock (server) */                                        \
             {                                                                                                                      \
-                0x0103, ZAP_ATTRIBUTE_INDEX(28), 1, 2, ZAP_CLUSTER_MASK(CLIENT), NULL                                              \
-            }, /* Endpoint: 1, Cluster: Barrier Control (client) */                                                                \
-            {                                                                                                                      \
-                0x0103, ZAP_ATTRIBUTE_INDEX(29), 5, 7, ZAP_CLUSTER_MASK(SERVER), NULL                                              \
+                0x0103, ZAP_ATTRIBUTE_INDEX(21), 5, 7, ZAP_CLUSTER_MASK(SERVER), NULL                                              \
             }, /* Endpoint: 1, Cluster: Barrier Control (server) */                                                                \
-            {                                                                                                                      \
-                0x0300, ZAP_ATTRIBUTE_INDEX(34), 1, 2, ZAP_CLUSTER_MASK(CLIENT), NULL                                              \
-            }, /* Endpoint: 1, Cluster: Color Control (client) */                                                                  \
             { 0x0300,                                                                                                              \
-              ZAP_ATTRIBUTE_INDEX(35),                                                                                             \
+              ZAP_ATTRIBUTE_INDEX(26),                                                                                             \
               51,                                                                                                                  \
               336,                                                                                                                 \
               ZAP_CLUSTER_MASK(SERVER) | ZAP_CLUSTER_MASK(INIT_FUNCTION),                                                          \
               chipFuncArrayColorControlServer }, /* Endpoint: 1, Cluster: Color Control (server) */                                \
             {                                                                                                                      \
-                0x0402, ZAP_ATTRIBUTE_INDEX(86), 4, 8, ZAP_CLUSTER_MASK(SERVER), NULL                                              \
+                0x0402, ZAP_ATTRIBUTE_INDEX(77), 4, 8, ZAP_CLUSTER_MASK(SERVER), NULL                                              \
             }, /* Endpoint: 1, Cluster: Temperature Measurement (server) */                                                        \
             { 0x0500,                                                                                                              \
-              ZAP_ATTRIBUTE_INDEX(90),                                                                                             \
+              ZAP_ATTRIBUTE_INDEX(81),                                                                                             \
               6,                                                                                                                   \
               16,                                                                                                                  \
               ZAP_CLUSTER_MASK(SERVER) | ZAP_CLUSTER_MASK(INIT_FUNCTION) | ZAP_CLUSTER_MASK(PRE_ATTRIBUTE_CHANGED_FUNCTION) |      \
                   ZAP_CLUSTER_MASK(MESSAGE_SENT_FUNCTION),                                                                         \
               chipFuncArrayIasZoneServer }, /* Endpoint: 1, Cluster: IAS Zone (server) */                                          \
             {                                                                                                                      \
-                0xF000, ZAP_ATTRIBUTE_INDEX(96), 1, 2, ZAP_CLUSTER_MASK(CLIENT), NULL                                              \
-            }, /* Endpoint: 1, Cluster: Binding (client) */                                                                        \
-            {                                                                                                                      \
-                0xF000, ZAP_ATTRIBUTE_INDEX(97), 1, 2, ZAP_CLUSTER_MASK(SERVER), NULL                                              \
+                0xF000, ZAP_ATTRIBUTE_INDEX(87), 1, 2, ZAP_CLUSTER_MASK(SERVER), NULL                                              \
             }, /* Endpoint: 1, Cluster: Binding (server) */                                                                        \
-            { 0x0000, ZAP_ATTRIBUTE_INDEX(98), 3, 4, ZAP_CLUSTER_MASK(SERVER), NULL }, /* Endpoint: 2, Cluster: Basic (server) */  \
+            { 0x0000, ZAP_ATTRIBUTE_INDEX(88), 3, 4, ZAP_CLUSTER_MASK(SERVER), NULL }, /* Endpoint: 2, Cluster: Basic (server) */  \
             { 0x0006,                                                                                                              \
-              ZAP_ATTRIBUTE_INDEX(101),                                                                                            \
+              ZAP_ATTRIBUTE_INDEX(91),                                                                                             \
               2,                                                                                                                   \
               3,                                                                                                                   \
               ZAP_CLUSTER_MASK(SERVER) | ZAP_CLUSTER_MASK(INIT_FUNCTION),                                                          \
@@ -381,7 +331,7 @@
 // This is an array of EmberAfEndpointType structures.
 #define GENERATED_ENDPOINT_TYPES                                                                                                   \
     {                                                                                                                              \
-        { ZAP_CLUSTER_INDEX(0), 22, 419 }, { ZAP_CLUSTER_INDEX(22), 2, 7 },                                                        \
+        { ZAP_CLUSTER_INDEX(0), 12, 399 }, { ZAP_CLUSTER_INDEX(12), 2, 7 },                                                        \
     }
 
 // Largest attribute size is needed for various buffers
@@ -391,7 +341,7 @@
 #define ATTRIBUTE_SINGLETONS_SIZE (0)
 
 // Total size of attribute storage
-#define ATTRIBUTE_MAX_SIZE (426)
+#define ATTRIBUTE_MAX_SIZE (406)
 
 // Number of fixed endpoints
 #define FIXED_ENDPOINT_COUNT (2)
@@ -435,291 +385,158 @@
 
 // Array of EmberAfCommandMetadata structs.
 #define ZAP_COMMAND_MASK(mask) COMMAND_MASK_##mask
-#define EMBER_AF_GENERATED_COMMAND_COUNT (171)
+#define EMBER_AF_GENERATED_COMMAND_COUNT (89)
 #define GENERATED_COMMANDS                                                                                                         \
     {                                                                                                                              \
         { 0x0000, 0x00,                                                                                                            \
-          ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Basic (client): MfgSpecificPing */           \
-            {                                                                                                                      \
-                0x0000, 0x00, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
-            }, /* Basic (client): ResetToFactoryDefaults */                                                                        \
-            { 0x0000, 0x00,                                                                                                        \
-              ZAP_COMMAND_MASK(INCOMING_SERVER) | ZAP_COMMAND_MASK(OUTGOING_SERVER) }, /* Basic (server): MfgSpecificPing */       \
+          ZAP_COMMAND_MASK(INCOMING_SERVER) | ZAP_COMMAND_MASK(OUTGOING_SERVER) }, /* Basic (server): MfgSpecificPing */           \
             {                                                                                                                      \
                 0x0000, 0x00, ZAP_COMMAND_MASK(INCOMING_SERVER) | ZAP_COMMAND_MASK(OUTGOING_SERVER)                                \
             }, /* Basic (server): ResetToFactoryDefaults */                                                                        \
             {                                                                                                                      \
                 0x0000, 0x00, ZAP_COMMAND_MASK(INCOMING_SERVER) | ZAP_COMMAND_MASK(OUTGOING_SERVER)                                \
             },                                                   /* Basic (server): ResetToFactoryDefaults */                      \
-            { 0x0003, 0x00, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Identify (client): Identify */                                 \
-            { 0x0003, 0x00, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Identify (client): IdentifyQueryResponse */                    \
             { 0x0003, 0x00, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Identify (server): Identify */                                 \
             { 0x0003, 0x00, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Identify (server): IdentifyQueryResponse */                    \
-            { 0x0003, 0x01, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Identify (client): IdentifyQuery */                            \
             { 0x0003, 0x01, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Identify (server): IdentifyQuery */                            \
-            { 0x0004, 0x00, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Groups (client): AddGroup */                                   \
-            { 0x0004, 0x00, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Groups (client): AddGroupResponse */                           \
             { 0x0004, 0x00, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Groups (server): AddGroup */                                   \
             { 0x0004, 0x00, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Groups (server): AddGroupResponse */                           \
-            { 0x0004, 0x01, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Groups (client): ViewGroup */                                  \
-            { 0x0004, 0x01, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Groups (client): ViewGroupResponse */                          \
             { 0x0004, 0x01, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Groups (server): ViewGroup */                                  \
             { 0x0004, 0x01, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Groups (server): ViewGroupResponse */                          \
-            { 0x0004, 0x02, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Groups (client): GetGroupMembership */                         \
-            { 0x0004, 0x02, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Groups (client): GetGroupMembershipResponse */                 \
             { 0x0004, 0x02, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Groups (server): GetGroupMembership */                         \
             { 0x0004, 0x02, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Groups (server): GetGroupMembershipResponse */                 \
-            { 0x0004, 0x03, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Groups (client): RemoveGroup */                                \
-            { 0x0004, 0x03, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Groups (client): RemoveGroupResponse */                        \
             { 0x0004, 0x03, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Groups (server): RemoveGroup */                                \
             { 0x0004, 0x03, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Groups (server): RemoveGroupResponse */                        \
-            { 0x0004, 0x04, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Groups (client): RemoveAllGroups */                            \
             { 0x0004, 0x04, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Groups (server): RemoveAllGroups */                            \
-            { 0x0004, 0x05, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Groups (client): AddGroupIfIdentifying */                      \
             { 0x0004, 0x05, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Groups (server): AddGroupIfIdentifying */                      \
-            { 0x0005, 0x00, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Scenes (client): AddScene */                                   \
-            { 0x0005, 0x00, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Scenes (client): AddSceneResponse */                           \
             { 0x0005, 0x00, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Scenes (server): AddScene */                                   \
             { 0x0005, 0x00, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Scenes (server): AddSceneResponse */                           \
-            { 0x0005, 0x01, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Scenes (client): ViewScene */                                  \
-            { 0x0005, 0x01, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Scenes (client): ViewSceneResponse */                          \
             { 0x0005, 0x01, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Scenes (server): ViewScene */                                  \
             { 0x0005, 0x01, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Scenes (server): ViewSceneResponse */                          \
-            { 0x0005, 0x02, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Scenes (client): RemoveScene */                                \
-            { 0x0005, 0x02, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Scenes (client): RemoveSceneResponse */                        \
             { 0x0005, 0x02, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Scenes (server): RemoveScene */                                \
             { 0x0005, 0x02, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Scenes (server): RemoveSceneResponse */                        \
-            { 0x0005, 0x03, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Scenes (client): RemoveAllScenes */                            \
-            { 0x0005, 0x03, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Scenes (client): RemoveAllScenesResponse */                    \
             { 0x0005, 0x03, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Scenes (server): RemoveAllScenes */                            \
             { 0x0005, 0x03, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Scenes (server): RemoveAllScenesResponse */                    \
-            { 0x0005, 0x04, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Scenes (client): StoreScene */                                 \
-            { 0x0005, 0x04, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Scenes (client): StoreSceneResponse */                         \
             { 0x0005, 0x04, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Scenes (server): StoreScene */                                 \
             { 0x0005, 0x04, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Scenes (server): StoreSceneResponse */                         \
-            { 0x0005, 0x05, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Scenes (client): RecallScene */                                \
             { 0x0005, 0x05, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Scenes (server): RecallScene */                                \
-            { 0x0005, 0x06, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Scenes (client): GetSceneMembership */                         \
-            { 0x0005, 0x06, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Scenes (client): GetSceneMembershipResponse */                 \
             { 0x0005, 0x06, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Scenes (server): GetSceneMembership */                         \
             { 0x0005, 0x06, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Scenes (server): GetSceneMembershipResponse */                 \
-            { 0x0006, 0x00, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* On/off (client): Off */                                        \
             { 0x0006, 0x00, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* On/off (server): Off */                                        \
             { 0x0006, 0x00, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* On/off (server): Off */                                        \
-            { 0x0006, 0x01, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* On/off (client): On */                                         \
             { 0x0006, 0x01, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* On/off (server): On */                                         \
             { 0x0006, 0x01, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* On/off (server): On */                                         \
-            { 0x0006, 0x02, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* On/off (client): Toggle */                                     \
             { 0x0006, 0x02, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* On/off (server): Toggle */                                     \
             { 0x0006, 0x02, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* On/off (server): Toggle */                                     \
-            { 0x0008, 0x00, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Level Control (client): MoveToLevel */                         \
             { 0x0008, 0x00, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Level Control (server): MoveToLevel */                         \
-            { 0x0008, 0x01, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Level Control (client): Move */                                \
             { 0x0008, 0x01, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Level Control (server): Move */                                \
-            { 0x0008, 0x02, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Level Control (client): Step */                                \
             { 0x0008, 0x02, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Level Control (server): Step */                                \
-            { 0x0008, 0x03, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Level Control (client): Stop */                                \
             { 0x0008, 0x03, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Level Control (server): Stop */                                \
-            { 0x0008, 0x04, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Level Control (client): MoveToLevelWithOnOff */                \
             { 0x0008, 0x04, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Level Control (server): MoveToLevelWithOnOff */                \
-            { 0x0008, 0x05, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Level Control (client): MoveWithOnOff */                       \
             { 0x0008, 0x05, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Level Control (server): MoveWithOnOff */                       \
-            { 0x0008, 0x06, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Level Control (client): StepWithOnOff */                       \
             { 0x0008, 0x06, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Level Control (server): StepWithOnOff */                       \
-            { 0x0008, 0x07, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Level Control (client): StopWithOnOff */                       \
             { 0x0008, 0x07, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Level Control (server): StopWithOnOff */                       \
-            { 0x0101, 0x00, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Door Lock (client): LockDoor */                                \
-            { 0x0101, 0x00, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Door Lock (client): LockDoorResponse */                        \
             { 0x0101, 0x00, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Door Lock (server): LockDoor */                                \
             { 0x0101, 0x00, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Door Lock (server): LockDoorResponse */                        \
-            { 0x0101, 0x01, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Door Lock (client): UnlockDoor */                              \
-            { 0x0101, 0x01, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Door Lock (client): UnlockDoorResponse */                      \
             { 0x0101, 0x01, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Door Lock (server): UnlockDoor */                              \
             { 0x0101, 0x01, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Door Lock (server): UnlockDoorResponse */                      \
             { 0x0101, 0x03,                                                                                                        \
-              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Door Lock (client): UnlockWithTimeout */ \
-            { 0x0101, 0x03,                                                                                                        \
               ZAP_COMMAND_MASK(INCOMING_SERVER) | ZAP_COMMAND_MASK(OUTGOING_SERVER) }, /* Door Lock (server): UnlockWithTimeout */ \
             { 0x0101, 0x04,                                                                                                        \
-              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Door Lock (client): GetLogRecord */      \
-            { 0x0101, 0x04,                                                                                                        \
               ZAP_COMMAND_MASK(INCOMING_SERVER) | ZAP_COMMAND_MASK(OUTGOING_SERVER) }, /* Door Lock (server): GetLogRecord */      \
             { 0x0101, 0x05,                                                                                                        \
-              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Door Lock (client): SetPin */            \
-            { 0x0101, 0x05,                                                                                                        \
               ZAP_COMMAND_MASK(INCOMING_SERVER) | ZAP_COMMAND_MASK(OUTGOING_SERVER) }, /* Door Lock (server): SetPin */            \
             { 0x0101, 0x06,                                                                                                        \
-              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Door Lock (client): GetPin */            \
-            { 0x0101, 0x06,                                                                                                        \
               ZAP_COMMAND_MASK(INCOMING_SERVER) | ZAP_COMMAND_MASK(OUTGOING_SERVER) }, /* Door Lock (server): GetPin */            \
             { 0x0101, 0x07,                                                                                                        \
-              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Door Lock (client): ClearPin */          \
-            { 0x0101, 0x07,                                                                                                        \
               ZAP_COMMAND_MASK(INCOMING_SERVER) | ZAP_COMMAND_MASK(OUTGOING_SERVER) }, /* Door Lock (server): ClearPin */          \
             { 0x0101, 0x08,                                                                                                        \
-              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Door Lock (client): ClearAllPins */      \
-            { 0x0101, 0x08,                                                                                                        \
               ZAP_COMMAND_MASK(INCOMING_SERVER) | ZAP_COMMAND_MASK(OUTGOING_SERVER) }, /* Door Lock (server): ClearAllPins */      \
             {                                                                                                                      \
-                0x0101, 0x0B, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
-            }, /* Door Lock (client): SetWeekdaySchedule */                                                                        \
-            {                                                                                                                      \
                 0x0101, 0x0B, ZAP_COMMAND_MASK(INCOMING_SERVER) | ZAP_COMMAND_MASK(OUTGOING_SERVER)                                \
             }, /* Door Lock (server): SetWeekdaySchedule */                                                                        \
             {                                                                                                                      \
-                0x0101, 0x0C, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
-            }, /* Door Lock (client): GetWeekdaySchedule */                                                                        \
-            {                                                                                                                      \
                 0x0101, 0x0C, ZAP_COMMAND_MASK(INCOMING_SERVER) | ZAP_COMMAND_MASK(OUTGOING_SERVER)                                \
             }, /* Door Lock (server): GetWeekdaySchedule */                                                                        \
             {                                                                                                                      \
-                0x0101, 0x0D, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
-            }, /* Door Lock (client): ClearWeekdaySchedule */                                                                      \
-            {                                                                                                                      \
                 0x0101, 0x0D, ZAP_COMMAND_MASK(INCOMING_SERVER) | ZAP_COMMAND_MASK(OUTGOING_SERVER)                                \
             }, /* Door Lock (server): ClearWeekdaySchedule */                                                                      \
             {                                                                                                                      \
-                0x0101, 0x0E, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
-            }, /* Door Lock (client): SetYeardaySchedule */                                                                        \
-            {                                                                                                                      \
                 0x0101, 0x0E, ZAP_COMMAND_MASK(INCOMING_SERVER) | ZAP_COMMAND_MASK(OUTGOING_SERVER)                                \
             }, /* Door Lock (server): SetYeardaySchedule */                                                                        \
             {                                                                                                                      \
-                0x0101, 0x0F, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
-            }, /* Door Lock (client): GetYeardaySchedule */                                                                        \
-            {                                                                                                                      \
                 0x0101, 0x0F, ZAP_COMMAND_MASK(INCOMING_SERVER) | ZAP_COMMAND_MASK(OUTGOING_SERVER)                                \
             }, /* Door Lock (server): GetYeardaySchedule */                                                                        \
             {                                                                                                                      \
-                0x0101, 0x10, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
-            }, /* Door Lock (client): ClearYeardaySchedule */                                                                      \
-            {                                                                                                                      \
                 0x0101, 0x10, ZAP_COMMAND_MASK(INCOMING_SERVER) | ZAP_COMMAND_MASK(OUTGOING_SERVER)                                \
             }, /* Door Lock (server): ClearYeardaySchedule */                                                                      \
             {                                                                                                                      \
-                0x0101, 0x11, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
-            }, /* Door Lock (client): SetHolidaySchedule */                                                                        \
-            {                                                                                                                      \
                 0x0101, 0x11, ZAP_COMMAND_MASK(INCOMING_SERVER) | ZAP_COMMAND_MASK(OUTGOING_SERVER)                                \
             }, /* Door Lock (server): SetHolidaySchedule */                                                                        \
             {                                                                                                                      \
-                0x0101, 0x12, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
-            }, /* Door Lock (client): GetHolidaySchedule */                                                                        \
-            {                                                                                                                      \
                 0x0101, 0x12, ZAP_COMMAND_MASK(INCOMING_SERVER) | ZAP_COMMAND_MASK(OUTGOING_SERVER)                                \
             }, /* Door Lock (server): GetHolidaySchedule */                                                                        \
             {                                                                                                                      \
-                0x0101, 0x13, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
-            }, /* Door Lock (client): ClearHolidaySchedule */                                                                      \
-            {                                                                                                                      \
                 0x0101, 0x13, ZAP_COMMAND_MASK(INCOMING_SERVER) | ZAP_COMMAND_MASK(OUTGOING_SERVER)                                \
             }, /* Door Lock (server): ClearHolidaySchedule */                                                                      \
             { 0x0101, 0x14,                                                                                                        \
-              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Door Lock (client): SetUserType */       \
-            { 0x0101, 0x14,                                                                                                        \
               ZAP_COMMAND_MASK(INCOMING_SERVER) | ZAP_COMMAND_MASK(OUTGOING_SERVER) }, /* Door Lock (server): SetUserType */       \
             { 0x0101, 0x15,                                                                                                        \
-              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Door Lock (client): GetUserType */       \
-            { 0x0101, 0x15,                                                                                                        \
               ZAP_COMMAND_MASK(INCOMING_SERVER) | ZAP_COMMAND_MASK(OUTGOING_SERVER) }, /* Door Lock (server): GetUserType */       \
             { 0x0101, 0x16,                                                                                                        \
-              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Door Lock (client): SetRfid */           \
-            { 0x0101, 0x16,                                                                                                        \
               ZAP_COMMAND_MASK(INCOMING_SERVER) | ZAP_COMMAND_MASK(OUTGOING_SERVER) }, /* Door Lock (server): SetRfid */           \
             { 0x0101, 0x17,                                                                                                        \
-              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Door Lock (client): GetRfid */           \
-            { 0x0101, 0x17,                                                                                                        \
               ZAP_COMMAND_MASK(INCOMING_SERVER) | ZAP_COMMAND_MASK(OUTGOING_SERVER) }, /* Door Lock (server): GetRfid */           \
             { 0x0101, 0x18,                                                                                                        \
-              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Door Lock (client): ClearRfid */         \
-            { 0x0101, 0x18,                                                                                                        \
               ZAP_COMMAND_MASK(INCOMING_SERVER) | ZAP_COMMAND_MASK(OUTGOING_SERVER) }, /* Door Lock (server): ClearRfid */         \
             { 0x0101, 0x19,                                                                                                        \
-              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Door Lock (client): ClearAllRfids */     \
-            { 0x0101, 0x19,                                                                                                        \
               ZAP_COMMAND_MASK(INCOMING_SERVER) | ZAP_COMMAND_MASK(OUTGOING_SERVER) }, /* Door Lock (server): ClearAllRfids */     \
-            { 0x0103, 0x00, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Barrier Control (client): BarrierControlGoToPercent */         \
             { 0x0103, 0x00, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Barrier Control (server): BarrierControlGoToPercent */         \
-            { 0x0103, 0x01, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Barrier Control (client): BarrierControlStop */                \
             { 0x0103, 0x01, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Barrier Control (server): BarrierControlStop */                \
             { 0x0300, 0x00,                                                                                                        \
-              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Color Control (client): MoveToHue */     \
-            { 0x0300, 0x00,                                                                                                        \
               ZAP_COMMAND_MASK(INCOMING_SERVER) | ZAP_COMMAND_MASK(OUTGOING_SERVER) }, /* Color Control (server): MoveToHue */     \
             { 0x0300, 0x01,                                                                                                        \
-              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Color Control (client): MoveHue */       \
-            { 0x0300, 0x01,                                                                                                        \
               ZAP_COMMAND_MASK(INCOMING_SERVER) | ZAP_COMMAND_MASK(OUTGOING_SERVER) }, /* Color Control (server): MoveHue */       \
             { 0x0300, 0x02,                                                                                                        \
-              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Color Control (client): StepHue */       \
-            { 0x0300, 0x02,                                                                                                        \
               ZAP_COMMAND_MASK(INCOMING_SERVER) | ZAP_COMMAND_MASK(OUTGOING_SERVER) }, /* Color Control (server): StepHue */       \
             {                                                                                                                      \
-                0x0300, 0x03, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
-            }, /* Color Control (client): MoveToSaturation */                                                                      \
-            {                                                                                                                      \
                 0x0300, 0x03, ZAP_COMMAND_MASK(INCOMING_SERVER) | ZAP_COMMAND_MASK(OUTGOING_SERVER)                                \
             }, /* Color Control (server): MoveToSaturation */                                                                      \
             {                                                                                                                      \
-                0x0300, 0x04, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
-            }, /* Color Control (client): MoveSaturation */                                                                        \
-            {                                                                                                                      \
                 0x0300, 0x04, ZAP_COMMAND_MASK(INCOMING_SERVER) | ZAP_COMMAND_MASK(OUTGOING_SERVER)                                \
             }, /* Color Control (server): MoveSaturation */                                                                        \
             {                                                                                                                      \
-                0x0300, 0x05, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
-            }, /* Color Control (client): StepSaturation */                                                                        \
-            {                                                                                                                      \
                 0x0300, 0x05, ZAP_COMMAND_MASK(INCOMING_SERVER) | ZAP_COMMAND_MASK(OUTGOING_SERVER)                                \
             }, /* Color Control (server): StepSaturation */                                                                        \
             {                                                                                                                      \
-                0x0300, 0x06, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
-            }, /* Color Control (client): MoveToHueAndSaturation */                                                                \
-            {                                                                                                                      \
                 0x0300, 0x06, ZAP_COMMAND_MASK(INCOMING_SERVER) | ZAP_COMMAND_MASK(OUTGOING_SERVER)                                \
             },                                                   /* Color Control (server): MoveToHueAndSaturation */              \
-            { 0x0300, 0x07, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Color Control (client): MoveToColor */                         \
             { 0x0300, 0x07, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Color Control (server): MoveToColor */                         \
-            { 0x0300, 0x08, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Color Control (client): MoveColor */                           \
             { 0x0300, 0x08, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Color Control (server): MoveColor */                           \
-            { 0x0300, 0x09, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Color Control (client): StepColor */                           \
             { 0x0300, 0x09, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Color Control (server): StepColor */                           \
             {                                                                                                                      \
-                0x0300, 0x0A, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
-            }, /* Color Control (client): MoveToColorTemperature */                                                                \
-            {                                                                                                                      \
                 0x0300, 0x0A, ZAP_COMMAND_MASK(INCOMING_SERVER) | ZAP_COMMAND_MASK(OUTGOING_SERVER)                                \
             }, /* Color Control (server): MoveToColorTemperature */                                                                \
             { 0x0300, 0x47,                                                                                                        \
-              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Color Control (client): StopMoveStep */  \
-            { 0x0300, 0x47,                                                                                                        \
               ZAP_COMMAND_MASK(INCOMING_SERVER) | ZAP_COMMAND_MASK(OUTGOING_SERVER) }, /* Color Control (server): StopMoveStep */  \
             {                                                                                                                      \
-                0x0300, 0x4B, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
-            }, /* Color Control (client): MoveColorTemperature */                                                                  \
-            {                                                                                                                      \
                 0x0300, 0x4B, ZAP_COMMAND_MASK(INCOMING_SERVER) | ZAP_COMMAND_MASK(OUTGOING_SERVER)                                \
             }, /* Color Control (server): MoveColorTemperature */                                                                  \
             {                                                                                                                      \
-                0x0300, 0x4C, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
-            }, /* Color Control (client): StepColorTemperature */                                                                  \
-            {                                                                                                                      \
                 0x0300, 0x4C, ZAP_COMMAND_MASK(INCOMING_SERVER) | ZAP_COMMAND_MASK(OUTGOING_SERVER)                                \
             },                                                   /* Color Control (server): StepColorTemperature */                \
             { 0x0500, 0x00, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* IAS Zone (server): ZoneEnrollResponse */                       \
             { 0x0500, 0x00, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* IAS Zone (server): ZoneStatusChangeNotification */             \
             { 0x0500, 0x01, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* IAS Zone (server): ZoneEnrollRequest */                        \
-            { 0xF000, 0x00, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Binding (client): Bind */                                      \
             { 0xF000, 0x00, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Binding (server): Bind */                                      \
-            { 0xF000, 0x01, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Binding (client): Unbind */                                    \
             { 0xF000, 0x01, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Binding (server): Unbind */                                    \
     }
 
 // Array of EmberAfManufacturerCodeEntry structures for commands.
-#define GENERATED_COMMAND_MANUFACTURER_CODE_COUNT (2)
+#define GENERATED_COMMAND_MANUFACTURER_CODE_COUNT (1)
 #define GENERATED_COMMAND_MANUFACTURER_CODES                                                                                       \
     {                                                                                                                              \
-        { 0, 0x1002 }, { 2, 0x1002 },                                                                                              \
+        { 0, 0x1002 },                                                                                                             \
     }
 
 // This is an array of EmberAfManufacturerCodeEntry structures for clusters.
diff --git a/examples/all-clusters-app/all-clusters-common/gen/gen_config.h b/examples/all-clusters-app/all-clusters-common/gen/gen_config.h
index bd18c97..bc8f8fc 100644
--- a/examples/all-clusters-app/all-clusters-common/gen/gen_config.h
+++ b/examples/all-clusters-app/all-clusters-common/gen/gen_config.h
@@ -29,62 +29,36 @@
 #define EMBER_APS_UNICAST_MESSAGE_COUNT 10
 
 /**** Cluster endpoint counts ****/
-#define EMBER_AF_BARRIER_CONTROL_CLUSTER_CLIENT_ENDPOINT_COUNT (1)
 #define EMBER_AF_BARRIER_CONTROL_CLUSTER_SERVER_ENDPOINT_COUNT (1)
-#define EMBER_AF_BASIC_CLUSTER_CLIENT_ENDPOINT_COUNT (1)
 #define EMBER_AF_BASIC_CLUSTER_SERVER_ENDPOINT_COUNT (2)
-#define EMBER_AF_BINDING_CLUSTER_CLIENT_ENDPOINT_COUNT (1)
 #define EMBER_AF_BINDING_CLUSTER_SERVER_ENDPOINT_COUNT (1)
-#define EMBER_AF_COLOR_CONTROL_CLUSTER_CLIENT_ENDPOINT_COUNT (1)
 #define EMBER_AF_COLOR_CONTROL_CLUSTER_SERVER_ENDPOINT_COUNT (1)
-#define EMBER_AF_DOOR_LOCK_CLUSTER_CLIENT_ENDPOINT_COUNT (1)
 #define EMBER_AF_DOOR_LOCK_CLUSTER_SERVER_ENDPOINT_COUNT (1)
-#define EMBER_AF_GROUPS_CLUSTER_CLIENT_ENDPOINT_COUNT (1)
 #define EMBER_AF_GROUPS_CLUSTER_SERVER_ENDPOINT_COUNT (1)
 #define EMBER_AF_IAS_ZONE_CLUSTER_SERVER_ENDPOINT_COUNT (1)
-#define EMBER_AF_IDENTIFY_CLUSTER_CLIENT_ENDPOINT_COUNT (1)
 #define EMBER_AF_IDENTIFY_CLUSTER_SERVER_ENDPOINT_COUNT (1)
-#define EMBER_AF_LEVEL_CONTROL_CLUSTER_CLIENT_ENDPOINT_COUNT (1)
 #define EMBER_AF_LEVEL_CONTROL_CLUSTER_SERVER_ENDPOINT_COUNT (1)
-#define EMBER_AF_ON_OFF_CLUSTER_CLIENT_ENDPOINT_COUNT (1)
 #define EMBER_AF_ON_OFF_CLUSTER_SERVER_ENDPOINT_COUNT (2)
-#define EMBER_AF_SCENES_CLUSTER_CLIENT_ENDPOINT_COUNT (1)
 #define EMBER_AF_SCENES_CLUSTER_SERVER_ENDPOINT_COUNT (1)
 #define EMBER_AF_TEMP_MEASUREMENT_CLUSTER_SERVER_ENDPOINT_COUNT (1)
 
 /**** Cluster Plugins ****/
 
-// Use this macro to check if the client side of the Barrier Control cluster is included
-#define ZCL_USING_BARRIER_CONTROL_CLUSTER_CLIENT
-#define EMBER_AF_PLUGIN_BARRIER_CONTROL_CLIENT
-
 // Use this macro to check if the server side of the Barrier Control cluster is included
 #define ZCL_USING_BARRIER_CONTROL_CLUSTER_SERVER
 #define EMBER_AF_PLUGIN_BARRIER_CONTROL_SERVER
 #define EMBER_AF_PLUGIN_BARRIER_CONTROL
 
-// Use this macro to check if the client side of the Basic cluster is included
-#define ZCL_USING_BASIC_CLUSTER_CLIENT
-#define EMBER_AF_PLUGIN_BASIC_CLIENT
-
 // Use this macro to check if the server side of the Basic cluster is included
 #define ZCL_USING_BASIC_CLUSTER_SERVER
 #define EMBER_AF_PLUGIN_BASIC_SERVER
 #define EMBER_AF_PLUGIN_BASIC
 
-// Use this macro to check if the client side of the Binding cluster is included
-#define ZCL_USING_BINDING_CLUSTER_CLIENT
-#define EMBER_AF_PLUGIN_BINDING_CLIENT
-
 // Use this macro to check if the server side of the Binding cluster is included
 #define ZCL_USING_BINDING_CLUSTER_SERVER
 #define EMBER_AF_PLUGIN_BINDING_SERVER
 #define EMBER_AF_PLUGIN_BINDING
 
-// Use this macro to check if the client side of the Color Control cluster is included
-#define ZCL_USING_COLOR_CONTROL_CLUSTER_CLIENT
-#define EMBER_AF_PLUGIN_COLOR_CONTROL_CLIENT
-
 // Use this macro to check if the server side of the Color Control cluster is included
 #define ZCL_USING_COLOR_CONTROL_CLUSTER_SERVER
 #define EMBER_AF_PLUGIN_COLOR_CONTROL_SERVER
@@ -94,19 +68,11 @@
 #define EMBER_AF_PLUGIN_COLOR_CONTROL_SERVER_TEMP
 #define EMBER_AF_PLUGIN_COLOR_CONTROL_SERVER_HSV
 
-// Use this macro to check if the client side of the Door Lock cluster is included
-#define ZCL_USING_DOOR_LOCK_CLUSTER_CLIENT
-#define EMBER_AF_PLUGIN_DOOR_LOCK_CLIENT
-
 // Use this macro to check if the server side of the Door Lock cluster is included
 #define ZCL_USING_DOOR_LOCK_CLUSTER_SERVER
 #define EMBER_AF_PLUGIN_DOOR_LOCK_SERVER
 #define EMBER_AF_PLUGIN_DOOR_LOCK
 
-// Use this macro to check if the client side of the Groups cluster is included
-#define ZCL_USING_GROUPS_CLUSTER_CLIENT
-#define EMBER_AF_PLUGIN_GROUPS_CLIENT
-
 // Use this macro to check if the server side of the Groups cluster is included
 #define ZCL_USING_GROUPS_CLUSTER_SERVER
 #define EMBER_AF_PLUGIN_GROUPS_SERVER
@@ -119,19 +85,11 @@
 // User options for server plugin IAS Zone
 #define EMBER_AF_PLUGIN_IAS_ZONE_SERVER_ZONE_TYPE 541
 
-// Use this macro to check if the client side of the Identify cluster is included
-#define ZCL_USING_IDENTIFY_CLUSTER_CLIENT
-#define EMBER_AF_PLUGIN_IDENTIFY_CLIENT
-
 // Use this macro to check if the server side of the Identify cluster is included
 #define ZCL_USING_IDENTIFY_CLUSTER_SERVER
 #define EMBER_AF_PLUGIN_IDENTIFY_SERVER
 #define EMBER_AF_PLUGIN_IDENTIFY
 
-// Use this macro to check if the client side of the Level Control cluster is included
-#define ZCL_USING_LEVEL_CONTROL_CLUSTER_CLIENT
-#define EMBER_AF_PLUGIN_LEVEL_CONTROL_CLIENT
-
 // Use this macro to check if the server side of the Level Control cluster is included
 #define ZCL_USING_LEVEL_CONTROL_CLUSTER_SERVER
 #define EMBER_AF_PLUGIN_LEVEL_CONTROL_SERVER
@@ -141,19 +99,11 @@
 #define EMBER_AF_PLUGIN_LEVEL_CONTROL_MINIMUM_LEVEL 0
 #define EMBER_AF_PLUGIN_LEVEL_CONTROL_RATE 0
 
-// Use this macro to check if the client side of the On/off cluster is included
-#define ZCL_USING_ON_OFF_CLUSTER_CLIENT
-#define EMBER_AF_PLUGIN_ON_OFF_CLIENT
-
 // Use this macro to check if the server side of the On/off cluster is included
 #define ZCL_USING_ON_OFF_CLUSTER_SERVER
 #define EMBER_AF_PLUGIN_ON_OFF_SERVER
 #define EMBER_AF_PLUGIN_ON_OFF
 
-// Use this macro to check if the client side of the Scenes cluster is included
-#define ZCL_USING_SCENES_CLUSTER_CLIENT
-#define EMBER_AF_PLUGIN_SCENES_CLIENT
-
 // Use this macro to check if the server side of the Scenes cluster is included
 #define ZCL_USING_SCENES_CLUSTER_SERVER
 #define EMBER_AF_PLUGIN_SCENES_SERVER
diff --git a/examples/all-clusters-app/esp32/main/component.mk b/examples/all-clusters-app/esp32/main/component.mk
index dcb0d49..d18376b 100644
--- a/examples/all-clusters-app/esp32/main/component.mk
+++ b/examples/all-clusters-app/esp32/main/component.mk
@@ -28,11 +28,8 @@
   ../third_party/connectedhomeip/src/app/util                                       \
   ../third_party/connectedhomeip/src/app/clusters/on-off-server                     \
   ../third_party/connectedhomeip/src/app/clusters/level-control                     \
-  ../third_party/connectedhomeip/src/app/clusters/identify-client                   \
   ../third_party/connectedhomeip/src/app/clusters/identify                          \
   ../third_party/connectedhomeip/src/app/clusters/barrier-control-server            \
-  ../third_party/connectedhomeip/src/app/clusters/scenes-client                     \
-  ../third_party/connectedhomeip/src/app/clusters/groups-client                     \
   ../third_party/connectedhomeip/src/app/clusters/groups-server                     \
   ../third_party/connectedhomeip/src/app/clusters/color-control-server              \
   ../third_party/connectedhomeip/src/app/clusters/temperature-measurement-server    \
@@ -40,7 +37,6 @@
   ../third_party/connectedhomeip/src/app/clusters/basic                             \
   ../third_party/connectedhomeip/src/app/clusters/bindings                          \
   ../third_party/connectedhomeip/src/app/reporting                                  \
-  ../third_party/connectedhomeip/src/app/clusters/door-lock-client                  \
   ../third_party/connectedhomeip/src/app/clusters/door-lock-server                  \
    ../third_party/connectedhomeip/src/app/clusters/ias-zone-server                  \
 #  ../third_party/connectedhomeip/src/app/clusters/ias-zone-client                  \
@@ -49,6 +45,7 @@
 COMPONENT_EXTRA_INCLUDES := $(PROJECT_PATH)/third_party/connectedhomeip/src/app/util                                   \
                             $(PROJECT_PATH)/third_party/connectedhomeip/src/app/server                                 \
                             $(PROJECT_PATH)/third_party/connectedhomeip/examples/all-clusters-app/all-clusters-common  \
+                            $(PROJECT_PATH)/third_party/connectedhomeip/third_party/nlio/repo/include                  \
                             $(PROJECT_PATH)/third_party/connectedhomeip/src
 
 # So "gen/*" files are found by the src/app bits.
diff --git a/examples/bridge-app/bridge-common/gen/CHIPClientCallbacks.cpp b/examples/bridge-app/bridge-common/gen/CHIPClientCallbacks.cpp
new file mode 100644
index 0000000..f5f88af
--- /dev/null
+++ b/examples/bridge-app/bridge-common/gen/CHIPClientCallbacks.cpp
@@ -0,0 +1,842 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+#include "gen/CHIPClientCallbacks.h"
+
+#include "gen/enums.h"
+#include <app/util/CHIPDeviceCallbacksMgr.h>
+#include <app/util/af-enums.h>
+#include <app/util/af.h>
+#include <app/util/basic-types.h>
+#include <core/CHIPEncoding.h>
+#include <support/SafeInt.h>
+#include <support/logging/CHIPLogging.h>
+
+using namespace ::chip;
+
+#define CHECK_MESSAGE_LENGTH(value)                                                                                                \
+    if (!chip::CanCastTo<uint16_t>(value))                                                                                         \
+    {                                                                                                                              \
+        ChipLogError(Zcl, "CHECK_MESSAGE_LENGTH expects a uint16_t value, got: %d", value);                                        \
+        if (onFailureCallback != nullptr)                                                                                          \
+        {                                                                                                                          \
+            Callback::Callback<DefaultFailureCallback> * cb =                                                                      \
+                Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);                                     \
+            cb->mCall(cb->mContext, static_cast<uint8_t>(EMBER_ZCL_STATUS_INVALID_VALUE));                                         \
+        }                                                                                                                          \
+        return true;                                                                                                               \
+    }                                                                                                                              \
+                                                                                                                                   \
+    if (messageLen < value)                                                                                                        \
+    {                                                                                                                              \
+        ChipLogError(Zcl, "Unexpected response length: %d", messageLen);                                                           \
+        if (onFailureCallback != nullptr)                                                                                          \
+        {                                                                                                                          \
+            Callback::Callback<DefaultFailureCallback> * cb =                                                                      \
+                Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);                                     \
+            cb->mCall(cb->mContext, static_cast<uint8_t>(EMBER_ZCL_STATUS_INVALID_VALUE));                                         \
+        }                                                                                                                          \
+        return true;                                                                                                               \
+    }                                                                                                                              \
+                                                                                                                                   \
+    messageLen = static_cast<uint16_t>(messageLen - static_cast<uint16_t>(value));
+
+#define GET_RESPONSE_CALLBACKS(name)                                                                                               \
+    Callback::Cancelable * onSuccessCallback = nullptr;                                                                            \
+    Callback::Cancelable * onFailureCallback = nullptr;                                                                            \
+    NodeId sourceId                          = emberAfCurrentCommand()->source;                                                    \
+    uint8_t sequenceNumber                   = emberAfCurrentCommand()->seqNum;                                                    \
+    CHIP_ERROR err = gCallbacks.GetResponseCallback(sourceId, sequenceNumber, &onSuccessCallback, &onFailureCallback);             \
+                                                                                                                                   \
+    if (CHIP_NO_ERROR != err)                                                                                                      \
+    {                                                                                                                              \
+        if (onSuccessCallback == nullptr)                                                                                          \
+        {                                                                                                                          \
+            ChipLogDetail(Zcl, "%s: Missing success callback", name);                                                              \
+        }                                                                                                                          \
+                                                                                                                                   \
+        if (onFailureCallback == nullptr)                                                                                          \
+        {                                                                                                                          \
+            ChipLogDetail(Zcl, "%s: Missing failure callback", name);                                                              \
+        }                                                                                                                          \
+                                                                                                                                   \
+        return true;                                                                                                               \
+    }
+
+#define GET_REPORT_CALLBACK(name)                                                                                                  \
+    Callback::Cancelable * onReportCallback = nullptr;                                                                             \
+    CHIP_ERROR err = gCallbacks.GetReportCallback(sourceId, endpointId, clusterId, attributeId, &onReportCallback);                \
+                                                                                                                                   \
+    if (CHIP_NO_ERROR != err)                                                                                                      \
+    {                                                                                                                              \
+        if (onReportCallback == nullptr)                                                                                           \
+        {                                                                                                                          \
+            ChipLogDetail(Zcl, "%s: Missing report callback", name);                                                               \
+        }                                                                                                                          \
+                                                                                                                                   \
+        return true;                                                                                                               \
+    }
+
+void LogStatus(uint8_t status)
+{
+    switch (status)
+    {
+    case EMBER_ZCL_STATUS_SUCCESS:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_SUCCESS (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_FAILURE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_FAILURE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_NOT_AUTHORIZED:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_NOT_AUTHORIZED (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_MALFORMED_COMMAND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_MALFORMED_COMMAND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNSUP_COMMAND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNSUP_CLUSTER_COMMAND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNSUP_GENERAL_COMMAND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNSUP_GENERAL_COMMAND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNSUP_MANUF_CLUSTER_COMMAND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNSUP_MANUF_CLUSTER_COMMAND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNSUP_MANUF_GENERAL_COMMAND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNSUP_MANUF_GENERAL_COMMAND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INVALID_FIELD:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INVALID_FIELD (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNSUPPORTED_ATTRIBUTE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNSUPPORTED_ATTRIBUTE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INVALID_VALUE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INVALID_VALUE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_READ_ONLY:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_READ_ONLY (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INSUFFICIENT_SPACE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INSUFFICIENT_SPACE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_DUPLICATE_EXISTS:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_DUPLICATE_EXISTS (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_NOT_FOUND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_NOT_FOUND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNREPORTABLE_ATTRIBUTE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNREPORTABLE_ATTRIBUTE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INVALID_DATA_TYPE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INVALID_DATA_TYPE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INVALID_SELECTOR:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INVALID_SELECTOR (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_WRITE_ONLY:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_WRITE_ONLY (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INCONSISTENT_STARTUP_STATE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INCONSISTENT_STARTUP_STATE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_DEFINED_OUT_OF_BAND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_DEFINED_OUT_Of_BAND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_ACTION_DENIED:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_ACTION_DENIED (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_TIMEOUT:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_TIMEOUT (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_ABORT:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_ABORT (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INVALID_IMAGE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INVALID_IMAGE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_WAIT_FOR_DATA:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_WAIT_FOR_DATA (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_NO_IMAGE_AVAILABLE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_NO_IMAGE_AVAILABLE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_REQUIRE_MORE_IMAGE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_REQUIRE_MORE_IMAGE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_HARDWARE_FAILURE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_HARDWARE_FAILURE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_SOFTWARE_FAILURE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_SOFTWARE_FAILURE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNSUPPORTED_CLUSTER:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNSUPPORTED_CLUSTER (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_LIMIT_REACHED:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_LIMIT_REACHED (0x%02x)", status);
+        break;
+    default:
+        ChipLogError(Zcl, "Unknow status: 0x%02x", status);
+        break;
+    }
+}
+
+// Singleton instance of the callbacks manager
+app::CHIPDeviceCallbacksMgr & gCallbacks = app::CHIPDeviceCallbacksMgr::GetInstance();
+
+bool emberAfDefaultResponseCallback(ClusterId clusterId, CommandId commandId, EmberAfStatus status)
+{
+    ChipLogProgress(Zcl, "DefaultResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+    ChipLogProgress(Zcl, "  CommandId: 0x%02x", commandId);
+    LogStatus(status);
+
+    GET_RESPONSE_CALLBACKS("emberAfDefaultResponseCallback");
+    if (status == EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultSuccessCallback> * cb =
+            Callback::Callback<DefaultSuccessCallback>::FromCancelable(onSuccessCallback);
+        cb->mCall(cb->mContext);
+    }
+    else
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, static_cast<uint8_t>(status));
+    }
+
+    return true;
+}
+
+bool emberAfReadAttributesResponseCallback(ClusterId clusterId, uint8_t * message, uint16_t messageLen)
+{
+    ChipLogProgress(Zcl, "ReadAttributesResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+
+    GET_RESPONSE_CALLBACKS("emberAfReadAttributesResponseCallback");
+
+    // struct readAttributeResponseRecord[]
+    while (messageLen)
+    {
+        CHECK_MESSAGE_LENGTH(2);
+        uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+        ChipLogProgress(Zcl, "  attributeId: 0x%04x", attributeId);
+
+        CHECK_MESSAGE_LENGTH(1);
+        uint8_t status = chip::Encoding::Read8(message); // zclStatus
+        LogStatus(status);
+
+        if (status == EMBER_ZCL_STATUS_SUCCESS)
+        {
+            CHECK_MESSAGE_LENGTH(1);
+            uint8_t attributeType = chip::Encoding::Read8(message);
+            ChipLogProgress(Zcl, "  attributeType: 0x%02x", attributeType);
+
+            switch (attributeType)
+            {
+            case 0x00: // nodata / No data
+            case 0x0A: // data24 / 24-bit data
+            case 0x0C: // data40 / 40-bit data
+            case 0x0D: // data48 / 48-bit data
+            case 0x0E: // data56 / 56-bit data
+            case 0x1A: // map24 / 24-bit bitmap
+            case 0x1C: // map40 / 40-bit bitmap
+            case 0x1D: // map48 / 48-bit bitmap
+            case 0x1E: // map56 / 56-bit bitmap
+            case 0x22: // uint24 / Unsigned 24-bit integer
+            case 0x24: // uint40 / Unsigned 40-bit integer
+            case 0x25: // uint48 / Unsigned 48-bit integer
+            case 0x26: // uint56 / Unsigned 56-bit integer
+            case 0x2A: // int24 / Signed 24-bit integer
+            case 0x2C: // int40 / Signed 40-bit integer
+            case 0x2D: // int48 / Signed 48-bit integer
+            case 0x2E: // int56 / Signed 56-bit integer
+            case 0x38: // semi / Semi-precision
+            case 0x39: // single / Single precision
+            case 0x3A: // double / Double precision
+            case 0x41: // octstr / Octet string
+            case 0x42: // string / Character string
+            case 0x43: // octstr16 / Long octet string
+            case 0x44: // string16 / Long character string
+            case 0x48: // array / Array
+            case 0x49: // struct / Structure
+            case 0x50: // set / Set
+            case 0x51: // bag / Bag
+            case 0xE0: // ToD / Time of day
+            {
+                ChipLogError(Zcl, "attributeType 0x%02x is not supported", attributeType);
+                Callback::Callback<DefaultFailureCallback> * cb =
+                    Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+                cb->mCall(cb->mContext, EMBER_ZCL_STATUS_INVALID_VALUE);
+                return true;
+            }
+
+            case 0x08: // data8 / 8-bit data
+            case 0x18: // map8 / 8-bit bitmap
+            case 0x20: // uint8 / Unsigned  8-bit integer
+            case 0x30: // enum8 / 8-bit enumeration
+            {
+                CHECK_MESSAGE_LENGTH(1);
+                uint8_t value = chip::Encoding::Read8(message);
+                ChipLogProgress(Zcl, "  value: 0x%02x", value);
+
+                Callback::Callback<Int8uAttributeCallback> * cb =
+                    Callback::Callback<Int8uAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x09: // data16 / 16-bit data
+            case 0x19: // map16 / 16-bit bitmap
+            case 0x21: // uint16 / Unsigned 16-bit integer
+            case 0x31: // enum16 / 16-bit enumeration
+            case 0xE8: // clusterId / Cluster ID
+            case 0xE9: // attribId / Attribute ID
+            case 0xEA: // bacOID / BACnet OID
+            case 0xF1: // key128 / 128-bit security key
+            case 0xFF: // unk / Unknown
+            {
+                CHECK_MESSAGE_LENGTH(2);
+                uint16_t value = chip::Encoding::LittleEndian::Read16(message);
+                ChipLogProgress(Zcl, "  value: 0x%04x", value);
+
+                Callback::Callback<Int16uAttributeCallback> * cb =
+                    Callback::Callback<Int16uAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x0B: // data32 / 32-bit data
+            case 0x1B: // map32 / 32-bit bitmap
+            case 0x23: // uint32 / Unsigned 32-bit integer
+            case 0xE1: // date / Date
+            case 0xE2: // UTC / UTCTime
+            {
+                CHECK_MESSAGE_LENGTH(4);
+                uint32_t value = chip::Encoding::LittleEndian::Read32(message);
+                ChipLogProgress(Zcl, "  value: 0x%08x", value);
+
+                Callback::Callback<Int32uAttributeCallback> * cb =
+                    Callback::Callback<Int32uAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x0F: // data64 / 64-bit data
+            case 0x1F: // map64 / 64-bit bitmap
+            case 0x27: // uint64 / Unsigned 64-bit integer
+            case 0xF0: // EUI64 / IEEE address
+            {
+                CHECK_MESSAGE_LENGTH(8);
+                uint64_t value = chip::Encoding::LittleEndian::Read64(message);
+                ChipLogProgress(Zcl, "  value: 0x%16x", value);
+
+                Callback::Callback<Int64uAttributeCallback> * cb =
+                    Callback::Callback<Int64uAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x10: // bool / Boolean
+            {
+                CHECK_MESSAGE_LENGTH(1);
+                uint8_t value = chip::Encoding::Read8(message);
+                ChipLogProgress(Zcl, "  value: %d", value);
+
+                Callback::Callback<BooleanAttributeCallback> * cb =
+                    Callback::Callback<BooleanAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x28: // int8 / Signed 8-bit integer
+            {
+                CHECK_MESSAGE_LENGTH(1);
+                int8_t value = chip::CastToSigned(chip::Encoding::Read8(message));
+                ChipLogProgress(Zcl, "  value: %" PRId8, value);
+
+                Callback::Callback<Int8sAttributeCallback> * cb =
+                    Callback::Callback<Int8sAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x29: // int16 / Signed 16-bit integer
+            {
+                CHECK_MESSAGE_LENGTH(2);
+                int16_t value = chip::CastToSigned(chip::Encoding::LittleEndian::Read16(message));
+                ChipLogProgress(Zcl, "  value: %" PRId16, value);
+
+                Callback::Callback<Int16sAttributeCallback> * cb =
+                    Callback::Callback<Int16sAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x2B: // int32 / Signed 32-bit integer
+            {
+                CHECK_MESSAGE_LENGTH(4);
+                int32_t value = chip::CastToSigned(chip::Encoding::LittleEndian::Read32(message));
+                ChipLogProgress(Zcl, "  value: %" PRId32, value);
+
+                Callback::Callback<Int32sAttributeCallback> * cb =
+                    Callback::Callback<Int32sAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x2F: // int64 / Signed 64-bit integer
+            {
+                CHECK_MESSAGE_LENGTH(8);
+                int64_t value = chip::CastToSigned(chip::Encoding::LittleEndian::Read64(message));
+                ChipLogProgress(Zcl, "  value: %" PRId64, value);
+
+                Callback::Callback<Int64sAttributeCallback> * cb =
+                    Callback::Callback<Int64sAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+            }
+        }
+        else
+        {
+            Callback::Callback<DefaultFailureCallback> * cb =
+                Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+            cb->mCall(cb->mContext, status);
+        }
+
+        // The current code is written matching the current API where there is a single attribute read
+        // per read command. So if multiple attributes are read at the same time, something is wrong
+        // somewhere.
+        if (messageLen)
+        {
+            ChipLogError(Zcl, "Multiple attributes read at the same time. Something went wrong.");
+            break;
+        }
+    }
+
+    return true;
+}
+
+bool emberAfWriteAttributesResponseCallback(ClusterId clusterId, uint8_t * message, uint16_t messageLen)
+{
+    ChipLogProgress(Zcl, "WriteAttributesResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+
+    GET_RESPONSE_CALLBACKS("emberAfWriteAttributesResponseCallback");
+
+    // struct writeAttributeResponseRecord[]
+    while (messageLen)
+    {
+        CHECK_MESSAGE_LENGTH(1);
+        uint8_t status = chip::Encoding::Read8(message); // zclStatus
+        LogStatus(status);
+
+        if (status == EMBER_ZCL_STATUS_SUCCESS)
+        {
+            Callback::Callback<DefaultSuccessCallback> * cb =
+                Callback::Callback<DefaultSuccessCallback>::FromCancelable(onSuccessCallback);
+            cb->mCall(cb->mContext);
+        }
+        else
+        {
+            CHECK_MESSAGE_LENGTH(2);
+            uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+            ChipLogProgress(Zcl, "  attributeId: 0x%04x", attributeId);
+
+            Callback::Callback<DefaultFailureCallback> * cb =
+                Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+            cb->mCall(cb->mContext, status);
+        }
+
+        // The current code is written matching the current API where there is a single attribute written
+        // per write command. So if multiple attributes are written at the same time, something is wrong
+        // somewhere.
+        if (messageLen)
+        {
+            ChipLogError(Zcl, "Multiple attributes written at the same time. Something went wrong.");
+            break;
+        }
+    }
+
+    return true;
+}
+
+bool emberAfConfigureReportingResponseCallback(ClusterId clusterId, uint8_t * message, uint16_t messageLen)
+{
+    ChipLogProgress(Zcl, "ConfigureReportingResponseCallback:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+
+    GET_RESPONSE_CALLBACKS("emberAfConfigureReportingResponseCallback");
+
+    // struct configureReportingResponseRecord[]
+    while (messageLen)
+    {
+        CHECK_MESSAGE_LENGTH(1);
+        uint8_t status = chip::Encoding::Read8(message); // zclStatus
+        LogStatus(status);
+
+        if (status == EMBER_ZCL_STATUS_SUCCESS)
+        {
+            Callback::Callback<DefaultSuccessCallback> * cb =
+                Callback::Callback<DefaultSuccessCallback>::FromCancelable(onSuccessCallback);
+            cb->mCall(cb->mContext);
+        }
+        else
+        {
+            CHECK_MESSAGE_LENGTH(1);
+            uint8_t direction = chip::Encoding::Read8(message); // reportingRole
+            ChipLogProgress(Zcl, "  direction: 0x%02x", direction);
+
+            CHECK_MESSAGE_LENGTH(2);
+            uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+            ChipLogProgress(Zcl, "  attributeId: 0x%04x", attributeId);
+
+            Callback::Callback<DefaultFailureCallback> * cb =
+                Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+            cb->mCall(cb->mContext, status);
+        }
+
+        // The current code is written matching the current API where there is a single attribute report
+        // per configure command. So if multiple attributes are configured at the same time, something is wrong
+        // somewhere.
+        if (messageLen)
+        {
+            ChipLogError(Zcl, "Multiple attributes reports configured at the same time. Something went wrong.");
+            break;
+        }
+    }
+
+    return true;
+}
+
+bool emberAfReadReportingConfigurationResponseCallback(chip::ClusterId clusterId, uint8_t * message, uint16_t messageLen)
+{
+    ChipLogProgress(Zcl, "ReadReportingConfigurationResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+
+    GET_RESPONSE_CALLBACKS("emberAfReadReportingConfigurationResponseCallback");
+
+    // struct readReportingConfigurationResponseRecord[]
+    while (messageLen)
+    {
+        CHECK_MESSAGE_LENGTH(1);
+        uint8_t direction = chip::Encoding::Read8(message); // reportingRole
+        ChipLogProgress(Zcl, "  direction: 0x%02x", direction);
+
+        CHECK_MESSAGE_LENGTH(2);
+        uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+        ChipLogProgress(Zcl, "  attributeId: 0x%04x", attributeId);
+
+        if (direction == EMBER_ZCL_REPORTING_DIRECTION_REPORTED)
+        {
+            CHECK_MESSAGE_LENGTH(1);
+            uint8_t attributeType = chip::Encoding::Read8(message); // zclType
+            ChipLogProgress(Zcl, "  attributeType: 0x%02x", attributeType);
+
+            CHECK_MESSAGE_LENGTH(2);
+            uint16_t minimumReportingInterval = chip::Encoding::LittleEndian::Read16(message); // uint16
+            ChipLogProgress(Zcl, "  minimumReportingInterval: %" PRIu16, minimumReportingInterval);
+
+            CHECK_MESSAGE_LENGTH(2);
+            uint16_t maximumReportingInterval = chip::Encoding::LittleEndian::Read16(message); // uint16
+            ChipLogProgress(Zcl, "  maximumReportingInterval: %" PRIu16, maximumReportingInterval);
+
+            // FIXME: unk is not supported yet.
+
+            Callback::Callback<ReadReportingConfigurationReportedCallback> * cb =
+                Callback::Callback<ReadReportingConfigurationReportedCallback>::FromCancelable(onSuccessCallback);
+            cb->mCall(cb->mContext, minimumReportingInterval, maximumReportingInterval);
+        }
+        else
+        {
+            CHECK_MESSAGE_LENGTH(2);
+            uint16_t timeout = chip::Encoding::LittleEndian::Read16(message); // uint16
+            ChipLogProgress(Zcl, "  timeout: %" PRIu16, timeout);
+
+            Callback::Callback<ReadReportingConfigurationReceivedCallback> * cb =
+                Callback::Callback<ReadReportingConfigurationReceivedCallback>::FromCancelable(onSuccessCallback);
+            cb->mCall(cb->mContext, timeout);
+        }
+    }
+
+    return true;
+}
+
+bool emberAfDiscoverAttributesResponseCallback(ClusterId clusterId, bool discoveryComplete, uint8_t * message, uint16_t messageLen,
+                                               bool extended)
+{
+    ChipLogProgress(Zcl, "DiscoverAttributesResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+    ChipLogProgress(Zcl, "  discoveryComplete: %d", discoveryComplete);
+    ChipLogProgress(Zcl, "  extended: %d", extended);
+
+    GET_RESPONSE_CALLBACKS("emberAfDiscoverAttributesCallback");
+
+    // struct discoverAttributesResponseRecord[]
+    while (messageLen)
+    {
+        CHECK_MESSAGE_LENGTH(2);
+        uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+        ChipLogProgress(Zcl, "  attributeId: 0x%04x", attributeId);
+
+        CHECK_MESSAGE_LENGTH(1);
+        uint8_t attributeType = chip::Encoding::Read8(message); // zclType
+        ChipLogProgress(Zcl, "  attributeType: 0x%02x", attributeType);
+    }
+
+    Callback::Callback<DefaultSuccessCallback> * cb = Callback::Callback<DefaultSuccessCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfDiscoverCommandsGeneratedResponseCallback(ClusterId clusterId, uint16_t manufacturerCode, bool discoveryComplete,
+                                                      CommandId * commandIds, uint16_t commandIdCount)
+{
+    ChipLogProgress(Zcl, "DiscoverCommandsGeneratedResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+    ChipLogProgress(Zcl, "  manufacturerCode: 0x%04x", manufacturerCode);
+    ChipLogProgress(Zcl, "  discoveryComplete: %d", discoveryComplete);
+    ChipLogProgress(Zcl, "  commandIdCount: %" PRIu16, commandIdCount);
+
+    for (uint16_t i = 0; i < commandIdCount; i++)
+    {
+        ChipLogProgress(Zcl, "  commandId: 0x%02x", commandIds++);
+    }
+
+    GET_RESPONSE_CALLBACKS("emberAfDiscoverCommandsGeneratedResponseCallback");
+    Callback::Callback<DefaultSuccessCallback> * cb = Callback::Callback<DefaultSuccessCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfDiscoverCommandsReceivedResponseCallback(ClusterId clusterId, uint16_t manufacturerCode, bool discoveryComplete,
+                                                     CommandId * commandIds, uint16_t commandIdCount)
+{
+    ChipLogProgress(Zcl, "DiscoverCommandsReceivedResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+    ChipLogProgress(Zcl, "  manufacturerCode: 0x%04x", manufacturerCode);
+    ChipLogProgress(Zcl, "  discoveryComplete: %d", discoveryComplete);
+    ChipLogProgress(Zcl, "  commandIdCount: %" PRIu16, commandIdCount);
+
+    for (uint16_t i = 0; i < commandIdCount; i++)
+    {
+        ChipLogProgress(Zcl, "  commandId: 0x%02x", commandIds++);
+    }
+
+    GET_RESPONSE_CALLBACKS("emberAfDiscoverCommandsGeneratedResponseCallback");
+    Callback::Callback<DefaultSuccessCallback> * cb = Callback::Callback<DefaultSuccessCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfReportAttributesCallback(ClusterId clusterId, uint8_t * message, uint16_t messageLen)
+{
+    ChipLogProgress(Zcl, "emberAfReportAttributeCallback:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+
+    NodeId sourceId = emberAfCurrentCommand()->source;
+    ChipLogProgress(Zcl, "  Source NodeId: %" PRIu64, sourceId);
+
+    EndpointId endpointId = emberAfCurrentCommand()->apsFrame->sourceEndpoint;
+    ChipLogProgress(Zcl, "  Source EndpointId: 0x%04x", endpointId);
+
+    // TODO onFailureCallback is just here because of the CHECK_MESSAGE_LENGTH macro. It needs to be removed.
+    Callback::Cancelable * onFailureCallback = nullptr;
+
+    while (messageLen)
+    {
+        CHECK_MESSAGE_LENGTH(2);
+        uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+        ChipLogProgress(Zcl, "  attributeId: 0x%04x", attributeId);
+
+        GET_REPORT_CALLBACK("emberAfReportAttributesCallback");
+
+        CHECK_MESSAGE_LENGTH(1);
+        uint8_t attributeType = chip::Encoding::Read8(message);
+        ChipLogProgress(Zcl, "  attributeType: 0x%02x", attributeType);
+
+        switch (attributeType)
+        {
+        case 0x00: // nodata / No data
+        case 0x0A: // data24 / 24-bit data
+        case 0x0C: // data40 / 40-bit data
+        case 0x0D: // data48 / 48-bit data
+        case 0x0E: // data56 / 56-bit data
+        case 0x1A: // map24 / 24-bit bitmap
+        case 0x1C: // map40 / 40-bit bitmap
+        case 0x1D: // map48 / 48-bit bitmap
+        case 0x1E: // map56 / 56-bit bitmap
+        case 0x22: // uint24 / Unsigned 24-bit integer
+        case 0x24: // uint40 / Unsigned 40-bit integer
+        case 0x25: // uint48 / Unsigned 48-bit integer
+        case 0x26: // uint56 / Unsigned 56-bit integer
+        case 0x2A: // int24 / Signed 24-bit integer
+        case 0x2C: // int40 / Signed 40-bit integer
+        case 0x2D: // int48 / Signed 48-bit integer
+        case 0x2E: // int56 / Signed 56-bit integer
+        case 0x38: // semi / Semi-precision
+        case 0x39: // single / Single precision
+        case 0x3A: // double / Double precision
+        case 0x41: // octstr / Octet string
+        case 0x42: // string / Character string
+        case 0x43: // octstr16 / Long octet string
+        case 0x44: // string16 / Long character string
+        case 0x48: // array / Array
+        case 0x49: // struct / Structure
+        case 0x50: // set / Set
+        case 0x51: // bag / Bag
+        case 0xE0: // ToD / Time of day
+        {
+            ChipLogError(Zcl, "attributeType 0x%02x is not supported", attributeType);
+            return true;
+        }
+
+        case 0x08: // data8 / 8-bit data
+        case 0x18: // map8 / 8-bit bitmap
+        case 0x20: // uint8 / Unsigned  8-bit integer
+        case 0x30: // enum8 / 8-bit enumeration
+        {
+            CHECK_MESSAGE_LENGTH(1);
+            uint8_t value = chip::Encoding::Read8(message);
+            ChipLogProgress(Zcl, "  value: 0x%02x", value);
+
+            Callback::Callback<Int8uAttributeCallback> * cb =
+                Callback::Callback<Int8uAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x09: // data16 / 16-bit data
+        case 0x19: // map16 / 16-bit bitmap
+        case 0x21: // uint16 / Unsigned 16-bit integer
+        case 0x31: // enum16 / 16-bit enumeration
+        case 0xE8: // clusterId / Cluster ID
+        case 0xE9: // attribId / Attribute ID
+        case 0xEA: // bacOID / BACnet OID
+        case 0xF1: // key128 / 128-bit security key
+        case 0xFF: // unk / Unknown
+        {
+            CHECK_MESSAGE_LENGTH(2);
+            uint16_t value = chip::Encoding::LittleEndian::Read16(message);
+            ChipLogProgress(Zcl, "  value: 0x%04x", value);
+
+            Callback::Callback<Int16uAttributeCallback> * cb =
+                Callback::Callback<Int16uAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x0B: // data32 / 32-bit data
+        case 0x1B: // map32 / 32-bit bitmap
+        case 0x23: // uint32 / Unsigned 32-bit integer
+        case 0xE1: // date / Date
+        case 0xE2: // UTC / UTCTime
+        {
+            CHECK_MESSAGE_LENGTH(4);
+            uint32_t value = chip::Encoding::LittleEndian::Read32(message);
+            ChipLogProgress(Zcl, "  value: 0x%08x", value);
+
+            Callback::Callback<Int32uAttributeCallback> * cb =
+                Callback::Callback<Int32uAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x0F: // data64 / 64-bit data
+        case 0x1F: // map64 / 64-bit bitmap
+        case 0x27: // uint64 / Unsigned 64-bit integer
+        case 0xF0: // EUI64 / IEEE address
+        {
+            CHECK_MESSAGE_LENGTH(8);
+            uint64_t value = chip::Encoding::LittleEndian::Read64(message);
+            ChipLogProgress(Zcl, "  value: 0x%16x", value);
+
+            Callback::Callback<Int64uAttributeCallback> * cb =
+                Callback::Callback<Int64uAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x10: // bool / Boolean
+        {
+            CHECK_MESSAGE_LENGTH(1);
+            uint8_t value = chip::Encoding::Read8(message);
+            ChipLogProgress(Zcl, "  value: %d", value);
+
+            Callback::Callback<BooleanAttributeCallback> * cb =
+                Callback::Callback<BooleanAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x28: // int8 / Signed 8-bit integer
+        {
+            CHECK_MESSAGE_LENGTH(1);
+            int8_t value = chip::CastToSigned(chip::Encoding::Read8(message));
+            ChipLogProgress(Zcl, "  value: %" PRId8, value);
+
+            Callback::Callback<Int8sAttributeCallback> * cb =
+                Callback::Callback<Int8sAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x29: // int16 / Signed 16-bit integer
+        {
+            CHECK_MESSAGE_LENGTH(2);
+            int16_t value = chip::CastToSigned(chip::Encoding::LittleEndian::Read16(message));
+            ChipLogProgress(Zcl, "  value: %" PRId16, value);
+
+            Callback::Callback<Int16sAttributeCallback> * cb =
+                Callback::Callback<Int16sAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x2B: // int32 / Signed 32-bit integer
+        {
+            CHECK_MESSAGE_LENGTH(4);
+            int32_t value = chip::CastToSigned(chip::Encoding::LittleEndian::Read32(message));
+            ChipLogProgress(Zcl, "  value: %" PRId32, value);
+
+            Callback::Callback<Int32sAttributeCallback> * cb =
+                Callback::Callback<Int32sAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x2F: // int64 / Signed 64-bit integer
+        {
+            CHECK_MESSAGE_LENGTH(8);
+            int64_t value = chip::CastToSigned(chip::Encoding::LittleEndian::Read64(message));
+            ChipLogProgress(Zcl, "  value: %" PRId64, value);
+
+            Callback::Callback<Int64sAttributeCallback> * cb =
+                Callback::Callback<Int64sAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+        }
+    }
+
+    return true;
+}
diff --git a/examples/bridge-app/bridge-common/gen/CHIPClientCallbacks.h b/examples/bridge-app/bridge-common/gen/CHIPClientCallbacks.h
new file mode 100644
index 0000000..14a3742
--- /dev/null
+++ b/examples/bridge-app/bridge-common/gen/CHIPClientCallbacks.h
@@ -0,0 +1,39 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+#pragma once
+
+#include <inttypes.h>
+
+// Global Response Callbacks
+typedef void (*DefaultSuccessCallback)(void * context);
+typedef void (*DefaultFailureCallback)(void * context, uint8_t status);
+typedef void (*BooleanAttributeCallback)(void * context, bool value);
+typedef void (*Int8uAttributeCallback)(void * context, uint8_t value);
+typedef void (*Int8sAttributeCallback)(void * context, int8_t value);
+typedef void (*Int16uAttributeCallback)(void * context, uint16_t value);
+typedef void (*Int16sAttributeCallback)(void * context, int16_t value);
+typedef void (*Int32uAttributeCallback)(void * context, uint32_t value);
+typedef void (*Int32sAttributeCallback)(void * context, int32_t value);
+typedef void (*Int64uAttributeCallback)(void * context, uint64_t value);
+typedef void (*Int64sAttributeCallback)(void * context, int64_t value);
+typedef void (*ReadReportingConfigurationReportedCallback)(void * context, uint16_t minInterval, uint16_t maxInterval);
+typedef void (*ReadReportingConfigurationReceivedCallback)(void * context, uint16_t timeout);
+
+// Cluster Specific Response Callbacks
diff --git a/examples/bridge-app/bridge-common/gen/CHIPClustersObjc.h b/examples/bridge-app/bridge-common/gen/CHIPClustersObjc.h
new file mode 100644
index 0000000..f7af3f1
--- /dev/null
+++ b/examples/bridge-app/bridge-common/gen/CHIPClustersObjc.h
@@ -0,0 +1,117 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+#ifndef CHIP_CLUSTERS_H
+#define CHIP_CLUSTERS_H
+
+#import <Foundation/Foundation.h>
+
+typedef void (^ResponseHandler)(NSError * _Nullable error, NSDictionary * _Nullable values);
+
+@class CHIPDevice;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CHIPLevelControl : NSObject
+
+- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
+- (BOOL)move:(uint8_t)moveMode
+                 rate:(uint8_t)rate
+           optionMask:(uint8_t)optionMask
+       optionOverride:(uint8_t)optionOverride
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)moveToLevel:(uint8_t)level
+       transitionTime:(uint16_t)transitionTime
+           optionMask:(uint8_t)optionMask
+       optionOverride:(uint8_t)optionOverride
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)moveToLevelWithOnOff:(uint8_t)level
+              transitionTime:(uint16_t)transitionTime
+           completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)moveWithOnOff:(uint8_t)moveMode rate:(uint8_t)rate completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)step:(uint8_t)stepMode
+             stepSize:(uint8_t)stepSize
+       transitionTime:(uint16_t)transitionTime
+           optionMask:(uint8_t)optionMask
+       optionOverride:(uint8_t)optionOverride
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)stepWithOnOff:(uint8_t)stepMode
+             stepSize:(uint8_t)stepSize
+       transitionTime:(uint16_t)transitionTime
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)stop:(uint8_t)optionMask optionOverride:(uint8_t)optionOverride completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)stopWithOnOff:(ResponseHandler)completionHandler;
+
+- (BOOL)readAttributeCurrentLevel:(ResponseHandler)completionHandler;
+- (BOOL)configureAttributeCurrentLevel:(uint16_t)minInterval
+                           maxInterval:(uint16_t)maxInterval
+                                change:(uint8_t)change
+                     completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)reportAttributeCurrentLevel:(ResponseHandler)reportHandler;
+- (BOOL)readAttributeRemainingTime:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeOptions:(ResponseHandler)completionHandler;
+- (BOOL)writeAttributeOptions:(uint8_t)value completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeStartUpCurrentLevel:(ResponseHandler)completionHandler;
+- (BOOL)writeAttributeStartUpCurrentLevel:(uint8_t)value completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler;
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CHIPOnOff : NSObject
+
+- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
+- (BOOL)off:(ResponseHandler)completionHandler;
+- (BOOL)offWithEffect:(uint8_t)effectId effectVariant:(uint8_t)effectVariant completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)on:(ResponseHandler)completionHandler;
+- (BOOL)onWithRecallGlobalScene:(ResponseHandler)completionHandler;
+- (BOOL)onWithTimedOff:(uint8_t)onOffControl
+                onTime:(uint16_t)onTime
+           offWaitTime:(uint16_t)offWaitTime
+     completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)toggle:(ResponseHandler)completionHandler;
+
+- (BOOL)readAttributeOnOff:(ResponseHandler)completionHandler;
+- (BOOL)configureAttributeOnOff:(uint16_t)minInterval
+                    maxInterval:(uint16_t)maxInterval
+              completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)reportAttributeOnOff:(ResponseHandler)reportHandler;
+- (BOOL)readAttributeGlobalSceneControl:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeOnTime:(ResponseHandler)completionHandler;
+- (BOOL)writeAttributeOnTime:(uint16_t)value completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeOffWaitTime:(ResponseHandler)completionHandler;
+- (BOOL)writeAttributeOffWaitTime:(uint16_t)value completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeStartUpOnOff:(ResponseHandler)completionHandler;
+- (BOOL)writeAttributeStartUpOnOff:(uint8_t)value completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler;
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif /* CHIP_CLUSTERS_H */
diff --git a/examples/bridge-app/bridge-common/gen/CHIPClustersObjc.mm b/examples/bridge-app/bridge-common/gen/CHIPClustersObjc.mm
new file mode 100644
index 0000000..48d3fce
--- /dev/null
+++ b/examples/bridge-app/bridge-common/gen/CHIPClustersObjc.mm
@@ -0,0 +1,1078 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+#import <Foundation/Foundation.h>
+
+#import "CHIPDevice.h"
+#import "CHIPDevice_Internal.h"
+#import "gen/CHIPClientCallbacks.h"
+#import "gen/CHIPClustersObjc.h"
+
+#include <controller/CHIPClusters.h>
+
+using namespace ::chip;
+
+class CHIPDefaultSuccessCallbackBridge : public Callback::Callback<DefaultSuccessCallback> {
+public:
+    CHIPDefaultSuccessCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DefaultSuccessCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDefaultSuccessCallbackBridge() {};
+
+    static void CallbackFn(void * context)
+    {
+        CHIPDefaultSuccessCallbackBridge * callback = reinterpret_cast<CHIPDefaultSuccessCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, nil);
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDefaultFailureCallbackBridge : public Callback::Callback<DefaultFailureCallback> {
+public:
+    CHIPDefaultFailureCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DefaultFailureCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDefaultFailureCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint8_t status)
+    {
+        CHIPDefaultFailureCallbackBridge * callback = reinterpret_cast<CHIPDefaultFailureCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                NSError * error = [NSError errorWithDomain:@"ZCL" code:status userInfo:@ { NSLocalizedDescriptionKey : @"" }];
+                callback->mHandler(error, nil);
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPUnsupportedAttributeCallbackBridge : public Callback::Callback<DefaultSuccessCallback> {
+public:
+    CHIPUnsupportedAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DefaultSuccessCallback>(CallbackFn, this)
+    {
+    }
+
+    ~CHIPUnsupportedAttributeCallbackBridge() {};
+
+    static void CallbackFn(void * context)
+    {
+        CHIPUnsupportedAttributeCallbackBridge * callback = reinterpret_cast<CHIPUnsupportedAttributeCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                NSError * error = [NSError errorWithDomain:@"ZCL"
+                                                      code:0
+                                                  userInfo:@ { NSLocalizedDescriptionKey : @"Unsuported attribute type" }];
+                callback->mHandler(error, nil);
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPBooleanAttributeCallbackBridge : public Callback::Callback<BooleanAttributeCallback> {
+public:
+    CHIPBooleanAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
+        : Callback::Callback<BooleanAttributeCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+        , mKeepAlive(keepAlive)
+    {
+    }
+
+    ~CHIPBooleanAttributeCallbackBridge() {};
+
+    static void CallbackFn(void * context, bool value)
+    {
+        CHIPBooleanAttributeCallbackBridge * callback = reinterpret_cast<CHIPBooleanAttributeCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ { @"value" : [NSNumber numberWithBool:value] });
+                if (!callback->mKeepAlive) {
+                    callback->Cancel();
+                    delete callback;
+                }
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+    bool mKeepAlive;
+};
+
+class CHIPInt8uAttributeCallbackBridge : public Callback::Callback<Int8uAttributeCallback> {
+public:
+    CHIPInt8uAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
+        : Callback::Callback<Int8uAttributeCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+        , mKeepAlive(keepAlive)
+    {
+    }
+
+    ~CHIPInt8uAttributeCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint8_t value)
+    {
+        CHIPInt8uAttributeCallbackBridge * callback = reinterpret_cast<CHIPInt8uAttributeCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ { @"value" : [NSNumber numberWithUnsignedChar:value] });
+                if (!callback->mKeepAlive) {
+                    callback->Cancel();
+                    delete callback;
+                }
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+    bool mKeepAlive;
+};
+
+class CHIPInt8sAttributeCallbackBridge : public Callback::Callback<Int8sAttributeCallback> {
+public:
+    CHIPInt8sAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
+        : Callback::Callback<Int8sAttributeCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+        , mKeepAlive(keepAlive)
+    {
+    }
+
+    ~CHIPInt8sAttributeCallbackBridge() {};
+
+    static void CallbackFn(void * context, int8_t value)
+    {
+        CHIPInt8sAttributeCallbackBridge * callback = reinterpret_cast<CHIPInt8sAttributeCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ { @"value" : [NSNumber numberWithChar:value] });
+                if (!callback->mKeepAlive) {
+                    callback->Cancel();
+                    delete callback;
+                }
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+    bool mKeepAlive;
+};
+
+class CHIPInt16uAttributeCallbackBridge : public Callback::Callback<Int16uAttributeCallback> {
+public:
+    CHIPInt16uAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
+        : Callback::Callback<Int16uAttributeCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+        , mKeepAlive(keepAlive)
+    {
+    }
+
+    ~CHIPInt16uAttributeCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint16_t value)
+    {
+        CHIPInt16uAttributeCallbackBridge * callback = reinterpret_cast<CHIPInt16uAttributeCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ { @"value" : [NSNumber numberWithUnsignedShort:value] });
+                if (!callback->mKeepAlive) {
+                    callback->Cancel();
+                    delete callback;
+                }
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+    bool mKeepAlive;
+};
+
+class CHIPInt16sAttributeCallbackBridge : public Callback::Callback<Int16sAttributeCallback> {
+public:
+    CHIPInt16sAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
+        : Callback::Callback<Int16sAttributeCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+        , mKeepAlive(keepAlive)
+    {
+    }
+
+    ~CHIPInt16sAttributeCallbackBridge() {};
+
+    static void CallbackFn(void * context, int16_t value)
+    {
+        CHIPInt16sAttributeCallbackBridge * callback = reinterpret_cast<CHIPInt16sAttributeCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ { @"value" : [NSNumber numberWithShort:value] });
+                if (!callback->mKeepAlive) {
+                    callback->Cancel();
+                    delete callback;
+                }
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+    bool mKeepAlive;
+};
+
+@interface CHIPLevelControl ()
+
+@property (readonly) Controller::LevelControlCluster cppCluster;
+@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
+@end
+
+@implementation CHIPLevelControl
+
+- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(EndpointId)endpoint queue:(dispatch_queue_t)queue
+{
+    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
+
+    if (err != CHIP_NO_ERROR) {
+        return nil;
+    }
+
+    if (self = [super init]) {
+        _callbackQueue = queue;
+    }
+
+    return self;
+}
+
+- (BOOL)move:(uint8_t)moveMode
+                 rate:(uint8_t)rate
+           optionMask:(uint8_t)optionMask
+       optionOverride:(uint8_t)optionOverride
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.Move(onSuccess->Cancel(), onFailure->Cancel(), moveMode, rate, optionMask, optionOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)moveToLevel:(uint8_t)level
+       transitionTime:(uint16_t)transitionTime
+           optionMask:(uint8_t)optionMask
+       optionOverride:(uint8_t)optionOverride
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err
+        = self.cppCluster.MoveToLevel(onSuccess->Cancel(), onFailure->Cancel(), level, transitionTime, optionMask, optionOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)moveToLevelWithOnOff:(uint8_t)level
+              transitionTime:(uint16_t)transitionTime
+           completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.MoveToLevelWithOnOff(onSuccess->Cancel(), onFailure->Cancel(), level, transitionTime);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)moveWithOnOff:(uint8_t)moveMode rate:(uint8_t)rate completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.MoveWithOnOff(onSuccess->Cancel(), onFailure->Cancel(), moveMode, rate);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)step:(uint8_t)stepMode
+             stepSize:(uint8_t)stepSize
+       transitionTime:(uint16_t)transitionTime
+           optionMask:(uint8_t)optionMask
+       optionOverride:(uint8_t)optionOverride
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.Step(
+        onSuccess->Cancel(), onFailure->Cancel(), stepMode, stepSize, transitionTime, optionMask, optionOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)stepWithOnOff:(uint8_t)stepMode
+             stepSize:(uint8_t)stepSize
+       transitionTime:(uint16_t)transitionTime
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.StepWithOnOff(onSuccess->Cancel(), onFailure->Cancel(), stepMode, stepSize, transitionTime);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)stop:(uint8_t)optionMask optionOverride:(uint8_t)optionOverride completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.Stop(onSuccess->Cancel(), onFailure->Cancel(), optionMask, optionOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)stopWithOnOff:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.StopWithOnOff(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeCurrentLevel:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeCurrentLevel(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)configureAttributeCurrentLevel:(uint16_t)minInterval
+                           maxInterval:(uint16_t)maxInterval
+                                change:(uint8_t)change
+                     completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ConfigureAttributeCurrentLevel(
+        onSuccess->Cancel(), onFailure->Cancel(), minInterval, maxInterval, change);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)reportAttributeCurrentLevel:(ResponseHandler)reportHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onReport = new CHIPInt8uAttributeCallbackBridge(reportHandler, _callbackQueue, true);
+    if (!onReport) {
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReportAttributeCurrentLevel(onReport->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onReport;
+        return NO;
+    }
+
+    return YES;
+}
+
+- (BOOL)readAttributeRemainingTime:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeRemainingTime(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeOptions:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeOptions(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)writeAttributeOptions:(uint8_t)value completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.WriteAttributeOptions(onSuccess->Cancel(), onFailure->Cancel(), value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeStartUpCurrentLevel:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeStartUpCurrentLevel(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)writeAttributeStartUpCurrentLevel:(uint8_t)value completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.WriteAttributeStartUpCurrentLevel(onSuccess->Cancel(), onFailure->Cancel(), value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+@end
+
+@interface CHIPOnOff ()
+
+@property (readonly) Controller::OnOffCluster cppCluster;
+@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
+@end
+
+@implementation CHIPOnOff
+
+- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(EndpointId)endpoint queue:(dispatch_queue_t)queue
+{
+    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
+
+    if (err != CHIP_NO_ERROR) {
+        return nil;
+    }
+
+    if (self = [super init]) {
+        _callbackQueue = queue;
+    }
+
+    return self;
+}
+
+- (BOOL)off:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.Off(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)offWithEffect:(uint8_t)effectId effectVariant:(uint8_t)effectVariant completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.OffWithEffect(onSuccess->Cancel(), onFailure->Cancel(), effectId, effectVariant);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)on:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.On(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)onWithRecallGlobalScene:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.OnWithRecallGlobalScene(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)onWithTimedOff:(uint8_t)onOffControl
+                onTime:(uint16_t)onTime
+           offWaitTime:(uint16_t)offWaitTime
+     completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.OnWithTimedOff(onSuccess->Cancel(), onFailure->Cancel(), onOffControl, onTime, offWaitTime);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)toggle:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.Toggle(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeOnOff:(ResponseHandler)completionHandler
+{
+    CHIPBooleanAttributeCallbackBridge * onSuccess = new CHIPBooleanAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeOnOff(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)configureAttributeOnOff:(uint16_t)minInterval
+                    maxInterval:(uint16_t)maxInterval
+              completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ConfigureAttributeOnOff(onSuccess->Cancel(), onFailure->Cancel(), minInterval, maxInterval);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)reportAttributeOnOff:(ResponseHandler)reportHandler
+{
+    CHIPBooleanAttributeCallbackBridge * onReport = new CHIPBooleanAttributeCallbackBridge(reportHandler, _callbackQueue, true);
+    if (!onReport) {
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReportAttributeOnOff(onReport->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onReport;
+        return NO;
+    }
+
+    return YES;
+}
+
+- (BOOL)readAttributeGlobalSceneControl:(ResponseHandler)completionHandler
+{
+    CHIPBooleanAttributeCallbackBridge * onSuccess = new CHIPBooleanAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeGlobalSceneControl(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeOnTime:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeOnTime(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)writeAttributeOnTime:(uint16_t)value completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.WriteAttributeOnTime(onSuccess->Cancel(), onFailure->Cancel(), value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeOffWaitTime:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeOffWaitTime(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)writeAttributeOffWaitTime:(uint16_t)value completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.WriteAttributeOffWaitTime(onSuccess->Cancel(), onFailure->Cancel(), value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeStartUpOnOff:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeStartUpOnOff(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)writeAttributeStartUpOnOff:(uint8_t)value completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.WriteAttributeStartUpOnOff(onSuccess->Cancel(), onFailure->Cancel(), value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+@end
diff --git a/examples/chip-tool/BUILD.gn b/examples/chip-tool/BUILD.gn
index 8b9acee..aeae07d 100644
--- a/examples/chip-tool/BUILD.gn
+++ b/examples/chip-tool/BUILD.gn
@@ -19,15 +19,39 @@
 
 assert(chip_build_tools)
 
+config("includes") {
+  include_dirs = [ "." ]
+}
+
 executable("chip-tool") {
   sources = [
+    "${chip_root}/src/app/reporting/reporting-default-configuration.cpp",
+    "${chip_root}/src/app/reporting/reporting.cpp",
+    "${chip_root}/src/app/server/DataModelHandler.cpp",
+    "${chip_root}/src/app/util/af-event.cpp",
+    "${chip_root}/src/app/util/af-main-common.cpp",
+    "${chip_root}/src/app/util/attribute-size.cpp",
+    "${chip_root}/src/app/util/attribute-storage.cpp",
+    "${chip_root}/src/app/util/attribute-table.cpp",
+    "${chip_root}/src/app/util/binding-table.cpp",
+    "${chip_root}/src/app/util/chip-message-send.cpp",
+    "${chip_root}/src/app/util/client-api.cpp",
+    "${chip_root}/src/app/util/ember-print.cpp",
+    "${chip_root}/src/app/util/message.cpp",
+    "${chip_root}/src/app/util/process-cluster-message.cpp",
+    "${chip_root}/src/app/util/process-global-message.cpp",
+    "${chip_root}/src/app/util/util.cpp",
     "commands/clusters/ModelCommand.cpp",
     "commands/common/Command.cpp",
     "commands/common/Commands.cpp",
     "commands/pairing/PairingCommand.cpp",
     "commands/payload/AdditionalDataParseCommand.cpp",
     "commands/payload/SetupPayloadParseCommand.cpp",
+    "commands/reporting/ReportingCommand.cpp",
     "config/PersistentStorage.cpp",
+    "gen/CHIPClientCallbacks.cpp",
+    "gen/call-command-handler.cpp",
+    "gen/callback-stub.cpp",
     "main.cpp",
   ]
 
@@ -40,9 +64,12 @@
   cflags = [ "-Wconversion" ]
 
   public_deps = [
+    "${chip_root}/src/app/server",
     "${chip_root}/src/lib",
     "${chip_root}/third_party/inipp",
   ]
 
+  public_configs = [ ":includes" ]
+
   output_dir = root_out_dir
 }
diff --git a/examples/chip-tool/chip-tool.zap b/examples/chip-tool/chip-tool.zap
new file mode 100644
index 0000000..55f4d7e
--- /dev/null
+++ b/examples/chip-tool/chip-tool.zap
@@ -0,0 +1,3087 @@
+{
+  "writeTime": "Wed Feb 03 2021 16:25:50 GMT+0100 (Central European Standard Time)",
+  "featureLevel": 6,
+  "creator": "zap",
+  "keyValuePairs": [
+    {
+      "key": "commandDiscovery",
+      "value": "1"
+    },
+    {
+      "key": "defaultResponsePolicy",
+      "value": "always"
+    },
+    {
+      "key": "manufacturerCodes",
+      "value": "0x1002"
+    }
+  ],
+  "package": [
+    {
+      "pathRelativity": "relativeToZap",
+      "path": "../../../src/app/zap-templates/zcl/zcl.json",
+      "version": "ZCL Test Data",
+      "type": "zcl-properties"
+    },
+    {
+      "pathRelativity": "relativeToZap",
+      "path": "../../../src/app/zap-templates/app-templates.json",
+      "version": "chip-v1",
+      "type": "gen-templates-json"
+    }
+  ],
+  "endpointTypes": [
+    {
+      "name": "Anonymous Endpoint Type",
+      "deviceTypeName": "CHIP-All-Clusters-Server",
+      "deviceTypeCode": 0,
+      "deviceTypeProfileId": 259,
+      "clusters": [
+        {
+          "name": "Basic",
+          "code": 0,
+          "mfgCode": null,
+          "define": "BASIC_CLUSTER",
+          "side": "client",
+          "enabled": 1,
+          "commands": [
+            {
+              "name": "ResetToFactoryDefaults",
+              "code": 0,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "MfgSpecificPing",
+              "code": 0,
+              "mfgCode": "0x1002",
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            }
+          ],
+          "attributes": [
+            {
+              "name": "cluster revision",
+              "code": 65533,
+              "mfgCode": null,
+              "side": "client",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "3",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            }
+          ]
+        },
+        {
+          "name": "Basic",
+          "code": 0,
+          "mfgCode": null,
+          "define": "BASIC_CLUSTER",
+          "side": "server",
+          "enabled": 0,
+          "commands": [],
+          "attributes": [
+            {
+              "name": "cluster revision",
+              "code": 65533,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "3",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "ZCL version",
+              "code": 0,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x08",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "power source",
+              "code": 7,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            }
+          ]
+        },
+        {
+          "name": "Identify",
+          "code": 3,
+          "mfgCode": null,
+          "define": "IDENTIFY_CLUSTER",
+          "side": "client",
+          "enabled": 1,
+          "commands": [
+            {
+              "name": "Identify",
+              "code": 0,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "IdentifyQuery",
+              "code": 1,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            }
+          ],
+          "attributes": [
+            {
+              "name": "cluster revision",
+              "code": 65533,
+              "mfgCode": null,
+              "side": "client",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "2",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            }
+          ]
+        },
+        {
+          "name": "Identify",
+          "code": 3,
+          "mfgCode": null,
+          "define": "IDENTIFY_CLUSTER",
+          "side": "server",
+          "enabled": 0,
+          "attributes": [
+            {
+              "name": "cluster revision",
+              "code": 65533,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "2",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "identify time",
+              "code": 0,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x0000",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            }
+          ],
+          "commands": [
+            {
+              "name": "IdentifyQueryResponse",
+              "code": 0,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            }
+          ]
+        },
+        {
+          "name": "Groups",
+          "code": 4,
+          "mfgCode": null,
+          "define": "GROUPS_CLUSTER",
+          "side": "client",
+          "enabled": 1,
+          "commands": [
+            {
+              "name": "AddGroup",
+              "code": 0,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "ViewGroup",
+              "code": 1,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "GetGroupMembership",
+              "code": 2,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "RemoveGroup",
+              "code": 3,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "RemoveAllGroups",
+              "code": 4,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "AddGroupIfIdentifying",
+              "code": 5,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            }
+          ],
+          "attributes": [
+            {
+              "name": "cluster revision",
+              "code": 65533,
+              "mfgCode": null,
+              "side": "client",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "3",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            }
+          ]
+        },
+        {
+          "name": "Groups",
+          "code": 4,
+          "mfgCode": null,
+          "define": "GROUPS_CLUSTER",
+          "side": "server",
+          "enabled": 0,
+          "commands": [
+            {
+              "name": "AddGroupResponse",
+              "code": 0,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "ViewGroupResponse",
+              "code": 1,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "GetGroupMembershipResponse",
+              "code": 2,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "RemoveGroupResponse",
+              "code": 3,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            }
+          ],
+          "attributes": [
+            {
+              "name": "cluster revision",
+              "code": 65533,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "3",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "name support",
+              "code": 0,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            }
+          ]
+        },
+        {
+          "name": "Scenes",
+          "code": 5,
+          "mfgCode": null,
+          "define": "SCENES_CLUSTER",
+          "side": "client",
+          "enabled": 1,
+          "commands": [
+            {
+              "name": "AddScene",
+              "code": 0,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "ViewScene",
+              "code": 1,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "RemoveScene",
+              "code": 2,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "RemoveAllScenes",
+              "code": 3,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "StoreScene",
+              "code": 4,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "RecallScene",
+              "code": 5,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "GetSceneMembership",
+              "code": 6,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            }
+          ],
+          "attributes": [
+            {
+              "name": "cluster revision",
+              "code": 65533,
+              "mfgCode": null,
+              "side": "client",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "3",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            }
+          ]
+        },
+        {
+          "name": "Scenes",
+          "code": 5,
+          "mfgCode": null,
+          "define": "SCENES_CLUSTER",
+          "side": "server",
+          "enabled": 0,
+          "commands": [
+            {
+              "name": "AddSceneResponse",
+              "code": 0,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "ViewSceneResponse",
+              "code": 1,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "RemoveSceneResponse",
+              "code": 2,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "RemoveAllScenesResponse",
+              "code": 3,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "StoreSceneResponse",
+              "code": 4,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "GetSceneMembershipResponse",
+              "code": 6,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            }
+          ],
+          "attributes": [
+            {
+              "name": "cluster revision",
+              "code": 65533,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "3",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "scene count",
+              "code": 0,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "current scene",
+              "code": 1,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "current group",
+              "code": 2,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x0000",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "scene valid",
+              "code": 3,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "name support",
+              "code": 4,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            }
+          ]
+        },
+        {
+          "name": "On/off",
+          "code": 6,
+          "mfgCode": null,
+          "define": "ON_OFF_CLUSTER",
+          "side": "client",
+          "enabled": 1,
+          "commands": [
+            {
+              "name": "Off",
+              "code": 0,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "On",
+              "code": 1,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "Toggle",
+              "code": 2,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            }
+          ],
+          "attributes": [
+            {
+              "name": "cluster revision",
+              "code": 65533,
+              "mfgCode": null,
+              "side": "client",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "2",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            }
+          ]
+        },
+        {
+          "name": "On/off",
+          "code": 6,
+          "mfgCode": null,
+          "define": "ON_OFF_CLUSTER",
+          "side": "server",
+          "enabled": 0,
+          "commands": [],
+          "attributes": [
+            {
+              "name": "cluster revision",
+              "code": 65533,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "2",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "on/off",
+              "code": 0,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            }
+          ]
+        },
+        {
+          "name": "Level Control",
+          "code": 8,
+          "mfgCode": null,
+          "define": "LEVEL_CONTROL_CLUSTER",
+          "side": "client",
+          "enabled": 1,
+          "commands": [
+            {
+              "name": "MoveToLevel",
+              "code": 0,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "Move",
+              "code": 1,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "Step",
+              "code": 2,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "Stop",
+              "code": 3,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "MoveToLevelWithOnOff",
+              "code": 4,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "MoveWithOnOff",
+              "code": 5,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "StepWithOnOff",
+              "code": 6,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "StopWithOnOff",
+              "code": 7,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            }
+          ],
+          "attributes": [
+            {
+              "name": "cluster revision",
+              "code": 65533,
+              "mfgCode": null,
+              "side": "client",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "3",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            }
+          ]
+        },
+        {
+          "name": "Level Control",
+          "code": 8,
+          "mfgCode": null,
+          "define": "LEVEL_CONTROL_CLUSTER",
+          "side": "server",
+          "enabled": 0,
+          "commands": [],
+          "attributes": [
+            {
+              "name": "cluster revision",
+              "code": 65533,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "3",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "current level",
+              "code": 0,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            }
+          ]
+        },
+        {
+          "name": "Door Lock",
+          "code": 257,
+          "mfgCode": null,
+          "define": "DOOR_LOCK_CLUSTER",
+          "side": "client",
+          "enabled": 1,
+          "commands": [
+            {
+              "name": "LockDoor",
+              "code": 0,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "UnlockDoor",
+              "code": 1,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "UnlockWithTimeout",
+              "code": 3,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "GetLogRecord",
+              "code": 4,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "SetPin",
+              "code": 5,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "GetPin",
+              "code": 6,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "ClearPin",
+              "code": 7,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "ClearAllPins",
+              "code": 8,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "SetWeekdaySchedule",
+              "code": 11,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "GetWeekdaySchedule",
+              "code": 12,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "ClearWeekdaySchedule",
+              "code": 13,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "SetYeardaySchedule",
+              "code": 14,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "GetYeardaySchedule",
+              "code": 15,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "ClearYeardaySchedule",
+              "code": 16,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "SetHolidaySchedule",
+              "code": 17,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "GetHolidaySchedule",
+              "code": 18,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "ClearHolidaySchedule",
+              "code": 19,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "SetUserType",
+              "code": 20,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "GetUserType",
+              "code": 21,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "SetRfid",
+              "code": 22,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "GetRfid",
+              "code": 23,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "ClearRfid",
+              "code": 24,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "ClearAllRfids",
+              "code": 25,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            }
+          ],
+          "attributes": [
+            {
+              "name": "cluster revision",
+              "code": 65533,
+              "mfgCode": null,
+              "side": "client",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "3",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            }
+          ]
+        },
+        {
+          "name": "Door Lock",
+          "code": 257,
+          "mfgCode": null,
+          "define": "DOOR_LOCK_CLUSTER",
+          "side": "server",
+          "enabled": 0,
+          "commands": [
+            {
+              "name": "LockDoorResponse",
+              "code": 0,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "UnlockDoorResponse",
+              "code": 1,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "UnlockWithTimeoutResponse",
+              "code": 3,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "GetLogRecordResponse",
+              "code": 4,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "SetPinResponse",
+              "code": 5,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "GetPinResponse",
+              "code": 6,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "ClearPinResponse",
+              "code": 7,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "ClearAllPinsResponse",
+              "code": 8,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "SetUserStatusResponse",
+              "code": 9,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 0,
+              "outgoing": 0
+            },
+            {
+              "name": "GetUserStatusResponse",
+              "code": 10,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 0,
+              "outgoing": 0
+            },
+            {
+              "name": "SetWeekdayScheduleResponse",
+              "code": 11,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "GetWeekdayScheduleResponse",
+              "code": 12,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "ClearWeekdayScheduleResponse",
+              "code": 13,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "SetYeardayScheduleResponse",
+              "code": 14,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "GetYeardayScheduleResponse",
+              "code": 15,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "ClearYeardayScheduleResponse",
+              "code": 16,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "SetHolidayScheduleResponse",
+              "code": 17,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "GetHolidayScheduleResponse",
+              "code": 18,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "ClearHolidayScheduleResponse",
+              "code": 19,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "SetUserTypeResponse",
+              "code": 20,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "GetUserTypeResponse",
+              "code": 21,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "SetRfidResponse",
+              "code": 22,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "GetRfidResponse",
+              "code": 23,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "ClearRfidResponse",
+              "code": 24,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "ClearAllRfidsResponse",
+              "code": 25,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            }
+          ],
+          "attributes": [
+            {
+              "name": "cluster revision",
+              "code": 65533,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "3",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "lock state",
+              "code": 0,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "lock type",
+              "code": 1,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "actuator enabled",
+              "code": 2,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "door state",
+              "code": 3,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "enable logging",
+              "code": 32,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "language",
+              "code": 33,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "led settings",
+              "code": 34,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "auto relock time",
+              "code": 35,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "sound volume",
+              "code": 36,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "operating mode",
+              "code": 37,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "default configuration register",
+              "code": 39,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "enable local programming",
+              "code": 40,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x01",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "enable one touch locking",
+              "code": 41,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "enable inside status led",
+              "code": 42,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "enable privacy mode button",
+              "code": 43,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "wrong code entry limit",
+              "code": 48,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "user code temporary disable time",
+              "code": 49,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "send pin over the air",
+              "code": 50,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "require pin for rf operation",
+              "code": 51,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "zigbee security level",
+              "code": 52,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "alarm mask",
+              "code": 64,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x0000",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "keypad operation event mask",
+              "code": 65,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x0000",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "RF operation event mask",
+              "code": 66,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x0000",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "manual operation event mask",
+              "code": 67,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x0000",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "rfid operation event mask",
+              "code": 68,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x0000",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "keypad programming event mask",
+              "code": 69,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x0000",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "rf programming event mask",
+              "code": 70,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x0000",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "rfid programming event mask",
+              "code": 71,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x0000",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            }
+          ]
+        },
+        {
+          "name": "Barrier Control",
+          "code": 259,
+          "mfgCode": null,
+          "define": "BARRIER_CONTROL_CLUSTER",
+          "side": "client",
+          "enabled": 1,
+          "commands": [
+            {
+              "name": "BarrierControlGoToPercent",
+              "code": 0,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "BarrierControlStop",
+              "code": 1,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            }
+          ],
+          "attributes": [
+            {
+              "name": "cluster revision",
+              "code": 65533,
+              "mfgCode": null,
+              "side": "client",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x0001",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            }
+          ]
+        },
+        {
+          "name": "Barrier Control",
+          "code": 259,
+          "mfgCode": null,
+          "define": "BARRIER_CONTROL_CLUSTER",
+          "side": "server",
+          "enabled": 0,
+          "commands": [],
+          "attributes": [
+            {
+              "name": "cluster revision",
+              "code": 65533,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x0001",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "barrier moving state",
+              "code": 1,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "barrier safety status",
+              "code": 2,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "barrier capabilities",
+              "code": 3,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "barrier position",
+              "code": 10,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            }
+          ]
+        },
+        {
+          "name": "Color Control",
+          "code": 768,
+          "mfgCode": null,
+          "define": "COLOR_CONTROL_CLUSTER",
+          "side": "client",
+          "enabled": 1,
+          "commands": [
+            {
+              "name": "MoveToHue",
+              "code": 0,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "MoveHue",
+              "code": 1,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "StepHue",
+              "code": 2,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "MoveToSaturation",
+              "code": 3,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "MoveSaturation",
+              "code": 4,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "StepSaturation",
+              "code": 5,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "MoveToHueAndSaturation",
+              "code": 6,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "MoveToColor",
+              "code": 7,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "MoveColor",
+              "code": 8,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "StepColor",
+              "code": 9,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "MoveToColorTemperature",
+              "code": 10,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "StopMoveStep",
+              "code": 71,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "MoveColorTemperature",
+              "code": 75,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "StepColorTemperature",
+              "code": 76,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            }
+          ],
+          "attributes": [
+            {
+              "name": "cluster revision",
+              "code": 65533,
+              "mfgCode": null,
+              "side": "client",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "3",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            }
+          ]
+        },
+        {
+          "name": "Color Control",
+          "code": 768,
+          "mfgCode": null,
+          "define": "COLOR_CONTROL_CLUSTER",
+          "side": "server",
+          "enabled": 0,
+          "commands": [],
+          "attributes": [
+            {
+              "name": "cluster revision",
+              "code": 65533,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "3",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "current hue",
+              "code": 0,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "current saturation",
+              "code": 1,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "remaining time",
+              "code": 2,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x0000",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "current x",
+              "code": 3,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x616B",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "current y",
+              "code": 4,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x607D",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "drift compensation",
+              "code": 5,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "compensation text",
+              "code": 6,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "color temperature",
+              "code": 7,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00FA",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "color mode",
+              "code": 8,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x01",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "color control options",
+              "code": 15,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "number of primaries",
+              "code": 16,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "primary 1 x",
+              "code": 17,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "primary 1 y",
+              "code": 18,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "primary 1 intensity",
+              "code": 19,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "primary 2 x",
+              "code": 21,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "primary 2 y",
+              "code": 22,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "primary 2 intensity",
+              "code": 23,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "primary 3 x",
+              "code": 25,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "primary 3 y",
+              "code": 26,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "primary 3 intensity",
+              "code": 27,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "primary 4 x",
+              "code": 32,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "primary 4 y",
+              "code": 33,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "primary 4 intensity",
+              "code": 34,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "primary 5 x",
+              "code": 36,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "primary 5 y",
+              "code": 37,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "primary 5 intensity",
+              "code": 38,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "primary 6 x",
+              "code": 40,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "primary 6 y",
+              "code": 41,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "primary 6 intensity",
+              "code": 42,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "white point x",
+              "code": 48,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "white point y",
+              "code": 49,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "color point r x",
+              "code": 50,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "color point r y",
+              "code": 51,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "color point r intensity",
+              "code": 52,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "color point g x",
+              "code": 54,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "color point g y",
+              "code": 55,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "color point g intensity",
+              "code": 56,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "color point b x",
+              "code": 58,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "color point b y",
+              "code": 59,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "color point b intensity",
+              "code": 60,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "couple color temp to level min-mireds",
+              "code": 16397,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "start up color temperature mireds",
+              "code": 16400,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "enhanced current hue",
+              "code": 16384,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x0000",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "enhanced color mode",
+              "code": 16385,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x01",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "color loop active",
+              "code": 16386,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "color loop direction",
+              "code": 16387,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "color loop time",
+              "code": 16388,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x0019",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "color capabilities",
+              "code": 16394,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x0000",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "color temp physical min",
+              "code": 16395,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x0000",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "color temp physical max",
+              "code": 16396,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0xFEFF",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            }
+          ]
+        },
+        {
+          "name": "Temperature Measurement",
+          "code": 1026,
+          "mfgCode": null,
+          "define": "TEMP_MEASUREMENT_CLUSTER",
+          "side": "client",
+          "enabled": 1,
+          "commands": [],
+          "attributes": [
+            {
+              "name": "cluster revision",
+              "code": 65533,
+              "mfgCode": null,
+              "side": "client",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "3",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            }
+          ]
+        },
+        {
+          "name": "Temperature Measurement",
+          "code": 1026,
+          "mfgCode": null,
+          "define": "TEMP_MEASUREMENT_CLUSTER",
+          "side": "server",
+          "enabled": 0,
+          "commands": [],
+          "attributes": [
+            {
+              "name": "cluster revision",
+              "code": 65533,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "3",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "measured value",
+              "code": 0,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x8000",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "min measured value",
+              "code": 1,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x8000",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "max measured value",
+              "code": 2,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x8000",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "tolerance",
+              "code": 3,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            }
+          ]
+        },
+        {
+          "name": "IAS Zone",
+          "code": 1280,
+          "mfgCode": null,
+          "define": "IAS_ZONE_CLUSTER",
+          "side": "client",
+          "enabled": 0,
+          "commands": [
+            {
+              "name": "ZoneEnrollResponse",
+              "code": 0,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            }
+          ],
+          "attributes": [
+            {
+              "name": "cluster revision",
+              "code": 65533,
+              "mfgCode": null,
+              "side": "client",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "2",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            }
+          ]
+        },
+        {
+          "name": "IAS Zone",
+          "code": 1280,
+          "mfgCode": null,
+          "define": "IAS_ZONE_CLUSTER",
+          "side": "server",
+          "enabled": 0,
+          "commands": [
+            {
+              "name": "ZoneStatusChangeNotification",
+              "code": 0,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "ZoneEnrollRequest",
+              "code": 1,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            }
+          ],
+          "attributes": [
+            {
+              "name": "cluster revision",
+              "code": 65533,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "2",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "zone state",
+              "code": 0,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "zone type",
+              "code": 1,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "zone status",
+              "code": 2,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x0000",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "IAS CIE address",
+              "code": 16,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "Zone ID",
+              "code": 17,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0xff",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            }
+          ]
+        },
+        {
+          "name": "Binding",
+          "code": 61440,
+          "mfgCode": null,
+          "define": "BINDING_CLUSTER",
+          "side": "client",
+          "enabled": 1,
+          "commands": [
+            {
+              "name": "Bind",
+              "code": 0,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "Unbind",
+              "code": 1,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            }
+          ],
+          "attributes": [
+            {
+              "name": "cluster revision",
+              "code": 65533,
+              "mfgCode": null,
+              "side": "client",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x0001",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            }
+          ]
+        },
+        {
+          "name": "Binding",
+          "code": 61440,
+          "mfgCode": null,
+          "define": "BINDING_CLUSTER",
+          "side": "server",
+          "enabled": 0,
+          "commands": [],
+          "attributes": [
+            {
+              "name": "cluster revision",
+              "code": 65533,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x0001",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            }
+          ]
+        }
+      ]
+    }
+  ],
+  "endpoints": [
+    {
+      "endpointTypeName": "Anonymous Endpoint Type",
+      "endpointTypeIndex": 0,
+      "endpointTypeRef": 1,
+      "profileId": "0x0103",
+      "endpointId": 1,
+      "networkId": 0
+    }
+  ]
+}
\ No newline at end of file
diff --git a/examples/chip-tool/commands/clusters/Commands.h b/examples/chip-tool/commands/clusters/Commands.h
index 23ae83c..7cf785f 100644
--- a/examples/chip-tool/commands/clusters/Commands.h
+++ b/examples/chip-tool/commands/clusters/Commands.h
@@ -1,6 +1,6 @@
-/**
+/*
  *
- *    Copyright (c) 2020 Project CHIP Authors
+ *    Copyright (c) 2021 Project CHIP Authors
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -14,1055 +14,551 @@
  *    See the License for the specific language governing permissions and
  *    limitations under the License.
  */
-// This file is generated by ZAP.  Please do not edit manually.
-//
-//
+
+// THIS FILE IS GENERATED BY ZAP
 
 #pragma once
 
 #include "ModelCommand.h"
-#include "ModelCommandResponse.h"
+#include "gen/CHIPClientCallbacks.h"
+#include <controller/CHIPClusters.h>
 
-#include <limits>
-
-#include <app/util/basic-types.h>
-#include <support/SafeInt.h>
-
-#define CHECK_MESSAGE_LENGTH(value)                                                                                                \
-    if (!chip::CanCastTo<uint16_t>(value))                                                                                         \
-    {                                                                                                                              \
-        ChipLogError(chipTool, "CHECK_MESSAGE_LENGTH expects a uint16_t value, got: %d", value);                                   \
-        return false;                                                                                                              \
-    }                                                                                                                              \
-                                                                                                                                   \
-    if (messageLen < value)                                                                                                        \
-    {                                                                                                                              \
-        ChipLogError(chipTool, "Unexpected response length: %d", messageLen);                                                      \
-        return false;                                                                                                              \
-    }                                                                                                                              \
-                                                                                                                                   \
-    messageLen = static_cast<uint16_t>(messageLen - static_cast<uint16_t>(value));
-
-typedef enum
+static void OnDefaultSuccessResponse(void * context)
 {
-    EMBER_ZCL_STATUS_SUCCESS                      = 0x00,
-    EMBER_ZCL_STATUS_FAILURE                      = 0x01,
-    EMBER_ZCL_STATUS_REQUEST_DENIED               = 0x70,
-    EMBER_ZCL_STATUS_MULTIPLE_REQUEST_NOT_ALLOWED = 0x71,
-    EMBER_ZCL_STATUS_INDICATION_REDIRECTION_TO_AP = 0x72,
-    EMBER_ZCL_STATUS_PREFERENCE_DENIED            = 0x73,
-    EMBER_ZCL_STATUS_PREFERENCE_IGNORED           = 0x74,
-    EMBER_ZCL_STATUS_NOT_AUTHORIZED               = 0x7E,
-    EMBER_ZCL_STATUS_RESERVED_FIELD_NOT_ZERO      = 0x7F,
-    EMBER_ZCL_STATUS_MALFORMED_COMMAND            = 0x80,
-    EMBER_ZCL_STATUS_UNSUP_CLUSTER_COMMAND        = 0x81,
-    EMBER_ZCL_STATUS_UNSUP_GENERAL_COMMAND        = 0x82,
-    EMBER_ZCL_STATUS_UNSUP_MANUF_CLUSTER_COMMAND  = 0x83,
-    EMBER_ZCL_STATUS_UNSUP_MANUF_GENERAL_COMMAND  = 0x84,
-    EMBER_ZCL_STATUS_INVALID_FIELD                = 0x85,
-    EMBER_ZCL_STATUS_UNSUPPORTED_ATTRIBUTE        = 0x86,
-    EMBER_ZCL_STATUS_INVALID_VALUE                = 0x87,
-    EMBER_ZCL_STATUS_READ_ONLY                    = 0x88,
-    EMBER_ZCL_STATUS_INSUFFICIENT_SPACE           = 0x89,
-    EMBER_ZCL_STATUS_DUPLICATE_EXISTS             = 0x8A,
-    EMBER_ZCL_STATUS_NOT_FOUND                    = 0x8B,
-    EMBER_ZCL_STATUS_UNREPORTABLE_ATTRIBUTE       = 0x8C,
-    EMBER_ZCL_STATUS_INVALID_DATA_TYPE            = 0x8D,
-    EMBER_ZCL_STATUS_INVALID_SELECTOR             = 0x8E,
-    EMBER_ZCL_STATUS_WRITE_ONLY                   = 0x8F,
-    EMBER_ZCL_STATUS_INCONSISTENT_STARTUP_STATE   = 0x90,
-    EMBER_ZCL_STATUS_DEFINED_OUT_OF_BAND          = 0x91,
-    EMBER_ZCL_STATUS_INCONSISTENT                 = 0x92,
-    EMBER_ZCL_STATUS_ACTION_DENIED                = 0x93,
-    EMBER_ZCL_STATUS_TIMEOUT                      = 0x94,
-    EMBER_ZCL_STATUS_ABORT                        = 0x95,
-    EMBER_ZCL_STATUS_INVALID_IMAGE                = 0x96,
-    EMBER_ZCL_STATUS_WAIT_FOR_DATA                = 0x97,
-    EMBER_ZCL_STATUS_NO_IMAGE_AVAILABLE           = 0x98,
-    EMBER_ZCL_STATUS_REQUIRE_MORE_IMAGE           = 0x99,
-    EMBER_ZCL_STATUS_HARDWARE_FAILURE             = 0xC0,
-    EMBER_ZCL_STATUS_SOFTWARE_FAILURE             = 0xC1,
-    EMBER_ZCL_STATUS_CALIBRATION_ERROR            = 0xC2,
-    EMBER_ZCL_STATUS_UNSUPPORTED_CLUSTER          = 0xC3,
-} EmberAfStatus;
+    ChipLogProgress(chipTool, "Default Success Response");
 
-bool CheckStatus(uint8_t status)
-{
-    bool success = false;
-
-    switch (status)
-    {
-    case EMBER_ZCL_STATUS_SUCCESS:
-        success = true;
-        ChipLogProgress(chipTool, "  status: EMBER_ZCL_STATUS_SUCCESS (0x%02x)", status);
-        break;
-    case EMBER_ZCL_STATUS_FAILURE:
-        ChipLogProgress(chipTool, "  status: EMBER_ZCL_STATUS_FAILURE (0x%02x)", status);
-        break;
-    case EMBER_ZCL_STATUS_REQUEST_DENIED:
-        ChipLogProgress(chipTool, "  status: EMBER_ZCL_STATUS_REQUEST_DENIED (0x%02x)", status);
-        break;
-    case EMBER_ZCL_STATUS_MULTIPLE_REQUEST_NOT_ALLOWED:
-        ChipLogProgress(chipTool, "  status: EMBER_ZCL_STATUS_REQUEST_NOT_ALLOWED (0x%02x)", status);
-        break;
-    case EMBER_ZCL_STATUS_INDICATION_REDIRECTION_TO_AP:
-        ChipLogProgress(chipTool, "  status: EMBER_ZCL_STATUS_INDICATION_REDIRECTION_TO_AP (0x%02x)", status);
-        break;
-    case EMBER_ZCL_STATUS_PREFERENCE_DENIED:
-        ChipLogProgress(chipTool, "  status: EMBER_ZCL_STATUS_PREFERENCE_DENIED (0x%02x)", status);
-        break;
-    case EMBER_ZCL_STATUS_PREFERENCE_IGNORED:
-        ChipLogProgress(chipTool, "  status: EMBER_ZCL_STATUS_PREFERENCE_IGNORED (0x%02x)", status);
-        break;
-    case EMBER_ZCL_STATUS_NOT_AUTHORIZED:
-        ChipLogProgress(chipTool, "  status: EMBER_ZCL_STATUS_NOT_AUTHORIZED (0x%02x)", status);
-        break;
-    case EMBER_ZCL_STATUS_RESERVED_FIELD_NOT_ZERO:
-        ChipLogProgress(chipTool, "  status: EMBER_ZCL_STATUS_RESERVED_FIELD_NOT_ZERO (0x%02x)", status);
-        break;
-    case EMBER_ZCL_STATUS_MALFORMED_COMMAND:
-        ChipLogProgress(chipTool, "  status: EMBER_ZCL_STATUS_MALFORMED_COMMAND (0x%02x)", status);
-        break;
-    case EMBER_ZCL_STATUS_UNSUP_CLUSTER_COMMAND:
-        ChipLogProgress(chipTool, "  status: EMBER_ZCL_STATUS_UNSUP_CLUSTER_COMMAND (0x%02x)", status);
-        break;
-    case EMBER_ZCL_STATUS_UNSUP_GENERAL_COMMAND:
-        ChipLogProgress(chipTool, "  status: EMBER_ZCL_STATUS_UNSUP_GENERAL_COMMAND (0x%02x)", status);
-        break;
-    case EMBER_ZCL_STATUS_UNSUP_MANUF_CLUSTER_COMMAND:
-        ChipLogProgress(chipTool, "  status: EMBER_ZCL_STATUS_UNSUP_MANUF_CLUSTER_COMMAND (0x%02x)", status);
-        break;
-    case EMBER_ZCL_STATUS_UNSUP_MANUF_GENERAL_COMMAND:
-        ChipLogProgress(chipTool, "  status: EMBER_ZCL_STATUS_UNSUP_MANUF_GENERAL_COMMAND (0x%02x)", status);
-        break;
-    case EMBER_ZCL_STATUS_INVALID_FIELD:
-        ChipLogProgress(chipTool, "  status: EMBER_ZCL_STATUS_INVALID_FIELD (0x%02x)", status);
-        break;
-    case EMBER_ZCL_STATUS_UNSUPPORTED_ATTRIBUTE:
-        ChipLogProgress(chipTool, "  status: EMBER_ZCL_STATUS_UNSUPPORTED_ATTRIBUTE (0x%02x)", status);
-        break;
-    case EMBER_ZCL_STATUS_INVALID_VALUE:
-        ChipLogProgress(chipTool, "  status: EMBER_ZCL_STATUS_INVALID_VALUE (0x%02x)", status);
-        break;
-    case EMBER_ZCL_STATUS_READ_ONLY:
-        ChipLogProgress(chipTool, "  status: EMBER_ZCL_STATUS_READ_ONLY (0x%02x)", status);
-        break;
-    case EMBER_ZCL_STATUS_INSUFFICIENT_SPACE:
-        ChipLogProgress(chipTool, "  status: EMBER_ZCL_STATUS_INSUFFICIENT_SPACE (0x%02x)", status);
-        break;
-    case EMBER_ZCL_STATUS_DUPLICATE_EXISTS:
-        ChipLogProgress(chipTool, "  status: EMBER_ZCL_STATUS_DUPLICATE_EXISTS (0x%02x)", status);
-        break;
-    case EMBER_ZCL_STATUS_NOT_FOUND:
-        ChipLogProgress(chipTool, "  status: EMBER_ZCL_STATUS_NOT_FOUND (0x%02x)", status);
-        break;
-    case EMBER_ZCL_STATUS_UNREPORTABLE_ATTRIBUTE:
-        ChipLogProgress(chipTool, "  status: EMBER_ZCL_STATUS_UNREPORTABLE_ATTRIBUTE (0x%02x)", status);
-        break;
-    case EMBER_ZCL_STATUS_INVALID_DATA_TYPE:
-        ChipLogProgress(chipTool, "  status: EMBER_ZCL_STATUS_INVALID_DATA_TYPE (0x%02x)", status);
-        break;
-    case EMBER_ZCL_STATUS_INVALID_SELECTOR:
-        ChipLogProgress(chipTool, "  status: EMBER_ZCL_STATUS_INVALID_SELECTOR (0x%02x)", status);
-        break;
-    case EMBER_ZCL_STATUS_WRITE_ONLY:
-        ChipLogProgress(chipTool, "  status: EMBER_ZCL_STATUS_WRITE_ONLY (0x%02x)", status);
-        break;
-    case EMBER_ZCL_STATUS_INCONSISTENT_STARTUP_STATE:
-        ChipLogProgress(chipTool, "  status: EMBER_ZCL_STATUS_INCONSISTENT_STARTUP_STATE (0x%02x)", status);
-        break;
-    case EMBER_ZCL_STATUS_DEFINED_OUT_OF_BAND:
-        ChipLogProgress(chipTool, "  status: EMBER_ZCL_STATUS_DEFINED_OUT_Of_BAND (0x%02x)", status);
-        break;
-    case EMBER_ZCL_STATUS_INCONSISTENT:
-        ChipLogProgress(chipTool, "  status: EMBER_ZCL_STATUS_INCONSISTENT (0x%02x)", status);
-        break;
-    case EMBER_ZCL_STATUS_ACTION_DENIED:
-        ChipLogProgress(chipTool, "  status: EMBER_ZCL_STATUS_ACTION_DENIED (0x%02x)", status);
-        break;
-    case EMBER_ZCL_STATUS_TIMEOUT:
-        ChipLogProgress(chipTool, "  status: EMBER_ZCL_STATUS_TIMEOUT (0x%02x)", status);
-        break;
-    case EMBER_ZCL_STATUS_ABORT:
-        ChipLogProgress(chipTool, "  status: EMBER_ZCL_STATUS_ABORT (0x%02x)", status);
-        break;
-    case EMBER_ZCL_STATUS_INVALID_IMAGE:
-        ChipLogProgress(chipTool, "  status: EMBER_ZCL_STATUS_INVALID_IMAGE (0x%02x)", status);
-        break;
-    case EMBER_ZCL_STATUS_WAIT_FOR_DATA:
-        ChipLogProgress(chipTool, "  status: EMBER_ZCL_STATUS_WAIT_FOR_DATA (0x%02x)", status);
-        break;
-    case EMBER_ZCL_STATUS_NO_IMAGE_AVAILABLE:
-        ChipLogProgress(chipTool, "  status: EMBER_ZCL_STATUS_NO_IMAGE_AVAILABLE (0x%02x)", status);
-        break;
-    case EMBER_ZCL_STATUS_REQUIRE_MORE_IMAGE:
-        ChipLogProgress(chipTool, "  status: EMBER_ZCL_STATUS_REQUIRE_MORE_IMAGE (0x%02x)", status);
-        break;
-    case EMBER_ZCL_STATUS_HARDWARE_FAILURE:
-        ChipLogProgress(chipTool, "  status: EMBER_ZCL_STATUS_HARDWARE_FAILURE (0x%02x)", status);
-        break;
-    case EMBER_ZCL_STATUS_SOFTWARE_FAILURE:
-        ChipLogProgress(chipTool, "  status: EMBER_ZCL_STATUS_SOFTWARE_FAILURE (0x%02x)", status);
-        break;
-    case EMBER_ZCL_STATUS_CALIBRATION_ERROR:
-        ChipLogProgress(chipTool, "  status: EMBER_ZCL_STATUS_CALIBRATION_ERROR (0x%02x)", status);
-        break;
-    case EMBER_ZCL_STATUS_UNSUPPORTED_CLUSTER:
-        ChipLogProgress(chipTool, "  status: EMBER_ZCL_STATUS_UNSUPPORTED_CLUSTER (0x%02x)", status);
-        break;
-    default:
-        ChipLogError(chipTool, "Unknow status: 0x%02x", status);
-        break;
-    }
-
-    return success;
+    ModelCommand * command = reinterpret_cast<ModelCommand *>(context);
+    command->SetCommandExitStatus(true);
 }
 
-bool ReadAttributeValue(uint8_t *& message, uint16_t & messageLen)
+static void OnDefaultFailureResponse(void * context, uint8_t status)
 {
-    CHECK_MESSAGE_LENGTH(1);
-    uint8_t type = chip::Encoding::Read8(message);
-    ChipLogProgress(chipTool, "  type: 0x%02x", type);
+    ChipLogProgress(chipTool, "Default Failure Response: 0x%02x", status);
 
-    // FIXME: Should we have a mapping of type ids to types, based on
-    // table 2.6.2.2 in Rev 8 of the ZCL spec?
-    switch (type)
-    {
-    case 0x00: // nodata / No data
-        ChipLogError(chipTool, "Type 0x%02x is not supported", type);
-        message += 0;
-        break;
-    case 0x08: // data8 / 8-bit data
-        CHECK_MESSAGE_LENGTH(1);
-        ChipLogProgress(chipTool, "  value: 0x%02x", chip::Encoding::Read8(message));
-        return true;
-        break;
-    case 0x09: // data16 / 16-bit data
-        CHECK_MESSAGE_LENGTH(2);
-        ChipLogProgress(chipTool, "  value: 0x%04x", chip::Encoding::LittleEndian::Read16(message));
-        return true;
-        break;
-    case 0x0A: // data24 / 24-bit data
-        ChipLogError(chipTool, "Type 0x%02x is not supported", type);
-        message += 3;
-        break;
-    case 0x0B: // data32 / 32-bit data
-        CHECK_MESSAGE_LENGTH(4);
-        ChipLogProgress(chipTool, "  value: 0x%08x", chip::Encoding::LittleEndian::Read32(message));
-        return true;
-        break;
-    case 0x0C: // data40 / 40-bit data
-        ChipLogError(chipTool, "Type 0x%02x is not supported", type);
-        message += 5;
-        break;
-    case 0x0D: // data48 / 48-bit data
-        ChipLogError(chipTool, "Type 0x%02x is not supported", type);
-        message += 6;
-        break;
-    case 0x0E: // data56 / 56-bit data
-        ChipLogError(chipTool, "Type 0x%02x is not supported", type);
-        message += 7;
-        break;
-    case 0x0F: // data64 / 64-bit data
-        CHECK_MESSAGE_LENGTH(8);
-        ChipLogProgress(chipTool, "  value: 0x%16x", chip::Encoding::LittleEndian::Read64(message));
-        return true;
-        break;
-    case 0x10: // bool / Boolean
-        CHECK_MESSAGE_LENGTH(1);
-        ChipLogProgress(chipTool, "  value: 0x%02x", chip::Encoding::Read8(message));
-        return true;
-        break;
-    case 0x18: // map8 / 8-bit bitmap
-        CHECK_MESSAGE_LENGTH(1);
-        ChipLogProgress(chipTool, "  value: 0x%02x", chip::Encoding::Read8(message));
-        return true;
-        break;
-    case 0x19: // map16 / 16-bit bitmap
-        CHECK_MESSAGE_LENGTH(2);
-        ChipLogProgress(chipTool, "  value: 0x%04x", chip::Encoding::LittleEndian::Read16(message));
-        return true;
-        break;
-    case 0x1A: // map24 / 24-bit bitmap
-        ChipLogError(chipTool, "Type 0x%02x is not supported", type);
-        message += 3;
-        break;
-    case 0x1B: // map32 / 32-bit bitmap
-        CHECK_MESSAGE_LENGTH(4);
-        ChipLogProgress(chipTool, "  value: 0x%08x", chip::Encoding::LittleEndian::Read32(message));
-        return true;
-        break;
-    case 0x1C: // map40 / 40-bit bitmap
-        ChipLogError(chipTool, "Type 0x%02x is not supported", type);
-        message += 5;
-        break;
-    case 0x1D: // map48 / 48-bit bitmap
-        ChipLogError(chipTool, "Type 0x%02x is not supported", type);
-        message += 6;
-        break;
-    case 0x1E: // map56 / 56-bit bitmap
-        ChipLogError(chipTool, "Type 0x%02x is not supported", type);
-        message += 7;
-        break;
-    case 0x1F: // map64 / 64-bit bitmap
-        CHECK_MESSAGE_LENGTH(8);
-        ChipLogProgress(chipTool, "  value: 0x%16x", chip::Encoding::LittleEndian::Read64(message));
-        return true;
-        break;
-    case 0x20: // uint8 / Unsigned  8-bit integer
-        CHECK_MESSAGE_LENGTH(1);
-        ChipLogProgress(chipTool, "  value: 0x%02x", chip::Encoding::Read8(message));
-        return true;
-        break;
-    case 0x21: // uint16 / Unsigned 16-bit integer
-        CHECK_MESSAGE_LENGTH(2);
-        ChipLogProgress(chipTool, "  value: 0x%04x", chip::Encoding::LittleEndian::Read16(message));
-        return true;
-        break;
-    case 0x22: // uint24 / Unsigned 24-bit integer
-        ChipLogError(chipTool, "Type 0x%02x is not supported", type);
-        message += 3;
-        break;
-    case 0x23: // uint32 / Unsigned 32-bit integer
-        CHECK_MESSAGE_LENGTH(4);
-        ChipLogProgress(chipTool, "  value: 0x%08x", chip::Encoding::LittleEndian::Read32(message));
-        return true;
-        break;
-    case 0x24: // uint40 / Unsigned 40-bit integer
-        ChipLogError(chipTool, "Type 0x%02x is not supported", type);
-        message += 5;
-        break;
-    case 0x25: // uint48 / Unsigned 48-bit integer
-        ChipLogError(chipTool, "Type 0x%02x is not supported", type);
-        message += 6;
-        break;
-    case 0x26: // uint56 / Unsigned 56-bit integer
-        ChipLogError(chipTool, "Type 0x%02x is not supported", type);
-        message += 7;
-        break;
-    case 0x27: // uint64 / Unsigned 64-bit integer
-        CHECK_MESSAGE_LENGTH(8);
-        ChipLogProgress(chipTool, "  value: 0x%16x", chip::Encoding::LittleEndian::Read64(message));
-        return true;
-        break;
-    case 0x28: // int8 / Signed 8-bit integer
-        CHECK_MESSAGE_LENGTH(1);
-        ChipLogProgress(chipTool, "  value: %d", chip::CastToSigned(chip::Encoding::Read8(message)));
-        return true;
-        break;
-    case 0x29: // int16 / Signed 16-bit integer
-        CHECK_MESSAGE_LENGTH(2);
-        ChipLogProgress(chipTool, "  value: %d", chip::CastToSigned(chip::Encoding::LittleEndian::Read16(message)));
-        return true;
-        break;
-    case 0x2A: // int24 / Signed 24-bit integer
-        ChipLogError(chipTool, "Type 0x%02x is not supported", type);
-        message += 3;
-        break;
-    case 0x2B: // int32 / Signed 32-bit integer
-        CHECK_MESSAGE_LENGTH(4);
-        ChipLogProgress(chipTool, "  value: %d", chip::CastToSigned(chip::Encoding::LittleEndian::Read32(message)));
-        return true;
-        break;
-    case 0x2C: // int40 / Signed 40-bit integer
-        ChipLogError(chipTool, "Type 0x%02x is not supported", type);
-        message += 5;
-        break;
-    case 0x2D: // int48 / Signed 48-bit integer
-        ChipLogError(chipTool, "Type 0x%02x is not supported", type);
-        message += 6;
-        break;
-    case 0x2E: // int56 / Signed 56-bit integer
-        ChipLogError(chipTool, "Type 0x%02x is not supported", type);
-        message += 7;
-        break;
-    case 0x2F: // int64 / Signed 64-bit integer
-        CHECK_MESSAGE_LENGTH(8);
-        ChipLogProgress(chipTool, "  value: %d", chip::CastToSigned(chip::Encoding::LittleEndian::Read64(message)));
-        return true;
-        break;
-    case 0x30: // enum8 / 8-bit enumeration
-        CHECK_MESSAGE_LENGTH(1);
-        ChipLogProgress(chipTool, "  value: 0x%02x", chip::Encoding::Read8(message));
-        return true;
-        break;
-    case 0x31: // enum16 / 16-bit enumeration
-        CHECK_MESSAGE_LENGTH(2);
-        ChipLogProgress(chipTool, "  value: 0x%04x", chip::Encoding::LittleEndian::Read16(message));
-        return true;
-        break;
-    case 0x38: // semi / Semi-precision
-        ChipLogError(chipTool, "Type 0x%02x is not supported", type);
-        message += 0;
-        break;
-    case 0x39: // single / Single precision
-        ChipLogError(chipTool, "Type 0x%02x is not supported", type);
-        message += 0;
-        break;
-    case 0x3A: // double / Double precision
-        ChipLogError(chipTool, "Type 0x%02x is not supported", type);
-        message += 0;
-        break;
-    case 0x41: // octstr / Octet string
-        ChipLogError(chipTool, "Type 0x%02x is not supported", type);
-        message += 0;
-        break;
-    case 0x42: // string / Character string
-        ChipLogError(chipTool, "Type 0x%02x is not supported", type);
-        message += 0;
-        break;
-    case 0x43: // octstr16 / Long octet string
-        ChipLogError(chipTool, "Type 0x%02x is not supported", type);
-        message += 2;
-        break;
-    case 0x44: // string16 / Long character string
-        ChipLogError(chipTool, "Type 0x%02x is not supported", type);
-        message += 2;
-        break;
-    case 0x48: // array / Array
-        ChipLogError(chipTool, "Type 0x%02x is not supported", type);
-        message += 0;
-        break;
-    case 0x49: // struct / Structure
-        ChipLogError(chipTool, "Type 0x%02x is not supported", type);
-        message += 0;
-        break;
-    case 0x50: // set / Set
-        ChipLogError(chipTool, "Type 0x%02x is not supported", type);
-        message += 0;
-        break;
-    case 0x51: // bag / Bag
-        ChipLogError(chipTool, "Type 0x%02x is not supported", type);
-        message += 0;
-        break;
-    case 0xE0: // ToD / Time of day
-        ChipLogError(chipTool, "Type 0x%02x is not supported", type);
-        message += 0;
-        break;
-    case 0xE1: // date / Date
-        CHECK_MESSAGE_LENGTH(4);
-        ChipLogProgress(chipTool, "  value: 0x%08x", chip::Encoding::LittleEndian::Read32(message));
-        return true;
-        break;
-    case 0xE2: // UTC / UTCTime
-        CHECK_MESSAGE_LENGTH(4);
-        ChipLogProgress(chipTool, "  value: 0x%08x", chip::Encoding::LittleEndian::Read32(message));
-        return true;
-        break;
-    case 0xE8: // clusterId / Cluster ID
-        CHECK_MESSAGE_LENGTH(2);
-        ChipLogProgress(chipTool, "  value: 0x%04x", chip::Encoding::LittleEndian::Read16(message));
-        return true;
-        break;
-    case 0xE9: // attribId / Attribute ID
-        CHECK_MESSAGE_LENGTH(2);
-        ChipLogProgress(chipTool, "  value: 0x%04x", chip::Encoding::LittleEndian::Read16(message));
-        return true;
-        break;
-    case 0xEA: // bacOID / BACnet OID
-        ChipLogError(chipTool, "Type 0x%02x is not supported", type);
-        message += 0;
-        break;
-    case 0xF0: // EUI64 / IEEE address
-        CHECK_MESSAGE_LENGTH(8);
-        ChipLogProgress(chipTool, "  value: 0x%16x", chip::Encoding::LittleEndian::Read64(message));
-        return true;
-        break;
-    case 0xF1: // key128 / 128-bit security key
-        ChipLogError(chipTool, "Type 0x%02x is not supported", type);
-        message += 16;
-        break;
-    case 0xFF: // unk / Unknown
-        ChipLogError(chipTool, "Type 0x%02x is not supported", type);
-        message += 0;
-        break;
-    }
-
-    return false;
+    ModelCommand * command = reinterpret_cast<ModelCommand *>(context);
+    command->SetCommandExitStatus(false);
 }
 
-/*----------------------------------------------------------------------------*\
-| Global Command Responses                                              |  ID  |
-|------------------------------------------------------------------------------|
-| * ReadAttributesResponse                                              | 0x01 |
-| * WriteAttributesResponse                                             | 0x04 |
-| * WriteAttributesNoResponse                                           | 0x05 |
-| * ConfigureReportingResponse                                          | 0x07 |
-| * ReadReportingConfigurationResponse                                  | 0x09 |
-| * DefaultResponse                                                     | 0x0B |
-| * DiscoverAttributesResponse                                          | 0x0D |
-| * WriteAttributesStructuredResponse                                   | 0x10 |
-| * DiscoverCommandsReceivedResponse                                    | 0x12 |
-| * DiscoverCommandsGeneratedResponse                                   | 0x14 |
-| * DiscoverAttributesExtendedResponse                                  | 0x16 |
-\*----------------------------------------------------------------------------*/
-
-/*
- * Command ReadAttributesResponse
- */
-class ReadAttributesResponse : public ModelCommandResponse
+typedef void (*UnsupportedAttributeCallback)(void * context);
+static void OnUnsupportedAttributeResponse(void * context)
 {
-public:
-    ReadAttributesResponse() : ModelCommandResponse(0x01) {}
+    ChipLogError(chipTool, "Unsupported attribute Response. This should never happen !");
+}
 
-    bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
-    {
-        bool success = true;
-        ChipLogProgress(chipTool, "ReadAttributesResponse (0x01):");
-
-        // struct readAttributeResponseRecord[]
-        while (messageLen)
-        {
-            CHECK_MESSAGE_LENGTH(2);
-            uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
-            ChipLogProgress(chipTool, "  %s: 0x%04x", "attributeId", attributeId);
-
-            CHECK_MESSAGE_LENGTH(1);
-            uint8_t status = chip::Encoding::Read8(message); // zclStatus
-            success        = CheckStatus(status);
-
-            if (status == 0)
-            {
-                if (!ReadAttributeValue(message, messageLen))
-                {
-                    return false;
-                }
-            }
-        }
-        return success;
-    }
-};
-
-/*
- * Command WriteAttributesResponse
- */
-class WriteAttributesResponse : public ModelCommandResponse
+static void OnBooleanAttributeResponse(void * context, bool value)
 {
-public:
-    WriteAttributesResponse() : ModelCommandResponse(0x04) {}
+    ChipLogProgress(chipTool, "Boolean attribute Response: %d", value);
 
-    bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
-    {
-        bool success = true;
-        ChipLogProgress(chipTool, "WriteAttributesResponse (0x04):");
+    ModelCommand * command = reinterpret_cast<ModelCommand *>(context);
+    command->SetCommandExitStatus(true);
+}
 
-        // struct writeAttributeResponseRecord[]
-        while (messageLen)
-        {
-            CHECK_MESSAGE_LENGTH(1);
-            uint8_t status = chip::Encoding::Read8(message); // zclStatus
-            success        = CheckStatus(status);
-
-            if (status != 0)
-            {
-                CHECK_MESSAGE_LENGTH(2);
-                uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
-                ChipLogProgress(chipTool, "  %s: 0x%04x", "attributeId", attributeId);
-            }
-        }
-        return success;
-    }
-};
-
-/*
- * Command WriteAttributesNoResponse
- */
-class WriteAttributesNoResponse : public ModelCommandResponse
+static void OnInt8uAttributeResponse(void * context, uint8_t value)
 {
-public:
-    WriteAttributesNoResponse() : ModelCommandResponse(0x05) {}
+    ChipLogProgress(chipTool, "Int8u attribute Response: %" PRIu8, value);
 
-    bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
-    {
-        bool success = true;
-        ChipLogProgress(chipTool, "WriteAttributesNoResponse (0x05):");
+    ModelCommand * command = reinterpret_cast<ModelCommand *>(context);
+    command->SetCommandExitStatus(true);
+}
 
-        // struct writeAttributeRecord[]
-        while (messageLen)
-        {
-            CHECK_MESSAGE_LENGTH(2);
-            uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
-            ChipLogProgress(chipTool, "  %s: 0x%04x", "attributeId", attributeId);
-
-            if (!ReadAttributeValue(message, messageLen))
-            {
-                return false;
-            }
-        }
-        return success;
-    }
-};
-
-/*
- * Command ConfigureReportingResponse
- */
-class ConfigureReportingResponse : public ModelCommandResponse
+static void OnInt16uAttributeResponse(void * context, uint16_t value)
 {
-public:
-    ConfigureReportingResponse() : ModelCommandResponse(0x07) {}
+    ChipLogProgress(chipTool, "Int16u attribute Response: %" PRIu16, value);
 
-    bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
-    {
-        bool success = true;
-        ChipLogProgress(chipTool, "ConfigureReportingResponse (0x07):");
+    ModelCommand * command = reinterpret_cast<ModelCommand *>(context);
+    command->SetCommandExitStatus(true);
+}
 
-        // struct configureReportingResponseRecord[]
-        while (messageLen)
-        {
-            CHECK_MESSAGE_LENGTH(1);
-            uint8_t status = chip::Encoding::Read8(message); // zclStatus
-            success        = CheckStatus(status);
-
-            if (status != 0)
-            {
-                CHECK_MESSAGE_LENGTH(1);
-                uint8_t direction = chip::Encoding::Read8(message); // reportingRole
-                ChipLogProgress(chipTool, "  %s: 0x%02x", "direction", direction);
-            }
-
-            if (status != 0)
-            {
-                CHECK_MESSAGE_LENGTH(2);
-                uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
-                ChipLogProgress(chipTool, "  %s: 0x%04x", "attributeId", attributeId);
-            }
-        }
-        return success;
-    }
-};
-
-/*
- * Command ReadReportingConfigurationResponse
- */
-class ReadReportingConfigurationResponse : public ModelCommandResponse
+static void OnInt16sAttributeResponse(void * context, int16_t value)
 {
-public:
-    ReadReportingConfigurationResponse() : ModelCommandResponse(0x09) {}
+    ChipLogProgress(chipTool, "Int16s attribute Response: %" PRId16, value);
 
-    bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
-    {
-        bool success = true;
-        ChipLogProgress(chipTool, "ReadReportingConfigurationResponse (0x09):");
+    ModelCommand * command = reinterpret_cast<ModelCommand *>(context);
+    command->SetCommandExitStatus(true);
+}
 
-        // struct readReportingConfigurationResponseRecord[]
-        while (messageLen)
-        {
-            CHECK_MESSAGE_LENGTH(1);
-            uint8_t direction = chip::Encoding::Read8(message); // reportingRole
-            ChipLogProgress(chipTool, "  %s: 0x%02x", "direction", direction);
-
-            CHECK_MESSAGE_LENGTH(2);
-            uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
-            ChipLogProgress(chipTool, "  %s: 0x%04x", "attributeId", attributeId);
-
-            if (direction == 0)
-            {
-                CHECK_MESSAGE_LENGTH(1);
-                uint8_t attributeType = chip::Encoding::Read8(message); // zclType
-                ChipLogProgress(chipTool, "  %s: 0x%02x", "attributeType", attributeType);
-            }
-
-            if (direction == 0)
-            {
-                CHECK_MESSAGE_LENGTH(2);
-                uint16_t minimumReportingInterval = chip::Encoding::LittleEndian::Read16(message); // uint16
-                ChipLogProgress(chipTool, "  %s: 0x%04x", "minimumReportingInterval", minimumReportingInterval);
-            }
-
-            if (direction == 0)
-            {
-                CHECK_MESSAGE_LENGTH(2);
-                uint16_t maximumReportingInterval = chip::Encoding::LittleEndian::Read16(message); // uint16
-                ChipLogProgress(chipTool, "  %s: 0x%04x", "maximumReportingInterval", maximumReportingInterval);
-            }
-
-            if (direction == 0)
-            {
-                // FIXME: unk is not supported yet.
-            }
-
-            if (direction == 1)
-            {
-                CHECK_MESSAGE_LENGTH(2);
-                uint16_t timeout = chip::Encoding::LittleEndian::Read16(message); // uint16
-                ChipLogProgress(chipTool, "  %s: 0x%04x", "timeout", timeout);
-            }
-        }
-        return success;
-    }
-};
-
-/*
- * Command DefaultResponse
- */
-class DefaultResponse : public ModelCommandResponse
+static void OnDoorLockClusterClearAllPinsResponse(void * context)
 {
-public:
-    DefaultResponse() : ModelCommandResponse(0x0B) {}
+    ChipLogProgress(chipTool, "DoorLockClusterClearAllPinsResponse");
 
-    bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
-    {
-        bool success = true;
-        ChipLogProgress(chipTool, "DefaultResponse (0x0B):");
+    ModelCommand * command = reinterpret_cast<ModelCommand *>(context);
+    command->SetCommandExitStatus(true);
+}
 
-        CHECK_MESSAGE_LENGTH(1);
-        uint8_t commandId = chip::Encoding::Read8(message); // uint8
-        ChipLogProgress(chipTool, "  %s: 0x%02x", "commandId", commandId);
-
-        CHECK_MESSAGE_LENGTH(1);
-        uint8_t status = chip::Encoding::Read8(message); // zclStatus
-        success        = CheckStatus(status);
-
-        return success;
-    }
-};
-
-/*
- * Command DiscoverAttributesResponse
- */
-class DiscoverAttributesResponse : public ModelCommandResponse
+static void OnDoorLockClusterClearAllRfidsResponse(void * context)
 {
-public:
-    DiscoverAttributesResponse() : ModelCommandResponse(0x0D) {}
+    ChipLogProgress(chipTool, "DoorLockClusterClearAllRfidsResponse");
 
-    bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
-    {
-        bool success = true;
-        ChipLogProgress(chipTool, "DiscoverAttributesResponse (0x0D):");
+    ModelCommand * command = reinterpret_cast<ModelCommand *>(context);
+    command->SetCommandExitStatus(true);
+}
 
-        CHECK_MESSAGE_LENGTH(1);
-        bool discoveryComplete = chip::Encoding::Read8(message); // bool
-        ChipLogProgress(chipTool, "  %s: 0x%02x", "discoveryComplete", discoveryComplete);
-
-        // struct discoverAttributesResponseRecord[]
-        while (messageLen)
-        {
-            CHECK_MESSAGE_LENGTH(2);
-            uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
-            ChipLogProgress(chipTool, "  %s: 0x%04x", "attributeId", attributeId);
-
-            CHECK_MESSAGE_LENGTH(1);
-            uint8_t attributeType = chip::Encoding::Read8(message); // zclType
-            ChipLogProgress(chipTool, "  %s: 0x%02x", "attributeType", attributeType);
-        }
-        return success;
-    }
-};
-
-/*
- * Command WriteAttributesStructuredResponse
- */
-class WriteAttributesStructuredResponse : public ModelCommandResponse
+static void OnDoorLockClusterClearHolidayScheduleResponse(void * context)
 {
-public:
-    WriteAttributesStructuredResponse() : ModelCommandResponse(0x10) {}
+    ChipLogProgress(chipTool, "DoorLockClusterClearHolidayScheduleResponse");
 
-    bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
-    {
-        bool success = true;
-        ChipLogProgress(chipTool, "WriteAttributesStructuredResponse (0x10):");
+    ModelCommand * command = reinterpret_cast<ModelCommand *>(context);
+    command->SetCommandExitStatus(true);
+}
 
-        // struct writeStructuredResponseRecord[]
-        while (messageLen)
-        {
-            CHECK_MESSAGE_LENGTH(1);
-            uint8_t status = chip::Encoding::Read8(message); // zclStatus
-            success        = CheckStatus(status);
-
-            if (status != 0)
-            {
-                CHECK_MESSAGE_LENGTH(2);
-                uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
-                ChipLogProgress(chipTool, "  %s: 0x%04x", "attributeId", attributeId);
-            }
-
-            if (status != 0)
-            {
-                CHECK_MESSAGE_LENGTH(2);
-                uint16_t selector = chip::Encoding::LittleEndian::Read16(message); // uint16
-                ChipLogProgress(chipTool, "  %s: 0x%04x", "selector", selector);
-            }
-        }
-        return success;
-    }
-};
-
-/*
- * Command DiscoverCommandsReceivedResponse
- */
-class DiscoverCommandsReceivedResponse : public ModelCommandResponse
+static void OnDoorLockClusterClearPinResponse(void * context)
 {
-public:
-    DiscoverCommandsReceivedResponse() : ModelCommandResponse(0x12) {}
+    ChipLogProgress(chipTool, "DoorLockClusterClearPinResponse");
 
-    bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
-    {
-        bool success = true;
-        ChipLogProgress(chipTool, "DiscoverCommandsReceivedResponse (0x12):");
+    ModelCommand * command = reinterpret_cast<ModelCommand *>(context);
+    command->SetCommandExitStatus(true);
+}
 
-        CHECK_MESSAGE_LENGTH(1);
-        bool discoveryComplete = chip::Encoding::Read8(message); // bool
-        ChipLogProgress(chipTool, "  %s: 0x%02x", "discoveryComplete", discoveryComplete);
-
-        // uint8_t uint8[]
-        while (messageLen)
-        {
-            CHECK_MESSAGE_LENGTH(1);
-            uint8_t commandId = chip::Encoding::Read8(message); // uint8
-            ChipLogProgress(chipTool, "  %s: 0x%02x", "commandId", commandId);
-        }
-        return success;
-    }
-};
-
-/*
- * Command DiscoverCommandsGeneratedResponse
- */
-class DiscoverCommandsGeneratedResponse : public ModelCommandResponse
+static void OnDoorLockClusterClearRfidResponse(void * context)
 {
-public:
-    DiscoverCommandsGeneratedResponse() : ModelCommandResponse(0x14) {}
+    ChipLogProgress(chipTool, "DoorLockClusterClearRfidResponse");
 
-    bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
-    {
-        bool success = true;
-        ChipLogProgress(chipTool, "DiscoverCommandsGeneratedResponse (0x14):");
+    ModelCommand * command = reinterpret_cast<ModelCommand *>(context);
+    command->SetCommandExitStatus(true);
+}
 
-        CHECK_MESSAGE_LENGTH(1);
-        bool discoveryComplete = chip::Encoding::Read8(message); // bool
-        ChipLogProgress(chipTool, "  %s: 0x%02x", "discoveryComplete", discoveryComplete);
-
-        // uint8_t uint8[]
-        while (messageLen)
-        {
-            CHECK_MESSAGE_LENGTH(1);
-            uint8_t commandId = chip::Encoding::Read8(message); // uint8
-            ChipLogProgress(chipTool, "  %s: 0x%02x", "commandId", commandId);
-        }
-        return success;
-    }
-};
-
-/*
- * Command DiscoverAttributesExtendedResponse
- */
-class DiscoverAttributesExtendedResponse : public ModelCommandResponse
+static void OnDoorLockClusterClearWeekdayScheduleResponse(void * context)
 {
-public:
-    DiscoverAttributesExtendedResponse() : ModelCommandResponse(0x16) {}
+    ChipLogProgress(chipTool, "DoorLockClusterClearWeekdayScheduleResponse");
 
-    bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
-    {
-        bool success = true;
-        ChipLogProgress(chipTool, "DiscoverAttributesExtendedResponse (0x16):");
+    ModelCommand * command = reinterpret_cast<ModelCommand *>(context);
+    command->SetCommandExitStatus(true);
+}
 
-        CHECK_MESSAGE_LENGTH(1);
-        bool discoveryComplete = chip::Encoding::Read8(message); // bool
-        ChipLogProgress(chipTool, "  %s: 0x%02x", "discoveryComplete", discoveryComplete);
+static void OnDoorLockClusterClearYeardayScheduleResponse(void * context)
+{
+    ChipLogProgress(chipTool, "DoorLockClusterClearYeardayScheduleResponse");
 
-        // struct discoverAttributesExtendedResponseRecord[]
-        while (messageLen)
-        {
-            CHECK_MESSAGE_LENGTH(2);
-            uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
-            ChipLogProgress(chipTool, "  %s: 0x%04x", "attributeId", attributeId);
+    ModelCommand * command = reinterpret_cast<ModelCommand *>(context);
+    command->SetCommandExitStatus(true);
+}
 
-            CHECK_MESSAGE_LENGTH(1);
-            uint8_t accessControl = chip::Encoding::Read8(message); // bitmap8
-            ChipLogProgress(chipTool, "  %s: 0x%02x", "accessControl", accessControl);
-        }
-        return success;
-    }
-};
+static void OnDoorLockClusterGetHolidayScheduleResponse(void * context, uint8_t scheduleId, uint32_t localStartTime,
+                                                        uint32_t localEndTime, uint8_t operatingModeDuringHoliday)
+{
+    ChipLogProgress(chipTool, "DoorLockClusterGetHolidayScheduleResponse");
+
+    ModelCommand * command = reinterpret_cast<ModelCommand *>(context);
+    command->SetCommandExitStatus(true);
+}
+
+static void OnDoorLockClusterGetLogRecordResponse(void * context, uint16_t logEntryId, uint32_t timestamp, uint8_t eventType,
+                                                  uint8_t source, uint8_t eventIdOrAlarmCode, uint16_t userId, uint8_t * pin)
+{
+    ChipLogProgress(chipTool, "DoorLockClusterGetLogRecordResponse");
+
+    ModelCommand * command = reinterpret_cast<ModelCommand *>(context);
+    command->SetCommandExitStatus(true);
+}
+
+static void OnDoorLockClusterGetPinResponse(void * context, uint16_t userId, uint8_t userStatus, uint8_t userType, uint8_t * pin)
+{
+    ChipLogProgress(chipTool, "DoorLockClusterGetPinResponse");
+
+    ModelCommand * command = reinterpret_cast<ModelCommand *>(context);
+    command->SetCommandExitStatus(true);
+}
+
+static void OnDoorLockClusterGetRfidResponse(void * context, uint16_t userId, uint8_t userStatus, uint8_t userType, uint8_t * rfid)
+{
+    ChipLogProgress(chipTool, "DoorLockClusterGetRfidResponse");
+
+    ModelCommand * command = reinterpret_cast<ModelCommand *>(context);
+    command->SetCommandExitStatus(true);
+}
+
+static void OnDoorLockClusterGetUserTypeResponse(void * context, uint16_t userId, uint8_t userType)
+{
+    ChipLogProgress(chipTool, "DoorLockClusterGetUserTypeResponse");
+
+    ModelCommand * command = reinterpret_cast<ModelCommand *>(context);
+    command->SetCommandExitStatus(true);
+}
+
+static void OnDoorLockClusterGetWeekdayScheduleResponse(void * context, uint8_t scheduleId, uint16_t userId, uint8_t daysMask,
+                                                        uint8_t startHour, uint8_t startMinute, uint8_t endHour, uint8_t endMinute)
+{
+    ChipLogProgress(chipTool, "DoorLockClusterGetWeekdayScheduleResponse");
+
+    ModelCommand * command = reinterpret_cast<ModelCommand *>(context);
+    command->SetCommandExitStatus(true);
+}
+
+static void OnDoorLockClusterGetYeardayScheduleResponse(void * context, uint8_t scheduleId, uint16_t userId,
+                                                        uint32_t localStartTime, uint32_t localEndTime)
+{
+    ChipLogProgress(chipTool, "DoorLockClusterGetYeardayScheduleResponse");
+
+    ModelCommand * command = reinterpret_cast<ModelCommand *>(context);
+    command->SetCommandExitStatus(true);
+}
+
+static void OnDoorLockClusterLockDoorResponse(void * context)
+{
+    ChipLogProgress(chipTool, "DoorLockClusterLockDoorResponse");
+
+    ModelCommand * command = reinterpret_cast<ModelCommand *>(context);
+    command->SetCommandExitStatus(true);
+}
+
+static void OnDoorLockClusterSetHolidayScheduleResponse(void * context)
+{
+    ChipLogProgress(chipTool, "DoorLockClusterSetHolidayScheduleResponse");
+
+    ModelCommand * command = reinterpret_cast<ModelCommand *>(context);
+    command->SetCommandExitStatus(true);
+}
+
+static void OnDoorLockClusterSetPinResponse(void * context)
+{
+    ChipLogProgress(chipTool, "DoorLockClusterSetPinResponse");
+
+    ModelCommand * command = reinterpret_cast<ModelCommand *>(context);
+    command->SetCommandExitStatus(true);
+}
+
+static void OnDoorLockClusterSetRfidResponse(void * context)
+{
+    ChipLogProgress(chipTool, "DoorLockClusterSetRfidResponse");
+
+    ModelCommand * command = reinterpret_cast<ModelCommand *>(context);
+    command->SetCommandExitStatus(true);
+}
+
+static void OnDoorLockClusterSetUserTypeResponse(void * context)
+{
+    ChipLogProgress(chipTool, "DoorLockClusterSetUserTypeResponse");
+
+    ModelCommand * command = reinterpret_cast<ModelCommand *>(context);
+    command->SetCommandExitStatus(true);
+}
+
+static void OnDoorLockClusterSetWeekdayScheduleResponse(void * context)
+{
+    ChipLogProgress(chipTool, "DoorLockClusterSetWeekdayScheduleResponse");
+
+    ModelCommand * command = reinterpret_cast<ModelCommand *>(context);
+    command->SetCommandExitStatus(true);
+}
+
+static void OnDoorLockClusterSetYeardayScheduleResponse(void * context)
+{
+    ChipLogProgress(chipTool, "DoorLockClusterSetYeardayScheduleResponse");
+
+    ModelCommand * command = reinterpret_cast<ModelCommand *>(context);
+    command->SetCommandExitStatus(true);
+}
+
+static void OnDoorLockClusterUnlockDoorResponse(void * context)
+{
+    ChipLogProgress(chipTool, "DoorLockClusterUnlockDoorResponse");
+
+    ModelCommand * command = reinterpret_cast<ModelCommand *>(context);
+    command->SetCommandExitStatus(true);
+}
+
+static void OnDoorLockClusterUnlockWithTimeoutResponse(void * context)
+{
+    ChipLogProgress(chipTool, "DoorLockClusterUnlockWithTimeoutResponse");
+
+    ModelCommand * command = reinterpret_cast<ModelCommand *>(context);
+    command->SetCommandExitStatus(true);
+}
+
+static void OnGroupsClusterAddGroupResponse(void * context, uint16_t groupId)
+{
+    ChipLogProgress(chipTool, "GroupsClusterAddGroupResponse");
+
+    ModelCommand * command = reinterpret_cast<ModelCommand *>(context);
+    command->SetCommandExitStatus(true);
+}
+
+static void OnGroupsClusterGetGroupMembershipResponse(void * context, uint8_t capacity, uint8_t groupCount,
+                                                      /* TYPE WARNING: array array defaults to */ uint8_t * groupList)
+{
+    ChipLogProgress(chipTool, "GroupsClusterGetGroupMembershipResponse");
+
+    ModelCommand * command = reinterpret_cast<ModelCommand *>(context);
+    command->SetCommandExitStatus(true);
+}
+
+static void OnGroupsClusterRemoveGroupResponse(void * context, uint16_t groupId)
+{
+    ChipLogProgress(chipTool, "GroupsClusterRemoveGroupResponse");
+
+    ModelCommand * command = reinterpret_cast<ModelCommand *>(context);
+    command->SetCommandExitStatus(true);
+}
+
+static void OnGroupsClusterViewGroupResponse(void * context, uint16_t groupId, uint8_t * groupName)
+{
+    ChipLogProgress(chipTool, "GroupsClusterViewGroupResponse");
+
+    ModelCommand * command = reinterpret_cast<ModelCommand *>(context);
+    command->SetCommandExitStatus(true);
+}
+
+static void OnIdentifyClusterIdentifyQueryResponse(void * context, uint16_t timeout)
+{
+    ChipLogProgress(chipTool, "IdentifyClusterIdentifyQueryResponse");
+
+    ModelCommand * command = reinterpret_cast<ModelCommand *>(context);
+    command->SetCommandExitStatus(true);
+}
+
+static void OnScenesClusterAddSceneResponse(void * context, uint16_t groupId, uint8_t sceneId)
+{
+    ChipLogProgress(chipTool, "ScenesClusterAddSceneResponse");
+
+    ModelCommand * command = reinterpret_cast<ModelCommand *>(context);
+    command->SetCommandExitStatus(true);
+}
+
+static void OnScenesClusterGetSceneMembershipResponse(void * context, uint8_t capacity, uint16_t groupId, uint8_t sceneCount,
+                                                      /* TYPE WARNING: array array defaults to */ uint8_t * sceneList)
+{
+    ChipLogProgress(chipTool, "ScenesClusterGetSceneMembershipResponse");
+
+    ModelCommand * command = reinterpret_cast<ModelCommand *>(context);
+    command->SetCommandExitStatus(true);
+}
+
+static void OnScenesClusterRemoveAllScenesResponse(void * context, uint16_t groupId)
+{
+    ChipLogProgress(chipTool, "ScenesClusterRemoveAllScenesResponse");
+
+    ModelCommand * command = reinterpret_cast<ModelCommand *>(context);
+    command->SetCommandExitStatus(true);
+}
+
+static void OnScenesClusterRemoveSceneResponse(void * context, uint16_t groupId, uint8_t sceneId)
+{
+    ChipLogProgress(chipTool, "ScenesClusterRemoveSceneResponse");
+
+    ModelCommand * command = reinterpret_cast<ModelCommand *>(context);
+    command->SetCommandExitStatus(true);
+}
+
+static void OnScenesClusterStoreSceneResponse(void * context, uint16_t groupId, uint8_t sceneId)
+{
+    ChipLogProgress(chipTool, "ScenesClusterStoreSceneResponse");
+
+    ModelCommand * command = reinterpret_cast<ModelCommand *>(context);
+    command->SetCommandExitStatus(true);
+}
+
+static void OnScenesClusterViewSceneResponse(void * context, uint16_t groupId, uint8_t sceneId, uint16_t transitionTime,
+                                             uint8_t * sceneName,
+                                             /* TYPE WARNING: array array defaults to */ uint8_t * extensionFieldSets)
+{
+    ChipLogProgress(chipTool, "ScenesClusterViewSceneResponse");
+
+    ModelCommand * command = reinterpret_cast<ModelCommand *>(context);
+    command->SetCommandExitStatus(true);
+}
 
 /*----------------------------------------------------------------------------*\
 | Cluster Name                                                        |   ID   |
 |---------------------------------------------------------------------+--------|
 | BarrierControl                                                      | 0x0103 |
 | Basic                                                               | 0x0000 |
+| Binding                                                             | 0xF000 |
 | ColorControl                                                        | 0x0300 |
 | DoorLock                                                            | 0x0101 |
 | Groups                                                              | 0x0004 |
-| IasZone                                                             | 0x0500 |
 | Identify                                                            | 0x0003 |
-| Level                                                               | 0x0008 |
+| LevelControl                                                        | 0x0008 |
 | OnOff                                                               | 0x0006 |
 | Scenes                                                              | 0x0005 |
 | TemperatureMeasurement                                              | 0x0402 |
 \*----------------------------------------------------------------------------*/
 
-constexpr uint16_t kBarrierControlClusterId  = 0x0103;
-constexpr uint16_t kBasicClusterId           = 0x0000;
-constexpr uint16_t kColorControlClusterId    = 0x0300;
-constexpr uint16_t kDoorLockClusterId        = 0x0101;
-constexpr uint16_t kGroupsClusterId          = 0x0004;
-constexpr uint16_t kIasZoneClusterId         = 0x0500;
-constexpr uint16_t kIdentifyClusterId        = 0x0003;
-constexpr uint16_t kLevelClusterId           = 0x0008;
-constexpr uint16_t kOnOffClusterId           = 0x0006;
-constexpr uint16_t kScenesClusterId          = 0x0005;
-constexpr uint16_t kTempMeasurementClusterId = 0x0402;
+constexpr chip::ClusterId kBarrierControlClusterId         = 0x0103;
+constexpr chip::ClusterId kBasicClusterId                  = 0x0000;
+constexpr chip::ClusterId kBindingClusterId                = 0xF000;
+constexpr chip::ClusterId kColorControlClusterId           = 0x0300;
+constexpr chip::ClusterId kDoorLockClusterId               = 0x0101;
+constexpr chip::ClusterId kGroupsClusterId                 = 0x0004;
+constexpr chip::ClusterId kIdentifyClusterId               = 0x0003;
+constexpr chip::ClusterId kLevelControlClusterId           = 0x0008;
+constexpr chip::ClusterId kOnOffClusterId                  = 0x0006;
+constexpr chip::ClusterId kScenesClusterId                 = 0x0005;
+constexpr chip::ClusterId kTemperatureMeasurementClusterId = 0x0402;
 
 /*----------------------------------------------------------------------------*\
 | Cluster BarrierControl                                              | 0x0103 |
 |------------------------------------------------------------------------------|
-| Responses:                                                          |        |
-|                                                                     |        |
-|------------------------------------------------------------------------------|
 | Commands:                                                           |        |
-| * GoToPercent                                                       |   0x00 |
-| * Stop                                                              |   0x01 |
+| * BarrierControlGoToPercent                                         |   0x00 |
+| * BarrierControlStop                                                |   0x01 |
 |------------------------------------------------------------------------------|
 | Attributes:                                                         |        |
-| * MovingState                                                       | 0x0001 |
-| * SafetyStatus                                                      | 0x0002 |
-| * Capabilities                                                      | 0x0003 |
+| * BarrierMovingState                                                | 0x0001 |
+| * BarrierSafetyStatus                                               | 0x0002 |
+| * BarrierCapabilities                                               | 0x0003 |
 | * BarrierPosition                                                   | 0x000A |
+| * ClusterRevision                                                   | 0xFFFD |
 \*----------------------------------------------------------------------------*/
 
 /*
- * Command GoToPercent
+ * Command BarrierControlGoToPercent
  */
-class BarrierControlGoToPercent : public ModelCommand
+class BarrierControlBarrierControlGoToPercent : public ModelCommand
 {
 public:
-    BarrierControlGoToPercent() : ModelCommand("barrier-control-go-to-percent", kBarrierControlClusterId, 0x00)
+    BarrierControlBarrierControlGoToPercent() : ModelCommand("barrier-control-go-to-percent")
     {
         AddArgument("percentOpen", 0, UINT8_MAX, &mPercentOpen);
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeBarrierControlClusterBarrierControlGoToPercentCommand(endPointId, mPercentOpen);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0103) command (0x00) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::BarrierControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.BarrierControlGoToPercent(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mPercentOpen);
     }
 
 private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
     uint8_t mPercentOpen;
 };
 
 /*
- * Command Stop
+ * Command BarrierControlStop
  */
-class BarrierControlStop : public ModelCommand
+class BarrierControlBarrierControlStop : public ModelCommand
 {
 public:
-    BarrierControlStop() : ModelCommand("barrier-control-stop", kBarrierControlClusterId, 0x01) { ModelCommand::AddArguments(); }
+    BarrierControlBarrierControlStop() : ModelCommand("barrier-control-stop") { ModelCommand::AddArguments(); }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeBarrierControlClusterBarrierControlStopCommand(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0103) command (0x01) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::BarrierControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.BarrierControlStop(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
- * Discover attributes
+ * Discover Attributes
  */
 class DiscoverBarrierControlAttributes : public ModelCommand
 {
 public:
-    DiscoverBarrierControlAttributes() : ModelCommand("discover", kBarrierControlClusterId, 0x0c) { ModelCommand::AddArguments(); }
+    DiscoverBarrierControlAttributes() : ModelCommand("discover") { ModelCommand::AddArguments(); }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeBarrierControlClusterDiscoverAttributes(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0000) command (0x0C) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::BarrierControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.DiscoverAttributes(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: DiscoverAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DiscoverAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
- * Attribute MovingState
+ * Attribute BarrierMovingState
  */
-class ReadBarrierControlMovingState : public ModelCommand
+class ReadBarrierControlBarrierMovingState : public ModelCommand
 {
 public:
-    ReadBarrierControlMovingState() : ModelCommand("read", kBarrierControlClusterId, 0x00)
+    ReadBarrierControlBarrierMovingState() : ModelCommand("read")
     {
         AddArgument("attr-name", "barrier-moving-state");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeBarrierControlClusterReadBarrierMovingStateAttribute(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0103) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::BarrierControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeBarrierMovingState(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<Int8uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int8uAttributeCallback>(OnInt8uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
- * Attribute SafetyStatus
+ * Attribute BarrierSafetyStatus
  */
-class ReadBarrierControlSafetyStatus : public ModelCommand
+class ReadBarrierControlBarrierSafetyStatus : public ModelCommand
 {
 public:
-    ReadBarrierControlSafetyStatus() : ModelCommand("read", kBarrierControlClusterId, 0x00)
+    ReadBarrierControlBarrierSafetyStatus() : ModelCommand("read")
     {
         AddArgument("attr-name", "barrier-safety-status");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeBarrierControlClusterReadBarrierSafetyStatusAttribute(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0103) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::BarrierControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeBarrierSafetyStatus(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<Int16uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
- * Attribute Capabilities
+ * Attribute BarrierCapabilities
  */
-class ReadBarrierControlCapabilities : public ModelCommand
+class ReadBarrierControlBarrierCapabilities : public ModelCommand
 {
 public:
-    ReadBarrierControlCapabilities() : ModelCommand("read", kBarrierControlClusterId, 0x00)
+    ReadBarrierControlBarrierCapabilities() : ModelCommand("read")
     {
         AddArgument("attr-name", "barrier-capabilities");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeBarrierControlClusterReadBarrierCapabilitiesAttribute(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0103) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::BarrierControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeBarrierCapabilities(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<Int8uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int8uAttributeCallback>(OnInt8uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
@@ -1071,98 +567,139 @@
 class ReadBarrierControlBarrierPosition : public ModelCommand
 {
 public:
-    ReadBarrierControlBarrierPosition() : ModelCommand("read", kBarrierControlClusterId, 0x00)
+    ReadBarrierControlBarrierPosition() : ModelCommand("read")
     {
         AddArgument("attr-name", "barrier-position");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeBarrierControlClusterReadBarrierPositionAttribute(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0103) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::BarrierControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeBarrierPosition(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
+private:
+    chip::Callback::Callback<Int8uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int8uAttributeCallback>(OnInt8uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+};
+
+/*
+ * Attribute ClusterRevision
+ */
+class ReadBarrierControlClusterRevision : public ModelCommand
+{
+public:
+    ReadBarrierControlClusterRevision() : ModelCommand("read")
     {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        AddArgument("attr-name", "cluster-revision");
+        ModelCommand::AddArguments();
     }
+
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
+    {
+        ChipLogProgress(chipTool, "Sending cluster (0x0103) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::BarrierControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeClusterRevision(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
+    }
+
+private:
+    chip::Callback::Callback<Int16uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*----------------------------------------------------------------------------*\
 | Cluster Basic                                                       | 0x0000 |
 |------------------------------------------------------------------------------|
-| Responses:                                                          |        |
-|                                                                     |        |
-|------------------------------------------------------------------------------|
 | Commands:                                                           |        |
-| * ResetToFactoryDefaults                                            |   0x00 |
 | * MfgSpecificPing                                                   |   0x00 |
+| * ResetToFactoryDefaults                                            |   0x00 |
 |------------------------------------------------------------------------------|
 | Attributes:                                                         |        |
 | * ZclVersion                                                        | 0x0000 |
 | * PowerSource                                                       | 0x0007 |
+| * ClusterRevision                                                   | 0xFFFD |
 \*----------------------------------------------------------------------------*/
 
 /*
- * Command ResetToFactoryDefaults
- */
-class BasicResetToFactoryDefaults : public ModelCommand
-{
-public:
-    BasicResetToFactoryDefaults() : ModelCommand("reset-to-factory-defaults", kBasicClusterId, 0x00)
-    {
-        ModelCommand::AddArguments();
-    }
-
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
-    {
-        return encodeBasicClusterResetToFactoryDefaultsCommand(endPointId);
-    }
-
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
-};
-
-/*
  * Command MfgSpecificPing
  */
 class BasicMfgSpecificPing : public ModelCommand
 {
 public:
-    BasicMfgSpecificPing() : ModelCommand("ping", kBasicClusterId, 0x00) { ModelCommand::AddArguments(); }
+    BasicMfgSpecificPing() : ModelCommand("mfg-specific-ping") { ModelCommand::AddArguments(); }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override { return encodeBasicClusterMfgSpecificPingCommand(endPointId); }
-
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        ChipLogProgress(chipTool, "Sending cluster (0x0000) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::BasicCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.MfgSpecificPing(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
+
+private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
- * Discover attributes
+ * Command ResetToFactoryDefaults
+ */
+class BasicResetToFactoryDefaults : public ModelCommand
+{
+public:
+    BasicResetToFactoryDefaults() : ModelCommand("reset-to-factory-defaults") { ModelCommand::AddArguments(); }
+
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
+    {
+        ChipLogProgress(chipTool, "Sending cluster (0x0000) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::BasicCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ResetToFactoryDefaults(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
+    }
+
+private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+};
+
+/*
+ * Discover Attributes
  */
 class DiscoverBasicAttributes : public ModelCommand
 {
 public:
-    DiscoverBasicAttributes() : ModelCommand("discover", kBasicClusterId, 0x0c) { ModelCommand::AddArguments(); }
+    DiscoverBasicAttributes() : ModelCommand("discover") { ModelCommand::AddArguments(); }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override { return encodeBasicClusterDiscoverAttributes(endPointId); }
-
-    // Global Response: DiscoverAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        DiscoverAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        ChipLogProgress(chipTool, "Sending cluster (0x0000) command (0x0C) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::BasicCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.DiscoverAttributes(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
+
+private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
@@ -1171,20 +708,26 @@
 class ReadBasicZclVersion : public ModelCommand
 {
 public:
-    ReadBasicZclVersion() : ModelCommand("read", kBasicClusterId, 0x00)
+    ReadBasicZclVersion() : ModelCommand("read")
     {
         AddArgument("attr-name", "zcl-version");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override { return encodeBasicClusterReadZclVersionAttribute(endPointId); }
-
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        ChipLogProgress(chipTool, "Sending cluster (0x0000) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::BasicCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeZclVersion(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
+
+private:
+    chip::Callback::Callback<Int8uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int8uAttributeCallback>(OnInt8uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
@@ -1193,28 +736,192 @@
 class ReadBasicPowerSource : public ModelCommand
 {
 public:
-    ReadBasicPowerSource() : ModelCommand("read", kBasicClusterId, 0x00)
+    ReadBasicPowerSource() : ModelCommand("read")
     {
         AddArgument("attr-name", "power-source");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override { return encodeBasicClusterReadPowerSourceAttribute(endPointId); }
-
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        ChipLogProgress(chipTool, "Sending cluster (0x0000) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::BasicCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributePowerSource(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
+
+private:
+    chip::Callback::Callback<Int8uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int8uAttributeCallback>(OnInt8uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+};
+
+/*
+ * Attribute ClusterRevision
+ */
+class ReadBasicClusterRevision : public ModelCommand
+{
+public:
+    ReadBasicClusterRevision() : ModelCommand("read")
+    {
+        AddArgument("attr-name", "cluster-revision");
+        ModelCommand::AddArguments();
+    }
+
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
+    {
+        ChipLogProgress(chipTool, "Sending cluster (0x0000) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::BasicCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeClusterRevision(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
+    }
+
+private:
+    chip::Callback::Callback<Int16uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+};
+
+/*----------------------------------------------------------------------------*\
+| Cluster Binding                                                     | 0xF000 |
+|------------------------------------------------------------------------------|
+| Commands:                                                           |        |
+| * Bind                                                              |   0x00 |
+| * Unbind                                                            |   0x01 |
+|------------------------------------------------------------------------------|
+| Attributes:                                                         |        |
+| * ClusterRevision                                                   | 0xFFFD |
+\*----------------------------------------------------------------------------*/
+
+/*
+ * Command Bind
+ */
+class BindingBind : public ModelCommand
+{
+public:
+    BindingBind() : ModelCommand("bind")
+    {
+        AddArgument("nodeId", 0, UINT64_MAX, &mNodeId);
+        AddArgument("groupId", 0, UINT16_MAX, &mGroupId);
+        AddArgument("endpointId", 0, UINT8_MAX, &mEndpointId);
+        AddArgument("clusterId", 0, UINT16_MAX, &mClusterId);
+        ModelCommand::AddArguments();
+    }
+
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
+    {
+        ChipLogProgress(chipTool, "Sending cluster (0xF000) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::BindingCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.Bind(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mNodeId, mGroupId, mEndpointId, mClusterId);
+    }
+
+private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    chip::NodeId mNodeId;
+    chip::GroupId mGroupId;
+    chip::EndpointId mEndpointId;
+    chip::ClusterId mClusterId;
+};
+
+/*
+ * Command Unbind
+ */
+class BindingUnbind : public ModelCommand
+{
+public:
+    BindingUnbind() : ModelCommand("unbind")
+    {
+        AddArgument("nodeId", 0, UINT64_MAX, &mNodeId);
+        AddArgument("groupId", 0, UINT16_MAX, &mGroupId);
+        AddArgument("endpointId", 0, UINT8_MAX, &mEndpointId);
+        AddArgument("clusterId", 0, UINT16_MAX, &mClusterId);
+        ModelCommand::AddArguments();
+    }
+
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
+    {
+        ChipLogProgress(chipTool, "Sending cluster (0xF000) command (0x01) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::BindingCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.Unbind(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mNodeId, mGroupId, mEndpointId, mClusterId);
+    }
+
+private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    chip::NodeId mNodeId;
+    chip::GroupId mGroupId;
+    chip::EndpointId mEndpointId;
+    chip::ClusterId mClusterId;
+};
+
+/*
+ * Discover Attributes
+ */
+class DiscoverBindingAttributes : public ModelCommand
+{
+public:
+    DiscoverBindingAttributes() : ModelCommand("discover") { ModelCommand::AddArguments(); }
+
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
+    {
+        ChipLogProgress(chipTool, "Sending cluster (0x0000) command (0x0C) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::BindingCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.DiscoverAttributes(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
+    }
+
+private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+};
+
+/*
+ * Attribute ClusterRevision
+ */
+class ReadBindingClusterRevision : public ModelCommand
+{
+public:
+    ReadBindingClusterRevision() : ModelCommand("read")
+    {
+        AddArgument("attr-name", "cluster-revision");
+        ModelCommand::AddArguments();
+    }
+
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
+    {
+        ChipLogProgress(chipTool, "Sending cluster (0xF000) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::BindingCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeClusterRevision(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
+    }
+
+private:
+    chip::Callback::Callback<Int16uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*----------------------------------------------------------------------------*\
 | Cluster ColorControl                                                | 0x0300 |
 |------------------------------------------------------------------------------|
-| Responses:                                                          |        |
-|                                                                     |        |
-|------------------------------------------------------------------------------|
 | Commands:                                                           |        |
 | * MoveColor                                                         |   0x08 |
 | * MoveColorTemperature                                              |   0x4B |
@@ -1237,8 +944,11 @@
 | * RemainingTime                                                     | 0x0002 |
 | * CurrentX                                                          | 0x0003 |
 | * CurrentY                                                          | 0x0004 |
+| * DriftCompensation                                                 | 0x0005 |
+| * CompensationText                                                  | 0x0006 |
 | * ColorTemperature                                                  | 0x0007 |
 | * ColorMode                                                         | 0x0008 |
+| * ColorControlOptions                                               | 0x000F |
 | * NumberOfPrimaries                                                 | 0x0010 |
 | * Primary1X                                                         | 0x0011 |
 | * Primary1Y                                                         | 0x0012 |
@@ -1258,6 +968,17 @@
 | * Primary6X                                                         | 0x0028 |
 | * Primary6Y                                                         | 0x0029 |
 | * Primary6Intensity                                                 | 0x002A |
+| * WhitePointX                                                       | 0x0030 |
+| * WhitePointY                                                       | 0x0031 |
+| * ColorPointRX                                                      | 0x0032 |
+| * ColorPointRY                                                      | 0x0033 |
+| * ColorPointRIntensity                                              | 0x0034 |
+| * ColorPointGX                                                      | 0x0036 |
+| * ColorPointGY                                                      | 0x0037 |
+| * ColorPointGIntensity                                              | 0x0038 |
+| * ColorPointBX                                                      | 0x003A |
+| * ColorPointBY                                                      | 0x003B |
+| * ColorPointBIntensity                                              | 0x003C |
 | * EnhancedCurrentHue                                                | 0x4000 |
 | * EnhancedColorMode                                                 | 0x4001 |
 | * ColorLoopActive                                                   | 0x4002 |
@@ -1268,6 +989,7 @@
 | * ColorTempPhysicalMax                                              | 0x400C |
 | * CoupleColorTempToLevelMinMireds                                   | 0x400D |
 | * StartUpColorTemperatureMireds                                     | 0x4010 |
+| * ClusterRevision                                                   | 0xFFFD |
 \*----------------------------------------------------------------------------*/
 
 /*
@@ -1276,7 +998,7 @@
 class ColorControlMoveColor : public ModelCommand
 {
 public:
-    ColorControlMoveColor() : ModelCommand("move-color", kColorControlClusterId, 0x08)
+    ColorControlMoveColor() : ModelCommand("move-color")
     {
         AddArgument("rateX", INT16_MIN, INT16_MAX, &mRateX);
         AddArgument("rateY", INT16_MIN, INT16_MAX, &mRateY);
@@ -1285,19 +1007,21 @@
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterMoveColorCommand(endPointId, mRateX, mRateY, mOptionsMask, mOptionsOverride);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x08) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.MoveColor(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mRateX, mRateY, mOptionsMask,
+                                 mOptionsOverride);
     }
 
 private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
     int16_t mRateX;
     int16_t mRateY;
     uint8_t mOptionsMask;
@@ -1310,7 +1034,7 @@
 class ColorControlMoveColorTemperature : public ModelCommand
 {
 public:
-    ColorControlMoveColorTemperature() : ModelCommand("move-color-temperature", kColorControlClusterId, 0x4B)
+    ColorControlMoveColorTemperature() : ModelCommand("move-color-temperature")
     {
         AddArgument("moveMode", 0, UINT8_MAX, &mMoveMode);
         AddArgument("rate", 0, UINT16_MAX, &mRate);
@@ -1321,20 +1045,21 @@
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterMoveColorTemperatureCommand(endPointId, mMoveMode, mRate, mColorTemperatureMinimum,
-                                                                    mColorTemperatureMaximum, mOptionsMask, mOptionsOverride);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x4B) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.MoveColorTemperature(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mMoveMode, mRate,
+                                            mColorTemperatureMinimum, mColorTemperatureMaximum, mOptionsMask, mOptionsOverride);
     }
 
 private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
     uint8_t mMoveMode;
     uint16_t mRate;
     uint16_t mColorTemperatureMinimum;
@@ -1349,7 +1074,7 @@
 class ColorControlMoveHue : public ModelCommand
 {
 public:
-    ColorControlMoveHue() : ModelCommand("move-hue", kColorControlClusterId, 0x01)
+    ColorControlMoveHue() : ModelCommand("move-hue")
     {
         AddArgument("moveMode", 0, UINT8_MAX, &mMoveMode);
         AddArgument("rate", 0, UINT8_MAX, &mRate);
@@ -1358,19 +1083,21 @@
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterMoveHueCommand(endPointId, mMoveMode, mRate, mOptionsMask, mOptionsOverride);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x01) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.MoveHue(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mMoveMode, mRate, mOptionsMask,
+                               mOptionsOverride);
     }
 
 private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
     uint8_t mMoveMode;
     uint8_t mRate;
     uint8_t mOptionsMask;
@@ -1383,7 +1110,7 @@
 class ColorControlMoveSaturation : public ModelCommand
 {
 public:
-    ColorControlMoveSaturation() : ModelCommand("move-saturation", kColorControlClusterId, 0x04)
+    ColorControlMoveSaturation() : ModelCommand("move-saturation")
     {
         AddArgument("moveMode", 0, UINT8_MAX, &mMoveMode);
         AddArgument("rate", 0, UINT8_MAX, &mRate);
@@ -1392,19 +1119,21 @@
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterMoveSaturationCommand(endPointId, mMoveMode, mRate, mOptionsMask, mOptionsOverride);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x04) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.MoveSaturation(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mMoveMode, mRate, mOptionsMask,
+                                      mOptionsOverride);
     }
 
 private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
     uint8_t mMoveMode;
     uint8_t mRate;
     uint8_t mOptionsMask;
@@ -1417,7 +1146,7 @@
 class ColorControlMoveToColor : public ModelCommand
 {
 public:
-    ColorControlMoveToColor() : ModelCommand("move-to-color", kColorControlClusterId, 0x07)
+    ColorControlMoveToColor() : ModelCommand("move-to-color")
     {
         AddArgument("colorX", 0, UINT16_MAX, &mColorX);
         AddArgument("colorY", 0, UINT16_MAX, &mColorY);
@@ -1427,20 +1156,21 @@
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterMoveToColorCommand(endPointId, mColorX, mColorY, mTransitionTime, mOptionsMask,
-                                                           mOptionsOverride);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x07) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.MoveToColor(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mColorX, mColorY, mTransitionTime,
+                                   mOptionsMask, mOptionsOverride);
     }
 
 private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
     uint16_t mColorX;
     uint16_t mColorY;
     uint16_t mTransitionTime;
@@ -1454,7 +1184,7 @@
 class ColorControlMoveToColorTemperature : public ModelCommand
 {
 public:
-    ColorControlMoveToColorTemperature() : ModelCommand("move-to-color-temperature", kColorControlClusterId, 0x0A)
+    ColorControlMoveToColorTemperature() : ModelCommand("move-to-color-temperature")
     {
         AddArgument("colorTemperature", 0, UINT16_MAX, &mColorTemperature);
         AddArgument("transitionTime", 0, UINT16_MAX, &mTransitionTime);
@@ -1463,20 +1193,21 @@
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterMoveToColorTemperatureCommand(endPointId, mColorTemperature, mTransitionTime, mOptionsMask,
-                                                                      mOptionsOverride);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x0A) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.MoveToColorTemperature(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mColorTemperature,
+                                              mTransitionTime, mOptionsMask, mOptionsOverride);
     }
 
 private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
     uint16_t mColorTemperature;
     uint16_t mTransitionTime;
     uint8_t mOptionsMask;
@@ -1489,7 +1220,7 @@
 class ColorControlMoveToHue : public ModelCommand
 {
 public:
-    ColorControlMoveToHue() : ModelCommand("move-to-hue", kColorControlClusterId, 0x00)
+    ColorControlMoveToHue() : ModelCommand("move-to-hue")
     {
         AddArgument("hue", 0, UINT8_MAX, &mHue);
         AddArgument("direction", 0, UINT8_MAX, &mDirection);
@@ -1499,20 +1230,21 @@
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterMoveToHueCommand(endPointId, mHue, mDirection, mTransitionTime, mOptionsMask,
-                                                         mOptionsOverride);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.MoveToHue(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mHue, mDirection, mTransitionTime,
+                                 mOptionsMask, mOptionsOverride);
     }
 
 private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
     uint8_t mHue;
     uint8_t mDirection;
     uint16_t mTransitionTime;
@@ -1526,7 +1258,7 @@
 class ColorControlMoveToHueAndSaturation : public ModelCommand
 {
 public:
-    ColorControlMoveToHueAndSaturation() : ModelCommand("move-to-hue-and-saturation", kColorControlClusterId, 0x06)
+    ColorControlMoveToHueAndSaturation() : ModelCommand("move-to-hue-and-saturation")
     {
         AddArgument("hue", 0, UINT8_MAX, &mHue);
         AddArgument("saturation", 0, UINT8_MAX, &mSaturation);
@@ -1536,20 +1268,21 @@
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterMoveToHueAndSaturationCommand(endPointId, mHue, mSaturation, mTransitionTime, mOptionsMask,
-                                                                      mOptionsOverride);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x06) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.MoveToHueAndSaturation(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mHue, mSaturation,
+                                              mTransitionTime, mOptionsMask, mOptionsOverride);
     }
 
 private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
     uint8_t mHue;
     uint8_t mSaturation;
     uint16_t mTransitionTime;
@@ -1563,7 +1296,7 @@
 class ColorControlMoveToSaturation : public ModelCommand
 {
 public:
-    ColorControlMoveToSaturation() : ModelCommand("move-to-saturation", kColorControlClusterId, 0x03)
+    ColorControlMoveToSaturation() : ModelCommand("move-to-saturation")
     {
         AddArgument("saturation", 0, UINT8_MAX, &mSaturation);
         AddArgument("transitionTime", 0, UINT16_MAX, &mTransitionTime);
@@ -1572,20 +1305,21 @@
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterMoveToSaturationCommand(endPointId, mSaturation, mTransitionTime, mOptionsMask,
-                                                                mOptionsOverride);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x03) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.MoveToSaturation(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mSaturation, mTransitionTime,
+                                        mOptionsMask, mOptionsOverride);
     }
 
 private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
     uint8_t mSaturation;
     uint16_t mTransitionTime;
     uint8_t mOptionsMask;
@@ -1598,7 +1332,7 @@
 class ColorControlStepColor : public ModelCommand
 {
 public:
-    ColorControlStepColor() : ModelCommand("step-color", kColorControlClusterId, 0x09)
+    ColorControlStepColor() : ModelCommand("step-color")
     {
         AddArgument("stepX", INT16_MIN, INT16_MAX, &mStepX);
         AddArgument("stepY", INT16_MIN, INT16_MAX, &mStepY);
@@ -1608,20 +1342,21 @@
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterStepColorCommand(endPointId, mStepX, mStepY, mTransitionTime, mOptionsMask,
-                                                         mOptionsOverride);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x09) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.StepColor(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mStepX, mStepY, mTransitionTime,
+                                 mOptionsMask, mOptionsOverride);
     }
 
 private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
     int16_t mStepX;
     int16_t mStepY;
     uint16_t mTransitionTime;
@@ -1635,7 +1370,7 @@
 class ColorControlStepColorTemperature : public ModelCommand
 {
 public:
-    ColorControlStepColorTemperature() : ModelCommand("step-color-temperature", kColorControlClusterId, 0x4C)
+    ColorControlStepColorTemperature() : ModelCommand("step-color-temperature")
     {
         AddArgument("stepMode", 0, UINT8_MAX, &mStepMode);
         AddArgument("stepSize", 0, UINT16_MAX, &mStepSize);
@@ -1647,21 +1382,22 @@
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterStepColorTemperatureCommand(endPointId, mStepMode, mStepSize, mTransitionTime,
-                                                                    mColorTemperatureMinimum, mColorTemperatureMaximum,
-                                                                    mOptionsMask, mOptionsOverride);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x4C) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.StepColorTemperature(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mStepMode, mStepSize,
+                                            mTransitionTime, mColorTemperatureMinimum, mColorTemperatureMaximum, mOptionsMask,
+                                            mOptionsOverride);
     }
 
 private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
     uint8_t mStepMode;
     uint16_t mStepSize;
     uint16_t mTransitionTime;
@@ -1677,7 +1413,7 @@
 class ColorControlStepHue : public ModelCommand
 {
 public:
-    ColorControlStepHue() : ModelCommand("step-hue", kColorControlClusterId, 0x02)
+    ColorControlStepHue() : ModelCommand("step-hue")
     {
         AddArgument("stepMode", 0, UINT8_MAX, &mStepMode);
         AddArgument("stepSize", 0, UINT8_MAX, &mStepSize);
@@ -1687,20 +1423,21 @@
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterStepHueCommand(endPointId, mStepMode, mStepSize, mTransitionTime, mOptionsMask,
-                                                       mOptionsOverride);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x02) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.StepHue(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mStepMode, mStepSize, mTransitionTime,
+                               mOptionsMask, mOptionsOverride);
     }
 
 private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
     uint8_t mStepMode;
     uint8_t mStepSize;
     uint8_t mTransitionTime;
@@ -1714,7 +1451,7 @@
 class ColorControlStepSaturation : public ModelCommand
 {
 public:
-    ColorControlStepSaturation() : ModelCommand("step-saturation", kColorControlClusterId, 0x05)
+    ColorControlStepSaturation() : ModelCommand("step-saturation")
     {
         AddArgument("stepMode", 0, UINT8_MAX, &mStepMode);
         AddArgument("stepSize", 0, UINT8_MAX, &mStepSize);
@@ -1724,20 +1461,21 @@
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterStepSaturationCommand(endPointId, mStepMode, mStepSize, mTransitionTime, mOptionsMask,
-                                                              mOptionsOverride);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x05) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.StepSaturation(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mStepMode, mStepSize,
+                                      mTransitionTime, mOptionsMask, mOptionsOverride);
     }
 
 private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
     uint8_t mStepMode;
     uint8_t mStepSize;
     uint8_t mTransitionTime;
@@ -1751,49 +1489,53 @@
 class ColorControlStopMoveStep : public ModelCommand
 {
 public:
-    ColorControlStopMoveStep() : ModelCommand("stop-move-step", kColorControlClusterId, 0x47)
+    ColorControlStopMoveStep() : ModelCommand("stop-move-step")
     {
         AddArgument("optionsMask", 0, UINT8_MAX, &mOptionsMask);
         AddArgument("optionsOverride", 0, UINT8_MAX, &mOptionsOverride);
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterStopMoveStepCommand(endPointId, mOptionsMask, mOptionsOverride);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x47) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.StopMoveStep(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mOptionsMask, mOptionsOverride);
     }
 
 private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
     uint8_t mOptionsMask;
     uint8_t mOptionsOverride;
 };
 
 /*
- * Discover attributes
+ * Discover Attributes
  */
 class DiscoverColorControlAttributes : public ModelCommand
 {
 public:
-    DiscoverColorControlAttributes() : ModelCommand("discover", kColorControlClusterId, 0x0c) { ModelCommand::AddArguments(); }
+    DiscoverColorControlAttributes() : ModelCommand("discover") { ModelCommand::AddArguments(); }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterDiscoverAttributes(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0000) command (0x0C) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.DiscoverAttributes(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: DiscoverAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DiscoverAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
@@ -1802,29 +1544,32 @@
 class ReadColorControlCurrentHue : public ModelCommand
 {
 public:
-    ReadColorControlCurrentHue() : ModelCommand("read", kColorControlClusterId, 0x00)
+    ReadColorControlCurrentHue() : ModelCommand("read")
     {
         AddArgument("attr-name", "current-hue");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterReadCurrentHueAttribute(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeCurrentHue(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<Int8uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int8uAttributeCallback>(OnInt8uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 class ReportColorControlCurrentHue : public ModelCommand
 {
 public:
-    ReportColorControlCurrentHue() : ModelCommand("report", kColorControlClusterId, 0x06)
+    ReportColorControlCurrentHue() : ModelCommand("report")
     {
         AddArgument("attr-name", "current-hue");
         AddArgument("min-interval", 0, UINT16_MAX, &mMinInterval);
@@ -1833,19 +1578,30 @@
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterReportCurrentHueAttribute(endPointId, mMinInterval, mMaxInterval, mChange);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x06) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: ConfigureReportingResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ConfigureReportingResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+
+        CHIP_ERROR err = cluster.ReportAttributeCurrentHue(onReportCallback->Cancel());
+        if (err != CHIP_NO_ERROR)
+        {
+            return err;
+        }
+
+        return cluster.ConfigureAttributeCurrentHue(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mMinInterval,
+                                                    mMaxInterval, mChange);
     }
 
 private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    chip::Callback::Callback<Int8uAttributeCallback> * onReportCallback =
+        new chip::Callback::Callback<Int8uAttributeCallback>(OnInt8uAttributeResponse, this);
     uint16_t mMinInterval;
     uint16_t mMaxInterval;
     uint8_t mChange;
@@ -1857,29 +1613,32 @@
 class ReadColorControlCurrentSaturation : public ModelCommand
 {
 public:
-    ReadColorControlCurrentSaturation() : ModelCommand("read", kColorControlClusterId, 0x00)
+    ReadColorControlCurrentSaturation() : ModelCommand("read")
     {
         AddArgument("attr-name", "current-saturation");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterReadCurrentSaturationAttribute(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeCurrentSaturation(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<Int8uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int8uAttributeCallback>(OnInt8uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 class ReportColorControlCurrentSaturation : public ModelCommand
 {
 public:
-    ReportColorControlCurrentSaturation() : ModelCommand("report", kColorControlClusterId, 0x06)
+    ReportColorControlCurrentSaturation() : ModelCommand("report")
     {
         AddArgument("attr-name", "current-saturation");
         AddArgument("min-interval", 0, UINT16_MAX, &mMinInterval);
@@ -1888,19 +1647,30 @@
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterReportCurrentSaturationAttribute(endPointId, mMinInterval, mMaxInterval, mChange);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x06) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: ConfigureReportingResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ConfigureReportingResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+
+        CHIP_ERROR err = cluster.ReportAttributeCurrentSaturation(onReportCallback->Cancel());
+        if (err != CHIP_NO_ERROR)
+        {
+            return err;
+        }
+
+        return cluster.ConfigureAttributeCurrentSaturation(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mMinInterval,
+                                                           mMaxInterval, mChange);
     }
 
 private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    chip::Callback::Callback<Int8uAttributeCallback> * onReportCallback =
+        new chip::Callback::Callback<Int8uAttributeCallback>(OnInt8uAttributeResponse, this);
     uint16_t mMinInterval;
     uint16_t mMaxInterval;
     uint8_t mChange;
@@ -1912,23 +1682,26 @@
 class ReadColorControlRemainingTime : public ModelCommand
 {
 public:
-    ReadColorControlRemainingTime() : ModelCommand("read", kColorControlClusterId, 0x00)
+    ReadColorControlRemainingTime() : ModelCommand("read")
     {
         AddArgument("attr-name", "remaining-time");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterReadRemainingTimeAttribute(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeRemainingTime(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<Int16uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
@@ -1937,50 +1710,64 @@
 class ReadColorControlCurrentX : public ModelCommand
 {
 public:
-    ReadColorControlCurrentX() : ModelCommand("read", kColorControlClusterId, 0x00)
+    ReadColorControlCurrentX() : ModelCommand("read")
     {
-        AddArgument("attr-name", "currentx");
+        AddArgument("attr-name", "current-x");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterReadCurrentXAttribute(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeCurrentX(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<Int16uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 class ReportColorControlCurrentX : public ModelCommand
 {
 public:
-    ReportColorControlCurrentX() : ModelCommand("report", kColorControlClusterId, 0x06)
+    ReportColorControlCurrentX() : ModelCommand("report")
     {
-        AddArgument("attr-name", "currentx");
+        AddArgument("attr-name", "current-x");
         AddArgument("min-interval", 0, UINT16_MAX, &mMinInterval);
         AddArgument("max-interval", 0, UINT16_MAX, &mMaxInterval);
         AddArgument("change", 0, UINT16_MAX, &mChange);
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterReportCurrentXAttribute(endPointId, mMinInterval, mMaxInterval, mChange);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x06) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: ConfigureReportingResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ConfigureReportingResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+
+        CHIP_ERROR err = cluster.ReportAttributeCurrentX(onReportCallback->Cancel());
+        if (err != CHIP_NO_ERROR)
+        {
+            return err;
+        }
+
+        return cluster.ConfigureAttributeCurrentX(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mMinInterval,
+                                                  mMaxInterval, mChange);
     }
 
 private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    chip::Callback::Callback<Int16uAttributeCallback> * onReportCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
     uint16_t mMinInterval;
     uint16_t mMaxInterval;
     uint16_t mChange;
@@ -1992,105 +1779,189 @@
 class ReadColorControlCurrentY : public ModelCommand
 {
 public:
-    ReadColorControlCurrentY() : ModelCommand("read", kColorControlClusterId, 0x00)
+    ReadColorControlCurrentY() : ModelCommand("read")
     {
-        AddArgument("attr-name", "currenty");
+        AddArgument("attr-name", "current-y");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterReadCurrentYAttribute(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeCurrentY(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<Int16uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 class ReportColorControlCurrentY : public ModelCommand
 {
 public:
-    ReportColorControlCurrentY() : ModelCommand("report", kColorControlClusterId, 0x06)
+    ReportColorControlCurrentY() : ModelCommand("report")
     {
-        AddArgument("attr-name", "currenty");
+        AddArgument("attr-name", "current-y");
         AddArgument("min-interval", 0, UINT16_MAX, &mMinInterval);
         AddArgument("max-interval", 0, UINT16_MAX, &mMaxInterval);
         AddArgument("change", 0, UINT16_MAX, &mChange);
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterReportCurrentYAttribute(endPointId, mMinInterval, mMaxInterval, mChange);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x06) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: ConfigureReportingResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ConfigureReportingResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+
+        CHIP_ERROR err = cluster.ReportAttributeCurrentY(onReportCallback->Cancel());
+        if (err != CHIP_NO_ERROR)
+        {
+            return err;
+        }
+
+        return cluster.ConfigureAttributeCurrentY(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mMinInterval,
+                                                  mMaxInterval, mChange);
     }
 
 private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    chip::Callback::Callback<Int16uAttributeCallback> * onReportCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
     uint16_t mMinInterval;
     uint16_t mMaxInterval;
     uint16_t mChange;
 };
 
 /*
+ * Attribute DriftCompensation
+ */
+class ReadColorControlDriftCompensation : public ModelCommand
+{
+public:
+    ReadColorControlDriftCompensation() : ModelCommand("read")
+    {
+        AddArgument("attr-name", "drift-compensation");
+        ModelCommand::AddArguments();
+    }
+
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
+    {
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeDriftCompensation(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
+    }
+
+private:
+    chip::Callback::Callback<Int8uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int8uAttributeCallback>(OnInt8uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+};
+
+/*
+ * Attribute CompensationText
+ */
+class ReadColorControlCompensationText : public ModelCommand
+{
+public:
+    ReadColorControlCompensationText() : ModelCommand("read")
+    {
+        AddArgument("attr-name", "compensation-text");
+        ModelCommand::AddArguments();
+    }
+
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
+    {
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeCompensationText(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
+    }
+
+private:
+    chip::Callback::Callback<UnsupportedAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<UnsupportedAttributeCallback>(OnUnsupportedAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+};
+
+/*
  * Attribute ColorTemperature
  */
 class ReadColorControlColorTemperature : public ModelCommand
 {
 public:
-    ReadColorControlColorTemperature() : ModelCommand("read", kColorControlClusterId, 0x00)
+    ReadColorControlColorTemperature() : ModelCommand("read")
     {
-        AddArgument("attr-name", "color-temperature-mireds");
+        AddArgument("attr-name", "color-temperature");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterReadColorTemperatureAttribute(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeColorTemperature(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<Int16uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 class ReportColorControlColorTemperature : public ModelCommand
 {
 public:
-    ReportColorControlColorTemperature() : ModelCommand("report", kColorControlClusterId, 0x06)
+    ReportColorControlColorTemperature() : ModelCommand("report")
     {
-        AddArgument("attr-name", "color-temperature-mireds");
+        AddArgument("attr-name", "color-temperature");
         AddArgument("min-interval", 0, UINT16_MAX, &mMinInterval);
         AddArgument("max-interval", 0, UINT16_MAX, &mMaxInterval);
         AddArgument("change", 0, UINT16_MAX, &mChange);
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterReportColorTemperatureAttribute(endPointId, mMinInterval, mMaxInterval, mChange);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x06) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: ConfigureReportingResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ConfigureReportingResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+
+        CHIP_ERROR err = cluster.ReportAttributeColorTemperature(onReportCallback->Cancel());
+        if (err != CHIP_NO_ERROR)
+        {
+            return err;
+        }
+
+        return cluster.ConfigureAttributeColorTemperature(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mMinInterval,
+                                                          mMaxInterval, mChange);
     }
 
 private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    chip::Callback::Callback<Int16uAttributeCallback> * onReportCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
     uint16_t mMinInterval;
     uint16_t mMaxInterval;
     uint16_t mChange;
@@ -2102,23 +1973,81 @@
 class ReadColorControlColorMode : public ModelCommand
 {
 public:
-    ReadColorControlColorMode() : ModelCommand("read", kColorControlClusterId, 0x00)
+    ReadColorControlColorMode() : ModelCommand("read")
     {
         AddArgument("attr-name", "color-mode");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterReadColorModeAttribute(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeColorMode(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
+private:
+    chip::Callback::Callback<Int8uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int8uAttributeCallback>(OnInt8uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+};
+
+/*
+ * Attribute ColorControlOptions
+ */
+class ReadColorControlColorControlOptions : public ModelCommand
+{
+public:
+    ReadColorControlColorControlOptions() : ModelCommand("read")
     {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        AddArgument("attr-name", "color-control-options");
+        ModelCommand::AddArguments();
     }
+
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
+    {
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeColorControlOptions(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
+    }
+
+private:
+    chip::Callback::Callback<Int8uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int8uAttributeCallback>(OnInt8uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+};
+
+class WriteColorControlColorControlOptions : public ModelCommand
+{
+public:
+    WriteColorControlColorControlOptions() : ModelCommand("write")
+    {
+        AddArgument("attr-name", "color-control-options");
+        AddArgument("attr-value", 0, UINT8_MAX, &mValue);
+        ModelCommand::AddArguments();
+    }
+
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
+    {
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x01) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.WriteAttributeColorControlOptions(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mValue);
+    }
+
+private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    uint8_t mValue;
 };
 
 /*
@@ -2127,23 +2056,26 @@
 class ReadColorControlNumberOfPrimaries : public ModelCommand
 {
 public:
-    ReadColorControlNumberOfPrimaries() : ModelCommand("read", kColorControlClusterId, 0x00)
+    ReadColorControlNumberOfPrimaries() : ModelCommand("read")
     {
         AddArgument("attr-name", "number-of-primaries");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterReadNumberOfPrimariesAttribute(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeNumberOfPrimaries(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<Int8uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int8uAttributeCallback>(OnInt8uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
@@ -2152,23 +2084,26 @@
 class ReadColorControlPrimary1X : public ModelCommand
 {
 public:
-    ReadColorControlPrimary1X() : ModelCommand("read", kColorControlClusterId, 0x00)
+    ReadColorControlPrimary1X() : ModelCommand("read")
     {
-        AddArgument("attr-name", "primary1-x");
+        AddArgument("attr-name", "primary1x");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterReadPrimary1XAttribute(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributePrimary1X(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<Int16uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
@@ -2177,23 +2112,26 @@
 class ReadColorControlPrimary1Y : public ModelCommand
 {
 public:
-    ReadColorControlPrimary1Y() : ModelCommand("read", kColorControlClusterId, 0x00)
+    ReadColorControlPrimary1Y() : ModelCommand("read")
     {
-        AddArgument("attr-name", "primary1-y");
+        AddArgument("attr-name", "primary1y");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterReadPrimary1YAttribute(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributePrimary1Y(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<Int16uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
@@ -2202,23 +2140,26 @@
 class ReadColorControlPrimary1Intensity : public ModelCommand
 {
 public:
-    ReadColorControlPrimary1Intensity() : ModelCommand("read", kColorControlClusterId, 0x00)
+    ReadColorControlPrimary1Intensity() : ModelCommand("read")
     {
-        AddArgument("attr-name", "primary1-intensity");
+        AddArgument("attr-name", "primary1intensity");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterReadPrimary1IntensityAttribute(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributePrimary1Intensity(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<Int8uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int8uAttributeCallback>(OnInt8uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
@@ -2227,23 +2168,26 @@
 class ReadColorControlPrimary2X : public ModelCommand
 {
 public:
-    ReadColorControlPrimary2X() : ModelCommand("read", kColorControlClusterId, 0x00)
+    ReadColorControlPrimary2X() : ModelCommand("read")
     {
-        AddArgument("attr-name", "primary2-x");
+        AddArgument("attr-name", "primary2x");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterReadPrimary2XAttribute(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributePrimary2X(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<Int16uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
@@ -2252,23 +2196,26 @@
 class ReadColorControlPrimary2Y : public ModelCommand
 {
 public:
-    ReadColorControlPrimary2Y() : ModelCommand("read", kColorControlClusterId, 0x00)
+    ReadColorControlPrimary2Y() : ModelCommand("read")
     {
-        AddArgument("attr-name", "primary2-y");
+        AddArgument("attr-name", "primary2y");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterReadPrimary2YAttribute(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributePrimary2Y(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<Int16uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
@@ -2277,23 +2224,26 @@
 class ReadColorControlPrimary2Intensity : public ModelCommand
 {
 public:
-    ReadColorControlPrimary2Intensity() : ModelCommand("read", kColorControlClusterId, 0x00)
+    ReadColorControlPrimary2Intensity() : ModelCommand("read")
     {
-        AddArgument("attr-name", "primary2-intensity");
+        AddArgument("attr-name", "primary2intensity");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterReadPrimary2IntensityAttribute(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributePrimary2Intensity(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<Int8uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int8uAttributeCallback>(OnInt8uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
@@ -2302,23 +2252,26 @@
 class ReadColorControlPrimary3X : public ModelCommand
 {
 public:
-    ReadColorControlPrimary3X() : ModelCommand("read", kColorControlClusterId, 0x00)
+    ReadColorControlPrimary3X() : ModelCommand("read")
     {
-        AddArgument("attr-name", "primary3-x");
+        AddArgument("attr-name", "primary3x");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterReadPrimary3XAttribute(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributePrimary3X(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<Int16uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
@@ -2327,23 +2280,26 @@
 class ReadColorControlPrimary3Y : public ModelCommand
 {
 public:
-    ReadColorControlPrimary3Y() : ModelCommand("read", kColorControlClusterId, 0x00)
+    ReadColorControlPrimary3Y() : ModelCommand("read")
     {
-        AddArgument("attr-name", "primary3-y");
+        AddArgument("attr-name", "primary3y");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterReadPrimary3YAttribute(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributePrimary3Y(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<Int16uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
@@ -2352,23 +2308,26 @@
 class ReadColorControlPrimary3Intensity : public ModelCommand
 {
 public:
-    ReadColorControlPrimary3Intensity() : ModelCommand("read", kColorControlClusterId, 0x00)
+    ReadColorControlPrimary3Intensity() : ModelCommand("read")
     {
-        AddArgument("attr-name", "primary3-intensity");
+        AddArgument("attr-name", "primary3intensity");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterReadPrimary3IntensityAttribute(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributePrimary3Intensity(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<Int8uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int8uAttributeCallback>(OnInt8uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
@@ -2377,23 +2336,26 @@
 class ReadColorControlPrimary4X : public ModelCommand
 {
 public:
-    ReadColorControlPrimary4X() : ModelCommand("read", kColorControlClusterId, 0x00)
+    ReadColorControlPrimary4X() : ModelCommand("read")
     {
-        AddArgument("attr-name", "primary4-x");
+        AddArgument("attr-name", "primary4x");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterReadPrimary4XAttribute(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributePrimary4X(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<Int16uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
@@ -2402,23 +2364,26 @@
 class ReadColorControlPrimary4Y : public ModelCommand
 {
 public:
-    ReadColorControlPrimary4Y() : ModelCommand("read", kColorControlClusterId, 0x00)
+    ReadColorControlPrimary4Y() : ModelCommand("read")
     {
-        AddArgument("attr-name", "primary4-y");
+        AddArgument("attr-name", "primary4y");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterReadPrimary4YAttribute(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributePrimary4Y(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<Int16uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
@@ -2427,23 +2392,26 @@
 class ReadColorControlPrimary4Intensity : public ModelCommand
 {
 public:
-    ReadColorControlPrimary4Intensity() : ModelCommand("read", kColorControlClusterId, 0x00)
+    ReadColorControlPrimary4Intensity() : ModelCommand("read")
     {
-        AddArgument("attr-name", "primary4-intensity");
+        AddArgument("attr-name", "primary4intensity");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterReadPrimary4IntensityAttribute(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributePrimary4Intensity(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<Int8uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int8uAttributeCallback>(OnInt8uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
@@ -2452,23 +2420,26 @@
 class ReadColorControlPrimary5X : public ModelCommand
 {
 public:
-    ReadColorControlPrimary5X() : ModelCommand("read", kColorControlClusterId, 0x00)
+    ReadColorControlPrimary5X() : ModelCommand("read")
     {
-        AddArgument("attr-name", "primary5-x");
+        AddArgument("attr-name", "primary5x");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterReadPrimary5XAttribute(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributePrimary5X(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<Int16uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
@@ -2477,23 +2448,26 @@
 class ReadColorControlPrimary5Y : public ModelCommand
 {
 public:
-    ReadColorControlPrimary5Y() : ModelCommand("read", kColorControlClusterId, 0x00)
+    ReadColorControlPrimary5Y() : ModelCommand("read")
     {
-        AddArgument("attr-name", "primary5-y");
+        AddArgument("attr-name", "primary5y");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterReadPrimary5YAttribute(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributePrimary5Y(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<Int16uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
@@ -2502,23 +2476,26 @@
 class ReadColorControlPrimary5Intensity : public ModelCommand
 {
 public:
-    ReadColorControlPrimary5Intensity() : ModelCommand("read", kColorControlClusterId, 0x00)
+    ReadColorControlPrimary5Intensity() : ModelCommand("read")
     {
-        AddArgument("attr-name", "primary5-intensity");
+        AddArgument("attr-name", "primary5intensity");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterReadPrimary5IntensityAttribute(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributePrimary5Intensity(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<Int8uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int8uAttributeCallback>(OnInt8uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
@@ -2527,23 +2504,26 @@
 class ReadColorControlPrimary6X : public ModelCommand
 {
 public:
-    ReadColorControlPrimary6X() : ModelCommand("read", kColorControlClusterId, 0x00)
+    ReadColorControlPrimary6X() : ModelCommand("read")
     {
-        AddArgument("attr-name", "primary6-x");
+        AddArgument("attr-name", "primary6x");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterReadPrimary6XAttribute(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributePrimary6X(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<Int16uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
@@ -2552,23 +2532,26 @@
 class ReadColorControlPrimary6Y : public ModelCommand
 {
 public:
-    ReadColorControlPrimary6Y() : ModelCommand("read", kColorControlClusterId, 0x00)
+    ReadColorControlPrimary6Y() : ModelCommand("read")
     {
-        AddArgument("attr-name", "primary6-y");
+        AddArgument("attr-name", "primary6y");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterReadPrimary6YAttribute(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributePrimary6Y(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<Int16uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
@@ -2577,23 +2560,631 @@
 class ReadColorControlPrimary6Intensity : public ModelCommand
 {
 public:
-    ReadColorControlPrimary6Intensity() : ModelCommand("read", kColorControlClusterId, 0x00)
+    ReadColorControlPrimary6Intensity() : ModelCommand("read")
     {
-        AddArgument("attr-name", "primary6-intensity");
+        AddArgument("attr-name", "primary6intensity");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterReadPrimary6IntensityAttribute(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributePrimary6Intensity(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
+private:
+    chip::Callback::Callback<Int8uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int8uAttributeCallback>(OnInt8uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+};
+
+/*
+ * Attribute WhitePointX
+ */
+class ReadColorControlWhitePointX : public ModelCommand
+{
+public:
+    ReadColorControlWhitePointX() : ModelCommand("read")
     {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        AddArgument("attr-name", "white-point-x");
+        ModelCommand::AddArguments();
     }
+
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
+    {
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeWhitePointX(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
+    }
+
+private:
+    chip::Callback::Callback<Int16uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+};
+
+class WriteColorControlWhitePointX : public ModelCommand
+{
+public:
+    WriteColorControlWhitePointX() : ModelCommand("write")
+    {
+        AddArgument("attr-name", "white-point-x");
+        AddArgument("attr-value", 0, UINT16_MAX, &mValue);
+        ModelCommand::AddArguments();
+    }
+
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
+    {
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x01) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.WriteAttributeWhitePointX(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mValue);
+    }
+
+private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    uint16_t mValue;
+};
+
+/*
+ * Attribute WhitePointY
+ */
+class ReadColorControlWhitePointY : public ModelCommand
+{
+public:
+    ReadColorControlWhitePointY() : ModelCommand("read")
+    {
+        AddArgument("attr-name", "white-point-y");
+        ModelCommand::AddArguments();
+    }
+
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
+    {
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeWhitePointY(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
+    }
+
+private:
+    chip::Callback::Callback<Int16uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+};
+
+class WriteColorControlWhitePointY : public ModelCommand
+{
+public:
+    WriteColorControlWhitePointY() : ModelCommand("write")
+    {
+        AddArgument("attr-name", "white-point-y");
+        AddArgument("attr-value", 0, UINT16_MAX, &mValue);
+        ModelCommand::AddArguments();
+    }
+
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
+    {
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x01) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.WriteAttributeWhitePointY(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mValue);
+    }
+
+private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    uint16_t mValue;
+};
+
+/*
+ * Attribute ColorPointRX
+ */
+class ReadColorControlColorPointRX : public ModelCommand
+{
+public:
+    ReadColorControlColorPointRX() : ModelCommand("read")
+    {
+        AddArgument("attr-name", "color-point-rx");
+        ModelCommand::AddArguments();
+    }
+
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
+    {
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeColorPointRX(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
+    }
+
+private:
+    chip::Callback::Callback<Int16uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+};
+
+class WriteColorControlColorPointRX : public ModelCommand
+{
+public:
+    WriteColorControlColorPointRX() : ModelCommand("write")
+    {
+        AddArgument("attr-name", "color-point-rx");
+        AddArgument("attr-value", 0, UINT16_MAX, &mValue);
+        ModelCommand::AddArguments();
+    }
+
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
+    {
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x01) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.WriteAttributeColorPointRX(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mValue);
+    }
+
+private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    uint16_t mValue;
+};
+
+/*
+ * Attribute ColorPointRY
+ */
+class ReadColorControlColorPointRY : public ModelCommand
+{
+public:
+    ReadColorControlColorPointRY() : ModelCommand("read")
+    {
+        AddArgument("attr-name", "color-point-ry");
+        ModelCommand::AddArguments();
+    }
+
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
+    {
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeColorPointRY(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
+    }
+
+private:
+    chip::Callback::Callback<Int16uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+};
+
+class WriteColorControlColorPointRY : public ModelCommand
+{
+public:
+    WriteColorControlColorPointRY() : ModelCommand("write")
+    {
+        AddArgument("attr-name", "color-point-ry");
+        AddArgument("attr-value", 0, UINT16_MAX, &mValue);
+        ModelCommand::AddArguments();
+    }
+
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
+    {
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x01) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.WriteAttributeColorPointRY(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mValue);
+    }
+
+private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    uint16_t mValue;
+};
+
+/*
+ * Attribute ColorPointRIntensity
+ */
+class ReadColorControlColorPointRIntensity : public ModelCommand
+{
+public:
+    ReadColorControlColorPointRIntensity() : ModelCommand("read")
+    {
+        AddArgument("attr-name", "color-point-rintensity");
+        ModelCommand::AddArguments();
+    }
+
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
+    {
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeColorPointRIntensity(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
+    }
+
+private:
+    chip::Callback::Callback<Int8uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int8uAttributeCallback>(OnInt8uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+};
+
+class WriteColorControlColorPointRIntensity : public ModelCommand
+{
+public:
+    WriteColorControlColorPointRIntensity() : ModelCommand("write")
+    {
+        AddArgument("attr-name", "color-point-rintensity");
+        AddArgument("attr-value", 0, UINT8_MAX, &mValue);
+        ModelCommand::AddArguments();
+    }
+
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
+    {
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x01) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.WriteAttributeColorPointRIntensity(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mValue);
+    }
+
+private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    uint8_t mValue;
+};
+
+/*
+ * Attribute ColorPointGX
+ */
+class ReadColorControlColorPointGX : public ModelCommand
+{
+public:
+    ReadColorControlColorPointGX() : ModelCommand("read")
+    {
+        AddArgument("attr-name", "color-point-gx");
+        ModelCommand::AddArguments();
+    }
+
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
+    {
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeColorPointGX(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
+    }
+
+private:
+    chip::Callback::Callback<Int16uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+};
+
+class WriteColorControlColorPointGX : public ModelCommand
+{
+public:
+    WriteColorControlColorPointGX() : ModelCommand("write")
+    {
+        AddArgument("attr-name", "color-point-gx");
+        AddArgument("attr-value", 0, UINT16_MAX, &mValue);
+        ModelCommand::AddArguments();
+    }
+
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
+    {
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x01) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.WriteAttributeColorPointGX(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mValue);
+    }
+
+private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    uint16_t mValue;
+};
+
+/*
+ * Attribute ColorPointGY
+ */
+class ReadColorControlColorPointGY : public ModelCommand
+{
+public:
+    ReadColorControlColorPointGY() : ModelCommand("read")
+    {
+        AddArgument("attr-name", "color-point-gy");
+        ModelCommand::AddArguments();
+    }
+
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
+    {
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeColorPointGY(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
+    }
+
+private:
+    chip::Callback::Callback<Int16uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+};
+
+class WriteColorControlColorPointGY : public ModelCommand
+{
+public:
+    WriteColorControlColorPointGY() : ModelCommand("write")
+    {
+        AddArgument("attr-name", "color-point-gy");
+        AddArgument("attr-value", 0, UINT16_MAX, &mValue);
+        ModelCommand::AddArguments();
+    }
+
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
+    {
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x01) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.WriteAttributeColorPointGY(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mValue);
+    }
+
+private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    uint16_t mValue;
+};
+
+/*
+ * Attribute ColorPointGIntensity
+ */
+class ReadColorControlColorPointGIntensity : public ModelCommand
+{
+public:
+    ReadColorControlColorPointGIntensity() : ModelCommand("read")
+    {
+        AddArgument("attr-name", "color-point-gintensity");
+        ModelCommand::AddArguments();
+    }
+
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
+    {
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeColorPointGIntensity(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
+    }
+
+private:
+    chip::Callback::Callback<Int8uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int8uAttributeCallback>(OnInt8uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+};
+
+class WriteColorControlColorPointGIntensity : public ModelCommand
+{
+public:
+    WriteColorControlColorPointGIntensity() : ModelCommand("write")
+    {
+        AddArgument("attr-name", "color-point-gintensity");
+        AddArgument("attr-value", 0, UINT8_MAX, &mValue);
+        ModelCommand::AddArguments();
+    }
+
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
+    {
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x01) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.WriteAttributeColorPointGIntensity(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mValue);
+    }
+
+private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    uint8_t mValue;
+};
+
+/*
+ * Attribute ColorPointBX
+ */
+class ReadColorControlColorPointBX : public ModelCommand
+{
+public:
+    ReadColorControlColorPointBX() : ModelCommand("read")
+    {
+        AddArgument("attr-name", "color-point-bx");
+        ModelCommand::AddArguments();
+    }
+
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
+    {
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeColorPointBX(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
+    }
+
+private:
+    chip::Callback::Callback<Int16uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+};
+
+class WriteColorControlColorPointBX : public ModelCommand
+{
+public:
+    WriteColorControlColorPointBX() : ModelCommand("write")
+    {
+        AddArgument("attr-name", "color-point-bx");
+        AddArgument("attr-value", 0, UINT16_MAX, &mValue);
+        ModelCommand::AddArguments();
+    }
+
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
+    {
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x01) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.WriteAttributeColorPointBX(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mValue);
+    }
+
+private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    uint16_t mValue;
+};
+
+/*
+ * Attribute ColorPointBY
+ */
+class ReadColorControlColorPointBY : public ModelCommand
+{
+public:
+    ReadColorControlColorPointBY() : ModelCommand("read")
+    {
+        AddArgument("attr-name", "color-point-by");
+        ModelCommand::AddArguments();
+    }
+
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
+    {
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeColorPointBY(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
+    }
+
+private:
+    chip::Callback::Callback<Int16uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+};
+
+class WriteColorControlColorPointBY : public ModelCommand
+{
+public:
+    WriteColorControlColorPointBY() : ModelCommand("write")
+    {
+        AddArgument("attr-name", "color-point-by");
+        AddArgument("attr-value", 0, UINT16_MAX, &mValue);
+        ModelCommand::AddArguments();
+    }
+
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
+    {
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x01) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.WriteAttributeColorPointBY(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mValue);
+    }
+
+private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    uint16_t mValue;
+};
+
+/*
+ * Attribute ColorPointBIntensity
+ */
+class ReadColorControlColorPointBIntensity : public ModelCommand
+{
+public:
+    ReadColorControlColorPointBIntensity() : ModelCommand("read")
+    {
+        AddArgument("attr-name", "color-point-bintensity");
+        ModelCommand::AddArguments();
+    }
+
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
+    {
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeColorPointBIntensity(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
+    }
+
+private:
+    chip::Callback::Callback<Int8uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int8uAttributeCallback>(OnInt8uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+};
+
+class WriteColorControlColorPointBIntensity : public ModelCommand
+{
+public:
+    WriteColorControlColorPointBIntensity() : ModelCommand("write")
+    {
+        AddArgument("attr-name", "color-point-bintensity");
+        AddArgument("attr-value", 0, UINT8_MAX, &mValue);
+        ModelCommand::AddArguments();
+    }
+
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
+    {
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x01) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.WriteAttributeColorPointBIntensity(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mValue);
+    }
+
+private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    uint8_t mValue;
 };
 
 /*
@@ -2602,23 +3193,26 @@
 class ReadColorControlEnhancedCurrentHue : public ModelCommand
 {
 public:
-    ReadColorControlEnhancedCurrentHue() : ModelCommand("read", kColorControlClusterId, 0x00)
+    ReadColorControlEnhancedCurrentHue() : ModelCommand("read")
     {
         AddArgument("attr-name", "enhanced-current-hue");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterReadEnhancedCurrentHueAttribute(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeEnhancedCurrentHue(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<Int16uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
@@ -2627,23 +3221,26 @@
 class ReadColorControlEnhancedColorMode : public ModelCommand
 {
 public:
-    ReadColorControlEnhancedColorMode() : ModelCommand("read", kColorControlClusterId, 0x00)
+    ReadColorControlEnhancedColorMode() : ModelCommand("read")
     {
         AddArgument("attr-name", "enhanced-color-mode");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterReadEnhancedColorModeAttribute(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeEnhancedColorMode(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<Int8uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int8uAttributeCallback>(OnInt8uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
@@ -2652,23 +3249,26 @@
 class ReadColorControlColorLoopActive : public ModelCommand
 {
 public:
-    ReadColorControlColorLoopActive() : ModelCommand("read", kColorControlClusterId, 0x00)
+    ReadColorControlColorLoopActive() : ModelCommand("read")
     {
         AddArgument("attr-name", "color-loop-active");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterReadColorLoopActiveAttribute(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeColorLoopActive(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<Int8uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int8uAttributeCallback>(OnInt8uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
@@ -2677,23 +3277,26 @@
 class ReadColorControlColorLoopDirection : public ModelCommand
 {
 public:
-    ReadColorControlColorLoopDirection() : ModelCommand("read", kColorControlClusterId, 0x00)
+    ReadColorControlColorLoopDirection() : ModelCommand("read")
     {
         AddArgument("attr-name", "color-loop-direction");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterReadColorLoopDirectionAttribute(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeColorLoopDirection(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<Int8uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int8uAttributeCallback>(OnInt8uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
@@ -2702,23 +3305,26 @@
 class ReadColorControlColorLoopTime : public ModelCommand
 {
 public:
-    ReadColorControlColorLoopTime() : ModelCommand("read", kColorControlClusterId, 0x00)
+    ReadColorControlColorLoopTime() : ModelCommand("read")
     {
         AddArgument("attr-name", "color-loop-time");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterReadColorLoopTimeAttribute(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeColorLoopTime(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<Int16uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
@@ -2727,23 +3333,26 @@
 class ReadColorControlColorCapabilities : public ModelCommand
 {
 public:
-    ReadColorControlColorCapabilities() : ModelCommand("read", kColorControlClusterId, 0x00)
+    ReadColorControlColorCapabilities() : ModelCommand("read")
     {
         AddArgument("attr-name", "color-capabilities");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterReadColorCapabilitiesAttribute(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeColorCapabilities(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<Int16uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
@@ -2752,23 +3361,26 @@
 class ReadColorControlColorTempPhysicalMin : public ModelCommand
 {
 public:
-    ReadColorControlColorTempPhysicalMin() : ModelCommand("read", kColorControlClusterId, 0x00)
+    ReadColorControlColorTempPhysicalMin() : ModelCommand("read")
     {
         AddArgument("attr-name", "color-temp-physical-min");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterReadColorTempPhysicalMinAttribute(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeColorTempPhysicalMin(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<Int16uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
@@ -2777,23 +3389,26 @@
 class ReadColorControlColorTempPhysicalMax : public ModelCommand
 {
 public:
-    ReadColorControlColorTempPhysicalMax() : ModelCommand("read", kColorControlClusterId, 0x00)
+    ReadColorControlColorTempPhysicalMax() : ModelCommand("read")
     {
         AddArgument("attr-name", "color-temp-physical-max");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterReadColorTempPhysicalMaxAttribute(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeColorTempPhysicalMax(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<Int16uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
@@ -2802,23 +3417,26 @@
 class ReadColorControlCoupleColorTempToLevelMinMireds : public ModelCommand
 {
 public:
-    ReadColorControlCoupleColorTempToLevelMinMireds() : ModelCommand("read", kColorControlClusterId, 0x00)
+    ReadColorControlCoupleColorTempToLevelMinMireds() : ModelCommand("read")
     {
         AddArgument("attr-name", "couple-color-temp-to-level-min-mireds");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterReadCoupleColorTempToLevelMinMiredsAttribute(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeCoupleColorTempToLevelMinMireds(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<Int16uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
@@ -2827,53 +3445,87 @@
 class ReadColorControlStartUpColorTemperatureMireds : public ModelCommand
 {
 public:
-    ReadColorControlStartUpColorTemperatureMireds() : ModelCommand("read", kColorControlClusterId, 0x00)
+    ReadColorControlStartUpColorTemperatureMireds() : ModelCommand("read")
     {
         AddArgument("attr-name", "start-up-color-temperature-mireds");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeColorControlClusterReadStartUpColorTemperatureMiredsAttribute(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeStartUpColorTemperatureMireds(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
+private:
+    chip::Callback::Callback<Int16uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+};
+
+class WriteColorControlStartUpColorTemperatureMireds : public ModelCommand
+{
+public:
+    WriteColorControlStartUpColorTemperatureMireds() : ModelCommand("write")
     {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        AddArgument("attr-name", "start-up-color-temperature-mireds");
+        AddArgument("attr-value", 0, UINT16_MAX, &mValue);
+        ModelCommand::AddArguments();
     }
+
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
+    {
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x01) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.WriteAttributeStartUpColorTemperatureMireds(onSuccessCallback->Cancel(), onFailureCallback->Cancel(),
+                                                                   mValue);
+    }
+
+private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    uint16_t mValue;
+};
+
+/*
+ * Attribute ClusterRevision
+ */
+class ReadColorControlClusterRevision : public ModelCommand
+{
+public:
+    ReadColorControlClusterRevision() : ModelCommand("read")
+    {
+        AddArgument("attr-name", "cluster-revision");
+        ModelCommand::AddArguments();
+    }
+
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
+    {
+        ChipLogProgress(chipTool, "Sending cluster (0x0300) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ColorControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeClusterRevision(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
+    }
+
+private:
+    chip::Callback::Callback<Int16uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*----------------------------------------------------------------------------*\
 | Cluster DoorLock                                                    | 0x0101 |
 |------------------------------------------------------------------------------|
-| Responses:                                                          |        |
-| * ClearAllPinsResponse                                              |   0x08 |
-| * ClearAllRfidsResponse                                             |   0x19 |
-| * ClearHolidayScheduleResponse                                      |   0x13 |
-| * ClearPinResponse                                                  |   0x07 |
-| * ClearRfidResponse                                                 |   0x18 |
-| * ClearWeekdayScheduleResponse                                      |   0x0D |
-| * ClearYeardayScheduleResponse                                      |   0x10 |
-| * GetHolidayScheduleResponse                                        |   0x12 |
-| * GetPinResponse                                                    |   0x06 |
-| * GetRfidResponse                                                   |   0x17 |
-| * GetUserTypeResponse                                               |   0x15 |
-| * GetWeekdayScheduleResponse                                        |   0x0C |
-| * GetYeardayScheduleResponse                                        |   0x0F |
-| * LockDoorResponse                                                  |   0x00 |
-| * SetHolidayScheduleResponse                                        |   0x11 |
-| * SetPinResponse                                                    |   0x05 |
-| * SetRfidResponse                                                   |   0x16 |
-| * SetUserTypeResponse                                               |   0x14 |
-| * SetWeekdayScheduleResponse                                        |   0x0B |
-| * SetYeardayScheduleResponse                                        |   0x0E |
-| * UnlockDoorResponse                                                |   0x01 |
-| * UnlockWithTimeoutResponse                                         |   0x03 |
-|                                                                     |        |
-|------------------------------------------------------------------------------|
 | Commands:                                                           |        |
 | * ClearAllPins                                                      |   0x08 |
 | * ClearAllRfids                                                     |   0x19 |
@@ -2883,6 +3535,7 @@
 | * ClearWeekdaySchedule                                              |   0x0D |
 | * ClearYeardaySchedule                                              |   0x10 |
 | * GetHolidaySchedule                                                |   0x12 |
+| * GetLogRecord                                                      |   0x04 |
 | * GetPin                                                            |   0x06 |
 | * GetRfid                                                           |   0x17 |
 | * GetUserType                                                       |   0x15 |
@@ -2902,625 +3555,31 @@
 | * LockState                                                         | 0x0000 |
 | * LockType                                                          | 0x0001 |
 | * ActuatorEnabled                                                   | 0x0002 |
+| * ClusterRevision                                                   | 0xFFFD |
 \*----------------------------------------------------------------------------*/
 
 /*
- * Command Response ClearAllPinsResponse
- */
-class ClearAllPinsResponse : public ModelCommandResponse
-{
-public:
-    ClearAllPinsResponse() : ModelCommandResponse(0x08) {}
-
-    bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
-    {
-        bool success = true;
-        ChipLogProgress(chipTool, "ClearAllPinsResponse (0x08):");
-
-        CHECK_MESSAGE_LENGTH(1);
-        uint8_t status = chip::Encoding::Read8(message); // DrlkPassFailStatus
-        ChipLogProgress(chipTool, "  %s: 0x%02x", "status", status);
-
-        return success;
-    }
-};
-
-/*
- * Command Response ClearAllRfidsResponse
- */
-class ClearAllRfidsResponse : public ModelCommandResponse
-{
-public:
-    ClearAllRfidsResponse() : ModelCommandResponse(0x19) {}
-
-    bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
-    {
-        bool success = true;
-        ChipLogProgress(chipTool, "ClearAllRfidsResponse (0x19):");
-
-        CHECK_MESSAGE_LENGTH(1);
-        uint8_t status = chip::Encoding::Read8(message); // DrlkPassFailStatus
-        ChipLogProgress(chipTool, "  %s: 0x%02x", "status", status);
-
-        return success;
-    }
-};
-
-/*
- * Command Response ClearHolidayScheduleResponse
- */
-class ClearHolidayScheduleResponse : public ModelCommandResponse
-{
-public:
-    ClearHolidayScheduleResponse() : ModelCommandResponse(0x13) {}
-
-    bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
-    {
-        bool success = true;
-        ChipLogProgress(chipTool, "ClearHolidayScheduleResponse (0x13):");
-
-        CHECK_MESSAGE_LENGTH(1);
-        uint8_t status = chip::Encoding::Read8(message); // DrlkPassFailStatus
-        ChipLogProgress(chipTool, "  %s: 0x%02x", "status", status);
-
-        return success;
-    }
-};
-
-/*
- * Command Response ClearPinResponse
- */
-class ClearPinResponse : public ModelCommandResponse
-{
-public:
-    ClearPinResponse() : ModelCommandResponse(0x07) {}
-
-    bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
-    {
-        bool success = true;
-        ChipLogProgress(chipTool, "ClearPinResponse (0x07):");
-
-        CHECK_MESSAGE_LENGTH(1);
-        uint8_t status = chip::Encoding::Read8(message); // DrlkPassFailStatus
-        ChipLogProgress(chipTool, "  %s: 0x%02x", "status", status);
-
-        return success;
-    }
-};
-
-/*
- * Command Response ClearRfidResponse
- */
-class ClearRfidResponse : public ModelCommandResponse
-{
-public:
-    ClearRfidResponse() : ModelCommandResponse(0x18) {}
-
-    bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
-    {
-        bool success = true;
-        ChipLogProgress(chipTool, "ClearRfidResponse (0x18):");
-
-        CHECK_MESSAGE_LENGTH(1);
-        uint8_t status = chip::Encoding::Read8(message); // DrlkPassFailStatus
-        ChipLogProgress(chipTool, "  %s: 0x%02x", "status", status);
-
-        return success;
-    }
-};
-
-/*
- * Command Response ClearWeekdayScheduleResponse
- */
-class ClearWeekdayScheduleResponse : public ModelCommandResponse
-{
-public:
-    ClearWeekdayScheduleResponse() : ModelCommandResponse(0x0D) {}
-
-    bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
-    {
-        bool success = true;
-        ChipLogProgress(chipTool, "ClearWeekdayScheduleResponse (0x0D):");
-
-        CHECK_MESSAGE_LENGTH(1);
-        uint8_t status = chip::Encoding::Read8(message); // DrlkPassFailStatus
-        ChipLogProgress(chipTool, "  %s: 0x%02x", "status", status);
-
-        return success;
-    }
-};
-
-/*
- * Command Response ClearYeardayScheduleResponse
- */
-class ClearYeardayScheduleResponse : public ModelCommandResponse
-{
-public:
-    ClearYeardayScheduleResponse() : ModelCommandResponse(0x10) {}
-
-    bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
-    {
-        bool success = true;
-        ChipLogProgress(chipTool, "ClearYeardayScheduleResponse (0x10):");
-
-        CHECK_MESSAGE_LENGTH(1);
-        uint8_t status = chip::Encoding::Read8(message); // DrlkPassFailStatus
-        ChipLogProgress(chipTool, "  %s: 0x%02x", "status", status);
-
-        return success;
-    }
-};
-
-/*
- * Command Response GetHolidayScheduleResponse
- */
-class GetHolidayScheduleResponse : public ModelCommandResponse
-{
-public:
-    GetHolidayScheduleResponse() : ModelCommandResponse(0x12) {}
-
-    bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
-    {
-        bool success = true;
-        ChipLogProgress(chipTool, "GetHolidayScheduleResponse (0x12):");
-
-        CHECK_MESSAGE_LENGTH(1);
-        uint8_t holidayScheduleId = chip::Encoding::Read8(message); // uint8
-        ChipLogProgress(chipTool, "  %s: 0x%02x", "holidayScheduleId", holidayScheduleId);
-
-        CHECK_MESSAGE_LENGTH(1);
-        uint8_t status = chip::Encoding::Read8(message); // zclStatus
-        success        = CheckStatus(status);
-
-        if (status == 0)
-        {
-            CHECK_MESSAGE_LENGTH(4);
-            uint32_t localStartTime = chip::Encoding::LittleEndian::Read32(message); // uint32
-            ChipLogProgress(chipTool, "  %s: 0x%08x", "localStartTime", localStartTime);
-        }
-
-        if (status == 0)
-        {
-            CHECK_MESSAGE_LENGTH(4);
-            uint32_t localEndTime = chip::Encoding::LittleEndian::Read32(message); // uint32
-            ChipLogProgress(chipTool, "  %s: 0x%08x", "localEndTime", localEndTime);
-        }
-
-        if (status == 0)
-        {
-            CHECK_MESSAGE_LENGTH(1);
-            uint8_t operatingModeDuringHoliday = chip::Encoding::Read8(message); // DrlkOperMode
-            ChipLogProgress(chipTool, "  %s: 0x%02x", "operatingModeDuringHoliday", operatingModeDuringHoliday);
-        }
-
-        return success;
-    }
-};
-
-/*
- * Command Response GetPinResponse
- */
-class GetPinResponse : public ModelCommandResponse
-{
-public:
-    GetPinResponse() : ModelCommandResponse(0x06) {}
-
-    bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
-    {
-        bool success = true;
-        ChipLogProgress(chipTool, "GetPinResponse (0x06):");
-
-        CHECK_MESSAGE_LENGTH(2);
-        uint16_t userId = chip::Encoding::LittleEndian::Read16(message); // uint16
-        ChipLogProgress(chipTool, "  %s: 0x%04x", "userId", userId);
-
-        CHECK_MESSAGE_LENGTH(1);
-        uint8_t userStatus = chip::Encoding::Read8(message); // DrlkUserStatus
-        ChipLogProgress(chipTool, "  %s: 0x%02x", "userStatus", userStatus);
-
-        CHECK_MESSAGE_LENGTH(1);
-        uint8_t userType = chip::Encoding::Read8(message); // DrlkUserType
-        ChipLogProgress(chipTool, "  %s: 0x%02x", "userType", userType);
-
-        CHECK_MESSAGE_LENGTH(1);
-        {
-            uint8_t codeLen = chip::Encoding::Read8(message);              // octstr
-            ChipLogProgress(chipTool, "  %s: 0x%02x", "codeLen", codeLen); // octstr
-
-            // FIXME Strings are not supported yet. For the moment the code just checks that
-            // there is enough bytes in the buffer
-            CHECK_MESSAGE_LENGTH(codeLen);
-            message += codeLen;
-        }
-
-        return success;
-    }
-};
-
-/*
- * Command Response GetRfidResponse
- */
-class GetRfidResponse : public ModelCommandResponse
-{
-public:
-    GetRfidResponse() : ModelCommandResponse(0x17) {}
-
-    bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
-    {
-        bool success = true;
-        ChipLogProgress(chipTool, "GetRfidResponse (0x17):");
-
-        CHECK_MESSAGE_LENGTH(2);
-        uint16_t userId = chip::Encoding::LittleEndian::Read16(message); // uint16
-        ChipLogProgress(chipTool, "  %s: 0x%04x", "userId", userId);
-
-        CHECK_MESSAGE_LENGTH(1);
-        uint8_t userStatus = chip::Encoding::Read8(message); // DrlkUserStatus
-        ChipLogProgress(chipTool, "  %s: 0x%02x", "userStatus", userStatus);
-
-        CHECK_MESSAGE_LENGTH(1);
-        uint8_t userType = chip::Encoding::Read8(message); // DrlkUserType
-        ChipLogProgress(chipTool, "  %s: 0x%02x", "userType", userType);
-
-        CHECK_MESSAGE_LENGTH(1);
-        {
-            uint8_t rFIdCodeLen = chip::Encoding::Read8(message);                  // octstr
-            ChipLogProgress(chipTool, "  %s: 0x%02x", "rFIdCodeLen", rFIdCodeLen); // octstr
-
-            // FIXME Strings are not supported yet. For the moment the code just checks that
-            // there is enough bytes in the buffer
-            CHECK_MESSAGE_LENGTH(rFIdCodeLen);
-            message += rFIdCodeLen;
-        }
-
-        return success;
-    }
-};
-
-/*
- * Command Response GetUserTypeResponse
- */
-class GetUserTypeResponse : public ModelCommandResponse
-{
-public:
-    GetUserTypeResponse() : ModelCommandResponse(0x15) {}
-
-    bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
-    {
-        bool success = true;
-        ChipLogProgress(chipTool, "GetUserTypeResponse (0x15):");
-
-        CHECK_MESSAGE_LENGTH(2);
-        uint16_t userId = chip::Encoding::LittleEndian::Read16(message); // uint16
-        ChipLogProgress(chipTool, "  %s: 0x%04x", "userId", userId);
-
-        CHECK_MESSAGE_LENGTH(1);
-        uint8_t userType = chip::Encoding::Read8(message); // DrlkUserType
-        ChipLogProgress(chipTool, "  %s: 0x%02x", "userType", userType);
-
-        return success;
-    }
-};
-
-/*
- * Command Response GetWeekdayScheduleResponse
- */
-class GetWeekdayScheduleResponse : public ModelCommandResponse
-{
-public:
-    GetWeekdayScheduleResponse() : ModelCommandResponse(0x0C) {}
-
-    bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
-    {
-        bool success = true;
-        ChipLogProgress(chipTool, "GetWeekdayScheduleResponse (0x0C):");
-
-        CHECK_MESSAGE_LENGTH(1);
-        uint8_t scheduleId = chip::Encoding::Read8(message); // uint8
-        ChipLogProgress(chipTool, "  %s: 0x%02x", "scheduleId", scheduleId);
-
-        CHECK_MESSAGE_LENGTH(2);
-        uint16_t userId = chip::Encoding::LittleEndian::Read16(message); // uint16
-        ChipLogProgress(chipTool, "  %s: 0x%04x", "userId", userId);
-
-        CHECK_MESSAGE_LENGTH(1);
-        uint8_t status = chip::Encoding::Read8(message); // zclStatus
-        success        = CheckStatus(status);
-
-        if (status == 0)
-        {
-            CHECK_MESSAGE_LENGTH(1);
-            uint8_t daysMask = chip::Encoding::Read8(message); // DrlkDaysMask
-            ChipLogProgress(chipTool, "  %s: 0x%02x", "daysMask", daysMask);
-        }
-
-        if (status == 0)
-        {
-            CHECK_MESSAGE_LENGTH(1);
-            uint8_t startHour = chip::Encoding::Read8(message); // uint8
-            ChipLogProgress(chipTool, "  %s: 0x%02x", "startHour", startHour);
-        }
-
-        if (status == 0)
-        {
-            CHECK_MESSAGE_LENGTH(1);
-            uint8_t startMinute = chip::Encoding::Read8(message); // uint8
-            ChipLogProgress(chipTool, "  %s: 0x%02x", "startMinute", startMinute);
-        }
-
-        if (status == 0)
-        {
-            CHECK_MESSAGE_LENGTH(1);
-            uint8_t endHour = chip::Encoding::Read8(message); // uint8
-            ChipLogProgress(chipTool, "  %s: 0x%02x", "endHour", endHour);
-        }
-
-        if (status == 0)
-        {
-            CHECK_MESSAGE_LENGTH(1);
-            uint8_t endMinute = chip::Encoding::Read8(message); // uint8
-            ChipLogProgress(chipTool, "  %s: 0x%02x", "endMinute", endMinute);
-        }
-
-        return success;
-    }
-};
-
-/*
- * Command Response GetYeardayScheduleResponse
- */
-class GetYeardayScheduleResponse : public ModelCommandResponse
-{
-public:
-    GetYeardayScheduleResponse() : ModelCommandResponse(0x0F) {}
-
-    bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
-    {
-        bool success = true;
-        ChipLogProgress(chipTool, "GetYeardayScheduleResponse (0x0F):");
-
-        CHECK_MESSAGE_LENGTH(1);
-        uint8_t scheduleId = chip::Encoding::Read8(message); // uint8
-        ChipLogProgress(chipTool, "  %s: 0x%02x", "scheduleId", scheduleId);
-
-        CHECK_MESSAGE_LENGTH(2);
-        uint16_t userId = chip::Encoding::LittleEndian::Read16(message); // uint16
-        ChipLogProgress(chipTool, "  %s: 0x%04x", "userId", userId);
-
-        CHECK_MESSAGE_LENGTH(1);
-        uint8_t status = chip::Encoding::Read8(message); // zclStatus
-        success        = CheckStatus(status);
-
-        if (status == 0)
-        {
-            CHECK_MESSAGE_LENGTH(4);
-            uint32_t localStartTime = chip::Encoding::LittleEndian::Read32(message); // uint32
-            ChipLogProgress(chipTool, "  %s: 0x%08x", "localStartTime", localStartTime);
-        }
-
-        if (status == 0)
-        {
-            CHECK_MESSAGE_LENGTH(4);
-            uint32_t localEndTime = chip::Encoding::LittleEndian::Read32(message); // uint32
-            ChipLogProgress(chipTool, "  %s: 0x%08x", "localEndTime", localEndTime);
-        }
-
-        return success;
-    }
-};
-
-/*
- * Command Response LockDoorResponse
- */
-class LockDoorResponse : public ModelCommandResponse
-{
-public:
-    LockDoorResponse() : ModelCommandResponse(0x00) {}
-
-    bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
-    {
-        bool success = true;
-        ChipLogProgress(chipTool, "LockDoorResponse (0x00):");
-
-        CHECK_MESSAGE_LENGTH(1);
-        uint8_t status = chip::Encoding::Read8(message); // zclStatus
-        success        = CheckStatus(status);
-
-        return success;
-    }
-};
-
-/*
- * Command Response SetHolidayScheduleResponse
- */
-class SetHolidayScheduleResponse : public ModelCommandResponse
-{
-public:
-    SetHolidayScheduleResponse() : ModelCommandResponse(0x11) {}
-
-    bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
-    {
-        bool success = true;
-        ChipLogProgress(chipTool, "SetHolidayScheduleResponse (0x11):");
-
-        CHECK_MESSAGE_LENGTH(1);
-        uint8_t status = chip::Encoding::Read8(message); // DrlkPassFailStatus
-        ChipLogProgress(chipTool, "  %s: 0x%02x", "status", status);
-
-        return success;
-    }
-};
-
-/*
- * Command Response SetPinResponse
- */
-class SetPinResponse : public ModelCommandResponse
-{
-public:
-    SetPinResponse() : ModelCommandResponse(0x05) {}
-
-    bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
-    {
-        bool success = true;
-        ChipLogProgress(chipTool, "SetPinResponse (0x05):");
-
-        CHECK_MESSAGE_LENGTH(1);
-        uint8_t status = chip::Encoding::Read8(message); // DrlkSetCodeStatus
-        ChipLogProgress(chipTool, "  %s: 0x%02x", "status", status);
-
-        return success;
-    }
-};
-
-/*
- * Command Response SetRfidResponse
- */
-class SetRfidResponse : public ModelCommandResponse
-{
-public:
-    SetRfidResponse() : ModelCommandResponse(0x16) {}
-
-    bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
-    {
-        bool success = true;
-        ChipLogProgress(chipTool, "SetRfidResponse (0x16):");
-
-        CHECK_MESSAGE_LENGTH(1);
-        uint8_t status = chip::Encoding::Read8(message); // DrlkSetCodeStatus
-        ChipLogProgress(chipTool, "  %s: 0x%02x", "status", status);
-
-        return success;
-    }
-};
-
-/*
- * Command Response SetUserTypeResponse
- */
-class SetUserTypeResponse : public ModelCommandResponse
-{
-public:
-    SetUserTypeResponse() : ModelCommandResponse(0x14) {}
-
-    bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
-    {
-        bool success = true;
-        ChipLogProgress(chipTool, "SetUserTypeResponse (0x14):");
-
-        CHECK_MESSAGE_LENGTH(1);
-        uint8_t status = chip::Encoding::Read8(message); // DrlkPassFailStatus
-        ChipLogProgress(chipTool, "  %s: 0x%02x", "status", status);
-
-        return success;
-    }
-};
-
-/*
- * Command Response SetWeekdayScheduleResponse
- */
-class SetWeekdayScheduleResponse : public ModelCommandResponse
-{
-public:
-    SetWeekdayScheduleResponse() : ModelCommandResponse(0x0B) {}
-
-    bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
-    {
-        bool success = true;
-        ChipLogProgress(chipTool, "SetWeekdayScheduleResponse (0x0B):");
-
-        CHECK_MESSAGE_LENGTH(1);
-        uint8_t status = chip::Encoding::Read8(message); // DrlkPassFailStatus
-        ChipLogProgress(chipTool, "  %s: 0x%02x", "status", status);
-
-        return success;
-    }
-};
-
-/*
- * Command Response SetYeardayScheduleResponse
- */
-class SetYeardayScheduleResponse : public ModelCommandResponse
-{
-public:
-    SetYeardayScheduleResponse() : ModelCommandResponse(0x0E) {}
-
-    bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
-    {
-        bool success = true;
-        ChipLogProgress(chipTool, "SetYeardayScheduleResponse (0x0E):");
-
-        CHECK_MESSAGE_LENGTH(1);
-        uint8_t status = chip::Encoding::Read8(message); // DrlkPassFailStatus
-        ChipLogProgress(chipTool, "  %s: 0x%02x", "status", status);
-
-        return success;
-    }
-};
-
-/*
- * Command Response UnlockDoorResponse
- */
-class UnlockDoorResponse : public ModelCommandResponse
-{
-public:
-    UnlockDoorResponse() : ModelCommandResponse(0x01) {}
-
-    bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
-    {
-        bool success = true;
-        ChipLogProgress(chipTool, "UnlockDoorResponse (0x01):");
-
-        CHECK_MESSAGE_LENGTH(1);
-        uint8_t status = chip::Encoding::Read8(message); // zclStatus
-        success        = CheckStatus(status);
-
-        return success;
-    }
-};
-
-/*
- * Command Response UnlockWithTimeoutResponse
- */
-class UnlockWithTimeoutResponse : public ModelCommandResponse
-{
-public:
-    UnlockWithTimeoutResponse() : ModelCommandResponse(0x03) {}
-
-    bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
-    {
-        bool success = true;
-        ChipLogProgress(chipTool, "UnlockWithTimeoutResponse (0x03):");
-
-        CHECK_MESSAGE_LENGTH(1);
-        uint8_t status = chip::Encoding::Read8(message); // zclStatus
-        success        = CheckStatus(status);
-
-        return success;
-    }
-};
-
-/*
  * Command ClearAllPins
  */
 class DoorLockClearAllPins : public ModelCommand
 {
 public:
-    DoorLockClearAllPins() : ModelCommand("clear-all-pins", kDoorLockClusterId, 0x08) { ModelCommand::AddArguments(); }
+    DoorLockClearAllPins() : ModelCommand("clear-all-pins") { ModelCommand::AddArguments(); }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override { return encodeDoorLockClusterClearAllPinsCommand(endPointId); }
-
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        ChipLogProgress(chipTool, "Sending cluster (0x0101) command (0x08) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::DoorLockCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ClearAllPins(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Specific Response: ClearAllPinsResponse
-    bool HandleSpecificResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ClearAllPinsResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<DoorLockClusterClearAllPinsResponseCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DoorLockClusterClearAllPinsResponseCallback>(OnDoorLockClusterClearAllPinsResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
@@ -3529,23 +3588,22 @@
 class DoorLockClearAllRfids : public ModelCommand
 {
 public:
-    DoorLockClearAllRfids() : ModelCommand("clear-all-rfids", kDoorLockClusterId, 0x19) { ModelCommand::AddArguments(); }
+    DoorLockClearAllRfids() : ModelCommand("clear-all-rfids") { ModelCommand::AddArguments(); }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override { return encodeDoorLockClusterClearAllRfidsCommand(endPointId); }
-
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        ChipLogProgress(chipTool, "Sending cluster (0x0101) command (0x19) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::DoorLockCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ClearAllRfids(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Specific Response: ClearAllRfidsResponse
-    bool HandleSpecificResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ClearAllRfidsResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<DoorLockClusterClearAllRfidsResponseCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DoorLockClusterClearAllRfidsResponseCallback>(OnDoorLockClusterClearAllRfidsResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
@@ -3554,33 +3612,28 @@
 class DoorLockClearHolidaySchedule : public ModelCommand
 {
 public:
-    DoorLockClearHolidaySchedule() : ModelCommand("clear-holiday-schedule", kDoorLockClusterId, 0x13)
+    DoorLockClearHolidaySchedule() : ModelCommand("clear-holiday-schedule")
     {
-        AddArgument("holidayScheduleID", 0, UINT8_MAX, &mHolidayScheduleID);
+        AddArgument("scheduleId", 0, UINT8_MAX, &mScheduleId);
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeDoorLockClusterClearHolidayScheduleCommand(endPointId, mHolidayScheduleID);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0101) command (0x13) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
-
-    // Specific Response: ClearHolidayScheduleResponse
-    bool HandleSpecificResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ClearHolidayScheduleResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::DoorLockCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ClearHolidaySchedule(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mScheduleId);
     }
 
 private:
-    uint8_t mHolidayScheduleID;
+    chip::Callback::Callback<DoorLockClusterClearHolidayScheduleResponseCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DoorLockClusterClearHolidayScheduleResponseCallback>(
+            OnDoorLockClusterClearHolidayScheduleResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    uint8_t mScheduleId;
 };
 
 /*
@@ -3589,33 +3642,27 @@
 class DoorLockClearPin : public ModelCommand
 {
 public:
-    DoorLockClearPin() : ModelCommand("clear-pin", kDoorLockClusterId, 0x07)
+    DoorLockClearPin() : ModelCommand("clear-pin")
     {
-        AddArgument("userID", 0, UINT16_MAX, &mUserID);
+        AddArgument("userId", 0, UINT16_MAX, &mUserId);
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeDoorLockClusterClearPinCommand(endPointId, mUserID);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0101) command (0x07) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
-
-    // Specific Response: ClearPinResponse
-    bool HandleSpecificResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ClearPinResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::DoorLockCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ClearPin(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mUserId);
     }
 
 private:
-    uint16_t mUserID;
+    chip::Callback::Callback<DoorLockClusterClearPinResponseCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DoorLockClusterClearPinResponseCallback>(OnDoorLockClusterClearPinResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    uint16_t mUserId;
 };
 
 /*
@@ -3624,33 +3671,27 @@
 class DoorLockClearRfid : public ModelCommand
 {
 public:
-    DoorLockClearRfid() : ModelCommand("clear-rfid", kDoorLockClusterId, 0x18)
+    DoorLockClearRfid() : ModelCommand("clear-rfid")
     {
-        AddArgument("userID", 0, UINT16_MAX, &mUserID);
+        AddArgument("userId", 0, UINT16_MAX, &mUserId);
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeDoorLockClusterClearRfidCommand(endPointId, mUserID);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0101) command (0x18) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
-
-    // Specific Response: ClearRfidResponse
-    bool HandleSpecificResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ClearRfidResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::DoorLockCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ClearRfid(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mUserId);
     }
 
 private:
-    uint16_t mUserID;
+    chip::Callback::Callback<DoorLockClusterClearRfidResponseCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DoorLockClusterClearRfidResponseCallback>(OnDoorLockClusterClearRfidResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    uint16_t mUserId;
 };
 
 /*
@@ -3659,35 +3700,30 @@
 class DoorLockClearWeekdaySchedule : public ModelCommand
 {
 public:
-    DoorLockClearWeekdaySchedule() : ModelCommand("clear-weekday-schedule", kDoorLockClusterId, 0x0D)
+    DoorLockClearWeekdaySchedule() : ModelCommand("clear-weekday-schedule")
     {
-        AddArgument("scheduleID", 0, UINT8_MAX, &mScheduleID);
-        AddArgument("userID", 0, UINT16_MAX, &mUserID);
+        AddArgument("scheduleId", 0, UINT8_MAX, &mScheduleId);
+        AddArgument("userId", 0, UINT16_MAX, &mUserId);
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeDoorLockClusterClearWeekdayScheduleCommand(endPointId, mScheduleID, mUserID);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0101) command (0x0D) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
-
-    // Specific Response: ClearWeekdayScheduleResponse
-    bool HandleSpecificResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ClearWeekdayScheduleResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::DoorLockCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ClearWeekdaySchedule(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mScheduleId, mUserId);
     }
 
 private:
-    uint8_t mScheduleID;
-    uint16_t mUserID;
+    chip::Callback::Callback<DoorLockClusterClearWeekdayScheduleResponseCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DoorLockClusterClearWeekdayScheduleResponseCallback>(
+            OnDoorLockClusterClearWeekdayScheduleResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    uint8_t mScheduleId;
+    uint16_t mUserId;
 };
 
 /*
@@ -3696,35 +3732,30 @@
 class DoorLockClearYeardaySchedule : public ModelCommand
 {
 public:
-    DoorLockClearYeardaySchedule() : ModelCommand("clear-yearday-schedule", kDoorLockClusterId, 0x10)
+    DoorLockClearYeardaySchedule() : ModelCommand("clear-yearday-schedule")
     {
-        AddArgument("scheduleID", 0, UINT8_MAX, &mScheduleID);
-        AddArgument("userID", 0, UINT16_MAX, &mUserID);
+        AddArgument("scheduleId", 0, UINT8_MAX, &mScheduleId);
+        AddArgument("userId", 0, UINT16_MAX, &mUserId);
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeDoorLockClusterClearYeardayScheduleCommand(endPointId, mScheduleID, mUserID);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0101) command (0x10) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
-
-    // Specific Response: ClearYeardayScheduleResponse
-    bool HandleSpecificResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ClearYeardayScheduleResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::DoorLockCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ClearYeardaySchedule(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mScheduleId, mUserId);
     }
 
 private:
-    uint8_t mScheduleID;
-    uint16_t mUserID;
+    chip::Callback::Callback<DoorLockClusterClearYeardayScheduleResponseCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DoorLockClusterClearYeardayScheduleResponseCallback>(
+            OnDoorLockClusterClearYeardayScheduleResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    uint8_t mScheduleId;
+    uint16_t mUserId;
 };
 
 /*
@@ -3733,33 +3764,57 @@
 class DoorLockGetHolidaySchedule : public ModelCommand
 {
 public:
-    DoorLockGetHolidaySchedule() : ModelCommand("get-holiday-schedule", kDoorLockClusterId, 0x12)
+    DoorLockGetHolidaySchedule() : ModelCommand("get-holiday-schedule")
     {
-        AddArgument("holidayScheduleID", 0, UINT8_MAX, &mHolidayScheduleID);
+        AddArgument("scheduleId", 0, UINT8_MAX, &mScheduleId);
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeDoorLockClusterGetHolidayScheduleCommand(endPointId, mHolidayScheduleID);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0101) command (0x12) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
-
-    // Specific Response: GetHolidayScheduleResponse
-    bool HandleSpecificResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        GetHolidayScheduleResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::DoorLockCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.GetHolidaySchedule(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mScheduleId);
     }
 
 private:
-    uint8_t mHolidayScheduleID;
+    chip::Callback::Callback<DoorLockClusterGetHolidayScheduleResponseCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DoorLockClusterGetHolidayScheduleResponseCallback>(OnDoorLockClusterGetHolidayScheduleResponse,
+                                                                                        this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    uint8_t mScheduleId;
+};
+
+/*
+ * Command GetLogRecord
+ */
+class DoorLockGetLogRecord : public ModelCommand
+{
+public:
+    DoorLockGetLogRecord() : ModelCommand("get-log-record")
+    {
+        AddArgument("logIndex", 0, UINT16_MAX, &mLogIndex);
+        ModelCommand::AddArguments();
+    }
+
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
+    {
+        ChipLogProgress(chipTool, "Sending cluster (0x0101) command (0x04) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::DoorLockCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.GetLogRecord(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mLogIndex);
+    }
+
+private:
+    chip::Callback::Callback<DoorLockClusterGetLogRecordResponseCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DoorLockClusterGetLogRecordResponseCallback>(OnDoorLockClusterGetLogRecordResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    uint16_t mLogIndex;
 };
 
 /*
@@ -3768,33 +3823,27 @@
 class DoorLockGetPin : public ModelCommand
 {
 public:
-    DoorLockGetPin() : ModelCommand("get-pin", kDoorLockClusterId, 0x06)
+    DoorLockGetPin() : ModelCommand("get-pin")
     {
-        AddArgument("userID", 0, UINT16_MAX, &mUserID);
+        AddArgument("userId", 0, UINT16_MAX, &mUserId);
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeDoorLockClusterGetPinCommand(endPointId, mUserID);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0101) command (0x06) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
-
-    // Specific Response: GetPinResponse
-    bool HandleSpecificResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        GetPinResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::DoorLockCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.GetPin(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mUserId);
     }
 
 private:
-    uint16_t mUserID;
+    chip::Callback::Callback<DoorLockClusterGetPinResponseCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DoorLockClusterGetPinResponseCallback>(OnDoorLockClusterGetPinResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    uint16_t mUserId;
 };
 
 /*
@@ -3803,33 +3852,27 @@
 class DoorLockGetRfid : public ModelCommand
 {
 public:
-    DoorLockGetRfid() : ModelCommand("get-rfid", kDoorLockClusterId, 0x17)
+    DoorLockGetRfid() : ModelCommand("get-rfid")
     {
-        AddArgument("userID", 0, UINT16_MAX, &mUserID);
+        AddArgument("userId", 0, UINT16_MAX, &mUserId);
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeDoorLockClusterGetRfidCommand(endPointId, mUserID);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0101) command (0x17) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
-
-    // Specific Response: GetRfidResponse
-    bool HandleSpecificResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        GetRfidResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::DoorLockCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.GetRfid(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mUserId);
     }
 
 private:
-    uint16_t mUserID;
+    chip::Callback::Callback<DoorLockClusterGetRfidResponseCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DoorLockClusterGetRfidResponseCallback>(OnDoorLockClusterGetRfidResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    uint16_t mUserId;
 };
 
 /*
@@ -3838,33 +3881,27 @@
 class DoorLockGetUserType : public ModelCommand
 {
 public:
-    DoorLockGetUserType() : ModelCommand("get-user-type", kDoorLockClusterId, 0x15)
+    DoorLockGetUserType() : ModelCommand("get-user-type")
     {
-        AddArgument("userID", 0, UINT16_MAX, &mUserID);
+        AddArgument("userId", 0, UINT16_MAX, &mUserId);
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeDoorLockClusterGetUserTypeCommand(endPointId, mUserID);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0101) command (0x15) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
-
-    // Specific Response: GetUserTypeResponse
-    bool HandleSpecificResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        GetUserTypeResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::DoorLockCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.GetUserType(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mUserId);
     }
 
 private:
-    uint16_t mUserID;
+    chip::Callback::Callback<DoorLockClusterGetUserTypeResponseCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DoorLockClusterGetUserTypeResponseCallback>(OnDoorLockClusterGetUserTypeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    uint16_t mUserId;
 };
 
 /*
@@ -3873,35 +3910,30 @@
 class DoorLockGetWeekdaySchedule : public ModelCommand
 {
 public:
-    DoorLockGetWeekdaySchedule() : ModelCommand("get-weekday-schedule", kDoorLockClusterId, 0x0C)
+    DoorLockGetWeekdaySchedule() : ModelCommand("get-weekday-schedule")
     {
-        AddArgument("scheduleID", 0, UINT8_MAX, &mScheduleID);
-        AddArgument("userID", 0, UINT16_MAX, &mUserID);
+        AddArgument("scheduleId", 0, UINT8_MAX, &mScheduleId);
+        AddArgument("userId", 0, UINT16_MAX, &mUserId);
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeDoorLockClusterGetWeekdayScheduleCommand(endPointId, mScheduleID, mUserID);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0101) command (0x0C) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
-
-    // Specific Response: GetWeekdayScheduleResponse
-    bool HandleSpecificResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        GetWeekdayScheduleResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::DoorLockCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.GetWeekdaySchedule(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mScheduleId, mUserId);
     }
 
 private:
-    uint8_t mScheduleID;
-    uint16_t mUserID;
+    chip::Callback::Callback<DoorLockClusterGetWeekdayScheduleResponseCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DoorLockClusterGetWeekdayScheduleResponseCallback>(OnDoorLockClusterGetWeekdayScheduleResponse,
+                                                                                        this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    uint8_t mScheduleId;
+    uint16_t mUserId;
 };
 
 /*
@@ -3910,35 +3942,30 @@
 class DoorLockGetYeardaySchedule : public ModelCommand
 {
 public:
-    DoorLockGetYeardaySchedule() : ModelCommand("get-yearday-schedule", kDoorLockClusterId, 0x0F)
+    DoorLockGetYeardaySchedule() : ModelCommand("get-yearday-schedule")
     {
-        AddArgument("scheduleID", 0, UINT8_MAX, &mScheduleID);
-        AddArgument("userID", 0, UINT16_MAX, &mUserID);
+        AddArgument("scheduleId", 0, UINT8_MAX, &mScheduleId);
+        AddArgument("userId", 0, UINT16_MAX, &mUserId);
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeDoorLockClusterGetYeardayScheduleCommand(endPointId, mScheduleID, mUserID);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0101) command (0x0F) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
-
-    // Specific Response: GetYeardayScheduleResponse
-    bool HandleSpecificResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        GetYeardayScheduleResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::DoorLockCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.GetYeardaySchedule(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mScheduleId, mUserId);
     }
 
 private:
-    uint8_t mScheduleID;
-    uint16_t mUserID;
+    chip::Callback::Callback<DoorLockClusterGetYeardayScheduleResponseCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DoorLockClusterGetYeardayScheduleResponseCallback>(OnDoorLockClusterGetYeardayScheduleResponse,
+                                                                                        this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    uint8_t mScheduleId;
+    uint16_t mUserId;
 };
 
 /*
@@ -3947,33 +3974,27 @@
 class DoorLockLockDoor : public ModelCommand
 {
 public:
-    DoorLockLockDoor() : ModelCommand("lock-door", kDoorLockClusterId, 0x00)
+    DoorLockLockDoor() : ModelCommand("lock-door")
     {
-        AddArgument("pINOrRFIDCode", &mPINOrRFIDCode);
+        AddArgument("pin", &mPin);
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeDoorLockClusterLockDoorCommand(endPointId, mPINOrRFIDCode);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0101) command (0x00) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
-
-    // Specific Response: LockDoorResponse
-    bool HandleSpecificResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        LockDoorResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::DoorLockCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.LockDoor(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mPin);
     }
 
 private:
-    char * mPINOrRFIDCode;
+    chip::Callback::Callback<DoorLockClusterLockDoorResponseCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DoorLockClusterLockDoorResponseCallback>(OnDoorLockClusterLockDoorResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    char * mPin;
 };
 
 /*
@@ -3982,37 +4003,32 @@
 class DoorLockSetHolidaySchedule : public ModelCommand
 {
 public:
-    DoorLockSetHolidaySchedule() : ModelCommand("set-holiday-schedule", kDoorLockClusterId, 0x11)
+    DoorLockSetHolidaySchedule() : ModelCommand("set-holiday-schedule")
     {
-        AddArgument("holidayScheduleID", 0, UINT8_MAX, &mHolidayScheduleID);
+        AddArgument("scheduleId", 0, UINT8_MAX, &mScheduleId);
         AddArgument("localStartTime", 0, UINT32_MAX, &mLocalStartTime);
         AddArgument("localEndTime", 0, UINT32_MAX, &mLocalEndTime);
         AddArgument("operatingModeDuringHoliday", 0, UINT8_MAX, &mOperatingModeDuringHoliday);
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeDoorLockClusterSetHolidayScheduleCommand(endPointId, mHolidayScheduleID, mLocalStartTime, mLocalEndTime,
-                                                              mOperatingModeDuringHoliday);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0101) command (0x11) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
-
-    // Specific Response: SetHolidayScheduleResponse
-    bool HandleSpecificResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        SetHolidayScheduleResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::DoorLockCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.SetHolidaySchedule(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mScheduleId, mLocalStartTime,
+                                          mLocalEndTime, mOperatingModeDuringHoliday);
     }
 
 private:
-    uint8_t mHolidayScheduleID;
+    chip::Callback::Callback<DoorLockClusterSetHolidayScheduleResponseCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DoorLockClusterSetHolidayScheduleResponseCallback>(OnDoorLockClusterSetHolidayScheduleResponse,
+                                                                                        this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    uint8_t mScheduleId;
     uint32_t mLocalStartTime;
     uint32_t mLocalEndTime;
     uint8_t mOperatingModeDuringHoliday;
@@ -4024,39 +4040,33 @@
 class DoorLockSetPin : public ModelCommand
 {
 public:
-    DoorLockSetPin() : ModelCommand("set-pin", kDoorLockClusterId, 0x05)
+    DoorLockSetPin() : ModelCommand("set-pin")
     {
-        AddArgument("userID", 0, UINT16_MAX, &mUserID);
+        AddArgument("userId", 0, UINT16_MAX, &mUserId);
         AddArgument("userStatus", 0, UINT8_MAX, &mUserStatus);
         AddArgument("userType", 0, UINT8_MAX, &mUserType);
-        AddArgument("pin", &mPIN);
+        AddArgument("pin", &mPin);
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeDoorLockClusterSetPinCommand(endPointId, mUserID, mUserStatus, mUserType, mPIN);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0101) command (0x05) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
-
-    // Specific Response: SetPinResponse
-    bool HandleSpecificResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        SetPinResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::DoorLockCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.SetPin(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mUserId, mUserStatus, mUserType, mPin);
     }
 
 private:
-    uint16_t mUserID;
+    chip::Callback::Callback<DoorLockClusterSetPinResponseCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DoorLockClusterSetPinResponseCallback>(OnDoorLockClusterSetPinResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    uint16_t mUserId;
     uint8_t mUserStatus;
     uint8_t mUserType;
-    char * mPIN;
+    char * mPin;
 };
 
 /*
@@ -4065,39 +4075,33 @@
 class DoorLockSetRfid : public ModelCommand
 {
 public:
-    DoorLockSetRfid() : ModelCommand("set-rfid", kDoorLockClusterId, 0x16)
+    DoorLockSetRfid() : ModelCommand("set-rfid")
     {
-        AddArgument("userID", 0, UINT16_MAX, &mUserID);
+        AddArgument("userId", 0, UINT16_MAX, &mUserId);
         AddArgument("userStatus", 0, UINT8_MAX, &mUserStatus);
         AddArgument("userType", 0, UINT8_MAX, &mUserType);
-        AddArgument("rfid", &mRFID);
+        AddArgument("id", &mId);
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeDoorLockClusterSetRfidCommand(endPointId, mUserID, mUserStatus, mUserType, mRFID);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0101) command (0x16) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
-
-    // Specific Response: SetRfidResponse
-    bool HandleSpecificResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        SetRfidResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::DoorLockCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.SetRfid(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mUserId, mUserStatus, mUserType, mId);
     }
 
 private:
-    uint16_t mUserID;
+    chip::Callback::Callback<DoorLockClusterSetRfidResponseCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DoorLockClusterSetRfidResponseCallback>(OnDoorLockClusterSetRfidResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    uint16_t mUserId;
     uint8_t mUserStatus;
     uint8_t mUserType;
-    char * mRFID;
+    char * mId;
 };
 
 /*
@@ -4106,34 +4110,28 @@
 class DoorLockSetUserType : public ModelCommand
 {
 public:
-    DoorLockSetUserType() : ModelCommand("set-user-type", kDoorLockClusterId, 0x14)
+    DoorLockSetUserType() : ModelCommand("set-user-type")
     {
-        AddArgument("userID", 0, UINT16_MAX, &mUserID);
+        AddArgument("userId", 0, UINT16_MAX, &mUserId);
         AddArgument("userType", 0, UINT8_MAX, &mUserType);
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeDoorLockClusterSetUserTypeCommand(endPointId, mUserID, mUserType);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0101) command (0x14) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
-
-    // Specific Response: SetUserTypeResponse
-    bool HandleSpecificResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        SetUserTypeResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::DoorLockCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.SetUserType(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mUserId, mUserType);
     }
 
 private:
-    uint16_t mUserID;
+    chip::Callback::Callback<DoorLockClusterSetUserTypeResponseCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DoorLockClusterSetUserTypeResponseCallback>(OnDoorLockClusterSetUserTypeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    uint16_t mUserId;
     uint8_t mUserType;
 };
 
@@ -4143,10 +4141,10 @@
 class DoorLockSetWeekdaySchedule : public ModelCommand
 {
 public:
-    DoorLockSetWeekdaySchedule() : ModelCommand("set-weekday-schedule", kDoorLockClusterId, 0x0B)
+    DoorLockSetWeekdaySchedule() : ModelCommand("set-weekday-schedule")
     {
-        AddArgument("scheduleID", 0, UINT8_MAX, &mScheduleID);
-        AddArgument("userID", 0, UINT16_MAX, &mUserID);
+        AddArgument("scheduleId", 0, UINT8_MAX, &mScheduleId);
+        AddArgument("userId", 0, UINT16_MAX, &mUserId);
         AddArgument("daysMask", 0, UINT8_MAX, &mDaysMask);
         AddArgument("startHour", 0, UINT8_MAX, &mStartHour);
         AddArgument("startMinute", 0, UINT8_MAX, &mStartMinute);
@@ -4155,29 +4153,24 @@
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeDoorLockClusterSetWeekdayScheduleCommand(endPointId, mScheduleID, mUserID, mDaysMask, mStartHour, mStartMinute,
-                                                              mEndHour, mEndMinute);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0101) command (0x0B) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
-
-    // Specific Response: SetWeekdayScheduleResponse
-    bool HandleSpecificResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        SetWeekdayScheduleResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::DoorLockCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.SetWeekdaySchedule(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mScheduleId, mUserId, mDaysMask,
+                                          mStartHour, mStartMinute, mEndHour, mEndMinute);
     }
 
 private:
-    uint8_t mScheduleID;
-    uint16_t mUserID;
+    chip::Callback::Callback<DoorLockClusterSetWeekdayScheduleResponseCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DoorLockClusterSetWeekdayScheduleResponseCallback>(OnDoorLockClusterSetWeekdayScheduleResponse,
+                                                                                        this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    uint8_t mScheduleId;
+    uint16_t mUserId;
     uint8_t mDaysMask;
     uint8_t mStartHour;
     uint8_t mStartMinute;
@@ -4191,37 +4184,33 @@
 class DoorLockSetYeardaySchedule : public ModelCommand
 {
 public:
-    DoorLockSetYeardaySchedule() : ModelCommand("set-yearday-schedule", kDoorLockClusterId, 0x0E)
+    DoorLockSetYeardaySchedule() : ModelCommand("set-yearday-schedule")
     {
-        AddArgument("scheduleID", 0, UINT8_MAX, &mScheduleID);
-        AddArgument("userID", 0, UINT16_MAX, &mUserID);
+        AddArgument("scheduleId", 0, UINT8_MAX, &mScheduleId);
+        AddArgument("userId", 0, UINT16_MAX, &mUserId);
         AddArgument("localStartTime", 0, UINT32_MAX, &mLocalStartTime);
         AddArgument("localEndTime", 0, UINT32_MAX, &mLocalEndTime);
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeDoorLockClusterSetYeardayScheduleCommand(endPointId, mScheduleID, mUserID, mLocalStartTime, mLocalEndTime);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0101) command (0x0E) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
-
-    // Specific Response: SetYeardayScheduleResponse
-    bool HandleSpecificResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        SetYeardayScheduleResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::DoorLockCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.SetYeardaySchedule(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mScheduleId, mUserId,
+                                          mLocalStartTime, mLocalEndTime);
     }
 
 private:
-    uint8_t mScheduleID;
-    uint16_t mUserID;
+    chip::Callback::Callback<DoorLockClusterSetYeardayScheduleResponseCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DoorLockClusterSetYeardayScheduleResponseCallback>(OnDoorLockClusterSetYeardayScheduleResponse,
+                                                                                        this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    uint8_t mScheduleId;
+    uint16_t mUserId;
     uint32_t mLocalStartTime;
     uint32_t mLocalEndTime;
 };
@@ -4232,33 +4221,27 @@
 class DoorLockUnlockDoor : public ModelCommand
 {
 public:
-    DoorLockUnlockDoor() : ModelCommand("unlock-door", kDoorLockClusterId, 0x01)
+    DoorLockUnlockDoor() : ModelCommand("unlock-door")
     {
-        AddArgument("pINOrRFIDCode", &mPINOrRFIDCode);
+        AddArgument("pin", &mPin);
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeDoorLockClusterUnlockDoorCommand(endPointId, mPINOrRFIDCode);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0101) command (0x01) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
-
-    // Specific Response: UnlockDoorResponse
-    bool HandleSpecificResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        UnlockDoorResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::DoorLockCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.UnlockDoor(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mPin);
     }
 
 private:
-    char * mPINOrRFIDCode;
+    chip::Callback::Callback<DoorLockClusterUnlockDoorResponseCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DoorLockClusterUnlockDoorResponseCallback>(OnDoorLockClusterUnlockDoorResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    char * mPin;
 };
 
 /*
@@ -4267,53 +4250,54 @@
 class DoorLockUnlockWithTimeout : public ModelCommand
 {
 public:
-    DoorLockUnlockWithTimeout() : ModelCommand("unlock-with-timeout", kDoorLockClusterId, 0x03)
+    DoorLockUnlockWithTimeout() : ModelCommand("unlock-with-timeout")
     {
         AddArgument("timeoutInSeconds", 0, UINT16_MAX, &mTimeoutInSeconds);
-        AddArgument("pINOrRFIDCode", &mPINOrRFIDCode);
+        AddArgument("pin", &mPin);
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeDoorLockClusterUnlockWithTimeoutCommand(endPointId, mTimeoutInSeconds, mPINOrRFIDCode);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0101) command (0x03) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
-
-    // Specific Response: UnlockWithTimeoutResponse
-    bool HandleSpecificResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        UnlockWithTimeoutResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::DoorLockCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.UnlockWithTimeout(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mTimeoutInSeconds, mPin);
     }
 
 private:
+    chip::Callback::Callback<DoorLockClusterUnlockWithTimeoutResponseCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DoorLockClusterUnlockWithTimeoutResponseCallback>(OnDoorLockClusterUnlockWithTimeoutResponse,
+                                                                                       this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
     uint16_t mTimeoutInSeconds;
-    char * mPINOrRFIDCode;
+    char * mPin;
 };
 
 /*
- * Discover attributes
+ * Discover Attributes
  */
 class DiscoverDoorLockAttributes : public ModelCommand
 {
 public:
-    DiscoverDoorLockAttributes() : ModelCommand("discover", kDoorLockClusterId, 0x0c) { ModelCommand::AddArguments(); }
+    DiscoverDoorLockAttributes() : ModelCommand("discover") { ModelCommand::AddArguments(); }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override { return encodeDoorLockClusterDiscoverAttributes(endPointId); }
-
-    // Global Response: DiscoverAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        DiscoverAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        ChipLogProgress(chipTool, "Sending cluster (0x0000) command (0x0C) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::DoorLockCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.DiscoverAttributes(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
+
+private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
@@ -4322,29 +4306,32 @@
 class ReadDoorLockLockState : public ModelCommand
 {
 public:
-    ReadDoorLockLockState() : ModelCommand("read", kDoorLockClusterId, 0x00)
+    ReadDoorLockLockState() : ModelCommand("read")
     {
         AddArgument("attr-name", "lock-state");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeDoorLockClusterReadLockStateAttribute(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0101) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::DoorLockCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeLockState(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<Int8uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int8uAttributeCallback>(OnInt8uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 class ReportDoorLockLockState : public ModelCommand
 {
 public:
-    ReportDoorLockLockState() : ModelCommand("report", kDoorLockClusterId, 0x06)
+    ReportDoorLockLockState() : ModelCommand("report")
     {
         AddArgument("attr-name", "lock-state");
         AddArgument("min-interval", 0, UINT16_MAX, &mMinInterval);
@@ -4352,19 +4339,30 @@
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeDoorLockClusterReportLockStateAttribute(endPointId, mMinInterval, mMaxInterval);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0101) command (0x06) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: ConfigureReportingResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ConfigureReportingResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::DoorLockCluster cluster;
+        cluster.Associate(device, endpointId);
+
+        CHIP_ERROR err = cluster.ReportAttributeLockState(onReportCallback->Cancel());
+        if (err != CHIP_NO_ERROR)
+        {
+            return err;
+        }
+
+        return cluster.ConfigureAttributeLockState(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mMinInterval,
+                                                   mMaxInterval);
     }
 
 private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    chip::Callback::Callback<Int8uAttributeCallback> * onReportCallback =
+        new chip::Callback::Callback<Int8uAttributeCallback>(OnInt8uAttributeResponse, this);
     uint16_t mMinInterval;
     uint16_t mMaxInterval;
 };
@@ -4375,20 +4373,26 @@
 class ReadDoorLockLockType : public ModelCommand
 {
 public:
-    ReadDoorLockLockType() : ModelCommand("read", kDoorLockClusterId, 0x00)
+    ReadDoorLockLockType() : ModelCommand("read")
     {
         AddArgument("attr-name", "lock-type");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override { return encodeDoorLockClusterReadLockTypeAttribute(endPointId); }
-
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        ChipLogProgress(chipTool, "Sending cluster (0x0101) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::DoorLockCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeLockType(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
+
+private:
+    chip::Callback::Callback<Int8uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int8uAttributeCallback>(OnInt8uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
@@ -4397,35 +4401,59 @@
 class ReadDoorLockActuatorEnabled : public ModelCommand
 {
 public:
-    ReadDoorLockActuatorEnabled() : ModelCommand("read", kDoorLockClusterId, 0x00)
+    ReadDoorLockActuatorEnabled() : ModelCommand("read")
     {
         AddArgument("attr-name", "actuator-enabled");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeDoorLockClusterReadActuatorEnabledAttribute(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0101) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::DoorLockCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeActuatorEnabled(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
+private:
+    chip::Callback::Callback<BooleanAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<BooleanAttributeCallback>(OnBooleanAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+};
+
+/*
+ * Attribute ClusterRevision
+ */
+class ReadDoorLockClusterRevision : public ModelCommand
+{
+public:
+    ReadDoorLockClusterRevision() : ModelCommand("read")
     {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        AddArgument("attr-name", "cluster-revision");
+        ModelCommand::AddArguments();
     }
+
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
+    {
+        ChipLogProgress(chipTool, "Sending cluster (0x0101) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::DoorLockCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeClusterRevision(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
+    }
+
+private:
+    chip::Callback::Callback<Int16uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*----------------------------------------------------------------------------*\
 | Cluster Groups                                                      | 0x0004 |
 |------------------------------------------------------------------------------|
-| Responses:                                                          |        |
-| * AddGroupResponse                                                  |   0x00 |
-| * GetGroupMembershipResponse                                        |   0x02 |
-| * RemoveGroupResponse                                               |   0x03 |
-| * ViewGroupResponse                                                 |   0x01 |
-|                                                                     |        |
-|------------------------------------------------------------------------------|
 | Commands:                                                           |        |
 | * AddGroup                                                          |   0x00 |
 | * AddGroupIfIdentifying                                             |   0x05 |
@@ -4436,161 +4464,37 @@
 |------------------------------------------------------------------------------|
 | Attributes:                                                         |        |
 | * NameSupport                                                       | 0x0000 |
+| * ClusterRevision                                                   | 0xFFFD |
 \*----------------------------------------------------------------------------*/
 
 /*
- * Command Response AddGroupResponse
- */
-class AddGroupResponse : public ModelCommandResponse
-{
-public:
-    AddGroupResponse() : ModelCommandResponse(0x00) {}
-
-    bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
-    {
-        bool success = true;
-        ChipLogProgress(chipTool, "AddGroupResponse (0x00):");
-
-        CHECK_MESSAGE_LENGTH(1);
-        uint8_t status = chip::Encoding::Read8(message); // enum8
-        ChipLogProgress(chipTool, "  %s: 0x%02x", "status", status);
-
-        CHECK_MESSAGE_LENGTH(2);
-        uint16_t groupId = chip::Encoding::LittleEndian::Read16(message); // uint16
-        ChipLogProgress(chipTool, "  %s: 0x%04x", "groupId", groupId);
-
-        return success;
-    }
-};
-
-/*
- * Command Response GetGroupMembershipResponse
- */
-class GetGroupMembershipResponse : public ModelCommandResponse
-{
-public:
-    GetGroupMembershipResponse() : ModelCommandResponse(0x02) {}
-
-    bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
-    {
-        bool success = true;
-        ChipLogProgress(chipTool, "GetGroupMembershipResponse (0x02):");
-
-        CHECK_MESSAGE_LENGTH(1);
-        uint8_t capacity = chip::Encoding::Read8(message); // uint8
-        ChipLogProgress(chipTool, "  %s: 0x%02x", "capacity", capacity);
-
-        CHECK_MESSAGE_LENGTH(1);
-        uint8_t groupCount = chip::Encoding::Read8(message); // uint8
-        ChipLogProgress(chipTool, "  %s: 0x%02x", "groupCount", groupCount);
-
-        // uint16_t uint16[]
-        while (messageLen)
-        {
-            CHECK_MESSAGE_LENGTH(2);
-            uint16_t groupList = chip::Encoding::LittleEndian::Read16(message); // uint16
-            ChipLogProgress(chipTool, "  %s: 0x%04x", "groupList", groupList);
-        }
-
-        return success;
-    }
-};
-
-/*
- * Command Response RemoveGroupResponse
- */
-class RemoveGroupResponse : public ModelCommandResponse
-{
-public:
-    RemoveGroupResponse() : ModelCommandResponse(0x03) {}
-
-    bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
-    {
-        bool success = true;
-        ChipLogProgress(chipTool, "RemoveGroupResponse (0x03):");
-
-        CHECK_MESSAGE_LENGTH(1);
-        uint8_t status = chip::Encoding::Read8(message); // enum8
-        ChipLogProgress(chipTool, "  %s: 0x%02x", "status", status);
-
-        CHECK_MESSAGE_LENGTH(2);
-        uint16_t groupId = chip::Encoding::LittleEndian::Read16(message); // uint16
-        ChipLogProgress(chipTool, "  %s: 0x%04x", "groupId", groupId);
-
-        return success;
-    }
-};
-
-/*
- * Command Response ViewGroupResponse
- */
-class ViewGroupResponse : public ModelCommandResponse
-{
-public:
-    ViewGroupResponse() : ModelCommandResponse(0x01) {}
-
-    bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
-    {
-        bool success = true;
-        ChipLogProgress(chipTool, "ViewGroupResponse (0x01):");
-
-        CHECK_MESSAGE_LENGTH(1);
-        uint8_t status = chip::Encoding::Read8(message); // enum8
-        ChipLogProgress(chipTool, "  %s: 0x%02x", "status", status);
-
-        CHECK_MESSAGE_LENGTH(2);
-        uint16_t groupId = chip::Encoding::LittleEndian::Read16(message); // uint16
-        ChipLogProgress(chipTool, "  %s: 0x%04x", "groupId", groupId);
-
-        CHECK_MESSAGE_LENGTH(1);
-        {
-            uint8_t groupNameLen = chip::Encoding::Read8(message);                   // string
-            ChipLogProgress(chipTool, "  %s: 0x%02x", "groupNameLen", groupNameLen); // string
-
-            // FIXME Strings are not supported yet. For the moment the code just checks that
-            // there is enough bytes in the buffer
-            CHECK_MESSAGE_LENGTH(groupNameLen);
-            message += groupNameLen;
-        }
-
-        return success;
-    }
-};
-
-/*
  * Command AddGroup
  */
 class GroupsAddGroup : public ModelCommand
 {
 public:
-    GroupsAddGroup() : ModelCommand("add-group", kGroupsClusterId, 0x00)
+    GroupsAddGroup() : ModelCommand("add-group")
     {
-        AddArgument("groupId", 0, std::numeric_limits<chip::GroupId>::max(), &mGroupId);
+        AddArgument("groupId", 0, UINT16_MAX, &mGroupId);
         AddArgument("groupName", &mGroupName);
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeGroupsClusterAddGroupCommand(endPointId, mGroupId, mGroupName);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0004) command (0x00) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
-
-    // Specific Response: AddGroupResponse
-    bool HandleSpecificResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        AddGroupResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::GroupsCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.AddGroup(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mGroupId, mGroupName);
     }
 
 private:
-    chip::GroupId mGroupId;
+    chip::Callback::Callback<GroupsClusterAddGroupResponseCallback> * onSuccessCallback =
+        new chip::Callback::Callback<GroupsClusterAddGroupResponseCallback>(OnGroupsClusterAddGroupResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    uint16_t mGroupId;
     char * mGroupName;
 };
 
@@ -4600,27 +4504,28 @@
 class GroupsAddGroupIfIdentifying : public ModelCommand
 {
 public:
-    GroupsAddGroupIfIdentifying() : ModelCommand("add-group-if-identifying", kGroupsClusterId, 0x05)
+    GroupsAddGroupIfIdentifying() : ModelCommand("add-group-if-identifying")
     {
-        AddArgument("groupId", 0, std::numeric_limits<chip::GroupId>::max(), &mGroupId);
+        AddArgument("groupId", 0, UINT16_MAX, &mGroupId);
         AddArgument("groupName", &mGroupName);
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeGroupsClusterAddGroupIfIdentifyingCommand(endPointId, mGroupId, mGroupName);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0004) command (0x05) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::GroupsCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.AddGroupIfIdentifying(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mGroupId, mGroupName);
     }
 
 private:
-    chip::GroupId mGroupId;
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    uint16_t mGroupId;
     char * mGroupName;
 };
 
@@ -4630,35 +4535,28 @@
 class GroupsGetGroupMembership : public ModelCommand
 {
 public:
-    GroupsGetGroupMembership() : ModelCommand("get-group-membership", kGroupsClusterId, 0x02)
+    GroupsGetGroupMembership() : ModelCommand("get-group-membership")
     {
         AddArgument("groupCount", 0, UINT8_MAX, &mGroupCount);
-        // groupList is an array, but since chip-tool does not support variable
-        // number of arguments, only a single instance is supported.
         AddArgument("groupList", 0, UINT16_MAX, &mGroupList);
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeGroupsClusterGetGroupMembershipCommand(endPointId, mGroupCount, mGroupList);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0004) command (0x02) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
-
-    // Specific Response: GetGroupMembershipResponse
-    bool HandleSpecificResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        GetGroupMembershipResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::GroupsCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.GetGroupMembership(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mGroupCount, mGroupList);
     }
 
 private:
+    chip::Callback::Callback<GroupsClusterGetGroupMembershipResponseCallback> * onSuccessCallback =
+        new chip::Callback::Callback<GroupsClusterGetGroupMembershipResponseCallback>(OnGroupsClusterGetGroupMembershipResponse,
+                                                                                      this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
     uint8_t mGroupCount;
     uint16_t mGroupList;
 };
@@ -4669,16 +4567,22 @@
 class GroupsRemoveAllGroups : public ModelCommand
 {
 public:
-    GroupsRemoveAllGroups() : ModelCommand("remove-all-groups", kGroupsClusterId, 0x04) { ModelCommand::AddArguments(); }
+    GroupsRemoveAllGroups() : ModelCommand("remove-all-groups") { ModelCommand::AddArguments(); }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override { return encodeGroupsClusterRemoveAllGroupsCommand(endPointId); }
-
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        ChipLogProgress(chipTool, "Sending cluster (0x0004) command (0x04) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::GroupsCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.RemoveAllGroups(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
+
+private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
@@ -4687,33 +4591,27 @@
 class GroupsRemoveGroup : public ModelCommand
 {
 public:
-    GroupsRemoveGroup() : ModelCommand("remove-group", kGroupsClusterId, 0x03)
+    GroupsRemoveGroup() : ModelCommand("remove-group")
     {
-        AddArgument("groupId", 0, std::numeric_limits<chip::GroupId>::max(), &mGroupId);
+        AddArgument("groupId", 0, UINT16_MAX, &mGroupId);
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeGroupsClusterRemoveGroupCommand(endPointId, mGroupId);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0004) command (0x03) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
-
-    // Specific Response: RemoveGroupResponse
-    bool HandleSpecificResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        RemoveGroupResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::GroupsCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.RemoveGroup(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mGroupId);
     }
 
 private:
-    chip::GroupId mGroupId;
+    chip::Callback::Callback<GroupsClusterRemoveGroupResponseCallback> * onSuccessCallback =
+        new chip::Callback::Callback<GroupsClusterRemoveGroupResponseCallback>(OnGroupsClusterRemoveGroupResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    uint16_t mGroupId;
 };
 
 /*
@@ -4722,51 +4620,51 @@
 class GroupsViewGroup : public ModelCommand
 {
 public:
-    GroupsViewGroup() : ModelCommand("view-group", kGroupsClusterId, 0x01)
+    GroupsViewGroup() : ModelCommand("view-group")
     {
-        AddArgument("groupId", 0, std::numeric_limits<chip::GroupId>::max(), &mGroupId);
+        AddArgument("groupId", 0, UINT16_MAX, &mGroupId);
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeGroupsClusterViewGroupCommand(endPointId, mGroupId);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0004) command (0x01) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
-
-    // Specific Response: ViewGroupResponse
-    bool HandleSpecificResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ViewGroupResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::GroupsCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ViewGroup(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mGroupId);
     }
 
 private:
-    chip::GroupId mGroupId;
+    chip::Callback::Callback<GroupsClusterViewGroupResponseCallback> * onSuccessCallback =
+        new chip::Callback::Callback<GroupsClusterViewGroupResponseCallback>(OnGroupsClusterViewGroupResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    uint16_t mGroupId;
 };
 
 /*
- * Discover attributes
+ * Discover Attributes
  */
 class DiscoverGroupsAttributes : public ModelCommand
 {
 public:
-    DiscoverGroupsAttributes() : ModelCommand("discover", kGroupsClusterId, 0x0c) { ModelCommand::AddArguments(); }
+    DiscoverGroupsAttributes() : ModelCommand("discover") { ModelCommand::AddArguments(); }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override { return encodeGroupsClusterDiscoverAttributes(endPointId); }
-
-    // Global Response: DiscoverAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        DiscoverAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        ChipLogProgress(chipTool, "Sending cluster (0x0000) command (0x0C) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::GroupsCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.DiscoverAttributes(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
+
+private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
@@ -4775,262 +4673,94 @@
 class ReadGroupsNameSupport : public ModelCommand
 {
 public:
-    ReadGroupsNameSupport() : ModelCommand("read", kGroupsClusterId, 0x00)
+    ReadGroupsNameSupport() : ModelCommand("read")
     {
         AddArgument("attr-name", "name-support");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeGroupsClusterReadNameSupportAttribute(endPointId);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0004) command (0x00) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
-};
-
-/*----------------------------------------------------------------------------*\
-| Cluster IasZone                                                     | 0x0500 |
-|------------------------------------------------------------------------------|
-| Responses:                                                          |        |
-|                                                                     |        |
-|------------------------------------------------------------------------------|
-| Commands:                                                           |        |
-|------------------------------------------------------------------------------|
-| Attributes:                                                         |        |
-| * ZoneState                                                         | 0x0000 |
-| * ZoneType                                                          | 0x0001 |
-| * ZoneStatus                                                        | 0x0002 |
-| * IasCieAddress                                                     | 0x0010 |
-| * ZoneID                                                            | 0x0011 |
-\*----------------------------------------------------------------------------*/
-
-/*
- * Discover attributes
- */
-class DiscoverIasZoneAttributes : public ModelCommand
-{
-public:
-    DiscoverIasZoneAttributes() : ModelCommand("discover", kIasZoneClusterId, 0x0c) { ModelCommand::AddArguments(); }
-
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override { return encodeIasZoneClusterDiscoverAttributes(endPointId); }
-
-    // Global Response: DiscoverAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DiscoverAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
-};
-
-/*
- * Attribute ZoneState
- */
-class ReadIasZoneZoneState : public ModelCommand
-{
-public:
-    ReadIasZoneZoneState() : ModelCommand("read", kIasZoneClusterId, 0x00)
-    {
-        AddArgument("attr-name", "zone-state");
-        ModelCommand::AddArguments();
-    }
-
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override { return encodeIasZoneClusterReadZoneStateAttribute(endPointId); }
-
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
-};
-
-/*
- * Attribute ZoneType
- */
-class ReadIasZoneZoneType : public ModelCommand
-{
-public:
-    ReadIasZoneZoneType() : ModelCommand("read", kIasZoneClusterId, 0x00)
-    {
-        AddArgument("attr-name", "zone-type");
-        ModelCommand::AddArguments();
-    }
-
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override { return encodeIasZoneClusterReadZoneTypeAttribute(endPointId); }
-
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
-};
-
-/*
- * Attribute ZoneStatus
- */
-class ReadIasZoneZoneStatus : public ModelCommand
-{
-public:
-    ReadIasZoneZoneStatus() : ModelCommand("read", kIasZoneClusterId, 0x00)
-    {
-        AddArgument("attr-name", "zone-status");
-        ModelCommand::AddArguments();
-    }
-
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
-    {
-        return encodeIasZoneClusterReadZoneStatusAttribute(endPointId);
-    }
-
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
-};
-
-/*
- * Attribute IasCieAddress
- */
-class ReadIasZoneIasCieAddress : public ModelCommand
-{
-public:
-    ReadIasZoneIasCieAddress() : ModelCommand("read", kIasZoneClusterId, 0x00)
-    {
-        AddArgument("attr-name", "ias-cie-address");
-        ModelCommand::AddArguments();
-    }
-
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
-    {
-        return encodeIasZoneClusterReadIasCieAddressAttribute(endPointId);
-    }
-
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
-};
-
-class WriteIasZoneIasCieAddress : public ModelCommand
-{
-public:
-    WriteIasZoneIasCieAddress() : ModelCommand("write", kIasZoneClusterId, 0x01)
-    {
-        AddArgument("attr-name", "ias-cie-address");
-        AddArgument("attr-value", 0, UINT64_MAX, &mIasCieAddress);
-        ModelCommand::AddArguments();
-    }
-
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
-    {
-        return encodeIasZoneClusterWriteIasCieAddressAttribute(endPointId, mIasCieAddress);
-    }
-
-    // Global Response: WriteAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        WriteAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::GroupsCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeNameSupport(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
 private:
-    uint64_t mIasCieAddress;
+    chip::Callback::Callback<Int8uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int8uAttributeCallback>(OnInt8uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
- * Attribute ZoneID
+ * Attribute ClusterRevision
  */
-class ReadIasZoneZoneID : public ModelCommand
+class ReadGroupsClusterRevision : public ModelCommand
 {
 public:
-    ReadIasZoneZoneID() : ModelCommand("read", kIasZoneClusterId, 0x00)
+    ReadGroupsClusterRevision() : ModelCommand("read")
     {
-        AddArgument("attr-name", "zone-id");
+        AddArgument("attr-name", "cluster-revision");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override { return encodeIasZoneClusterReadZoneIdAttribute(endPointId); }
-
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        ChipLogProgress(chipTool, "Sending cluster (0x0004) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::GroupsCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeClusterRevision(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
+
+private:
+    chip::Callback::Callback<Int16uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*----------------------------------------------------------------------------*\
 | Cluster Identify                                                    | 0x0003 |
 |------------------------------------------------------------------------------|
-| Responses:                                                          |        |
-| * IdentifyQueryResponse                                             |   0x00 |
-|                                                                     |        |
-|------------------------------------------------------------------------------|
 | Commands:                                                           |        |
 | * Identify                                                          |   0x00 |
 | * IdentifyQuery                                                     |   0x01 |
 |------------------------------------------------------------------------------|
 | Attributes:                                                         |        |
 | * IdentifyTime                                                      | 0x0000 |
+| * ClusterRevision                                                   | 0xFFFD |
 \*----------------------------------------------------------------------------*/
 
 /*
- * Command Response IdentifyQueryResponse
- */
-class IdentifyQueryResponse : public ModelCommandResponse
-{
-public:
-    IdentifyQueryResponse() : ModelCommandResponse(0x00) {}
-
-    bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
-    {
-        bool success = true;
-        ChipLogProgress(chipTool, "IdentifyQueryResponse (0x00):");
-
-        CHECK_MESSAGE_LENGTH(2);
-        uint16_t timeout = chip::Encoding::LittleEndian::Read16(message); // uint16
-        ChipLogProgress(chipTool, "  %s: 0x%04x", "timeout", timeout);
-
-        return success;
-    }
-};
-
-/*
  * Command Identify
  */
 class IdentifyIdentify : public ModelCommand
 {
 public:
-    IdentifyIdentify() : ModelCommand("identify", kIdentifyClusterId, 0x00)
+    IdentifyIdentify() : ModelCommand("identify")
     {
         AddArgument("identifyTime", 0, UINT16_MAX, &mIdentifyTime);
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeIdentifyClusterIdentifyCommand(endPointId, mIdentifyTime);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0003) command (0x00) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::IdentifyCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.Identify(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mIdentifyTime);
     }
 
 private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
     uint16_t mIdentifyTime;
 };
 
@@ -5040,41 +4770,46 @@
 class IdentifyIdentifyQuery : public ModelCommand
 {
 public:
-    IdentifyIdentifyQuery() : ModelCommand("identify-query", kIdentifyClusterId, 0x01) { ModelCommand::AddArguments(); }
+    IdentifyIdentifyQuery() : ModelCommand("identify-query") { ModelCommand::AddArguments(); }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override { return encodeIdentifyClusterIdentifyQueryCommand(endPointId); }
-
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        ChipLogProgress(chipTool, "Sending cluster (0x0003) command (0x01) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::IdentifyCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.IdentifyQuery(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Specific Response: IdentifyQueryResponse
-    bool HandleSpecificResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        IdentifyQueryResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<IdentifyClusterIdentifyQueryResponseCallback> * onSuccessCallback =
+        new chip::Callback::Callback<IdentifyClusterIdentifyQueryResponseCallback>(OnIdentifyClusterIdentifyQueryResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
- * Discover attributes
+ * Discover Attributes
  */
 class DiscoverIdentifyAttributes : public ModelCommand
 {
 public:
-    DiscoverIdentifyAttributes() : ModelCommand("discover", kIdentifyClusterId, 0x0c) { ModelCommand::AddArguments(); }
+    DiscoverIdentifyAttributes() : ModelCommand("discover") { ModelCommand::AddArguments(); }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override { return encodeIdentifyClusterDiscoverAttributes(endPointId); }
-
-    // Global Response: DiscoverAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        DiscoverAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        ChipLogProgress(chipTool, "Sending cluster (0x0000) command (0x0C) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::IdentifyCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.DiscoverAttributes(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
+
+private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
@@ -5083,30 +4818,85 @@
 class ReadIdentifyIdentifyTime : public ModelCommand
 {
 public:
-    ReadIdentifyIdentifyTime() : ModelCommand("read", kIdentifyClusterId, 0x00)
+    ReadIdentifyIdentifyTime() : ModelCommand("read")
     {
         AddArgument("attr-name", "identify-time");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeIdentifyClusterReadIdentifyTimeAttribute(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0003) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::IdentifyCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeIdentifyTime(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
+private:
+    chip::Callback::Callback<Int16uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+};
+
+class WriteIdentifyIdentifyTime : public ModelCommand
+{
+public:
+    WriteIdentifyIdentifyTime() : ModelCommand("write")
     {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        AddArgument("attr-name", "identify-time");
+        AddArgument("attr-value", 0, UINT16_MAX, &mValue);
+        ModelCommand::AddArguments();
     }
+
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
+    {
+        ChipLogProgress(chipTool, "Sending cluster (0x0003) command (0x01) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::IdentifyCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.WriteAttributeIdentifyTime(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mValue);
+    }
+
+private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    uint16_t mValue;
+};
+
+/*
+ * Attribute ClusterRevision
+ */
+class ReadIdentifyClusterRevision : public ModelCommand
+{
+public:
+    ReadIdentifyClusterRevision() : ModelCommand("read")
+    {
+        AddArgument("attr-name", "cluster-revision");
+        ModelCommand::AddArguments();
+    }
+
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
+    {
+        ChipLogProgress(chipTool, "Sending cluster (0x0003) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::IdentifyCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeClusterRevision(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
+    }
+
+private:
+    chip::Callback::Callback<Int16uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*----------------------------------------------------------------------------*\
-| Cluster Level                                                       | 0x0008 |
-|------------------------------------------------------------------------------|
-| Responses:                                                          |        |
-|                                                                     |        |
+| Cluster LevelControl                                                | 0x0008 |
 |------------------------------------------------------------------------------|
 | Commands:                                                           |        |
 | * Move                                                              |   0x01 |
@@ -5120,102 +4910,108 @@
 |------------------------------------------------------------------------------|
 | Attributes:                                                         |        |
 | * CurrentLevel                                                      | 0x0000 |
+| * ClusterRevision                                                   | 0xFFFD |
 \*----------------------------------------------------------------------------*/
 
 /*
  * Command Move
  */
-class LevelMove : public ModelCommand
+class LevelControlMove : public ModelCommand
 {
 public:
-    LevelMove() : ModelCommand("move", kLevelClusterId, 0x01)
+    LevelControlMove() : ModelCommand("move")
     {
         AddArgument("moveMode", 0, UINT8_MAX, &mMoveMode);
         AddArgument("rate", 0, UINT8_MAX, &mRate);
-        AddArgument("optionsMask", 0, UINT8_MAX, &mOptionsMask);
-        AddArgument("optionsOverride", 0, UINT8_MAX, &mOptionsOverride);
+        AddArgument("optionMask", 0, UINT8_MAX, &mOptionMask);
+        AddArgument("optionOverride", 0, UINT8_MAX, &mOptionOverride);
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeLevelControlClusterMoveCommand(endPointId, mMoveMode, mRate, mOptionsMask, mOptionsOverride);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0008) command (0x01) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::LevelControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.Move(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mMoveMode, mRate, mOptionMask,
+                            mOptionOverride);
     }
 
 private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
     uint8_t mMoveMode;
     uint8_t mRate;
-    uint8_t mOptionsMask;
-    uint8_t mOptionsOverride;
+    uint8_t mOptionMask;
+    uint8_t mOptionOverride;
 };
 
 /*
  * Command MoveToLevel
  */
-class LevelMoveToLevel : public ModelCommand
+class LevelControlMoveToLevel : public ModelCommand
 {
 public:
-    LevelMoveToLevel() : ModelCommand("move-to-level", kLevelClusterId, 0x00)
+    LevelControlMoveToLevel() : ModelCommand("move-to-level")
     {
         AddArgument("level", 0, UINT8_MAX, &mLevel);
         AddArgument("transitionTime", 0, UINT16_MAX, &mTransitionTime);
-        AddArgument("optionsMask", 0, UINT8_MAX, &mOptionsMask);
-        AddArgument("optionsOverride", 0, UINT8_MAX, &mOptionsOverride);
+        AddArgument("optionMask", 0, UINT8_MAX, &mOptionMask);
+        AddArgument("optionOverride", 0, UINT8_MAX, &mOptionOverride);
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeLevelControlClusterMoveToLevelCommand(endPointId, mLevel, mTransitionTime, mOptionsMask, mOptionsOverride);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0008) command (0x00) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::LevelControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.MoveToLevel(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mLevel, mTransitionTime, mOptionMask,
+                                   mOptionOverride);
     }
 
 private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
     uint8_t mLevel;
     uint16_t mTransitionTime;
-    uint8_t mOptionsMask;
-    uint8_t mOptionsOverride;
+    uint8_t mOptionMask;
+    uint8_t mOptionOverride;
 };
 
 /*
  * Command MoveToLevelWithOnOff
  */
-class LevelMoveToLevelWithOnOff : public ModelCommand
+class LevelControlMoveToLevelWithOnOff : public ModelCommand
 {
 public:
-    LevelMoveToLevelWithOnOff() : ModelCommand("move-to-level-with-on-off", kLevelClusterId, 0x04)
+    LevelControlMoveToLevelWithOnOff() : ModelCommand("move-to-level-with-on-off")
     {
         AddArgument("level", 0, UINT8_MAX, &mLevel);
         AddArgument("transitionTime", 0, UINT16_MAX, &mTransitionTime);
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeLevelControlClusterMoveToLevelWithOnOffCommand(endPointId, mLevel, mTransitionTime);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0008) command (0x04) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::LevelControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.MoveToLevelWithOnOff(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mLevel, mTransitionTime);
     }
 
 private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
     uint8_t mLevel;
     uint16_t mTransitionTime;
 };
@@ -5223,29 +5019,30 @@
 /*
  * Command MoveWithOnOff
  */
-class LevelMoveWithOnOff : public ModelCommand
+class LevelControlMoveWithOnOff : public ModelCommand
 {
 public:
-    LevelMoveWithOnOff() : ModelCommand("move-with-on-off", kLevelClusterId, 0x05)
+    LevelControlMoveWithOnOff() : ModelCommand("move-with-on-off")
     {
         AddArgument("moveMode", 0, UINT8_MAX, &mMoveMode);
         AddArgument("rate", 0, UINT8_MAX, &mRate);
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeLevelControlClusterMoveWithOnOffCommand(endPointId, mMoveMode, mRate);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0008) command (0x05) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::LevelControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.MoveWithOnOff(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mMoveMode, mRate);
     }
 
 private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
     uint8_t mMoveMode;
     uint8_t mRate;
 };
@@ -5253,47 +5050,48 @@
 /*
  * Command Step
  */
-class LevelStep : public ModelCommand
+class LevelControlStep : public ModelCommand
 {
 public:
-    LevelStep() : ModelCommand("step", kLevelClusterId, 0x02)
+    LevelControlStep() : ModelCommand("step")
     {
         AddArgument("stepMode", 0, UINT8_MAX, &mStepMode);
         AddArgument("stepSize", 0, UINT8_MAX, &mStepSize);
         AddArgument("transitionTime", 0, UINT16_MAX, &mTransitionTime);
-        AddArgument("optionsMask", 0, UINT8_MAX, &mOptionsMask);
-        AddArgument("optionsOverride", 0, UINT8_MAX, &mOptionsOverride);
+        AddArgument("optionMask", 0, UINT8_MAX, &mOptionMask);
+        AddArgument("optionOverride", 0, UINT8_MAX, &mOptionOverride);
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeLevelControlClusterStepCommand(endPointId, mStepMode, mStepSize, mTransitionTime, mOptionsMask,
-                                                    mOptionsOverride);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0008) command (0x02) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::LevelControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.Step(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mStepMode, mStepSize, mTransitionTime,
+                            mOptionMask, mOptionOverride);
     }
 
 private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
     uint8_t mStepMode;
     uint8_t mStepSize;
     uint16_t mTransitionTime;
-    uint8_t mOptionsMask;
-    uint8_t mOptionsOverride;
+    uint8_t mOptionMask;
+    uint8_t mOptionOverride;
 };
 
 /*
  * Command StepWithOnOff
  */
-class LevelStepWithOnOff : public ModelCommand
+class LevelControlStepWithOnOff : public ModelCommand
 {
 public:
-    LevelStepWithOnOff() : ModelCommand("step-with-on-off", kLevelClusterId, 0x06)
+    LevelControlStepWithOnOff() : ModelCommand("step-with-on-off")
     {
         AddArgument("stepMode", 0, UINT8_MAX, &mStepMode);
         AddArgument("stepSize", 0, UINT8_MAX, &mStepSize);
@@ -5301,19 +5099,21 @@
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeLevelControlClusterStepWithOnOffCommand(endPointId, mStepMode, mStepSize, mTransitionTime);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0008) command (0x06) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::LevelControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.StepWithOnOff(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mStepMode, mStepSize,
+                                     mTransitionTime);
     }
 
 private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
     uint8_t mStepMode;
     uint8_t mStepSize;
     uint16_t mTransitionTime;
@@ -5322,104 +5122,114 @@
 /*
  * Command Stop
  */
-class LevelStop : public ModelCommand
+class LevelControlStop : public ModelCommand
 {
 public:
-    LevelStop() : ModelCommand("stop", kLevelClusterId, 0x03)
+    LevelControlStop() : ModelCommand("stop")
     {
-        AddArgument("optionsMask", 0, UINT8_MAX, &mOptionsMask);
-        AddArgument("optionsOverride", 0, UINT8_MAX, &mOptionsOverride);
+        AddArgument("optionMask", 0, UINT8_MAX, &mOptionMask);
+        AddArgument("optionOverride", 0, UINT8_MAX, &mOptionOverride);
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeLevelControlClusterStopCommand(endPointId, mOptionsMask, mOptionsOverride);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0008) command (0x03) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::LevelControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.Stop(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mOptionMask, mOptionOverride);
     }
 
 private:
-    uint8_t mOptionsMask;
-    uint8_t mOptionsOverride;
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    uint8_t mOptionMask;
+    uint8_t mOptionOverride;
 };
 
 /*
  * Command StopWithOnOff
  */
-class LevelStopWithOnOff : public ModelCommand
+class LevelControlStopWithOnOff : public ModelCommand
 {
 public:
-    LevelStopWithOnOff() : ModelCommand("stop-with-on-off", kLevelClusterId, 0x07) { ModelCommand::AddArguments(); }
+    LevelControlStopWithOnOff() : ModelCommand("stop-with-on-off") { ModelCommand::AddArguments(); }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeLevelControlClusterStopWithOnOffCommand(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0008) command (0x07) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::LevelControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.StopWithOnOff(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
- * Discover attributes
+ * Discover Attributes
  */
-class DiscoverLevelAttributes : public ModelCommand
+class DiscoverLevelControlAttributes : public ModelCommand
 {
 public:
-    DiscoverLevelAttributes() : ModelCommand("discover", kLevelClusterId, 0x0c) { ModelCommand::AddArguments(); }
+    DiscoverLevelControlAttributes() : ModelCommand("discover") { ModelCommand::AddArguments(); }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeLevelControlClusterDiscoverAttributes(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0000) command (0x0C) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::LevelControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.DiscoverAttributes(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: DiscoverAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DiscoverAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
  * Attribute CurrentLevel
  */
-class ReadLevelCurrentLevel : public ModelCommand
+class ReadLevelControlCurrentLevel : public ModelCommand
 {
 public:
-    ReadLevelCurrentLevel() : ModelCommand("read", kLevelClusterId, 0x00)
+    ReadLevelControlCurrentLevel() : ModelCommand("read")
     {
         AddArgument("attr-name", "current-level");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeLevelControlClusterReadCurrentLevelAttribute(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0008) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::LevelControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeCurrentLevel(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<Int8uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int8uAttributeCallback>(OnInt8uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
-class ReportLevelCurrentLevel : public ModelCommand
+class ReportLevelControlCurrentLevel : public ModelCommand
 {
 public:
-    ReportLevelCurrentLevel() : ModelCommand("report", kLevelClusterId, 0x06)
+    ReportLevelControlCurrentLevel() : ModelCommand("report")
     {
         AddArgument("attr-name", "current-level");
         AddArgument("min-interval", 0, UINT16_MAX, &mMinInterval);
@@ -5428,30 +5238,66 @@
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeLevelControlClusterReportCurrentLevelAttribute(endPointId, mMinInterval, mMaxInterval, mChange);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0008) command (0x06) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: ConfigureReportingResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ConfigureReportingResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::LevelControlCluster cluster;
+        cluster.Associate(device, endpointId);
+
+        CHIP_ERROR err = cluster.ReportAttributeCurrentLevel(onReportCallback->Cancel());
+        if (err != CHIP_NO_ERROR)
+        {
+            return err;
+        }
+
+        return cluster.ConfigureAttributeCurrentLevel(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mMinInterval,
+                                                      mMaxInterval, mChange);
     }
 
 private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    chip::Callback::Callback<Int8uAttributeCallback> * onReportCallback =
+        new chip::Callback::Callback<Int8uAttributeCallback>(OnInt8uAttributeResponse, this);
     uint16_t mMinInterval;
     uint16_t mMaxInterval;
     uint8_t mChange;
 };
 
+/*
+ * Attribute ClusterRevision
+ */
+class ReadLevelControlClusterRevision : public ModelCommand
+{
+public:
+    ReadLevelControlClusterRevision() : ModelCommand("read")
+    {
+        AddArgument("attr-name", "cluster-revision");
+        ModelCommand::AddArguments();
+    }
+
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
+    {
+        ChipLogProgress(chipTool, "Sending cluster (0x0008) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::LevelControlCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeClusterRevision(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
+    }
+
+private:
+    chip::Callback::Callback<Int16uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+};
+
 /*----------------------------------------------------------------------------*\
 | Cluster OnOff                                                       | 0x0006 |
 |------------------------------------------------------------------------------|
-| Responses:                                                          |        |
-|                                                                     |        |
-|------------------------------------------------------------------------------|
 | Commands:                                                           |        |
 | * Off                                                               |   0x00 |
 | * On                                                                |   0x01 |
@@ -5459,6 +5305,7 @@
 |------------------------------------------------------------------------------|
 | Attributes:                                                         |        |
 | * OnOff                                                             | 0x0000 |
+| * ClusterRevision                                                   | 0xFFFD |
 \*----------------------------------------------------------------------------*/
 
 /*
@@ -5467,16 +5314,22 @@
 class OnOffOff : public ModelCommand
 {
 public:
-    OnOffOff() : ModelCommand("off", kOnOffClusterId, 0x00) { ModelCommand::AddArguments(); }
+    OnOffOff() : ModelCommand("off") { ModelCommand::AddArguments(); }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override { return encodeOnOffClusterOffCommand(endPointId); }
-
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        ChipLogProgress(chipTool, "Sending cluster (0x0006) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::OnOffCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.Off(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
+
+private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
@@ -5485,16 +5338,22 @@
 class OnOffOn : public ModelCommand
 {
 public:
-    OnOffOn() : ModelCommand("on", kOnOffClusterId, 0x01) { ModelCommand::AddArguments(); }
+    OnOffOn() : ModelCommand("on") { ModelCommand::AddArguments(); }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override { return encodeOnOffClusterOnCommand(endPointId); }
-
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        ChipLogProgress(chipTool, "Sending cluster (0x0006) command (0x01) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::OnOffCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.On(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
+
+private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
@@ -5503,34 +5362,46 @@
 class OnOffToggle : public ModelCommand
 {
 public:
-    OnOffToggle() : ModelCommand("toggle", kOnOffClusterId, 0x02) { ModelCommand::AddArguments(); }
+    OnOffToggle() : ModelCommand("toggle") { ModelCommand::AddArguments(); }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override { return encodeOnOffClusterToggleCommand(endPointId); }
-
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        ChipLogProgress(chipTool, "Sending cluster (0x0006) command (0x02) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::OnOffCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.Toggle(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
+
+private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
- * Discover attributes
+ * Discover Attributes
  */
 class DiscoverOnOffAttributes : public ModelCommand
 {
 public:
-    DiscoverOnOffAttributes() : ModelCommand("discover", kOnOffClusterId, 0x0c) { ModelCommand::AddArguments(); }
+    DiscoverOnOffAttributes() : ModelCommand("discover") { ModelCommand::AddArguments(); }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override { return encodeOnOffClusterDiscoverAttributes(endPointId); }
-
-    // Global Response: DiscoverAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        DiscoverAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        ChipLogProgress(chipTool, "Sending cluster (0x0000) command (0x0C) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::OnOffCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.DiscoverAttributes(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
+
+private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
@@ -5539,26 +5410,32 @@
 class ReadOnOffOnOff : public ModelCommand
 {
 public:
-    ReadOnOffOnOff() : ModelCommand("read", kOnOffClusterId, 0x00)
+    ReadOnOffOnOff() : ModelCommand("read")
     {
         AddArgument("attr-name", "on-off");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override { return encodeOnOffClusterReadOnOffAttribute(endPointId); }
-
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        ChipLogProgress(chipTool, "Sending cluster (0x0006) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::OnOffCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeOnOff(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
+
+private:
+    chip::Callback::Callback<BooleanAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<BooleanAttributeCallback>(OnBooleanAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 class ReportOnOffOnOff : public ModelCommand
 {
 public:
-    ReportOnOffOnOff() : ModelCommand("report", kOnOffClusterId, 0x06)
+    ReportOnOffOnOff() : ModelCommand("report")
     {
         AddArgument("attr-name", "on-off");
         AddArgument("min-interval", 0, UINT16_MAX, &mMinInterval);
@@ -5566,35 +5443,65 @@
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeOnOffClusterReportOnOffAttribute(endPointId, mMinInterval, mMaxInterval);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0006) command (0x06) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: ConfigureReportingResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ConfigureReportingResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::OnOffCluster cluster;
+        cluster.Associate(device, endpointId);
+
+        CHIP_ERROR err = cluster.ReportAttributeOnOff(onReportCallback->Cancel());
+        if (err != CHIP_NO_ERROR)
+        {
+            return err;
+        }
+
+        return cluster.ConfigureAttributeOnOff(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mMinInterval,
+                                               mMaxInterval);
     }
 
 private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    chip::Callback::Callback<BooleanAttributeCallback> * onReportCallback =
+        new chip::Callback::Callback<BooleanAttributeCallback>(OnBooleanAttributeResponse, this);
     uint16_t mMinInterval;
     uint16_t mMaxInterval;
 };
 
+/*
+ * Attribute ClusterRevision
+ */
+class ReadOnOffClusterRevision : public ModelCommand
+{
+public:
+    ReadOnOffClusterRevision() : ModelCommand("read")
+    {
+        AddArgument("attr-name", "cluster-revision");
+        ModelCommand::AddArguments();
+    }
+
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
+    {
+        ChipLogProgress(chipTool, "Sending cluster (0x0006) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::OnOffCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeClusterRevision(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
+    }
+
+private:
+    chip::Callback::Callback<Int16uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+};
+
 /*----------------------------------------------------------------------------*\
 | Cluster Scenes                                                      | 0x0005 |
 |------------------------------------------------------------------------------|
-| Responses:                                                          |        |
-| * AddSceneResponse                                                  |   0x00 |
-| * GetSceneMembershipResponse                                        |   0x06 |
-| * RemoveAllScenesResponse                                           |   0x03 |
-| * RemoveSceneResponse                                               |   0x02 |
-| * StoreSceneResponse                                                |   0x04 |
-| * ViewSceneResponse                                                 |   0x01 |
-|                                                                     |        |
-|------------------------------------------------------------------------------|
 | Commands:                                                           |        |
 | * AddScene                                                          |   0x00 |
 | * GetSceneMembership                                                |   0x06 |
@@ -5610,266 +5517,47 @@
 | * CurrentGroup                                                      | 0x0002 |
 | * SceneValid                                                        | 0x0003 |
 | * NameSupport                                                       | 0x0004 |
+| * ClusterRevision                                                   | 0xFFFD |
 \*----------------------------------------------------------------------------*/
 
 /*
- * Command Response AddSceneResponse
- */
-class AddSceneResponse : public ModelCommandResponse
-{
-public:
-    AddSceneResponse() : ModelCommandResponse(0x00) {}
-
-    bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
-    {
-        bool success = true;
-        ChipLogProgress(chipTool, "AddSceneResponse (0x00):");
-
-        CHECK_MESSAGE_LENGTH(1);
-        uint8_t status = chip::Encoding::Read8(message); // zclStatus
-        success        = CheckStatus(status);
-
-        CHECK_MESSAGE_LENGTH(2);
-        uint16_t groupId = chip::Encoding::LittleEndian::Read16(message); // SGroupId
-        ChipLogProgress(chipTool, "  %s: 0x%04x", "groupId", groupId);
-
-        CHECK_MESSAGE_LENGTH(1);
-        uint8_t sceneId = chip::Encoding::Read8(message); // uint8
-        ChipLogProgress(chipTool, "  %s: 0x%02x", "sceneId", sceneId);
-
-        return success;
-    }
-};
-
-/*
- * Command Response GetSceneMembershipResponse
- */
-class GetSceneMembershipResponse : public ModelCommandResponse
-{
-public:
-    GetSceneMembershipResponse() : ModelCommandResponse(0x06) {}
-
-    bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
-    {
-        bool success = true;
-        ChipLogProgress(chipTool, "GetSceneMembershipResponse (0x06):");
-
-        CHECK_MESSAGE_LENGTH(1);
-        uint8_t status = chip::Encoding::Read8(message); // zclStatus
-        success        = CheckStatus(status);
-
-        CHECK_MESSAGE_LENGTH(1);
-        uint8_t capacity = chip::Encoding::Read8(message); // uint8
-        ChipLogProgress(chipTool, "  %s: 0x%02x", "capacity", capacity);
-
-        CHECK_MESSAGE_LENGTH(2);
-        uint16_t groupId = chip::Encoding::LittleEndian::Read16(message); // SGroupId
-        ChipLogProgress(chipTool, "  %s: 0x%04x", "groupId", groupId);
-
-        // uint8_t uint8[]
-        while (messageLen)
-        {
-            CHECK_MESSAGE_LENGTH(1);
-            uint8_t sceneList = chip::Encoding::Read8(message); // uint8
-            ChipLogProgress(chipTool, "  %s: 0x%02x", "sceneList", sceneList);
-        }
-
-        return success;
-    }
-};
-
-/*
- * Command Response RemoveAllScenesResponse
- */
-class RemoveAllScenesResponse : public ModelCommandResponse
-{
-public:
-    RemoveAllScenesResponse() : ModelCommandResponse(0x03) {}
-
-    bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
-    {
-        bool success = true;
-        ChipLogProgress(chipTool, "RemoveAllScenesResponse (0x03):");
-
-        CHECK_MESSAGE_LENGTH(1);
-        uint8_t status = chip::Encoding::Read8(message); // zclStatus
-        success        = CheckStatus(status);
-
-        CHECK_MESSAGE_LENGTH(2);
-        uint16_t groupId = chip::Encoding::LittleEndian::Read16(message); // SGroupId
-        ChipLogProgress(chipTool, "  %s: 0x%04x", "groupId", groupId);
-
-        return success;
-    }
-};
-
-/*
- * Command Response RemoveSceneResponse
- */
-class RemoveSceneResponse : public ModelCommandResponse
-{
-public:
-    RemoveSceneResponse() : ModelCommandResponse(0x02) {}
-
-    bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
-    {
-        bool success = true;
-        ChipLogProgress(chipTool, "RemoveSceneResponse (0x02):");
-
-        CHECK_MESSAGE_LENGTH(1);
-        uint8_t status = chip::Encoding::Read8(message); // zclStatus
-        success        = CheckStatus(status);
-
-        CHECK_MESSAGE_LENGTH(2);
-        uint16_t groupId = chip::Encoding::LittleEndian::Read16(message); // SGroupId
-        ChipLogProgress(chipTool, "  %s: 0x%04x", "groupId", groupId);
-
-        CHECK_MESSAGE_LENGTH(1);
-        uint8_t sceneId = chip::Encoding::Read8(message); // uint8
-        ChipLogProgress(chipTool, "  %s: 0x%02x", "sceneId", sceneId);
-
-        return success;
-    }
-};
-
-/*
- * Command Response StoreSceneResponse
- */
-class StoreSceneResponse : public ModelCommandResponse
-{
-public:
-    StoreSceneResponse() : ModelCommandResponse(0x04) {}
-
-    bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
-    {
-        bool success = true;
-        ChipLogProgress(chipTool, "StoreSceneResponse (0x04):");
-
-        CHECK_MESSAGE_LENGTH(1);
-        uint8_t status = chip::Encoding::Read8(message); // zclStatus
-        success        = CheckStatus(status);
-
-        CHECK_MESSAGE_LENGTH(2);
-        uint16_t groupId = chip::Encoding::LittleEndian::Read16(message); // SGroupId
-        ChipLogProgress(chipTool, "  %s: 0x%04x", "groupId", groupId);
-
-        CHECK_MESSAGE_LENGTH(1);
-        uint8_t sceneId = chip::Encoding::Read8(message); // uint8
-        ChipLogProgress(chipTool, "  %s: 0x%02x", "sceneId", sceneId);
-
-        return success;
-    }
-};
-
-/*
- * Command Response ViewSceneResponse
- */
-class ViewSceneResponse : public ModelCommandResponse
-{
-public:
-    ViewSceneResponse() : ModelCommandResponse(0x01) {}
-
-    bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
-    {
-        bool success = true;
-        ChipLogProgress(chipTool, "ViewSceneResponse (0x01):");
-
-        CHECK_MESSAGE_LENGTH(1);
-        uint8_t status = chip::Encoding::Read8(message); // zclStatus
-        success        = CheckStatus(status);
-
-        CHECK_MESSAGE_LENGTH(2);
-        uint16_t groupId = chip::Encoding::LittleEndian::Read16(message); // SGroupId
-        ChipLogProgress(chipTool, "  %s: 0x%04x", "groupId", groupId);
-
-        CHECK_MESSAGE_LENGTH(1);
-        uint8_t sceneId = chip::Encoding::Read8(message); // uint8
-        ChipLogProgress(chipTool, "  %s: 0x%02x", "sceneId", sceneId);
-
-        CHECK_MESSAGE_LENGTH(2);
-        uint16_t transitionTime = chip::Encoding::LittleEndian::Read16(message); // uint16
-        ChipLogProgress(chipTool, "  %s: 0x%04x", "transitionTime", transitionTime);
-
-        CHECK_MESSAGE_LENGTH(1);
-        {
-            uint8_t sceneNameLen = chip::Encoding::Read8(message);                   // SSceneName
-            ChipLogProgress(chipTool, "  %s: 0x%02x", "sceneNameLen", sceneNameLen); // SSceneName
-
-            // FIXME Strings are not supported yet. For the moment the code just checks that
-            // there is enough bytes in the buffer
-            CHECK_MESSAGE_LENGTH(sceneNameLen);
-            message += sceneNameLen;
-        }
-
-        // struct SExtensionFieldSetList[]
-        while (messageLen)
-        {
-            CHECK_MESSAGE_LENGTH(2);
-            uint16_t clusterId = chip::Encoding::LittleEndian::Read16(message); // uint16
-            ChipLogProgress(chipTool, "  %s: 0x%04x", "clusterId", clusterId);
-
-            CHECK_MESSAGE_LENGTH(1);
-            {
-                uint8_t extensionFieldSetLen = chip::Encoding::Read8(message);                           // octstr
-                ChipLogProgress(chipTool, "  %s: 0x%02x", "extensionFieldSetLen", extensionFieldSetLen); // octstr
-
-                // FIXME Strings are not supported yet. For the moment the code just checks that
-                // there is enough bytes in the buffer
-                CHECK_MESSAGE_LENGTH(extensionFieldSetLen);
-                message += extensionFieldSetLen;
-            }
-        }
-
-        return success;
-    }
-};
-
-/*
  * Command AddScene
  */
 class ScenesAddScene : public ModelCommand
 {
 public:
-    ScenesAddScene() : ModelCommand("add-scene", kScenesClusterId, 0x00)
+    ScenesAddScene() : ModelCommand("add-scene")
     {
-        AddArgument("groupID", 0, std::numeric_limits<chip::GroupId>::max(), &mGroupID);
-        AddArgument("sceneID", 0, UINT8_MAX, &mSceneID);
+        AddArgument("groupId", 0, UINT16_MAX, &mGroupId);
+        AddArgument("sceneId", 0, UINT8_MAX, &mSceneId);
         AddArgument("transitionTime", 0, UINT16_MAX, &mTransitionTime);
         AddArgument("sceneName", &mSceneName);
-        // extensionFieldSets is an array, but since chip-tool does not support variable
-        // number of arguments, only a single instance is supported.
         AddArgument("clusterId", 0, UINT16_MAX, &mClusterId);
         AddArgument("length", 0, UINT8_MAX, &mLength);
         AddArgument("value", 0, UINT8_MAX, &mValue);
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeScenesClusterAddSceneCommand(endPointId, mGroupID, mSceneID, mTransitionTime, mSceneName, mClusterId, mLength,
-                                                  mValue);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0005) command (0x00) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
-
-    // Specific Response: AddSceneResponse
-    bool HandleSpecificResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        AddSceneResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::ScenesCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.AddScene(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mGroupId, mSceneId, mTransitionTime,
+                                mSceneName, mClusterId, mLength, mValue);
     }
 
 private:
-    chip::GroupId mGroupID;
-    uint8_t mSceneID;
+    chip::Callback::Callback<ScenesClusterAddSceneResponseCallback> * onSuccessCallback =
+        new chip::Callback::Callback<ScenesClusterAddSceneResponseCallback>(OnScenesClusterAddSceneResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    uint16_t mGroupId;
+    uint8_t mSceneId;
     uint16_t mTransitionTime;
     char * mSceneName;
-    uint16_t mClusterId;
+    chip::ClusterId mClusterId;
     uint8_t mLength;
     uint8_t mValue;
 };
@@ -5880,33 +5568,28 @@
 class ScenesGetSceneMembership : public ModelCommand
 {
 public:
-    ScenesGetSceneMembership() : ModelCommand("get-scene-membership", kScenesClusterId, 0x06)
+    ScenesGetSceneMembership() : ModelCommand("get-scene-membership")
     {
-        AddArgument("groupID", 0, std::numeric_limits<chip::GroupId>::max(), &mGroupID);
+        AddArgument("groupId", 0, UINT16_MAX, &mGroupId);
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeScenesClusterGetSceneMembershipCommand(endPointId, mGroupID);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0005) command (0x06) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
-
-    // Specific Response: GetSceneMembershipResponse
-    bool HandleSpecificResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        GetSceneMembershipResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::ScenesCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.GetSceneMembership(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mGroupId);
     }
 
 private:
-    chip::GroupId mGroupID;
+    chip::Callback::Callback<ScenesClusterGetSceneMembershipResponseCallback> * onSuccessCallback =
+        new chip::Callback::Callback<ScenesClusterGetSceneMembershipResponseCallback>(OnScenesClusterGetSceneMembershipResponse,
+                                                                                      this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    uint16_t mGroupId;
 };
 
 /*
@@ -5915,29 +5598,30 @@
 class ScenesRecallScene : public ModelCommand
 {
 public:
-    ScenesRecallScene() : ModelCommand("recall-scene", kScenesClusterId, 0x05)
+    ScenesRecallScene() : ModelCommand("recall-scene")
     {
-        AddArgument("groupID", 0, std::numeric_limits<chip::GroupId>::max(), &mGroupID);
-        AddArgument("sceneID", 0, UINT8_MAX, &mSceneID);
+        AddArgument("groupId", 0, UINT16_MAX, &mGroupId);
+        AddArgument("sceneId", 0, UINT8_MAX, &mSceneId);
         AddArgument("transitionTime", 0, UINT16_MAX, &mTransitionTime);
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeScenesClusterRecallSceneCommand(endPointId, mGroupID, mSceneID, mTransitionTime);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0005) command (0x05) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::ScenesCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.RecallScene(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mGroupId, mSceneId, mTransitionTime);
     }
 
 private:
-    chip::GroupId mGroupID;
-    uint8_t mSceneID;
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    uint16_t mGroupId;
+    uint8_t mSceneId;
     uint16_t mTransitionTime;
 };
 
@@ -5947,33 +5631,27 @@
 class ScenesRemoveAllScenes : public ModelCommand
 {
 public:
-    ScenesRemoveAllScenes() : ModelCommand("remove-all-scenes", kScenesClusterId, 0x03)
+    ScenesRemoveAllScenes() : ModelCommand("remove-all-scenes")
     {
-        AddArgument("groupID", 0, std::numeric_limits<chip::GroupId>::max(), &mGroupID);
+        AddArgument("groupId", 0, UINT16_MAX, &mGroupId);
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeScenesClusterRemoveAllScenesCommand(endPointId, mGroupID);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0005) command (0x03) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
-
-    // Specific Response: RemoveAllScenesResponse
-    bool HandleSpecificResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        RemoveAllScenesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::ScenesCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.RemoveAllScenes(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mGroupId);
     }
 
 private:
-    chip::GroupId mGroupID;
+    chip::Callback::Callback<ScenesClusterRemoveAllScenesResponseCallback> * onSuccessCallback =
+        new chip::Callback::Callback<ScenesClusterRemoveAllScenesResponseCallback>(OnScenesClusterRemoveAllScenesResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    uint16_t mGroupId;
 };
 
 /*
@@ -5982,35 +5660,29 @@
 class ScenesRemoveScene : public ModelCommand
 {
 public:
-    ScenesRemoveScene() : ModelCommand("remove-scene", kScenesClusterId, 0x02)
+    ScenesRemoveScene() : ModelCommand("remove-scene")
     {
-        AddArgument("groupID", 0, std::numeric_limits<chip::GroupId>::max(), &mGroupID);
-        AddArgument("sceneID", 0, UINT8_MAX, &mSceneID);
+        AddArgument("groupId", 0, UINT16_MAX, &mGroupId);
+        AddArgument("sceneId", 0, UINT8_MAX, &mSceneId);
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeScenesClusterRemoveSceneCommand(endPointId, mGroupID, mSceneID);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0005) command (0x02) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
-
-    // Specific Response: RemoveSceneResponse
-    bool HandleSpecificResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        RemoveSceneResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::ScenesCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.RemoveScene(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mGroupId, mSceneId);
     }
 
 private:
-    chip::GroupId mGroupID;
-    uint8_t mSceneID;
+    chip::Callback::Callback<ScenesClusterRemoveSceneResponseCallback> * onSuccessCallback =
+        new chip::Callback::Callback<ScenesClusterRemoveSceneResponseCallback>(OnScenesClusterRemoveSceneResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    uint16_t mGroupId;
+    uint8_t mSceneId;
 };
 
 /*
@@ -6019,35 +5691,29 @@
 class ScenesStoreScene : public ModelCommand
 {
 public:
-    ScenesStoreScene() : ModelCommand("store-scene", kScenesClusterId, 0x04)
+    ScenesStoreScene() : ModelCommand("store-scene")
     {
-        AddArgument("groupID", 0, std::numeric_limits<chip::GroupId>::max(), &mGroupID);
-        AddArgument("sceneID", 0, UINT8_MAX, &mSceneID);
+        AddArgument("groupId", 0, UINT16_MAX, &mGroupId);
+        AddArgument("sceneId", 0, UINT8_MAX, &mSceneId);
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeScenesClusterStoreSceneCommand(endPointId, mGroupID, mSceneID);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0005) command (0x04) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
-
-    // Specific Response: StoreSceneResponse
-    bool HandleSpecificResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        StoreSceneResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::ScenesCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.StoreScene(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mGroupId, mSceneId);
     }
 
 private:
-    chip::GroupId mGroupID;
-    uint8_t mSceneID;
+    chip::Callback::Callback<ScenesClusterStoreSceneResponseCallback> * onSuccessCallback =
+        new chip::Callback::Callback<ScenesClusterStoreSceneResponseCallback>(OnScenesClusterStoreSceneResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    uint16_t mGroupId;
+    uint8_t mSceneId;
 };
 
 /*
@@ -6056,53 +5722,53 @@
 class ScenesViewScene : public ModelCommand
 {
 public:
-    ScenesViewScene() : ModelCommand("view-scene", kScenesClusterId, 0x01)
+    ScenesViewScene() : ModelCommand("view-scene")
     {
-        AddArgument("groupID", 0, std::numeric_limits<chip::GroupId>::max(), &mGroupID);
-        AddArgument("sceneID", 0, UINT8_MAX, &mSceneID);
+        AddArgument("groupId", 0, UINT16_MAX, &mGroupId);
+        AddArgument("sceneId", 0, UINT8_MAX, &mSceneId);
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeScenesClusterViewSceneCommand(endPointId, mGroupID, mSceneID);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0005) command (0x01) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: DefaultResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DefaultResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
-
-    // Specific Response: ViewSceneResponse
-    bool HandleSpecificResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ViewSceneResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::ScenesCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ViewScene(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mGroupId, mSceneId);
     }
 
 private:
-    chip::GroupId mGroupID;
-    uint8_t mSceneID;
+    chip::Callback::Callback<ScenesClusterViewSceneResponseCallback> * onSuccessCallback =
+        new chip::Callback::Callback<ScenesClusterViewSceneResponseCallback>(OnScenesClusterViewSceneResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    uint16_t mGroupId;
+    uint8_t mSceneId;
 };
 
 /*
- * Discover attributes
+ * Discover Attributes
  */
 class DiscoverScenesAttributes : public ModelCommand
 {
 public:
-    DiscoverScenesAttributes() : ModelCommand("discover", kScenesClusterId, 0x0c) { ModelCommand::AddArguments(); }
+    DiscoverScenesAttributes() : ModelCommand("discover") { ModelCommand::AddArguments(); }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override { return encodeScenesClusterDiscoverAttributes(endPointId); }
-
-    // Global Response: DiscoverAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        DiscoverAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        ChipLogProgress(chipTool, "Sending cluster (0x0000) command (0x0C) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ScenesCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.DiscoverAttributes(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
+
+private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
@@ -6111,20 +5777,26 @@
 class ReadScenesSceneCount : public ModelCommand
 {
 public:
-    ReadScenesSceneCount() : ModelCommand("read", kScenesClusterId, 0x00)
+    ReadScenesSceneCount() : ModelCommand("read")
     {
         AddArgument("attr-name", "scene-count");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override { return encodeScenesClusterReadSceneCountAttribute(endPointId); }
-
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        ChipLogProgress(chipTool, "Sending cluster (0x0005) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ScenesCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeSceneCount(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
+
+private:
+    chip::Callback::Callback<Int8uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int8uAttributeCallback>(OnInt8uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
@@ -6133,23 +5805,26 @@
 class ReadScenesCurrentScene : public ModelCommand
 {
 public:
-    ReadScenesCurrentScene() : ModelCommand("read", kScenesClusterId, 0x00)
+    ReadScenesCurrentScene() : ModelCommand("read")
     {
         AddArgument("attr-name", "current-scene");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeScenesClusterReadCurrentSceneAttribute(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0005) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ScenesCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeCurrentScene(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<Int8uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int8uAttributeCallback>(OnInt8uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
@@ -6158,23 +5833,26 @@
 class ReadScenesCurrentGroup : public ModelCommand
 {
 public:
-    ReadScenesCurrentGroup() : ModelCommand("read", kScenesClusterId, 0x00)
+    ReadScenesCurrentGroup() : ModelCommand("read")
     {
         AddArgument("attr-name", "current-group");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeScenesClusterReadCurrentGroupAttribute(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0005) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ScenesCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeCurrentGroup(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<Int16uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
@@ -6183,20 +5861,26 @@
 class ReadScenesSceneValid : public ModelCommand
 {
 public:
-    ReadScenesSceneValid() : ModelCommand("read", kScenesClusterId, 0x00)
+    ReadScenesSceneValid() : ModelCommand("read")
     {
         AddArgument("attr-name", "scene-valid");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override { return encodeScenesClusterReadSceneValidAttribute(endPointId); }
-
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        ChipLogProgress(chipTool, "Sending cluster (0x0005) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ScenesCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeSceneValid(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
+
+private:
+    chip::Callback::Callback<BooleanAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<BooleanAttributeCallback>(OnBooleanAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
@@ -6205,61 +5889,90 @@
 class ReadScenesNameSupport : public ModelCommand
 {
 public:
-    ReadScenesNameSupport() : ModelCommand("read", kScenesClusterId, 0x00)
+    ReadScenesNameSupport() : ModelCommand("read")
     {
         AddArgument("attr-name", "name-support");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeScenesClusterReadNameSupportAttribute(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0005) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ScenesCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeNameSupport(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
+private:
+    chip::Callback::Callback<Int8uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int8uAttributeCallback>(OnInt8uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+};
+
+/*
+ * Attribute ClusterRevision
+ */
+class ReadScenesClusterRevision : public ModelCommand
+{
+public:
+    ReadScenesClusterRevision() : ModelCommand("read")
     {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        AddArgument("attr-name", "cluster-revision");
+        ModelCommand::AddArguments();
     }
+
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
+    {
+        ChipLogProgress(chipTool, "Sending cluster (0x0005) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::ScenesCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeClusterRevision(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
+    }
+
+private:
+    chip::Callback::Callback<Int16uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*----------------------------------------------------------------------------*\
 | Cluster TemperatureMeasurement                                      | 0x0402 |
 |------------------------------------------------------------------------------|
-| Responses:                                                          |        |
-|                                                                     |        |
-|------------------------------------------------------------------------------|
 | Commands:                                                           |        |
 |------------------------------------------------------------------------------|
 | Attributes:                                                         |        |
 | * MeasuredValue                                                     | 0x0000 |
 | * MinMeasuredValue                                                  | 0x0001 |
 | * MaxMeasuredValue                                                  | 0x0002 |
+| * ClusterRevision                                                   | 0xFFFD |
 \*----------------------------------------------------------------------------*/
 
 /*
- * Discover attributes
+ * Discover Attributes
  */
 class DiscoverTemperatureMeasurementAttributes : public ModelCommand
 {
 public:
-    DiscoverTemperatureMeasurementAttributes() : ModelCommand("discover", kTempMeasurementClusterId, 0x0c)
+    DiscoverTemperatureMeasurementAttributes() : ModelCommand("discover") { ModelCommand::AddArguments(); }
+
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        ModelCommand::AddArguments();
+        ChipLogProgress(chipTool, "Sending cluster (0x0000) command (0x0C) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::TemperatureMeasurementCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.DiscoverAttributes(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
-    {
-        return encodeTemperatureMeasurementClusterDiscoverAttributes(endPointId);
-    }
-
-    // Global Response: DiscoverAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        DiscoverAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
@@ -6268,29 +5981,32 @@
 class ReadTemperatureMeasurementMeasuredValue : public ModelCommand
 {
 public:
-    ReadTemperatureMeasurementMeasuredValue() : ModelCommand("read", kTempMeasurementClusterId, 0x00)
+    ReadTemperatureMeasurementMeasuredValue() : ModelCommand("read")
     {
         AddArgument("attr-name", "measured-value");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeTemperatureMeasurementClusterReadMeasuredValueAttribute(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0402) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::TemperatureMeasurementCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeMeasuredValue(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<Int16sAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int16sAttributeCallback>(OnInt16sAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 class ReportTemperatureMeasurementMeasuredValue : public ModelCommand
 {
 public:
-    ReportTemperatureMeasurementMeasuredValue() : ModelCommand("report", kTempMeasurementClusterId, 0x06)
+    ReportTemperatureMeasurementMeasuredValue() : ModelCommand("report")
     {
         AddArgument("attr-name", "measured-value");
         AddArgument("min-interval", 0, UINT16_MAX, &mMinInterval);
@@ -6299,19 +6015,30 @@
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeTemperatureMeasurementClusterReportMeasuredValueAttribute(endPointId, mMinInterval, mMaxInterval, mChange);
-    }
+        ChipLogProgress(chipTool, "Sending cluster (0x0402) command (0x06) on endpoint %" PRIu16, endpointId);
 
-    // Global Response: ConfigureReportingResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ConfigureReportingResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        chip::Controller::TemperatureMeasurementCluster cluster;
+        cluster.Associate(device, endpointId);
+
+        CHIP_ERROR err = cluster.ReportAttributeMeasuredValue(onReportCallback->Cancel());
+        if (err != CHIP_NO_ERROR)
+        {
+            return err;
+        }
+
+        return cluster.ConfigureAttributeMeasuredValue(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mMinInterval,
+                                                       mMaxInterval, mChange);
     }
 
 private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback =
+        new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    chip::Callback::Callback<Int16sAttributeCallback> * onReportCallback =
+        new chip::Callback::Callback<Int16sAttributeCallback>(OnInt16sAttributeResponse, this);
     uint16_t mMinInterval;
     uint16_t mMaxInterval;
     int16_t mChange;
@@ -6323,23 +6050,26 @@
 class ReadTemperatureMeasurementMinMeasuredValue : public ModelCommand
 {
 public:
-    ReadTemperatureMeasurementMinMeasuredValue() : ModelCommand("read", kTempMeasurementClusterId, 0x00)
+    ReadTemperatureMeasurementMinMeasuredValue() : ModelCommand("read")
     {
         AddArgument("attr-name", "min-measured-value");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeTemperatureMeasurementClusterReadMinMeasuredValueAttribute(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0402) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::TemperatureMeasurementCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeMinMeasuredValue(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
-    {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
-    }
+private:
+    chip::Callback::Callback<Int16sAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int16sAttributeCallback>(OnInt16sAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*
@@ -6348,23 +6078,54 @@
 class ReadTemperatureMeasurementMaxMeasuredValue : public ModelCommand
 {
 public:
-    ReadTemperatureMeasurementMaxMeasuredValue() : ModelCommand("read", kTempMeasurementClusterId, 0x00)
+    ReadTemperatureMeasurementMaxMeasuredValue() : ModelCommand("read")
     {
         AddArgument("attr-name", "max-measured-value");
         ModelCommand::AddArguments();
     }
 
-    PacketBufferHandle EncodeCommand(uint8_t endPointId) override
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
     {
-        return encodeTemperatureMeasurementClusterReadMaxMeasuredValueAttribute(endPointId);
+        ChipLogProgress(chipTool, "Sending cluster (0x0402) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::TemperatureMeasurementCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeMaxMeasuredValue(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
     }
 
-    // Global Response: ReadAttributesResponse
-    bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
+private:
+    chip::Callback::Callback<Int16sAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int16sAttributeCallback>(OnInt16sAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+};
+
+/*
+ * Attribute ClusterRevision
+ */
+class ReadTemperatureMeasurementClusterRevision : public ModelCommand
+{
+public:
+    ReadTemperatureMeasurementClusterRevision() : ModelCommand("read")
     {
-        ReadAttributesResponse response;
-        return response.HandleCommandResponse(commandId, message, messageLen);
+        AddArgument("attr-name", "cluster-revision");
+        ModelCommand::AddArguments();
     }
+
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
+    {
+        ChipLogProgress(chipTool, "Sending cluster (0x0402) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::TemperatureMeasurementCluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttributeClusterRevision(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
+    }
+
+private:
+    chip::Callback::Callback<Int16uAttributeCallback> * onSuccessCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
+        new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
 };
 
 /*----------------------------------------------------------------------------*\
@@ -6375,27 +6136,38 @@
     const char * clusterName = "BarrierControl";
 
     commands_list clusterCommands = {
-        make_unique<BarrierControlGoToPercent>(),         make_unique<BarrierControlStop>(),
-        make_unique<DiscoverBarrierControlAttributes>(),  make_unique<ReadBarrierControlMovingState>(),
-        make_unique<ReadBarrierControlSafetyStatus>(),    make_unique<ReadBarrierControlCapabilities>(),
-        make_unique<ReadBarrierControlBarrierPosition>(),
+        make_unique<BarrierControlBarrierControlGoToPercent>(), make_unique<BarrierControlBarrierControlStop>(),
+        make_unique<DiscoverBarrierControlAttributes>(),        make_unique<ReadBarrierControlBarrierMovingState>(),
+        make_unique<ReadBarrierControlBarrierSafetyStatus>(),   make_unique<ReadBarrierControlBarrierCapabilities>(),
+        make_unique<ReadBarrierControlBarrierPosition>(),       make_unique<ReadBarrierControlClusterRevision>(),
     };
 
     commands.Register(clusterName, clusterCommands);
 }
-
 void registerClusterBasic(Commands & commands)
 {
     const char * clusterName = "Basic";
 
     commands_list clusterCommands = {
-        make_unique<BasicResetToFactoryDefaults>(), make_unique<BasicMfgSpecificPing>(), make_unique<DiscoverBasicAttributes>(),
-        make_unique<ReadBasicZclVersion>(),         make_unique<ReadBasicPowerSource>(),
+        make_unique<BasicMfgSpecificPing>(), make_unique<BasicResetToFactoryDefaults>(), make_unique<DiscoverBasicAttributes>(),
+        make_unique<ReadBasicZclVersion>(),  make_unique<ReadBasicPowerSource>(),        make_unique<ReadBasicClusterRevision>(),
     };
 
     commands.Register(clusterName, clusterCommands);
 }
+void registerClusterBinding(Commands & commands)
+{
+    const char * clusterName = "Binding";
 
+    commands_list clusterCommands = {
+        make_unique<BindingBind>(),
+        make_unique<BindingUnbind>(),
+        make_unique<DiscoverBindingAttributes>(),
+        make_unique<ReadBindingClusterRevision>(),
+    };
+
+    commands.Register(clusterName, clusterCommands);
+}
 void registerClusterColorControl(Commands & commands)
 {
     const char * clusterName = "ColorControl";
@@ -6425,9 +6197,13 @@
         make_unique<ReportColorControlCurrentX>(),
         make_unique<ReadColorControlCurrentY>(),
         make_unique<ReportColorControlCurrentY>(),
+        make_unique<ReadColorControlDriftCompensation>(),
+        make_unique<ReadColorControlCompensationText>(),
         make_unique<ReadColorControlColorTemperature>(),
         make_unique<ReportColorControlColorTemperature>(),
         make_unique<ReadColorControlColorMode>(),
+        make_unique<ReadColorControlColorControlOptions>(),
+        make_unique<WriteColorControlColorControlOptions>(),
         make_unique<ReadColorControlNumberOfPrimaries>(),
         make_unique<ReadColorControlPrimary1X>(),
         make_unique<ReadColorControlPrimary1Y>(),
@@ -6447,6 +6223,28 @@
         make_unique<ReadColorControlPrimary6X>(),
         make_unique<ReadColorControlPrimary6Y>(),
         make_unique<ReadColorControlPrimary6Intensity>(),
+        make_unique<ReadColorControlWhitePointX>(),
+        make_unique<WriteColorControlWhitePointX>(),
+        make_unique<ReadColorControlWhitePointY>(),
+        make_unique<WriteColorControlWhitePointY>(),
+        make_unique<ReadColorControlColorPointRX>(),
+        make_unique<WriteColorControlColorPointRX>(),
+        make_unique<ReadColorControlColorPointRY>(),
+        make_unique<WriteColorControlColorPointRY>(),
+        make_unique<ReadColorControlColorPointRIntensity>(),
+        make_unique<WriteColorControlColorPointRIntensity>(),
+        make_unique<ReadColorControlColorPointGX>(),
+        make_unique<WriteColorControlColorPointGX>(),
+        make_unique<ReadColorControlColorPointGY>(),
+        make_unique<WriteColorControlColorPointGY>(),
+        make_unique<ReadColorControlColorPointGIntensity>(),
+        make_unique<WriteColorControlColorPointGIntensity>(),
+        make_unique<ReadColorControlColorPointBX>(),
+        make_unique<WriteColorControlColorPointBX>(),
+        make_unique<ReadColorControlColorPointBY>(),
+        make_unique<WriteColorControlColorPointBY>(),
+        make_unique<ReadColorControlColorPointBIntensity>(),
+        make_unique<WriteColorControlColorPointBIntensity>(),
         make_unique<ReadColorControlEnhancedCurrentHue>(),
         make_unique<ReadColorControlEnhancedColorMode>(),
         make_unique<ReadColorControlColorLoopActive>(),
@@ -6457,11 +6255,12 @@
         make_unique<ReadColorControlColorTempPhysicalMax>(),
         make_unique<ReadColorControlCoupleColorTempToLevelMinMireds>(),
         make_unique<ReadColorControlStartUpColorTemperatureMireds>(),
+        make_unique<WriteColorControlStartUpColorTemperatureMireds>(),
+        make_unique<ReadColorControlClusterRevision>(),
     };
 
     commands.Register(clusterName, clusterCommands);
 }
-
 void registerClusterDoorLock(Commands & commands)
 {
     const char * clusterName = "DoorLock";
@@ -6475,6 +6274,7 @@
         make_unique<DoorLockClearWeekdaySchedule>(),
         make_unique<DoorLockClearYeardaySchedule>(),
         make_unique<DoorLockGetHolidaySchedule>(),
+        make_unique<DoorLockGetLogRecord>(),
         make_unique<DoorLockGetPin>(),
         make_unique<DoorLockGetRfid>(),
         make_unique<DoorLockGetUserType>(),
@@ -6494,109 +6294,100 @@
         make_unique<ReportDoorLockLockState>(),
         make_unique<ReadDoorLockLockType>(),
         make_unique<ReadDoorLockActuatorEnabled>(),
+        make_unique<ReadDoorLockClusterRevision>(),
     };
 
     commands.Register(clusterName, clusterCommands);
 }
-
 void registerClusterGroups(Commands & commands)
 {
     const char * clusterName = "Groups";
 
     commands_list clusterCommands = {
-        make_unique<GroupsAddGroup>(),           make_unique<GroupsAddGroupIfIdentifying>(),
-        make_unique<GroupsGetGroupMembership>(), make_unique<GroupsRemoveAllGroups>(),
-        make_unique<GroupsRemoveGroup>(),        make_unique<GroupsViewGroup>(),
-        make_unique<DiscoverGroupsAttributes>(), make_unique<ReadGroupsNameSupport>(),
+        make_unique<GroupsAddGroup>(),
+        make_unique<GroupsAddGroupIfIdentifying>(),
+        make_unique<GroupsGetGroupMembership>(),
+        make_unique<GroupsRemoveAllGroups>(),
+        make_unique<GroupsRemoveGroup>(),
+        make_unique<GroupsViewGroup>(),
+        make_unique<DiscoverGroupsAttributes>(),
+        make_unique<ReadGroupsNameSupport>(),
+        make_unique<ReadGroupsClusterRevision>(),
     };
 
     commands.Register(clusterName, clusterCommands);
 }
-
-void registerClusterIasZone(Commands & commands)
-{
-    const char * clusterName = "IasZone";
-
-    commands_list clusterCommands = {
-        make_unique<DiscoverIasZoneAttributes>(), make_unique<ReadIasZoneZoneState>(),     make_unique<ReadIasZoneZoneType>(),
-        make_unique<ReadIasZoneZoneStatus>(),     make_unique<ReadIasZoneIasCieAddress>(), make_unique<WriteIasZoneIasCieAddress>(),
-        make_unique<ReadIasZoneZoneID>(),
-    };
-
-    commands.Register(clusterName, clusterCommands);
-}
-
 void registerClusterIdentify(Commands & commands)
 {
     const char * clusterName = "Identify";
 
     commands_list clusterCommands = {
-        make_unique<IdentifyIdentify>(),
-        make_unique<IdentifyIdentifyQuery>(),
-        make_unique<DiscoverIdentifyAttributes>(),
-        make_unique<ReadIdentifyIdentifyTime>(),
+        make_unique<IdentifyIdentify>(),           make_unique<IdentifyIdentifyQuery>(),
+        make_unique<DiscoverIdentifyAttributes>(), make_unique<ReadIdentifyIdentifyTime>(),
+        make_unique<WriteIdentifyIdentifyTime>(),  make_unique<ReadIdentifyClusterRevision>(),
     };
 
     commands.Register(clusterName, clusterCommands);
 }
-
-void registerClusterLevel(Commands & commands)
+void registerClusterLevelControl(Commands & commands)
 {
     const char * clusterName = "LevelControl";
 
     commands_list clusterCommands = {
-        make_unique<LevelMove>(),
-        make_unique<LevelMoveToLevel>(),
-        make_unique<LevelMoveToLevelWithOnOff>(),
-        make_unique<LevelMoveWithOnOff>(),
-        make_unique<LevelStep>(),
-        make_unique<LevelStepWithOnOff>(),
-        make_unique<LevelStop>(),
-        make_unique<LevelStopWithOnOff>(),
-        make_unique<DiscoverLevelAttributes>(),
-        make_unique<ReadLevelCurrentLevel>(),
-        make_unique<ReportLevelCurrentLevel>(),
+        make_unique<LevelControlMove>(),
+        make_unique<LevelControlMoveToLevel>(),
+        make_unique<LevelControlMoveToLevelWithOnOff>(),
+        make_unique<LevelControlMoveWithOnOff>(),
+        make_unique<LevelControlStep>(),
+        make_unique<LevelControlStepWithOnOff>(),
+        make_unique<LevelControlStop>(),
+        make_unique<LevelControlStopWithOnOff>(),
+        make_unique<DiscoverLevelControlAttributes>(),
+        make_unique<ReadLevelControlCurrentLevel>(),
+        make_unique<ReportLevelControlCurrentLevel>(),
+        make_unique<ReadLevelControlClusterRevision>(),
     };
 
     commands.Register(clusterName, clusterCommands);
 }
-
 void registerClusterOnOff(Commands & commands)
 {
     const char * clusterName = "OnOff";
 
     commands_list clusterCommands = {
-        make_unique<OnOffOff>(),       make_unique<OnOffOn>(),
-        make_unique<OnOffToggle>(),    make_unique<DiscoverOnOffAttributes>(),
-        make_unique<ReadOnOffOnOff>(), make_unique<ReportOnOffOnOff>(),
+        make_unique<OnOffOff>(),
+        make_unique<OnOffOn>(),
+        make_unique<OnOffToggle>(),
+        make_unique<DiscoverOnOffAttributes>(),
+        make_unique<ReadOnOffOnOff>(),
+        make_unique<ReportOnOffOnOff>(),
+        make_unique<ReadOnOffClusterRevision>(),
     };
 
     commands.Register(clusterName, clusterCommands);
 }
-
 void registerClusterScenes(Commands & commands)
 {
     const char * clusterName = "Scenes";
 
     commands_list clusterCommands = {
-        make_unique<ScenesAddScene>(),         make_unique<ScenesGetSceneMembership>(), make_unique<ScenesRecallScene>(),
-        make_unique<ScenesRemoveAllScenes>(),  make_unique<ScenesRemoveScene>(),        make_unique<ScenesStoreScene>(),
-        make_unique<ScenesViewScene>(),        make_unique<DiscoverScenesAttributes>(), make_unique<ReadScenesSceneCount>(),
-        make_unique<ReadScenesCurrentScene>(), make_unique<ReadScenesCurrentGroup>(),   make_unique<ReadScenesSceneValid>(),
-        make_unique<ReadScenesNameSupport>(),
+        make_unique<ScenesAddScene>(),         make_unique<ScenesGetSceneMembership>(),  make_unique<ScenesRecallScene>(),
+        make_unique<ScenesRemoveAllScenes>(),  make_unique<ScenesRemoveScene>(),         make_unique<ScenesStoreScene>(),
+        make_unique<ScenesViewScene>(),        make_unique<DiscoverScenesAttributes>(),  make_unique<ReadScenesSceneCount>(),
+        make_unique<ReadScenesCurrentScene>(), make_unique<ReadScenesCurrentGroup>(),    make_unique<ReadScenesSceneValid>(),
+        make_unique<ReadScenesNameSupport>(),  make_unique<ReadScenesClusterRevision>(),
     };
 
     commands.Register(clusterName, clusterCommands);
 }
-
-void registerClusterTempMeasurement(Commands & commands)
+void registerClusterTemperatureMeasurement(Commands & commands)
 {
     const char * clusterName = "TemperatureMeasurement";
 
     commands_list clusterCommands = {
         make_unique<DiscoverTemperatureMeasurementAttributes>(),   make_unique<ReadTemperatureMeasurementMeasuredValue>(),
         make_unique<ReportTemperatureMeasurementMeasuredValue>(),  make_unique<ReadTemperatureMeasurementMinMeasuredValue>(),
-        make_unique<ReadTemperatureMeasurementMaxMeasuredValue>(),
+        make_unique<ReadTemperatureMeasurementMaxMeasuredValue>(), make_unique<ReadTemperatureMeasurementClusterRevision>(),
     };
 
     commands.Register(clusterName, clusterCommands);
@@ -6606,13 +6397,13 @@
 {
     registerClusterBarrierControl(commands);
     registerClusterBasic(commands);
+    registerClusterBinding(commands);
     registerClusterColorControl(commands);
     registerClusterDoorLock(commands);
     registerClusterGroups(commands);
-    registerClusterIasZone(commands);
     registerClusterIdentify(commands);
-    registerClusterLevel(commands);
+    registerClusterLevelControl(commands);
     registerClusterOnOff(commands);
     registerClusterScenes(commands);
-    registerClusterTempMeasurement(commands);
+    registerClusterTemperatureMeasurement(commands);
 }
diff --git a/examples/chip-tool/commands/clusters/ModelCommand.cpp b/examples/chip-tool/commands/clusters/ModelCommand.cpp
index 6292470..c0cdb3b 100644
--- a/examples/chip-tool/commands/clusters/ModelCommand.cpp
+++ b/examples/chip-tool/commands/clusters/ModelCommand.cpp
@@ -21,22 +21,7 @@
 using namespace ::chip;
 
 namespace {
-constexpr uint16_t kWaitDurationInSeconds                    = 10;
-constexpr uint8_t kZCLGlobalCmdFrameControlHeader            = 8;
-constexpr uint8_t kZCLClusterCmdFrameControlHeader           = 9;
-constexpr uint8_t kZCLGlobalMfgSpecificCmdFrameControlHeader = 12;
-
-bool isValidFrame(uint8_t frameControl)
-{
-    // Bit 3 of the frame control byte set means direction is server to client.
-    return (frameControl == kZCLGlobalCmdFrameControlHeader || frameControl == kZCLClusterCmdFrameControlHeader ||
-            kZCLGlobalMfgSpecificCmdFrameControlHeader);
-}
-
-bool isGlobalCommand(uint8_t frameControl)
-{
-    return (frameControl == kZCLGlobalCmdFrameControlHeader || frameControl == kZCLGlobalMfgSpecificCmdFrameControlHeader);
-}
+constexpr uint16_t kWaitDurationInSeconds = 10;
 } // namespace
 
 CHIP_ERROR ModelCommand::Run(PersistentStorage & storage, NodeId localId, NodeId remoteId)
@@ -44,16 +29,22 @@
     CHIP_ERROR err = CHIP_NO_ERROR;
 
     err = mCommissioner.SetUdpListenPort(storage.GetListenPort());
-    VerifyOrExit(err == CHIP_NO_ERROR, ChipLogError(Controller, "Init failure! Commissioner: %s", chip::ErrorStr(err)));
+    VerifyOrExit(err == CHIP_NO_ERROR, ChipLogError(Controller, "Init failure! Commissioner: %s", ErrorStr(err)));
 
     err = mCommissioner.Init(localId, &storage);
-    VerifyOrExit(err == CHIP_NO_ERROR, ChipLogError(Controller, "Init failure! Commissioner: %s", chip::ErrorStr(err)));
+    VerifyOrExit(err == CHIP_NO_ERROR, ChipLogError(Controller, "Init failure! Commissioner: %s", ErrorStr(err)));
 
     err = mCommissioner.ServiceEvents();
-    VerifyOrExit(err == CHIP_NO_ERROR, ChipLogError(Controller, "Init failure! Run Loop: %s", chip::ErrorStr(err)));
+    VerifyOrExit(err == CHIP_NO_ERROR, ChipLogError(Controller, "Init failure! Run Loop: %s", ErrorStr(err)));
 
-    err = RunInternal(remoteId);
-    SuccessOrExit(err);
+    err = mCommissioner.GetDevice(remoteId, &mDevice);
+    VerifyOrExit(err == CHIP_NO_ERROR, ChipLogError(chipTool, "Init failure! No pairing for device: %" PRIu64, localId));
+
+    err = SendCommand(mDevice, mEndPointId);
+    VerifyOrExit(err == CHIP_NO_ERROR, ChipLogError(chipTool, "Failed to send message: %s", ErrorStr(err)));
+
+    UpdateWaitForResponse(true);
+    WaitForResponse(kWaitDurationInSeconds);
 
     VerifyOrExit(GetCommandExitStatus(), err = CHIP_ERROR_INTERNAL);
 
@@ -62,107 +53,3 @@
     mCommissioner.Shutdown();
     return err;
 }
-
-CHIP_ERROR ModelCommand::RunInternal(NodeId remoteId)
-{
-    ChipDevice * device;
-    CHIP_ERROR err = mCommissioner.GetDevice(remoteId, &device);
-    VerifyOrExit(err == CHIP_NO_ERROR, ChipLogError(chipTool, "Could not find a paired device. Are you sure it has been paired ?"));
-
-    device->SetDelegate(this);
-
-    err = RunCommandInternal(device);
-    SuccessOrExit(err);
-
-    UpdateWaitForResponse(true);
-    WaitForResponse(kWaitDurationInSeconds);
-
-exit:
-    return err;
-}
-
-CHIP_ERROR ModelCommand::RunCommandInternal(ChipDevice * device)
-{
-    CHIP_ERROR err = CHIP_NO_ERROR;
-    ChipLogProgress(chipTool, "Endpoint id: '0x%02x', Cluster id: '0x%04x', Command id: '0x%02x'", mEndPointId, mClusterId,
-                    mCommandId);
-
-    PacketBufferHandle buffer = EncodeCommand(mEndPointId);
-    VerifyOrExit(!buffer.IsNull(), err = CHIP_ERROR_INTERNAL);
-
-#ifdef DEBUG
-    PrintBuffer(buffer);
-#endif
-
-    err = device->SendMessage(std::move(buffer));
-    VerifyOrExit(err == CHIP_NO_ERROR, ChipLogError(chipTool, "Failed to send message: %s", ErrorStr(err)));
-
-exit:
-    return err;
-}
-
-void ModelCommand::OnMessage(PacketBufferHandle buffer)
-{
-    ChipLogDetail(chipTool, "OnMessage: Received %zu bytes", buffer->DataLength());
-
-    EmberApsFrame frame;
-    uint8_t * message;
-    uint16_t messageLen;
-    uint16_t mfgCode;
-    uint8_t frameControl;
-    uint8_t sequenceNumber;
-    uint8_t commandId;
-    bool success = false;
-
-    if (extractApsFrame(buffer->Start(), buffer->DataLength(), &frame) == 0)
-    {
-        ChipLogError(chipTool, "APS frame processing failure!");
-        ExitNow();
-    }
-    ChipLogDetail(chipTool, "APS frame processing success!");
-
-    messageLen = extractMessage(buffer->Start(), buffer->DataLength(), &message);
-    VerifyOrExit(messageLen >= 1, ChipLogError(chipTool, "Unexpected response length: %d", messageLen));
-
-    frameControl = chip::Encoding::Read8(message);
-    if (frameControl & (1u << 2))
-    {
-        VerifyOrExit(messageLen >= 5, ChipLogError(chipTool, "Unexpected response length: %d", messageLen));
-        mfgCode = chip::Encoding::LittleEndian::Read16(message);
-        ChipLogDetail(chipTool, "Manufacturer specific code in response: 0x%04x", mfgCode);
-        messageLen = static_cast<uint16_t>(messageLen - 2);
-    }
-    VerifyOrExit(messageLen >= 3, ChipLogError(chipTool, "Unexpected response length: %d", messageLen));
-    sequenceNumber = chip::Encoding::Read8(message);
-    commandId      = chip::Encoding::Read8(message);
-    messageLen     = static_cast<uint16_t>(messageLen - 3);
-
-    VerifyOrExit(isValidFrame(frameControl), ChipLogError(chipTool, "Unexpected frame control byte: 0x%02x", frameControl));
-    VerifyOrExit(sequenceNumber == 1, ChipLogError(chipTool, "Unexpected sequence number: %d", sequenceNumber));
-    VerifyOrExit(mEndPointId == frame.sourceEndpoint,
-                 ChipLogError(chipTool, "Unexpected endpoint id '0x%02x'", frame.sourceEndpoint));
-    VerifyOrExit(mClusterId == frame.clusterId, ChipLogError(chipTool, "Unexpected cluster id '0x%04x'", frame.clusterId));
-
-    success = isGlobalCommand(frameControl) ? HandleGlobalResponse(commandId, message, messageLen)
-                                            : HandleSpecificResponse(commandId, message, messageLen);
-exit:
-    SetCommandExitStatus(success);
-    UpdateWaitForResponse(false);
-}
-
-void ModelCommand::OnStatusChange(void)
-{
-    ChipLogProgress(chipTool, "DeviceStatusDelegate::OnStatusChange");
-}
-
-void ModelCommand::PrintBuffer(const PacketBufferHandle & buffer) const
-{
-    const size_t dataLen = buffer->DataLength();
-
-    fprintf(stderr, "SENDING: %zu ", dataLen);
-    for (size_t i = 0; i < dataLen; ++i)
-    {
-        fprintf(stderr, "%02x ", buffer->Start()[i]);
-    }
-    fprintf(stderr, "\n");
-}
diff --git a/examples/chip-tool/commands/clusters/ModelCommand.h b/examples/chip-tool/commands/clusters/ModelCommand.h
index 838b546..f42ad82 100644
--- a/examples/chip-tool/commands/clusters/ModelCommand.h
+++ b/examples/chip-tool/commands/clusters/ModelCommand.h
@@ -28,34 +28,20 @@
 #define CHIP_ZCL_ENDPOINT_MIN 0x01
 #define CHIP_ZCL_ENDPOINT_MAX 0xF0
 
-class ModelCommand : public Command, public chip::Controller::DeviceStatusDelegate
+class ModelCommand : public Command
 {
 public:
-    ModelCommand(const char * commandName, uint16_t clusterId, uint8_t commandId) :
-        Command(commandName), mClusterId(clusterId), mCommandId(commandId)
-    {}
+    ModelCommand(const char * commandName) : Command(commandName) {}
 
     void AddArguments() { AddArgument("endpoint-id", CHIP_ZCL_ENDPOINT_MIN, CHIP_ZCL_ENDPOINT_MAX, &mEndPointId); }
 
     /////////// Command Interface /////////
     CHIP_ERROR Run(PersistentStorage & storage, NodeId localId, NodeId remoteId) override;
 
-    /////////// DeviceStatusDelegate Interface /////////
-    void OnMessage(PacketBufferHandle buffer) override;
-    void OnStatusChange(void) override;
-
-    virtual PacketBufferHandle EncodeCommand(uint8_t endPointId) = 0;
-    virtual bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const { return false; }
-    virtual bool HandleSpecificResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const { return false; }
+    virtual CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endPointId) = 0;
 
 private:
-    CHIP_ERROR RunInternal(NodeId remoteId);
-    CHIP_ERROR RunCommandInternal(ChipDevice * device);
-
-    void PrintBuffer(const PacketBufferHandle & buffer) const;
-
     ChipDeviceCommissioner mCommissioner;
-    const uint16_t mClusterId;
-    const uint8_t mCommandId;
+    ChipDevice * mDevice;
     uint8_t mEndPointId;
 };
diff --git a/examples/chip-tool/commands/clusters/ModelCommandResponse.h b/examples/chip-tool/commands/clusters/ModelCommandResponse.h
deleted file mode 100644
index e47f229..0000000
--- a/examples/chip-tool/commands/clusters/ModelCommandResponse.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- *   Copyright (c) 2020 Project CHIP Authors
- *   All rights reserved.
- *
- *   Licensed under the Apache License, Version 2.0 (the "License");
- *   you may not use this file except in compliance with the License.
- *   You may obtain a copy of the License at
- *
- *       http://www.apache.org/licenses/LICENSE-2.0
- *
- *   Unless required by applicable law or agreed to in writing, software
- *   distributed under the License is distributed on an "AS IS" BASIS,
- *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *   See the License for the specific language governing permissions and
- *   limitations under the License.
- *
- */
-
-#pragma once
-
-class ModelCommandResponse
-{
-public:
-    ModelCommandResponse(uint8_t commandId) : mCommandId(commandId) {}
-    virtual ~ModelCommandResponse() {}
-
-    bool HandleCommandResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen)
-    {
-        if (commandId != mCommandId)
-        {
-            ChipLogError(chipTool, "Unexpected command response id: '0x%02x'. Expecting: '0x%02x'", commandId, mCommandId);
-            return false;
-        }
-        return HandleResponse(message, messageLen);
-    }
-
-    virtual bool HandleResponse(uint8_t * message, uint16_t messageLen) const = 0;
-
-private:
-    const uint8_t mCommandId;
-};
diff --git a/examples/chip-tool/commands/common/Command.h b/examples/chip-tool/commands/common/Command.h
index 7edbb7d..db847b9 100644
--- a/examples/chip-tool/commands/common/Command.h
+++ b/examples/chip-tool/commands/common/Command.h
@@ -18,6 +18,7 @@
 
 #pragma once
 
+#include <app/server/DataModelHandler.h>
 #include <controller/CHIPDeviceController.h>
 #include <inet/InetInterface.h>
 #include <support/logging/CHIPLogging.h>
@@ -143,7 +144,11 @@
     virtual CHIP_ERROR Run(PersistentStorage & storage, NodeId localId, NodeId remoteId) = 0;
 
     bool GetCommandExitStatus() const { return mCommandExitStatus; }
-    void SetCommandExitStatus(bool status) { mCommandExitStatus = status; }
+    void SetCommandExitStatus(bool status)
+    {
+        mCommandExitStatus = status;
+        UpdateWaitForResponse(false);
+    }
 
     void UpdateWaitForResponse(bool value);
     void WaitForResponse(uint16_t duration);
diff --git a/examples/chip-tool/commands/pairing/PairingCommand.cpp b/examples/chip-tool/commands/pairing/PairingCommand.cpp
index 6be2b74..33f23af 100644
--- a/examples/chip-tool/commands/pairing/PairingCommand.cpp
+++ b/examples/chip-tool/commands/pairing/PairingCommand.cpp
@@ -82,7 +82,7 @@
 
 CHIP_ERROR PairingCommand::Unpair(NodeId remoteId)
 {
-    UpdateWaitForResponse(false);
+    SetCommandExitStatus(true);
     return mCommissioner.UnpairDevice(remoteId);
 }
 
@@ -130,7 +130,6 @@
     }
 
     SetCommandExitStatus(err == CHIP_NO_ERROR);
-    UpdateWaitForResponse(false);
 }
 
 void PairingCommand::OnPairingDeleted(CHIP_ERROR err)
@@ -145,5 +144,4 @@
     }
 
     SetCommandExitStatus(err == CHIP_NO_ERROR);
-    UpdateWaitForResponse(false);
 }
diff --git a/examples/chip-tool/commands/reporting/Commands.h b/examples/chip-tool/commands/reporting/Commands.h
new file mode 100644
index 0000000..85e97e5
--- /dev/null
+++ b/examples/chip-tool/commands/reporting/Commands.h
@@ -0,0 +1,115 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+#pragma once
+
+#include "ReportingCommand.h"
+
+typedef void (*UnsupportedAttributeCallback)(void * context);
+
+class Listen : public ReportingCommand
+{
+public:
+    Listen() : ReportingCommand("listen") {}
+
+    void AddReportCallbacks(uint8_t endpointId) override
+    {
+        chip::app::CHIPDeviceCallbacksMgr & callbacksMgr = chip::app::CHIPDeviceCallbacksMgr::GetInstance();
+        callbacksMgr.AddReportCallback(chip::kTestDeviceNodeId, endpointId, 0x0300, 0x0000,
+                                       onReportColorControlCurrentHueCallback->Cancel());
+        callbacksMgr.AddReportCallback(chip::kTestDeviceNodeId, endpointId, 0x0300, 0x0001,
+                                       onReportColorControlCurrentSaturationCallback->Cancel());
+        callbacksMgr.AddReportCallback(chip::kTestDeviceNodeId, endpointId, 0x0300, 0x0003,
+                                       onReportColorControlCurrentXCallback->Cancel());
+        callbacksMgr.AddReportCallback(chip::kTestDeviceNodeId, endpointId, 0x0300, 0x0004,
+                                       onReportColorControlCurrentYCallback->Cancel());
+        callbacksMgr.AddReportCallback(chip::kTestDeviceNodeId, endpointId, 0x0300, 0x0007,
+                                       onReportColorControlColorTemperatureCallback->Cancel());
+        callbacksMgr.AddReportCallback(chip::kTestDeviceNodeId, endpointId, 0x0101, 0x0000,
+                                       onReportDoorLockLockStateCallback->Cancel());
+        callbacksMgr.AddReportCallback(chip::kTestDeviceNodeId, endpointId, 0x0008, 0x0000,
+                                       onReportLevelControlCurrentLevelCallback->Cancel());
+        callbacksMgr.AddReportCallback(chip::kTestDeviceNodeId, endpointId, 0x0006, 0x0000, onReportOnOffOnOffCallback->Cancel());
+        callbacksMgr.AddReportCallback(chip::kTestDeviceNodeId, endpointId, 0x0402, 0x0000,
+                                       onReportTemperatureMeasurementMeasuredValueCallback->Cancel());
+    }
+
+    static void OnDefaultSuccessResponse(void * context) { ChipLogProgress(chipTool, "Default Success Response"); }
+
+    static void OnDefaultFailureResponse(void * context, uint8_t status)
+    {
+        ChipLogProgress(chipTool, "Default Failure Response: 0x%02x", status);
+    }
+
+    static void OnUnsupportedAttributeResponse(void * context)
+    {
+        ChipLogError(chipTool, "Unsupported attribute Response. This should never happen !");
+    }
+
+    static void OnBooleanAttributeResponse(void * context, bool value)
+    {
+        ChipLogProgress(chipTool, "Boolean attribute Response: %d", value);
+    }
+
+    static void OnInt8uAttributeResponse(void * context, uint8_t value)
+    {
+        ChipLogProgress(chipTool, "Int8u attribute Response: %" PRIu8, value);
+    }
+
+    static void OnInt16uAttributeResponse(void * context, uint16_t value)
+    {
+        ChipLogProgress(chipTool, "Int16u attribute Response: %" PRIu16, value);
+    }
+
+    static void OnInt16sAttributeResponse(void * context, int16_t value)
+    {
+        ChipLogProgress(chipTool, "Int16s attribute Response: %" PRId16, value);
+    }
+
+private:
+    chip::Callback::Callback<Int8uAttributeCallback> * onReportColorControlCurrentHueCallback =
+        new chip::Callback::Callback<Int8uAttributeCallback>(OnInt8uAttributeResponse, this);
+    chip::Callback::Callback<Int8uAttributeCallback> * onReportColorControlCurrentSaturationCallback =
+        new chip::Callback::Callback<Int8uAttributeCallback>(OnInt8uAttributeResponse, this);
+    chip::Callback::Callback<Int16uAttributeCallback> * onReportColorControlCurrentXCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
+    chip::Callback::Callback<Int16uAttributeCallback> * onReportColorControlCurrentYCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
+    chip::Callback::Callback<Int16uAttributeCallback> * onReportColorControlColorTemperatureCallback =
+        new chip::Callback::Callback<Int16uAttributeCallback>(OnInt16uAttributeResponse, this);
+    chip::Callback::Callback<Int8uAttributeCallback> * onReportDoorLockLockStateCallback =
+        new chip::Callback::Callback<Int8uAttributeCallback>(OnInt8uAttributeResponse, this);
+    chip::Callback::Callback<Int8uAttributeCallback> * onReportLevelControlCurrentLevelCallback =
+        new chip::Callback::Callback<Int8uAttributeCallback>(OnInt8uAttributeResponse, this);
+    chip::Callback::Callback<BooleanAttributeCallback> * onReportOnOffOnOffCallback =
+        new chip::Callback::Callback<BooleanAttributeCallback>(OnBooleanAttributeResponse, this);
+    chip::Callback::Callback<Int16sAttributeCallback> * onReportTemperatureMeasurementMeasuredValueCallback =
+        new chip::Callback::Callback<Int16sAttributeCallback>(OnInt16sAttributeResponse, this);
+};
+
+void registerCommandsReporting(Commands & commands)
+{
+    const char * clusterName = "Reporting";
+
+    commands_list clusterCommands = {
+        make_unique<Listen>(),
+    };
+
+    commands.Register(clusterName, clusterCommands);
+}
diff --git a/examples/chip-tool/commands/reporting/ReportingCommand.cpp b/examples/chip-tool/commands/reporting/ReportingCommand.cpp
new file mode 100644
index 0000000..303aea7
--- /dev/null
+++ b/examples/chip-tool/commands/reporting/ReportingCommand.cpp
@@ -0,0 +1,74 @@
+/*
+ *   Copyright (c) 2020 Project CHIP Authors
+ *   All rights reserved.
+ *
+ *   Licensed under the Apache License, Version 2.0 (the "License");
+ *   you may not use this file except in compliance with the License.
+ *   You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ *
+ */
+
+#include "ReportingCommand.h"
+
+#include "../common/Commands.h"
+#include "gen/CHIPClientCallbacks.h"
+#include <controller/CHIPClusters.h>
+
+using namespace ::chip;
+
+namespace {
+constexpr uint16_t kWaitDurationInSeconds = UINT16_MAX;
+} // namespace
+
+CHIP_ERROR ReportingCommand::Run(PersistentStorage & storage, NodeId localId, NodeId remoteId)
+{
+    CHIP_ERROR err = CHIP_NO_ERROR;
+    chip::Controller::BasicCluster cluster;
+
+    err = mCommissioner.SetUdpListenPort(storage.GetListenPort());
+    VerifyOrExit(err == CHIP_NO_ERROR, ChipLogError(Controller, "Init failure! Commissioner: %s", ErrorStr(err)));
+
+    err = mCommissioner.Init(localId, &storage);
+    VerifyOrExit(err == CHIP_NO_ERROR, ChipLogError(Controller, "Init failure! Commissioner: %s", ErrorStr(err)));
+
+    err = mCommissioner.ServiceEvents();
+    VerifyOrExit(err == CHIP_NO_ERROR, ChipLogError(Controller, "Init failure! Run Loop: %s", ErrorStr(err)));
+
+    err = mCommissioner.GetDevice(remoteId, &mDevice);
+    VerifyOrExit(err == CHIP_NO_ERROR, ChipLogError(chipTool, "Init failure! No pairing for device: %" PRIu64, localId));
+
+    mDevice->SetDelegate(this);
+
+    AddReportCallbacks(mEndPointId);
+
+    cluster.Associate(mDevice, mEndPointId);
+    err = cluster.MfgSpecificPing(nullptr, nullptr);
+    VerifyOrExit(err == CHIP_NO_ERROR, ChipLogError(Controller, "Init failure! Ping failure: %s", ErrorStr(err)));
+
+    UpdateWaitForResponse(true);
+    WaitForResponse(kWaitDurationInSeconds);
+
+exit:
+    mCommissioner.ServiceEventSignal();
+    mCommissioner.Shutdown();
+    return err;
+}
+
+void ReportingCommand::OnMessage(PacketBufferHandle buffer)
+{
+    ChipLogDetail(chipTool, "%" PRIu64 ": Received %zu bytes", mDevice->GetDeviceId(), buffer->DataLength());
+    HandleDataModelMessage(mDevice->GetDeviceId(), std::move(buffer));
+}
+
+void ReportingCommand::OnStatusChange(void)
+{
+    ChipLogDetail(chipTool, "DeviceStatusDelegate::OnStatusChange");
+}
diff --git a/examples/chip-tool/commands/reporting/ReportingCommand.h b/examples/chip-tool/commands/reporting/ReportingCommand.h
new file mode 100644
index 0000000..b25d5a9
--- /dev/null
+++ b/examples/chip-tool/commands/reporting/ReportingCommand.h
@@ -0,0 +1,51 @@
+/*
+ *   Copyright (c) 2021 Project CHIP Authors
+ *   All rights reserved.
+ *
+ *   Licensed under the Apache License, Version 2.0 (the "License");
+ *   you may not use this file except in compliance with the License.
+ *   You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ *
+ */
+
+#pragma once
+
+#include "../../config/PersistentStorage.h"
+#include "../common/Command.h"
+
+// Limits on endpoint values.  Could be wrong, if we start using endpoint 0 for
+// something.
+#define CHIP_ZCL_ENDPOINT_MIN 0x01
+#define CHIP_ZCL_ENDPOINT_MAX 0xF0
+
+class ReportingCommand : public Command, public chip::Controller::DeviceStatusDelegate
+{
+public:
+    ReportingCommand(const char * commandName) : Command(commandName)
+    {
+        AddArgument("endpoint-id", CHIP_ZCL_ENDPOINT_MIN, CHIP_ZCL_ENDPOINT_MAX, &mEndPointId);
+    }
+
+    /////////// Command Interface /////////
+    CHIP_ERROR Run(PersistentStorage & storage, NodeId localId, NodeId remoteId) override;
+
+    /////////// DeviceStatusDelegate Interface /////////
+    void OnMessage(PacketBufferHandle buffer) override;
+    void OnStatusChange(void) override;
+
+    virtual void AddReportCallbacks(uint8_t endPointId) = 0;
+
+private:
+    uint8_t mEndPointId;
+
+    ChipDeviceCommissioner mCommissioner;
+    ChipDevice * mDevice;
+};
diff --git a/examples/chip-tool/gen/CHIPClientCallbacks.cpp b/examples/chip-tool/gen/CHIPClientCallbacks.cpp
new file mode 100644
index 0000000..58b3d84
--- /dev/null
+++ b/examples/chip-tool/gen/CHIPClientCallbacks.cpp
@@ -0,0 +1,1567 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+#include "gen/CHIPClientCallbacks.h"
+
+#include "gen/enums.h"
+#include <app/util/CHIPDeviceCallbacksMgr.h>
+#include <app/util/af-enums.h>
+#include <app/util/af.h>
+#include <app/util/basic-types.h>
+#include <core/CHIPEncoding.h>
+#include <support/SafeInt.h>
+#include <support/logging/CHIPLogging.h>
+
+using namespace ::chip;
+
+#define CHECK_MESSAGE_LENGTH(value)                                                                                                \
+    if (!chip::CanCastTo<uint16_t>(value))                                                                                         \
+    {                                                                                                                              \
+        ChipLogError(Zcl, "CHECK_MESSAGE_LENGTH expects a uint16_t value, got: %d", value);                                        \
+        if (onFailureCallback != nullptr)                                                                                          \
+        {                                                                                                                          \
+            Callback::Callback<DefaultFailureCallback> * cb =                                                                      \
+                Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);                                     \
+            cb->mCall(cb->mContext, static_cast<uint8_t>(EMBER_ZCL_STATUS_INVALID_VALUE));                                         \
+        }                                                                                                                          \
+        return true;                                                                                                               \
+    }                                                                                                                              \
+                                                                                                                                   \
+    if (messageLen < value)                                                                                                        \
+    {                                                                                                                              \
+        ChipLogError(Zcl, "Unexpected response length: %d", messageLen);                                                           \
+        if (onFailureCallback != nullptr)                                                                                          \
+        {                                                                                                                          \
+            Callback::Callback<DefaultFailureCallback> * cb =                                                                      \
+                Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);                                     \
+            cb->mCall(cb->mContext, static_cast<uint8_t>(EMBER_ZCL_STATUS_INVALID_VALUE));                                         \
+        }                                                                                                                          \
+        return true;                                                                                                               \
+    }                                                                                                                              \
+                                                                                                                                   \
+    messageLen = static_cast<uint16_t>(messageLen - static_cast<uint16_t>(value));
+
+#define GET_RESPONSE_CALLBACKS(name)                                                                                               \
+    Callback::Cancelable * onSuccessCallback = nullptr;                                                                            \
+    Callback::Cancelable * onFailureCallback = nullptr;                                                                            \
+    NodeId sourceId                          = emberAfCurrentCommand()->source;                                                    \
+    uint8_t sequenceNumber                   = emberAfCurrentCommand()->seqNum;                                                    \
+    CHIP_ERROR err = gCallbacks.GetResponseCallback(sourceId, sequenceNumber, &onSuccessCallback, &onFailureCallback);             \
+                                                                                                                                   \
+    if (CHIP_NO_ERROR != err)                                                                                                      \
+    {                                                                                                                              \
+        if (onSuccessCallback == nullptr)                                                                                          \
+        {                                                                                                                          \
+            ChipLogDetail(Zcl, "%s: Missing success callback", name);                                                              \
+        }                                                                                                                          \
+                                                                                                                                   \
+        if (onFailureCallback == nullptr)                                                                                          \
+        {                                                                                                                          \
+            ChipLogDetail(Zcl, "%s: Missing failure callback", name);                                                              \
+        }                                                                                                                          \
+                                                                                                                                   \
+        return true;                                                                                                               \
+    }
+
+#define GET_REPORT_CALLBACK(name)                                                                                                  \
+    Callback::Cancelable * onReportCallback = nullptr;                                                                             \
+    CHIP_ERROR err = gCallbacks.GetReportCallback(sourceId, endpointId, clusterId, attributeId, &onReportCallback);                \
+                                                                                                                                   \
+    if (CHIP_NO_ERROR != err)                                                                                                      \
+    {                                                                                                                              \
+        if (onReportCallback == nullptr)                                                                                           \
+        {                                                                                                                          \
+            ChipLogDetail(Zcl, "%s: Missing report callback", name);                                                               \
+        }                                                                                                                          \
+                                                                                                                                   \
+        return true;                                                                                                               \
+    }
+
+void LogStatus(uint8_t status)
+{
+    switch (status)
+    {
+    case EMBER_ZCL_STATUS_SUCCESS:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_SUCCESS (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_FAILURE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_FAILURE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_NOT_AUTHORIZED:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_NOT_AUTHORIZED (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_MALFORMED_COMMAND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_MALFORMED_COMMAND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNSUP_COMMAND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNSUP_CLUSTER_COMMAND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNSUP_GENERAL_COMMAND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNSUP_GENERAL_COMMAND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNSUP_MANUF_CLUSTER_COMMAND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNSUP_MANUF_CLUSTER_COMMAND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNSUP_MANUF_GENERAL_COMMAND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNSUP_MANUF_GENERAL_COMMAND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INVALID_FIELD:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INVALID_FIELD (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNSUPPORTED_ATTRIBUTE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNSUPPORTED_ATTRIBUTE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INVALID_VALUE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INVALID_VALUE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_READ_ONLY:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_READ_ONLY (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INSUFFICIENT_SPACE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INSUFFICIENT_SPACE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_DUPLICATE_EXISTS:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_DUPLICATE_EXISTS (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_NOT_FOUND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_NOT_FOUND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNREPORTABLE_ATTRIBUTE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNREPORTABLE_ATTRIBUTE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INVALID_DATA_TYPE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INVALID_DATA_TYPE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INVALID_SELECTOR:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INVALID_SELECTOR (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_WRITE_ONLY:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_WRITE_ONLY (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INCONSISTENT_STARTUP_STATE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INCONSISTENT_STARTUP_STATE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_DEFINED_OUT_OF_BAND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_DEFINED_OUT_Of_BAND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_ACTION_DENIED:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_ACTION_DENIED (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_TIMEOUT:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_TIMEOUT (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_ABORT:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_ABORT (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INVALID_IMAGE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INVALID_IMAGE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_WAIT_FOR_DATA:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_WAIT_FOR_DATA (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_NO_IMAGE_AVAILABLE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_NO_IMAGE_AVAILABLE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_REQUIRE_MORE_IMAGE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_REQUIRE_MORE_IMAGE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_HARDWARE_FAILURE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_HARDWARE_FAILURE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_SOFTWARE_FAILURE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_SOFTWARE_FAILURE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNSUPPORTED_CLUSTER:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNSUPPORTED_CLUSTER (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_LIMIT_REACHED:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_LIMIT_REACHED (0x%02x)", status);
+        break;
+    default:
+        ChipLogError(Zcl, "Unknow status: 0x%02x", status);
+        break;
+    }
+}
+
+// Singleton instance of the callbacks manager
+app::CHIPDeviceCallbacksMgr & gCallbacks = app::CHIPDeviceCallbacksMgr::GetInstance();
+
+bool emberAfDefaultResponseCallback(ClusterId clusterId, CommandId commandId, EmberAfStatus status)
+{
+    ChipLogProgress(Zcl, "DefaultResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+    ChipLogProgress(Zcl, "  CommandId: 0x%02x", commandId);
+    LogStatus(status);
+
+    GET_RESPONSE_CALLBACKS("emberAfDefaultResponseCallback");
+    if (status == EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultSuccessCallback> * cb =
+            Callback::Callback<DefaultSuccessCallback>::FromCancelable(onSuccessCallback);
+        cb->mCall(cb->mContext);
+    }
+    else
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, static_cast<uint8_t>(status));
+    }
+
+    return true;
+}
+
+bool emberAfReadAttributesResponseCallback(ClusterId clusterId, uint8_t * message, uint16_t messageLen)
+{
+    ChipLogProgress(Zcl, "ReadAttributesResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+
+    GET_RESPONSE_CALLBACKS("emberAfReadAttributesResponseCallback");
+
+    // struct readAttributeResponseRecord[]
+    while (messageLen)
+    {
+        CHECK_MESSAGE_LENGTH(2);
+        uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+        ChipLogProgress(Zcl, "  attributeId: 0x%04x", attributeId);
+
+        CHECK_MESSAGE_LENGTH(1);
+        uint8_t status = chip::Encoding::Read8(message); // zclStatus
+        LogStatus(status);
+
+        if (status == EMBER_ZCL_STATUS_SUCCESS)
+        {
+            CHECK_MESSAGE_LENGTH(1);
+            uint8_t attributeType = chip::Encoding::Read8(message);
+            ChipLogProgress(Zcl, "  attributeType: 0x%02x", attributeType);
+
+            switch (attributeType)
+            {
+            case 0x00: // nodata / No data
+            case 0x0A: // data24 / 24-bit data
+            case 0x0C: // data40 / 40-bit data
+            case 0x0D: // data48 / 48-bit data
+            case 0x0E: // data56 / 56-bit data
+            case 0x1A: // map24 / 24-bit bitmap
+            case 0x1C: // map40 / 40-bit bitmap
+            case 0x1D: // map48 / 48-bit bitmap
+            case 0x1E: // map56 / 56-bit bitmap
+            case 0x22: // uint24 / Unsigned 24-bit integer
+            case 0x24: // uint40 / Unsigned 40-bit integer
+            case 0x25: // uint48 / Unsigned 48-bit integer
+            case 0x26: // uint56 / Unsigned 56-bit integer
+            case 0x2A: // int24 / Signed 24-bit integer
+            case 0x2C: // int40 / Signed 40-bit integer
+            case 0x2D: // int48 / Signed 48-bit integer
+            case 0x2E: // int56 / Signed 56-bit integer
+            case 0x38: // semi / Semi-precision
+            case 0x39: // single / Single precision
+            case 0x3A: // double / Double precision
+            case 0x41: // octstr / Octet string
+            case 0x42: // string / Character string
+            case 0x43: // octstr16 / Long octet string
+            case 0x44: // string16 / Long character string
+            case 0x48: // array / Array
+            case 0x49: // struct / Structure
+            case 0x50: // set / Set
+            case 0x51: // bag / Bag
+            case 0xE0: // ToD / Time of day
+            {
+                ChipLogError(Zcl, "attributeType 0x%02x is not supported", attributeType);
+                Callback::Callback<DefaultFailureCallback> * cb =
+                    Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+                cb->mCall(cb->mContext, EMBER_ZCL_STATUS_INVALID_VALUE);
+                return true;
+            }
+
+            case 0x08: // data8 / 8-bit data
+            case 0x18: // map8 / 8-bit bitmap
+            case 0x20: // uint8 / Unsigned  8-bit integer
+            case 0x30: // enum8 / 8-bit enumeration
+            {
+                CHECK_MESSAGE_LENGTH(1);
+                uint8_t value = chip::Encoding::Read8(message);
+                ChipLogProgress(Zcl, "  value: 0x%02x", value);
+
+                Callback::Callback<Int8uAttributeCallback> * cb =
+                    Callback::Callback<Int8uAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x09: // data16 / 16-bit data
+            case 0x19: // map16 / 16-bit bitmap
+            case 0x21: // uint16 / Unsigned 16-bit integer
+            case 0x31: // enum16 / 16-bit enumeration
+            case 0xE8: // clusterId / Cluster ID
+            case 0xE9: // attribId / Attribute ID
+            case 0xEA: // bacOID / BACnet OID
+            case 0xF1: // key128 / 128-bit security key
+            case 0xFF: // unk / Unknown
+            {
+                CHECK_MESSAGE_LENGTH(2);
+                uint16_t value = chip::Encoding::LittleEndian::Read16(message);
+                ChipLogProgress(Zcl, "  value: 0x%04x", value);
+
+                Callback::Callback<Int16uAttributeCallback> * cb =
+                    Callback::Callback<Int16uAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x0B: // data32 / 32-bit data
+            case 0x1B: // map32 / 32-bit bitmap
+            case 0x23: // uint32 / Unsigned 32-bit integer
+            case 0xE1: // date / Date
+            case 0xE2: // UTC / UTCTime
+            {
+                CHECK_MESSAGE_LENGTH(4);
+                uint32_t value = chip::Encoding::LittleEndian::Read32(message);
+                ChipLogProgress(Zcl, "  value: 0x%08x", value);
+
+                Callback::Callback<Int32uAttributeCallback> * cb =
+                    Callback::Callback<Int32uAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x0F: // data64 / 64-bit data
+            case 0x1F: // map64 / 64-bit bitmap
+            case 0x27: // uint64 / Unsigned 64-bit integer
+            case 0xF0: // EUI64 / IEEE address
+            {
+                CHECK_MESSAGE_LENGTH(8);
+                uint64_t value = chip::Encoding::LittleEndian::Read64(message);
+                ChipLogProgress(Zcl, "  value: 0x%16x", value);
+
+                Callback::Callback<Int64uAttributeCallback> * cb =
+                    Callback::Callback<Int64uAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x10: // bool / Boolean
+            {
+                CHECK_MESSAGE_LENGTH(1);
+                uint8_t value = chip::Encoding::Read8(message);
+                ChipLogProgress(Zcl, "  value: %d", value);
+
+                Callback::Callback<BooleanAttributeCallback> * cb =
+                    Callback::Callback<BooleanAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x28: // int8 / Signed 8-bit integer
+            {
+                CHECK_MESSAGE_LENGTH(1);
+                int8_t value = chip::CastToSigned(chip::Encoding::Read8(message));
+                ChipLogProgress(Zcl, "  value: %" PRId8, value);
+
+                Callback::Callback<Int8sAttributeCallback> * cb =
+                    Callback::Callback<Int8sAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x29: // int16 / Signed 16-bit integer
+            {
+                CHECK_MESSAGE_LENGTH(2);
+                int16_t value = chip::CastToSigned(chip::Encoding::LittleEndian::Read16(message));
+                ChipLogProgress(Zcl, "  value: %" PRId16, value);
+
+                Callback::Callback<Int16sAttributeCallback> * cb =
+                    Callback::Callback<Int16sAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x2B: // int32 / Signed 32-bit integer
+            {
+                CHECK_MESSAGE_LENGTH(4);
+                int32_t value = chip::CastToSigned(chip::Encoding::LittleEndian::Read32(message));
+                ChipLogProgress(Zcl, "  value: %" PRId32, value);
+
+                Callback::Callback<Int32sAttributeCallback> * cb =
+                    Callback::Callback<Int32sAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x2F: // int64 / Signed 64-bit integer
+            {
+                CHECK_MESSAGE_LENGTH(8);
+                int64_t value = chip::CastToSigned(chip::Encoding::LittleEndian::Read64(message));
+                ChipLogProgress(Zcl, "  value: %" PRId64, value);
+
+                Callback::Callback<Int64sAttributeCallback> * cb =
+                    Callback::Callback<Int64sAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+            }
+        }
+        else
+        {
+            Callback::Callback<DefaultFailureCallback> * cb =
+                Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+            cb->mCall(cb->mContext, status);
+        }
+
+        // The current code is written matching the current API where there is a single attribute read
+        // per read command. So if multiple attributes are read at the same time, something is wrong
+        // somewhere.
+        if (messageLen)
+        {
+            ChipLogError(Zcl, "Multiple attributes read at the same time. Something went wrong.");
+            break;
+        }
+    }
+
+    return true;
+}
+
+bool emberAfWriteAttributesResponseCallback(ClusterId clusterId, uint8_t * message, uint16_t messageLen)
+{
+    ChipLogProgress(Zcl, "WriteAttributesResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+
+    GET_RESPONSE_CALLBACKS("emberAfWriteAttributesResponseCallback");
+
+    // struct writeAttributeResponseRecord[]
+    while (messageLen)
+    {
+        CHECK_MESSAGE_LENGTH(1);
+        uint8_t status = chip::Encoding::Read8(message); // zclStatus
+        LogStatus(status);
+
+        if (status == EMBER_ZCL_STATUS_SUCCESS)
+        {
+            Callback::Callback<DefaultSuccessCallback> * cb =
+                Callback::Callback<DefaultSuccessCallback>::FromCancelable(onSuccessCallback);
+            cb->mCall(cb->mContext);
+        }
+        else
+        {
+            CHECK_MESSAGE_LENGTH(2);
+            uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+            ChipLogProgress(Zcl, "  attributeId: 0x%04x", attributeId);
+
+            Callback::Callback<DefaultFailureCallback> * cb =
+                Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+            cb->mCall(cb->mContext, status);
+        }
+
+        // The current code is written matching the current API where there is a single attribute written
+        // per write command. So if multiple attributes are written at the same time, something is wrong
+        // somewhere.
+        if (messageLen)
+        {
+            ChipLogError(Zcl, "Multiple attributes written at the same time. Something went wrong.");
+            break;
+        }
+    }
+
+    return true;
+}
+
+bool emberAfConfigureReportingResponseCallback(ClusterId clusterId, uint8_t * message, uint16_t messageLen)
+{
+    ChipLogProgress(Zcl, "ConfigureReportingResponseCallback:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+
+    GET_RESPONSE_CALLBACKS("emberAfConfigureReportingResponseCallback");
+
+    // struct configureReportingResponseRecord[]
+    while (messageLen)
+    {
+        CHECK_MESSAGE_LENGTH(1);
+        uint8_t status = chip::Encoding::Read8(message); // zclStatus
+        LogStatus(status);
+
+        if (status == EMBER_ZCL_STATUS_SUCCESS)
+        {
+            Callback::Callback<DefaultSuccessCallback> * cb =
+                Callback::Callback<DefaultSuccessCallback>::FromCancelable(onSuccessCallback);
+            cb->mCall(cb->mContext);
+        }
+        else
+        {
+            CHECK_MESSAGE_LENGTH(1);
+            uint8_t direction = chip::Encoding::Read8(message); // reportingRole
+            ChipLogProgress(Zcl, "  direction: 0x%02x", direction);
+
+            CHECK_MESSAGE_LENGTH(2);
+            uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+            ChipLogProgress(Zcl, "  attributeId: 0x%04x", attributeId);
+
+            Callback::Callback<DefaultFailureCallback> * cb =
+                Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+            cb->mCall(cb->mContext, status);
+        }
+
+        // The current code is written matching the current API where there is a single attribute report
+        // per configure command. So if multiple attributes are configured at the same time, something is wrong
+        // somewhere.
+        if (messageLen)
+        {
+            ChipLogError(Zcl, "Multiple attributes reports configured at the same time. Something went wrong.");
+            break;
+        }
+    }
+
+    return true;
+}
+
+bool emberAfReadReportingConfigurationResponseCallback(chip::ClusterId clusterId, uint8_t * message, uint16_t messageLen)
+{
+    ChipLogProgress(Zcl, "ReadReportingConfigurationResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+
+    GET_RESPONSE_CALLBACKS("emberAfReadReportingConfigurationResponseCallback");
+
+    // struct readReportingConfigurationResponseRecord[]
+    while (messageLen)
+    {
+        CHECK_MESSAGE_LENGTH(1);
+        uint8_t direction = chip::Encoding::Read8(message); // reportingRole
+        ChipLogProgress(Zcl, "  direction: 0x%02x", direction);
+
+        CHECK_MESSAGE_LENGTH(2);
+        uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+        ChipLogProgress(Zcl, "  attributeId: 0x%04x", attributeId);
+
+        if (direction == EMBER_ZCL_REPORTING_DIRECTION_REPORTED)
+        {
+            CHECK_MESSAGE_LENGTH(1);
+            uint8_t attributeType = chip::Encoding::Read8(message); // zclType
+            ChipLogProgress(Zcl, "  attributeType: 0x%02x", attributeType);
+
+            CHECK_MESSAGE_LENGTH(2);
+            uint16_t minimumReportingInterval = chip::Encoding::LittleEndian::Read16(message); // uint16
+            ChipLogProgress(Zcl, "  minimumReportingInterval: %" PRIu16, minimumReportingInterval);
+
+            CHECK_MESSAGE_LENGTH(2);
+            uint16_t maximumReportingInterval = chip::Encoding::LittleEndian::Read16(message); // uint16
+            ChipLogProgress(Zcl, "  maximumReportingInterval: %" PRIu16, maximumReportingInterval);
+
+            // FIXME: unk is not supported yet.
+
+            Callback::Callback<ReadReportingConfigurationReportedCallback> * cb =
+                Callback::Callback<ReadReportingConfigurationReportedCallback>::FromCancelable(onSuccessCallback);
+            cb->mCall(cb->mContext, minimumReportingInterval, maximumReportingInterval);
+        }
+        else
+        {
+            CHECK_MESSAGE_LENGTH(2);
+            uint16_t timeout = chip::Encoding::LittleEndian::Read16(message); // uint16
+            ChipLogProgress(Zcl, "  timeout: %" PRIu16, timeout);
+
+            Callback::Callback<ReadReportingConfigurationReceivedCallback> * cb =
+                Callback::Callback<ReadReportingConfigurationReceivedCallback>::FromCancelable(onSuccessCallback);
+            cb->mCall(cb->mContext, timeout);
+        }
+    }
+
+    return true;
+}
+
+bool emberAfDiscoverAttributesResponseCallback(ClusterId clusterId, bool discoveryComplete, uint8_t * message, uint16_t messageLen,
+                                               bool extended)
+{
+    ChipLogProgress(Zcl, "DiscoverAttributesResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+    ChipLogProgress(Zcl, "  discoveryComplete: %d", discoveryComplete);
+    ChipLogProgress(Zcl, "  extended: %d", extended);
+
+    GET_RESPONSE_CALLBACKS("emberAfDiscoverAttributesCallback");
+
+    // struct discoverAttributesResponseRecord[]
+    while (messageLen)
+    {
+        CHECK_MESSAGE_LENGTH(2);
+        uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+        ChipLogProgress(Zcl, "  attributeId: 0x%04x", attributeId);
+
+        CHECK_MESSAGE_LENGTH(1);
+        uint8_t attributeType = chip::Encoding::Read8(message); // zclType
+        ChipLogProgress(Zcl, "  attributeType: 0x%02x", attributeType);
+    }
+
+    Callback::Callback<DefaultSuccessCallback> * cb = Callback::Callback<DefaultSuccessCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfDiscoverCommandsGeneratedResponseCallback(ClusterId clusterId, uint16_t manufacturerCode, bool discoveryComplete,
+                                                      CommandId * commandIds, uint16_t commandIdCount)
+{
+    ChipLogProgress(Zcl, "DiscoverCommandsGeneratedResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+    ChipLogProgress(Zcl, "  manufacturerCode: 0x%04x", manufacturerCode);
+    ChipLogProgress(Zcl, "  discoveryComplete: %d", discoveryComplete);
+    ChipLogProgress(Zcl, "  commandIdCount: %" PRIu16, commandIdCount);
+
+    for (uint16_t i = 0; i < commandIdCount; i++)
+    {
+        ChipLogProgress(Zcl, "  commandId: 0x%02x", commandIds++);
+    }
+
+    GET_RESPONSE_CALLBACKS("emberAfDiscoverCommandsGeneratedResponseCallback");
+    Callback::Callback<DefaultSuccessCallback> * cb = Callback::Callback<DefaultSuccessCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfDiscoverCommandsReceivedResponseCallback(ClusterId clusterId, uint16_t manufacturerCode, bool discoveryComplete,
+                                                     CommandId * commandIds, uint16_t commandIdCount)
+{
+    ChipLogProgress(Zcl, "DiscoverCommandsReceivedResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+    ChipLogProgress(Zcl, "  manufacturerCode: 0x%04x", manufacturerCode);
+    ChipLogProgress(Zcl, "  discoveryComplete: %d", discoveryComplete);
+    ChipLogProgress(Zcl, "  commandIdCount: %" PRIu16, commandIdCount);
+
+    for (uint16_t i = 0; i < commandIdCount; i++)
+    {
+        ChipLogProgress(Zcl, "  commandId: 0x%02x", commandIds++);
+    }
+
+    GET_RESPONSE_CALLBACKS("emberAfDiscoverCommandsGeneratedResponseCallback");
+    Callback::Callback<DefaultSuccessCallback> * cb = Callback::Callback<DefaultSuccessCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfDoorLockClusterClearAllPinsResponseCallback(uint8_t status)
+{
+    ChipLogProgress(Zcl, "ClearAllPinsResponse:");
+    LogStatus(status);
+
+    GET_RESPONSE_CALLBACKS("DoorLockClusterClearAllPinsResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<DoorLockClusterClearAllPinsResponseCallback> * cb =
+        Callback::Callback<DoorLockClusterClearAllPinsResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfDoorLockClusterClearAllRfidsResponseCallback(uint8_t status)
+{
+    ChipLogProgress(Zcl, "ClearAllRfidsResponse:");
+    LogStatus(status);
+
+    GET_RESPONSE_CALLBACKS("DoorLockClusterClearAllRfidsResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<DoorLockClusterClearAllRfidsResponseCallback> * cb =
+        Callback::Callback<DoorLockClusterClearAllRfidsResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfDoorLockClusterClearHolidayScheduleResponseCallback(uint8_t status)
+{
+    ChipLogProgress(Zcl, "ClearHolidayScheduleResponse:");
+    LogStatus(status);
+
+    GET_RESPONSE_CALLBACKS("DoorLockClusterClearHolidayScheduleResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<DoorLockClusterClearHolidayScheduleResponseCallback> * cb =
+        Callback::Callback<DoorLockClusterClearHolidayScheduleResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfDoorLockClusterClearPinResponseCallback(uint8_t status)
+{
+    ChipLogProgress(Zcl, "ClearPinResponse:");
+    LogStatus(status);
+
+    GET_RESPONSE_CALLBACKS("DoorLockClusterClearPinResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<DoorLockClusterClearPinResponseCallback> * cb =
+        Callback::Callback<DoorLockClusterClearPinResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfDoorLockClusterClearRfidResponseCallback(uint8_t status)
+{
+    ChipLogProgress(Zcl, "ClearRfidResponse:");
+    LogStatus(status);
+
+    GET_RESPONSE_CALLBACKS("DoorLockClusterClearRfidResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<DoorLockClusterClearRfidResponseCallback> * cb =
+        Callback::Callback<DoorLockClusterClearRfidResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfDoorLockClusterClearWeekdayScheduleResponseCallback(uint8_t status)
+{
+    ChipLogProgress(Zcl, "ClearWeekdayScheduleResponse:");
+    LogStatus(status);
+
+    GET_RESPONSE_CALLBACKS("DoorLockClusterClearWeekdayScheduleResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<DoorLockClusterClearWeekdayScheduleResponseCallback> * cb =
+        Callback::Callback<DoorLockClusterClearWeekdayScheduleResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfDoorLockClusterClearYeardayScheduleResponseCallback(uint8_t status)
+{
+    ChipLogProgress(Zcl, "ClearYeardayScheduleResponse:");
+    LogStatus(status);
+
+    GET_RESPONSE_CALLBACKS("DoorLockClusterClearYeardayScheduleResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<DoorLockClusterClearYeardayScheduleResponseCallback> * cb =
+        Callback::Callback<DoorLockClusterClearYeardayScheduleResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfDoorLockClusterGetHolidayScheduleResponseCallback(uint8_t scheduleId, uint8_t status, uint32_t localStartTime,
+                                                              uint32_t localEndTime, uint8_t operatingModeDuringHoliday)
+{
+    ChipLogProgress(Zcl, "GetHolidayScheduleResponse:");
+    ChipLogProgress(Zcl, "  scheduleId: %" PRIu8 "", scheduleId);
+    LogStatus(status);
+    ChipLogProgress(Zcl, "  localStartTime: %" PRIu32 "", localStartTime);
+    ChipLogProgress(Zcl, "  localEndTime: %" PRIu32 "", localEndTime);
+    ChipLogProgress(Zcl, "  operatingModeDuringHoliday: %" PRIu8 "", operatingModeDuringHoliday);
+
+    GET_RESPONSE_CALLBACKS("DoorLockClusterGetHolidayScheduleResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<DoorLockClusterGetHolidayScheduleResponseCallback> * cb =
+        Callback::Callback<DoorLockClusterGetHolidayScheduleResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext, scheduleId, localStartTime, localEndTime, operatingModeDuringHoliday);
+    return true;
+}
+
+bool emberAfDoorLockClusterGetLogRecordResponseCallback(uint16_t logEntryId, uint32_t timestamp, uint8_t eventType, uint8_t source,
+                                                        uint8_t eventIdOrAlarmCode, uint16_t userId, uint8_t * pin)
+{
+    ChipLogProgress(Zcl, "GetLogRecordResponse:");
+    ChipLogProgress(Zcl, "  logEntryId: %" PRIu16 "", logEntryId);
+    ChipLogProgress(Zcl, "  timestamp: %" PRIu32 "", timestamp);
+    ChipLogProgress(Zcl, "  eventType: %" PRIu8 "", eventType);
+    ChipLogProgress(Zcl, "  source: %" PRIu8 "", source);
+    ChipLogProgress(Zcl, "  eventIdOrAlarmCode: %" PRIu8 "", eventIdOrAlarmCode);
+    ChipLogProgress(Zcl, "  userId: %" PRIu16 "", userId);
+    ChipLogProgress(Zcl, "  pin: %s", pin);
+
+    GET_RESPONSE_CALLBACKS("DoorLockClusterGetLogRecordResponseCallback");
+
+    Callback::Callback<DoorLockClusterGetLogRecordResponseCallback> * cb =
+        Callback::Callback<DoorLockClusterGetLogRecordResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext, logEntryId, timestamp, eventType, source, eventIdOrAlarmCode, userId, pin);
+    return true;
+}
+
+bool emberAfDoorLockClusterGetPinResponseCallback(uint16_t userId, uint8_t userStatus, uint8_t userType, uint8_t * pin)
+{
+    ChipLogProgress(Zcl, "GetPinResponse:");
+    ChipLogProgress(Zcl, "  userId: %" PRIu16 "", userId);
+    ChipLogProgress(Zcl, "  userStatus: %" PRIu8 "", userStatus);
+    ChipLogProgress(Zcl, "  userType: %" PRIu8 "", userType);
+    ChipLogProgress(Zcl, "  pin: %s", pin);
+
+    GET_RESPONSE_CALLBACKS("DoorLockClusterGetPinResponseCallback");
+
+    Callback::Callback<DoorLockClusterGetPinResponseCallback> * cb =
+        Callback::Callback<DoorLockClusterGetPinResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext, userId, userStatus, userType, pin);
+    return true;
+}
+
+bool emberAfDoorLockClusterGetRfidResponseCallback(uint16_t userId, uint8_t userStatus, uint8_t userType, uint8_t * rfid)
+{
+    ChipLogProgress(Zcl, "GetRfidResponse:");
+    ChipLogProgress(Zcl, "  userId: %" PRIu16 "", userId);
+    ChipLogProgress(Zcl, "  userStatus: %" PRIu8 "", userStatus);
+    ChipLogProgress(Zcl, "  userType: %" PRIu8 "", userType);
+    ChipLogProgress(Zcl, "  rfid: %s", rfid);
+
+    GET_RESPONSE_CALLBACKS("DoorLockClusterGetRfidResponseCallback");
+
+    Callback::Callback<DoorLockClusterGetRfidResponseCallback> * cb =
+        Callback::Callback<DoorLockClusterGetRfidResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext, userId, userStatus, userType, rfid);
+    return true;
+}
+
+bool emberAfDoorLockClusterGetUserTypeResponseCallback(uint16_t userId, uint8_t userType)
+{
+    ChipLogProgress(Zcl, "GetUserTypeResponse:");
+    ChipLogProgress(Zcl, "  userId: %" PRIu16 "", userId);
+    ChipLogProgress(Zcl, "  userType: %" PRIu8 "", userType);
+
+    GET_RESPONSE_CALLBACKS("DoorLockClusterGetUserTypeResponseCallback");
+
+    Callback::Callback<DoorLockClusterGetUserTypeResponseCallback> * cb =
+        Callback::Callback<DoorLockClusterGetUserTypeResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext, userId, userType);
+    return true;
+}
+
+bool emberAfDoorLockClusterGetWeekdayScheduleResponseCallback(uint8_t scheduleId, uint16_t userId, uint8_t status, uint8_t daysMask,
+                                                              uint8_t startHour, uint8_t startMinute, uint8_t endHour,
+                                                              uint8_t endMinute)
+{
+    ChipLogProgress(Zcl, "GetWeekdayScheduleResponse:");
+    ChipLogProgress(Zcl, "  scheduleId: %" PRIu8 "", scheduleId);
+    ChipLogProgress(Zcl, "  userId: %" PRIu16 "", userId);
+    LogStatus(status);
+    ChipLogProgress(Zcl, "  daysMask: %" PRIu8 "", daysMask);
+    ChipLogProgress(Zcl, "  startHour: %" PRIu8 "", startHour);
+    ChipLogProgress(Zcl, "  startMinute: %" PRIu8 "", startMinute);
+    ChipLogProgress(Zcl, "  endHour: %" PRIu8 "", endHour);
+    ChipLogProgress(Zcl, "  endMinute: %" PRIu8 "", endMinute);
+
+    GET_RESPONSE_CALLBACKS("DoorLockClusterGetWeekdayScheduleResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<DoorLockClusterGetWeekdayScheduleResponseCallback> * cb =
+        Callback::Callback<DoorLockClusterGetWeekdayScheduleResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext, scheduleId, userId, daysMask, startHour, startMinute, endHour, endMinute);
+    return true;
+}
+
+bool emberAfDoorLockClusterGetYeardayScheduleResponseCallback(uint8_t scheduleId, uint16_t userId, uint8_t status,
+                                                              uint32_t localStartTime, uint32_t localEndTime)
+{
+    ChipLogProgress(Zcl, "GetYeardayScheduleResponse:");
+    ChipLogProgress(Zcl, "  scheduleId: %" PRIu8 "", scheduleId);
+    ChipLogProgress(Zcl, "  userId: %" PRIu16 "", userId);
+    LogStatus(status);
+    ChipLogProgress(Zcl, "  localStartTime: %" PRIu32 "", localStartTime);
+    ChipLogProgress(Zcl, "  localEndTime: %" PRIu32 "", localEndTime);
+
+    GET_RESPONSE_CALLBACKS("DoorLockClusterGetYeardayScheduleResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<DoorLockClusterGetYeardayScheduleResponseCallback> * cb =
+        Callback::Callback<DoorLockClusterGetYeardayScheduleResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext, scheduleId, userId, localStartTime, localEndTime);
+    return true;
+}
+
+bool emberAfDoorLockClusterLockDoorResponseCallback(uint8_t status)
+{
+    ChipLogProgress(Zcl, "LockDoorResponse:");
+    LogStatus(status);
+
+    GET_RESPONSE_CALLBACKS("DoorLockClusterLockDoorResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<DoorLockClusterLockDoorResponseCallback> * cb =
+        Callback::Callback<DoorLockClusterLockDoorResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfDoorLockClusterSetHolidayScheduleResponseCallback(uint8_t status)
+{
+    ChipLogProgress(Zcl, "SetHolidayScheduleResponse:");
+    LogStatus(status);
+
+    GET_RESPONSE_CALLBACKS("DoorLockClusterSetHolidayScheduleResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<DoorLockClusterSetHolidayScheduleResponseCallback> * cb =
+        Callback::Callback<DoorLockClusterSetHolidayScheduleResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfDoorLockClusterSetPinResponseCallback(uint8_t status)
+{
+    ChipLogProgress(Zcl, "SetPinResponse:");
+    LogStatus(status);
+
+    GET_RESPONSE_CALLBACKS("DoorLockClusterSetPinResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<DoorLockClusterSetPinResponseCallback> * cb =
+        Callback::Callback<DoorLockClusterSetPinResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfDoorLockClusterSetRfidResponseCallback(uint8_t status)
+{
+    ChipLogProgress(Zcl, "SetRfidResponse:");
+    LogStatus(status);
+
+    GET_RESPONSE_CALLBACKS("DoorLockClusterSetRfidResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<DoorLockClusterSetRfidResponseCallback> * cb =
+        Callback::Callback<DoorLockClusterSetRfidResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfDoorLockClusterSetUserTypeResponseCallback(uint8_t status)
+{
+    ChipLogProgress(Zcl, "SetUserTypeResponse:");
+    LogStatus(status);
+
+    GET_RESPONSE_CALLBACKS("DoorLockClusterSetUserTypeResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<DoorLockClusterSetUserTypeResponseCallback> * cb =
+        Callback::Callback<DoorLockClusterSetUserTypeResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfDoorLockClusterSetWeekdayScheduleResponseCallback(uint8_t status)
+{
+    ChipLogProgress(Zcl, "SetWeekdayScheduleResponse:");
+    LogStatus(status);
+
+    GET_RESPONSE_CALLBACKS("DoorLockClusterSetWeekdayScheduleResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<DoorLockClusterSetWeekdayScheduleResponseCallback> * cb =
+        Callback::Callback<DoorLockClusterSetWeekdayScheduleResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfDoorLockClusterSetYeardayScheduleResponseCallback(uint8_t status)
+{
+    ChipLogProgress(Zcl, "SetYeardayScheduleResponse:");
+    LogStatus(status);
+
+    GET_RESPONSE_CALLBACKS("DoorLockClusterSetYeardayScheduleResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<DoorLockClusterSetYeardayScheduleResponseCallback> * cb =
+        Callback::Callback<DoorLockClusterSetYeardayScheduleResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfDoorLockClusterUnlockDoorResponseCallback(uint8_t status)
+{
+    ChipLogProgress(Zcl, "UnlockDoorResponse:");
+    LogStatus(status);
+
+    GET_RESPONSE_CALLBACKS("DoorLockClusterUnlockDoorResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<DoorLockClusterUnlockDoorResponseCallback> * cb =
+        Callback::Callback<DoorLockClusterUnlockDoorResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfDoorLockClusterUnlockWithTimeoutResponseCallback(uint8_t status)
+{
+    ChipLogProgress(Zcl, "UnlockWithTimeoutResponse:");
+    LogStatus(status);
+
+    GET_RESPONSE_CALLBACKS("DoorLockClusterUnlockWithTimeoutResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<DoorLockClusterUnlockWithTimeoutResponseCallback> * cb =
+        Callback::Callback<DoorLockClusterUnlockWithTimeoutResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfGroupsClusterAddGroupResponseCallback(uint8_t status, uint16_t groupId)
+{
+    ChipLogProgress(Zcl, "AddGroupResponse:");
+    LogStatus(status);
+    ChipLogProgress(Zcl, "  groupId: %" PRIu16 "", groupId);
+
+    GET_RESPONSE_CALLBACKS("GroupsClusterAddGroupResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<GroupsClusterAddGroupResponseCallback> * cb =
+        Callback::Callback<GroupsClusterAddGroupResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext, groupId);
+    return true;
+}
+
+bool emberAfGroupsClusterGetGroupMembershipResponseCallback(uint8_t capacity, uint8_t groupCount,
+                                                            /* TYPE WARNING: array array defaults to */ uint8_t * groupList)
+{
+    ChipLogProgress(Zcl, "GetGroupMembershipResponse:");
+    ChipLogProgress(Zcl, "  capacity: %" PRIu8 "", capacity);
+    ChipLogProgress(Zcl, "  groupCount: %" PRIu8 "", groupCount);
+    ChipLogProgress(Zcl, "  groupList: %p", groupList);
+
+    GET_RESPONSE_CALLBACKS("GroupsClusterGetGroupMembershipResponseCallback");
+
+    Callback::Callback<GroupsClusterGetGroupMembershipResponseCallback> * cb =
+        Callback::Callback<GroupsClusterGetGroupMembershipResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext, capacity, groupCount, groupList);
+    return true;
+}
+
+bool emberAfGroupsClusterRemoveGroupResponseCallback(uint8_t status, uint16_t groupId)
+{
+    ChipLogProgress(Zcl, "RemoveGroupResponse:");
+    LogStatus(status);
+    ChipLogProgress(Zcl, "  groupId: %" PRIu16 "", groupId);
+
+    GET_RESPONSE_CALLBACKS("GroupsClusterRemoveGroupResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<GroupsClusterRemoveGroupResponseCallback> * cb =
+        Callback::Callback<GroupsClusterRemoveGroupResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext, groupId);
+    return true;
+}
+
+bool emberAfGroupsClusterViewGroupResponseCallback(uint8_t status, uint16_t groupId, uint8_t * groupName)
+{
+    ChipLogProgress(Zcl, "ViewGroupResponse:");
+    LogStatus(status);
+    ChipLogProgress(Zcl, "  groupId: %" PRIu16 "", groupId);
+    ChipLogProgress(Zcl, "  groupName: %s", groupName);
+
+    GET_RESPONSE_CALLBACKS("GroupsClusterViewGroupResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<GroupsClusterViewGroupResponseCallback> * cb =
+        Callback::Callback<GroupsClusterViewGroupResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext, groupId, groupName);
+    return true;
+}
+
+bool emberAfIdentifyClusterIdentifyQueryResponseCallback(uint16_t timeout)
+{
+    ChipLogProgress(Zcl, "IdentifyQueryResponse:");
+    ChipLogProgress(Zcl, "  timeout: %" PRIu16 "", timeout);
+
+    GET_RESPONSE_CALLBACKS("IdentifyClusterIdentifyQueryResponseCallback");
+
+    Callback::Callback<IdentifyClusterIdentifyQueryResponseCallback> * cb =
+        Callback::Callback<IdentifyClusterIdentifyQueryResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext, timeout);
+    return true;
+}
+
+bool emberAfScenesClusterAddSceneResponseCallback(uint8_t status, uint16_t groupId, uint8_t sceneId)
+{
+    ChipLogProgress(Zcl, "AddSceneResponse:");
+    LogStatus(status);
+    ChipLogProgress(Zcl, "  groupId: %" PRIu16 "", groupId);
+    ChipLogProgress(Zcl, "  sceneId: %" PRIu8 "", sceneId);
+
+    GET_RESPONSE_CALLBACKS("ScenesClusterAddSceneResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<ScenesClusterAddSceneResponseCallback> * cb =
+        Callback::Callback<ScenesClusterAddSceneResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext, groupId, sceneId);
+    return true;
+}
+
+bool emberAfScenesClusterGetSceneMembershipResponseCallback(uint8_t status, uint8_t capacity, uint16_t groupId, uint8_t sceneCount,
+                                                            /* TYPE WARNING: array array defaults to */ uint8_t * sceneList)
+{
+    ChipLogProgress(Zcl, "GetSceneMembershipResponse:");
+    LogStatus(status);
+    ChipLogProgress(Zcl, "  capacity: %" PRIu8 "", capacity);
+    ChipLogProgress(Zcl, "  groupId: %" PRIu16 "", groupId);
+    ChipLogProgress(Zcl, "  sceneCount: %" PRIu8 "", sceneCount);
+    ChipLogProgress(Zcl, "  sceneList: %p", sceneList);
+
+    GET_RESPONSE_CALLBACKS("ScenesClusterGetSceneMembershipResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<ScenesClusterGetSceneMembershipResponseCallback> * cb =
+        Callback::Callback<ScenesClusterGetSceneMembershipResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext, capacity, groupId, sceneCount, sceneList);
+    return true;
+}
+
+bool emberAfScenesClusterRemoveAllScenesResponseCallback(uint8_t status, uint16_t groupId)
+{
+    ChipLogProgress(Zcl, "RemoveAllScenesResponse:");
+    LogStatus(status);
+    ChipLogProgress(Zcl, "  groupId: %" PRIu16 "", groupId);
+
+    GET_RESPONSE_CALLBACKS("ScenesClusterRemoveAllScenesResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<ScenesClusterRemoveAllScenesResponseCallback> * cb =
+        Callback::Callback<ScenesClusterRemoveAllScenesResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext, groupId);
+    return true;
+}
+
+bool emberAfScenesClusterRemoveSceneResponseCallback(uint8_t status, uint16_t groupId, uint8_t sceneId)
+{
+    ChipLogProgress(Zcl, "RemoveSceneResponse:");
+    LogStatus(status);
+    ChipLogProgress(Zcl, "  groupId: %" PRIu16 "", groupId);
+    ChipLogProgress(Zcl, "  sceneId: %" PRIu8 "", sceneId);
+
+    GET_RESPONSE_CALLBACKS("ScenesClusterRemoveSceneResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<ScenesClusterRemoveSceneResponseCallback> * cb =
+        Callback::Callback<ScenesClusterRemoveSceneResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext, groupId, sceneId);
+    return true;
+}
+
+bool emberAfScenesClusterStoreSceneResponseCallback(uint8_t status, uint16_t groupId, uint8_t sceneId)
+{
+    ChipLogProgress(Zcl, "StoreSceneResponse:");
+    LogStatus(status);
+    ChipLogProgress(Zcl, "  groupId: %" PRIu16 "", groupId);
+    ChipLogProgress(Zcl, "  sceneId: %" PRIu8 "", sceneId);
+
+    GET_RESPONSE_CALLBACKS("ScenesClusterStoreSceneResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<ScenesClusterStoreSceneResponseCallback> * cb =
+        Callback::Callback<ScenesClusterStoreSceneResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext, groupId, sceneId);
+    return true;
+}
+
+bool emberAfScenesClusterViewSceneResponseCallback(uint8_t status, uint16_t groupId, uint8_t sceneId, uint16_t transitionTime,
+                                                   uint8_t * sceneName,
+                                                   /* TYPE WARNING: array array defaults to */ uint8_t * extensionFieldSets)
+{
+    ChipLogProgress(Zcl, "ViewSceneResponse:");
+    LogStatus(status);
+    ChipLogProgress(Zcl, "  groupId: %" PRIu16 "", groupId);
+    ChipLogProgress(Zcl, "  sceneId: %" PRIu8 "", sceneId);
+    ChipLogProgress(Zcl, "  transitionTime: %" PRIu16 "", transitionTime);
+    ChipLogProgress(Zcl, "  sceneName: %s", sceneName);
+    ChipLogProgress(Zcl, "  extensionFieldSets: %p", extensionFieldSets);
+
+    GET_RESPONSE_CALLBACKS("ScenesClusterViewSceneResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<ScenesClusterViewSceneResponseCallback> * cb =
+        Callback::Callback<ScenesClusterViewSceneResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext, groupId, sceneId, transitionTime, sceneName, extensionFieldSets);
+    return true;
+}
+
+bool emberAfReportAttributesCallback(ClusterId clusterId, uint8_t * message, uint16_t messageLen)
+{
+    ChipLogProgress(Zcl, "emberAfReportAttributeCallback:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+
+    NodeId sourceId = emberAfCurrentCommand()->source;
+    ChipLogProgress(Zcl, "  Source NodeId: %" PRIu64, sourceId);
+
+    EndpointId endpointId = emberAfCurrentCommand()->apsFrame->sourceEndpoint;
+    ChipLogProgress(Zcl, "  Source EndpointId: 0x%04x", endpointId);
+
+    // TODO onFailureCallback is just here because of the CHECK_MESSAGE_LENGTH macro. It needs to be removed.
+    Callback::Cancelable * onFailureCallback = nullptr;
+
+    while (messageLen)
+    {
+        CHECK_MESSAGE_LENGTH(2);
+        uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+        ChipLogProgress(Zcl, "  attributeId: 0x%04x", attributeId);
+
+        GET_REPORT_CALLBACK("emberAfReportAttributesCallback");
+
+        CHECK_MESSAGE_LENGTH(1);
+        uint8_t attributeType = chip::Encoding::Read8(message);
+        ChipLogProgress(Zcl, "  attributeType: 0x%02x", attributeType);
+
+        switch (attributeType)
+        {
+        case 0x00: // nodata / No data
+        case 0x0A: // data24 / 24-bit data
+        case 0x0C: // data40 / 40-bit data
+        case 0x0D: // data48 / 48-bit data
+        case 0x0E: // data56 / 56-bit data
+        case 0x1A: // map24 / 24-bit bitmap
+        case 0x1C: // map40 / 40-bit bitmap
+        case 0x1D: // map48 / 48-bit bitmap
+        case 0x1E: // map56 / 56-bit bitmap
+        case 0x22: // uint24 / Unsigned 24-bit integer
+        case 0x24: // uint40 / Unsigned 40-bit integer
+        case 0x25: // uint48 / Unsigned 48-bit integer
+        case 0x26: // uint56 / Unsigned 56-bit integer
+        case 0x2A: // int24 / Signed 24-bit integer
+        case 0x2C: // int40 / Signed 40-bit integer
+        case 0x2D: // int48 / Signed 48-bit integer
+        case 0x2E: // int56 / Signed 56-bit integer
+        case 0x38: // semi / Semi-precision
+        case 0x39: // single / Single precision
+        case 0x3A: // double / Double precision
+        case 0x41: // octstr / Octet string
+        case 0x42: // string / Character string
+        case 0x43: // octstr16 / Long octet string
+        case 0x44: // string16 / Long character string
+        case 0x48: // array / Array
+        case 0x49: // struct / Structure
+        case 0x50: // set / Set
+        case 0x51: // bag / Bag
+        case 0xE0: // ToD / Time of day
+        {
+            ChipLogError(Zcl, "attributeType 0x%02x is not supported", attributeType);
+            return true;
+        }
+
+        case 0x08: // data8 / 8-bit data
+        case 0x18: // map8 / 8-bit bitmap
+        case 0x20: // uint8 / Unsigned  8-bit integer
+        case 0x30: // enum8 / 8-bit enumeration
+        {
+            CHECK_MESSAGE_LENGTH(1);
+            uint8_t value = chip::Encoding::Read8(message);
+            ChipLogProgress(Zcl, "  value: 0x%02x", value);
+
+            Callback::Callback<Int8uAttributeCallback> * cb =
+                Callback::Callback<Int8uAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x09: // data16 / 16-bit data
+        case 0x19: // map16 / 16-bit bitmap
+        case 0x21: // uint16 / Unsigned 16-bit integer
+        case 0x31: // enum16 / 16-bit enumeration
+        case 0xE8: // clusterId / Cluster ID
+        case 0xE9: // attribId / Attribute ID
+        case 0xEA: // bacOID / BACnet OID
+        case 0xF1: // key128 / 128-bit security key
+        case 0xFF: // unk / Unknown
+        {
+            CHECK_MESSAGE_LENGTH(2);
+            uint16_t value = chip::Encoding::LittleEndian::Read16(message);
+            ChipLogProgress(Zcl, "  value: 0x%04x", value);
+
+            Callback::Callback<Int16uAttributeCallback> * cb =
+                Callback::Callback<Int16uAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x0B: // data32 / 32-bit data
+        case 0x1B: // map32 / 32-bit bitmap
+        case 0x23: // uint32 / Unsigned 32-bit integer
+        case 0xE1: // date / Date
+        case 0xE2: // UTC / UTCTime
+        {
+            CHECK_MESSAGE_LENGTH(4);
+            uint32_t value = chip::Encoding::LittleEndian::Read32(message);
+            ChipLogProgress(Zcl, "  value: 0x%08x", value);
+
+            Callback::Callback<Int32uAttributeCallback> * cb =
+                Callback::Callback<Int32uAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x0F: // data64 / 64-bit data
+        case 0x1F: // map64 / 64-bit bitmap
+        case 0x27: // uint64 / Unsigned 64-bit integer
+        case 0xF0: // EUI64 / IEEE address
+        {
+            CHECK_MESSAGE_LENGTH(8);
+            uint64_t value = chip::Encoding::LittleEndian::Read64(message);
+            ChipLogProgress(Zcl, "  value: 0x%16x", value);
+
+            Callback::Callback<Int64uAttributeCallback> * cb =
+                Callback::Callback<Int64uAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x10: // bool / Boolean
+        {
+            CHECK_MESSAGE_LENGTH(1);
+            uint8_t value = chip::Encoding::Read8(message);
+            ChipLogProgress(Zcl, "  value: %d", value);
+
+            Callback::Callback<BooleanAttributeCallback> * cb =
+                Callback::Callback<BooleanAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x28: // int8 / Signed 8-bit integer
+        {
+            CHECK_MESSAGE_LENGTH(1);
+            int8_t value = chip::CastToSigned(chip::Encoding::Read8(message));
+            ChipLogProgress(Zcl, "  value: %" PRId8, value);
+
+            Callback::Callback<Int8sAttributeCallback> * cb =
+                Callback::Callback<Int8sAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x29: // int16 / Signed 16-bit integer
+        {
+            CHECK_MESSAGE_LENGTH(2);
+            int16_t value = chip::CastToSigned(chip::Encoding::LittleEndian::Read16(message));
+            ChipLogProgress(Zcl, "  value: %" PRId16, value);
+
+            Callback::Callback<Int16sAttributeCallback> * cb =
+                Callback::Callback<Int16sAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x2B: // int32 / Signed 32-bit integer
+        {
+            CHECK_MESSAGE_LENGTH(4);
+            int32_t value = chip::CastToSigned(chip::Encoding::LittleEndian::Read32(message));
+            ChipLogProgress(Zcl, "  value: %" PRId32, value);
+
+            Callback::Callback<Int32sAttributeCallback> * cb =
+                Callback::Callback<Int32sAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x2F: // int64 / Signed 64-bit integer
+        {
+            CHECK_MESSAGE_LENGTH(8);
+            int64_t value = chip::CastToSigned(chip::Encoding::LittleEndian::Read64(message));
+            ChipLogProgress(Zcl, "  value: %" PRId64, value);
+
+            Callback::Callback<Int64sAttributeCallback> * cb =
+                Callback::Callback<Int64sAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+        }
+    }
+
+    return true;
+}
diff --git a/examples/chip-tool/gen/CHIPClientCallbacks.h b/examples/chip-tool/gen/CHIPClientCallbacks.h
new file mode 100644
index 0000000..3e88cfc
--- /dev/null
+++ b/examples/chip-tool/gen/CHIPClientCallbacks.h
@@ -0,0 +1,86 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+#pragma once
+
+#include <inttypes.h>
+
+// Global Response Callbacks
+typedef void (*DefaultSuccessCallback)(void * context);
+typedef void (*DefaultFailureCallback)(void * context, uint8_t status);
+typedef void (*BooleanAttributeCallback)(void * context, bool value);
+typedef void (*Int8uAttributeCallback)(void * context, uint8_t value);
+typedef void (*Int8sAttributeCallback)(void * context, int8_t value);
+typedef void (*Int16uAttributeCallback)(void * context, uint16_t value);
+typedef void (*Int16sAttributeCallback)(void * context, int16_t value);
+typedef void (*Int32uAttributeCallback)(void * context, uint32_t value);
+typedef void (*Int32sAttributeCallback)(void * context, int32_t value);
+typedef void (*Int64uAttributeCallback)(void * context, uint64_t value);
+typedef void (*Int64sAttributeCallback)(void * context, int64_t value);
+typedef void (*ReadReportingConfigurationReportedCallback)(void * context, uint16_t minInterval, uint16_t maxInterval);
+typedef void (*ReadReportingConfigurationReceivedCallback)(void * context, uint16_t timeout);
+
+// Cluster Specific Response Callbacks
+typedef void (*DoorLockClusterClearAllPinsResponseCallback)(void * context);
+typedef void (*DoorLockClusterClearAllRfidsResponseCallback)(void * context);
+typedef void (*DoorLockClusterClearHolidayScheduleResponseCallback)(void * context);
+typedef void (*DoorLockClusterClearPinResponseCallback)(void * context);
+typedef void (*DoorLockClusterClearRfidResponseCallback)(void * context);
+typedef void (*DoorLockClusterClearWeekdayScheduleResponseCallback)(void * context);
+typedef void (*DoorLockClusterClearYeardayScheduleResponseCallback)(void * context);
+typedef void (*DoorLockClusterGetHolidayScheduleResponseCallback)(void * context, uint8_t scheduleId, uint32_t localStartTime,
+                                                                  uint32_t localEndTime, uint8_t operatingModeDuringHoliday);
+typedef void (*DoorLockClusterGetLogRecordResponseCallback)(void * context, uint16_t logEntryId, uint32_t timestamp,
+                                                            uint8_t eventType, uint8_t source, uint8_t eventIdOrAlarmCode,
+                                                            uint16_t userId, uint8_t * pin);
+typedef void (*DoorLockClusterGetPinResponseCallback)(void * context, uint16_t userId, uint8_t userStatus, uint8_t userType,
+                                                      uint8_t * pin);
+typedef void (*DoorLockClusterGetRfidResponseCallback)(void * context, uint16_t userId, uint8_t userStatus, uint8_t userType,
+                                                       uint8_t * rfid);
+typedef void (*DoorLockClusterGetUserTypeResponseCallback)(void * context, uint16_t userId, uint8_t userType);
+typedef void (*DoorLockClusterGetWeekdayScheduleResponseCallback)(void * context, uint8_t scheduleId, uint16_t userId,
+                                                                  uint8_t daysMask, uint8_t startHour, uint8_t startMinute,
+                                                                  uint8_t endHour, uint8_t endMinute);
+typedef void (*DoorLockClusterGetYeardayScheduleResponseCallback)(void * context, uint8_t scheduleId, uint16_t userId,
+                                                                  uint32_t localStartTime, uint32_t localEndTime);
+typedef void (*DoorLockClusterLockDoorResponseCallback)(void * context);
+typedef void (*DoorLockClusterSetHolidayScheduleResponseCallback)(void * context);
+typedef void (*DoorLockClusterSetPinResponseCallback)(void * context);
+typedef void (*DoorLockClusterSetRfidResponseCallback)(void * context);
+typedef void (*DoorLockClusterSetUserTypeResponseCallback)(void * context);
+typedef void (*DoorLockClusterSetWeekdayScheduleResponseCallback)(void * context);
+typedef void (*DoorLockClusterSetYeardayScheduleResponseCallback)(void * context);
+typedef void (*DoorLockClusterUnlockDoorResponseCallback)(void * context);
+typedef void (*DoorLockClusterUnlockWithTimeoutResponseCallback)(void * context);
+typedef void (*GroupsClusterAddGroupResponseCallback)(void * context, uint16_t groupId);
+typedef void (*GroupsClusterGetGroupMembershipResponseCallback)(void * context, uint8_t capacity, uint8_t groupCount,
+                                                                /* TYPE WARNING: array array defaults to */ uint8_t * groupList);
+typedef void (*GroupsClusterRemoveGroupResponseCallback)(void * context, uint16_t groupId);
+typedef void (*GroupsClusterViewGroupResponseCallback)(void * context, uint16_t groupId, uint8_t * groupName);
+typedef void (*IdentifyClusterIdentifyQueryResponseCallback)(void * context, uint16_t timeout);
+typedef void (*ScenesClusterAddSceneResponseCallback)(void * context, uint16_t groupId, uint8_t sceneId);
+typedef void (*ScenesClusterGetSceneMembershipResponseCallback)(void * context, uint8_t capacity, uint16_t groupId,
+                                                                uint8_t sceneCount,
+                                                                /* TYPE WARNING: array array defaults to */ uint8_t * sceneList);
+typedef void (*ScenesClusterRemoveAllScenesResponseCallback)(void * context, uint16_t groupId);
+typedef void (*ScenesClusterRemoveSceneResponseCallback)(void * context, uint16_t groupId, uint8_t sceneId);
+typedef void (*ScenesClusterStoreSceneResponseCallback)(void * context, uint16_t groupId, uint8_t sceneId);
+typedef void (*ScenesClusterViewSceneResponseCallback)(void * context, uint16_t groupId, uint8_t sceneId, uint16_t transitionTime,
+                                                       uint8_t * sceneName,
+                                                       /* TYPE WARNING: array array defaults to */ uint8_t * extensionFieldSets);
diff --git a/examples/chip-tool/gen/CHIPClustersObjc.h b/examples/chip-tool/gen/CHIPClustersObjc.h
new file mode 100644
index 0000000..e0a5978
--- /dev/null
+++ b/examples/chip-tool/gen/CHIPClustersObjc.h
@@ -0,0 +1,515 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+#ifndef CHIP_CLUSTERS_H
+#define CHIP_CLUSTERS_H
+
+#import <Foundation/Foundation.h>
+
+typedef void (^ResponseHandler)(NSError * _Nullable error, NSDictionary * _Nullable values);
+
+@class CHIPDevice;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CHIPBarrierControl : NSObject
+
+- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
+- (BOOL)barrierControlGoToPercent:(uint8_t)percentOpen completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)barrierControlStop:(ResponseHandler)completionHandler;
+
+- (BOOL)readAttributeBarrierMovingState:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeBarrierSafetyStatus:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeBarrierCapabilities:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeBarrierPosition:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler;
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CHIPBasic : NSObject
+
+- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
+- (BOOL)mfgSpecificPing:(ResponseHandler)completionHandler;
+- (BOOL)resetToFactoryDefaults:(ResponseHandler)completionHandler;
+
+- (BOOL)readAttributeZclVersion:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePowerSource:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler;
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CHIPBinding : NSObject
+
+- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
+- (BOOL)bind:(uint64_t)nodeId
+              groupId:(uint16_t)groupId
+           endpointId:(uint8_t)endpointId
+            clusterId:(uint16_t)clusterId
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)unbind:(uint64_t)nodeId
+              groupId:(uint16_t)groupId
+           endpointId:(uint8_t)endpointId
+            clusterId:(uint16_t)clusterId
+    completionHandler:(ResponseHandler)completionHandler;
+
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler;
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CHIPColorControl : NSObject
+
+- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
+- (BOOL)moveColor:(int16_t)rateX
+                rateY:(int16_t)rateY
+          optionsMask:(uint8_t)optionsMask
+      optionsOverride:(uint8_t)optionsOverride
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)moveColorTemperature:(uint8_t)moveMode
+                        rate:(uint16_t)rate
+     colorTemperatureMinimum:(uint16_t)colorTemperatureMinimum
+     colorTemperatureMaximum:(uint16_t)colorTemperatureMaximum
+                 optionsMask:(uint8_t)optionsMask
+             optionsOverride:(uint8_t)optionsOverride
+           completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)moveHue:(uint8_t)moveMode
+                 rate:(uint8_t)rate
+          optionsMask:(uint8_t)optionsMask
+      optionsOverride:(uint8_t)optionsOverride
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)moveSaturation:(uint8_t)moveMode
+                  rate:(uint8_t)rate
+           optionsMask:(uint8_t)optionsMask
+       optionsOverride:(uint8_t)optionsOverride
+     completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)moveToColor:(uint16_t)colorX
+               colorY:(uint16_t)colorY
+       transitionTime:(uint16_t)transitionTime
+          optionsMask:(uint8_t)optionsMask
+      optionsOverride:(uint8_t)optionsOverride
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)moveToColorTemperature:(uint16_t)colorTemperature
+                transitionTime:(uint16_t)transitionTime
+                   optionsMask:(uint8_t)optionsMask
+               optionsOverride:(uint8_t)optionsOverride
+             completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)moveToHue:(uint8_t)hue
+            direction:(uint8_t)direction
+       transitionTime:(uint16_t)transitionTime
+          optionsMask:(uint8_t)optionsMask
+      optionsOverride:(uint8_t)optionsOverride
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)moveToHueAndSaturation:(uint8_t)hue
+                    saturation:(uint8_t)saturation
+                transitionTime:(uint16_t)transitionTime
+                   optionsMask:(uint8_t)optionsMask
+               optionsOverride:(uint8_t)optionsOverride
+             completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)moveToSaturation:(uint8_t)saturation
+          transitionTime:(uint16_t)transitionTime
+             optionsMask:(uint8_t)optionsMask
+         optionsOverride:(uint8_t)optionsOverride
+       completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)stepColor:(int16_t)stepX
+                stepY:(int16_t)stepY
+       transitionTime:(uint16_t)transitionTime
+          optionsMask:(uint8_t)optionsMask
+      optionsOverride:(uint8_t)optionsOverride
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)stepColorTemperature:(uint8_t)stepMode
+                    stepSize:(uint16_t)stepSize
+              transitionTime:(uint16_t)transitionTime
+     colorTemperatureMinimum:(uint16_t)colorTemperatureMinimum
+     colorTemperatureMaximum:(uint16_t)colorTemperatureMaximum
+                 optionsMask:(uint8_t)optionsMask
+             optionsOverride:(uint8_t)optionsOverride
+           completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)stepHue:(uint8_t)stepMode
+             stepSize:(uint8_t)stepSize
+       transitionTime:(uint8_t)transitionTime
+          optionsMask:(uint8_t)optionsMask
+      optionsOverride:(uint8_t)optionsOverride
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)stepSaturation:(uint8_t)stepMode
+              stepSize:(uint8_t)stepSize
+        transitionTime:(uint8_t)transitionTime
+           optionsMask:(uint8_t)optionsMask
+       optionsOverride:(uint8_t)optionsOverride
+     completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)stopMoveStep:(uint8_t)optionsMask
+      optionsOverride:(uint8_t)optionsOverride
+    completionHandler:(ResponseHandler)completionHandler;
+
+- (BOOL)readAttributeCurrentHue:(ResponseHandler)completionHandler;
+- (BOOL)configureAttributeCurrentHue:(uint16_t)minInterval
+                         maxInterval:(uint16_t)maxInterval
+                              change:(uint8_t)change
+                   completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)reportAttributeCurrentHue:(ResponseHandler)reportHandler;
+- (BOOL)readAttributeCurrentSaturation:(ResponseHandler)completionHandler;
+- (BOOL)configureAttributeCurrentSaturation:(uint16_t)minInterval
+                                maxInterval:(uint16_t)maxInterval
+                                     change:(uint8_t)change
+                          completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)reportAttributeCurrentSaturation:(ResponseHandler)reportHandler;
+- (BOOL)readAttributeRemainingTime:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeCurrentX:(ResponseHandler)completionHandler;
+- (BOOL)configureAttributeCurrentX:(uint16_t)minInterval
+                       maxInterval:(uint16_t)maxInterval
+                            change:(uint16_t)change
+                 completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)reportAttributeCurrentX:(ResponseHandler)reportHandler;
+- (BOOL)readAttributeCurrentY:(ResponseHandler)completionHandler;
+- (BOOL)configureAttributeCurrentY:(uint16_t)minInterval
+                       maxInterval:(uint16_t)maxInterval
+                            change:(uint16_t)change
+                 completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)reportAttributeCurrentY:(ResponseHandler)reportHandler;
+- (BOOL)readAttributeDriftCompensation:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeCompensationText:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorTemperature:(ResponseHandler)completionHandler;
+- (BOOL)configureAttributeColorTemperature:(uint16_t)minInterval
+                               maxInterval:(uint16_t)maxInterval
+                                    change:(uint16_t)change
+                         completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)reportAttributeColorTemperature:(ResponseHandler)reportHandler;
+- (BOOL)readAttributeColorMode:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorControlOptions:(ResponseHandler)completionHandler;
+- (BOOL)writeAttributeColorControlOptions:(uint8_t)value completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeNumberOfPrimaries:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary1X:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary1Y:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary1Intensity:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary2X:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary2Y:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary2Intensity:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary3X:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary3Y:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary3Intensity:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary4X:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary4Y:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary4Intensity:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary5X:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary5Y:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary5Intensity:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary6X:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary6Y:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary6Intensity:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeWhitePointX:(ResponseHandler)completionHandler;
+- (BOOL)writeAttributeWhitePointX:(uint16_t)value completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeWhitePointY:(ResponseHandler)completionHandler;
+- (BOOL)writeAttributeWhitePointY:(uint16_t)value completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorPointRX:(ResponseHandler)completionHandler;
+- (BOOL)writeAttributeColorPointRX:(uint16_t)value completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorPointRY:(ResponseHandler)completionHandler;
+- (BOOL)writeAttributeColorPointRY:(uint16_t)value completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorPointRIntensity:(ResponseHandler)completionHandler;
+- (BOOL)writeAttributeColorPointRIntensity:(uint8_t)value completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorPointGX:(ResponseHandler)completionHandler;
+- (BOOL)writeAttributeColorPointGX:(uint16_t)value completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorPointGY:(ResponseHandler)completionHandler;
+- (BOOL)writeAttributeColorPointGY:(uint16_t)value completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorPointGIntensity:(ResponseHandler)completionHandler;
+- (BOOL)writeAttributeColorPointGIntensity:(uint8_t)value completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorPointBX:(ResponseHandler)completionHandler;
+- (BOOL)writeAttributeColorPointBX:(uint16_t)value completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorPointBY:(ResponseHandler)completionHandler;
+- (BOOL)writeAttributeColorPointBY:(uint16_t)value completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorPointBIntensity:(ResponseHandler)completionHandler;
+- (BOOL)writeAttributeColorPointBIntensity:(uint8_t)value completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeEnhancedCurrentHue:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeEnhancedColorMode:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorLoopActive:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorLoopDirection:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorLoopTime:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorCapabilities:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorTempPhysicalMin:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorTempPhysicalMax:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeCoupleColorTempToLevelMinMireds:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeStartUpColorTemperatureMireds:(ResponseHandler)completionHandler;
+- (BOOL)writeAttributeStartUpColorTemperatureMireds:(uint16_t)value completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler;
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CHIPDoorLock : NSObject
+
+- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
+- (BOOL)clearAllPins:(ResponseHandler)completionHandler;
+- (BOOL)clearAllRfids:(ResponseHandler)completionHandler;
+- (BOOL)clearHolidaySchedule:(uint8_t)scheduleId completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)clearPin:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)clearRfid:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)clearWeekdaySchedule:(uint8_t)scheduleId userId:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)clearYeardaySchedule:(uint8_t)scheduleId userId:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)getHolidaySchedule:(uint8_t)scheduleId completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)getLogRecord:(uint16_t)logIndex completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)getPin:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)getRfid:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)getUserType:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)getWeekdaySchedule:(uint8_t)scheduleId userId:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)getYeardaySchedule:(uint8_t)scheduleId userId:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)lockDoor:(char *)pin completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)setHolidaySchedule:(uint8_t)scheduleId
+                localStartTime:(uint32_t)localStartTime
+                  localEndTime:(uint32_t)localEndTime
+    operatingModeDuringHoliday:(uint8_t)operatingModeDuringHoliday
+             completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)setPin:(uint16_t)userId
+           userStatus:(uint8_t)userStatus
+             userType:(uint8_t)userType
+                  pin:(char *)pin
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)setRfid:(uint16_t)userId
+           userStatus:(uint8_t)userStatus
+             userType:(uint8_t)userType
+                   id:(char *)id
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)setUserType:(uint16_t)userId userType:(uint8_t)userType completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)setWeekdaySchedule:(uint8_t)scheduleId
+                    userId:(uint16_t)userId
+                  daysMask:(uint8_t)daysMask
+                 startHour:(uint8_t)startHour
+               startMinute:(uint8_t)startMinute
+                   endHour:(uint8_t)endHour
+                 endMinute:(uint8_t)endMinute
+         completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)setYeardaySchedule:(uint8_t)scheduleId
+                    userId:(uint16_t)userId
+            localStartTime:(uint32_t)localStartTime
+              localEndTime:(uint32_t)localEndTime
+         completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)unlockDoor:(char *)pin completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)unlockWithTimeout:(uint16_t)timeoutInSeconds pin:(char *)pin completionHandler:(ResponseHandler)completionHandler;
+
+- (BOOL)readAttributeLockState:(ResponseHandler)completionHandler;
+- (BOOL)configureAttributeLockState:(uint16_t)minInterval
+                        maxInterval:(uint16_t)maxInterval
+                  completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)reportAttributeLockState:(ResponseHandler)reportHandler;
+- (BOOL)readAttributeLockType:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeActuatorEnabled:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler;
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CHIPGroups : NSObject
+
+- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
+- (BOOL)addGroup:(uint16_t)groupId groupName:(char *)groupName completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)addGroupIfIdentifying:(uint16_t)groupId groupName:(char *)groupName completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)getGroupMembership:(uint8_t)groupCount groupList:(uint16_t)groupList completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)removeAllGroups:(ResponseHandler)completionHandler;
+- (BOOL)removeGroup:(uint16_t)groupId completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)viewGroup:(uint16_t)groupId completionHandler:(ResponseHandler)completionHandler;
+
+- (BOOL)readAttributeNameSupport:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler;
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CHIPIdentify : NSObject
+
+- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
+- (BOOL)identify:(uint16_t)identifyTime completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)identifyQuery:(ResponseHandler)completionHandler;
+
+- (BOOL)readAttributeIdentifyTime:(ResponseHandler)completionHandler;
+- (BOOL)writeAttributeIdentifyTime:(uint16_t)value completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler;
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CHIPLevelControl : NSObject
+
+- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
+- (BOOL)move:(uint8_t)moveMode
+                 rate:(uint8_t)rate
+           optionMask:(uint8_t)optionMask
+       optionOverride:(uint8_t)optionOverride
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)moveToLevel:(uint8_t)level
+       transitionTime:(uint16_t)transitionTime
+           optionMask:(uint8_t)optionMask
+       optionOverride:(uint8_t)optionOverride
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)moveToLevelWithOnOff:(uint8_t)level
+              transitionTime:(uint16_t)transitionTime
+           completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)moveWithOnOff:(uint8_t)moveMode rate:(uint8_t)rate completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)step:(uint8_t)stepMode
+             stepSize:(uint8_t)stepSize
+       transitionTime:(uint16_t)transitionTime
+           optionMask:(uint8_t)optionMask
+       optionOverride:(uint8_t)optionOverride
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)stepWithOnOff:(uint8_t)stepMode
+             stepSize:(uint8_t)stepSize
+       transitionTime:(uint16_t)transitionTime
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)stop:(uint8_t)optionMask optionOverride:(uint8_t)optionOverride completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)stopWithOnOff:(ResponseHandler)completionHandler;
+
+- (BOOL)readAttributeCurrentLevel:(ResponseHandler)completionHandler;
+- (BOOL)configureAttributeCurrentLevel:(uint16_t)minInterval
+                           maxInterval:(uint16_t)maxInterval
+                                change:(uint8_t)change
+                     completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)reportAttributeCurrentLevel:(ResponseHandler)reportHandler;
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler;
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CHIPOnOff : NSObject
+
+- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
+- (BOOL)off:(ResponseHandler)completionHandler;
+- (BOOL)on:(ResponseHandler)completionHandler;
+- (BOOL)toggle:(ResponseHandler)completionHandler;
+
+- (BOOL)readAttributeOnOff:(ResponseHandler)completionHandler;
+- (BOOL)configureAttributeOnOff:(uint16_t)minInterval
+                    maxInterval:(uint16_t)maxInterval
+              completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)reportAttributeOnOff:(ResponseHandler)reportHandler;
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler;
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CHIPScenes : NSObject
+
+- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
+- (BOOL)addScene:(uint16_t)groupId
+              sceneId:(uint8_t)sceneId
+       transitionTime:(uint16_t)transitionTime
+            sceneName:(char *)sceneName
+            clusterId:(uint16_t)clusterId
+               length:(uint8_t)length
+                value:(uint8_t)value
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)getSceneMembership:(uint16_t)groupId completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)recallScene:(uint16_t)groupId
+              sceneId:(uint8_t)sceneId
+       transitionTime:(uint16_t)transitionTime
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)removeAllScenes:(uint16_t)groupId completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)removeScene:(uint16_t)groupId sceneId:(uint8_t)sceneId completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)storeScene:(uint16_t)groupId sceneId:(uint8_t)sceneId completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)viewScene:(uint16_t)groupId sceneId:(uint8_t)sceneId completionHandler:(ResponseHandler)completionHandler;
+
+- (BOOL)readAttributeSceneCount:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeCurrentScene:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeCurrentGroup:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeSceneValid:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeNameSupport:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler;
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CHIPTemperatureMeasurement : NSObject
+
+- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
+
+- (BOOL)readAttributeMeasuredValue:(ResponseHandler)completionHandler;
+- (BOOL)configureAttributeMeasuredValue:(uint16_t)minInterval
+                            maxInterval:(uint16_t)maxInterval
+                                 change:(int16_t)change
+                      completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)reportAttributeMeasuredValue:(ResponseHandler)reportHandler;
+- (BOOL)readAttributeMinMeasuredValue:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeMaxMeasuredValue:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler;
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif /* CHIP_CLUSTERS_H */
diff --git a/examples/chip-tool/gen/CHIPClustersObjc.mm b/examples/chip-tool/gen/CHIPClustersObjc.mm
new file mode 100644
index 0000000..179c28b
--- /dev/null
+++ b/examples/chip-tool/gen/CHIPClustersObjc.mm
@@ -0,0 +1,5760 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+#import <Foundation/Foundation.h>
+
+#import "CHIPDevice.h"
+#import "CHIPDevice_Internal.h"
+#import "gen/CHIPClientCallbacks.h"
+#import "gen/CHIPClustersObjc.h"
+
+#include <controller/CHIPClusters.h>
+
+using namespace ::chip;
+
+class CHIPDefaultSuccessCallbackBridge : public Callback::Callback<DefaultSuccessCallback> {
+public:
+    CHIPDefaultSuccessCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DefaultSuccessCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDefaultSuccessCallbackBridge() {};
+
+    static void CallbackFn(void * context)
+    {
+        CHIPDefaultSuccessCallbackBridge * callback = reinterpret_cast<CHIPDefaultSuccessCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, nil);
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDefaultFailureCallbackBridge : public Callback::Callback<DefaultFailureCallback> {
+public:
+    CHIPDefaultFailureCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DefaultFailureCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDefaultFailureCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint8_t status)
+    {
+        CHIPDefaultFailureCallbackBridge * callback = reinterpret_cast<CHIPDefaultFailureCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                NSError * error = [NSError errorWithDomain:@"ZCL" code:status userInfo:@ { NSLocalizedDescriptionKey : @"" }];
+                callback->mHandler(error, nil);
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPUnsupportedAttributeCallbackBridge : public Callback::Callback<DefaultSuccessCallback> {
+public:
+    CHIPUnsupportedAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DefaultSuccessCallback>(CallbackFn, this)
+    {
+    }
+
+    ~CHIPUnsupportedAttributeCallbackBridge() {};
+
+    static void CallbackFn(void * context)
+    {
+        CHIPUnsupportedAttributeCallbackBridge * callback = reinterpret_cast<CHIPUnsupportedAttributeCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                NSError * error = [NSError errorWithDomain:@"ZCL"
+                                                      code:0
+                                                  userInfo:@ { NSLocalizedDescriptionKey : @"Unsuported attribute type" }];
+                callback->mHandler(error, nil);
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPBooleanAttributeCallbackBridge : public Callback::Callback<BooleanAttributeCallback> {
+public:
+    CHIPBooleanAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
+        : Callback::Callback<BooleanAttributeCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+        , mKeepAlive(keepAlive)
+    {
+    }
+
+    ~CHIPBooleanAttributeCallbackBridge() {};
+
+    static void CallbackFn(void * context, bool value)
+    {
+        CHIPBooleanAttributeCallbackBridge * callback = reinterpret_cast<CHIPBooleanAttributeCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ { @"value" : [NSNumber numberWithBool:value] });
+                if (!callback->mKeepAlive) {
+                    callback->Cancel();
+                    delete callback;
+                }
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+    bool mKeepAlive;
+};
+
+class CHIPInt8uAttributeCallbackBridge : public Callback::Callback<Int8uAttributeCallback> {
+public:
+    CHIPInt8uAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
+        : Callback::Callback<Int8uAttributeCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+        , mKeepAlive(keepAlive)
+    {
+    }
+
+    ~CHIPInt8uAttributeCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint8_t value)
+    {
+        CHIPInt8uAttributeCallbackBridge * callback = reinterpret_cast<CHIPInt8uAttributeCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ { @"value" : [NSNumber numberWithUnsignedChar:value] });
+                if (!callback->mKeepAlive) {
+                    callback->Cancel();
+                    delete callback;
+                }
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+    bool mKeepAlive;
+};
+
+class CHIPInt8sAttributeCallbackBridge : public Callback::Callback<Int8sAttributeCallback> {
+public:
+    CHIPInt8sAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
+        : Callback::Callback<Int8sAttributeCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+        , mKeepAlive(keepAlive)
+    {
+    }
+
+    ~CHIPInt8sAttributeCallbackBridge() {};
+
+    static void CallbackFn(void * context, int8_t value)
+    {
+        CHIPInt8sAttributeCallbackBridge * callback = reinterpret_cast<CHIPInt8sAttributeCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ { @"value" : [NSNumber numberWithChar:value] });
+                if (!callback->mKeepAlive) {
+                    callback->Cancel();
+                    delete callback;
+                }
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+    bool mKeepAlive;
+};
+
+class CHIPInt16uAttributeCallbackBridge : public Callback::Callback<Int16uAttributeCallback> {
+public:
+    CHIPInt16uAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
+        : Callback::Callback<Int16uAttributeCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+        , mKeepAlive(keepAlive)
+    {
+    }
+
+    ~CHIPInt16uAttributeCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint16_t value)
+    {
+        CHIPInt16uAttributeCallbackBridge * callback = reinterpret_cast<CHIPInt16uAttributeCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ { @"value" : [NSNumber numberWithUnsignedShort:value] });
+                if (!callback->mKeepAlive) {
+                    callback->Cancel();
+                    delete callback;
+                }
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+    bool mKeepAlive;
+};
+
+class CHIPInt16sAttributeCallbackBridge : public Callback::Callback<Int16sAttributeCallback> {
+public:
+    CHIPInt16sAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
+        : Callback::Callback<Int16sAttributeCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+        , mKeepAlive(keepAlive)
+    {
+    }
+
+    ~CHIPInt16sAttributeCallbackBridge() {};
+
+    static void CallbackFn(void * context, int16_t value)
+    {
+        CHIPInt16sAttributeCallbackBridge * callback = reinterpret_cast<CHIPInt16sAttributeCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ { @"value" : [NSNumber numberWithShort:value] });
+                if (!callback->mKeepAlive) {
+                    callback->Cancel();
+                    delete callback;
+                }
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+    bool mKeepAlive;
+};
+
+class CHIPDoorLockClusterClearAllPinsResponseCallbackBridge
+    : public Callback::Callback<DoorLockClusterClearAllPinsResponseCallback> {
+public:
+    CHIPDoorLockClusterClearAllPinsResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DoorLockClusterClearAllPinsResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDoorLockClusterClearAllPinsResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context)
+    {
+        CHIPDoorLockClusterClearAllPinsResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPDoorLockClusterClearAllPinsResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {});
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDoorLockClusterClearAllRfidsResponseCallbackBridge
+    : public Callback::Callback<DoorLockClusterClearAllRfidsResponseCallback> {
+public:
+    CHIPDoorLockClusterClearAllRfidsResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DoorLockClusterClearAllRfidsResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDoorLockClusterClearAllRfidsResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context)
+    {
+        CHIPDoorLockClusterClearAllRfidsResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPDoorLockClusterClearAllRfidsResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {});
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDoorLockClusterClearHolidayScheduleResponseCallbackBridge
+    : public Callback::Callback<DoorLockClusterClearHolidayScheduleResponseCallback> {
+public:
+    CHIPDoorLockClusterClearHolidayScheduleResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DoorLockClusterClearHolidayScheduleResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDoorLockClusterClearHolidayScheduleResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context)
+    {
+        CHIPDoorLockClusterClearHolidayScheduleResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPDoorLockClusterClearHolidayScheduleResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {});
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDoorLockClusterClearPinResponseCallbackBridge : public Callback::Callback<DoorLockClusterClearPinResponseCallback> {
+public:
+    CHIPDoorLockClusterClearPinResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DoorLockClusterClearPinResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDoorLockClusterClearPinResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context)
+    {
+        CHIPDoorLockClusterClearPinResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPDoorLockClusterClearPinResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {});
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDoorLockClusterClearRfidResponseCallbackBridge : public Callback::Callback<DoorLockClusterClearRfidResponseCallback> {
+public:
+    CHIPDoorLockClusterClearRfidResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DoorLockClusterClearRfidResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDoorLockClusterClearRfidResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context)
+    {
+        CHIPDoorLockClusterClearRfidResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPDoorLockClusterClearRfidResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {});
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDoorLockClusterClearWeekdayScheduleResponseCallbackBridge
+    : public Callback::Callback<DoorLockClusterClearWeekdayScheduleResponseCallback> {
+public:
+    CHIPDoorLockClusterClearWeekdayScheduleResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DoorLockClusterClearWeekdayScheduleResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDoorLockClusterClearWeekdayScheduleResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context)
+    {
+        CHIPDoorLockClusterClearWeekdayScheduleResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPDoorLockClusterClearWeekdayScheduleResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {});
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDoorLockClusterClearYeardayScheduleResponseCallbackBridge
+    : public Callback::Callback<DoorLockClusterClearYeardayScheduleResponseCallback> {
+public:
+    CHIPDoorLockClusterClearYeardayScheduleResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DoorLockClusterClearYeardayScheduleResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDoorLockClusterClearYeardayScheduleResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context)
+    {
+        CHIPDoorLockClusterClearYeardayScheduleResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPDoorLockClusterClearYeardayScheduleResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {});
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDoorLockClusterGetHolidayScheduleResponseCallbackBridge
+    : public Callback::Callback<DoorLockClusterGetHolidayScheduleResponseCallback> {
+public:
+    CHIPDoorLockClusterGetHolidayScheduleResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DoorLockClusterGetHolidayScheduleResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDoorLockClusterGetHolidayScheduleResponseCallbackBridge() {};
+
+    static void CallbackFn(
+        void * context, uint8_t scheduleId, uint32_t localStartTime, uint32_t localEndTime, uint8_t operatingModeDuringHoliday)
+    {
+        CHIPDoorLockClusterGetHolidayScheduleResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPDoorLockClusterGetHolidayScheduleResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {
+                    @"scheduleId" : [NSNumber numberWithUnsignedChar:scheduleId],
+                    @"localStartTime" : [NSNumber numberWithUnsignedLong:localStartTime],
+                    @"localEndTime" : [NSNumber numberWithUnsignedLong:localEndTime],
+                    @"operatingModeDuringHoliday" : [NSNumber numberWithUnsignedChar:operatingModeDuringHoliday],
+                });
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDoorLockClusterGetLogRecordResponseCallbackBridge
+    : public Callback::Callback<DoorLockClusterGetLogRecordResponseCallback> {
+public:
+    CHIPDoorLockClusterGetLogRecordResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DoorLockClusterGetLogRecordResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDoorLockClusterGetLogRecordResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint16_t logEntryId, uint32_t timestamp, uint8_t eventType, uint8_t source,
+        uint8_t eventIdOrAlarmCode, uint16_t userId, uint8_t * pin)
+    {
+        CHIPDoorLockClusterGetLogRecordResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPDoorLockClusterGetLogRecordResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {
+                    @"logEntryId" : [NSNumber numberWithUnsignedShort:logEntryId],
+                    @"timestamp" : [NSNumber numberWithUnsignedLong:timestamp],
+                    @"eventType" : [NSNumber numberWithUnsignedChar:eventType],
+                    @"source" : [NSNumber numberWithUnsignedChar:source],
+                    @"eventIdOrAlarmCode" : [NSNumber numberWithUnsignedChar:eventIdOrAlarmCode],
+                    @"userId" : [NSNumber numberWithUnsignedShort:userId],
+                    @"pin" : [NSString stringWithFormat:@"%s", pin],
+                });
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDoorLockClusterGetPinResponseCallbackBridge : public Callback::Callback<DoorLockClusterGetPinResponseCallback> {
+public:
+    CHIPDoorLockClusterGetPinResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DoorLockClusterGetPinResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDoorLockClusterGetPinResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint16_t userId, uint8_t userStatus, uint8_t userType, uint8_t * pin)
+    {
+        CHIPDoorLockClusterGetPinResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPDoorLockClusterGetPinResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {
+                    @"userId" : [NSNumber numberWithUnsignedShort:userId],
+                    @"userStatus" : [NSNumber numberWithUnsignedChar:userStatus],
+                    @"userType" : [NSNumber numberWithUnsignedChar:userType],
+                    @"pin" : [NSString stringWithFormat:@"%s", pin],
+                });
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDoorLockClusterGetRfidResponseCallbackBridge : public Callback::Callback<DoorLockClusterGetRfidResponseCallback> {
+public:
+    CHIPDoorLockClusterGetRfidResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DoorLockClusterGetRfidResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDoorLockClusterGetRfidResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint16_t userId, uint8_t userStatus, uint8_t userType, uint8_t * rfid)
+    {
+        CHIPDoorLockClusterGetRfidResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPDoorLockClusterGetRfidResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {
+                    @"userId" : [NSNumber numberWithUnsignedShort:userId],
+                    @"userStatus" : [NSNumber numberWithUnsignedChar:userStatus],
+                    @"userType" : [NSNumber numberWithUnsignedChar:userType],
+                    @"rfid" : [NSString stringWithFormat:@"%s", rfid],
+                });
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDoorLockClusterGetUserTypeResponseCallbackBridge : public Callback::Callback<DoorLockClusterGetUserTypeResponseCallback> {
+public:
+    CHIPDoorLockClusterGetUserTypeResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DoorLockClusterGetUserTypeResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDoorLockClusterGetUserTypeResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint16_t userId, uint8_t userType)
+    {
+        CHIPDoorLockClusterGetUserTypeResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPDoorLockClusterGetUserTypeResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {
+                    @"userId" : [NSNumber numberWithUnsignedShort:userId],
+                    @"userType" : [NSNumber numberWithUnsignedChar:userType],
+                });
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDoorLockClusterGetWeekdayScheduleResponseCallbackBridge
+    : public Callback::Callback<DoorLockClusterGetWeekdayScheduleResponseCallback> {
+public:
+    CHIPDoorLockClusterGetWeekdayScheduleResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DoorLockClusterGetWeekdayScheduleResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDoorLockClusterGetWeekdayScheduleResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint8_t scheduleId, uint16_t userId, uint8_t daysMask, uint8_t startHour,
+        uint8_t startMinute, uint8_t endHour, uint8_t endMinute)
+    {
+        CHIPDoorLockClusterGetWeekdayScheduleResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPDoorLockClusterGetWeekdayScheduleResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {
+                    @"scheduleId" : [NSNumber numberWithUnsignedChar:scheduleId],
+                    @"userId" : [NSNumber numberWithUnsignedShort:userId],
+                    @"daysMask" : [NSNumber numberWithUnsignedChar:daysMask],
+                    @"startHour" : [NSNumber numberWithUnsignedChar:startHour],
+                    @"startMinute" : [NSNumber numberWithUnsignedChar:startMinute],
+                    @"endHour" : [NSNumber numberWithUnsignedChar:endHour],
+                    @"endMinute" : [NSNumber numberWithUnsignedChar:endMinute],
+                });
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDoorLockClusterGetYeardayScheduleResponseCallbackBridge
+    : public Callback::Callback<DoorLockClusterGetYeardayScheduleResponseCallback> {
+public:
+    CHIPDoorLockClusterGetYeardayScheduleResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DoorLockClusterGetYeardayScheduleResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDoorLockClusterGetYeardayScheduleResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint8_t scheduleId, uint16_t userId, uint32_t localStartTime, uint32_t localEndTime)
+    {
+        CHIPDoorLockClusterGetYeardayScheduleResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPDoorLockClusterGetYeardayScheduleResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {
+                    @"scheduleId" : [NSNumber numberWithUnsignedChar:scheduleId],
+                    @"userId" : [NSNumber numberWithUnsignedShort:userId],
+                    @"localStartTime" : [NSNumber numberWithUnsignedLong:localStartTime],
+                    @"localEndTime" : [NSNumber numberWithUnsignedLong:localEndTime],
+                });
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDoorLockClusterLockDoorResponseCallbackBridge : public Callback::Callback<DoorLockClusterLockDoorResponseCallback> {
+public:
+    CHIPDoorLockClusterLockDoorResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DoorLockClusterLockDoorResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDoorLockClusterLockDoorResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context)
+    {
+        CHIPDoorLockClusterLockDoorResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPDoorLockClusterLockDoorResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {});
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDoorLockClusterSetHolidayScheduleResponseCallbackBridge
+    : public Callback::Callback<DoorLockClusterSetHolidayScheduleResponseCallback> {
+public:
+    CHIPDoorLockClusterSetHolidayScheduleResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DoorLockClusterSetHolidayScheduleResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDoorLockClusterSetHolidayScheduleResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context)
+    {
+        CHIPDoorLockClusterSetHolidayScheduleResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPDoorLockClusterSetHolidayScheduleResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {});
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDoorLockClusterSetPinResponseCallbackBridge : public Callback::Callback<DoorLockClusterSetPinResponseCallback> {
+public:
+    CHIPDoorLockClusterSetPinResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DoorLockClusterSetPinResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDoorLockClusterSetPinResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context)
+    {
+        CHIPDoorLockClusterSetPinResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPDoorLockClusterSetPinResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {});
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDoorLockClusterSetRfidResponseCallbackBridge : public Callback::Callback<DoorLockClusterSetRfidResponseCallback> {
+public:
+    CHIPDoorLockClusterSetRfidResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DoorLockClusterSetRfidResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDoorLockClusterSetRfidResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context)
+    {
+        CHIPDoorLockClusterSetRfidResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPDoorLockClusterSetRfidResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {});
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDoorLockClusterSetUserTypeResponseCallbackBridge : public Callback::Callback<DoorLockClusterSetUserTypeResponseCallback> {
+public:
+    CHIPDoorLockClusterSetUserTypeResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DoorLockClusterSetUserTypeResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDoorLockClusterSetUserTypeResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context)
+    {
+        CHIPDoorLockClusterSetUserTypeResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPDoorLockClusterSetUserTypeResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {});
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDoorLockClusterSetWeekdayScheduleResponseCallbackBridge
+    : public Callback::Callback<DoorLockClusterSetWeekdayScheduleResponseCallback> {
+public:
+    CHIPDoorLockClusterSetWeekdayScheduleResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DoorLockClusterSetWeekdayScheduleResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDoorLockClusterSetWeekdayScheduleResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context)
+    {
+        CHIPDoorLockClusterSetWeekdayScheduleResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPDoorLockClusterSetWeekdayScheduleResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {});
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDoorLockClusterSetYeardayScheduleResponseCallbackBridge
+    : public Callback::Callback<DoorLockClusterSetYeardayScheduleResponseCallback> {
+public:
+    CHIPDoorLockClusterSetYeardayScheduleResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DoorLockClusterSetYeardayScheduleResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDoorLockClusterSetYeardayScheduleResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context)
+    {
+        CHIPDoorLockClusterSetYeardayScheduleResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPDoorLockClusterSetYeardayScheduleResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {});
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDoorLockClusterUnlockDoorResponseCallbackBridge : public Callback::Callback<DoorLockClusterUnlockDoorResponseCallback> {
+public:
+    CHIPDoorLockClusterUnlockDoorResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DoorLockClusterUnlockDoorResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDoorLockClusterUnlockDoorResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context)
+    {
+        CHIPDoorLockClusterUnlockDoorResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPDoorLockClusterUnlockDoorResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {});
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDoorLockClusterUnlockWithTimeoutResponseCallbackBridge
+    : public Callback::Callback<DoorLockClusterUnlockWithTimeoutResponseCallback> {
+public:
+    CHIPDoorLockClusterUnlockWithTimeoutResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DoorLockClusterUnlockWithTimeoutResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDoorLockClusterUnlockWithTimeoutResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context)
+    {
+        CHIPDoorLockClusterUnlockWithTimeoutResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPDoorLockClusterUnlockWithTimeoutResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {});
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPGroupsClusterAddGroupResponseCallbackBridge : public Callback::Callback<GroupsClusterAddGroupResponseCallback> {
+public:
+    CHIPGroupsClusterAddGroupResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<GroupsClusterAddGroupResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPGroupsClusterAddGroupResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint16_t groupId)
+    {
+        CHIPGroupsClusterAddGroupResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPGroupsClusterAddGroupResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {
+                    @"groupId" : [NSNumber numberWithUnsignedShort:groupId],
+                });
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPGroupsClusterGetGroupMembershipResponseCallbackBridge
+    : public Callback::Callback<GroupsClusterGetGroupMembershipResponseCallback> {
+public:
+    CHIPGroupsClusterGetGroupMembershipResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<GroupsClusterGetGroupMembershipResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPGroupsClusterGetGroupMembershipResponseCallbackBridge() {};
+
+    static void CallbackFn(
+        void * context, uint8_t capacity, uint8_t groupCount, /* TYPE WARNING: array array defaults to */ uint8_t * groupList)
+    {
+        CHIPGroupsClusterGetGroupMembershipResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPGroupsClusterGetGroupMembershipResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {
+                    @"capacity" : [NSNumber numberWithUnsignedChar:capacity],
+                    @"groupCount" : [NSNumber numberWithUnsignedChar:groupCount],
+                    // groupList: /* TYPE WARNING: array array defaults to */ uint8_t *
+                    // Conversion from this type to Objc is not properly implemented yet
+                });
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPGroupsClusterRemoveGroupResponseCallbackBridge : public Callback::Callback<GroupsClusterRemoveGroupResponseCallback> {
+public:
+    CHIPGroupsClusterRemoveGroupResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<GroupsClusterRemoveGroupResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPGroupsClusterRemoveGroupResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint16_t groupId)
+    {
+        CHIPGroupsClusterRemoveGroupResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPGroupsClusterRemoveGroupResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {
+                    @"groupId" : [NSNumber numberWithUnsignedShort:groupId],
+                });
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPGroupsClusterViewGroupResponseCallbackBridge : public Callback::Callback<GroupsClusterViewGroupResponseCallback> {
+public:
+    CHIPGroupsClusterViewGroupResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<GroupsClusterViewGroupResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPGroupsClusterViewGroupResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint16_t groupId, uint8_t * groupName)
+    {
+        CHIPGroupsClusterViewGroupResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPGroupsClusterViewGroupResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {
+                    @"groupId" : [NSNumber numberWithUnsignedShort:groupId],
+                    @"groupName" : [NSString stringWithFormat:@"%s", groupName],
+                });
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPIdentifyClusterIdentifyQueryResponseCallbackBridge
+    : public Callback::Callback<IdentifyClusterIdentifyQueryResponseCallback> {
+public:
+    CHIPIdentifyClusterIdentifyQueryResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<IdentifyClusterIdentifyQueryResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPIdentifyClusterIdentifyQueryResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint16_t timeout)
+    {
+        CHIPIdentifyClusterIdentifyQueryResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPIdentifyClusterIdentifyQueryResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {
+                    @"timeout" : [NSNumber numberWithUnsignedShort:timeout],
+                });
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPScenesClusterAddSceneResponseCallbackBridge : public Callback::Callback<ScenesClusterAddSceneResponseCallback> {
+public:
+    CHIPScenesClusterAddSceneResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<ScenesClusterAddSceneResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPScenesClusterAddSceneResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint16_t groupId, uint8_t sceneId)
+    {
+        CHIPScenesClusterAddSceneResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPScenesClusterAddSceneResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {
+                    @"groupId" : [NSNumber numberWithUnsignedShort:groupId],
+                    @"sceneId" : [NSNumber numberWithUnsignedChar:sceneId],
+                });
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPScenesClusterGetSceneMembershipResponseCallbackBridge
+    : public Callback::Callback<ScenesClusterGetSceneMembershipResponseCallback> {
+public:
+    CHIPScenesClusterGetSceneMembershipResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<ScenesClusterGetSceneMembershipResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPScenesClusterGetSceneMembershipResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint8_t capacity, uint16_t groupId, uint8_t sceneCount,
+        /* TYPE WARNING: array array defaults to */ uint8_t * sceneList)
+    {
+        CHIPScenesClusterGetSceneMembershipResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPScenesClusterGetSceneMembershipResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {
+                    @"capacity" : [NSNumber numberWithUnsignedChar:capacity],
+                    @"groupId" : [NSNumber numberWithUnsignedShort:groupId],
+                    @"sceneCount" : [NSNumber numberWithUnsignedChar:sceneCount],
+                    // sceneList: /* TYPE WARNING: array array defaults to */ uint8_t *
+                    // Conversion from this type to Objc is not properly implemented yet
+                });
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPScenesClusterRemoveAllScenesResponseCallbackBridge
+    : public Callback::Callback<ScenesClusterRemoveAllScenesResponseCallback> {
+public:
+    CHIPScenesClusterRemoveAllScenesResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<ScenesClusterRemoveAllScenesResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPScenesClusterRemoveAllScenesResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint16_t groupId)
+    {
+        CHIPScenesClusterRemoveAllScenesResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPScenesClusterRemoveAllScenesResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {
+                    @"groupId" : [NSNumber numberWithUnsignedShort:groupId],
+                });
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPScenesClusterRemoveSceneResponseCallbackBridge : public Callback::Callback<ScenesClusterRemoveSceneResponseCallback> {
+public:
+    CHIPScenesClusterRemoveSceneResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<ScenesClusterRemoveSceneResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPScenesClusterRemoveSceneResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint16_t groupId, uint8_t sceneId)
+    {
+        CHIPScenesClusterRemoveSceneResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPScenesClusterRemoveSceneResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {
+                    @"groupId" : [NSNumber numberWithUnsignedShort:groupId],
+                    @"sceneId" : [NSNumber numberWithUnsignedChar:sceneId],
+                });
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPScenesClusterStoreSceneResponseCallbackBridge : public Callback::Callback<ScenesClusterStoreSceneResponseCallback> {
+public:
+    CHIPScenesClusterStoreSceneResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<ScenesClusterStoreSceneResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPScenesClusterStoreSceneResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint16_t groupId, uint8_t sceneId)
+    {
+        CHIPScenesClusterStoreSceneResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPScenesClusterStoreSceneResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {
+                    @"groupId" : [NSNumber numberWithUnsignedShort:groupId],
+                    @"sceneId" : [NSNumber numberWithUnsignedChar:sceneId],
+                });
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPScenesClusterViewSceneResponseCallbackBridge : public Callback::Callback<ScenesClusterViewSceneResponseCallback> {
+public:
+    CHIPScenesClusterViewSceneResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<ScenesClusterViewSceneResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPScenesClusterViewSceneResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint16_t groupId, uint8_t sceneId, uint16_t transitionTime, uint8_t * sceneName,
+        /* TYPE WARNING: array array defaults to */ uint8_t * extensionFieldSets)
+    {
+        CHIPScenesClusterViewSceneResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPScenesClusterViewSceneResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {
+                    @"groupId" : [NSNumber numberWithUnsignedShort:groupId],
+                    @"sceneId" : [NSNumber numberWithUnsignedChar:sceneId],
+                    @"transitionTime" : [NSNumber numberWithUnsignedShort:transitionTime],
+                    @"sceneName" : [NSString stringWithFormat:@"%s", sceneName],
+                    // extensionFieldSets: /* TYPE WARNING: array array defaults to */ uint8_t *
+                    // Conversion from this type to Objc is not properly implemented yet
+                });
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+@interface CHIPBarrierControl ()
+
+@property (readonly) Controller::BarrierControlCluster cppCluster;
+@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
+@end
+
+@implementation CHIPBarrierControl
+
+- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(EndpointId)endpoint queue:(dispatch_queue_t)queue
+{
+    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
+
+    if (err != CHIP_NO_ERROR) {
+        return nil;
+    }
+
+    if (self = [super init]) {
+        _callbackQueue = queue;
+    }
+
+    return self;
+}
+
+- (BOOL)barrierControlGoToPercent:(uint8_t)percentOpen completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.BarrierControlGoToPercent(onSuccess->Cancel(), onFailure->Cancel(), percentOpen);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)barrierControlStop:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.BarrierControlStop(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeBarrierMovingState:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeBarrierMovingState(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeBarrierSafetyStatus:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeBarrierSafetyStatus(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeBarrierCapabilities:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeBarrierCapabilities(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeBarrierPosition:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeBarrierPosition(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+@end
+
+@interface CHIPBasic ()
+
+@property (readonly) Controller::BasicCluster cppCluster;
+@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
+@end
+
+@implementation CHIPBasic
+
+- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(EndpointId)endpoint queue:(dispatch_queue_t)queue
+{
+    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
+
+    if (err != CHIP_NO_ERROR) {
+        return nil;
+    }
+
+    if (self = [super init]) {
+        _callbackQueue = queue;
+    }
+
+    return self;
+}
+
+- (BOOL)mfgSpecificPing:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.MfgSpecificPing(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)resetToFactoryDefaults:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ResetToFactoryDefaults(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeZclVersion:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeZclVersion(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePowerSource:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePowerSource(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+@end
+
+@interface CHIPBinding ()
+
+@property (readonly) Controller::BindingCluster cppCluster;
+@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
+@end
+
+@implementation CHIPBinding
+
+- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(EndpointId)endpoint queue:(dispatch_queue_t)queue
+{
+    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
+
+    if (err != CHIP_NO_ERROR) {
+        return nil;
+    }
+
+    if (self = [super init]) {
+        _callbackQueue = queue;
+    }
+
+    return self;
+}
+
+- (BOOL)bind:(uint64_t)nodeId
+              groupId:(uint16_t)groupId
+           endpointId:(uint8_t)endpointId
+            clusterId:(uint16_t)clusterId
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.Bind(onSuccess->Cancel(), onFailure->Cancel(), nodeId, groupId, endpointId, clusterId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)unbind:(uint64_t)nodeId
+              groupId:(uint16_t)groupId
+           endpointId:(uint8_t)endpointId
+            clusterId:(uint16_t)clusterId
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.Unbind(onSuccess->Cancel(), onFailure->Cancel(), nodeId, groupId, endpointId, clusterId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+@end
+
+@interface CHIPColorControl ()
+
+@property (readonly) Controller::ColorControlCluster cppCluster;
+@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
+@end
+
+@implementation CHIPColorControl
+
+- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(EndpointId)endpoint queue:(dispatch_queue_t)queue
+{
+    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
+
+    if (err != CHIP_NO_ERROR) {
+        return nil;
+    }
+
+    if (self = [super init]) {
+        _callbackQueue = queue;
+    }
+
+    return self;
+}
+
+- (BOOL)moveColor:(int16_t)rateX
+                rateY:(int16_t)rateY
+          optionsMask:(uint8_t)optionsMask
+      optionsOverride:(uint8_t)optionsOverride
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err
+        = self.cppCluster.MoveColor(onSuccess->Cancel(), onFailure->Cancel(), rateX, rateY, optionsMask, optionsOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)moveColorTemperature:(uint8_t)moveMode
+                        rate:(uint16_t)rate
+     colorTemperatureMinimum:(uint16_t)colorTemperatureMinimum
+     colorTemperatureMaximum:(uint16_t)colorTemperatureMaximum
+                 optionsMask:(uint8_t)optionsMask
+             optionsOverride:(uint8_t)optionsOverride
+           completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.MoveColorTemperature(onSuccess->Cancel(), onFailure->Cancel(), moveMode, rate,
+        colorTemperatureMinimum, colorTemperatureMaximum, optionsMask, optionsOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)moveHue:(uint8_t)moveMode
+                 rate:(uint8_t)rate
+          optionsMask:(uint8_t)optionsMask
+      optionsOverride:(uint8_t)optionsOverride
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err
+        = self.cppCluster.MoveHue(onSuccess->Cancel(), onFailure->Cancel(), moveMode, rate, optionsMask, optionsOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)moveSaturation:(uint8_t)moveMode
+                  rate:(uint8_t)rate
+           optionsMask:(uint8_t)optionsMask
+       optionsOverride:(uint8_t)optionsOverride
+     completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err
+        = self.cppCluster.MoveSaturation(onSuccess->Cancel(), onFailure->Cancel(), moveMode, rate, optionsMask, optionsOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)moveToColor:(uint16_t)colorX
+               colorY:(uint16_t)colorY
+       transitionTime:(uint16_t)transitionTime
+          optionsMask:(uint8_t)optionsMask
+      optionsOverride:(uint8_t)optionsOverride
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.MoveToColor(
+        onSuccess->Cancel(), onFailure->Cancel(), colorX, colorY, transitionTime, optionsMask, optionsOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)moveToColorTemperature:(uint16_t)colorTemperature
+                transitionTime:(uint16_t)transitionTime
+                   optionsMask:(uint8_t)optionsMask
+               optionsOverride:(uint8_t)optionsOverride
+             completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.MoveToColorTemperature(
+        onSuccess->Cancel(), onFailure->Cancel(), colorTemperature, transitionTime, optionsMask, optionsOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)moveToHue:(uint8_t)hue
+            direction:(uint8_t)direction
+       transitionTime:(uint16_t)transitionTime
+          optionsMask:(uint8_t)optionsMask
+      optionsOverride:(uint8_t)optionsOverride
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.MoveToHue(
+        onSuccess->Cancel(), onFailure->Cancel(), hue, direction, transitionTime, optionsMask, optionsOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)moveToHueAndSaturation:(uint8_t)hue
+                    saturation:(uint8_t)saturation
+                transitionTime:(uint16_t)transitionTime
+                   optionsMask:(uint8_t)optionsMask
+               optionsOverride:(uint8_t)optionsOverride
+             completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.MoveToHueAndSaturation(
+        onSuccess->Cancel(), onFailure->Cancel(), hue, saturation, transitionTime, optionsMask, optionsOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)moveToSaturation:(uint8_t)saturation
+          transitionTime:(uint16_t)transitionTime
+             optionsMask:(uint8_t)optionsMask
+         optionsOverride:(uint8_t)optionsOverride
+       completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.MoveToSaturation(
+        onSuccess->Cancel(), onFailure->Cancel(), saturation, transitionTime, optionsMask, optionsOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)stepColor:(int16_t)stepX
+                stepY:(int16_t)stepY
+       transitionTime:(uint16_t)transitionTime
+          optionsMask:(uint8_t)optionsMask
+      optionsOverride:(uint8_t)optionsOverride
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.StepColor(
+        onSuccess->Cancel(), onFailure->Cancel(), stepX, stepY, transitionTime, optionsMask, optionsOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)stepColorTemperature:(uint8_t)stepMode
+                    stepSize:(uint16_t)stepSize
+              transitionTime:(uint16_t)transitionTime
+     colorTemperatureMinimum:(uint16_t)colorTemperatureMinimum
+     colorTemperatureMaximum:(uint16_t)colorTemperatureMaximum
+                 optionsMask:(uint8_t)optionsMask
+             optionsOverride:(uint8_t)optionsOverride
+           completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.StepColorTemperature(onSuccess->Cancel(), onFailure->Cancel(), stepMode, stepSize,
+        transitionTime, colorTemperatureMinimum, colorTemperatureMaximum, optionsMask, optionsOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)stepHue:(uint8_t)stepMode
+             stepSize:(uint8_t)stepSize
+       transitionTime:(uint8_t)transitionTime
+          optionsMask:(uint8_t)optionsMask
+      optionsOverride:(uint8_t)optionsOverride
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.StepHue(
+        onSuccess->Cancel(), onFailure->Cancel(), stepMode, stepSize, transitionTime, optionsMask, optionsOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)stepSaturation:(uint8_t)stepMode
+              stepSize:(uint8_t)stepSize
+        transitionTime:(uint8_t)transitionTime
+           optionsMask:(uint8_t)optionsMask
+       optionsOverride:(uint8_t)optionsOverride
+     completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.StepSaturation(
+        onSuccess->Cancel(), onFailure->Cancel(), stepMode, stepSize, transitionTime, optionsMask, optionsOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)stopMoveStep:(uint8_t)optionsMask
+      optionsOverride:(uint8_t)optionsOverride
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.StopMoveStep(onSuccess->Cancel(), onFailure->Cancel(), optionsMask, optionsOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeCurrentHue:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeCurrentHue(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)configureAttributeCurrentHue:(uint16_t)minInterval
+                         maxInterval:(uint16_t)maxInterval
+                              change:(uint8_t)change
+                   completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err
+        = self.cppCluster.ConfigureAttributeCurrentHue(onSuccess->Cancel(), onFailure->Cancel(), minInterval, maxInterval, change);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)reportAttributeCurrentHue:(ResponseHandler)reportHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onReport = new CHIPInt8uAttributeCallbackBridge(reportHandler, _callbackQueue, true);
+    if (!onReport) {
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReportAttributeCurrentHue(onReport->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onReport;
+        return NO;
+    }
+
+    return YES;
+}
+
+- (BOOL)readAttributeCurrentSaturation:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeCurrentSaturation(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)configureAttributeCurrentSaturation:(uint16_t)minInterval
+                                maxInterval:(uint16_t)maxInterval
+                                     change:(uint8_t)change
+                          completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ConfigureAttributeCurrentSaturation(
+        onSuccess->Cancel(), onFailure->Cancel(), minInterval, maxInterval, change);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)reportAttributeCurrentSaturation:(ResponseHandler)reportHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onReport = new CHIPInt8uAttributeCallbackBridge(reportHandler, _callbackQueue, true);
+    if (!onReport) {
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReportAttributeCurrentSaturation(onReport->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onReport;
+        return NO;
+    }
+
+    return YES;
+}
+
+- (BOOL)readAttributeRemainingTime:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeRemainingTime(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeCurrentX:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeCurrentX(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)configureAttributeCurrentX:(uint16_t)minInterval
+                       maxInterval:(uint16_t)maxInterval
+                            change:(uint16_t)change
+                 completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err
+        = self.cppCluster.ConfigureAttributeCurrentX(onSuccess->Cancel(), onFailure->Cancel(), minInterval, maxInterval, change);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)reportAttributeCurrentX:(ResponseHandler)reportHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onReport = new CHIPInt16uAttributeCallbackBridge(reportHandler, _callbackQueue, true);
+    if (!onReport) {
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReportAttributeCurrentX(onReport->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onReport;
+        return NO;
+    }
+
+    return YES;
+}
+
+- (BOOL)readAttributeCurrentY:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeCurrentY(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)configureAttributeCurrentY:(uint16_t)minInterval
+                       maxInterval:(uint16_t)maxInterval
+                            change:(uint16_t)change
+                 completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err
+        = self.cppCluster.ConfigureAttributeCurrentY(onSuccess->Cancel(), onFailure->Cancel(), minInterval, maxInterval, change);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)reportAttributeCurrentY:(ResponseHandler)reportHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onReport = new CHIPInt16uAttributeCallbackBridge(reportHandler, _callbackQueue, true);
+    if (!onReport) {
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReportAttributeCurrentY(onReport->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onReport;
+        return NO;
+    }
+
+    return YES;
+}
+
+- (BOOL)readAttributeDriftCompensation:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeDriftCompensation(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeCompensationText:(ResponseHandler)completionHandler
+{
+    CHIPUnsupportedAttributeCallbackBridge * onSuccess
+        = new CHIPUnsupportedAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeCompensationText(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorTemperature:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorTemperature(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)configureAttributeColorTemperature:(uint16_t)minInterval
+                               maxInterval:(uint16_t)maxInterval
+                                    change:(uint16_t)change
+                         completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ConfigureAttributeColorTemperature(
+        onSuccess->Cancel(), onFailure->Cancel(), minInterval, maxInterval, change);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)reportAttributeColorTemperature:(ResponseHandler)reportHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onReport = new CHIPInt16uAttributeCallbackBridge(reportHandler, _callbackQueue, true);
+    if (!onReport) {
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReportAttributeColorTemperature(onReport->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onReport;
+        return NO;
+    }
+
+    return YES;
+}
+
+- (BOOL)readAttributeColorMode:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorMode(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorControlOptions:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorControlOptions(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)writeAttributeColorControlOptions:(uint8_t)value completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.WriteAttributeColorControlOptions(onSuccess->Cancel(), onFailure->Cancel(), value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeNumberOfPrimaries:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeNumberOfPrimaries(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary1X:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary1X(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary1Y:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary1Y(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary1Intensity:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary1Intensity(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary2X:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary2X(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary2Y:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary2Y(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary2Intensity:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary2Intensity(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary3X:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary3X(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary3Y:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary3Y(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary3Intensity:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary3Intensity(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary4X:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary4X(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary4Y:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary4Y(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary4Intensity:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary4Intensity(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary5X:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary5X(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary5Y:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary5Y(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary5Intensity:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary5Intensity(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary6X:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary6X(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary6Y:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary6Y(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary6Intensity:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary6Intensity(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeWhitePointX:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeWhitePointX(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)writeAttributeWhitePointX:(uint16_t)value completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.WriteAttributeWhitePointX(onSuccess->Cancel(), onFailure->Cancel(), value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeWhitePointY:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeWhitePointY(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)writeAttributeWhitePointY:(uint16_t)value completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.WriteAttributeWhitePointY(onSuccess->Cancel(), onFailure->Cancel(), value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorPointRX:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorPointRX(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)writeAttributeColorPointRX:(uint16_t)value completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.WriteAttributeColorPointRX(onSuccess->Cancel(), onFailure->Cancel(), value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorPointRY:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorPointRY(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)writeAttributeColorPointRY:(uint16_t)value completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.WriteAttributeColorPointRY(onSuccess->Cancel(), onFailure->Cancel(), value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorPointRIntensity:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorPointRIntensity(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)writeAttributeColorPointRIntensity:(uint8_t)value completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.WriteAttributeColorPointRIntensity(onSuccess->Cancel(), onFailure->Cancel(), value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorPointGX:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorPointGX(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)writeAttributeColorPointGX:(uint16_t)value completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.WriteAttributeColorPointGX(onSuccess->Cancel(), onFailure->Cancel(), value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorPointGY:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorPointGY(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)writeAttributeColorPointGY:(uint16_t)value completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.WriteAttributeColorPointGY(onSuccess->Cancel(), onFailure->Cancel(), value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorPointGIntensity:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorPointGIntensity(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)writeAttributeColorPointGIntensity:(uint8_t)value completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.WriteAttributeColorPointGIntensity(onSuccess->Cancel(), onFailure->Cancel(), value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorPointBX:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorPointBX(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)writeAttributeColorPointBX:(uint16_t)value completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.WriteAttributeColorPointBX(onSuccess->Cancel(), onFailure->Cancel(), value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorPointBY:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorPointBY(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)writeAttributeColorPointBY:(uint16_t)value completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.WriteAttributeColorPointBY(onSuccess->Cancel(), onFailure->Cancel(), value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorPointBIntensity:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorPointBIntensity(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)writeAttributeColorPointBIntensity:(uint8_t)value completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.WriteAttributeColorPointBIntensity(onSuccess->Cancel(), onFailure->Cancel(), value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeEnhancedCurrentHue:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeEnhancedCurrentHue(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeEnhancedColorMode:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeEnhancedColorMode(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorLoopActive:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorLoopActive(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorLoopDirection:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorLoopDirection(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorLoopTime:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorLoopTime(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorCapabilities:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorCapabilities(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorTempPhysicalMin:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorTempPhysicalMin(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorTempPhysicalMax:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorTempPhysicalMax(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeCoupleColorTempToLevelMinMireds:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeCoupleColorTempToLevelMinMireds(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeStartUpColorTemperatureMireds:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeStartUpColorTemperatureMireds(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)writeAttributeStartUpColorTemperatureMireds:(uint16_t)value completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.WriteAttributeStartUpColorTemperatureMireds(onSuccess->Cancel(), onFailure->Cancel(), value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+@end
+
+@interface CHIPDoorLock ()
+
+@property (readonly) Controller::DoorLockCluster cppCluster;
+@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
+@end
+
+@implementation CHIPDoorLock
+
+- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(EndpointId)endpoint queue:(dispatch_queue_t)queue
+{
+    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
+
+    if (err != CHIP_NO_ERROR) {
+        return nil;
+    }
+
+    if (self = [super init]) {
+        _callbackQueue = queue;
+    }
+
+    return self;
+}
+
+- (BOOL)clearAllPins:(ResponseHandler)completionHandler
+{
+    CHIPDoorLockClusterClearAllPinsResponseCallbackBridge * onSuccess
+        = new CHIPDoorLockClusterClearAllPinsResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ClearAllPins(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)clearAllRfids:(ResponseHandler)completionHandler
+{
+    CHIPDoorLockClusterClearAllRfidsResponseCallbackBridge * onSuccess
+        = new CHIPDoorLockClusterClearAllRfidsResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ClearAllRfids(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)clearHolidaySchedule:(uint8_t)scheduleId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDoorLockClusterClearHolidayScheduleResponseCallbackBridge * onSuccess
+        = new CHIPDoorLockClusterClearHolidayScheduleResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ClearHolidaySchedule(onSuccess->Cancel(), onFailure->Cancel(), scheduleId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)clearPin:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDoorLockClusterClearPinResponseCallbackBridge * onSuccess
+        = new CHIPDoorLockClusterClearPinResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ClearPin(onSuccess->Cancel(), onFailure->Cancel(), userId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)clearRfid:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDoorLockClusterClearRfidResponseCallbackBridge * onSuccess
+        = new CHIPDoorLockClusterClearRfidResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ClearRfid(onSuccess->Cancel(), onFailure->Cancel(), userId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)clearWeekdaySchedule:(uint8_t)scheduleId userId:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDoorLockClusterClearWeekdayScheduleResponseCallbackBridge * onSuccess
+        = new CHIPDoorLockClusterClearWeekdayScheduleResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ClearWeekdaySchedule(onSuccess->Cancel(), onFailure->Cancel(), scheduleId, userId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)clearYeardaySchedule:(uint8_t)scheduleId userId:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDoorLockClusterClearYeardayScheduleResponseCallbackBridge * onSuccess
+        = new CHIPDoorLockClusterClearYeardayScheduleResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ClearYeardaySchedule(onSuccess->Cancel(), onFailure->Cancel(), scheduleId, userId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)getHolidaySchedule:(uint8_t)scheduleId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDoorLockClusterGetHolidayScheduleResponseCallbackBridge * onSuccess
+        = new CHIPDoorLockClusterGetHolidayScheduleResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.GetHolidaySchedule(onSuccess->Cancel(), onFailure->Cancel(), scheduleId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)getLogRecord:(uint16_t)logIndex completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDoorLockClusterGetLogRecordResponseCallbackBridge * onSuccess
+        = new CHIPDoorLockClusterGetLogRecordResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.GetLogRecord(onSuccess->Cancel(), onFailure->Cancel(), logIndex);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)getPin:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDoorLockClusterGetPinResponseCallbackBridge * onSuccess
+        = new CHIPDoorLockClusterGetPinResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.GetPin(onSuccess->Cancel(), onFailure->Cancel(), userId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)getRfid:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDoorLockClusterGetRfidResponseCallbackBridge * onSuccess
+        = new CHIPDoorLockClusterGetRfidResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.GetRfid(onSuccess->Cancel(), onFailure->Cancel(), userId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)getUserType:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDoorLockClusterGetUserTypeResponseCallbackBridge * onSuccess
+        = new CHIPDoorLockClusterGetUserTypeResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.GetUserType(onSuccess->Cancel(), onFailure->Cancel(), userId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)getWeekdaySchedule:(uint8_t)scheduleId userId:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDoorLockClusterGetWeekdayScheduleResponseCallbackBridge * onSuccess
+        = new CHIPDoorLockClusterGetWeekdayScheduleResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.GetWeekdaySchedule(onSuccess->Cancel(), onFailure->Cancel(), scheduleId, userId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)getYeardaySchedule:(uint8_t)scheduleId userId:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDoorLockClusterGetYeardayScheduleResponseCallbackBridge * onSuccess
+        = new CHIPDoorLockClusterGetYeardayScheduleResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.GetYeardaySchedule(onSuccess->Cancel(), onFailure->Cancel(), scheduleId, userId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)lockDoor:(char *)pin completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDoorLockClusterLockDoorResponseCallbackBridge * onSuccess
+        = new CHIPDoorLockClusterLockDoorResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.LockDoor(onSuccess->Cancel(), onFailure->Cancel(), pin);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)setHolidaySchedule:(uint8_t)scheduleId
+                localStartTime:(uint32_t)localStartTime
+                  localEndTime:(uint32_t)localEndTime
+    operatingModeDuringHoliday:(uint8_t)operatingModeDuringHoliday
+             completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDoorLockClusterSetHolidayScheduleResponseCallbackBridge * onSuccess
+        = new CHIPDoorLockClusterSetHolidayScheduleResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.SetHolidaySchedule(
+        onSuccess->Cancel(), onFailure->Cancel(), scheduleId, localStartTime, localEndTime, operatingModeDuringHoliday);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)setPin:(uint16_t)userId
+           userStatus:(uint8_t)userStatus
+             userType:(uint8_t)userType
+                  pin:(char *)pin
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDoorLockClusterSetPinResponseCallbackBridge * onSuccess
+        = new CHIPDoorLockClusterSetPinResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.SetPin(onSuccess->Cancel(), onFailure->Cancel(), userId, userStatus, userType, pin);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)setRfid:(uint16_t)userId
+           userStatus:(uint8_t)userStatus
+             userType:(uint8_t)userType
+                   id:(char *)id
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDoorLockClusterSetRfidResponseCallbackBridge * onSuccess
+        = new CHIPDoorLockClusterSetRfidResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.SetRfid(onSuccess->Cancel(), onFailure->Cancel(), userId, userStatus, userType, id);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)setUserType:(uint16_t)userId userType:(uint8_t)userType completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDoorLockClusterSetUserTypeResponseCallbackBridge * onSuccess
+        = new CHIPDoorLockClusterSetUserTypeResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.SetUserType(onSuccess->Cancel(), onFailure->Cancel(), userId, userType);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)setWeekdaySchedule:(uint8_t)scheduleId
+                    userId:(uint16_t)userId
+                  daysMask:(uint8_t)daysMask
+                 startHour:(uint8_t)startHour
+               startMinute:(uint8_t)startMinute
+                   endHour:(uint8_t)endHour
+                 endMinute:(uint8_t)endMinute
+         completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDoorLockClusterSetWeekdayScheduleResponseCallbackBridge * onSuccess
+        = new CHIPDoorLockClusterSetWeekdayScheduleResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.SetWeekdaySchedule(
+        onSuccess->Cancel(), onFailure->Cancel(), scheduleId, userId, daysMask, startHour, startMinute, endHour, endMinute);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)setYeardaySchedule:(uint8_t)scheduleId
+                    userId:(uint16_t)userId
+            localStartTime:(uint32_t)localStartTime
+              localEndTime:(uint32_t)localEndTime
+         completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDoorLockClusterSetYeardayScheduleResponseCallbackBridge * onSuccess
+        = new CHIPDoorLockClusterSetYeardayScheduleResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.SetYeardaySchedule(
+        onSuccess->Cancel(), onFailure->Cancel(), scheduleId, userId, localStartTime, localEndTime);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)unlockDoor:(char *)pin completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDoorLockClusterUnlockDoorResponseCallbackBridge * onSuccess
+        = new CHIPDoorLockClusterUnlockDoorResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.UnlockDoor(onSuccess->Cancel(), onFailure->Cancel(), pin);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)unlockWithTimeout:(uint16_t)timeoutInSeconds pin:(char *)pin completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDoorLockClusterUnlockWithTimeoutResponseCallbackBridge * onSuccess
+        = new CHIPDoorLockClusterUnlockWithTimeoutResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.UnlockWithTimeout(onSuccess->Cancel(), onFailure->Cancel(), timeoutInSeconds, pin);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeLockState:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeLockState(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)configureAttributeLockState:(uint16_t)minInterval
+                        maxInterval:(uint16_t)maxInterval
+                  completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err
+        = self.cppCluster.ConfigureAttributeLockState(onSuccess->Cancel(), onFailure->Cancel(), minInterval, maxInterval);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)reportAttributeLockState:(ResponseHandler)reportHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onReport = new CHIPInt8uAttributeCallbackBridge(reportHandler, _callbackQueue, true);
+    if (!onReport) {
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReportAttributeLockState(onReport->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onReport;
+        return NO;
+    }
+
+    return YES;
+}
+
+- (BOOL)readAttributeLockType:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeLockType(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeActuatorEnabled:(ResponseHandler)completionHandler
+{
+    CHIPBooleanAttributeCallbackBridge * onSuccess = new CHIPBooleanAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeActuatorEnabled(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+@end
+
+@interface CHIPGroups ()
+
+@property (readonly) Controller::GroupsCluster cppCluster;
+@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
+@end
+
+@implementation CHIPGroups
+
+- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(EndpointId)endpoint queue:(dispatch_queue_t)queue
+{
+    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
+
+    if (err != CHIP_NO_ERROR) {
+        return nil;
+    }
+
+    if (self = [super init]) {
+        _callbackQueue = queue;
+    }
+
+    return self;
+}
+
+- (BOOL)addGroup:(uint16_t)groupId groupName:(char *)groupName completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPGroupsClusterAddGroupResponseCallbackBridge * onSuccess
+        = new CHIPGroupsClusterAddGroupResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.AddGroup(onSuccess->Cancel(), onFailure->Cancel(), groupId, groupName);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)addGroupIfIdentifying:(uint16_t)groupId groupName:(char *)groupName completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.AddGroupIfIdentifying(onSuccess->Cancel(), onFailure->Cancel(), groupId, groupName);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)getGroupMembership:(uint8_t)groupCount groupList:(uint16_t)groupList completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPGroupsClusterGetGroupMembershipResponseCallbackBridge * onSuccess
+        = new CHIPGroupsClusterGetGroupMembershipResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.GetGroupMembership(onSuccess->Cancel(), onFailure->Cancel(), groupCount, groupList);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)removeAllGroups:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.RemoveAllGroups(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)removeGroup:(uint16_t)groupId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPGroupsClusterRemoveGroupResponseCallbackBridge * onSuccess
+        = new CHIPGroupsClusterRemoveGroupResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.RemoveGroup(onSuccess->Cancel(), onFailure->Cancel(), groupId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)viewGroup:(uint16_t)groupId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPGroupsClusterViewGroupResponseCallbackBridge * onSuccess
+        = new CHIPGroupsClusterViewGroupResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ViewGroup(onSuccess->Cancel(), onFailure->Cancel(), groupId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeNameSupport:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeNameSupport(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+@end
+
+@interface CHIPIdentify ()
+
+@property (readonly) Controller::IdentifyCluster cppCluster;
+@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
+@end
+
+@implementation CHIPIdentify
+
+- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(EndpointId)endpoint queue:(dispatch_queue_t)queue
+{
+    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
+
+    if (err != CHIP_NO_ERROR) {
+        return nil;
+    }
+
+    if (self = [super init]) {
+        _callbackQueue = queue;
+    }
+
+    return self;
+}
+
+- (BOOL)identify:(uint16_t)identifyTime completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.Identify(onSuccess->Cancel(), onFailure->Cancel(), identifyTime);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)identifyQuery:(ResponseHandler)completionHandler
+{
+    CHIPIdentifyClusterIdentifyQueryResponseCallbackBridge * onSuccess
+        = new CHIPIdentifyClusterIdentifyQueryResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.IdentifyQuery(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeIdentifyTime:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeIdentifyTime(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)writeAttributeIdentifyTime:(uint16_t)value completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.WriteAttributeIdentifyTime(onSuccess->Cancel(), onFailure->Cancel(), value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+@end
+
+@interface CHIPLevelControl ()
+
+@property (readonly) Controller::LevelControlCluster cppCluster;
+@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
+@end
+
+@implementation CHIPLevelControl
+
+- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(EndpointId)endpoint queue:(dispatch_queue_t)queue
+{
+    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
+
+    if (err != CHIP_NO_ERROR) {
+        return nil;
+    }
+
+    if (self = [super init]) {
+        _callbackQueue = queue;
+    }
+
+    return self;
+}
+
+- (BOOL)move:(uint8_t)moveMode
+                 rate:(uint8_t)rate
+           optionMask:(uint8_t)optionMask
+       optionOverride:(uint8_t)optionOverride
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.Move(onSuccess->Cancel(), onFailure->Cancel(), moveMode, rate, optionMask, optionOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)moveToLevel:(uint8_t)level
+       transitionTime:(uint16_t)transitionTime
+           optionMask:(uint8_t)optionMask
+       optionOverride:(uint8_t)optionOverride
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err
+        = self.cppCluster.MoveToLevel(onSuccess->Cancel(), onFailure->Cancel(), level, transitionTime, optionMask, optionOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)moveToLevelWithOnOff:(uint8_t)level
+              transitionTime:(uint16_t)transitionTime
+           completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.MoveToLevelWithOnOff(onSuccess->Cancel(), onFailure->Cancel(), level, transitionTime);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)moveWithOnOff:(uint8_t)moveMode rate:(uint8_t)rate completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.MoveWithOnOff(onSuccess->Cancel(), onFailure->Cancel(), moveMode, rate);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)step:(uint8_t)stepMode
+             stepSize:(uint8_t)stepSize
+       transitionTime:(uint16_t)transitionTime
+           optionMask:(uint8_t)optionMask
+       optionOverride:(uint8_t)optionOverride
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.Step(
+        onSuccess->Cancel(), onFailure->Cancel(), stepMode, stepSize, transitionTime, optionMask, optionOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)stepWithOnOff:(uint8_t)stepMode
+             stepSize:(uint8_t)stepSize
+       transitionTime:(uint16_t)transitionTime
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.StepWithOnOff(onSuccess->Cancel(), onFailure->Cancel(), stepMode, stepSize, transitionTime);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)stop:(uint8_t)optionMask optionOverride:(uint8_t)optionOverride completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.Stop(onSuccess->Cancel(), onFailure->Cancel(), optionMask, optionOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)stopWithOnOff:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.StopWithOnOff(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeCurrentLevel:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeCurrentLevel(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)configureAttributeCurrentLevel:(uint16_t)minInterval
+                           maxInterval:(uint16_t)maxInterval
+                                change:(uint8_t)change
+                     completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ConfigureAttributeCurrentLevel(
+        onSuccess->Cancel(), onFailure->Cancel(), minInterval, maxInterval, change);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)reportAttributeCurrentLevel:(ResponseHandler)reportHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onReport = new CHIPInt8uAttributeCallbackBridge(reportHandler, _callbackQueue, true);
+    if (!onReport) {
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReportAttributeCurrentLevel(onReport->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onReport;
+        return NO;
+    }
+
+    return YES;
+}
+
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+@end
+
+@interface CHIPOnOff ()
+
+@property (readonly) Controller::OnOffCluster cppCluster;
+@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
+@end
+
+@implementation CHIPOnOff
+
+- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(EndpointId)endpoint queue:(dispatch_queue_t)queue
+{
+    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
+
+    if (err != CHIP_NO_ERROR) {
+        return nil;
+    }
+
+    if (self = [super init]) {
+        _callbackQueue = queue;
+    }
+
+    return self;
+}
+
+- (BOOL)off:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.Off(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)on:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.On(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)toggle:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.Toggle(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeOnOff:(ResponseHandler)completionHandler
+{
+    CHIPBooleanAttributeCallbackBridge * onSuccess = new CHIPBooleanAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeOnOff(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)configureAttributeOnOff:(uint16_t)minInterval
+                    maxInterval:(uint16_t)maxInterval
+              completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ConfigureAttributeOnOff(onSuccess->Cancel(), onFailure->Cancel(), minInterval, maxInterval);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)reportAttributeOnOff:(ResponseHandler)reportHandler
+{
+    CHIPBooleanAttributeCallbackBridge * onReport = new CHIPBooleanAttributeCallbackBridge(reportHandler, _callbackQueue, true);
+    if (!onReport) {
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReportAttributeOnOff(onReport->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onReport;
+        return NO;
+    }
+
+    return YES;
+}
+
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+@end
+
+@interface CHIPScenes ()
+
+@property (readonly) Controller::ScenesCluster cppCluster;
+@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
+@end
+
+@implementation CHIPScenes
+
+- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(EndpointId)endpoint queue:(dispatch_queue_t)queue
+{
+    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
+
+    if (err != CHIP_NO_ERROR) {
+        return nil;
+    }
+
+    if (self = [super init]) {
+        _callbackQueue = queue;
+    }
+
+    return self;
+}
+
+- (BOOL)addScene:(uint16_t)groupId
+              sceneId:(uint8_t)sceneId
+       transitionTime:(uint16_t)transitionTime
+            sceneName:(char *)sceneName
+            clusterId:(uint16_t)clusterId
+               length:(uint8_t)length
+                value:(uint8_t)value
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPScenesClusterAddSceneResponseCallbackBridge * onSuccess
+        = new CHIPScenesClusterAddSceneResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.AddScene(
+        onSuccess->Cancel(), onFailure->Cancel(), groupId, sceneId, transitionTime, sceneName, clusterId, length, value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)getSceneMembership:(uint16_t)groupId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPScenesClusterGetSceneMembershipResponseCallbackBridge * onSuccess
+        = new CHIPScenesClusterGetSceneMembershipResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.GetSceneMembership(onSuccess->Cancel(), onFailure->Cancel(), groupId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)recallScene:(uint16_t)groupId
+              sceneId:(uint8_t)sceneId
+       transitionTime:(uint16_t)transitionTime
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.RecallScene(onSuccess->Cancel(), onFailure->Cancel(), groupId, sceneId, transitionTime);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)removeAllScenes:(uint16_t)groupId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPScenesClusterRemoveAllScenesResponseCallbackBridge * onSuccess
+        = new CHIPScenesClusterRemoveAllScenesResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.RemoveAllScenes(onSuccess->Cancel(), onFailure->Cancel(), groupId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)removeScene:(uint16_t)groupId sceneId:(uint8_t)sceneId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPScenesClusterRemoveSceneResponseCallbackBridge * onSuccess
+        = new CHIPScenesClusterRemoveSceneResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.RemoveScene(onSuccess->Cancel(), onFailure->Cancel(), groupId, sceneId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)storeScene:(uint16_t)groupId sceneId:(uint8_t)sceneId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPScenesClusterStoreSceneResponseCallbackBridge * onSuccess
+        = new CHIPScenesClusterStoreSceneResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.StoreScene(onSuccess->Cancel(), onFailure->Cancel(), groupId, sceneId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)viewScene:(uint16_t)groupId sceneId:(uint8_t)sceneId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPScenesClusterViewSceneResponseCallbackBridge * onSuccess
+        = new CHIPScenesClusterViewSceneResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ViewScene(onSuccess->Cancel(), onFailure->Cancel(), groupId, sceneId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeSceneCount:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeSceneCount(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeCurrentScene:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeCurrentScene(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeCurrentGroup:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeCurrentGroup(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeSceneValid:(ResponseHandler)completionHandler
+{
+    CHIPBooleanAttributeCallbackBridge * onSuccess = new CHIPBooleanAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeSceneValid(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeNameSupport:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeNameSupport(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+@end
+
+@interface CHIPTemperatureMeasurement ()
+
+@property (readonly) Controller::TemperatureMeasurementCluster cppCluster;
+@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
+@end
+
+@implementation CHIPTemperatureMeasurement
+
+- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(EndpointId)endpoint queue:(dispatch_queue_t)queue
+{
+    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
+
+    if (err != CHIP_NO_ERROR) {
+        return nil;
+    }
+
+    if (self = [super init]) {
+        _callbackQueue = queue;
+    }
+
+    return self;
+}
+
+- (BOOL)readAttributeMeasuredValue:(ResponseHandler)completionHandler
+{
+    CHIPInt16sAttributeCallbackBridge * onSuccess = new CHIPInt16sAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeMeasuredValue(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)configureAttributeMeasuredValue:(uint16_t)minInterval
+                            maxInterval:(uint16_t)maxInterval
+                                 change:(int16_t)change
+                      completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ConfigureAttributeMeasuredValue(
+        onSuccess->Cancel(), onFailure->Cancel(), minInterval, maxInterval, change);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)reportAttributeMeasuredValue:(ResponseHandler)reportHandler
+{
+    CHIPInt16sAttributeCallbackBridge * onReport = new CHIPInt16sAttributeCallbackBridge(reportHandler, _callbackQueue, true);
+    if (!onReport) {
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReportAttributeMeasuredValue(onReport->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onReport;
+        return NO;
+    }
+
+    return YES;
+}
+
+- (BOOL)readAttributeMinMeasuredValue:(ResponseHandler)completionHandler
+{
+    CHIPInt16sAttributeCallbackBridge * onSuccess = new CHIPInt16sAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeMinMeasuredValue(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeMaxMeasuredValue:(ResponseHandler)completionHandler
+{
+    CHIPInt16sAttributeCallbackBridge * onSuccess = new CHIPInt16sAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeMaxMeasuredValue(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+@end
diff --git a/examples/chip-tool/gen/af-gen-event.h b/examples/chip-tool/gen/af-gen-event.h
new file mode 100644
index 0000000..9dbfd3a
--- /dev/null
+++ b/examples/chip-tool/gen/af-gen-event.h
@@ -0,0 +1,54 @@
+/**
+ *
+ *    Copyright (c) 2020 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+/**
+ *
+ *    Copyright (c) 2020 Silicon Labs
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+// This file is generated by Simplicity Studio.  Please do not edit manually.
+//
+//
+
+// Enclosing macro to prevent multiple inclusion
+#ifndef __AF_GEN_EVENT__
+#define __AF_GEN_EVENT__
+
+// Code used to configure the cluster event mechanism
+#define EMBER_AF_GENERATED_EVENT_CODE
+// EmberEventData structs used to populate the EmberEventData table
+#define EMBER_AF_GENERATED_EVENTS
+#define EMBER_AF_GENERATED_EVENT_STRINGS
+
+// The length of the event context table used to track and retrieve cluster events
+#define EMBER_AF_EVENT_CONTEXT_LENGTH 4
+
+// EmberAfEventContext structs used to populate the EmberAfEventContext table
+#define EMBER_AF_GENERATED_EVENT_CONTEXT
+
+#endif // __AF_GEN_EVENT__
diff --git a/examples/chip-tool/gen/af-structs.h b/examples/chip-tool/gen/af-structs.h
new file mode 100644
index 0000000..c5cd195
--- /dev/null
+++ b/examples/chip-tool/gen/af-structs.h
@@ -0,0 +1,440 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+// Prevent multiple inclusion
+#pragma once
+
+#include "basic-types.h"
+#include "enums.h"
+#include <stdint.h>
+
+// Struct for BlockThreshold
+typedef struct _BlockThreshold
+{
+    uint8_t blockThreshold;
+    uint8_t priceControl;
+    uint32_t blockPeriodStartTime;
+    uint32_t blockPeriodDurationMinutes;
+    uint8_t fuelType;
+    uint32_t standingCharge;
+} EmberAfBlockThreshold;
+
+// Struct for BlockThresholdSubPayload
+typedef struct _BlockThresholdSubPayload
+{
+    uint8_t tierNumberOfBlockThresholds;
+    uint8_t * blockThreshold;
+} EmberAfBlockThresholdSubPayload;
+
+// Struct for ChatParticipant
+typedef struct _ChatParticipant
+{
+    uint16_t uid;
+    uint8_t * nickname;
+} EmberAfChatParticipant;
+
+// Struct for ChatRoom
+typedef struct _ChatRoom
+{
+    uint16_t cid;
+    uint8_t * name;
+} EmberAfChatRoom;
+
+// Struct for ConfigureReportingRecord
+typedef struct _ConfigureReportingRecord
+{
+    uint8_t direction;
+    chip::AttributeId attributeId;
+    uint8_t attributeType;
+    uint16_t minimumReportingInterval;
+    uint16_t maximumReportingInterval;
+    uint8_t * reportableChangeLocation;
+    uint16_t timeoutPeriod;
+} EmberAfConfigureReportingRecord;
+
+// Struct for ConfigureReportingStatusRecord
+typedef struct _ConfigureReportingStatusRecord
+{
+    uint8_t status;
+    uint8_t direction;
+    chip::AttributeId attributeId;
+} EmberAfConfigureReportingStatusRecord;
+
+// Struct for DebtPayload
+typedef struct _DebtPayload
+{
+    uint32_t collectionTime;
+    uint32_t amountCollected;
+    uint8_t debtType;
+    uint32_t outstandingDebt;
+} EmberAfDebtPayload;
+
+// Struct for DeviceInformationRecord
+typedef struct _DeviceInformationRecord
+{
+    uint64_t ieeeAddress;
+    chip::EndpointId endpointId;
+    uint16_t profileId;
+    uint16_t deviceId;
+    uint8_t version;
+    uint8_t groupIdCount;
+    uint8_t sort;
+} EmberAfDeviceInformationRecord;
+
+// Struct for DiscoverAttributesInfoRecord
+typedef struct _DiscoverAttributesInfoRecord
+{
+    chip::AttributeId attributeId;
+    uint8_t attributeType;
+} EmberAfDiscoverAttributesInfoRecord;
+
+// Struct for EndpointInformationRecord
+typedef struct _EndpointInformationRecord
+{
+    uint16_t networkAddress;
+    chip::EndpointId endpointId;
+    uint16_t profileId;
+    uint16_t deviceId;
+    uint8_t version;
+} EmberAfEndpointInformationRecord;
+
+// Void typedef for EmberAfEphemeralData which is empty.
+// this will result in all the references to the data being as uint8_t*
+typedef uint8_t EmberAfEphemeralData;
+
+// Struct for EventConfigurationPayload
+typedef struct _EventConfigurationPayload
+{
+    uint16_t eventId;
+    uint8_t eventConfiguration;
+} EmberAfEventConfigurationPayload;
+
+// Struct for EventLogPayload
+typedef struct _EventLogPayload
+{
+    uint8_t logId;
+    uint16_t eventId;
+    uint32_t eventTime;
+    uint8_t * eventData;
+} EmberAfEventLogPayload;
+
+// Struct for ExtendedDiscoverAttributesInfoRecord
+typedef struct _ExtendedDiscoverAttributesInfoRecord
+{
+    chip::AttributeId attributeId;
+    uint8_t attributeType;
+    uint8_t attributeAccessControl;
+} EmberAfExtendedDiscoverAttributesInfoRecord;
+
+// Struct for GpPairingConfigurationGroupList
+typedef struct _GpPairingConfigurationGroupList
+{
+    uint16_t SinkGroup;
+    uint16_t Alias;
+} EmberAfGpPairingConfigurationGroupList;
+
+// Struct for GpTranslationTableUpdateTranslation
+typedef struct _GpTranslationTableUpdateTranslation
+{
+    uint8_t index;
+    uint8_t gpdCommandId;
+    chip::EndpointId endpoint;
+    uint16_t profile;
+    uint16_t cluster;
+    uint8_t zigbeeCommandId;
+    uint8_t * zigbeeCommandPayload;
+    uint8_t * additionalInfoBlock;
+} EmberAfGpTranslationTableUpdateTranslation;
+
+// Struct for GroupInformationRecord
+typedef struct _GroupInformationRecord
+{
+    chip::GroupId groupId;
+    uint8_t groupType;
+} EmberAfGroupInformationRecord;
+
+// Struct for IasAceZoneStatusResult
+typedef struct _IasAceZoneStatusResult
+{
+    uint8_t zoneId;
+    uint16_t zoneStatus;
+} EmberAfIasAceZoneStatusResult;
+
+// Void typedef for EmberAfIdentity which is empty.
+// this will result in all the references to the data being as uint8_t*
+typedef uint8_t EmberAfIdentity;
+
+// Struct for NeighborInfo
+typedef struct _NeighborInfo
+{
+    uint64_t neighbor;
+    int16_t x;
+    int16_t y;
+    int16_t z;
+    int8_t rssi;
+    uint8_t numberRssiMeasurements;
+} EmberAfNeighborInfo;
+
+// Struct for NodeInformation
+typedef struct _NodeInformation
+{
+    uint16_t uid;
+    uint16_t address;
+    chip::EndpointId endpoint;
+    uint8_t * nickname;
+} EmberAfNodeInformation;
+
+// Struct for Notification
+typedef struct _Notification
+{
+    uint16_t contentId;
+    uint8_t statusFeedback;
+} EmberAfNotification;
+
+// Struct for PowerProfileRecord
+typedef struct _PowerProfileRecord
+{
+    uint8_t powerProfileId;
+    uint8_t energyPhaseId;
+    uint8_t powerProfileRemoteControl;
+    uint8_t powerProfileState;
+} EmberAfPowerProfileRecord;
+
+// Struct for PriceMatrixSubPayload
+typedef struct _PriceMatrixSubPayload
+{
+    uint8_t tierBlockId;
+    uint32_t price;
+} EmberAfPriceMatrixSubPayload;
+
+// Struct for Protocol
+typedef struct _Protocol
+{
+    uint16_t manufacturerCode;
+    uint8_t protocolId;
+} EmberAfProtocol;
+
+// Struct for ReadAttributeStatusRecord
+typedef struct _ReadAttributeStatusRecord
+{
+    chip::AttributeId attributeId;
+    uint8_t status;
+    uint8_t attributeType;
+    uint8_t * attributeLocation;
+} EmberAfReadAttributeStatusRecord;
+
+// Struct for ReadReportingConfigurationAttributeRecord
+typedef struct _ReadReportingConfigurationAttributeRecord
+{
+    uint8_t direction;
+    chip::AttributeId attributeId;
+} EmberAfReadReportingConfigurationAttributeRecord;
+
+// Struct for ReadReportingConfigurationRecord
+typedef struct _ReadReportingConfigurationRecord
+{
+    uint8_t status;
+    uint8_t direction;
+    chip::AttributeId attributeId;
+    uint8_t attributeType;
+    uint16_t minimumReportingInterval;
+    uint16_t maximumReportingInterval;
+    uint8_t * reportableChangeLocation;
+    uint16_t timeoutPeriod;
+} EmberAfReadReportingConfigurationRecord;
+
+// Struct for ReadStructuredAttributeRecord
+typedef struct _ReadStructuredAttributeRecord
+{
+    chip::AttributeId attributeId;
+    uint8_t indicator;
+    uint16_t indicies;
+} EmberAfReadStructuredAttributeRecord;
+
+// Struct for ReportAttributeRecord
+typedef struct _ReportAttributeRecord
+{
+    chip::AttributeId attributeId;
+    uint8_t attributeType;
+    uint8_t * attributeLocation;
+} EmberAfReportAttributeRecord;
+
+// Struct for SceneExtensionAttributeInfo
+typedef struct _SceneExtensionAttributeInfo
+{
+    uint8_t attributeType;
+    uint8_t * attributeLocation;
+} EmberAfSceneExtensionAttributeInfo;
+
+// Struct for SceneExtensionFieldSet
+typedef struct _SceneExtensionFieldSet
+{
+    chip::ClusterId clusterId;
+    uint8_t length;
+    uint8_t value;
+} EmberAfSceneExtensionFieldSet;
+
+// Struct for ScheduleEntry
+typedef struct _ScheduleEntry
+{
+    uint16_t startTime;
+    uint8_t activePriceTierOrFriendlyCreditEnable;
+} EmberAfScheduleEntry;
+
+// Struct for ScheduleEntryAuxilliaryLoadSwitchTimes
+typedef struct _ScheduleEntryAuxilliaryLoadSwitchTimes
+{
+    uint16_t startTime;
+    uint8_t auxiliaryLoadSwitchState;
+} EmberAfScheduleEntryAuxilliaryLoadSwitchTimes;
+
+// Struct for ScheduleEntryFriendlyCreditSwitchTimes
+typedef struct _ScheduleEntryFriendlyCreditSwitchTimes
+{
+    uint16_t startTime;
+    uint8_t friendlyCreditEnable;
+} EmberAfScheduleEntryFriendlyCreditSwitchTimes;
+
+// Struct for ScheduleEntryRateSwitchTimes
+typedef struct _ScheduleEntryRateSwitchTimes
+{
+    uint16_t startTime;
+    uint8_t priceTier;
+} EmberAfScheduleEntryRateSwitchTimes;
+
+// Struct for ScheduledPhase
+typedef struct _ScheduledPhase
+{
+    uint8_t energyPhaseId;
+    uint16_t scheduledTime;
+} EmberAfScheduledPhase;
+
+// Struct for SeasonEntry
+typedef struct _SeasonEntry
+{
+    uint32_t seasonStartDate;
+    uint8_t weekIdRef;
+} EmberAfSeasonEntry;
+
+// Void typedef for EmberAfSignature which is empty.
+// this will result in all the references to the data being as uint8_t*
+typedef uint8_t EmberAfSignature;
+
+// Void typedef for EmberAfSmac which is empty.
+// this will result in all the references to the data being as uint8_t*
+typedef uint8_t EmberAfSmac;
+
+// Struct for SnapshotResponsePayload
+typedef struct _SnapshotResponsePayload
+{
+    uint8_t snapshotScheduleId;
+    uint8_t snapshotScheduleConfirmation;
+} EmberAfSnapshotResponsePayload;
+
+// Struct for SnapshotSchedulePayload
+typedef struct _SnapshotSchedulePayload
+{
+    uint8_t snapshotScheduleId;
+    uint32_t snapshotStartTime;
+    uint32_t snapshotSchedule;
+    uint8_t snapshotPayloadType;
+    uint32_t snapshotCause;
+} EmberAfSnapshotSchedulePayload;
+
+// Struct for SpecialDay
+typedef struct _SpecialDay
+{
+    uint32_t specialDayDate;
+    uint8_t dayIdRef;
+} EmberAfSpecialDay;
+
+// Struct for TierLabelsPayload
+typedef struct _TierLabelsPayload
+{
+    uint8_t tierId;
+    uint8_t * tierLabel;
+} EmberAfTierLabelsPayload;
+
+// Struct for TopUpPayload
+typedef struct _TopUpPayload
+{
+    uint8_t * topUpCode;
+    int32_t topUpAmount;
+    uint32_t topUpTime;
+} EmberAfTopUpPayload;
+
+// Struct for TransferredPhase
+typedef struct _TransferredPhase
+{
+    uint8_t energyPhaseId;
+    uint8_t macroPhaseId;
+    uint16_t expectedDuration;
+    uint16_t peakPower;
+    uint16_t energy;
+    uint16_t maxActivationDelay;
+} EmberAfTransferredPhase;
+
+// Struct for WriteAttributeRecord
+typedef struct _WriteAttributeRecord
+{
+    chip::AttributeId attributeId;
+    uint8_t attributeType;
+    uint8_t * attributeLocation;
+} EmberAfWriteAttributeRecord;
+
+// Struct for WriteAttributeStatusRecord
+typedef struct _WriteAttributeStatusRecord
+{
+    uint8_t status;
+    chip::AttributeId attributeId;
+} EmberAfWriteAttributeStatusRecord;
+
+// Struct for WriteStructuredAttributeRecord
+typedef struct _WriteStructuredAttributeRecord
+{
+    chip::AttributeId attributeId;
+    uint8_t indicator;
+    uint16_t indicies;
+    uint8_t attributeType;
+    uint8_t * attributeLocation;
+} EmberAfWriteStructuredAttributeRecord;
+
+// Struct for WriteStructuredAttributeStatusRecord
+typedef struct _WriteStructuredAttributeStatusRecord
+{
+    uint8_t status;
+    chip::AttributeId attributeId;
+    uint8_t indicator;
+    uint16_t indicies;
+} EmberAfWriteStructuredAttributeStatusRecord;
+
+// Struct for WwahBeaconSurvey
+typedef struct _WwahBeaconSurvey
+{
+    uint16_t deviceShort;
+    uint8_t rssi;
+    uint8_t classificationMask;
+} EmberAfWwahBeaconSurvey;
+
+// Struct for WwahClusterStatusToUseTC
+typedef struct _WwahClusterStatusToUseTC
+{
+    chip::ClusterId clusterId;
+    uint8_t status;
+} EmberAfWwahClusterStatusToUseTC;
diff --git a/examples/chip-tool/gen/att-storage.h b/examples/chip-tool/gen/att-storage.h
new file mode 100644
index 0000000..bd817b7
--- /dev/null
+++ b/examples/chip-tool/gen/att-storage.h
@@ -0,0 +1,70 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+// Prevent multiple inclusion
+#pragma once
+
+// Attribute masks modify how attributes are used by the framework
+//
+// Attribute that has this mask is NOT read-only
+#define ATTRIBUTE_MASK_WRITABLE (0x01)
+// Attribute that has this mask is saved to a token
+#define ATTRIBUTE_MASK_TOKENIZE (0x02)
+// Attribute that has this mask has a min/max values
+#define ATTRIBUTE_MASK_MIN_MAX (0x04)
+// Manufacturer specific attribute
+#define ATTRIBUTE_MASK_MANUFACTURER_SPECIFIC (0x08)
+// Attribute deferred to external storage
+#define ATTRIBUTE_MASK_EXTERNAL_STORAGE (0x10)
+// Attribute is singleton
+#define ATTRIBUTE_MASK_SINGLETON (0x20)
+// Attribute is a client attribute
+#define ATTRIBUTE_MASK_CLIENT (0x40)
+
+// Cluster masks modify how clusters are used by the framework
+//
+// Does this cluster have init function?
+#define CLUSTER_MASK_INIT_FUNCTION (0x01)
+// Does this cluster have attribute changed function?
+#define CLUSTER_MASK_ATTRIBUTE_CHANGED_FUNCTION (0x02)
+// Does this cluster have default response function?
+#define CLUSTER_MASK_DEFAULT_RESPONSE_FUNCTION (0x04)
+// Does this cluster have message sent function?
+#define CLUSTER_MASK_MESSAGE_SENT_FUNCTION (0x08)
+// Does this cluster have manufacturer specific attribute changed function?
+#define CLUSTER_MASK_MANUFACTURER_SPECIFIC_ATTRIBUTE_CHANGED_FUNCTION (0x10)
+// Does this cluster have pre-attribute changed function?
+#define CLUSTER_MASK_PRE_ATTRIBUTE_CHANGED_FUNCTION (0x20)
+// Cluster is a server
+#define CLUSTER_MASK_SERVER (0x40)
+// Cluster is a client
+#define CLUSTER_MASK_CLIENT (0x80)
+
+// Command masks modify meanings of commands
+//
+// Is sending of this client command supported
+#define COMMAND_MASK_OUTGOING_CLIENT (0x01)
+// Is sending of this server command supported
+#define COMMAND_MASK_OUTGOING_SERVER (0x02)
+// Is receiving of this client command supported
+#define COMMAND_MASK_INCOMING_CLIENT (0x04)
+// Is receiving of this server command supported
+#define COMMAND_MASK_INCOMING_SERVER (0x08)
+// Is this command manufacturer specific?
+#define COMMAND_MASK_MANUFACTURER_SPECIFIC (0x10)
diff --git a/examples/chip-tool/gen/attribute-id.h b/examples/chip-tool/gen/attribute-id.h
new file mode 100644
index 0000000..0fd456c
--- /dev/null
+++ b/examples/chip-tool/gen/attribute-id.h
@@ -0,0 +1,4121 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+// Prevent multiple inclusion
+#pragma once
+
+// Global cluster attribute ids
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Basic
+
+// Client attributes
+
+// Server attributes
+#define ZCL_VERSION_ATTRIBUTE_ID (0x0000)
+#define ZCL_APPLICATION_VERSION_ATTRIBUTE_ID (0x0001)
+#define ZCL_STACK_VERSION_ATTRIBUTE_ID (0x0002)
+#define ZCL_HW_VERSION_ATTRIBUTE_ID (0x0003)
+#define ZCL_MANUFACTURER_NAME_ATTRIBUTE_ID (0x0004)
+#define ZCL_MODEL_IDENTIFIER_ATTRIBUTE_ID (0x0005)
+#define ZCL_DATE_CODE_ATTRIBUTE_ID (0x0006)
+#define ZCL_POWER_SOURCE_ATTRIBUTE_ID (0x0007)
+#define ZCL_GENERIC_DEVICE_CLASS_ATTRIBUTE_ID (0x0008)
+#define ZCL_GENERIC_DEVICE_TYPE_ATTRIBUTE_ID (0x0009)
+#define ZCL_PRODUCT_CODE_ATTRIBUTE_ID (0x000A)
+#define ZCL_PRODUCT_URL_ATTRIBUTE_ID (0x000B)
+#define ZCL_LOCATION_DESCRIPTION_ATTRIBUTE_ID (0x0010)
+#define ZCL_PHYSICAL_ENVIRONMENT_ATTRIBUTE_ID (0x0011)
+#define ZCL_DEVICE_ENABLED_ATTRIBUTE_ID (0x0012)
+#define ZCL_ALARM_MASK_ATTRIBUTE_ID (0x0013)
+#define ZCL_DISABLE_LOCAL_CONFIG_ATTRIBUTE_ID (0x0014)
+#define ZCL_SW_BUILD_ID_ATTRIBUTE_ID (0x4000)
+
+// Attribute ids for cluster: Power Configuration
+
+// Client attributes
+
+// Server attributes
+#define ZCL_MAINS_VOLTAGE_ATTRIBUTE_ID (0x0000)
+#define ZCL_MAINS_FREQUENCY_ATTRIBUTE_ID (0x0001)
+#define ZCL_MAINS_ALARM_MASK_ATTRIBUTE_ID (0x0010)
+#define ZCL_MAINS_VOLTAGE_MIN_THRESHOLD_ATTRIBUTE_ID (0x0011)
+#define ZCL_MAINS_VOLTAGE_MAX_THRESHOLD_ATTRIBUTE_ID (0x0012)
+#define ZCL_MAINS_VOLTAGE_DWELL_TRIP_POINT_ATTRIBUTE_ID (0x0013)
+#define ZCL_BATTERY_VOLTAGE_ATTRIBUTE_ID (0x0020)
+#define ZCL_BATTERY_PERCENTAGE_REMAINING_ATTRIBUTE_ID (0x0021)
+#define ZCL_BATTERY_MANUFACTURER_ATTRIBUTE_ID (0x0030)
+#define ZCL_BATTERY_SIZE_ATTRIBUTE_ID (0x0031)
+#define ZCL_BATTERY_AHR_RATING_ATTRIBUTE_ID (0x0032)
+#define ZCL_BATTERY_QUANTITY_ATTRIBUTE_ID (0x0033)
+#define ZCL_BATTERY_RATED_VOLTAGE_ATTRIBUTE_ID (0x0034)
+#define ZCL_BATTERY_ALARM_MASK_ATTRIBUTE_ID (0x0035)
+#define ZCL_BATTERY_VOLTAGE_MIN_THRESHOLD_ATTRIBUTE_ID (0x0036)
+#define ZCL_BATTERY_VOLTAGE_THRESHOLD_1_ATTRIBUTE_ID (0x0037)
+#define ZCL_BATTERY_VOLTAGE_THRESHOLD_2_ATTRIBUTE_ID (0x0038)
+#define ZCL_BATTERY_VOLTAGE_THRESHOLD_3_ATTRIBUTE_ID (0x0039)
+#define ZCL_BATTERY_PERCENTAGE_MIN_THRESHOLD_ATTRIBUTE_ID (0x003A)
+#define ZCL_BATTERY_PERCENTAGE_THRESHOLD_1_ATTRIBUTE_ID (0x003B)
+#define ZCL_BATTERY_PERCENTAGE_THRESHOLD_2_ATTRIBUTE_ID (0x003C)
+#define ZCL_BATTERY_PERCENTAGE_THRESHOLD_3_ATTRIBUTE_ID (0x003D)
+#define ZCL_BATTERY_ALARM_STATE_ATTRIBUTE_ID (0x003E)
+#define ZCL_BATTERY_2_VOLTAGE_ATTRIBUTE_ID (0x0040)
+#define ZCL_BATTERY_2_PERCENTAGE_REMAINING_ATTRIBUTE_ID (0x0041)
+#define ZCL_BATTERY_2_MANUFACTURER_ATTRIBUTE_ID (0x0050)
+#define ZCL_BATTERY_2_SIZE_ATTRIBUTE_ID (0x0051)
+#define ZCL_BATTERY_2_AHR_RATING_ATTRIBUTE_ID (0x0052)
+#define ZCL_BATTERY_2_QUANTITY_ATTRIBUTE_ID (0x0053)
+#define ZCL_BATTERY_2_RATED_VOLTAGE_ATTRIBUTE_ID (0x0054)
+#define ZCL_BATTERY_2_ALARM_MASK_ATTRIBUTE_ID (0x0055)
+#define ZCL_BATTERY_2_VOLTAGE_MIN_THRESHOLD_ATTRIBUTE_ID (0x0056)
+#define ZCL_BATTERY_2_VOLTAGE_THRESHOLD_1_ATTRIBUTE_ID (0x0057)
+#define ZCL_BATTERY_2_VOLTAGE_THRESHOLD_2_ATTRIBUTE_ID (0x0058)
+#define ZCL_BATTERY_2_VOLTAGE_THRESHOLD_3_ATTRIBUTE_ID (0x0059)
+#define ZCL_BATTERY_2_PERCENTAGE_MIN_THRESHOLD_ATTRIBUTE_ID (0x005A)
+#define ZCL_BATTERY_2_PERCENTAGE_THRESHOLD_1_ATTRIBUTE_ID (0x005B)
+#define ZCL_BATTERY_2_PERCENTAGE_THRESHOLD_2_ATTRIBUTE_ID (0x005C)
+#define ZCL_BATTERY_2_PERCENTAGE_THRESHOLD_3_ATTRIBUTE_ID (0x005D)
+#define ZCL_BATTERY_2_ALARM_STATE_ATTRIBUTE_ID (0x005E)
+#define ZCL_BATTERY_3_VOLTAGE_ATTRIBUTE_ID (0x0060)
+#define ZCL_BATTERY_3_PERCENTAGE_REMAINING_ATTRIBUTE_ID (0x0061)
+#define ZCL_BATTERY_3_MANUFACTURER_ATTRIBUTE_ID (0x0070)
+#define ZCL_BATTERY_3_SIZE_ATTRIBUTE_ID (0x0071)
+#define ZCL_BATTERY_3_AHR_RATING_ATTRIBUTE_ID (0x0072)
+#define ZCL_BATTERY_3_QUANTITY_ATTRIBUTE_ID (0x0073)
+#define ZCL_BATTERY_3_RATED_VOLTAGE_ATTRIBUTE_ID (0x0074)
+#define ZCL_BATTERY_3_ALARM_MASK_ATTRIBUTE_ID (0x0075)
+#define ZCL_BATTERY_3_VOLTAGE_MIN_THRESHOLD_ATTRIBUTE_ID (0x0076)
+#define ZCL_BATTERY_3_VOLTAGE_THRESHOLD_1_ATTRIBUTE_ID (0x0077)
+#define ZCL_BATTERY_3_VOLTAGE_THRESHOLD_2_ATTRIBUTE_ID (0x0078)
+#define ZCL_BATTERY_3_VOLTAGE_THRESHOLD_3_ATTRIBUTE_ID (0x0079)
+#define ZCL_BATTERY_3_PERCENTAGE_MIN_THRESHOLD_ATTRIBUTE_ID (0x007A)
+#define ZCL_BATTERY_3_PERCENTAGE_THRESHOLD_1_ATTRIBUTE_ID (0x007B)
+#define ZCL_BATTERY_3_PERCENTAGE_THRESHOLD_2_ATTRIBUTE_ID (0x007C)
+#define ZCL_BATTERY_3_PERCENTAGE_THRESHOLD_3_ATTRIBUTE_ID (0x007D)
+#define ZCL_BATTERY_3_ALARM_STATE_ATTRIBUTE_ID (0x007E)
+
+// Attribute ids for cluster: Device Temperature Configuration
+
+// Client attributes
+
+// Server attributes
+#define ZCL_CURRENT_TEMPERATURE_ATTRIBUTE_ID (0x0000)
+#define ZCL_MIN_TEMP_EXPERIENCED_ATTRIBUTE_ID (0x0001)
+#define ZCL_MAX_TEMP_EXPERIENCED_ATTRIBUTE_ID (0x0002)
+#define ZCL_OVER_TEMP_TOTAL_DWELL_ATTRIBUTE_ID (0x0003)
+#define ZCL_DEVICE_TEMP_ALARM_MASK_ATTRIBUTE_ID (0x0010)
+#define ZCL_LOW_TEMP_THRESHOLD_ATTRIBUTE_ID (0x0011)
+#define ZCL_HIGH_TEMP_THRESHOLD_ATTRIBUTE_ID (0x0012)
+#define ZCL_LOW_TEMP_DWELL_TRIP_POINT_ATTRIBUTE_ID (0x0013)
+#define ZCL_HIGH_TEMP_DWELL_TRIP_POINT_ATTRIBUTE_ID (0x0014)
+
+// Attribute ids for cluster: Identify
+
+// Client attributes
+
+// Server attributes
+#define ZCL_IDENTIFY_TIME_ATTRIBUTE_ID (0x0000)
+#define ZCL_COMMISSION_STATE_ATTRIBUTE_ID (0x0001)
+
+// Attribute ids for cluster: Groups
+
+// Client attributes
+
+// Server attributes
+#define ZCL_GROUP_NAME_SUPPORT_ATTRIBUTE_ID (0x0000)
+
+// Attribute ids for cluster: Scenes
+
+// Client attributes
+
+// Server attributes
+#define ZCL_SCENE_COUNT_ATTRIBUTE_ID (0x0000)
+#define ZCL_CURRENT_SCENE_ATTRIBUTE_ID (0x0001)
+#define ZCL_CURRENT_GROUP_ATTRIBUTE_ID (0x0002)
+#define ZCL_SCENE_VALID_ATTRIBUTE_ID (0x0003)
+#define ZCL_SCENE_NAME_SUPPORT_ATTRIBUTE_ID (0x0004)
+#define ZCL_LAST_CONFIGURED_BY_ATTRIBUTE_ID (0x0005)
+
+// Attribute ids for cluster: On/off
+
+// Client attributes
+
+// Server attributes
+#define ZCL_ON_OFF_ATTRIBUTE_ID (0x0000)
+#define ZCL_SAMPLE_MFG_SPECIFIC_TRANSITION_TIME_ATTRIBUTE_ID (0x0000)
+#define ZCL_SAMPLE_MFG_SPECIFIC_TRANSITION_TIME_2_ATTRIBUTE_ID (0x0000)
+#define ZCL_SAMPLE_MFG_SPECIFIC_TRANSITION_TIME_3_ATTRIBUTE_ID (0x0001)
+#define ZCL_SAMPLE_MFG_SPECIFIC_TRANSITION_TIME_4_ATTRIBUTE_ID (0x0001)
+#define ZCL_GLOBAL_SCENE_CONTROL_ATTRIBUTE_ID (0x4000)
+#define ZCL_ON_TIME_ATTRIBUTE_ID (0x4001)
+#define ZCL_OFF_WAIT_TIME_ATTRIBUTE_ID (0x4002)
+#define ZCL_START_UP_ON_OFF_ATTRIBUTE_ID (0x4003)
+
+// Attribute ids for cluster: On/off Switch Configuration
+
+// Client attributes
+
+// Server attributes
+#define ZCL_SWITCH_TYPE_ATTRIBUTE_ID (0x0000)
+#define ZCL_SWITCH_ACTIONS_ATTRIBUTE_ID (0x0010)
+
+// Attribute ids for cluster: Level Control
+
+// Client attributes
+
+// Server attributes
+#define ZCL_CURRENT_LEVEL_ATTRIBUTE_ID (0x0000)
+#define ZCL_LEVEL_CONTROL_REMAINING_TIME_ATTRIBUTE_ID (0x0001)
+#define ZCL_OPTIONS_ATTRIBUTE_ID (0x000F)
+#define ZCL_ON_OFF_TRANSITION_TIME_ATTRIBUTE_ID (0x0010)
+#define ZCL_ON_LEVEL_ATTRIBUTE_ID (0x0011)
+#define ZCL_ON_TRANSITION_TIME_ATTRIBUTE_ID (0x0012)
+#define ZCL_OFF_TRANSITION_TIME_ATTRIBUTE_ID (0x0013)
+#define ZCL_DEFAULT_MOVE_RATE_ATTRIBUTE_ID (0x0014)
+#define ZCL_START_UP_CURRENT_LEVEL_ATTRIBUTE_ID (0x4000)
+
+// Attribute ids for cluster: Alarms
+
+// Client attributes
+
+// Server attributes
+#define ZCL_ALARM_COUNT_ATTRIBUTE_ID (0x0000)
+
+// Attribute ids for cluster: Time
+
+// Client attributes
+
+// Server attributes
+#define ZCL_TIME_ATTRIBUTE_ID (0x0000)
+#define ZCL_TIME_STATUS_ATTRIBUTE_ID (0x0001)
+#define ZCL_TIME_ZONE_ATTRIBUTE_ID (0x0002)
+#define ZCL_DST_START_ATTRIBUTE_ID (0x0003)
+#define ZCL_DST_END_ATTRIBUTE_ID (0x0004)
+#define ZCL_DST_SHIFT_ATTRIBUTE_ID (0x0005)
+#define ZCL_STANDARD_TIME_ATTRIBUTE_ID (0x0006)
+#define ZCL_LOCAL_TIME_ATTRIBUTE_ID (0x0007)
+#define ZCL_LAST_SET_TIME_ATTRIBUTE_ID (0x0008)
+#define ZCL_VALID_UNTIL_TIME_ATTRIBUTE_ID (0x0009)
+
+// Attribute ids for cluster: RSSI Location
+
+// Client attributes
+
+// Server attributes
+#define ZCL_LOCATION_TYPE_ATTRIBUTE_ID (0x0000)
+#define ZCL_LOCATION_METHOD_ATTRIBUTE_ID (0x0001)
+#define ZCL_LOCATION_AGE_ATTRIBUTE_ID (0x0002)
+#define ZCL_QUALITY_MEASURE_ATTRIBUTE_ID (0x0003)
+#define ZCL_NUMBER_OF_DEVICES_ATTRIBUTE_ID (0x0004)
+#define ZCL_COORDINATE1_ATTRIBUTE_ID (0x0010)
+#define ZCL_COORDINATE2_ATTRIBUTE_ID (0x0011)
+#define ZCL_COORDINATE3_ATTRIBUTE_ID (0x0012)
+#define ZCL_POWER_ATTRIBUTE_ID (0x0013)
+#define ZCL_PATH_LOSS_EXPONENT_ATTRIBUTE_ID (0x0014)
+#define ZCL_REPORTING_PERIOD_ATTRIBUTE_ID (0x0015)
+#define ZCL_CALCULATION_PERIOD_ATTRIBUTE_ID (0x0016)
+#define ZCL_NUMBER_RSSI_MEASUREMENTS_ATTRIBUTE_ID (0x0017)
+
+// Attribute ids for cluster: Binary Input (Basic)
+
+// Client attributes
+
+// Server attributes
+#define ZCL_ACTIVE_TEXT_ATTRIBUTE_ID (0x0004)
+#define ZCL_DESCRIPTION_ATTRIBUTE_ID (0x001C)
+#define ZCL_INACTIVE_TEXT_ATTRIBUTE_ID (0x002E)
+#define ZCL_OUT_OF_SERVICE_ATTRIBUTE_ID (0x0051)
+#define ZCL_POLARITY_ATTRIBUTE_ID (0x0054)
+#define ZCL_PRESENT_VALUE_ATTRIBUTE_ID (0x0055)
+#define ZCL_RELIABILITY_ATTRIBUTE_ID (0x0067)
+#define ZCL_STATUS_FLAGS_ATTRIBUTE_ID (0x006F)
+#define ZCL_APPLICATION_TYPE_ATTRIBUTE_ID (0x0100)
+
+// Attribute ids for cluster: Commissioning
+
+// Client attributes
+
+// Server attributes
+#define ZCL_SHORT_ADDRESS_ATTRIBUTE_ID (0x0000)
+#define ZCL_EXTENDED_PAN_ID_ATTRIBUTE_ID (0x0001)
+#define ZCL_PAN_ID_ATTRIBUTE_ID (0x0002)
+#define ZCL_CHANNEL_MASK_ATTRIBUTE_ID (0x0003)
+#define ZCL_PROTOCOL_VERSION_ATTRIBUTE_ID (0x0004)
+#define ZCL_STACK_PROFILE_ATTRIBUTE_ID (0x0005)
+#define ZCL_STARTUP_CONTROL_ATTRIBUTE_ID (0x0006)
+#define ZCL_TRUST_CENTER_ADDRESS_ATTRIBUTE_ID (0x0010)
+#define ZCL_TRUST_CENTER_MASTER_KEY_ATTRIBUTE_ID (0x0011)
+#define ZCL_NETWORK_KEY_ATTRIBUTE_ID (0x0012)
+#define ZCL_USE_INSECURE_JOIN_ATTRIBUTE_ID (0x0013)
+#define ZCL_PRECONFIGURED_LINK_KEY_ATTRIBUTE_ID (0x0014)
+#define ZCL_NETWORK_KEY_SEQUENCE_NUMBER_ATTRIBUTE_ID (0x0015)
+#define ZCL_NETWORK_KEY_TYPE_ATTRIBUTE_ID (0x0016)
+#define ZCL_NETWORK_MANAGER_ADDRESS_ATTRIBUTE_ID (0x0017)
+#define ZCL_SCAN_ATTEMPTS_ATTRIBUTE_ID (0x0020)
+#define ZCL_TIME_BETWEEN_SCANS_ATTRIBUTE_ID (0x0021)
+#define ZCL_REJOIN_INTERVAL_ATTRIBUTE_ID (0x0022)
+#define ZCL_MAX_REJOIN_INTERVAL_ATTRIBUTE_ID (0x0023)
+#define ZCL_INDIRECT_POLL_RATE_ATTRIBUTE_ID (0x0030)
+#define ZCL_PARENT_RETRY_THRESHOLD_ATTRIBUTE_ID (0x0031)
+#define ZCL_CONCENTRATOR_FLAG_ATTRIBUTE_ID (0x0040)
+#define ZCL_CONCENTRATOR_RADIUS_ATTRIBUTE_ID (0x0041)
+#define ZCL_CONCENTRATOR_DISCOVERY_TIME_ATTRIBUTE_ID (0x0042)
+
+// Attribute ids for cluster: Partition
+
+// Client attributes
+
+// Server attributes
+#define ZCL_PARTITION_MAXIMUM_INCOMING_TRANSFER_SIZE_ATTRIBUTE_ID (0x0000)
+#define ZCL_PARTITION_MAXIMUM_OUTGOING_TRANSFER_SIZE_ATTRIBUTE_ID (0x0001)
+#define ZCL_PARTIONED_FRAME_SIZE_ATTRIBUTE_ID (0x0002)
+#define ZCL_LARGE_FRAME_SIZE_ATTRIBUTE_ID (0x0003)
+#define ZCL_NUMBER_OF_ACK_FRAME_ATTRIBUTE_ID (0x0004)
+#define ZCL_NACK_TIMEOUT_ATTRIBUTE_ID (0x0005)
+#define ZCL_INTERFRAME_DELAY_ATTRIBUTE_ID (0x0006)
+#define ZCL_NUMBER_OF_SEND_RETRIES_ATTRIBUTE_ID (0x0007)
+#define ZCL_SENDER_TIMEOUT_ATTRIBUTE_ID (0x0008)
+#define ZCL_RECEIVER_TIMEOUT_ATTRIBUTE_ID (0x0009)
+
+// Attribute ids for cluster: Over the Air Bootloading
+
+// Client attributes
+#define ZCL_UPGRADE_SERVER_ID_ATTRIBUTE_ID (0x0000)
+#define ZCL_FILE_OFFSET_ATTRIBUTE_ID (0x0001)
+#define ZCL_CURRENT_FILE_VERSION_ATTRIBUTE_ID (0x0002)
+#define ZCL_CURRENT_ZIGBEE_STACK_VERSION_ATTRIBUTE_ID (0x0003)
+#define ZCL_DOWNLOADED_FILE_VERSION_ATTRIBUTE_ID (0x0004)
+#define ZCL_DOWNLOADED_ZIGBEE_STACK_VERSION_ATTRIBUTE_ID (0x0005)
+#define ZCL_IMAGE_UPGRADE_STATUS_ATTRIBUTE_ID (0x0006)
+#define ZCL_MANUFACTURER_ID_ATTRIBUTE_ID (0x0007)
+#define ZCL_IMAGE_TYPE_ID_ATTRIBUTE_ID (0x0008)
+#define ZCL_MINIMUM_BLOCK_REQUEST_PERIOD_ATTRIBUTE_ID (0x0009)
+#define ZCL_IMAGE_STAMP_ATTRIBUTE_ID (0x000A)
+#define ZCL_UPGRADE_ACTIVATION_POLICY_ATTRIBUTE_ID (0x000B)
+#define ZCL_UPGRADE_TIMEOUT_POLICY_ATTRIBUTE_ID (0x000C)
+
+// Server attributes
+
+// Attribute ids for cluster: Power Profile
+
+// Client attributes
+
+// Server attributes
+#define ZCL_TOTAL_PROFILE_NUM_ATTRIBUTE_ID (0x0000)
+#define ZCL_MULTIPLE_SCHEDULING_ATTRIBUTE_ID (0x0001)
+#define ZCL_ENERGY_FORMATTING_ATTRIBUTE_ID (0x0002)
+#define ZCL_ENERGY_REMOTE_ATTRIBUTE_ID (0x0003)
+#define ZCL_SCHEDULE_MODE_ATTRIBUTE_ID (0x0004)
+
+// Attribute ids for cluster: Appliance Control
+
+// Client attributes
+
+// Server attributes
+#define ZCL_START_TIME_ATTRIBUTE_ID (0x0000)
+#define ZCL_FINISH_TIME_ATTRIBUTE_ID (0x0001)
+#define ZCL_REMAINING_TIME_ATTRIBUTE_ID (0x0002)
+
+// Attribute ids for cluster: Poll Control
+
+// Client attributes
+
+// Server attributes
+#define ZCL_CHECK_IN_INTERVAL_ATTRIBUTE_ID (0x0000)
+#define ZCL_LONG_POLL_INTERVAL_ATTRIBUTE_ID (0x0001)
+#define ZCL_SHORT_POLL_INTERVAL_ATTRIBUTE_ID (0x0002)
+#define ZCL_FAST_POLL_TIMEOUT_ATTRIBUTE_ID (0x0003)
+#define ZCL_CHECK_IN_INTERVAL_MIN_ATTRIBUTE_ID (0x0004)
+#define ZCL_LONG_POLL_INTERVAL_MIN_ATTRIBUTE_ID (0x0005)
+#define ZCL_FAST_POLL_TIMEOUT_MAX_ATTRIBUTE_ID (0x0006)
+
+// Attribute ids for cluster: Green Power
+
+// Client attributes
+#define ZCL_GP_CLIENT_GPP_MAX_PROXY_TABLE_ENTRIES_ATTRIBUTE_ID (0x0010)
+#define ZCL_GP_CLIENT_PROXY_TABLE_ATTRIBUTE_ID (0x0011)
+#define ZCL_GP_CLIENT_GPP_NOTIFICATION_RETRY_NUMBER_ATTRIBUTE_ID (0x0012)
+#define ZCL_GP_CLIENT_GPP_NOTIFICATION_RETRY_TIMER_ATTRIBUTE_ID (0x0013)
+#define ZCL_GP_CLIENT_GPP_MAX_SEARCH_COUNTER_ATTRIBUTE_ID (0x0014)
+#define ZCL_GP_CLIENT_GPP_BLOCKED_GPD_ID_ATTRIBUTE_ID (0x0015)
+#define ZCL_GP_CLIENT_GPP_FUNCTIONALITY_ATTRIBUTE_ID (0x0016)
+#define ZCL_GP_CLIENT_GPP_ACTIVE_FUNCTIONALITY_ATTRIBUTE_ID (0x0017)
+#define ZCL_GP_CLIENT_GP_SHARED_SECURITY_KEY_TYPE_ATTRIBUTE_ID (0x0020)
+#define ZCL_GP_CLIENT_GP_SHARED_SECURITY_KEY_ATTRIBUTE_ID (0x0021)
+#define ZCL_GP_CLIENT_GP_LINK_KEY_ATTRIBUTE_ID (0x0022)
+
+// Server attributes
+#define ZCL_GP_SERVER_GPS_MAX_SINK_TABLE_ENTRIES_ATTRIBUTE_ID (0x0000)
+#define ZCL_GP_SERVER_SINK_TABLE_ATTRIBUTE_ID (0x0001)
+#define ZCL_GP_SERVER_GPS_COMMUNICATION_MODE_ATTRIBUTE_ID (0x0002)
+#define ZCL_GP_SERVER_GPS_COMMISSIONING_EXIT_MODE_ATTRIBUTE_ID (0x0003)
+#define ZCL_GP_SERVER_GPS_COMMISSIONING_WINDOW_ATTRIBUTE_ID (0x0004)
+#define ZCL_GP_SERVER_GPS_SECURITY_LEVEL_ATTRIBUTE_ID (0x0005)
+#define ZCL_GP_SERVER_GPS_FUNCTIONALITY_ATTRIBUTE_ID (0x0006)
+#define ZCL_GP_SERVER_GPS_ACTIVE_FUNCTIONALITY_ATTRIBUTE_ID (0x0007)
+#define ZCL_GP_SERVER_GP_SHARED_SECURITY_KEY_TYPE_ATTRIBUTE_ID (0x0020)
+#define ZCL_GP_SERVER_GP_SHARED_SECURITY_KEY_ATTRIBUTE_ID (0x0021)
+#define ZCL_GP_SERVER_GP_LINK_KEY_ATTRIBUTE_ID (0x0022)
+
+// Attribute ids for cluster: Keep-Alive
+
+// Client attributes
+
+// Server attributes
+#define ZCL_KEEPALIVE_BASE_ATTRIBUTE_ID (0x0000)
+#define ZCL_KEEPALIVE_JITTER_ATTRIBUTE_ID (0x0001)
+
+// Attribute ids for cluster: Shade Configuration
+
+// Client attributes
+
+// Server attributes
+#define ZCL_SHADE_CONFIG_PHYSICAL_CLOSED_LIMIT_ATTRIBUTE_ID (0x0000)
+#define ZCL_SHADE_CONFIG_MOTOR_STEP_SIZE_ATTRIBUTE_ID (0x0001)
+#define ZCL_SHADE_CONFIG_STATUS_ATTRIBUTE_ID (0x0002)
+#define ZCL_SHADE_CONFIG_CLOSED_LIMIT_ATTRIBUTE_ID (0x0010)
+#define ZCL_SHADE_CONFIG_MODE_ATTRIBUTE_ID (0x0011)
+
+// Attribute ids for cluster: Door Lock
+
+// Client attributes
+
+// Server attributes
+#define ZCL_LOCK_STATE_ATTRIBUTE_ID (0x0000)
+#define ZCL_LOCK_TYPE_ATTRIBUTE_ID (0x0001)
+#define ZCL_ACTUATOR_ENABLED_ATTRIBUTE_ID (0x0002)
+#define ZCL_DOOR_STATE_ATTRIBUTE_ID (0x0003)
+#define ZCL_DOOR_OPEN_EVENTS_ATTRIBUTE_ID (0x0004)
+#define ZCL_DOOR_CLOSED_EVENTS_ATTRIBUTE_ID (0x0005)
+#define ZCL_OPEN_PERIOD_ATTRIBUTE_ID (0x0006)
+#define ZCL_NUM_LOCK_RECORDS_SUPPORTED_ATTRIBUTE_ID (0x0010)
+#define ZCL_NUM_TOTAL_USERS_SUPPORTED_ATTRIBUTE_ID (0x0011)
+#define ZCL_NUM_PIN_USERS_SUPPORTED_ATTRIBUTE_ID (0x0012)
+#define ZCL_NUM_RFID_USERS_SUPPORTED_ATTRIBUTE_ID (0x0013)
+#define ZCL_NUM_WEEKDAY_SCHEDULES_SUPPORTED_PER_USER_ATTRIBUTE_ID (0x0014)
+#define ZCL_NUM_YEARDAY_SCHEDULES_SUPPORTED_PER_USER_ATTRIBUTE_ID (0x0015)
+#define ZCL_NUM_HOLIDAY_SCHEDULES_SUPPORTED_PER_USER_ATTRIBUTE_ID (0x0016)
+#define ZCL_MAX_PIN_LENGTH_ATTRIBUTE_ID (0x0017)
+#define ZCL_MIN_PIN_LENGTH_ATTRIBUTE_ID (0x0018)
+#define ZCL_MAX_RFID_CODE_LENGTH_ATTRIBUTE_ID (0x0019)
+#define ZCL_MIN_RFID_CODE_LENGTH_ATTRIBUTE_ID (0x001A)
+#define ZCL_ENABLE_LOGGING_ATTRIBUTE_ID (0x0020)
+#define ZCL_LANGUAGE_ATTRIBUTE_ID (0x0021)
+#define ZCL_LED_SETTINGS_ATTRIBUTE_ID (0x0022)
+#define ZCL_AUTO_RELOCK_TIME_ATTRIBUTE_ID (0x0023)
+#define ZCL_SOUND_VOLUME_ATTRIBUTE_ID (0x0024)
+#define ZCL_OPERATING_MODE_ATTRIBUTE_ID (0x0025)
+#define ZCL_SUPPORTED_OPERATING_MODES_ATTRIBUTE_ID (0x0026)
+#define ZCL_DEFAULT_CONFIGURATION_REGISTER_ATTRIBUTE_ID (0x0027)
+#define ZCL_ENABLE_LOCAL_PROGRAMMING_ATTRIBUTE_ID (0x0028)
+#define ZCL_ENABLE_ONE_TOUCH_LOCKING_ATTRIBUTE_ID (0x0029)
+#define ZCL_ENABLE_INSIDE_STATUS_LED_ATTRIBUTE_ID (0x002A)
+#define ZCL_ENABLE_PRIVACY_MODE_BUTTON_ATTRIBUTE_ID (0x002B)
+#define ZCL_WRONG_CODE_ENTRY_LIMIT_ATTRIBUTE_ID (0x0030)
+#define ZCL_USER_CODE_TEMPORARY_DISABLE_TIME_ATTRIBUTE_ID (0x0031)
+#define ZCL_SEND_PIN_OVER_THE_AIR_ATTRIBUTE_ID (0x0032)
+#define ZCL_REQUIRE_PIN_FOR_RF_OPERATION_ATTRIBUTE_ID (0x0033)
+#define ZCL_ZIGBEE_SECURITY_LEVEL_ATTRIBUTE_ID (0x0034)
+#define ZCL_DOOR_LOCK_ALARM_MASK_ATTRIBUTE_ID (0x0040)
+#define ZCL_KEYPAD_OPERATION_EVENT_MASK_ATTRIBUTE_ID (0x0041)
+#define ZCL_RF_OPERATION_EVENT_MASK_ATTRIBUTE_ID (0x0042)
+#define ZCL_MANUAL_OPERATION_EVENT_MASK_ATTRIBUTE_ID (0x0043)
+#define ZCL_RFID_OPERATION_EVENT_MASK_ATTRIBUTE_ID (0x0044)
+#define ZCL_KEYPAD_PROGRAMMING_EVENT_MASK_ATTRIBUTE_ID (0x0045)
+#define ZCL_RF_PROGRAMMING_EVENT_MASK_ATTRIBUTE_ID (0x0046)
+#define ZCL_RFID_PROGRAMMING_EVENT_MASK_ATTRIBUTE_ID (0x0047)
+
+// Attribute ids for cluster: Window Covering
+
+// Client attributes
+
+// Server attributes
+#define ZCL_COVERING_TYPE_ATTRIBUTE_ID (0x0000)
+#define ZCL_LIMIT_LIFT_ATTRIBUTE_ID (0x0001)
+#define ZCL_LIMIT_TILT_ATTRIBUTE_ID (0x0002)
+#define ZCL_CURRENT_LIFT_ATTRIBUTE_ID (0x0003)
+#define ZCL_CURRENT_TILT_ATTRIBUTE_ID (0x0004)
+#define ZCL_NUMBER_LIFT_ATTRIBUTE_ID (0x0005)
+#define ZCL_NUMBER_TILT_ATTRIBUTE_ID (0x0006)
+#define ZCL_CONFIG_STATUS_ATTRIBUTE_ID (0x0007)
+#define ZCL_CURRENT_LIFT_PERCENTAGE_ATTRIBUTE_ID (0x0008)
+#define ZCL_CURRENT_TILT_PERCENTAGE_ATTRIBUTE_ID (0x0009)
+#define ZCL_OPEN_LIMIT_LIFT_ATTRIBUTE_ID (0x0010)
+#define ZCL_CLOSED_LIMIT_LIFT_ATTRIBUTE_ID (0x0011)
+#define ZCL_OPEN_LIMIT_TILT_ATTRIBUTE_ID (0x0012)
+#define ZCL_CLOSED_LIMIT_TILT_ATTRIBUTE_ID (0x0013)
+#define ZCL_VELOCITY_LIFT_ATTRIBUTE_ID (0x0014)
+#define ZCL_ACCELERATION_LIFT_ATTRIBUTE_ID (0x0015)
+#define ZCL_DECELERATION_LIFT_ATTRIBUTE_ID (0x0016)
+#define ZCL_MODE_ATTRIBUTE_ID (0x0017)
+#define ZCL_SETPOINTS_LIFT_ATTRIBUTE_ID (0x0018)
+#define ZCL_SETPOINTS_TILT_ATTRIBUTE_ID (0x0019)
+
+// Attribute ids for cluster: Barrier Control
+
+// Client attributes
+
+// Server attributes
+#define ZCL_BARRIER_MOVING_STATE_ATTRIBUTE_ID (0x0001)
+#define ZCL_BARRIER_SAFETY_STATUS_ATTRIBUTE_ID (0x0002)
+#define ZCL_BARRIER_CAPABILITIES_ATTRIBUTE_ID (0x0003)
+#define ZCL_BARRIER_OPEN_EVENTS_ATTRIBUTE_ID (0x0004)
+#define ZCL_BARRIER_CLOSE_EVENTS_ATTRIBUTE_ID (0x0005)
+#define ZCL_BARRIER_COMMAND_OPEN_EVENTS_ATTRIBUTE_ID (0x0006)
+#define ZCL_BARRIER_COMMAND_CLOSE_EVENTS_ATTRIBUTE_ID (0x0007)
+#define ZCL_BARRIER_OPEN_PERIOD_ATTRIBUTE_ID (0x0008)
+#define ZCL_BARRIER_CLOSE_PERIOD_ATTRIBUTE_ID (0x0009)
+#define ZCL_BARRIER_POSITION_ATTRIBUTE_ID (0x000A)
+
+// Attribute ids for cluster: Pump Configuration and Control
+
+// Client attributes
+
+// Server attributes
+#define ZCL_MAX_PRESSURE_ATTRIBUTE_ID (0x0000)
+#define ZCL_MAX_SPEED_ATTRIBUTE_ID (0x0001)
+#define ZCL_MAX_FLOW_ATTRIBUTE_ID (0x0002)
+#define ZCL_MIN_CONST_PRESSURE_ATTRIBUTE_ID (0x0003)
+#define ZCL_MAX_CONST_PRESSURE_ATTRIBUTE_ID (0x0004)
+#define ZCL_MIN_COMP_PRESSURE_ATTRIBUTE_ID (0x0005)
+#define ZCL_MAX_COMP_PRESSURE_ATTRIBUTE_ID (0x0006)
+#define ZCL_MIN_CONST_SPEED_ATTRIBUTE_ID (0x0007)
+#define ZCL_MAX_CONST_SPEED_ATTRIBUTE_ID (0x0008)
+#define ZCL_MIN_CONST_FLOW_ATTRIBUTE_ID (0x0009)
+#define ZCL_MAX_CONST_FLOW_ATTRIBUTE_ID (0x000A)
+#define ZCL_MIN_CONST_TEMP_ATTRIBUTE_ID (0x000B)
+#define ZCL_MAX_CONST_TEMP_ATTRIBUTE_ID (0x000C)
+#define ZCL_PUMP_STATUS_ATTRIBUTE_ID (0x0010)
+#define ZCL_EFFECTIVE_OPERATION_MODE_ATTRIBUTE_ID (0x0011)
+#define ZCL_EFFECTIVE_CONTROL_MODE_ATTRIBUTE_ID (0x0012)
+#define ZCL_CAPACITY_ATTRIBUTE_ID (0x0013)
+#define ZCL_SPEED_ATTRIBUTE_ID (0x0014)
+#define ZCL_LIFETIME_RUNNING_HOURS_ATTRIBUTE_ID (0x0015)
+#define ZCL_PUMP_POWER_ATTRIBUTE_ID (0x0016)
+#define ZCL_LIFETIME_ENERGY_CONSUMED_ATTRIBUTE_ID (0x0017)
+#define ZCL_OPERATION_MODE_ATTRIBUTE_ID (0x0020)
+#define ZCL_CONTROL_MODE_ATTRIBUTE_ID (0x0021)
+#define ZCL_PUMP_ALARM_MASK_ATTRIBUTE_ID (0x0022)
+
+// Attribute ids for cluster: Thermostat
+
+// Client attributes
+
+// Server attributes
+#define ZCL_LOCAL_TEMPERATURE_ATTRIBUTE_ID (0x0000)
+#define ZCL_OUTDOOR_TEMPERATURE_ATTRIBUTE_ID (0x0001)
+#define ZCL_THERMOSTAT_OCCUPANCY_ATTRIBUTE_ID (0x0002)
+#define ZCL_ABS_MIN_HEAT_SETPOINT_LIMIT_ATTRIBUTE_ID (0x0003)
+#define ZCL_ABS_MAX_HEAT_SETPOINT_LIMIT_ATTRIBUTE_ID (0x0004)
+#define ZCL_ABS_MIN_COOL_SETPOINT_LIMIT_ATTRIBUTE_ID (0x0005)
+#define ZCL_ABS_MAX_COOL_SETPOINT_LIMIT_ATTRIBUTE_ID (0x0006)
+#define ZCL_PI_COOLING_DEMAND_ATTRIBUTE_ID (0x0007)
+#define ZCL_PI_HEATING_DEMAND_ATTRIBUTE_ID (0x0008)
+#define ZCL_HVAC_SYSTEM_TYPE_CONFIGURATION_ATTRIBUTE_ID (0x0009)
+#define ZCL_LOCAL_TEMPERATURE_CALIBRATION_ATTRIBUTE_ID (0x0010)
+#define ZCL_OCCUPIED_COOLING_SETPOINT_ATTRIBUTE_ID (0x0011)
+#define ZCL_OCCUPIED_HEATING_SETPOINT_ATTRIBUTE_ID (0x0012)
+#define ZCL_UNOCCUPIED_COOLING_SETPOINT_ATTRIBUTE_ID (0x0013)
+#define ZCL_UNOCCUPIED_HEATING_SETPOINT_ATTRIBUTE_ID (0x0014)
+#define ZCL_MIN_HEAT_SETPOINT_LIMIT_ATTRIBUTE_ID (0x0015)
+#define ZCL_MAX_HEAT_SETPOINT_LIMIT_ATTRIBUTE_ID (0x0016)
+#define ZCL_MIN_COOL_SETPOINT_LIMIT_ATTRIBUTE_ID (0x0017)
+#define ZCL_MAX_COOL_SETPOINT_LIMIT_ATTRIBUTE_ID (0x0018)
+#define ZCL_MIN_SETPOINT_DEAD_BAND_ATTRIBUTE_ID (0x0019)
+#define ZCL_REMOTE_SENSING_ATTRIBUTE_ID (0x001A)
+#define ZCL_CONTROL_SEQUENCE_OF_OPERATION_ATTRIBUTE_ID (0x001B)
+#define ZCL_SYSTEM_MODE_ATTRIBUTE_ID (0x001C)
+#define ZCL_THERMOSTAT_ALARM_MASK_ATTRIBUTE_ID (0x001D)
+#define ZCL_THERMOSTAT_RUNNING_MODE_ATTRIBUTE_ID (0x001E)
+#define ZCL_START_OF_WEEK_ATTRIBUTE_ID (0x0020)
+#define ZCL_NUMBER_OF_WEEKLY_TRANSITIONS_ATTRIBUTE_ID (0x0021)
+#define ZCL_NUMBER_OF_DAILY_TRANSITIONS_ATTRIBUTE_ID (0x0022)
+#define ZCL_TEMPERATURE_SETPOINT_HOLD_ATTRIBUTE_ID (0x0023)
+#define ZCL_TEMPERATURE_SETPOINT_HOLD_DURATION_ATTRIBUTE_ID (0x0024)
+#define ZCL_THERMOSTAT_PROGRAMMING_OPERATION_MODE_ATTRIBUTE_ID (0x0025)
+#define ZCL_THERMOSTAT_RUNNING_STATE_ATTRIBUTE_ID (0x0029)
+#define ZCL_SETPOINT_CHANGE_SOURCE_ATTRIBUTE_ID (0x0030)
+#define ZCL_SETPOINT_CHANGE_AMOUNT_ATTRIBUTE_ID (0x0031)
+#define ZCL_SETPOINT_CHANGE_SOURCE_TIMESTAMP_ATTRIBUTE_ID (0x0032)
+#define ZCL_AC_TYPE_ATTRIBUTE_ID (0x0040)
+#define ZCL_AC_CAPACITY_ATTRIBUTE_ID (0x0041)
+#define ZCL_AC_REFRIGERANT_TYPE_ATTRIBUTE_ID (0x0042)
+#define ZCL_AC_COMPRESSOR_ATTRIBUTE_ID (0x0043)
+#define ZCL_AC_ERROR_CODE_ATTRIBUTE_ID (0x0044)
+#define ZCL_AC_LOUVER_POSITION_ATTRIBUTE_ID (0x0045)
+#define ZCL_AC_COIL_TEMPERATURE_ATTRIBUTE_ID (0x0046)
+#define ZCL_AC_CAPACITY_FORMAT_ATTRIBUTE_ID (0x0047)
+
+// Attribute ids for cluster: Fan Control
+
+// Client attributes
+
+// Server attributes
+#define ZCL_FAN_CONTROL_FAN_MODE_ATTRIBUTE_ID (0x0000)
+#define ZCL_FAN_CONTROL_FAN_MODE_SEQUENCE_ATTRIBUTE_ID (0x0001)
+
+// Attribute ids for cluster: Dehumidification Control
+
+// Client attributes
+
+// Server attributes
+#define ZCL_RELATIVE_HUMIDITY_ATTRIBUTE_ID (0x0000)
+#define ZCL_DEHUMIDIFICATION_COOLING_ATTRIBUTE_ID (0x0001)
+#define ZCL_RH_DEHUMIDIFICATION_SETPOINT_ATTRIBUTE_ID (0x0010)
+#define ZCL_RELATIVE_HUMIDITY_MODE_ATTRIBUTE_ID (0x0011)
+#define ZCL_DEHUMIDIFICATION_LOCKOUT_ATTRIBUTE_ID (0x0012)
+#define ZCL_DEHUMIDIFICATION_HYSTERESIS_ATTRIBUTE_ID (0x0013)
+#define ZCL_DEHUMIDIFICATION_MAX_COOL_ATTRIBUTE_ID (0x0014)
+#define ZCL_RELATIVE_HUMIDITY_DISPLAY_ATTRIBUTE_ID (0x0015)
+
+// Attribute ids for cluster: Thermostat User Interface Configuration
+
+// Client attributes
+
+// Server attributes
+#define ZCL_TEMPERATURE_DISPLAY_MODE_ATTRIBUTE_ID (0x0000)
+#define ZCL_KEYPAD_LOCKOUT_ATTRIBUTE_ID (0x0001)
+#define ZCL_SCHEDULE_PROGRAMMING_VISIBILITY_ATTRIBUTE_ID (0x0002)
+
+// Attribute ids for cluster: Color Control
+
+// Client attributes
+
+// Server attributes
+#define ZCL_COLOR_CONTROL_CURRENT_HUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_COLOR_CONTROL_CURRENT_SATURATION_ATTRIBUTE_ID (0x0001)
+#define ZCL_COLOR_CONTROL_REMAINING_TIME_ATTRIBUTE_ID (0x0002)
+#define ZCL_COLOR_CONTROL_CURRENT_X_ATTRIBUTE_ID (0x0003)
+#define ZCL_COLOR_CONTROL_CURRENT_Y_ATTRIBUTE_ID (0x0004)
+#define ZCL_COLOR_CONTROL_DRIFT_COMPENSATION_ATTRIBUTE_ID (0x0005)
+#define ZCL_COLOR_CONTROL_COMPENSATION_TEXT_ATTRIBUTE_ID (0x0006)
+#define ZCL_COLOR_CONTROL_COLOR_TEMPERATURE_ATTRIBUTE_ID (0x0007)
+#define ZCL_COLOR_CONTROL_COLOR_MODE_ATTRIBUTE_ID (0x0008)
+#define ZCL_COLOR_CONTROL_OPTIONS_ATTRIBUTE_ID (0x000F)
+#define ZCL_COLOR_CONTROL_NUMBER_OF_PRIMARIES_ATTRIBUTE_ID (0x0010)
+#define ZCL_COLOR_CONTROL_PRIMARY_1_X_ATTRIBUTE_ID (0x0011)
+#define ZCL_COLOR_CONTROL_PRIMARY_1_Y_ATTRIBUTE_ID (0x0012)
+#define ZCL_COLOR_CONTROL_PRIMARY_1_INTENSITY_ATTRIBUTE_ID (0x0013)
+#define ZCL_COLOR_CONTROL_PRIMARY_2_X_ATTRIBUTE_ID (0x0015)
+#define ZCL_COLOR_CONTROL_PRIMARY_2_Y_ATTRIBUTE_ID (0x0016)
+#define ZCL_COLOR_CONTROL_PRIMARY_2_INTENSITY_ATTRIBUTE_ID (0x0017)
+#define ZCL_COLOR_CONTROL_PRIMARY_3_X_ATTRIBUTE_ID (0x0019)
+#define ZCL_COLOR_CONTROL_PRIMARY_3_Y_ATTRIBUTE_ID (0x001A)
+#define ZCL_COLOR_CONTROL_PRIMARY_3_INTENSITY_ATTRIBUTE_ID (0x001B)
+#define ZCL_COLOR_CONTROL_PRIMARY_4_X_ATTRIBUTE_ID (0x0020)
+#define ZCL_COLOR_CONTROL_PRIMARY_4_Y_ATTRIBUTE_ID (0x0021)
+#define ZCL_COLOR_CONTROL_PRIMARY_4_INTENSITY_ATTRIBUTE_ID (0x0022)
+#define ZCL_COLOR_CONTROL_PRIMARY_5_X_ATTRIBUTE_ID (0x0024)
+#define ZCL_COLOR_CONTROL_PRIMARY_5_Y_ATTRIBUTE_ID (0x0025)
+#define ZCL_COLOR_CONTROL_PRIMARY_5_INTENSITY_ATTRIBUTE_ID (0x0026)
+#define ZCL_COLOR_CONTROL_PRIMARY_6_X_ATTRIBUTE_ID (0x0028)
+#define ZCL_COLOR_CONTROL_PRIMARY_6_Y_ATTRIBUTE_ID (0x0029)
+#define ZCL_COLOR_CONTROL_PRIMARY_6_INTENSITY_ATTRIBUTE_ID (0x002A)
+#define ZCL_COLOR_CONTROL_WHITE_POINT_X_ATTRIBUTE_ID (0x0030)
+#define ZCL_COLOR_CONTROL_WHITE_POINT_Y_ATTRIBUTE_ID (0x0031)
+#define ZCL_COLOR_CONTROL_COLOR_POINT_R_X_ATTRIBUTE_ID (0x0032)
+#define ZCL_COLOR_CONTROL_COLOR_POINT_R_Y_ATTRIBUTE_ID (0x0033)
+#define ZCL_COLOR_CONTROL_COLOR_POINT_R_INTENSITY_ATTRIBUTE_ID (0x0034)
+#define ZCL_COLOR_CONTROL_COLOR_POINT_G_X_ATTRIBUTE_ID (0x0036)
+#define ZCL_COLOR_CONTROL_COLOR_POINT_G_Y_ATTRIBUTE_ID (0x0037)
+#define ZCL_COLOR_CONTROL_COLOR_POINT_G_INTENSITY_ATTRIBUTE_ID (0x0038)
+#define ZCL_COLOR_CONTROL_COLOR_POINT_B_X_ATTRIBUTE_ID (0x003A)
+#define ZCL_COLOR_CONTROL_COLOR_POINT_B_Y_ATTRIBUTE_ID (0x003B)
+#define ZCL_COLOR_CONTROL_COLOR_POINT_B_INTENSITY_ATTRIBUTE_ID (0x003C)
+#define ZCL_COLOR_CONTROL_ENHANCED_CURRENT_HUE_ATTRIBUTE_ID (0x4000)
+#define ZCL_COLOR_CONTROL_ENHANCED_COLOR_MODE_ATTRIBUTE_ID (0x4001)
+#define ZCL_COLOR_CONTROL_COLOR_LOOP_ACTIVE_ATTRIBUTE_ID (0x4002)
+#define ZCL_COLOR_CONTROL_COLOR_LOOP_DIRECTION_ATTRIBUTE_ID (0x4003)
+#define ZCL_COLOR_CONTROL_COLOR_LOOP_TIME_ATTRIBUTE_ID (0x4004)
+#define ZCL_COLOR_CONTROL_COLOR_LOOP_START_ENHANCED_HUE_ATTRIBUTE_ID (0x4005)
+#define ZCL_COLOR_CONTROL_COLOR_LOOP_STORED_ENHANCED_HUE_ATTRIBUTE_ID (0x4006)
+#define ZCL_COLOR_CONTROL_COLOR_CAPABILITIES_ATTRIBUTE_ID (0x400A)
+#define ZCL_COLOR_CONTROL_COLOR_TEMP_PHYSICAL_MIN_ATTRIBUTE_ID (0x400B)
+#define ZCL_COLOR_CONTROL_COLOR_TEMP_PHYSICAL_MAX_ATTRIBUTE_ID (0x400C)
+#define ZCL_COLOR_CONTROL_TEMPERATURE_LEVEL_MIN_MIREDS_ATTRIBUTE_ID (0x400D)
+#define ZCL_START_UP_COLOR_TEMPERATURE_MIREDS_ATTRIBUTE_ID (0x4010)
+
+// Attribute ids for cluster: Ballast Configuration
+
+// Client attributes
+
+// Server attributes
+#define ZCL_PHYSICAL_MIN_LEVEL_ATTRIBUTE_ID (0x0000)
+#define ZCL_PHYSICAL_MAX_LEVEL_ATTRIBUTE_ID (0x0001)
+#define ZCL_BALLAST_STATUS_ATTRIBUTE_ID (0x0002)
+#define ZCL_MIN_LEVEL_ATTRIBUTE_ID (0x0010)
+#define ZCL_MAX_LEVEL_ATTRIBUTE_ID (0x0011)
+#define ZCL_POWER_ON_LEVEL_ATTRIBUTE_ID (0x0012)
+#define ZCL_POWER_ON_FADE_TIME_ATTRIBUTE_ID (0x0013)
+#define ZCL_INTRINSIC_BALLAST_FACTOR_ATTRIBUTE_ID (0x0014)
+#define ZCL_BALLAST_FACTOR_ADJUSTMENT_ATTRIBUTE_ID (0x0015)
+#define ZCL_LAMP_QUALITY_ATTRIBUTE_ID (0x0020)
+#define ZCL_LAMP_TYPE_ATTRIBUTE_ID (0x0030)
+#define ZCL_LAMP_MANUFACTURER_ATTRIBUTE_ID (0x0031)
+#define ZCL_LAMP_RATED_HOURS_ATTRIBUTE_ID (0x0032)
+#define ZCL_LAMP_BURN_HOURS_ATTRIBUTE_ID (0x0033)
+#define ZCL_LAMP_ALARM_MODE_ATTRIBUTE_ID (0x0034)
+#define ZCL_LAMP_BURN_HOURS_TRIP_POINT_ATTRIBUTE_ID (0x0035)
+
+// Attribute ids for cluster: Illuminance Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_ILLUM_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_ILLUM_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_ILLUM_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_ILLUM_TOLERANCE_ATTRIBUTE_ID (0x0003)
+#define ZCL_MEASUREMENT_LIGHT_SENSOR_TYPE_ATTRIBUTE_ID (0x0004)
+
+// Attribute ids for cluster: Illuminance Level Sensing
+
+// Client attributes
+
+// Server attributes
+#define ZCL_LEVEL_STATUS_ATTRIBUTE_ID (0x0000)
+#define ZCL_SENSING_LIGHT_SENSOR_TYPE_ATTRIBUTE_ID (0x0001)
+#define ZCL_ILLUMINANCE_TARGET_LEVEL_ATTRIBUTE_ID (0x0010)
+
+// Attribute ids for cluster: Temperature Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_TEMP_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_TEMP_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_TEMP_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_TEMP_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Pressure Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_PRESSURE_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_PRESSURE_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_PRESSURE_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_PRESSURE_TOLERANCE_ATTRIBUTE_ID (0x0003)
+#define ZCL_PRESSURE_SCALED_VALUE_ATTRIBUTE_ID (0x0010)
+#define ZCL_PRESSURE_MIN_SCALED_VALUE_ATTRIBUTE_ID (0x0011)
+#define ZCL_PRESSURE_MAX_SCALED_VALUE_ATTRIBUTE_ID (0x0012)
+#define ZCL_PRESSURE_SCALED_TOLERANCE_ATTRIBUTE_ID (0x0013)
+#define ZCL_PRESSURE_SCALE_ATTRIBUTE_ID (0x0014)
+
+// Attribute ids for cluster: Flow Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_FLOW_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_FLOW_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_FLOW_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_FLOW_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Relative Humidity Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_RELATIVE_HUMIDITY_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_RELATIVE_HUMIDITY_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_RELATIVE_HUMIDITY_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_RELATIVE_HUMIDITY_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Occupancy Sensing
+
+// Client attributes
+
+// Server attributes
+#define ZCL_OCCUPANCY_ATTRIBUTE_ID (0x0000)
+#define ZCL_OCCUPANCY_SENSOR_TYPE_ATTRIBUTE_ID (0x0001)
+#define ZCL_OCCUPANCY_SENSOR_TYPE_BITMAP_ATTRIBUTE_ID (0x0002)
+#define ZCL_PIR_OCCUPIED_TO_UNOCCUPIED_DELAY_ATTRIBUTE_ID (0x0010)
+#define ZCL_PIR_UNOCCUPIED_TO_OCCUPIED_DELAY_ATTRIBUTE_ID (0x0011)
+#define ZCL_PIR_UNOCCUPIED_TO_OCCUPIED_THRESHOLD_ATTRIBUTE_ID (0x0012)
+#define ZCL_ULTRASONIC_OCCUPIED_TO_UNOCCUPIED_DELAY_ATTRIBUTE_ID (0x0020)
+#define ZCL_ULTRASONIC_UNOCCUPIED_TO_OCCUPIED_DELAY_ATTRIBUTE_ID (0x0021)
+#define ZCL_ULTRASONIC_UNOCCUPIED_TO_OCCUPIED_THRESHOLD_ATTRIBUTE_ID (0x0022)
+#define ZCL_PHYSICAL_CONTACT_OCCUPIED_TO_UNOCCUPIED_DELAY_ATTRIBUTE_ID (0x0030)
+#define ZCL_PHYSICAL_CONTACT_UNOCCUPIED_TO_OCCUPIED_DELAY_ATTRIBUTE_ID (0x0031)
+#define ZCL_PHYSICAL_CONTACT_UNOCCUPIED_TO_OCCUPIED_THRESHOLD_ATTRIBUTE_ID (0x0032)
+
+// Attribute ids for cluster: Carbon Monoxide Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_CARBON_MONOXIDE_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_CARBON_MONOXIDE_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_CARBON_MONOXIDE_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_CARBON_MONOXIDE_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Carbon Dioxide Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_CARBON_DIOXIDE_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_CARBON_DIOXIDE_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_CARBON_DIOXIDE_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_CARBON_DIOXIDE_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Ethylene Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_ETHYLENE_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_ETHYLENE_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_ETHYLENE_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_ETHYLENE_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Ethylene Oxide Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_ETHYLENE_OXIDE_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_ETHYLENE_OXIDE_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_ETHYLENE_OXIDE_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_ETHYLENE_OXIDE_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Hydrogen Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_HYDROGEN_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_HYDROGEN_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_HYDROGEN_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_HYDROGEN_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Hydrogen Sulphide Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_HYDROGEN_SULPHIDE_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_HYDROGEN_SULPHIDE_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_HYDROGEN_SULPHIDE_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_HYDROGEN_SULPHIDE_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Nitric Oxide Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_NITRIC_OXIDE_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_NITRIC_OXIDE_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_NITRIC_OXIDE_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_NITRIC_OXIDE_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Nitrogen Dioxide Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_NITROGEN_DIOXIDE_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_NITROGEN_DIOXIDE_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_NITROGEN_DIOXIDE_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_NITROGEN_DIOXIDE_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Oxygen Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_OXYGEN_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_OXYGEN_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_OXYGEN_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_OXYGEN_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Ozone Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_OZONE_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_OZONE_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_OZONE_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_OZONE_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Sulfur Dioxide Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_SULFUR_DIOXIDE_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_SULFUR_DIOXIDE_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_SULFUR_DIOXIDE_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_SULFUR_DIOXIDE_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Dissolved Oxygen Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_DISSOLVED_OXYGEN_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_DISSOLVED_OXYGEN_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_DISSOLVED_OXYGEN_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_DISSOLVED_OXYGEN_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Bromate Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_BROMATE_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_BROMATE_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_BROMATE_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_BROMATE_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Chloramines Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_CHLORAMINES_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_CHLORAMINES_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_CHLORAMINES_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_CHLORAMINES_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Chlorine Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_CHLORINE_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_CHLORINE_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_CHLORINE_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_CHLORINE_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Fecal coliform and E. Coli Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_FECAL_COLIFORM_AND_E_COLI_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_FECAL_COLIFORM_AND_E_COLI_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_FECAL_COLIFORM_AND_E_COLI_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_FECAL_COLIFORM_AND_E_COLI_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Fluoride Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_FLUORIDE_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_FLUORIDE_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_FLUORIDE_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_FLUORIDE_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Haloacetic Acids Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_HALOACETIC_ACIDS_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_HALOACETIC_ACIDS_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_HALOACETIC_ACIDS_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_HALOACETIC_ACIDS_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Total Trihalomethanes Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_TOTAL_TRIHALOMETHANES_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_TOTAL_TRIHALOMETHANES_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_TOTAL_TRIHALOMETHANES_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_TOTAL_TRIHALOMETHANES_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Total Coliform Bacteria Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_TOTAL_COLIFORM_BACTERIA_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_TOTAL_COLIFORM_BACTERIA_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_TOTAL_COLIFORM_BACTERIA_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_TOTAL_COLIFORM_BACTERIA_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Turbidity Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_TURBIDITY_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_TURBIDITY_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_TURBIDITY_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_TURBIDITY_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Copper Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_COPPER_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_COPPER_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_COPPER_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_COPPER_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Lead Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_LEAD_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_LEAD_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_LEAD_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_LEAD_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Manganese Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_MANGANESE_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_MANGANESE_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_MANGANESE_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_MANGANESE_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Sulfate Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_SULFATE_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_SULFATE_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_SULFATE_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_SULFATE_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Bromodichloromethane Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_BROMODICHLOROMETHANE_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_BROMODICHLOROMETHANE_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_BROMODICHLOROMETHANE_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_BROMODICHLOROMETHANE_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Bromoform Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_BROMOFORM_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_BROMOFORM_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_BROMOFORM_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_BROMOFORM_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Chlorodibromomethane Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_CHLORODIBROMOMETHANE_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_CHLORODIBROMOMETHANE_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_CHLORODIBROMOMETHANE_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_CHLORODIBROMOMETHANE_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Chloroform Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_CHLOROFORM_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_CHLOROFORM_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_CHLOROFORM_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_CHLOROFORM_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Sodium Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_SODIUM_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_SODIUM_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_SODIUM_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_SODIUM_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: IAS Zone
+
+// Client attributes
+
+// Server attributes
+#define ZCL_ZONE_STATE_ATTRIBUTE_ID (0x0000)
+#define ZCL_ZONE_TYPE_ATTRIBUTE_ID (0x0001)
+#define ZCL_ZONE_STATUS_ATTRIBUTE_ID (0x0002)
+#define ZCL_IAS_CIE_ADDRESS_ATTRIBUTE_ID (0x0010)
+#define ZCL_ZONE_ID_ATTRIBUTE_ID (0x0011)
+#define ZCL_NUMBER_OF_ZONE_SENSITIVITY_LEVELS_SUPPORTED_ATTRIBUTE_ID (0x0012)
+#define ZCL_CURRENT_ZONE_SENSITIVITY_LEVEL_ATTRIBUTE_ID (0x0013)
+
+// Attribute ids for cluster: IAS ACE
+
+// Client attributes
+
+// Server attributes
+
+// Attribute ids for cluster: IAS WD
+
+// Client attributes
+
+// Server attributes
+#define ZCL_MAX_DURATION_ATTRIBUTE_ID (0x0000)
+
+// Attribute ids for cluster: Generic Tunnel
+
+// Client attributes
+
+// Server attributes
+#define ZCL_MAXIMUM_INCOMING_TRANSFER_SIZE_ATTRIBUTE_ID (0x0001)
+#define ZCL_MAXIMUM_OUTGOING_TRANSFER_SIZE_ATTRIBUTE_ID (0x0002)
+#define ZCL_PROTOCOL_ADDRESS_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: BACnet Protocol Tunnel
+
+// Client attributes
+
+// Server attributes
+
+// Attribute ids for cluster: 11073 Protocol Tunnel
+
+// Client attributes
+
+// Server attributes
+#define ZCL_DEVICE_ID_LIST_ATTRIBUTE_ID (0x0000)
+#define ZCL_MANAGER_TARGET_ATTRIBUTE_ID (0x0001)
+#define ZCL_MANAGER_ENDPOINT_ATTRIBUTE_ID (0x0002)
+#define ZCL_CONNECTED_ATTRIBUTE_ID (0x0003)
+#define ZCL_PREEMPTIBLE_ATTRIBUTE_ID (0x0004)
+#define ZCL_IDLE_TIMEOUT_ATTRIBUTE_ID (0x0005)
+
+// Attribute ids for cluster: ISO 7816 Protocol Tunnel
+
+// Client attributes
+
+// Server attributes
+#define ZCL_ISO7816_PROTOCOL_TUNNEL_STATUS_ATTRIBUTE_ID (0x0000)
+
+// Attribute ids for cluster: Price
+
+// Client attributes
+#define ZCL_PRICE_INCREASE_RANDOMIZE_MINUTES_ATTRIBUTE_ID (0x0000)
+#define ZCL_PRICE_DECREASE_RANDOMIZE_MINUTES_ATTRIBUTE_ID (0x0001)
+#define ZCL_COMMODITY_TYPE_CLIENT_ATTRIBUTE_ID (0x0002)
+
+// Server attributes
+#define ZCL_TIER1_PRICE_LABEL_ATTRIBUTE_ID (0x0000)
+#define ZCL_TIER2_PRICE_LABEL_ATTRIBUTE_ID (0x0001)
+#define ZCL_TIER3_PRICE_LABEL_ATTRIBUTE_ID (0x0002)
+#define ZCL_TIER4_PRICE_LABEL_ATTRIBUTE_ID (0x0003)
+#define ZCL_TIER5_PRICE_LABEL_ATTRIBUTE_ID (0x0004)
+#define ZCL_TIER6_PRICE_LABEL_ATTRIBUTE_ID (0x0005)
+#define ZCL_TIER7_PRICE_LABEL_ATTRIBUTE_ID (0x0006)
+#define ZCL_TIER8_PRICE_LABEL_ATTRIBUTE_ID (0x0007)
+#define ZCL_TIER9_PRICE_LABEL_ATTRIBUTE_ID (0x0008)
+#define ZCL_TIER10_PRICE_LABEL_ATTRIBUTE_ID (0x0009)
+#define ZCL_TIER11_PRICE_LABEL_ATTRIBUTE_ID (0x000A)
+#define ZCL_TIER12_PRICE_LABEL_ATTRIBUTE_ID (0x000B)
+#define ZCL_TIER13_PRICE_LABEL_ATTRIBUTE_ID (0x000C)
+#define ZCL_TIER14_PRICE_LABEL_ATTRIBUTE_ID (0x000D)
+#define ZCL_TIER15_PRICE_LABEL_ATTRIBUTE_ID (0x000E)
+#define ZCL_TIER16_PRICE_LABEL_ATTRIBUTE_ID (0x000F)
+#define ZCL_TIER17_PRICE_LABEL_ATTRIBUTE_ID (0x0010)
+#define ZCL_TIER18_PRICE_LABEL_ATTRIBUTE_ID (0x0011)
+#define ZCL_TIER19_PRICE_LABEL_ATTRIBUTE_ID (0x0012)
+#define ZCL_TIER20_PRICE_LABEL_ATTRIBUTE_ID (0x0013)
+#define ZCL_TIER21_PRICE_LABEL_ATTRIBUTE_ID (0x0014)
+#define ZCL_TIER22_PRICE_LABEL_ATTRIBUTE_ID (0x0015)
+#define ZCL_TIER23_PRICE_LABEL_ATTRIBUTE_ID (0x0016)
+#define ZCL_TIER24_PRICE_LABEL_ATTRIBUTE_ID (0x0017)
+#define ZCL_TIER25_PRICE_LABEL_ATTRIBUTE_ID (0x0018)
+#define ZCL_TIER26_PRICE_LABEL_ATTRIBUTE_ID (0x0019)
+#define ZCL_TIER27_PRICE_LABEL_ATTRIBUTE_ID (0x001A)
+#define ZCL_TIER28_PRICE_LABEL_ATTRIBUTE_ID (0x001B)
+#define ZCL_TIER29_PRICE_LABEL_ATTRIBUTE_ID (0x001C)
+#define ZCL_TIER30_PRICE_LABEL_ATTRIBUTE_ID (0x001D)
+#define ZCL_TIER31_PRICE_LABEL_ATTRIBUTE_ID (0x001E)
+#define ZCL_TIER32_PRICE_LABEL_ATTRIBUTE_ID (0x001F)
+#define ZCL_TIER33_PRICE_LABEL_ATTRIBUTE_ID (0x0020)
+#define ZCL_TIER34_PRICE_LABEL_ATTRIBUTE_ID (0x0021)
+#define ZCL_TIER35_PRICE_LABEL_ATTRIBUTE_ID (0x0022)
+#define ZCL_TIER36_PRICE_LABEL_ATTRIBUTE_ID (0x0023)
+#define ZCL_TIER37_PRICE_LABEL_ATTRIBUTE_ID (0x0024)
+#define ZCL_TIER38_PRICE_LABEL_ATTRIBUTE_ID (0x0025)
+#define ZCL_TIER39_PRICE_LABEL_ATTRIBUTE_ID (0x0026)
+#define ZCL_TIER40_PRICE_LABEL_ATTRIBUTE_ID (0x0027)
+#define ZCL_TIER41_PRICE_LABEL_ATTRIBUTE_ID (0x0028)
+#define ZCL_TIER42_PRICE_LABEL_ATTRIBUTE_ID (0x0029)
+#define ZCL_TIER43_PRICE_LABEL_ATTRIBUTE_ID (0x002A)
+#define ZCL_TIER44_PRICE_LABEL_ATTRIBUTE_ID (0x002B)
+#define ZCL_TIER45_PRICE_LABEL_ATTRIBUTE_ID (0x002C)
+#define ZCL_TIER46_PRICE_LABEL_ATTRIBUTE_ID (0x002D)
+#define ZCL_TIER47_PRICE_LABEL_ATTRIBUTE_ID (0x002E)
+#define ZCL_TIER48_PRICE_LABEL_ATTRIBUTE_ID (0x002F)
+#define ZCL_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x0100)
+#define ZCL_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x0101)
+#define ZCL_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x0102)
+#define ZCL_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x0103)
+#define ZCL_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x0104)
+#define ZCL_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x0105)
+#define ZCL_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x0106)
+#define ZCL_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x0107)
+#define ZCL_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x0108)
+#define ZCL_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x0109)
+#define ZCL_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x010A)
+#define ZCL_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x010B)
+#define ZCL_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x010C)
+#define ZCL_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x010D)
+#define ZCL_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x010E)
+#define ZCL_BLOCK_THRESHOLD_COUNT_ATTRIBUTE_ID (0x010F)
+#define ZCL_TIER1_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x0110)
+#define ZCL_TIER1_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x0111)
+#define ZCL_TIER1_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x0112)
+#define ZCL_TIER1_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x0113)
+#define ZCL_TIER1_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x0114)
+#define ZCL_TIER1_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x0115)
+#define ZCL_TIER1_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x0116)
+#define ZCL_TIER1_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x0117)
+#define ZCL_TIER1_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x0118)
+#define ZCL_TIER1_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x0119)
+#define ZCL_TIER1_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x011A)
+#define ZCL_TIER1_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x011B)
+#define ZCL_TIER1_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x011C)
+#define ZCL_TIER1_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x011D)
+#define ZCL_TIER1_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x011E)
+#define ZCL_TIER1_BLOCK_THRESHOLD_COUNT_ATTRIBUTE_ID (0x011F)
+#define ZCL_TIER2_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x0120)
+#define ZCL_TIER2_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x0121)
+#define ZCL_TIER2_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x0122)
+#define ZCL_TIER2_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x0123)
+#define ZCL_TIER2_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x0124)
+#define ZCL_TIER2_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x0125)
+#define ZCL_TIER2_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x0126)
+#define ZCL_TIER2_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x0127)
+#define ZCL_TIER2_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x0128)
+#define ZCL_TIER2_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x0129)
+#define ZCL_TIER2_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x012A)
+#define ZCL_TIER2_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x012B)
+#define ZCL_TIER2_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x012C)
+#define ZCL_TIER2_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x012D)
+#define ZCL_TIER2_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x012E)
+#define ZCL_TIER2_BLOCK_THRESHOLD_COUNT_ATTRIBUTE_ID (0x012F)
+#define ZCL_TIER3_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x0130)
+#define ZCL_TIER3_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x0131)
+#define ZCL_TIER3_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x0132)
+#define ZCL_TIER3_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x0133)
+#define ZCL_TIER3_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x0134)
+#define ZCL_TIER3_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x0135)
+#define ZCL_TIER3_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x0136)
+#define ZCL_TIER3_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x0137)
+#define ZCL_TIER3_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x0138)
+#define ZCL_TIER3_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x0139)
+#define ZCL_TIER3_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x013A)
+#define ZCL_TIER3_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x013B)
+#define ZCL_TIER3_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x013C)
+#define ZCL_TIER3_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x013D)
+#define ZCL_TIER3_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x013E)
+#define ZCL_TIER3_BLOCK_THRESHOLD_COUNT_ATTRIBUTE_ID (0x013F)
+#define ZCL_TIER4_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x0140)
+#define ZCL_TIER4_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x0141)
+#define ZCL_TIER4_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x0142)
+#define ZCL_TIER4_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x0143)
+#define ZCL_TIER4_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x0144)
+#define ZCL_TIER4_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x0145)
+#define ZCL_TIER4_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x0146)
+#define ZCL_TIER4_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x0147)
+#define ZCL_TIER4_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x0148)
+#define ZCL_TIER4_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x0149)
+#define ZCL_TIER4_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x014A)
+#define ZCL_TIER4_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x014B)
+#define ZCL_TIER4_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x014C)
+#define ZCL_TIER4_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x014D)
+#define ZCL_TIER4_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x014E)
+#define ZCL_TIER4_BLOCK_THRESHOLD_COUNT_ATTRIBUTE_ID (0x014F)
+#define ZCL_TIER5_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x0150)
+#define ZCL_TIER5_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x0151)
+#define ZCL_TIER5_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x0152)
+#define ZCL_TIER5_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x0153)
+#define ZCL_TIER5_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x0154)
+#define ZCL_TIER5_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x0155)
+#define ZCL_TIER5_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x0156)
+#define ZCL_TIER5_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x0157)
+#define ZCL_TIER5_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x0158)
+#define ZCL_TIER5_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x0159)
+#define ZCL_TIER5_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x015A)
+#define ZCL_TIER5_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x015B)
+#define ZCL_TIER5_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x015C)
+#define ZCL_TIER5_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x015D)
+#define ZCL_TIER5_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x015E)
+#define ZCL_TIER5_BLOCK_THRESHOLD_COUNT_ATTRIBUTE_ID (0x015F)
+#define ZCL_TIER6_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x0160)
+#define ZCL_TIER6_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x0161)
+#define ZCL_TIER6_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x0162)
+#define ZCL_TIER6_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x0163)
+#define ZCL_TIER6_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x0164)
+#define ZCL_TIER6_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x0165)
+#define ZCL_TIER6_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x0166)
+#define ZCL_TIER6_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x0167)
+#define ZCL_TIER6_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x0168)
+#define ZCL_TIER6_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x0169)
+#define ZCL_TIER6_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x016A)
+#define ZCL_TIER6_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x016B)
+#define ZCL_TIER6_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x016C)
+#define ZCL_TIER6_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x016D)
+#define ZCL_TIER6_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x016E)
+#define ZCL_TIER6_BLOCK_THRESHOLD_COUNT_ATTRIBUTE_ID (0x016F)
+#define ZCL_TIER7_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x0170)
+#define ZCL_TIER7_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x0171)
+#define ZCL_TIER7_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x0172)
+#define ZCL_TIER7_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x0173)
+#define ZCL_TIER7_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x0174)
+#define ZCL_TIER7_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x0175)
+#define ZCL_TIER7_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x0176)
+#define ZCL_TIER7_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x0177)
+#define ZCL_TIER7_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x0178)
+#define ZCL_TIER7_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x0179)
+#define ZCL_TIER7_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x017A)
+#define ZCL_TIER7_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x017B)
+#define ZCL_TIER7_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x017C)
+#define ZCL_TIER7_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x017D)
+#define ZCL_TIER7_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x017E)
+#define ZCL_TIER7_BLOCK_THRESHOLD_COUNT_ATTRIBUTE_ID (0x017F)
+#define ZCL_TIER8_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x0180)
+#define ZCL_TIER8_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x0181)
+#define ZCL_TIER8_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x0182)
+#define ZCL_TIER8_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x0183)
+#define ZCL_TIER8_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x0184)
+#define ZCL_TIER8_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x0185)
+#define ZCL_TIER8_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x0186)
+#define ZCL_TIER8_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x0187)
+#define ZCL_TIER8_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x0188)
+#define ZCL_TIER8_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x0189)
+#define ZCL_TIER8_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x018A)
+#define ZCL_TIER8_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x018B)
+#define ZCL_TIER8_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x018C)
+#define ZCL_TIER8_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x018D)
+#define ZCL_TIER8_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x018E)
+#define ZCL_TIER8_BLOCK_THRESHOLD_COUNT_ATTRIBUTE_ID (0x018F)
+#define ZCL_TIER9_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x0190)
+#define ZCL_TIER9_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x0191)
+#define ZCL_TIER9_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x0192)
+#define ZCL_TIER9_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x0193)
+#define ZCL_TIER9_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x0194)
+#define ZCL_TIER9_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x0195)
+#define ZCL_TIER9_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x0196)
+#define ZCL_TIER9_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x0197)
+#define ZCL_TIER9_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x0198)
+#define ZCL_TIER9_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x0199)
+#define ZCL_TIER9_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x019A)
+#define ZCL_TIER9_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x019B)
+#define ZCL_TIER9_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x019C)
+#define ZCL_TIER9_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x019D)
+#define ZCL_TIER9_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x019E)
+#define ZCL_TIER9_BLOCK_THRESHOLD_COUNT_ATTRIBUTE_ID (0x019F)
+#define ZCL_TIER10_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x01A0)
+#define ZCL_TIER10_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x01A1)
+#define ZCL_TIER10_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x01A2)
+#define ZCL_TIER10_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x01A3)
+#define ZCL_TIER10_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x01A4)
+#define ZCL_TIER10_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x01A5)
+#define ZCL_TIER10_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x01A6)
+#define ZCL_TIER10_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x01A7)
+#define ZCL_TIER10_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x01A8)
+#define ZCL_TIER10_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x01A9)
+#define ZCL_TIER10_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x01AA)
+#define ZCL_TIER10_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x01AB)
+#define ZCL_TIER10_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x01AC)
+#define ZCL_TIER10_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x01AD)
+#define ZCL_TIER10_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x01AE)
+#define ZCL_TIER10_BLOCK_THRESHOLD_COUNT_ATTRIBUTE_ID (0x01AF)
+#define ZCL_TIER11_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x01B0)
+#define ZCL_TIER11_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x01B1)
+#define ZCL_TIER11_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x01B2)
+#define ZCL_TIER11_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x01B3)
+#define ZCL_TIER11_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x01B4)
+#define ZCL_TIER11_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x01B5)
+#define ZCL_TIER11_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x01B6)
+#define ZCL_TIER11_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x01B7)
+#define ZCL_TIER11_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x01B8)
+#define ZCL_TIER11_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x01B9)
+#define ZCL_TIER11_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x01BA)
+#define ZCL_TIER11_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x01BB)
+#define ZCL_TIER11_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x01BC)
+#define ZCL_TIER11_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x01BD)
+#define ZCL_TIER11_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x01BE)
+#define ZCL_TIER11_BLOCK_THRESHOLD_COUNT_ATTRIBUTE_ID (0x01BF)
+#define ZCL_TIER12_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x01C0)
+#define ZCL_TIER12_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x01C1)
+#define ZCL_TIER12_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x01C2)
+#define ZCL_TIER12_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x01C3)
+#define ZCL_TIER12_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x01C4)
+#define ZCL_TIER12_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x01C5)
+#define ZCL_TIER12_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x01C6)
+#define ZCL_TIER12_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x01C7)
+#define ZCL_TIER12_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x01C8)
+#define ZCL_TIER12_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x01C9)
+#define ZCL_TIER12_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x01CA)
+#define ZCL_TIER12_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x01CB)
+#define ZCL_TIER12_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x01CC)
+#define ZCL_TIER12_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x01CD)
+#define ZCL_TIER12_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x01CE)
+#define ZCL_TIER12_BLOCK_THRESHOLD_COUNT_ATTRIBUTE_ID (0x01CF)
+#define ZCL_TIER13_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x01D0)
+#define ZCL_TIER13_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x01D1)
+#define ZCL_TIER13_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x01D2)
+#define ZCL_TIER13_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x01D3)
+#define ZCL_TIER13_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x01D4)
+#define ZCL_TIER13_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x01D5)
+#define ZCL_TIER13_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x01D6)
+#define ZCL_TIER13_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x01D7)
+#define ZCL_TIER13_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x01D8)
+#define ZCL_TIER13_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x01D9)
+#define ZCL_TIER13_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x01DA)
+#define ZCL_TIER13_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x01DB)
+#define ZCL_TIER13_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x01DC)
+#define ZCL_TIER13_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x01DD)
+#define ZCL_TIER13_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x01DE)
+#define ZCL_TIER13_BLOCK_THRESHOLD_COUNT_ATTRIBUTE_ID (0x01DF)
+#define ZCL_TIER14_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x01E0)
+#define ZCL_TIER14_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x01E1)
+#define ZCL_TIER14_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x01E2)
+#define ZCL_TIER14_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x01E3)
+#define ZCL_TIER14_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x01E4)
+#define ZCL_TIER14_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x01E5)
+#define ZCL_TIER14_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x01E6)
+#define ZCL_TIER14_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x01E7)
+#define ZCL_TIER14_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x01E8)
+#define ZCL_TIER14_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x01E9)
+#define ZCL_TIER14_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x01EA)
+#define ZCL_TIER14_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x01EB)
+#define ZCL_TIER14_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x01EC)
+#define ZCL_TIER14_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x01ED)
+#define ZCL_TIER14_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x01EE)
+#define ZCL_TIER14_BLOCK_THRESHOLD_COUNT_ATTRIBUTE_ID (0x01EF)
+#define ZCL_TIER15_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x01F0)
+#define ZCL_TIER15_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x01F1)
+#define ZCL_TIER15_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x01F2)
+#define ZCL_TIER15_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x01F3)
+#define ZCL_TIER15_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x01F4)
+#define ZCL_TIER15_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x01F5)
+#define ZCL_TIER15_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x01F6)
+#define ZCL_TIER15_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x01F7)
+#define ZCL_TIER15_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x01F8)
+#define ZCL_TIER15_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x01F9)
+#define ZCL_TIER15_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x01FA)
+#define ZCL_TIER15_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x01FB)
+#define ZCL_TIER15_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x01FC)
+#define ZCL_TIER15_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x01FD)
+#define ZCL_TIER15_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x01FE)
+#define ZCL_TIER15_BLOCK_THRESHOLD_COUNT_ATTRIBUTE_ID (0x01FF)
+#define ZCL_START_OF_BLOCK_PERIOD_ATTRIBUTE_ID (0x0200)
+#define ZCL_BLOCK_PERIOD_DURATION_MINUTES_ATTRIBUTE_ID (0x0201)
+#define ZCL_THRESHOLD_MULTIPLIER_ATTRIBUTE_ID (0x0202)
+#define ZCL_THRESHOLD_DIVISOR_ATTRIBUTE_ID (0x0203)
+#define ZCL_BLOCK_PERIOD_DURATION_TYPE_ATTRIBUTE_ID (0x0204)
+#define ZCL_COMMODITY_TYPE_SERVER_ATTRIBUTE_ID (0x0300)
+#define ZCL_STANDING_CHARGE_ATTRIBUTE_ID (0x0301)
+#define ZCL_CONVERSION_FACTOR_ATTRIBUTE_ID (0x0302)
+#define ZCL_CONVERSION_FACTOR_TRAILING_DIGIT_ATTRIBUTE_ID (0x0303)
+#define ZCL_CALORIFIC_VALUE_ATTRIBUTE_ID (0x0304)
+#define ZCL_CALORIFIC_VALUE_UNIT_ATTRIBUTE_ID (0x0305)
+#define ZCL_CALORIFIC_VALUE_TRAILING_DIGIT_ATTRIBUTE_ID (0x0306)
+#define ZCL_NO_TIER_BLOCK1_PRICE_ATTRIBUTE_ID (0x0400)
+#define ZCL_NO_TIER_BLOCK2_PRICE_ATTRIBUTE_ID (0x0401)
+#define ZCL_NO_TIER_BLOCK3_PRICE_ATTRIBUTE_ID (0x0402)
+#define ZCL_NO_TIER_BLOCK4_PRICE_ATTRIBUTE_ID (0x0403)
+#define ZCL_NO_TIER_BLOCK5_PRICE_ATTRIBUTE_ID (0x0404)
+#define ZCL_NO_TIER_BLOCK6_PRICE_ATTRIBUTE_ID (0x0405)
+#define ZCL_NO_TIER_BLOCK7_PRICE_ATTRIBUTE_ID (0x0406)
+#define ZCL_NO_TIER_BLOCK8_PRICE_ATTRIBUTE_ID (0x0407)
+#define ZCL_NO_TIER_BLOCK9_PRICE_ATTRIBUTE_ID (0x0408)
+#define ZCL_NO_TIER_BLOCK10_PRICE_ATTRIBUTE_ID (0x0409)
+#define ZCL_NO_TIER_BLOCK11_PRICE_ATTRIBUTE_ID (0x040A)
+#define ZCL_NO_TIER_BLOCK12_PRICE_ATTRIBUTE_ID (0x040B)
+#define ZCL_NO_TIER_BLOCK13_PRICE_ATTRIBUTE_ID (0x040C)
+#define ZCL_NO_TIER_BLOCK14_PRICE_ATTRIBUTE_ID (0x040D)
+#define ZCL_NO_TIER_BLOCK15_PRICE_ATTRIBUTE_ID (0x040E)
+#define ZCL_NO_TIER_BLOCK16_PRICE_ATTRIBUTE_ID (0x040F)
+#define ZCL_TIER1_BLOCK1_PRICE_ATTRIBUTE_ID (0x0410)
+#define ZCL_TIER1_BLOCK2_PRICE_ATTRIBUTE_ID (0x0411)
+#define ZCL_TIER1_BLOCK3_PRICE_ATTRIBUTE_ID (0x0412)
+#define ZCL_TIER1_BLOCK4_PRICE_ATTRIBUTE_ID (0x0413)
+#define ZCL_TIER1_BLOCK5_PRICE_ATTRIBUTE_ID (0x0414)
+#define ZCL_TIER1_BLOCK6_PRICE_ATTRIBUTE_ID (0x0415)
+#define ZCL_TIER1_BLOCK7_PRICE_ATTRIBUTE_ID (0x0416)
+#define ZCL_TIER1_BLOCK8_PRICE_ATTRIBUTE_ID (0x0417)
+#define ZCL_TIER1_BLOCK9_PRICE_ATTRIBUTE_ID (0x0418)
+#define ZCL_TIER1_BLOCK10_PRICE_ATTRIBUTE_ID (0x0419)
+#define ZCL_TIER1_BLOCK11_PRICE_ATTRIBUTE_ID (0x041A)
+#define ZCL_TIER1_BLOCK12_PRICE_ATTRIBUTE_ID (0x041B)
+#define ZCL_TIER1_BLOCK13_PRICE_ATTRIBUTE_ID (0x041C)
+#define ZCL_TIER1_BLOCK14_PRICE_ATTRIBUTE_ID (0x041D)
+#define ZCL_TIER1_BLOCK15_PRICE_ATTRIBUTE_ID (0x041E)
+#define ZCL_TIER1_BLOCK16_PRICE_ATTRIBUTE_ID (0x041F)
+#define ZCL_TIER2_BLOCK1_PRICE_ATTRIBUTE_ID (0x0420)
+#define ZCL_TIER2_BLOCK2_PRICE_ATTRIBUTE_ID (0x0421)
+#define ZCL_TIER2_BLOCK3_PRICE_ATTRIBUTE_ID (0x0422)
+#define ZCL_TIER2_BLOCK4_PRICE_ATTRIBUTE_ID (0x0423)
+#define ZCL_TIER2_BLOCK5_PRICE_ATTRIBUTE_ID (0x0424)
+#define ZCL_TIER2_BLOCK6_PRICE_ATTRIBUTE_ID (0x0425)
+#define ZCL_TIER2_BLOCK7_PRICE_ATTRIBUTE_ID (0x0426)
+#define ZCL_TIER2_BLOCK8_PRICE_ATTRIBUTE_ID (0x0427)
+#define ZCL_TIER2_BLOCK9_PRICE_ATTRIBUTE_ID (0x0428)
+#define ZCL_TIER2_BLOCK10_PRICE_ATTRIBUTE_ID (0x0429)
+#define ZCL_TIER2_BLOCK11_PRICE_ATTRIBUTE_ID (0x042A)
+#define ZCL_TIER2_BLOCK12_PRICE_ATTRIBUTE_ID (0x042B)
+#define ZCL_TIER2_BLOCK13_PRICE_ATTRIBUTE_ID (0x042C)
+#define ZCL_TIER2_BLOCK14_PRICE_ATTRIBUTE_ID (0x042D)
+#define ZCL_TIER2_BLOCK15_PRICE_ATTRIBUTE_ID (0x042E)
+#define ZCL_TIER2_BLOCK16_PRICE_ATTRIBUTE_ID (0x042F)
+#define ZCL_TIER3_BLOCK1_PRICE_ATTRIBUTE_ID (0x0430)
+#define ZCL_TIER3_BLOCK2_PRICE_ATTRIBUTE_ID (0x0431)
+#define ZCL_TIER3_BLOCK3_PRICE_ATTRIBUTE_ID (0x0432)
+#define ZCL_TIER3_BLOCK4_PRICE_ATTRIBUTE_ID (0x0433)
+#define ZCL_TIER3_BLOCK5_PRICE_ATTRIBUTE_ID (0x0434)
+#define ZCL_TIER3_BLOCK6_PRICE_ATTRIBUTE_ID (0x0435)
+#define ZCL_TIER3_BLOCK7_PRICE_ATTRIBUTE_ID (0x0436)
+#define ZCL_TIER3_BLOCK8_PRICE_ATTRIBUTE_ID (0x0437)
+#define ZCL_TIER3_BLOCK9_PRICE_ATTRIBUTE_ID (0x0438)
+#define ZCL_TIER3_BLOCK10_PRICE_ATTRIBUTE_ID (0x0439)
+#define ZCL_TIER3_BLOCK11_PRICE_ATTRIBUTE_ID (0x043A)
+#define ZCL_TIER3_BLOCK12_PRICE_ATTRIBUTE_ID (0x043B)
+#define ZCL_TIER3_BLOCK13_PRICE_ATTRIBUTE_ID (0x043C)
+#define ZCL_TIER3_BLOCK14_PRICE_ATTRIBUTE_ID (0x043D)
+#define ZCL_TIER3_BLOCK15_PRICE_ATTRIBUTE_ID (0x043E)
+#define ZCL_TIER3_BLOCK16_PRICE_ATTRIBUTE_ID (0x043F)
+#define ZCL_TIER4_BLOCK1_PRICE_ATTRIBUTE_ID (0x0440)
+#define ZCL_TIER4_BLOCK2_PRICE_ATTRIBUTE_ID (0x0441)
+#define ZCL_TIER4_BLOCK3_PRICE_ATTRIBUTE_ID (0x0442)
+#define ZCL_TIER4_BLOCK4_PRICE_ATTRIBUTE_ID (0x0443)
+#define ZCL_TIER4_BLOCK5_PRICE_ATTRIBUTE_ID (0x0444)
+#define ZCL_TIER4_BLOCK6_PRICE_ATTRIBUTE_ID (0x0445)
+#define ZCL_TIER4_BLOCK7_PRICE_ATTRIBUTE_ID (0x0446)
+#define ZCL_TIER4_BLOCK8_PRICE_ATTRIBUTE_ID (0x0447)
+#define ZCL_TIER4_BLOCK9_PRICE_ATTRIBUTE_ID (0x0448)
+#define ZCL_TIER4_BLOCK10_PRICE_ATTRIBUTE_ID (0x0449)
+#define ZCL_TIER4_BLOCK11_PRICE_ATTRIBUTE_ID (0x044A)
+#define ZCL_TIER4_BLOCK12_PRICE_ATTRIBUTE_ID (0x044B)
+#define ZCL_TIER4_BLOCK13_PRICE_ATTRIBUTE_ID (0x044C)
+#define ZCL_TIER4_BLOCK14_PRICE_ATTRIBUTE_ID (0x044D)
+#define ZCL_TIER4_BLOCK15_PRICE_ATTRIBUTE_ID (0x044E)
+#define ZCL_TIER4_BLOCK16_PRICE_ATTRIBUTE_ID (0x044F)
+#define ZCL_TIER5_BLOCK1_PRICE_ATTRIBUTE_ID (0x0450)
+#define ZCL_TIER5_BLOCK2_PRICE_ATTRIBUTE_ID (0x0451)
+#define ZCL_TIER5_BLOCK3_PRICE_ATTRIBUTE_ID (0x0452)
+#define ZCL_TIER5_BLOCK4_PRICE_ATTRIBUTE_ID (0x0453)
+#define ZCL_TIER5_BLOCK5_PRICE_ATTRIBUTE_ID (0x0454)
+#define ZCL_TIER5_BLOCK6_PRICE_ATTRIBUTE_ID (0x0455)
+#define ZCL_TIER5_BLOCK7_PRICE_ATTRIBUTE_ID (0x0456)
+#define ZCL_TIER5_BLOCK8_PRICE_ATTRIBUTE_ID (0x0457)
+#define ZCL_TIER5_BLOCK9_PRICE_ATTRIBUTE_ID (0x0458)
+#define ZCL_TIER5_BLOCK10_PRICE_ATTRIBUTE_ID (0x0459)
+#define ZCL_TIER5_BLOCK11_PRICE_ATTRIBUTE_ID (0x045A)
+#define ZCL_TIER5_BLOCK12_PRICE_ATTRIBUTE_ID (0x045B)
+#define ZCL_TIER5_BLOCK13_PRICE_ATTRIBUTE_ID (0x045C)
+#define ZCL_TIER5_BLOCK14_PRICE_ATTRIBUTE_ID (0x045D)
+#define ZCL_TIER5_BLOCK15_PRICE_ATTRIBUTE_ID (0x045E)
+#define ZCL_TIER5_BLOCK16_PRICE_ATTRIBUTE_ID (0x045F)
+#define ZCL_TIER6_BLOCK1_PRICE_ATTRIBUTE_ID (0x0460)
+#define ZCL_TIER6_BLOCK2_PRICE_ATTRIBUTE_ID (0x0461)
+#define ZCL_TIER6_BLOCK3_PRICE_ATTRIBUTE_ID (0x0462)
+#define ZCL_TIER6_BLOCK4_PRICE_ATTRIBUTE_ID (0x0463)
+#define ZCL_TIER6_BLOCK5_PRICE_ATTRIBUTE_ID (0x0464)
+#define ZCL_TIER6_BLOCK6_PRICE_ATTRIBUTE_ID (0x0465)
+#define ZCL_TIER6_BLOCK7_PRICE_ATTRIBUTE_ID (0x0466)
+#define ZCL_TIER6_BLOCK8_PRICE_ATTRIBUTE_ID (0x0467)
+#define ZCL_TIER6_BLOCK9_PRICE_ATTRIBUTE_ID (0x0468)
+#define ZCL_TIER6_BLOCK10_PRICE_ATTRIBUTE_ID (0x0469)
+#define ZCL_TIER6_BLOCK11_PRICE_ATTRIBUTE_ID (0x046A)
+#define ZCL_TIER6_BLOCK12_PRICE_ATTRIBUTE_ID (0x046B)
+#define ZCL_TIER6_BLOCK13_PRICE_ATTRIBUTE_ID (0x046C)
+#define ZCL_TIER6_BLOCK14_PRICE_ATTRIBUTE_ID (0x046D)
+#define ZCL_TIER6_BLOCK15_PRICE_ATTRIBUTE_ID (0x046E)
+#define ZCL_TIER6_BLOCK16_PRICE_ATTRIBUTE_ID (0x046F)
+#define ZCL_TIER7_BLOCK1_PRICE_ATTRIBUTE_ID (0x0470)
+#define ZCL_TIER7_BLOCK2_PRICE_ATTRIBUTE_ID (0x0471)
+#define ZCL_TIER7_BLOCK3_PRICE_ATTRIBUTE_ID (0x0472)
+#define ZCL_TIER7_BLOCK4_PRICE_ATTRIBUTE_ID (0x0473)
+#define ZCL_TIER7_BLOCK5_PRICE_ATTRIBUTE_ID (0x0474)
+#define ZCL_TIER7_BLOCK6_PRICE_ATTRIBUTE_ID (0x0475)
+#define ZCL_TIER7_BLOCK7_PRICE_ATTRIBUTE_ID (0x0476)
+#define ZCL_TIER7_BLOCK8_PRICE_ATTRIBUTE_ID (0x0477)
+#define ZCL_TIER7_BLOCK9_PRICE_ATTRIBUTE_ID (0x0478)
+#define ZCL_TIER7_BLOCK10_PRICE_ATTRIBUTE_ID (0x0479)
+#define ZCL_TIER7_BLOCK11_PRICE_ATTRIBUTE_ID (0x047A)
+#define ZCL_TIER7_BLOCK12_PRICE_ATTRIBUTE_ID (0x047B)
+#define ZCL_TIER7_BLOCK13_PRICE_ATTRIBUTE_ID (0x047C)
+#define ZCL_TIER7_BLOCK14_PRICE_ATTRIBUTE_ID (0x047D)
+#define ZCL_TIER7_BLOCK15_PRICE_ATTRIBUTE_ID (0x047E)
+#define ZCL_TIER7_BLOCK16_PRICE_ATTRIBUTE_ID (0x047F)
+#define ZCL_TIER8_BLOCK1_PRICE_ATTRIBUTE_ID (0x0480)
+#define ZCL_TIER8_BLOCK2_PRICE_ATTRIBUTE_ID (0x0481)
+#define ZCL_TIER8_BLOCK3_PRICE_ATTRIBUTE_ID (0x0482)
+#define ZCL_TIER8_BLOCK4_PRICE_ATTRIBUTE_ID (0x0483)
+#define ZCL_TIER8_BLOCK5_PRICE_ATTRIBUTE_ID (0x0484)
+#define ZCL_TIER8_BLOCK6_PRICE_ATTRIBUTE_ID (0x0485)
+#define ZCL_TIER8_BLOCK7_PRICE_ATTRIBUTE_ID (0x0486)
+#define ZCL_TIER8_BLOCK8_PRICE_ATTRIBUTE_ID (0x0487)
+#define ZCL_TIER8_BLOCK9_PRICE_ATTRIBUTE_ID (0x0488)
+#define ZCL_TIER8_BLOCK10_PRICE_ATTRIBUTE_ID (0x0489)
+#define ZCL_TIER8_BLOCK11_PRICE_ATTRIBUTE_ID (0x048A)
+#define ZCL_TIER8_BLOCK12_PRICE_ATTRIBUTE_ID (0x048B)
+#define ZCL_TIER8_BLOCK13_PRICE_ATTRIBUTE_ID (0x048C)
+#define ZCL_TIER8_BLOCK14_PRICE_ATTRIBUTE_ID (0x048D)
+#define ZCL_TIER8_BLOCK15_PRICE_ATTRIBUTE_ID (0x048E)
+#define ZCL_TIER8_BLOCK16_PRICE_ATTRIBUTE_ID (0x048F)
+#define ZCL_TIER9_BLOCK1_PRICE_ATTRIBUTE_ID (0x0490)
+#define ZCL_TIER9_BLOCK2_PRICE_ATTRIBUTE_ID (0x0491)
+#define ZCL_TIER9_BLOCK3_PRICE_ATTRIBUTE_ID (0x0492)
+#define ZCL_TIER9_BLOCK4_PRICE_ATTRIBUTE_ID (0x0493)
+#define ZCL_TIER9_BLOCK5_PRICE_ATTRIBUTE_ID (0x0494)
+#define ZCL_TIER9_BLOCK6_PRICE_ATTRIBUTE_ID (0x0495)
+#define ZCL_TIER9_BLOCK7_PRICE_ATTRIBUTE_ID (0x0496)
+#define ZCL_TIER9_BLOCK8_PRICE_ATTRIBUTE_ID (0x0497)
+#define ZCL_TIER9_BLOCK9_PRICE_ATTRIBUTE_ID (0x0498)
+#define ZCL_TIER9_BLOCK10_PRICE_ATTRIBUTE_ID (0x0499)
+#define ZCL_TIER9_BLOCK11_PRICE_ATTRIBUTE_ID (0x049A)
+#define ZCL_TIER9_BLOCK12_PRICE_ATTRIBUTE_ID (0x049B)
+#define ZCL_TIER9_BLOCK13_PRICE_ATTRIBUTE_ID (0x049C)
+#define ZCL_TIER9_BLOCK14_PRICE_ATTRIBUTE_ID (0x049D)
+#define ZCL_TIER9_BLOCK15_PRICE_ATTRIBUTE_ID (0x049E)
+#define ZCL_TIER9_BLOCK16_PRICE_ATTRIBUTE_ID (0x049F)
+#define ZCL_TIER10_BLOCK1_PRICE_ATTRIBUTE_ID (0x04A0)
+#define ZCL_TIER10_BLOCK2_PRICE_ATTRIBUTE_ID (0x04A1)
+#define ZCL_TIER10_BLOCK3_PRICE_ATTRIBUTE_ID (0x04A2)
+#define ZCL_TIER10_BLOCK4_PRICE_ATTRIBUTE_ID (0x04A3)
+#define ZCL_TIER10_BLOCK5_PRICE_ATTRIBUTE_ID (0x04A4)
+#define ZCL_TIER10_BLOCK6_PRICE_ATTRIBUTE_ID (0x04A5)
+#define ZCL_TIER10_BLOCK7_PRICE_ATTRIBUTE_ID (0x04A6)
+#define ZCL_TIER10_BLOCK8_PRICE_ATTRIBUTE_ID (0x04A7)
+#define ZCL_TIER10_BLOCK9_PRICE_ATTRIBUTE_ID (0x04A8)
+#define ZCL_TIER10_BLOCK10_PRICE_ATTRIBUTE_ID (0x04A9)
+#define ZCL_TIER10_BLOCK11_PRICE_ATTRIBUTE_ID (0x04AA)
+#define ZCL_TIER10_BLOCK12_PRICE_ATTRIBUTE_ID (0x04AB)
+#define ZCL_TIER10_BLOCK13_PRICE_ATTRIBUTE_ID (0x04AC)
+#define ZCL_TIER10_BLOCK14_PRICE_ATTRIBUTE_ID (0x04AD)
+#define ZCL_TIER10_BLOCK15_PRICE_ATTRIBUTE_ID (0x04AE)
+#define ZCL_TIER10_BLOCK16_PRICE_ATTRIBUTE_ID (0x04AF)
+#define ZCL_TIER11_BLOCK1_PRICE_ATTRIBUTE_ID (0x04B0)
+#define ZCL_TIER11_BLOCK2_PRICE_ATTRIBUTE_ID (0x04B1)
+#define ZCL_TIER11_BLOCK3_PRICE_ATTRIBUTE_ID (0x04B2)
+#define ZCL_TIER11_BLOCK4_PRICE_ATTRIBUTE_ID (0x04B3)
+#define ZCL_TIER11_BLOCK5_PRICE_ATTRIBUTE_ID (0x04B4)
+#define ZCL_TIER11_BLOCK6_PRICE_ATTRIBUTE_ID (0x04B5)
+#define ZCL_TIER11_BLOCK7_PRICE_ATTRIBUTE_ID (0x04B6)
+#define ZCL_TIER11_BLOCK8_PRICE_ATTRIBUTE_ID (0x04B7)
+#define ZCL_TIER11_BLOCK9_PRICE_ATTRIBUTE_ID (0x04B8)
+#define ZCL_TIER11_BLOCK10_PRICE_ATTRIBUTE_ID (0x04B9)
+#define ZCL_TIER11_BLOCK11_PRICE_ATTRIBUTE_ID (0x04BA)
+#define ZCL_TIER11_BLOCK12_PRICE_ATTRIBUTE_ID (0x04BB)
+#define ZCL_TIER11_BLOCK13_PRICE_ATTRIBUTE_ID (0x04BC)
+#define ZCL_TIER11_BLOCK14_PRICE_ATTRIBUTE_ID (0x04BD)
+#define ZCL_TIER11_BLOCK15_PRICE_ATTRIBUTE_ID (0x04BE)
+#define ZCL_TIER11_BLOCK16_PRICE_ATTRIBUTE_ID (0x04BF)
+#define ZCL_TIER12_BLOCK1_PRICE_ATTRIBUTE_ID (0x04C0)
+#define ZCL_TIER12_BLOCK2_PRICE_ATTRIBUTE_ID (0x04C1)
+#define ZCL_TIER12_BLOCK3_PRICE_ATTRIBUTE_ID (0x04C2)
+#define ZCL_TIER12_BLOCK4_PRICE_ATTRIBUTE_ID (0x04C3)
+#define ZCL_TIER12_BLOCK5_PRICE_ATTRIBUTE_ID (0x04C4)
+#define ZCL_TIER12_BLOCK6_PRICE_ATTRIBUTE_ID (0x04C5)
+#define ZCL_TIER12_BLOCK7_PRICE_ATTRIBUTE_ID (0x04C6)
+#define ZCL_TIER12_BLOCK8_PRICE_ATTRIBUTE_ID (0x04C7)
+#define ZCL_TIER12_BLOCK9_PRICE_ATTRIBUTE_ID (0x04C8)
+#define ZCL_TIER12_BLOCK10_PRICE_ATTRIBUTE_ID (0x04C9)
+#define ZCL_TIER12_BLOCK11_PRICE_ATTRIBUTE_ID (0x04CA)
+#define ZCL_TIER12_BLOCK12_PRICE_ATTRIBUTE_ID (0x04CB)
+#define ZCL_TIER12_BLOCK13_PRICE_ATTRIBUTE_ID (0x04CC)
+#define ZCL_TIER12_BLOCK14_PRICE_ATTRIBUTE_ID (0x04CD)
+#define ZCL_TIER12_BLOCK15_PRICE_ATTRIBUTE_ID (0x04CE)
+#define ZCL_TIER12_BLOCK16_PRICE_ATTRIBUTE_ID (0x04CF)
+#define ZCL_TIER13_BLOCK1_PRICE_ATTRIBUTE_ID (0x04D0)
+#define ZCL_TIER13_BLOCK2_PRICE_ATTRIBUTE_ID (0x04D1)
+#define ZCL_TIER13_BLOCK3_PRICE_ATTRIBUTE_ID (0x04D2)
+#define ZCL_TIER13_BLOCK4_PRICE_ATTRIBUTE_ID (0x04D3)
+#define ZCL_TIER13_BLOCK5_PRICE_ATTRIBUTE_ID (0x04D4)
+#define ZCL_TIER13_BLOCK6_PRICE_ATTRIBUTE_ID (0x04D5)
+#define ZCL_TIER13_BLOCK7_PRICE_ATTRIBUTE_ID (0x04D6)
+#define ZCL_TIER13_BLOCK8_PRICE_ATTRIBUTE_ID (0x04D7)
+#define ZCL_TIER13_BLOCK9_PRICE_ATTRIBUTE_ID (0x04D8)
+#define ZCL_TIER13_BLOCK10_PRICE_ATTRIBUTE_ID (0x04D9)
+#define ZCL_TIER13_BLOCK11_PRICE_ATTRIBUTE_ID (0x04DA)
+#define ZCL_TIER13_BLOCK12_PRICE_ATTRIBUTE_ID (0x04DB)
+#define ZCL_TIER13_BLOCK13_PRICE_ATTRIBUTE_ID (0x04DC)
+#define ZCL_TIER13_BLOCK14_PRICE_ATTRIBUTE_ID (0x04DD)
+#define ZCL_TIER13_BLOCK15_PRICE_ATTRIBUTE_ID (0x04DE)
+#define ZCL_TIER13_BLOCK16_PRICE_ATTRIBUTE_ID (0x04DF)
+#define ZCL_TIER14_BLOCK1_PRICE_ATTRIBUTE_ID (0x04E0)
+#define ZCL_TIER14_BLOCK2_PRICE_ATTRIBUTE_ID (0x04E1)
+#define ZCL_TIER14_BLOCK3_PRICE_ATTRIBUTE_ID (0x04E2)
+#define ZCL_TIER14_BLOCK4_PRICE_ATTRIBUTE_ID (0x04E3)
+#define ZCL_TIER14_BLOCK5_PRICE_ATTRIBUTE_ID (0x04E4)
+#define ZCL_TIER14_BLOCK6_PRICE_ATTRIBUTE_ID (0x04E5)
+#define ZCL_TIER14_BLOCK7_PRICE_ATTRIBUTE_ID (0x04E6)
+#define ZCL_TIER14_BLOCK8_PRICE_ATTRIBUTE_ID (0x04E7)
+#define ZCL_TIER14_BLOCK9_PRICE_ATTRIBUTE_ID (0x04E8)
+#define ZCL_TIER14_BLOCK10_PRICE_ATTRIBUTE_ID (0x04E9)
+#define ZCL_TIER14_BLOCK11_PRICE_ATTRIBUTE_ID (0x04EA)
+#define ZCL_TIER14_BLOCK12_PRICE_ATTRIBUTE_ID (0x04EB)
+#define ZCL_TIER14_BLOCK13_PRICE_ATTRIBUTE_ID (0x04EC)
+#define ZCL_TIER14_BLOCK14_PRICE_ATTRIBUTE_ID (0x04ED)
+#define ZCL_TIER14_BLOCK15_PRICE_ATTRIBUTE_ID (0x04EE)
+#define ZCL_TIER14_BLOCK16_PRICE_ATTRIBUTE_ID (0x04EF)
+#define ZCL_TIER15_BLOCK1_PRICE_ATTRIBUTE_ID (0x04F0)
+#define ZCL_TIER15_BLOCK2_PRICE_ATTRIBUTE_ID (0x04F1)
+#define ZCL_TIER15_BLOCK3_PRICE_ATTRIBUTE_ID (0x04F2)
+#define ZCL_TIER15_BLOCK4_PRICE_ATTRIBUTE_ID (0x04F3)
+#define ZCL_TIER15_BLOCK5_PRICE_ATTRIBUTE_ID (0x04F4)
+#define ZCL_TIER15_BLOCK6_PRICE_ATTRIBUTE_ID (0x04F5)
+#define ZCL_TIER15_BLOCK7_PRICE_ATTRIBUTE_ID (0x04F6)
+#define ZCL_TIER15_BLOCK8_PRICE_ATTRIBUTE_ID (0x04F7)
+#define ZCL_TIER15_BLOCK9_PRICE_ATTRIBUTE_ID (0x04F8)
+#define ZCL_TIER15_BLOCK10_PRICE_ATTRIBUTE_ID (0x04F9)
+#define ZCL_TIER15_BLOCK11_PRICE_ATTRIBUTE_ID (0x04FA)
+#define ZCL_TIER15_BLOCK12_PRICE_ATTRIBUTE_ID (0x04FB)
+#define ZCL_TIER15_BLOCK13_PRICE_ATTRIBUTE_ID (0x04FC)
+#define ZCL_TIER15_BLOCK14_PRICE_ATTRIBUTE_ID (0x04FD)
+#define ZCL_TIER15_BLOCK15_PRICE_ATTRIBUTE_ID (0x04FE)
+#define ZCL_TIER15_BLOCK16_PRICE_ATTRIBUTE_ID (0x04FF)
+#define ZCL_PRICE_TIER16_ATTRIBUTE_ID (0x050F)
+#define ZCL_PRICE_TIER17_ATTRIBUTE_ID (0x0510)
+#define ZCL_PRICE_TIER18_ATTRIBUTE_ID (0x0511)
+#define ZCL_PRICE_TIER19_ATTRIBUTE_ID (0x0512)
+#define ZCL_PRICE_TIER20_ATTRIBUTE_ID (0x0513)
+#define ZCL_PRICE_TIER21_ATTRIBUTE_ID (0x0514)
+#define ZCL_PRICE_TIER22_ATTRIBUTE_ID (0x0515)
+#define ZCL_PRICE_TIER23_ATTRIBUTE_ID (0x0516)
+#define ZCL_PRICE_TIER24_ATTRIBUTE_ID (0x0517)
+#define ZCL_PRICE_TIER25_ATTRIBUTE_ID (0x0518)
+#define ZCL_PRICE_TIER26_ATTRIBUTE_ID (0x0519)
+#define ZCL_PRICE_TIER27_ATTRIBUTE_ID (0x051A)
+#define ZCL_PRICE_TIER28_ATTRIBUTE_ID (0x051B)
+#define ZCL_PRICE_TIER29_ATTRIBUTE_ID (0x051C)
+#define ZCL_PRICE_TIER30_ATTRIBUTE_ID (0x051D)
+#define ZCL_PRICE_TIER31_ATTRIBUTE_ID (0x051E)
+#define ZCL_PRICE_TIER32_ATTRIBUTE_ID (0x051F)
+#define ZCL_PRICE_TIER33_ATTRIBUTE_ID (0x0520)
+#define ZCL_PRICE_TIER34_ATTRIBUTE_ID (0x0521)
+#define ZCL_PRICE_TIER35_ATTRIBUTE_ID (0x0522)
+#define ZCL_PRICE_TIER36_ATTRIBUTE_ID (0x0523)
+#define ZCL_PRICE_TIER37_ATTRIBUTE_ID (0x0524)
+#define ZCL_PRICE_TIER38_ATTRIBUTE_ID (0x0525)
+#define ZCL_PRICE_TIER39_ATTRIBUTE_ID (0x0526)
+#define ZCL_PRICE_TIER40_ATTRIBUTE_ID (0x0527)
+#define ZCL_PRICE_TIER41_ATTRIBUTE_ID (0x0528)
+#define ZCL_PRICE_TIER42_ATTRIBUTE_ID (0x0529)
+#define ZCL_PRICE_TIER43_ATTRIBUTE_ID (0x052A)
+#define ZCL_PRICE_TIER44_ATTRIBUTE_ID (0x052B)
+#define ZCL_PRICE_TIER45_ATTRIBUTE_ID (0x052C)
+#define ZCL_PRICE_TIER46_ATTRIBUTE_ID (0x052D)
+#define ZCL_PRICE_TIER47_ATTRIBUTE_ID (0x052E)
+#define ZCL_PRICE_TIER48_ATTRIBUTE_ID (0x052F)
+#define ZCL_CPP1_PRICE_ATTRIBUTE_ID (0x05FE)
+#define ZCL_CPP2_PRICE_ATTRIBUTE_ID (0x05FF)
+#define ZCL_TARIFF_LABEL_ATTRIBUTE_ID (0x0610)
+#define ZCL_NUMBER_OF_PRICE_TIERS_IN_USE_ATTRIBUTE_ID (0x0611)
+#define ZCL_NUMBER_OF_BLOCK_THRESHOLDS_IN_USE_ATTRIBUTE_ID (0x0612)
+#define ZCL_TIER_BLOCK_MODE_ATTRIBUTE_ID (0x0613)
+#define ZCL_TARIFF_UNIT_OF_MEASURE_ATTRIBUTE_ID (0x0615)
+#define ZCL_TARIFF_CURRENCY_ATTRIBUTE_ID (0x0616)
+#define ZCL_TARIFF_PRICE_TRAILING_DIGIT_ATTRIBUTE_ID (0x0617)
+#define ZCL_TARIFF_RESOLUTION_PERIOD_ATTRIBUTE_ID (0x0619)
+#define ZCL_TARIFF_CO2_ATTRIBUTE_ID (0x0620)
+#define ZCL_TARIFF_CO2_UNIT_ATTRIBUTE_ID (0x0621)
+#define ZCL_TARIFF_CO2_TRAILING_DIGIT_ATTRIBUTE_ID (0x0622)
+#define ZCL_CURRENT_BILLING_PERIOD_START_ATTRIBUTE_ID (0x0700)
+#define ZCL_CURRENT_BILLING_PERIOD_DURATION_ATTRIBUTE_ID (0x0701)
+#define ZCL_LAST_BILLING_PERIOD_START_ATTRIBUTE_ID (0x0702)
+#define ZCL_LAST_BILLING_PERIOD_DURATION_ATTRIBUTE_ID (0x0703)
+#define ZCL_LAST_BILLING_PERIOD_CONSOLIDATED_BILL_ATTRIBUTE_ID (0x0704)
+#define ZCL_CREDIT_PAYMENT_DUE_DATE_ATTRIBUTE_ID (0x0800)
+#define ZCL_CREDIT_PAYMENT_STATUS_ATTRIBUTE_ID (0x0801)
+#define ZCL_CREDIT_PAYMENT_OVER_DUE_AMOUNT_ATTRIBUTE_ID (0x0802)
+#define ZCL_PAYMENT_DISCOUNT_ATTRIBUTE_ID (0x080A)
+#define ZCL_PAYMENT_DISCOUNT_PERIOD_ATTRIBUTE_ID (0x080B)
+#define ZCL_CREDIT_PAYMENT_1_ATTRIBUTE_ID (0x0810)
+#define ZCL_CREDIT_PAYMENT_DATE_1_ATTRIBUTE_ID (0x0811)
+#define ZCL_CREDIT_PAYMENT_REF_1_ATTRIBUTE_ID (0x0812)
+#define ZCL_CREDIT_PAYMENT_2_ATTRIBUTE_ID (0x0820)
+#define ZCL_CREDIT_PAYMENT_DATE_2_ATTRIBUTE_ID (0x0821)
+#define ZCL_CREDIT_PAYMENT_REF_2_ATTRIBUTE_ID (0x0822)
+#define ZCL_CREDIT_PAYMENT_3_ATTRIBUTE_ID (0x0830)
+#define ZCL_CREDIT_PAYMENT_DATE_3_ATTRIBUTE_ID (0x0831)
+#define ZCL_CREDIT_PAYMENT_REF_3_ATTRIBUTE_ID (0x0832)
+#define ZCL_CREDIT_PAYMENT_4_ATTRIBUTE_ID (0x0840)
+#define ZCL_CREDIT_PAYMENT_DATE_4_ATTRIBUTE_ID (0x0841)
+#define ZCL_CREDIT_PAYMENT_REF_4_ATTRIBUTE_ID (0x0842)
+#define ZCL_CREDIT_PAYMENT_5_ATTRIBUTE_ID (0x0850)
+#define ZCL_CREDIT_PAYMENT_DATE_5_ATTRIBUTE_ID (0x0851)
+#define ZCL_CREDIT_PAYMENT_REF_5_ATTRIBUTE_ID (0x0852)
+#define ZCL_RX_TIER1_PRICE_LABEL_ATTRIBUTE_ID (0x8000)
+#define ZCL_RX_TIER2_PRICE_LABEL_ATTRIBUTE_ID (0x8001)
+#define ZCL_RX_TIER3_PRICE_LABEL_ATTRIBUTE_ID (0x8002)
+#define ZCL_RX_TIER4_PRICE_LABEL_ATTRIBUTE_ID (0x8003)
+#define ZCL_RX_TIER5_PRICE_LABEL_ATTRIBUTE_ID (0x8004)
+#define ZCL_RX_TIER6_PRICE_LABEL_ATTRIBUTE_ID (0x8005)
+#define ZCL_RX_TIER7_PRICE_LABEL_ATTRIBUTE_ID (0x8006)
+#define ZCL_RX_TIER8_PRICE_LABEL_ATTRIBUTE_ID (0x8007)
+#define ZCL_RX_TIER9_PRICE_LABEL_ATTRIBUTE_ID (0x8008)
+#define ZCL_RX_TIER10_PRICE_LABEL_ATTRIBUTE_ID (0x8009)
+#define ZCL_RX_TIER11_PRICE_LABEL_ATTRIBUTE_ID (0x800A)
+#define ZCL_RX_TIER12_PRICE_LABEL_ATTRIBUTE_ID (0x800B)
+#define ZCL_RX_TIER13_PRICE_LABEL_ATTRIBUTE_ID (0x800C)
+#define ZCL_RX_TIER14_PRICE_LABEL_ATTRIBUTE_ID (0x800D)
+#define ZCL_RX_TIER15_PRICE_LABEL_ATTRIBUTE_ID (0x800E)
+#define ZCL_RX_TIER16_PRICE_LABEL_ATTRIBUTE_ID (0x800F)
+#define ZCL_RX_TIER17_PRICE_LABEL_ATTRIBUTE_ID (0x8010)
+#define ZCL_RX_TIER18_PRICE_LABEL_ATTRIBUTE_ID (0x8011)
+#define ZCL_RX_TIER19_PRICE_LABEL_ATTRIBUTE_ID (0x8012)
+#define ZCL_RX_TIER20_PRICE_LABEL_ATTRIBUTE_ID (0x8013)
+#define ZCL_RX_TIER21_PRICE_LABEL_ATTRIBUTE_ID (0x8014)
+#define ZCL_RX_TIER22_PRICE_LABEL_ATTRIBUTE_ID (0x8015)
+#define ZCL_RX_TIER23_PRICE_LABEL_ATTRIBUTE_ID (0x8016)
+#define ZCL_RX_TIER24_PRICE_LABEL_ATTRIBUTE_ID (0x8017)
+#define ZCL_RX_TIER25_PRICE_LABEL_ATTRIBUTE_ID (0x8018)
+#define ZCL_RX_TIER26_PRICE_LABEL_ATTRIBUTE_ID (0x8019)
+#define ZCL_RX_TIER27_PRICE_LABEL_ATTRIBUTE_ID (0x801A)
+#define ZCL_RX_TIER28_PRICE_LABEL_ATTRIBUTE_ID (0x801B)
+#define ZCL_RX_TIER29_PRICE_LABEL_ATTRIBUTE_ID (0x801C)
+#define ZCL_RX_TIER30_PRICE_LABEL_ATTRIBUTE_ID (0x801D)
+#define ZCL_RX_TIER31_PRICE_LABEL_ATTRIBUTE_ID (0x801E)
+#define ZCL_RX_TIER32_PRICE_LABEL_ATTRIBUTE_ID (0x801F)
+#define ZCL_RX_TIER33_PRICE_LABEL_ATTRIBUTE_ID (0x8020)
+#define ZCL_RX_TIER34_PRICE_LABEL_ATTRIBUTE_ID (0x8021)
+#define ZCL_RX_TIER35_PRICE_LABEL_ATTRIBUTE_ID (0x8022)
+#define ZCL_RX_TIER36_PRICE_LABEL_ATTRIBUTE_ID (0x8023)
+#define ZCL_RX_TIER37_PRICE_LABEL_ATTRIBUTE_ID (0x8024)
+#define ZCL_RX_TIER38_PRICE_LABEL_ATTRIBUTE_ID (0x8025)
+#define ZCL_RX_TIER39_PRICE_LABEL_ATTRIBUTE_ID (0x8026)
+#define ZCL_RX_TIER40_PRICE_LABEL_ATTRIBUTE_ID (0x8027)
+#define ZCL_RX_TIER41_PRICE_LABEL_ATTRIBUTE_ID (0x8028)
+#define ZCL_RX_TIER42_PRICE_LABEL_ATTRIBUTE_ID (0x8029)
+#define ZCL_RX_TIER43_PRICE_LABEL_ATTRIBUTE_ID (0x802A)
+#define ZCL_RX_TIER44_PRICE_LABEL_ATTRIBUTE_ID (0x802B)
+#define ZCL_RX_TIER45_PRICE_LABEL_ATTRIBUTE_ID (0x802C)
+#define ZCL_RX_TIER46_PRICE_LABEL_ATTRIBUTE_ID (0x802D)
+#define ZCL_RX_TIER47_PRICE_LABEL_ATTRIBUTE_ID (0x802E)
+#define ZCL_RX_TIER48_PRICE_LABEL_ATTRIBUTE_ID (0x802F)
+#define ZCL_RX_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x8100)
+#define ZCL_RX_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x8101)
+#define ZCL_RX_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x8102)
+#define ZCL_RX_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x8103)
+#define ZCL_RX_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x8104)
+#define ZCL_RX_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x8105)
+#define ZCL_RX_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x8106)
+#define ZCL_RX_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x8107)
+#define ZCL_RX_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x8108)
+#define ZCL_RX_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x8109)
+#define ZCL_RX_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x810A)
+#define ZCL_RX_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x810B)
+#define ZCL_RX_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x810C)
+#define ZCL_RX_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x810D)
+#define ZCL_RX_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x810E)
+#define ZCL_RX_START_OF_BLOCK_PERIOD_ATTRIBUTE_ID (0x8200)
+#define ZCL_RX_BLOCK_PERIOD_DURATION_ATTRIBUTE_ID (0x8201)
+#define ZCL_RX_THRESHOLD_MULTIPLIER_ATTRIBUTE_ID (0x8202)
+#define ZCL_RX_THRESHOLD_DIVISOR_ATTRIBUTE_ID (0x8203)
+#define ZCL_RX_NO_TIER_BLOCK1_PRICE_ATTRIBUTE_ID (0x8400)
+#define ZCL_RX_NO_TIER_BLOCK2_PRICE_ATTRIBUTE_ID (0x8401)
+#define ZCL_RX_NO_TIER_BLOCK3_PRICE_ATTRIBUTE_ID (0x8402)
+#define ZCL_RX_NO_TIER_BLOCK4_PRICE_ATTRIBUTE_ID (0x8403)
+#define ZCL_RX_NO_TIER_BLOCK5_PRICE_ATTRIBUTE_ID (0x8404)
+#define ZCL_RX_NO_TIER_BLOCK6_PRICE_ATTRIBUTE_ID (0x8405)
+#define ZCL_RX_NO_TIER_BLOCK7_PRICE_ATTRIBUTE_ID (0x8406)
+#define ZCL_RX_NO_TIER_BLOCK8_PRICE_ATTRIBUTE_ID (0x8407)
+#define ZCL_RX_NO_TIER_BLOCK9_PRICE_ATTRIBUTE_ID (0x8408)
+#define ZCL_RX_NO_TIER_BLOCK10_PRICE_ATTRIBUTE_ID (0x8409)
+#define ZCL_RX_NO_TIER_BLOCK11_PRICE_ATTRIBUTE_ID (0x840A)
+#define ZCL_RX_NO_TIER_BLOCK12_PRICE_ATTRIBUTE_ID (0x840B)
+#define ZCL_RX_NO_TIER_BLOCK13_PRICE_ATTRIBUTE_ID (0x840C)
+#define ZCL_RX_NO_TIER_BLOCK14_PRICE_ATTRIBUTE_ID (0x840D)
+#define ZCL_RX_NO_TIER_BLOCK15_PRICE_ATTRIBUTE_ID (0x840E)
+#define ZCL_RX_NO_TIER_BLOCK16_PRICE_ATTRIBUTE_ID (0x840F)
+#define ZCL_RX_TIER1_BLOCK1_PRICE_ATTRIBUTE_ID (0x8410)
+#define ZCL_RX_TIER1_BLOCK2_PRICE_ATTRIBUTE_ID (0x8411)
+#define ZCL_RX_TIER1_BLOCK3_PRICE_ATTRIBUTE_ID (0x8412)
+#define ZCL_RX_TIER1_BLOCK4_PRICE_ATTRIBUTE_ID (0x8413)
+#define ZCL_RX_TIER1_BLOCK5_PRICE_ATTRIBUTE_ID (0x8414)
+#define ZCL_RX_TIER1_BLOCK6_PRICE_ATTRIBUTE_ID (0x8415)
+#define ZCL_RX_TIER1_BLOCK7_PRICE_ATTRIBUTE_ID (0x8416)
+#define ZCL_RX_TIER1_BLOCK8_PRICE_ATTRIBUTE_ID (0x8417)
+#define ZCL_RX_TIER1_BLOCK9_PRICE_ATTRIBUTE_ID (0x8418)
+#define ZCL_RX_TIER1_BLOCK10_PRICE_ATTRIBUTE_ID (0x8419)
+#define ZCL_RX_TIER1_BLOCK11_PRICE_ATTRIBUTE_ID (0x841A)
+#define ZCL_RX_TIER1_BLOCK12_PRICE_ATTRIBUTE_ID (0x841B)
+#define ZCL_RX_TIER1_BLOCK13_PRICE_ATTRIBUTE_ID (0x841C)
+#define ZCL_RX_TIER1_BLOCK14_PRICE_ATTRIBUTE_ID (0x841D)
+#define ZCL_RX_TIER1_BLOCK15_PRICE_ATTRIBUTE_ID (0x841E)
+#define ZCL_RX_TIER1_BLOCK16_PRICE_ATTRIBUTE_ID (0x841F)
+#define ZCL_RX_TIER2_BLOCK1_PRICE_ATTRIBUTE_ID (0x8420)
+#define ZCL_RX_TIER2_BLOCK2_PRICE_ATTRIBUTE_ID (0x8421)
+#define ZCL_RX_TIER2_BLOCK3_PRICE_ATTRIBUTE_ID (0x8422)
+#define ZCL_RX_TIER2_BLOCK4_PRICE_ATTRIBUTE_ID (0x8423)
+#define ZCL_RX_TIER2_BLOCK5_PRICE_ATTRIBUTE_ID (0x8424)
+#define ZCL_RX_TIER2_BLOCK6_PRICE_ATTRIBUTE_ID (0x8425)
+#define ZCL_RX_TIER2_BLOCK7_PRICE_ATTRIBUTE_ID (0x8426)
+#define ZCL_RX_TIER2_BLOCK8_PRICE_ATTRIBUTE_ID (0x8427)
+#define ZCL_RX_TIER2_BLOCK9_PRICE_ATTRIBUTE_ID (0x8428)
+#define ZCL_RX_TIER2_BLOCK10_PRICE_ATTRIBUTE_ID (0x8429)
+#define ZCL_RX_TIER2_BLOCK11_PRICE_ATTRIBUTE_ID (0x842A)
+#define ZCL_RX_TIER2_BLOCK12_PRICE_ATTRIBUTE_ID (0x842B)
+#define ZCL_RX_TIER2_BLOCK13_PRICE_ATTRIBUTE_ID (0x842C)
+#define ZCL_RX_TIER2_BLOCK14_PRICE_ATTRIBUTE_ID (0x842D)
+#define ZCL_RX_TIER2_BLOCK15_PRICE_ATTRIBUTE_ID (0x842E)
+#define ZCL_RX_TIER2_BLOCK16_PRICE_ATTRIBUTE_ID (0x842F)
+#define ZCL_RX_TIER3_BLOCK1_PRICE_ATTRIBUTE_ID (0x8430)
+#define ZCL_RX_TIER3_BLOCK2_PRICE_ATTRIBUTE_ID (0x8431)
+#define ZCL_RX_TIER3_BLOCK3_PRICE_ATTRIBUTE_ID (0x8432)
+#define ZCL_RX_TIER3_BLOCK4_PRICE_ATTRIBUTE_ID (0x8433)
+#define ZCL_RX_TIER3_BLOCK5_PRICE_ATTRIBUTE_ID (0x8434)
+#define ZCL_RX_TIER3_BLOCK6_PRICE_ATTRIBUTE_ID (0x8435)
+#define ZCL_RX_TIER3_BLOCK7_PRICE_ATTRIBUTE_ID (0x8436)
+#define ZCL_RX_TIER3_BLOCK8_PRICE_ATTRIBUTE_ID (0x8437)
+#define ZCL_RX_TIER3_BLOCK9_PRICE_ATTRIBUTE_ID (0x8438)
+#define ZCL_RX_TIER3_BLOCK10_PRICE_ATTRIBUTE_ID (0x8439)
+#define ZCL_RX_TIER3_BLOCK11_PRICE_ATTRIBUTE_ID (0x843A)
+#define ZCL_RX_TIER3_BLOCK12_PRICE_ATTRIBUTE_ID (0x843B)
+#define ZCL_RX_TIER3_BLOCK13_PRICE_ATTRIBUTE_ID (0x843C)
+#define ZCL_RX_TIER3_BLOCK14_PRICE_ATTRIBUTE_ID (0x843D)
+#define ZCL_RX_TIER3_BLOCK15_PRICE_ATTRIBUTE_ID (0x843E)
+#define ZCL_RX_TIER3_BLOCK16_PRICE_ATTRIBUTE_ID (0x843F)
+#define ZCL_RX_TIER4_BLOCK1_PRICE_ATTRIBUTE_ID (0x8440)
+#define ZCL_RX_TIER4_BLOCK2_PRICE_ATTRIBUTE_ID (0x8441)
+#define ZCL_RX_TIER4_BLOCK3_PRICE_ATTRIBUTE_ID (0x8442)
+#define ZCL_RX_TIER4_BLOCK4_PRICE_ATTRIBUTE_ID (0x8443)
+#define ZCL_RX_TIER4_BLOCK5_PRICE_ATTRIBUTE_ID (0x8444)
+#define ZCL_RX_TIER4_BLOCK6_PRICE_ATTRIBUTE_ID (0x8445)
+#define ZCL_RX_TIER4_BLOCK7_PRICE_ATTRIBUTE_ID (0x8446)
+#define ZCL_RX_TIER4_BLOCK8_PRICE_ATTRIBUTE_ID (0x8447)
+#define ZCL_RX_TIER4_BLOCK9_PRICE_ATTRIBUTE_ID (0x8448)
+#define ZCL_RX_TIER4_BLOCK10_PRICE_ATTRIBUTE_ID (0x8449)
+#define ZCL_RX_TIER4_BLOCK11_PRICE_ATTRIBUTE_ID (0x844A)
+#define ZCL_RX_TIER4_BLOCK12_PRICE_ATTRIBUTE_ID (0x844B)
+#define ZCL_RX_TIER4_BLOCK13_PRICE_ATTRIBUTE_ID (0x844C)
+#define ZCL_RX_TIER4_BLOCK14_PRICE_ATTRIBUTE_ID (0x844D)
+#define ZCL_RX_TIER4_BLOCK15_PRICE_ATTRIBUTE_ID (0x844E)
+#define ZCL_RX_TIER4_BLOCK16_PRICE_ATTRIBUTE_ID (0x844F)
+#define ZCL_RX_TIER5_BLOCK1_PRICE_ATTRIBUTE_ID (0x8450)
+#define ZCL_RX_TIER5_BLOCK2_PRICE_ATTRIBUTE_ID (0x8451)
+#define ZCL_RX_TIER5_BLOCK3_PRICE_ATTRIBUTE_ID (0x8452)
+#define ZCL_RX_TIER5_BLOCK4_PRICE_ATTRIBUTE_ID (0x8453)
+#define ZCL_RX_TIER5_BLOCK5_PRICE_ATTRIBUTE_ID (0x8454)
+#define ZCL_RX_TIER5_BLOCK6_PRICE_ATTRIBUTE_ID (0x8455)
+#define ZCL_RX_TIER5_BLOCK7_PRICE_ATTRIBUTE_ID (0x8456)
+#define ZCL_RX_TIER5_BLOCK8_PRICE_ATTRIBUTE_ID (0x8457)
+#define ZCL_RX_TIER5_BLOCK9_PRICE_ATTRIBUTE_ID (0x8458)
+#define ZCL_RX_TIER5_BLOCK10_PRICE_ATTRIBUTE_ID (0x8459)
+#define ZCL_RX_TIER5_BLOCK11_PRICE_ATTRIBUTE_ID (0x845A)
+#define ZCL_RX_TIER5_BLOCK12_PRICE_ATTRIBUTE_ID (0x845B)
+#define ZCL_RX_TIER5_BLOCK13_PRICE_ATTRIBUTE_ID (0x845C)
+#define ZCL_RX_TIER5_BLOCK14_PRICE_ATTRIBUTE_ID (0x845D)
+#define ZCL_RX_TIER5_BLOCK15_PRICE_ATTRIBUTE_ID (0x845E)
+#define ZCL_RX_TIER5_BLOCK16_PRICE_ATTRIBUTE_ID (0x845F)
+#define ZCL_RX_TIER6_BLOCK1_PRICE_ATTRIBUTE_ID (0x8460)
+#define ZCL_RX_TIER6_BLOCK2_PRICE_ATTRIBUTE_ID (0x8461)
+#define ZCL_RX_TIER6_BLOCK3_PRICE_ATTRIBUTE_ID (0x8462)
+#define ZCL_RX_TIER6_BLOCK4_PRICE_ATTRIBUTE_ID (0x8463)
+#define ZCL_RX_TIER6_BLOCK5_PRICE_ATTRIBUTE_ID (0x8464)
+#define ZCL_RX_TIER6_BLOCK6_PRICE_ATTRIBUTE_ID (0x8465)
+#define ZCL_RX_TIER6_BLOCK7_PRICE_ATTRIBUTE_ID (0x8466)
+#define ZCL_RX_TIER6_BLOCK8_PRICE_ATTRIBUTE_ID (0x8467)
+#define ZCL_RX_TIER6_BLOCK9_PRICE_ATTRIBUTE_ID (0x8468)
+#define ZCL_RX_TIER6_BLOCK10_PRICE_ATTRIBUTE_ID (0x8469)
+#define ZCL_RX_TIER6_BLOCK11_PRICE_ATTRIBUTE_ID (0x846A)
+#define ZCL_RX_TIER6_BLOCK12_PRICE_ATTRIBUTE_ID (0x846B)
+#define ZCL_RX_TIER6_BLOCK13_PRICE_ATTRIBUTE_ID (0x846C)
+#define ZCL_RX_TIER6_BLOCK14_PRICE_ATTRIBUTE_ID (0x846D)
+#define ZCL_RX_TIER6_BLOCK15_PRICE_ATTRIBUTE_ID (0x846E)
+#define ZCL_RX_TIER6_BLOCK16_PRICE_ATTRIBUTE_ID (0x846F)
+#define ZCL_RX_TIER7_BLOCK1_PRICE_ATTRIBUTE_ID (0x8470)
+#define ZCL_RX_TIER7_BLOCK2_PRICE_ATTRIBUTE_ID (0x8471)
+#define ZCL_RX_TIER7_BLOCK3_PRICE_ATTRIBUTE_ID (0x8472)
+#define ZCL_RX_TIER7_BLOCK4_PRICE_ATTRIBUTE_ID (0x8473)
+#define ZCL_RX_TIER7_BLOCK5_PRICE_ATTRIBUTE_ID (0x8474)
+#define ZCL_RX_TIER7_BLOCK6_PRICE_ATTRIBUTE_ID (0x8475)
+#define ZCL_RX_TIER7_BLOCK7_PRICE_ATTRIBUTE_ID (0x8476)
+#define ZCL_RX_TIER7_BLOCK8_PRICE_ATTRIBUTE_ID (0x8477)
+#define ZCL_RX_TIER7_BLOCK9_PRICE_ATTRIBUTE_ID (0x8478)
+#define ZCL_RX_TIER7_BLOCK10_PRICE_ATTRIBUTE_ID (0x8479)
+#define ZCL_RX_TIER7_BLOCK11_PRICE_ATTRIBUTE_ID (0x847A)
+#define ZCL_RX_TIER7_BLOCK12_PRICE_ATTRIBUTE_ID (0x847B)
+#define ZCL_RX_TIER7_BLOCK13_PRICE_ATTRIBUTE_ID (0x847C)
+#define ZCL_RX_TIER7_BLOCK14_PRICE_ATTRIBUTE_ID (0x847D)
+#define ZCL_RX_TIER7_BLOCK15_PRICE_ATTRIBUTE_ID (0x847E)
+#define ZCL_RX_TIER7_BLOCK16_PRICE_ATTRIBUTE_ID (0x847F)
+#define ZCL_RX_TIER8_BLOCK1_PRICE_ATTRIBUTE_ID (0x8480)
+#define ZCL_RX_TIER8_BLOCK2_PRICE_ATTRIBUTE_ID (0x8481)
+#define ZCL_RX_TIER8_BLOCK3_PRICE_ATTRIBUTE_ID (0x8482)
+#define ZCL_RX_TIER8_BLOCK4_PRICE_ATTRIBUTE_ID (0x8483)
+#define ZCL_RX_TIER8_BLOCK5_PRICE_ATTRIBUTE_ID (0x8484)
+#define ZCL_RX_TIER8_BLOCK6_PRICE_ATTRIBUTE_ID (0x8485)
+#define ZCL_RX_TIER8_BLOCK7_PRICE_ATTRIBUTE_ID (0x8486)
+#define ZCL_RX_TIER8_BLOCK8_PRICE_ATTRIBUTE_ID (0x8487)
+#define ZCL_RX_TIER8_BLOCK9_PRICE_ATTRIBUTE_ID (0x8488)
+#define ZCL_RX_TIER8_BLOCK10_PRICE_ATTRIBUTE_ID (0x8489)
+#define ZCL_RX_TIER8_BLOCK11_PRICE_ATTRIBUTE_ID (0x848A)
+#define ZCL_RX_TIER8_BLOCK12_PRICE_ATTRIBUTE_ID (0x848B)
+#define ZCL_RX_TIER8_BLOCK13_PRICE_ATTRIBUTE_ID (0x848C)
+#define ZCL_RX_TIER8_BLOCK14_PRICE_ATTRIBUTE_ID (0x848D)
+#define ZCL_RX_TIER8_BLOCK15_PRICE_ATTRIBUTE_ID (0x848E)
+#define ZCL_RX_TIER8_BLOCK16_PRICE_ATTRIBUTE_ID (0x848F)
+#define ZCL_RX_TIER9_BLOCK1_PRICE_ATTRIBUTE_ID (0x8490)
+#define ZCL_RX_TIER9_BLOCK2_PRICE_ATTRIBUTE_ID (0x8491)
+#define ZCL_RX_TIER9_BLOCK3_PRICE_ATTRIBUTE_ID (0x8492)
+#define ZCL_RX_TIER9_BLOCK4_PRICE_ATTRIBUTE_ID (0x8493)
+#define ZCL_RX_TIER9_BLOCK5_PRICE_ATTRIBUTE_ID (0x8494)
+#define ZCL_RX_TIER9_BLOCK6_PRICE_ATTRIBUTE_ID (0x8495)
+#define ZCL_RX_TIER9_BLOCK7_PRICE_ATTRIBUTE_ID (0x8496)
+#define ZCL_RX_TIER9_BLOCK8_PRICE_ATTRIBUTE_ID (0x8497)
+#define ZCL_RX_TIER9_BLOCK9_PRICE_ATTRIBUTE_ID (0x8498)
+#define ZCL_RX_TIER9_BLOCK10_PRICE_ATTRIBUTE_ID (0x8499)
+#define ZCL_RX_TIER9_BLOCK11_PRICE_ATTRIBUTE_ID (0x849A)
+#define ZCL_RX_TIER9_BLOCK12_PRICE_ATTRIBUTE_ID (0x849B)
+#define ZCL_RX_TIER9_BLOCK13_PRICE_ATTRIBUTE_ID (0x849C)
+#define ZCL_RX_TIER9_BLOCK14_PRICE_ATTRIBUTE_ID (0x849D)
+#define ZCL_RX_TIER9_BLOCK15_PRICE_ATTRIBUTE_ID (0x849E)
+#define ZCL_RX_TIER9_BLOCK16_PRICE_ATTRIBUTE_ID (0x849F)
+#define ZCL_RX_TIER10_BLOCK1_PRICE_ATTRIBUTE_ID (0x84A0)
+#define ZCL_RX_TIER10_BLOCK2_PRICE_ATTRIBUTE_ID (0x84A1)
+#define ZCL_RX_TIER10_BLOCK3_PRICE_ATTRIBUTE_ID (0x84A2)
+#define ZCL_RX_TIER10_BLOCK4_PRICE_ATTRIBUTE_ID (0x84A3)
+#define ZCL_RX_TIER10_BLOCK5_PRICE_ATTRIBUTE_ID (0x84A4)
+#define ZCL_RX_TIER10_BLOCK6_PRICE_ATTRIBUTE_ID (0x84A5)
+#define ZCL_RX_TIER10_BLOCK7_PRICE_ATTRIBUTE_ID (0x84A6)
+#define ZCL_RX_TIER10_BLOCK8_PRICE_ATTRIBUTE_ID (0x84A7)
+#define ZCL_RX_TIER10_BLOCK9_PRICE_ATTRIBUTE_ID (0x84A8)
+#define ZCL_RX_TIER10_BLOCK10_PRICE_ATTRIBUTE_ID (0x84A9)
+#define ZCL_RX_TIER10_BLOCK11_PRICE_ATTRIBUTE_ID (0x84AA)
+#define ZCL_RX_TIER10_BLOCK12_PRICE_ATTRIBUTE_ID (0x84AB)
+#define ZCL_RX_TIER10_BLOCK13_PRICE_ATTRIBUTE_ID (0x84AC)
+#define ZCL_RX_TIER10_BLOCK14_PRICE_ATTRIBUTE_ID (0x84AD)
+#define ZCL_RX_TIER10_BLOCK15_PRICE_ATTRIBUTE_ID (0x84AE)
+#define ZCL_RX_TIER10_BLOCK16_PRICE_ATTRIBUTE_ID (0x84AF)
+#define ZCL_RX_TIER11_BLOCK1_PRICE_ATTRIBUTE_ID (0x84B0)
+#define ZCL_RX_TIER11_BLOCK2_PRICE_ATTRIBUTE_ID (0x84B1)
+#define ZCL_RX_TIER11_BLOCK3_PRICE_ATTRIBUTE_ID (0x84B2)
+#define ZCL_RX_TIER11_BLOCK4_PRICE_ATTRIBUTE_ID (0x84B3)
+#define ZCL_RX_TIER11_BLOCK5_PRICE_ATTRIBUTE_ID (0x84B4)
+#define ZCL_RX_TIER11_BLOCK6_PRICE_ATTRIBUTE_ID (0x84B5)
+#define ZCL_RX_TIER11_BLOCK7_PRICE_ATTRIBUTE_ID (0x84B6)
+#define ZCL_RX_TIER11_BLOCK8_PRICE_ATTRIBUTE_ID (0x84B7)
+#define ZCL_RX_TIER11_BLOCK9_PRICE_ATTRIBUTE_ID (0x84B8)
+#define ZCL_RX_TIER11_BLOCK10_PRICE_ATTRIBUTE_ID (0x84B9)
+#define ZCL_RX_TIER11_BLOCK11_PRICE_ATTRIBUTE_ID (0x84BA)
+#define ZCL_RX_TIER11_BLOCK12_PRICE_ATTRIBUTE_ID (0x84BB)
+#define ZCL_RX_TIER11_BLOCK13_PRICE_ATTRIBUTE_ID (0x84BC)
+#define ZCL_RX_TIER11_BLOCK14_PRICE_ATTRIBUTE_ID (0x84BD)
+#define ZCL_RX_TIER11_BLOCK15_PRICE_ATTRIBUTE_ID (0x84BE)
+#define ZCL_RX_TIER11_BLOCK16_PRICE_ATTRIBUTE_ID (0x84BF)
+#define ZCL_RX_TIER12_BLOCK1_PRICE_ATTRIBUTE_ID (0x84C0)
+#define ZCL_RX_TIER12_BLOCK2_PRICE_ATTRIBUTE_ID (0x84C1)
+#define ZCL_RX_TIER12_BLOCK3_PRICE_ATTRIBUTE_ID (0x84C2)
+#define ZCL_RX_TIER12_BLOCK4_PRICE_ATTRIBUTE_ID (0x84C3)
+#define ZCL_RX_TIER12_BLOCK5_PRICE_ATTRIBUTE_ID (0x84C4)
+#define ZCL_RX_TIER12_BLOCK6_PRICE_ATTRIBUTE_ID (0x84C5)
+#define ZCL_RX_TIER12_BLOCK7_PRICE_ATTRIBUTE_ID (0x84C6)
+#define ZCL_RX_TIER12_BLOCK8_PRICE_ATTRIBUTE_ID (0x84C7)
+#define ZCL_RX_TIER12_BLOCK9_PRICE_ATTRIBUTE_ID (0x84C8)
+#define ZCL_RX_TIER12_BLOCK10_PRICE_ATTRIBUTE_ID (0x84C9)
+#define ZCL_RX_TIER12_BLOCK11_PRICE_ATTRIBUTE_ID (0x84CA)
+#define ZCL_RX_TIER12_BLOCK12_PRICE_ATTRIBUTE_ID (0x84CB)
+#define ZCL_RX_TIER12_BLOCK13_PRICE_ATTRIBUTE_ID (0x84CC)
+#define ZCL_RX_TIER12_BLOCK14_PRICE_ATTRIBUTE_ID (0x84CD)
+#define ZCL_RX_TIER12_BLOCK15_PRICE_ATTRIBUTE_ID (0x84CE)
+#define ZCL_RX_TIER12_BLOCK16_PRICE_ATTRIBUTE_ID (0x84CF)
+#define ZCL_RX_TIER13_BLOCK1_PRICE_ATTRIBUTE_ID (0x84D0)
+#define ZCL_RX_TIER13_BLOCK2_PRICE_ATTRIBUTE_ID (0x84D1)
+#define ZCL_RX_TIER13_BLOCK3_PRICE_ATTRIBUTE_ID (0x84D2)
+#define ZCL_RX_TIER13_BLOCK4_PRICE_ATTRIBUTE_ID (0x84D3)
+#define ZCL_RX_TIER13_BLOCK5_PRICE_ATTRIBUTE_ID (0x84D4)
+#define ZCL_RX_TIER13_BLOCK6_PRICE_ATTRIBUTE_ID (0x84D5)
+#define ZCL_RX_TIER13_BLOCK7_PRICE_ATTRIBUTE_ID (0x84D6)
+#define ZCL_RX_TIER13_BLOCK8_PRICE_ATTRIBUTE_ID (0x84D7)
+#define ZCL_RX_TIER13_BLOCK9_PRICE_ATTRIBUTE_ID (0x84D8)
+#define ZCL_RX_TIER13_BLOCK10_PRICE_ATTRIBUTE_ID (0x84D9)
+#define ZCL_RX_TIER13_BLOCK11_PRICE_ATTRIBUTE_ID (0x84DA)
+#define ZCL_RX_TIER13_BLOCK12_PRICE_ATTRIBUTE_ID (0x84DB)
+#define ZCL_RX_TIER13_BLOCK13_PRICE_ATTRIBUTE_ID (0x84DC)
+#define ZCL_RX_TIER13_BLOCK14_PRICE_ATTRIBUTE_ID (0x84DD)
+#define ZCL_RX_TIER13_BLOCK15_PRICE_ATTRIBUTE_ID (0x84DE)
+#define ZCL_RX_TIER13_BLOCK16_PRICE_ATTRIBUTE_ID (0x84DF)
+#define ZCL_RX_TIER14_BLOCK1_PRICE_ATTRIBUTE_ID (0x84E0)
+#define ZCL_RX_TIER14_BLOCK2_PRICE_ATTRIBUTE_ID (0x84E1)
+#define ZCL_RX_TIER14_BLOCK3_PRICE_ATTRIBUTE_ID (0x84E2)
+#define ZCL_RX_TIER14_BLOCK4_PRICE_ATTRIBUTE_ID (0x84E3)
+#define ZCL_RX_TIER14_BLOCK5_PRICE_ATTRIBUTE_ID (0x84E4)
+#define ZCL_RX_TIER14_BLOCK6_PRICE_ATTRIBUTE_ID (0x84E5)
+#define ZCL_RX_TIER14_BLOCK7_PRICE_ATTRIBUTE_ID (0x84E6)
+#define ZCL_RX_TIER14_BLOCK8_PRICE_ATTRIBUTE_ID (0x84E7)
+#define ZCL_RX_TIER14_BLOCK9_PRICE_ATTRIBUTE_ID (0x84E8)
+#define ZCL_RX_TIER14_BLOCK10_PRICE_ATTRIBUTE_ID (0x84E9)
+#define ZCL_RX_TIER14_BLOCK11_PRICE_ATTRIBUTE_ID (0x84EA)
+#define ZCL_RX_TIER14_BLOCK12_PRICE_ATTRIBUTE_ID (0x84EB)
+#define ZCL_RX_TIER14_BLOCK13_PRICE_ATTRIBUTE_ID (0x84EC)
+#define ZCL_RX_TIER14_BLOCK14_PRICE_ATTRIBUTE_ID (0x84ED)
+#define ZCL_RX_TIER14_BLOCK15_PRICE_ATTRIBUTE_ID (0x84EE)
+#define ZCL_RX_TIER14_BLOCK16_PRICE_ATTRIBUTE_ID (0x84EF)
+#define ZCL_RX_TIER15_BLOCK1_PRICE_ATTRIBUTE_ID (0x84F0)
+#define ZCL_RX_TIER15_BLOCK2_PRICE_ATTRIBUTE_ID (0x84F1)
+#define ZCL_RX_TIER15_BLOCK3_PRICE_ATTRIBUTE_ID (0x84F2)
+#define ZCL_RX_TIER15_BLOCK4_PRICE_ATTRIBUTE_ID (0x84F3)
+#define ZCL_RX_TIER15_BLOCK5_PRICE_ATTRIBUTE_ID (0x84F4)
+#define ZCL_RX_TIER15_BLOCK6_PRICE_ATTRIBUTE_ID (0x84F5)
+#define ZCL_RX_TIER15_BLOCK7_PRICE_ATTRIBUTE_ID (0x84F6)
+#define ZCL_RX_TIER15_BLOCK8_PRICE_ATTRIBUTE_ID (0x84F7)
+#define ZCL_RX_TIER15_BLOCK9_PRICE_ATTRIBUTE_ID (0x84F8)
+#define ZCL_RX_TIER15_BLOCK10_PRICE_ATTRIBUTE_ID (0x84F9)
+#define ZCL_RX_TIER15_BLOCK11_PRICE_ATTRIBUTE_ID (0x84FA)
+#define ZCL_RX_TIER15_BLOCK12_PRICE_ATTRIBUTE_ID (0x84FB)
+#define ZCL_RX_TIER15_BLOCK13_PRICE_ATTRIBUTE_ID (0x84FC)
+#define ZCL_RX_TIER15_BLOCK14_PRICE_ATTRIBUTE_ID (0x84FD)
+#define ZCL_RX_TIER15_BLOCK15_PRICE_ATTRIBUTE_ID (0x84FE)
+#define ZCL_RX_TIER15_BLOCK16_PRICE_ATTRIBUTE_ID (0x84FF)
+#define ZCL_RX_PRICE_TIER16_ATTRIBUTE_ID (0x850F)
+#define ZCL_RX_PRICE_TIER17_ATTRIBUTE_ID (0x8510)
+#define ZCL_RX_PRICE_TIER18_ATTRIBUTE_ID (0x8511)
+#define ZCL_RX_PRICE_TIER19_ATTRIBUTE_ID (0x8512)
+#define ZCL_RX_PRICE_TIER20_ATTRIBUTE_ID (0x8513)
+#define ZCL_RX_PRICE_TIER21_ATTRIBUTE_ID (0x8514)
+#define ZCL_RX_PRICE_TIER22_ATTRIBUTE_ID (0x8515)
+#define ZCL_RX_PRICE_TIER23_ATTRIBUTE_ID (0x8516)
+#define ZCL_RX_PRICE_TIER24_ATTRIBUTE_ID (0x8517)
+#define ZCL_RX_PRICE_TIER25_ATTRIBUTE_ID (0x8518)
+#define ZCL_RX_PRICE_TIER26_ATTRIBUTE_ID (0x8519)
+#define ZCL_RX_PRICE_TIER27_ATTRIBUTE_ID (0x851A)
+#define ZCL_RX_PRICE_TIER28_ATTRIBUTE_ID (0x851B)
+#define ZCL_RX_PRICE_TIER29_ATTRIBUTE_ID (0x851C)
+#define ZCL_RX_PRICE_TIER30_ATTRIBUTE_ID (0x851D)
+#define ZCL_RX_PRICE_TIER31_ATTRIBUTE_ID (0x851E)
+#define ZCL_RX_PRICE_TIER32_ATTRIBUTE_ID (0x851F)
+#define ZCL_RX_PRICE_TIER33_ATTRIBUTE_ID (0x8520)
+#define ZCL_RX_PRICE_TIER34_ATTRIBUTE_ID (0x8521)
+#define ZCL_RX_PRICE_TIER35_ATTRIBUTE_ID (0x8522)
+#define ZCL_RX_PRICE_TIER36_ATTRIBUTE_ID (0x8523)
+#define ZCL_RX_PRICE_TIER37_ATTRIBUTE_ID (0x8524)
+#define ZCL_RX_PRICE_TIER38_ATTRIBUTE_ID (0x8525)
+#define ZCL_RX_PRICE_TIER39_ATTRIBUTE_ID (0x8526)
+#define ZCL_RX_PRICE_TIER40_ATTRIBUTE_ID (0x8527)
+#define ZCL_RX_PRICE_TIER41_ATTRIBUTE_ID (0x8528)
+#define ZCL_RX_PRICE_TIER42_ATTRIBUTE_ID (0x8529)
+#define ZCL_RX_PRICE_TIER43_ATTRIBUTE_ID (0x852A)
+#define ZCL_RX_PRICE_TIER44_ATTRIBUTE_ID (0x852B)
+#define ZCL_RX_PRICE_TIER45_ATTRIBUTE_ID (0x852C)
+#define ZCL_RX_PRICE_TIER46_ATTRIBUTE_ID (0x852D)
+#define ZCL_RX_PRICE_TIER47_ATTRIBUTE_ID (0x852E)
+#define ZCL_RX_PRICE_TIER48_ATTRIBUTE_ID (0x852F)
+#define ZCL_RX_TARIFF_LABEL_ATTRIBUTE_ID (0x8610)
+#define ZCL_RX_NUMBER_OF_PRICE_TIERS_IN_USE_ATTRIBUTE_ID (0x8611)
+#define ZCL_RX_NUMBER_OF_BLOCK_THRESHOLDS_IN_USE_ATTRIBUTE_ID (0x8612)
+#define ZCL_RX_TIER_BLOCK_MODE_ATTRIBUTE_ID (0x8613)
+#define ZCL_RX_TARIFF_RESOLUTION_PERIOD_ATTRIBUTE_ID (0x8615)
+#define ZCL_RX_CO2_ATTRIBUTE_ID (0x8625)
+#define ZCL_RX_CO2_UNIT_ATTRIBUTE_ID (0x8626)
+#define ZCL_RX_CO2_TRAILING_DIGIT_ATTRIBUTE_ID (0x8627)
+#define ZCL_RX_CURRENT_BILLING_PERIOD_START_ATTRIBUTE_ID (0x8700)
+#define ZCL_RX_CURRENT_BILLING_PERIOD_DURATION_ATTRIBUTE_ID (0x8701)
+#define ZCL_RX_LAST_BILLING_PERIOD_START_ATTRIBUTE_ID (0x8702)
+#define ZCL_RX_LAST_BILLING_PERIOD_DURATION_ATTRIBUTE_ID (0x8703)
+#define ZCL_RX_LAST_BILLING_PERIOD_CONSOLIDATED_BILL_ATTRIBUTE_ID (0x8704)
+
+// Attribute ids for cluster: Demand Response and Load Control
+
+// Client attributes
+#define ZCL_UTILITY_ENROLLMENT_GROUP_ATTRIBUTE_ID (0x0000)
+#define ZCL_START_RANDOMIZATION_MINUTES_ATTRIBUTE_ID (0x0001)
+#define ZCL_DURATION_RANDOMIZATION_MINUTES_ATTRIBUTE_ID (0x0002)
+#define ZCL_DEVICE_CLASS_VALUE_ATTRIBUTE_ID (0x0003)
+
+// Server attributes
+
+// Attribute ids for cluster: Simple Metering
+
+// Client attributes
+#define ZCL_FUNCTIONAL_NOTIFICATION_FLAGS_ATTRIBUTE_ID (0x0000)
+#define ZCL_NOTIFICATION_FLAGS_2_ATTRIBUTE_ID (0x0001)
+#define ZCL_NOTIFICATION_FLAGS_3_ATTRIBUTE_ID (0x0002)
+#define ZCL_NOTIFICATION_FLAGS_4_ATTRIBUTE_ID (0x0003)
+#define ZCL_NOTIFICATION_FLAGS_5_ATTRIBUTE_ID (0x0004)
+#define ZCL_NOTIFICATION_FLAGS_6_ATTRIBUTE_ID (0x0005)
+#define ZCL_NOTIFICATION_FLAGS_7_ATTRIBUTE_ID (0x0006)
+#define ZCL_NOTIFICATION_FLAGS_8_ATTRIBUTE_ID (0x0007)
+
+// Server attributes
+#define ZCL_CURRENT_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0000)
+#define ZCL_CURRENT_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0001)
+#define ZCL_CURRENT_MAX_DEMAND_DELIVERED_ATTRIBUTE_ID (0x0002)
+#define ZCL_CURRENT_MAX_DEMAND_RECEIVED_ATTRIBUTE_ID (0x0003)
+#define ZCL_DFT_SUMMATION_ATTRIBUTE_ID (0x0004)
+#define ZCL_DAILY_FREEZE_TIME_ATTRIBUTE_ID (0x0005)
+#define ZCL_POWER_FACTOR_ATTRIBUTE_ID (0x0006)
+#define ZCL_READING_SNAP_SHOT_TIME_ATTRIBUTE_ID (0x0007)
+#define ZCL_CURRENT_MAX_DEMAND_DELIVERED_TIME_ATTRIBUTE_ID (0x0008)
+#define ZCL_CURRENT_MAX_DEMAND_RECEIVED_TIME_ATTRIBUTE_ID (0x0009)
+#define ZCL_DEFAULT_UPDATE_PERIOD_ATTRIBUTE_ID (0x000A)
+#define ZCL_FAST_POLL_UPDATE_PERIOD_ATTRIBUTE_ID (0x000B)
+#define ZCL_CURRENT_BLOCK_PERIOD_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x000C)
+#define ZCL_DAILY_CONSUMPTION_TARGET_ATTRIBUTE_ID (0x000D)
+#define ZCL_CURRENT_BLOCK_ATTRIBUTE_ID (0x000E)
+#define ZCL_PROFILE_INTERVAL_PERIOD_ATTRIBUTE_ID (0x000F)
+#define ZCL_INTERVAL_READ_REPORTING_PERIOD_ATTRIBUTE_ID (0x0010)
+#define ZCL_PRESET_READING_TIME_ATTRIBUTE_ID (0x0011)
+#define ZCL_VOLUME_PER_REPORT_ATTRIBUTE_ID (0x0012)
+#define ZCL_FLOW_RESTRICTION_ATTRIBUTE_ID (0x0013)
+#define ZCL_SUPPLY_STATUS_ATTRIBUTE_ID (0x0014)
+#define ZCL_CURRENT_INLET_ENERGY_CARRIER_SUMMATION_ATTRIBUTE_ID (0x0015)
+#define ZCL_CURRENT_OUTLET_ENERGY_CARRIER_SUMMATION_ATTRIBUTE_ID (0x0016)
+#define ZCL_INLET_TEMPERATURE_ATTRIBUTE_ID (0x0017)
+#define ZCL_OUTLET_TEMPERATURE_ATTRIBUTE_ID (0x0018)
+#define ZCL_CONTROL_TEMPERATURE_ATTRIBUTE_ID (0x0019)
+#define ZCL_CURRENT_INLET_ENERGY_CARRIER_DEMAND_ATTRIBUTE_ID (0x001A)
+#define ZCL_CURRENT_OUTLET_ENERGY_CARRIER_DEMAND_ATTRIBUTE_ID (0x001B)
+#define ZCL_PREVIOUS_BLOCK_PERIOD_CONSUMIPTION_DELIVERED_ATTRIBUTE_ID (0x001C)
+#define ZCL_CURRENT_BLOCK_PERIOD_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x001D)
+#define ZCL_CURRENT_BLOCK_RECEIVED_ATTRIBUTE_ID (0x001E)
+#define ZCL_DFT_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x001F)
+#define ZCL_ACTIVE_REGISTER_TIER_DELIVERED_ATTRIBUTE_ID (0x0020)
+#define ZCL_ACTIVE_REGISTER_TIER_RECEIVED_ATTRIBUTE_ID (0x0021)
+#define ZCL_LAST_BLOCK_SWITCH_TIME_ATTRIBUTE_ID (0x0022)
+#define ZCL_CURRENT_TIER1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0100)
+#define ZCL_CURRENT_TIER1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0101)
+#define ZCL_CURRENT_TIER2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0102)
+#define ZCL_CURRENT_TIER2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0103)
+#define ZCL_CURRENT_TIER3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0104)
+#define ZCL_CURRENT_TIER3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0105)
+#define ZCL_CURRENT_TIER4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0106)
+#define ZCL_CURRENT_TIER4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0107)
+#define ZCL_CURRENT_TIER5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0108)
+#define ZCL_CURRENT_TIER5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0109)
+#define ZCL_CURRENT_TIER6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x010A)
+#define ZCL_CURRENT_TIER6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x010B)
+#define ZCL_CURRENT_TIER7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x010C)
+#define ZCL_CURRENT_TIER7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x010D)
+#define ZCL_CURRENT_TIER8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x010E)
+#define ZCL_CURRENT_TIER8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x010F)
+#define ZCL_CURRENT_TIER9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0110)
+#define ZCL_CURRENT_TIER9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0111)
+#define ZCL_CURRENT_TIER10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0112)
+#define ZCL_CURRENT_TIER10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0113)
+#define ZCL_CURRENT_TIER11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0114)
+#define ZCL_CURRENT_TIER11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0115)
+#define ZCL_CURRENT_TIER12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0116)
+#define ZCL_CURRENT_TIER12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0117)
+#define ZCL_CURRENT_TIER13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0118)
+#define ZCL_CURRENT_TIER13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0119)
+#define ZCL_CURRENT_TIER14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x011A)
+#define ZCL_CURRENT_TIER14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x011B)
+#define ZCL_CURRENT_TIER15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x011C)
+#define ZCL_CURRENT_TIER15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x011D)
+#define ZCL_CURRENT_TIER16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x011E)
+#define ZCL_CURRENT_TIER16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x011F)
+#define ZCL_CURRENT_TIER17_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0120)
+#define ZCL_CURRENT_TIER17_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0121)
+#define ZCL_CURRENT_TIER18_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0122)
+#define ZCL_CURRENT_TIER18_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0123)
+#define ZCL_CURRENT_TIER19_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0124)
+#define ZCL_CURRENT_TIER19_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0125)
+#define ZCL_CURRENT_TIER20_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0126)
+#define ZCL_CURRENT_TIER20_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0127)
+#define ZCL_CURRENT_TIER21_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0128)
+#define ZCL_CURRENT_TIER21_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0129)
+#define ZCL_CURRENT_TIER22_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x012A)
+#define ZCL_CURRENT_TIER22_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x012B)
+#define ZCL_CURRENT_TIER23_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x012C)
+#define ZCL_CURRENT_TIER23_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x012D)
+#define ZCL_CURRENT_TIER24_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x012E)
+#define ZCL_CURRENT_TIER24_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x012F)
+#define ZCL_CURRENT_TIER25_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0130)
+#define ZCL_CURRENT_TIER25_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0131)
+#define ZCL_CURRENT_TIER26_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0132)
+#define ZCL_CURRENT_TIER26_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0133)
+#define ZCL_CURRENT_TIER27_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0134)
+#define ZCL_CURRENT_TIER27_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0135)
+#define ZCL_CURRENT_TIER28_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0136)
+#define ZCL_CURRENT_TIER28_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0137)
+#define ZCL_CURRENT_TIER29_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0138)
+#define ZCL_CURRENT_TIER29_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0139)
+#define ZCL_CURRENT_TIER30_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x013A)
+#define ZCL_CURRENT_TIER30_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x013B)
+#define ZCL_CURRENT_TIER31_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x013C)
+#define ZCL_CURRENT_TIER31_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x013D)
+#define ZCL_CURRENT_TIER32_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x013E)
+#define ZCL_CURRENT_TIER32_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x013F)
+#define ZCL_CURRENT_TIER33_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0140)
+#define ZCL_CURRENT_TIER33_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0141)
+#define ZCL_CURRENT_TIER34_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0142)
+#define ZCL_CURRENT_TIER34_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0143)
+#define ZCL_CURRENT_TIER35_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0144)
+#define ZCL_CURRENT_TIER35_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0145)
+#define ZCL_CURRENT_TIER36_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0146)
+#define ZCL_CURRENT_TIER36_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0147)
+#define ZCL_CURRENT_TIER37_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0148)
+#define ZCL_CURRENT_TIER37_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0149)
+#define ZCL_CURRENT_TIER38_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x014A)
+#define ZCL_CURRENT_TIER38_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x014B)
+#define ZCL_CURRENT_TIER39_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x014C)
+#define ZCL_CURRENT_TIER39_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x014D)
+#define ZCL_CURRENT_TIER40_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x014E)
+#define ZCL_CURRENT_TIER40_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x014F)
+#define ZCL_CURRENT_TIER41_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0150)
+#define ZCL_CURRENT_TIER41_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0151)
+#define ZCL_CURRENT_TIER42_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0152)
+#define ZCL_CURRENT_TIER42_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0153)
+#define ZCL_CURRENT_TIER43_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0154)
+#define ZCL_CURRENT_TIER43_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0155)
+#define ZCL_CURRENT_TIER44_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0156)
+#define ZCL_CURRENT_TIER44_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0157)
+#define ZCL_CURRENT_TIER45_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0158)
+#define ZCL_CURRENT_TIER45_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0159)
+#define ZCL_CURRENT_TIER46_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x015A)
+#define ZCL_CURRENT_TIER46_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x015B)
+#define ZCL_CURRENT_TIER47_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x015C)
+#define ZCL_CURRENT_TIER47_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x015D)
+#define ZCL_CURRENT_TIER48_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x015E)
+#define ZCL_CURRENT_TIER48_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x015F)
+#define ZCL_CPP1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x01FC)
+#define ZCL_CPP2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x01FE)
+#define ZCL_STATUS_ATTRIBUTE_ID (0x0200)
+#define ZCL_REMAINING_BATTERY_LIFE_ATTRIBUTE_ID (0x0201)
+#define ZCL_HOURS_IN_OPERATION_ATTRIBUTE_ID (0x0202)
+#define ZCL_HOURS_IN_FAULT_ATTRIBUTE_ID (0x0203)
+#define ZCL_EXTENDED_STATUS_ATTRIBUTE_ID (0x0204)
+#define ZCL_REMAINING_BATTERY_LIFE_IN_DAYS_ATTRIBUTE_ID (0x0205)
+#define ZCL_CURRENT_METER_ID_ATTRIBUTE_ID (0x0206)
+#define ZCL_AMBIENT_CONSUMPTION_INDICATOR_ATTRIBUTE_ID (0x0207)
+#define ZCL_UNIT_OF_MEASURE_ATTRIBUTE_ID (0x0300)
+#define ZCL_MULTIPLIER_ATTRIBUTE_ID (0x0301)
+#define ZCL_DIVISOR_ATTRIBUTE_ID (0x0302)
+#define ZCL_SUMMATION_FORMATTING_ATTRIBUTE_ID (0x0303)
+#define ZCL_DEMAND_FORMATTING_ATTRIBUTE_ID (0x0304)
+#define ZCL_HISTORICAL_CONSUMPTION_FORMATTING_ATTRIBUTE_ID (0x0305)
+#define ZCL_METERING_DEVICE_TYPE_ATTRIBUTE_ID (0x0306)
+#define ZCL_SITE_ID_ATTRIBUTE_ID (0x0307)
+#define ZCL_METER_SERIAL_NUMBER_ATTRIBUTE_ID (0x0308)
+#define ZCL_ENERGY_CARRIER_UNIT_OF_MEASURE_ATTRIBUTE_ID (0x0309)
+#define ZCL_ENERGY_CARRIER_SUMMATION_FORMATTING_ATTRIBUTE_ID (0x030A)
+#define ZCL_ENERGY_CARRIER_DEMAND_FORMATTING_ATTRIBUTE_ID (0x030B)
+#define ZCL_TEMPERATURE_UNIT_OF_MEASURE_ATTRIBUTE_ID (0x030C)
+#define ZCL_TEMPERATURE_FORMATTING_ATTRIBUTE_ID (0x030D)
+#define ZCL_MODULE_SERIAL_NUMBER_ATTRIBUTE_ID (0x030E)
+#define ZCL_OPERATING_TARIFF_LABEL_DELIVERED_ATTRIBUTE_ID (0x030F)
+#define ZCL_OPERATING_TARIFF_LABEL_RECEIVED_ATTRIBUTE_ID (0x0310)
+#define ZCL_CUSTOMER_ID_NUMBER_ATTRIBUTE_ID (0x0311)
+#define ZCL_ALTERNATIVE_UNIT_OF_MEASURE_ATTRIBUTE_ID (0x0312)
+#define ZCL_ALTERNATIVE_DEMAND_FORMATTING_ATTRIBUTE_ID (0x0313)
+#define ZCL_ALTERNATIVE_CONSUMPTION_FORMATTING_ATTRIBUTE_ID (0x0314)
+#define ZCL_INSTANTANEOUS_DEMAND_ATTRIBUTE_ID (0x0400)
+#define ZCL_CURRENT_DAY_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0401)
+#define ZCL_CURRENT_DAY_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0402)
+#define ZCL_PREVIOUS_DAY_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0403)
+#define ZCL_PREVIOUS_DAY_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0404)
+#define ZCL_CURRENT_PARTIAL_PROFILE_INTERVAL_START_TIME_DELIVERED_ATTRIBUTE_ID (0x0405)
+#define ZCL_CURRENT_PARTIAL_PROFILE_INTERVAL_START_TIME_RECEIVED_ATTRIBUTE_ID (0x0406)
+#define ZCL_CURRENT_PARTIAL_PROFILE_INTERVAL_VALUE_DELIVERED_ATTRIBUTE_ID (0x0407)
+#define ZCL_CURRENT_PARTIAL_PROFILE_INTERVAL_VALUE_RECEIVED_ATTRIBUTE_ID (0x0408)
+#define ZCL_CURRENT_DAY_MAX_PRESSURE_ATTRIBUTE_ID (0x0409)
+#define ZCL_CURRENT_DAY_MIN_PRESSURE_ATTRIBUTE_ID (0x040A)
+#define ZCL_PREVIOUS_DAY_MAX_PRESSURE_ATTRIBUTE_ID (0x040B)
+#define ZCL_PREVIOUS_DAY_MIN_PRESSURE_ATTRIBUTE_ID (0x040C)
+#define ZCL_CURRENT_DAY_MAX_DEMAND_ATTRIBUTE_ID (0x040D)
+#define ZCL_PREVIOUS_DAY_MAX_DEMAND_ATTRIBUTE_ID (0x040E)
+#define ZCL_CURRENT_MONTH_MAX_DEMAND_ATTRIBUTE_ID (0x040F)
+#define ZCL_CURRENT_YEAR_MAX_DEMAND_ATTRIBUTE_ID (0x0410)
+#define ZCL_CURRENT_DAY_MAX_ENERGY_CARRIER_DEMAND_ATTRIBUTE_ID (0x0411)
+#define ZCL_PREVIOUS_DAY_MAX_ENERGY_CARRIER_DEMAND_ATTRIBUTE_ID (0x0412)
+#define ZCL_CURRENT_MONTH_MAX_ENERGY_CARRIER_DEMAND_ATTRIBUTE_ID (0x0413)
+#define ZCL_CURRENT_MONTH_MIN_ENERGY_CARRIER_DEMAND_ATTRIBUTE_ID (0x0414)
+#define ZCL_CURRENT_YEAR_MAX_ENERGY_CARRIER_DEMAND_ATTRIBUTE_ID (0x0415)
+#define ZCL_CURRENT_YEAR_MIN_ENERGY_CARRIER_DEMAND_ATTRIBUTE_ID (0x0416)
+#define ZCL_PREVIOUS_DAY2_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0420)
+#define ZCL_PREVIOUS_DAY2_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0421)
+#define ZCL_PREVIOUS_DAY3_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0422)
+#define ZCL_PREVIOUS_DAY3_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0423)
+#define ZCL_PREVIOUS_DAY4_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0424)
+#define ZCL_PREVIOUS_DAY4_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0425)
+#define ZCL_PREVIOUS_DAY5_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0426)
+#define ZCL_PREVIOUS_DAY5_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0427)
+#define ZCL_PREVIOUS_DAY6_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0428)
+#define ZCL_PREVIOUS_DAY6_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0429)
+#define ZCL_PREVIOUS_DAY7_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x042A)
+#define ZCL_PREVIOUS_DAY7_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x042B)
+#define ZCL_PREVIOUS_DAY8_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x042C)
+#define ZCL_PREVIOUS_DAY8_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x042D)
+#define ZCL_CURRENT_WEEK_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0430)
+#define ZCL_CURRENT_WEEK_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0431)
+#define ZCL_PREVIOUS_WEEK_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0432)
+#define ZCL_PREVIOUS_WEEK_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0433)
+#define ZCL_PREVIOUS_WEEK2_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0434)
+#define ZCL_PREVIOUS_WEEK2_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0435)
+#define ZCL_PREVIOUS_WEEK3_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0436)
+#define ZCL_PREVIOUS_WEEK3_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0437)
+#define ZCL_PREVIOUS_WEEK4_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0438)
+#define ZCL_PREVIOUS_WEEK4_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0439)
+#define ZCL_PREVIOUS_WEEK5_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x043A)
+#define ZCL_PREVIOUS_WEEK5_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x043B)
+#define ZCL_CURRENT_MONTH_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0440)
+#define ZCL_CURRENT_MONTH_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0441)
+#define ZCL_PREVIOUS_MONTH_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0442)
+#define ZCL_PREVIOUS_MONTH_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0443)
+#define ZCL_PREVIOUS_MONTH2_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0444)
+#define ZCL_PREVIOUS_MONTH2_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0445)
+#define ZCL_PREVIOUS_MONTH3_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0446)
+#define ZCL_PREVIOUS_MONTH3_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0447)
+#define ZCL_PREVIOUS_MONTH4_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0448)
+#define ZCL_PREVIOUS_MONTH4_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0449)
+#define ZCL_PREVIOUS_MONTH5_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x044A)
+#define ZCL_PREVIOUS_MONTH5_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x044B)
+#define ZCL_PREVIOUS_MONTH6_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x044C)
+#define ZCL_PREVIOUS_MONTH6_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x044D)
+#define ZCL_PREVIOUS_MONTH7_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x044E)
+#define ZCL_PREVIOUS_MONTH7_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x044F)
+#define ZCL_PREVIOUS_MONTH8_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0450)
+#define ZCL_PREVIOUS_MONTH8_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0451)
+#define ZCL_PREVIOUS_MONTH9_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0452)
+#define ZCL_PREVIOUS_MONTH9_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0453)
+#define ZCL_PREVIOUS_MONTH10_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0454)
+#define ZCL_PREVIOUS_MONTH10_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0455)
+#define ZCL_PREVIOUS_MONTH11_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0456)
+#define ZCL_PREVIOUS_MONTH11_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0457)
+#define ZCL_PREVIOUS_MONTH12_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0458)
+#define ZCL_PREVIOUS_MONTH12_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0459)
+#define ZCL_PREVIOUS_MONTH13_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x045A)
+#define ZCL_PREVIOUS_MONTH13_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x045B)
+#define ZCL_METERING_HISTORICAL_FREEZE_TIME_ATTRIBUTE_ID (0x045C)
+#define ZCL_CURRENT_DAY_MAX_DEMAND_DELIVERED_ATTRIBUTE_ID (0x045D)
+#define ZCL_CURRENT_DAY_MAX_DEMAND_DELIVERED_TIME_ATTRIBUTE_ID (0x045E)
+#define ZCL_CURRENT_DAY_MAX_DEMAND_RECEIVED_ATTRIBUTE_ID (0x045F)
+#define ZCL_CURRENT_DAY_MAX_DEMAND_RECEIVED_TIME_ATTRIBUTE_ID (0x0460)
+#define ZCL_PREVIOUS_DAY_MAX_DEMAND_DELIVERED_ATTRIBUTE_ID (0x0461)
+#define ZCL_PREVIOUS_DAY_MAX_DEMAND_DELIVERED_TIME_ATTRIBUTE_ID (0x0462)
+#define ZCL_PREVIOUS_DAY_MAX_DEMAND_RECEIVED_ATTRIBUTE_ID (0x0463)
+#define ZCL_PREVIOUS_DAY_MAX_DEMAND_RECEIVED_TIME_ATTRIBUTE_ID (0x0464)
+#define ZCL_MAX_NUMBER_OF_PERIODS_DELIVERED_ATTRIBUTE_ID (0x0500)
+#define ZCL_CURRENT_DEMAND_DELIVERED_ATTRIBUTE_ID (0x0600)
+#define ZCL_DEMAND_LIMIT_ATTRIBUTE_ID (0x0601)
+#define ZCL_DEMAND_INTEGRATION_PERIOD_ATTRIBUTE_ID (0x0602)
+#define ZCL_NUMBER_OF_DEMAND_SUBINTERVALS_ATTRIBUTE_ID (0x0603)
+#define ZCL_DEMAND_LIMIT_ARM_DURATION_IN_MINUTES_ATTRIBUTE_ID (0x0604)
+#define ZCL_LOAD_LIMIT_SUPPLY_STATE_ATTRIBUTE_ID (0x0605)
+#define ZCL_LOAD_LIMIT_COUNTER_ATTRIBUTE_ID (0x0606)
+#define ZCL_SUPPLY_TAMPER_STATE_ATTRIBUTE_ID (0x0607)
+#define ZCL_SUPPLY_DEPLETION_STATE_ATTRIBUTE_ID (0x0608)
+#define ZCL_SUPPLY_UNCONTROLLED_FLOW_STATE_ATTRIBUTE_ID (0x0609)
+#define ZCL_CURRENT_NO_TIER_BLOCK1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0700)
+#define ZCL_CURRENT_NO_TIER_BLOCK2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0701)
+#define ZCL_CURRENT_NO_TIER_BLOCK3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0702)
+#define ZCL_CURRENT_NO_TIER_BLOCK4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0703)
+#define ZCL_CURRENT_NO_TIER_BLOCK5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0704)
+#define ZCL_CURRENT_NO_TIER_BLOCK6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0705)
+#define ZCL_CURRENT_NO_TIER_BLOCK7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0706)
+#define ZCL_CURRENT_NO_TIER_BLOCK8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0707)
+#define ZCL_CURRENT_NO_TIER_BLOCK9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0708)
+#define ZCL_CURRENT_NO_TIER_BLOCK10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0709)
+#define ZCL_CURRENT_NO_TIER_BLOCK11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x070A)
+#define ZCL_CURRENT_NO_TIER_BLOCK12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x070B)
+#define ZCL_CURRENT_NO_TIER_BLOCK13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x070C)
+#define ZCL_CURRENT_NO_TIER_BLOCK14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x070D)
+#define ZCL_CURRENT_NO_TIER_BLOCK15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x070E)
+#define ZCL_CURRENT_NO_TIER_BLOCK16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x070F)
+#define ZCL_CURRENT_TIER1_BLOCK1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0710)
+#define ZCL_CURRENT_TIER1_BLOCK2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0711)
+#define ZCL_CURRENT_TIER1_BLOCK3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0712)
+#define ZCL_CURRENT_TIER1_BLOCK4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0713)
+#define ZCL_CURRENT_TIER1_BLOCK5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0714)
+#define ZCL_CURRENT_TIER1_BLOCK6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0715)
+#define ZCL_CURRENT_TIER1_BLOCK7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0716)
+#define ZCL_CURRENT_TIER1_BLOCK8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0717)
+#define ZCL_CURRENT_TIER1_BLOCK9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0718)
+#define ZCL_CURRENT_TIER1_BLOCK10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0719)
+#define ZCL_CURRENT_TIER1_BLOCK11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x071A)
+#define ZCL_CURRENT_TIER1_BLOCK12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x071B)
+#define ZCL_CURRENT_TIER1_BLOCK13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x071C)
+#define ZCL_CURRENT_TIER1_BLOCK14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x071D)
+#define ZCL_CURRENT_TIER1_BLOCK15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x071E)
+#define ZCL_CURRENT_TIER1_BLOCK16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x071F)
+#define ZCL_CURRENT_TIER2_BLOCK1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0720)
+#define ZCL_CURRENT_TIER2_BLOCK2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0721)
+#define ZCL_CURRENT_TIER2_BLOCK3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0722)
+#define ZCL_CURRENT_TIER2_BLOCK4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0723)
+#define ZCL_CURRENT_TIER2_BLOCK5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0724)
+#define ZCL_CURRENT_TIER2_BLOCK6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0725)
+#define ZCL_CURRENT_TIER2_BLOCK7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0726)
+#define ZCL_CURRENT_TIER2_BLOCK8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0727)
+#define ZCL_CURRENT_TIER2_BLOCK9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0728)
+#define ZCL_CURRENT_TIER2_BLOCK10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0729)
+#define ZCL_CURRENT_TIER2_BLOCK11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x072A)
+#define ZCL_CURRENT_TIER2_BLOCK12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x072B)
+#define ZCL_CURRENT_TIER2_BLOCK13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x072C)
+#define ZCL_CURRENT_TIER2_BLOCK14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x072D)
+#define ZCL_CURRENT_TIER2_BLOCK15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x072E)
+#define ZCL_CURRENT_TIER2_BLOCK16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x072F)
+#define ZCL_CURRENT_TIER3_BLOCK1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0730)
+#define ZCL_CURRENT_TIER3_BLOCK2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0731)
+#define ZCL_CURRENT_TIER3_BLOCK3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0732)
+#define ZCL_CURRENT_TIER3_BLOCK4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0733)
+#define ZCL_CURRENT_TIER3_BLOCK5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0734)
+#define ZCL_CURRENT_TIER3_BLOCK6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0735)
+#define ZCL_CURRENT_TIER3_BLOCK7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0736)
+#define ZCL_CURRENT_TIER3_BLOCK8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0737)
+#define ZCL_CURRENT_TIER3_BLOCK9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0738)
+#define ZCL_CURRENT_TIER3_BLOCK10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0739)
+#define ZCL_CURRENT_TIER3_BLOCK11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x073A)
+#define ZCL_CURRENT_TIER3_BLOCK12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x073B)
+#define ZCL_CURRENT_TIER3_BLOCK13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x073C)
+#define ZCL_CURRENT_TIER3_BLOCK14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x073D)
+#define ZCL_CURRENT_TIER3_BLOCK15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x073E)
+#define ZCL_CURRENT_TIER3_BLOCK16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x073F)
+#define ZCL_CURRENT_TIER4_BLOCK1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0740)
+#define ZCL_CURRENT_TIER4_BLOCK2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0741)
+#define ZCL_CURRENT_TIER4_BLOCK3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0742)
+#define ZCL_CURRENT_TIER4_BLOCK4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0743)
+#define ZCL_CURRENT_TIER4_BLOCK5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0744)
+#define ZCL_CURRENT_TIER4_BLOCK6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0745)
+#define ZCL_CURRENT_TIER4_BLOCK7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0746)
+#define ZCL_CURRENT_TIER4_BLOCK8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0747)
+#define ZCL_CURRENT_TIER4_BLOCK9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0748)
+#define ZCL_CURRENT_TIER4_BLOCK10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0749)
+#define ZCL_CURRENT_TIER4_BLOCK11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x074A)
+#define ZCL_CURRENT_TIER4_BLOCK12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x074B)
+#define ZCL_CURRENT_TIER4_BLOCK13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x074C)
+#define ZCL_CURRENT_TIER4_BLOCK14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x074D)
+#define ZCL_CURRENT_TIER4_BLOCK15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x074E)
+#define ZCL_CURRENT_TIER4_BLOCK16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x074F)
+#define ZCL_CURRENT_TIER5_BLOCK1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0750)
+#define ZCL_CURRENT_TIER5_BLOCK2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0751)
+#define ZCL_CURRENT_TIER5_BLOCK3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0752)
+#define ZCL_CURRENT_TIER5_BLOCK4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0753)
+#define ZCL_CURRENT_TIER5_BLOCK5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0754)
+#define ZCL_CURRENT_TIER5_BLOCK6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0755)
+#define ZCL_CURRENT_TIER5_BLOCK7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0756)
+#define ZCL_CURRENT_TIER5_BLOCK8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0757)
+#define ZCL_CURRENT_TIER5_BLOCK9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0758)
+#define ZCL_CURRENT_TIER5_BLOCK10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0759)
+#define ZCL_CURRENT_TIER5_BLOCK11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x075A)
+#define ZCL_CURRENT_TIER5_BLOCK12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x075B)
+#define ZCL_CURRENT_TIER5_BLOCK13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x075C)
+#define ZCL_CURRENT_TIER5_BLOCK14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x075D)
+#define ZCL_CURRENT_TIER5_BLOCK15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x075E)
+#define ZCL_CURRENT_TIER5_BLOCK16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x075F)
+#define ZCL_CURRENT_TIER6_BLOCK1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0760)
+#define ZCL_CURRENT_TIER6_BLOCK2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0761)
+#define ZCL_CURRENT_TIER6_BLOCK3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0762)
+#define ZCL_CURRENT_TIER6_BLOCK4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0763)
+#define ZCL_CURRENT_TIER6_BLOCK5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0764)
+#define ZCL_CURRENT_TIER6_BLOCK6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0765)
+#define ZCL_CURRENT_TIER6_BLOCK7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0766)
+#define ZCL_CURRENT_TIER6_BLOCK8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0767)
+#define ZCL_CURRENT_TIER6_BLOCK9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0768)
+#define ZCL_CURRENT_TIER6_BLOCK10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0769)
+#define ZCL_CURRENT_TIER6_BLOCK11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x076A)
+#define ZCL_CURRENT_TIER6_BLOCK12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x076B)
+#define ZCL_CURRENT_TIER6_BLOCK13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x076C)
+#define ZCL_CURRENT_TIER6_BLOCK14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x076D)
+#define ZCL_CURRENT_TIER6_BLOCK15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x076E)
+#define ZCL_CURRENT_TIER6_BLOCK16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x076F)
+#define ZCL_CURRENT_TIER7_BLOCK1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0770)
+#define ZCL_CURRENT_TIER7_BLOCK2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0771)
+#define ZCL_CURRENT_TIER7_BLOCK3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0772)
+#define ZCL_CURRENT_TIER7_BLOCK4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0773)
+#define ZCL_CURRENT_TIER7_BLOCK5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0774)
+#define ZCL_CURRENT_TIER7_BLOCK6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0775)
+#define ZCL_CURRENT_TIER7_BLOCK7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0776)
+#define ZCL_CURRENT_TIER7_BLOCK8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0777)
+#define ZCL_CURRENT_TIER7_BLOCK9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0778)
+#define ZCL_CURRENT_TIER7_BLOCK10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0779)
+#define ZCL_CURRENT_TIER7_BLOCK11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x077A)
+#define ZCL_CURRENT_TIER7_BLOCK12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x077B)
+#define ZCL_CURRENT_TIER7_BLOCK13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x077C)
+#define ZCL_CURRENT_TIER7_BLOCK14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x077D)
+#define ZCL_CURRENT_TIER7_BLOCK15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x077E)
+#define ZCL_CURRENT_TIER7_BLOCK16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x077F)
+#define ZCL_CURRENT_TIER8_BLOCK1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0780)
+#define ZCL_CURRENT_TIER8_BLOCK2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0781)
+#define ZCL_CURRENT_TIER8_BLOCK3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0782)
+#define ZCL_CURRENT_TIER8_BLOCK4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0783)
+#define ZCL_CURRENT_TIER8_BLOCK5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0784)
+#define ZCL_CURRENT_TIER8_BLOCK6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0785)
+#define ZCL_CURRENT_TIER8_BLOCK7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0786)
+#define ZCL_CURRENT_TIER8_BLOCK8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0787)
+#define ZCL_CURRENT_TIER8_BLOCK9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0788)
+#define ZCL_CURRENT_TIER8_BLOCK10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0789)
+#define ZCL_CURRENT_TIER8_BLOCK11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x078A)
+#define ZCL_CURRENT_TIER8_BLOCK12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x078B)
+#define ZCL_CURRENT_TIER8_BLOCK13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x078C)
+#define ZCL_CURRENT_TIER8_BLOCK14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x078D)
+#define ZCL_CURRENT_TIER8_BLOCK15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x078E)
+#define ZCL_CURRENT_TIER8_BLOCK16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x078F)
+#define ZCL_CURRENT_TIER9_BLOCK1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0790)
+#define ZCL_CURRENT_TIER9_BLOCK2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0791)
+#define ZCL_CURRENT_TIER9_BLOCK3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0792)
+#define ZCL_CURRENT_TIER9_BLOCK4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0793)
+#define ZCL_CURRENT_TIER9_BLOCK5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0794)
+#define ZCL_CURRENT_TIER9_BLOCK6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0795)
+#define ZCL_CURRENT_TIER9_BLOCK7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0796)
+#define ZCL_CURRENT_TIER9_BLOCK8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0797)
+#define ZCL_CURRENT_TIER9_BLOCK9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0798)
+#define ZCL_CURRENT_TIER9_BLOCK10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0799)
+#define ZCL_CURRENT_TIER9_BLOCK11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x079A)
+#define ZCL_CURRENT_TIER9_BLOCK12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x079B)
+#define ZCL_CURRENT_TIER9_BLOCK13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x079C)
+#define ZCL_CURRENT_TIER9_BLOCK14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x079D)
+#define ZCL_CURRENT_TIER9_BLOCK15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x079E)
+#define ZCL_CURRENT_TIER9_BLOCK16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x079F)
+#define ZCL_CURRENT_TIER10_BLOCK1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07A0)
+#define ZCL_CURRENT_TIER10_BLOCK2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07A1)
+#define ZCL_CURRENT_TIER10_BLOCK3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07A2)
+#define ZCL_CURRENT_TIER10_BLOCK4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07A3)
+#define ZCL_CURRENT_TIER10_BLOCK5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07A4)
+#define ZCL_CURRENT_TIER10_BLOCK6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07A5)
+#define ZCL_CURRENT_TIER10_BLOCK7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07A6)
+#define ZCL_CURRENT_TIER10_BLOCK8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07A7)
+#define ZCL_CURRENT_TIER10_BLOCK9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07A8)
+#define ZCL_CURRENT_TIER10_BLOCK10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07A9)
+#define ZCL_CURRENT_TIER10_BLOCK11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07AA)
+#define ZCL_CURRENT_TIER10_BLOCK12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07AB)
+#define ZCL_CURRENT_TIER10_BLOCK13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07AC)
+#define ZCL_CURRENT_TIER10_BLOCK14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07AD)
+#define ZCL_CURRENT_TIER10_BLOCK15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07AE)
+#define ZCL_CURRENT_TIER10_BLOCK16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07AF)
+#define ZCL_CURRENT_TIER11_BLOCK1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07B0)
+#define ZCL_CURRENT_TIER11_BLOCK2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07B1)
+#define ZCL_CURRENT_TIER11_BLOCK3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07B2)
+#define ZCL_CURRENT_TIER11_BLOCK4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07B3)
+#define ZCL_CURRENT_TIER11_BLOCK5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07B4)
+#define ZCL_CURRENT_TIER11_BLOCK6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07B5)
+#define ZCL_CURRENT_TIER11_BLOCK7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07B6)
+#define ZCL_CURRENT_TIER11_BLOCK8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07B7)
+#define ZCL_CURRENT_TIER11_BLOCK9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07B8)
+#define ZCL_CURRENT_TIER11_BLOCK10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07B9)
+#define ZCL_CURRENT_TIER11_BLOCK11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07BA)
+#define ZCL_CURRENT_TIER11_BLOCK12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07BB)
+#define ZCL_CURRENT_TIER11_BLOCK13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07BC)
+#define ZCL_CURRENT_TIER11_BLOCK14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07BD)
+#define ZCL_CURRENT_TIER11_BLOCK15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07BE)
+#define ZCL_CURRENT_TIER11_BLOCK16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07BF)
+#define ZCL_CURRENT_TIER12_BLOCK1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07C0)
+#define ZCL_CURRENT_TIER12_BLOCK2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07C1)
+#define ZCL_CURRENT_TIER12_BLOCK3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07C2)
+#define ZCL_CURRENT_TIER12_BLOCK4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07C3)
+#define ZCL_CURRENT_TIER12_BLOCK5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07C4)
+#define ZCL_CURRENT_TIER12_BLOCK6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07C5)
+#define ZCL_CURRENT_TIER12_BLOCK7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07C6)
+#define ZCL_CURRENT_TIER12_BLOCK8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07C7)
+#define ZCL_CURRENT_TIER12_BLOCK9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07C8)
+#define ZCL_CURRENT_TIER12_BLOCK10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07C9)
+#define ZCL_CURRENT_TIER12_BLOCK11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07CA)
+#define ZCL_CURRENT_TIER12_BLOCK12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07CB)
+#define ZCL_CURRENT_TIER12_BLOCK13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07CC)
+#define ZCL_CURRENT_TIER12_BLOCK14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07CD)
+#define ZCL_CURRENT_TIER12_BLOCK15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07CE)
+#define ZCL_CURRENT_TIER12_BLOCK16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07CF)
+#define ZCL_CURRENT_TIER13_BLOCK1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07D0)
+#define ZCL_CURRENT_TIER13_BLOCK2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07D1)
+#define ZCL_CURRENT_TIER13_BLOCK3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07D2)
+#define ZCL_CURRENT_TIER13_BLOCK4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07D3)
+#define ZCL_CURRENT_TIER13_BLOCK5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07D4)
+#define ZCL_CURRENT_TIER13_BLOCK6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07D5)
+#define ZCL_CURRENT_TIER13_BLOCK7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07D6)
+#define ZCL_CURRENT_TIER13_BLOCK8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07D7)
+#define ZCL_CURRENT_TIER13_BLOCK9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07D8)
+#define ZCL_CURRENT_TIER13_BLOCK10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07D9)
+#define ZCL_CURRENT_TIER13_BLOCK11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07DA)
+#define ZCL_CURRENT_TIER13_BLOCK12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07DB)
+#define ZCL_CURRENT_TIER13_BLOCK13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07DC)
+#define ZCL_CURRENT_TIER13_BLOCK14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07DD)
+#define ZCL_CURRENT_TIER13_BLOCK15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07DE)
+#define ZCL_CURRENT_TIER13_BLOCK16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07DF)
+#define ZCL_CURRENT_TIER14_BLOCK1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07E0)
+#define ZCL_CURRENT_TIER14_BLOCK2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07E1)
+#define ZCL_CURRENT_TIER14_BLOCK3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07E2)
+#define ZCL_CURRENT_TIER14_BLOCK4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07E3)
+#define ZCL_CURRENT_TIER14_BLOCK5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07E4)
+#define ZCL_CURRENT_TIER14_BLOCK6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07E5)
+#define ZCL_CURRENT_TIER14_BLOCK7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07E6)
+#define ZCL_CURRENT_TIER14_BLOCK8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07E7)
+#define ZCL_CURRENT_TIER14_BLOCK9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07E8)
+#define ZCL_CURRENT_TIER14_BLOCK10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07E9)
+#define ZCL_CURRENT_TIER14_BLOCK11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07EA)
+#define ZCL_CURRENT_TIER14_BLOCK12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07EB)
+#define ZCL_CURRENT_TIER14_BLOCK13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07EC)
+#define ZCL_CURRENT_TIER14_BLOCK14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07ED)
+#define ZCL_CURRENT_TIER14_BLOCK15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07EE)
+#define ZCL_CURRENT_TIER14_BLOCK16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07EF)
+#define ZCL_CURRENT_TIER15_BLOCK1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07F0)
+#define ZCL_CURRENT_TIER15_BLOCK2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07F1)
+#define ZCL_CURRENT_TIER15_BLOCK3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07F2)
+#define ZCL_CURRENT_TIER15_BLOCK4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07F3)
+#define ZCL_CURRENT_TIER15_BLOCK5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07F4)
+#define ZCL_CURRENT_TIER15_BLOCK6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07F5)
+#define ZCL_CURRENT_TIER15_BLOCK7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07F6)
+#define ZCL_CURRENT_TIER15_BLOCK8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07F7)
+#define ZCL_CURRENT_TIER15_BLOCK9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07F8)
+#define ZCL_CURRENT_TIER15_BLOCK10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07F9)
+#define ZCL_CURRENT_TIER15_BLOCK11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07FA)
+#define ZCL_CURRENT_TIER15_BLOCK12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07FB)
+#define ZCL_CURRENT_TIER15_BLOCK13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07FC)
+#define ZCL_CURRENT_TIER15_BLOCK14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07FD)
+#define ZCL_CURRENT_TIER15_BLOCK15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07FE)
+#define ZCL_CURRENT_TIER15_BLOCK16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07FF)
+#define ZCL_GENERIC_ALARM_MASK_ATTRIBUTE_ID (0x0800)
+#define ZCL_ELECTRICITY_ALARM_MASK_ATTRIBUTE_ID (0x0801)
+#define ZCL_GENERIC_FLOW_PRESSURE_ALARM_MASK_ATTRIBUTE_ID (0x0802)
+#define ZCL_WATER_SPECIFIC_ALARM_MASK_ATTRIBUTE_ID (0x0803)
+#define ZCL_HEAT_AND_COOLING_SPECIFIC_ALARM_MASK_ATTRIBUTE_ID (0x0804)
+#define ZCL_GAS_SPECIFIC_ALARM_MASK_ATTRIBUTE_ID (0x0805)
+#define ZCL_METERING_EXTENDED_GENERIC_ALARM_MASK_ATTRIBUTE_ID (0x0806)
+#define ZCL_METERING_MANUFACTURE_ALARM_MASK_ATTRIBUTE_ID (0x0807)
+#define ZCL_CURRENT_NO_TIER_BLOCK1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0900)
+#define ZCL_CURRENT_NO_TIER_BLOCK2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0901)
+#define ZCL_CURRENT_NO_TIER_BLOCK3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0902)
+#define ZCL_CURRENT_NO_TIER_BLOCK4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0903)
+#define ZCL_CURRENT_NO_TIER_BLOCK5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0904)
+#define ZCL_CURRENT_NO_TIER_BLOCK6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0905)
+#define ZCL_CURRENT_NO_TIER_BLOCK7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0906)
+#define ZCL_CURRENT_NO_TIER_BLOCK8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0907)
+#define ZCL_CURRENT_NO_TIER_BLOCK9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0908)
+#define ZCL_CURRENT_NO_TIER_BLOCK10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0909)
+#define ZCL_CURRENT_NO_TIER_BLOCK11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x090A)
+#define ZCL_CURRENT_NO_TIER_BLOCK12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x090B)
+#define ZCL_CURRENT_NO_TIER_BLOCK13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x090C)
+#define ZCL_CURRENT_NO_TIER_BLOCK14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x090D)
+#define ZCL_CURRENT_NO_TIER_BLOCK15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x090E)
+#define ZCL_CURRENT_NO_TIER_BLOCK16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x090F)
+#define ZCL_CURRENT_TIER1_BLOCK1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0910)
+#define ZCL_CURRENT_TIER1_BLOCK2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0911)
+#define ZCL_CURRENT_TIER1_BLOCK3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0912)
+#define ZCL_CURRENT_TIER1_BLOCK4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0913)
+#define ZCL_CURRENT_TIER1_BLOCK5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0914)
+#define ZCL_CURRENT_TIER1_BLOCK6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0915)
+#define ZCL_CURRENT_TIER1_BLOCK7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0916)
+#define ZCL_CURRENT_TIER1_BLOCK8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0917)
+#define ZCL_CURRENT_TIER1_BLOCK9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0918)
+#define ZCL_CURRENT_TIER1_BLOCK10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0919)
+#define ZCL_CURRENT_TIER1_BLOCK11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x091A)
+#define ZCL_CURRENT_TIER1_BLOCK12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x091B)
+#define ZCL_CURRENT_TIER1_BLOCK13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x091C)
+#define ZCL_CURRENT_TIER1_BLOCK14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x091D)
+#define ZCL_CURRENT_TIER1_BLOCK15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x091E)
+#define ZCL_CURRENT_TIER1_BLOCK16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x091F)
+#define ZCL_CURRENT_TIER2_BLOCK1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0920)
+#define ZCL_CURRENT_TIER2_BLOCK2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0921)
+#define ZCL_CURRENT_TIER2_BLOCK3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0922)
+#define ZCL_CURRENT_TIER2_BLOCK4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0923)
+#define ZCL_CURRENT_TIER2_BLOCK5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0924)
+#define ZCL_CURRENT_TIER2_BLOCK6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0925)
+#define ZCL_CURRENT_TIER2_BLOCK7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0926)
+#define ZCL_CURRENT_TIER2_BLOCK8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0927)
+#define ZCL_CURRENT_TIER2_BLOCK9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0928)
+#define ZCL_CURRENT_TIER2_BLOCK10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0929)
+#define ZCL_CURRENT_TIER2_BLOCK11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x092A)
+#define ZCL_CURRENT_TIER2_BLOCK12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x092B)
+#define ZCL_CURRENT_TIER2_BLOCK13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x092C)
+#define ZCL_CURRENT_TIER2_BLOCK14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x092D)
+#define ZCL_CURRENT_TIER2_BLOCK15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x092E)
+#define ZCL_CURRENT_TIER2_BLOCK16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x092F)
+#define ZCL_CURRENT_TIER3_BLOCK1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0930)
+#define ZCL_CURRENT_TIER3_BLOCK2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0931)
+#define ZCL_CURRENT_TIER3_BLOCK3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0932)
+#define ZCL_CURRENT_TIER3_BLOCK4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0933)
+#define ZCL_CURRENT_TIER3_BLOCK5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0934)
+#define ZCL_CURRENT_TIER3_BLOCK6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0935)
+#define ZCL_CURRENT_TIER3_BLOCK7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0936)
+#define ZCL_CURRENT_TIER3_BLOCK8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0937)
+#define ZCL_CURRENT_TIER3_BLOCK9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0938)
+#define ZCL_CURRENT_TIER3_BLOCK10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0939)
+#define ZCL_CURRENT_TIER3_BLOCK11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x093A)
+#define ZCL_CURRENT_TIER3_BLOCK12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x093B)
+#define ZCL_CURRENT_TIER3_BLOCK13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x093C)
+#define ZCL_CURRENT_TIER3_BLOCK14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x093D)
+#define ZCL_CURRENT_TIER3_BLOCK15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x093E)
+#define ZCL_CURRENT_TIER3_BLOCK16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x093F)
+#define ZCL_CURRENT_TIER4_BLOCK1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0940)
+#define ZCL_CURRENT_TIER4_BLOCK2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0941)
+#define ZCL_CURRENT_TIER4_BLOCK3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0942)
+#define ZCL_CURRENT_TIER4_BLOCK4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0943)
+#define ZCL_CURRENT_TIER4_BLOCK5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0944)
+#define ZCL_CURRENT_TIER4_BLOCK6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0945)
+#define ZCL_CURRENT_TIER4_BLOCK7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0946)
+#define ZCL_CURRENT_TIER4_BLOCK8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0947)
+#define ZCL_CURRENT_TIER4_BLOCK9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0948)
+#define ZCL_CURRENT_TIER4_BLOCK10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0949)
+#define ZCL_CURRENT_TIER4_BLOCK11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x094A)
+#define ZCL_CURRENT_TIER4_BLOCK12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x094B)
+#define ZCL_CURRENT_TIER4_BLOCK13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x094C)
+#define ZCL_CURRENT_TIER4_BLOCK14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x094D)
+#define ZCL_CURRENT_TIER4_BLOCK15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x094E)
+#define ZCL_CURRENT_TIER4_BLOCK16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x094F)
+#define ZCL_CURRENT_TIER5_BLOCK1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0950)
+#define ZCL_CURRENT_TIER5_BLOCK2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0951)
+#define ZCL_CURRENT_TIER5_BLOCK3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0952)
+#define ZCL_CURRENT_TIER5_BLOCK4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0953)
+#define ZCL_CURRENT_TIER5_BLOCK5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0954)
+#define ZCL_CURRENT_TIER5_BLOCK6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0955)
+#define ZCL_CURRENT_TIER5_BLOCK7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0956)
+#define ZCL_CURRENT_TIER5_BLOCK8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0957)
+#define ZCL_CURRENT_TIER5_BLOCK9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0958)
+#define ZCL_CURRENT_TIER5_BLOCK10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0959)
+#define ZCL_CURRENT_TIER5_BLOCK11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x095A)
+#define ZCL_CURRENT_TIER5_BLOCK12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x095B)
+#define ZCL_CURRENT_TIER5_BLOCK13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x095C)
+#define ZCL_CURRENT_TIER5_BLOCK14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x095D)
+#define ZCL_CURRENT_TIER5_BLOCK15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x095E)
+#define ZCL_CURRENT_TIER5_BLOCK16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x095F)
+#define ZCL_CURRENT_TIER6_BLOCK1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0960)
+#define ZCL_CURRENT_TIER6_BLOCK2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0961)
+#define ZCL_CURRENT_TIER6_BLOCK3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0962)
+#define ZCL_CURRENT_TIER6_BLOCK4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0963)
+#define ZCL_CURRENT_TIER6_BLOCK5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0964)
+#define ZCL_CURRENT_TIER6_BLOCK6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0965)
+#define ZCL_CURRENT_TIER6_BLOCK7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0966)
+#define ZCL_CURRENT_TIER6_BLOCK8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0967)
+#define ZCL_CURRENT_TIER6_BLOCK9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0968)
+#define ZCL_CURRENT_TIER6_BLOCK10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0969)
+#define ZCL_CURRENT_TIER6_BLOCK11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x096A)
+#define ZCL_CURRENT_TIER6_BLOCK12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x096B)
+#define ZCL_CURRENT_TIER6_BLOCK13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x096C)
+#define ZCL_CURRENT_TIER6_BLOCK14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x096D)
+#define ZCL_CURRENT_TIER6_BLOCK15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x096E)
+#define ZCL_CURRENT_TIER6_BLOCK16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x096F)
+#define ZCL_CURRENT_TIER7_BLOCK1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0970)
+#define ZCL_CURRENT_TIER7_BLOCK2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0971)
+#define ZCL_CURRENT_TIER7_BLOCK3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0972)
+#define ZCL_CURRENT_TIER7_BLOCK4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0973)
+#define ZCL_CURRENT_TIER7_BLOCK5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0974)
+#define ZCL_CURRENT_TIER7_BLOCK6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0975)
+#define ZCL_CURRENT_TIER7_BLOCK7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0976)
+#define ZCL_CURRENT_TIER7_BLOCK8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0977)
+#define ZCL_CURRENT_TIER7_BLOCK9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0978)
+#define ZCL_CURRENT_TIER7_BLOCK10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0979)
+#define ZCL_CURRENT_TIER7_BLOCK11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x097A)
+#define ZCL_CURRENT_TIER7_BLOCK12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x097B)
+#define ZCL_CURRENT_TIER7_BLOCK13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x097C)
+#define ZCL_CURRENT_TIER7_BLOCK14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x097D)
+#define ZCL_CURRENT_TIER7_BLOCK15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x097E)
+#define ZCL_CURRENT_TIER7_BLOCK16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x097F)
+#define ZCL_CURRENT_TIER8_BLOCK1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0980)
+#define ZCL_CURRENT_TIER8_BLOCK2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0981)
+#define ZCL_CURRENT_TIER8_BLOCK3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0982)
+#define ZCL_CURRENT_TIER8_BLOCK4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0983)
+#define ZCL_CURRENT_TIER8_BLOCK5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0984)
+#define ZCL_CURRENT_TIER8_BLOCK6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0985)
+#define ZCL_CURRENT_TIER8_BLOCK7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0986)
+#define ZCL_CURRENT_TIER8_BLOCK8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0987)
+#define ZCL_CURRENT_TIER8_BLOCK9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0988)
+#define ZCL_CURRENT_TIER8_BLOCK10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0989)
+#define ZCL_CURRENT_TIER8_BLOCK11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x098A)
+#define ZCL_CURRENT_TIER8_BLOCK12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x098B)
+#define ZCL_CURRENT_TIER8_BLOCK13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x098C)
+#define ZCL_CURRENT_TIER8_BLOCK14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x098D)
+#define ZCL_CURRENT_TIER8_BLOCK15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x098E)
+#define ZCL_CURRENT_TIER8_BLOCK16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x098F)
+#define ZCL_CURRENT_TIER9_BLOCK1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0990)
+#define ZCL_CURRENT_TIER9_BLOCK2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0991)
+#define ZCL_CURRENT_TIER9_BLOCK3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0992)
+#define ZCL_CURRENT_TIER9_BLOCK4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0993)
+#define ZCL_CURRENT_TIER9_BLOCK5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0994)
+#define ZCL_CURRENT_TIER9_BLOCK6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0995)
+#define ZCL_CURRENT_TIER9_BLOCK7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0996)
+#define ZCL_CURRENT_TIER9_BLOCK8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0997)
+#define ZCL_CURRENT_TIER9_BLOCK9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0998)
+#define ZCL_CURRENT_TIER9_BLOCK10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0999)
+#define ZCL_CURRENT_TIER9_BLOCK11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x099A)
+#define ZCL_CURRENT_TIER9_BLOCK12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x099B)
+#define ZCL_CURRENT_TIER9_BLOCK13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x099C)
+#define ZCL_CURRENT_TIER9_BLOCK14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x099D)
+#define ZCL_CURRENT_TIER9_BLOCK15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x099E)
+#define ZCL_CURRENT_TIER9_BLOCK16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x099F)
+#define ZCL_CURRENT_TIER10_BLOCK1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09A0)
+#define ZCL_CURRENT_TIER10_BLOCK2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09A1)
+#define ZCL_CURRENT_TIER10_BLOCK3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09A2)
+#define ZCL_CURRENT_TIER10_BLOCK4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09A3)
+#define ZCL_CURRENT_TIER10_BLOCK5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09A4)
+#define ZCL_CURRENT_TIER10_BLOCK6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09A5)
+#define ZCL_CURRENT_TIER10_BLOCK7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09A6)
+#define ZCL_CURRENT_TIER10_BLOCK8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09A7)
+#define ZCL_CURRENT_TIER10_BLOCK9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09A8)
+#define ZCL_CURRENT_TIER10_BLOCK10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09A9)
+#define ZCL_CURRENT_TIER10_BLOCK11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09AA)
+#define ZCL_CURRENT_TIER10_BLOCK12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09AB)
+#define ZCL_CURRENT_TIER10_BLOCK13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09AC)
+#define ZCL_CURRENT_TIER10_BLOCK14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09AD)
+#define ZCL_CURRENT_TIER10_BLOCK15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09AE)
+#define ZCL_CURRENT_TIER10_BLOCK16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09AF)
+#define ZCL_CURRENT_TIER11_BLOCK1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09B0)
+#define ZCL_CURRENT_TIER11_BLOCK2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09B1)
+#define ZCL_CURRENT_TIER11_BLOCK3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09B2)
+#define ZCL_CURRENT_TIER11_BLOCK4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09B3)
+#define ZCL_CURRENT_TIER11_BLOCK5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09B4)
+#define ZCL_CURRENT_TIER11_BLOCK6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09B5)
+#define ZCL_CURRENT_TIER11_BLOCK7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09B6)
+#define ZCL_CURRENT_TIER11_BLOCK8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09B7)
+#define ZCL_CURRENT_TIER11_BLOCK9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09B8)
+#define ZCL_CURRENT_TIER11_BLOCK10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09B9)
+#define ZCL_CURRENT_TIER11_BLOCK11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09BA)
+#define ZCL_CURRENT_TIER11_BLOCK12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09BB)
+#define ZCL_CURRENT_TIER11_BLOCK13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09BC)
+#define ZCL_CURRENT_TIER11_BLOCK14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09BD)
+#define ZCL_CURRENT_TIER11_BLOCK15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09BE)
+#define ZCL_CURRENT_TIER11_BLOCK16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09BF)
+#define ZCL_CURRENT_TIER12_BLOCK1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09C0)
+#define ZCL_CURRENT_TIER12_BLOCK2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09C1)
+#define ZCL_CURRENT_TIER12_BLOCK3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09C2)
+#define ZCL_CURRENT_TIER12_BLOCK4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09C3)
+#define ZCL_CURRENT_TIER12_BLOCK5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09C4)
+#define ZCL_CURRENT_TIER12_BLOCK6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09C5)
+#define ZCL_CURRENT_TIER12_BLOCK7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09C6)
+#define ZCL_CURRENT_TIER12_BLOCK8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09C7)
+#define ZCL_CURRENT_TIER12_BLOCK9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09C8)
+#define ZCL_CURRENT_TIER12_BLOCK10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09C9)
+#define ZCL_CURRENT_TIER12_BLOCK11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09CA)
+#define ZCL_CURRENT_TIER12_BLOCK12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09CB)
+#define ZCL_CURRENT_TIER12_BLOCK13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09CC)
+#define ZCL_CURRENT_TIER12_BLOCK14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09CD)
+#define ZCL_CURRENT_TIER12_BLOCK15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09CE)
+#define ZCL_CURRENT_TIER12_BLOCK16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09CF)
+#define ZCL_CURRENT_TIER13_BLOCK1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09D0)
+#define ZCL_CURRENT_TIER13_BLOCK2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09D1)
+#define ZCL_CURRENT_TIER13_BLOCK3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09D2)
+#define ZCL_CURRENT_TIER13_BLOCK4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09D3)
+#define ZCL_CURRENT_TIER13_BLOCK5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09D4)
+#define ZCL_CURRENT_TIER13_BLOCK6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09D5)
+#define ZCL_CURRENT_TIER13_BLOCK7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09D6)
+#define ZCL_CURRENT_TIER13_BLOCK8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09D7)
+#define ZCL_CURRENT_TIER13_BLOCK9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09D8)
+#define ZCL_CURRENT_TIER13_BLOCK10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09D9)
+#define ZCL_CURRENT_TIER13_BLOCK11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09DA)
+#define ZCL_CURRENT_TIER13_BLOCK12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09DB)
+#define ZCL_CURRENT_TIER13_BLOCK13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09DC)
+#define ZCL_CURRENT_TIER13_BLOCK14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09DD)
+#define ZCL_CURRENT_TIER13_BLOCK15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09DE)
+#define ZCL_CURRENT_TIER13_BLOCK16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09DF)
+#define ZCL_CURRENT_TIER14_BLOCK1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09E0)
+#define ZCL_CURRENT_TIER14_BLOCK2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09E1)
+#define ZCL_CURRENT_TIER14_BLOCK3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09E2)
+#define ZCL_CURRENT_TIER14_BLOCK4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09E3)
+#define ZCL_CURRENT_TIER14_BLOCK5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09E4)
+#define ZCL_CURRENT_TIER14_BLOCK6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09E5)
+#define ZCL_CURRENT_TIER14_BLOCK7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09E6)
+#define ZCL_CURRENT_TIER14_BLOCK8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09E7)
+#define ZCL_CURRENT_TIER14_BLOCK9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09E8)
+#define ZCL_CURRENT_TIER14_BLOCK10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09E9)
+#define ZCL_CURRENT_TIER14_BLOCK11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09EA)
+#define ZCL_CURRENT_TIER14_BLOCK12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09EB)
+#define ZCL_CURRENT_TIER14_BLOCK13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09EC)
+#define ZCL_CURRENT_TIER14_BLOCK14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09ED)
+#define ZCL_CURRENT_TIER14_BLOCK15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09EE)
+#define ZCL_CURRENT_TIER14_BLOCK16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09EF)
+#define ZCL_CURRENT_TIER15_BLOCK1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09F0)
+#define ZCL_CURRENT_TIER15_BLOCK2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09F1)
+#define ZCL_CURRENT_TIER15_BLOCK3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09F2)
+#define ZCL_CURRENT_TIER15_BLOCK4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09F3)
+#define ZCL_CURRENT_TIER15_BLOCK5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09F4)
+#define ZCL_CURRENT_TIER15_BLOCK6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09F5)
+#define ZCL_CURRENT_TIER15_BLOCK7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09F6)
+#define ZCL_CURRENT_TIER15_BLOCK8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09F7)
+#define ZCL_CURRENT_TIER15_BLOCK9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09F8)
+#define ZCL_CURRENT_TIER15_BLOCK10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09F9)
+#define ZCL_CURRENT_TIER15_BLOCK11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09FA)
+#define ZCL_CURRENT_TIER15_BLOCK12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09FB)
+#define ZCL_CURRENT_TIER15_BLOCK13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09FC)
+#define ZCL_CURRENT_TIER15_BLOCK14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09FD)
+#define ZCL_CURRENT_TIER15_BLOCK15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09FE)
+#define ZCL_CURRENT_TIER15_BLOCK16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09FF)
+#define ZCL_BILL_TO_DATE_DELIVERED_ATTRIBUTE_ID (0x0A00)
+#define ZCL_BILL_TO_DATE_TIME_STAMP_DELIVERED_ATTRIBUTE_ID (0x0A01)
+#define ZCL_PROJECTED_BILL_DELIVERED_ATTRIBUTE_ID (0x0A02)
+#define ZCL_PROJECTED_BILL_TIME_STAMP_DELIVERED_ATTRIBUTE_ID (0x0A03)
+#define ZCL_BILL_DELIVERED_TRAILING_DIGIT_ATTRIBUTE_ID (0x0A04)
+#define ZCL_BILL_TO_DATE_RECEIVED_ATTRIBUTE_ID (0x0A10)
+#define ZCL_BILL_TO_DATE_TIME_STAMP_RECEIVED_ATTRIBUTE_ID (0x0A11)
+#define ZCL_PROJECTED_BILL_RECEIVED_ATTRIBUTE_ID (0x0A12)
+#define ZCL_PROJECTED_BILL_TIME_STAMP_RECEIVED_ATTRIBUTE_ID (0x0A13)
+#define ZCL_BILL_RECEIVED_TRAILING_DIGIT_ATTRIBUTE_ID (0x0A14)
+#define ZCL_PROPOSED_CHANGE_SUPPLY_IMPLEMENTATION_TIME_ATTRIBUTE_ID (0x0B00)
+#define ZCL_PROPOSED_CHANGE_SUPPLY_STATUS_ATTRIBUTE_ID (0x0B01)
+#define ZCL_UNCONTROLLED_FLOW_THESHOLD_ATTRIBUTE_ID (0x0B10)
+#define ZCL_UNCONTROLLED_FLOW_THESHOLD_UNIT_OF_MEASURE_ATTRIBUTE_ID (0x0B11)
+#define ZCL_UNCONTROLLED_FLOW_MULTIPLIER_ATTRIBUTE_ID (0x0B12)
+#define ZCL_UNCONTROLLED_FLOW_DIVISOR_ATTRIBUTE_ID (0x0B13)
+#define ZCL_FLOW_STABILIZATION_PERIOD_ATTRIBUTE_ID (0x0B14)
+#define ZCL_FLOW_MEASUREMENT_PERIOD_ATTRIBUTE_ID (0x0B15)
+#define ZCL_ALTERNATIVE_INSTANTANEOUS_DEMAND_ATTRIBUTE_ID (0x0C00)
+#define ZCL_CURRENT_ALTERNATIVE_DAY_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C01)
+#define ZCL_CURRENT_ALTERNATIVE_DAY_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C02)
+#define ZCL_PREVIOUS_DAY_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C03)
+#define ZCL_PREVIOUS_DAY_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C04)
+#define ZCL_CURRENT_ALTERNATIVE_PARTIAL_PROFILE_INTERVAL_START_TIME_DELIVERED_ATTRIBUTE_ID (0x0C05)
+#define ZCL_CURRENT_ALTERNATIVE_PARTIAL_PROFILE_INTERVAL_START_TIME_RECEIVED_ATTRIBUTE_ID (0x0C06)
+#define ZCL_CURRENT_ALTERNATIVE_PARTIAL_PROFILE_INTERVAL_VALUE_DELIVERED_ATTRIBUTE_ID (0x0C07)
+#define ZCL_CURRENT_ALTERNATIVE_PARTIAL_PROFILE_INTERVAL_VALUE_RECEIVED_ATTRIBUTE_ID (0x0C08)
+#define ZCL_CURRENT_ALTERNATIVE_DAY_MAX_PRESSURE_ATTRIBUTE_ID (0x0C09)
+#define ZCL_CURRENT_ALTERNATIVE_DAY_MIN_PRESSURE_ATTRIBUTE_ID (0x0C0A)
+#define ZCL_PREVIOUS_DAY_ALTERNATIVE_MAX_PRESSURE_ATTRIBUTE_ID (0x0C0B)
+#define ZCL_PREVIOUS_DAY_ALTERNATIVE_MIN_PRESSURE_ATTRIBUTE_ID (0x0C0C)
+#define ZCL_CURRENT_ALTERNATIVE_DAY_ALTERNATIVE_MAX_DEMAND_ATTRIBUTE_ID (0x0C0D)
+#define ZCL_PREVIOUS_DAY_ALTERNATIVE_MAX_DEMAND_ATTRIBUTE_ID (0x0C0E)
+#define ZCL_CURRENT_ALTERNATIVE_MONTH_MAX_DEMAND_ATTRIBUTE_ID (0x0C0F)
+#define ZCL_CURRENT_ALTERNATIVE_YEAR_MAX_DEMAND_ATTRIBUTE_ID (0x0C10)
+#define ZCL_PREVIOUS_DAY2_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C20)
+#define ZCL_PREVIOUS_DAY2_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C21)
+#define ZCL_PREVIOUS_DAY3_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C22)
+#define ZCL_PREVIOUS_DAY3_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C23)
+#define ZCL_PREVIOUS_DAY4_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C24)
+#define ZCL_PREVIOUS_DAY4_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C25)
+#define ZCL_PREVIOUS_DAY5_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C26)
+#define ZCL_PREVIOUS_DAY5_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C27)
+#define ZCL_PREVIOUS_DAY6_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C28)
+#define ZCL_PREVIOUS_DAY6_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C29)
+#define ZCL_PREVIOUS_DAY7_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C2A)
+#define ZCL_PREVIOUS_DAY7_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C2B)
+#define ZCL_PREVIOUS_DAY8_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C2C)
+#define ZCL_PREVIOUS_DAY8_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C2D)
+#define ZCL_CURRENT_WEEK_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C30)
+#define ZCL_CURRENT_WEEK_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C31)
+#define ZCL_PREVIOUS_WEEK_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C32)
+#define ZCL_PREVIOUS_WEEK_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C33)
+#define ZCL_PREVIOUS_WEEK2_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C34)
+#define ZCL_PREVIOUS_WEEK2_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C35)
+#define ZCL_PREVIOUS_WEEK3_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C36)
+#define ZCL_PREVIOUS_WEEK3_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C37)
+#define ZCL_PREVIOUS_WEEK4_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C38)
+#define ZCL_PREVIOUS_WEEK4_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C39)
+#define ZCL_PREVIOUS_WEEK5_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C3A)
+#define ZCL_PREVIOUS_WEEK5_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C3B)
+#define ZCL_CURRENT_MONTH_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C40)
+#define ZCL_CURRENT_MONTH_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C41)
+#define ZCL_PREVIOUS_MONTH_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C42)
+#define ZCL_PREVIOUS_MONTH_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C43)
+#define ZCL_PREVIOUS_MONTH2_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C44)
+#define ZCL_PREVIOUS_MONTH2_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C45)
+#define ZCL_PREVIOUS_MONTH3_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C46)
+#define ZCL_PREVIOUS_MONTH3_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C47)
+#define ZCL_PREVIOUS_MONTH4_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C48)
+#define ZCL_PREVIOUS_MONTH4_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C49)
+#define ZCL_PREVIOUS_MONTH5_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C4A)
+#define ZCL_PREVIOUS_MONTH5_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C4B)
+#define ZCL_PREVIOUS_MONTH6_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C4C)
+#define ZCL_PREVIOUS_MONTH6_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C4D)
+#define ZCL_PREVIOUS_MONTH7_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C4E)
+#define ZCL_PREVIOUS_MONTH7_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C4F)
+#define ZCL_PREVIOUS_MONTH8_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C50)
+#define ZCL_PREVIOUS_MONTH8_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C51)
+#define ZCL_PREVIOUS_MONTH9_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C52)
+#define ZCL_PREVIOUS_MONTH9_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C53)
+#define ZCL_PREVIOUS_MONTH10_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C54)
+#define ZCL_PREVIOUS_MONTH10_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C55)
+#define ZCL_PREVIOUS_MONTH11_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C56)
+#define ZCL_PREVIOUS_MONTH11_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C57)
+#define ZCL_PREVIOUS_MONTH12_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C58)
+#define ZCL_PREVIOUS_MONTH12_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C59)
+#define ZCL_PREVIOUS_MONTH13_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C5A)
+#define ZCL_PREVIOUS_MONTH13_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C5B)
+#define ZCL_CURRENT_DAY_ALTERNATIVE_MAX_DEMAND_DELIVERED_ATTRIBUTE_ID (0x0C5C)
+#define ZCL_CURRENT_DAY_ALTERNATIVE_MAX_DEMAND_DELIVERED_TIME_ATTRIBUTE_ID (0x0C5D)
+#define ZCL_CURRENT_DAY_ALTERNATIVE_MAX_DEMAND_RECEIVED_ATTRIBUTE_ID (0x0C5E)
+#define ZCL_CURRENT_DAY_ALTERNATIVE_MAX_DEMAND_RECEIVED_TIME_ATTRIBUTE_ID (0x0C5F)
+#define ZCL_PREVIOUS_DAY_ALTERNATIVE_MAX_DEMAND_DELIVERED_ATTRIBUTE_ID (0x0C60)
+#define ZCL_PREVIOUS_DAY_ALTERNATIVE_MAX_DEMAND_DELIVERED_TIME_ATTRIBUTE_ID (0x0C61)
+#define ZCL_PREVIOUS_DAY_ALTERNATIVE_MAX_DEMAND_RECEIVED_ATTRIBUTE_ID (0x0C62)
+#define ZCL_PREVIOUS_DAY_ALTERNATIVE_MAX_DEMAND_RECEIVED_TIME_ATTRIBUTE_ID (0x0C63)
+#define ZCL_CURRENT_ACTIVE_SUMMATION_Q1_ATTRIBUTE_ID (0x0D01)
+#define ZCL_CURRENT_ACTIVE_SUMMATION_Q2_ATTRIBUTE_ID (0x0D02)
+#define ZCL_CURRENT_ACTIVE_SUMMATION_Q3_ATTRIBUTE_ID (0x0D03)
+#define ZCL_CURRENT_ACTIVE_SUMMATION_Q4_ATTRIBUTE_ID (0x0D04)
+#define ZCL_CURRENT_REACTIVE_SUMMATION_Q1_ATTRIBUTE_ID (0x0D05)
+#define ZCL_CURRENT_REACTIVE_SUMMATION_Q2_ATTRIBUTE_ID (0x0D06)
+#define ZCL_CURRENT_REACTIVE_SUMMATION_Q3_ATTRIBUTE_ID (0x0D07)
+#define ZCL_CURRENT_REACTIVE_SUMMATION_Q4_ATTRIBUTE_ID (0x0D08)
+
+// Attribute ids for cluster: Messaging
+
+// Client attributes
+
+// Server attributes
+
+// Attribute ids for cluster: Tunneling
+
+// Client attributes
+
+// Server attributes
+#define ZCL_CLOSE_TUNNEL_TIMEOUT_ATTRIBUTE_ID (0x0000)
+
+// Attribute ids for cluster: Prepayment
+
+// Client attributes
+
+// Server attributes
+#define ZCL_PAYMENT_CONTROL_CONFIGURATION_ATTRIBUTE_ID (0x0000)
+#define ZCL_CREDIT_REMAINING_ATTRIBUTE_ID (0x0001)
+#define ZCL_EMERGENCY_CREDIT_REMAINING_ATTRIBUTE_ID (0x0002)
+#define ZCL_CREDIT_STATUS_ATTRIBUTE_ID (0x0003)
+#define ZCL_CREDIT_REMAINING_TIMESTAMP_ATTRIBUTE_ID (0x0004)
+#define ZCL_ACCUMULATED_DEBT_ATTRIBUTE_ID (0x0005)
+#define ZCL_OVERALL_DEBT_CAP_ATTRIBUTE_ID (0x0006)
+#define ZCL_EMERGENCY_CREDIT_LIMIT_ALLOWANCE_ATTRIBUTE_ID (0x0010)
+#define ZCL_EMERGENCY_CREDIT_THRESHOLD_ATTRIBUTE_ID (0x0011)
+#define ZCL_TOTAL_CREDIT_ADDED_ATTRIBUTE_ID (0x0020)
+#define ZCL_MAX_CREDIT_LIMIT_ATTRIBUTE_ID (0x0021)
+#define ZCL_MAX_CREDIT_PER_TOP_UP_ATTRIBUTE_ID (0x0022)
+#define ZCL_FRIENDLY_CREDIT_WARNING_ATTRIBUTE_ID (0x0030)
+#define ZCL_LOW_CREDIT_WARNING_ATTRIBUTE_ID (0x0031)
+#define ZCL_IHD_LOW_CREDIT_WARNING_ATTRIBUTE_ID (0x0032)
+#define ZCL_INTERRUPT_SUSPEND_TIME_ATTRIBUTE_ID (0x0033)
+#define ZCL_REMAINING_FRIENDLY_CREDIT_TIME_ATTRIBUTE_ID (0x0034)
+#define ZCL_NEXT_FRIENDLY_CREDIT_PERIOD_ATTRIBUTE_ID (0x0035)
+#define ZCL_CUT_OFF_VALUE_ATTRIBUTE_ID (0x0040)
+#define ZCL_TOKEN_CARRIER_ID_ATTRIBUTE_ID (0x0080)
+#define ZCL_TOP_UP_DATE_TIME_1_ATTRIBUTE_ID (0x0100)
+#define ZCL_TOP_UP_AMOUNT_1_ATTRIBUTE_ID (0x0101)
+#define ZCL_TOP_UP_ORIGINATING_DEVICE_1_ATTRIBUTE_ID (0x0102)
+#define ZCL_TOP_UP_CODE_1_ATTRIBUTE_ID (0x0103)
+#define ZCL_TOP_UP_DATE_TIME_2_ATTRIBUTE_ID (0x0110)
+#define ZCL_TOP_UP_AMOUNT_2_ATTRIBUTE_ID (0x0111)
+#define ZCL_TOP_UP_ORIGINATING_DEVICE_2_ATTRIBUTE_ID (0x0112)
+#define ZCL_TOP_UP_CODE_2_ATTRIBUTE_ID (0x0113)
+#define ZCL_TOP_UP_DATE_TIME_3_ATTRIBUTE_ID (0x0120)
+#define ZCL_TOP_UP_AMOUNT_3_ATTRIBUTE_ID (0x0121)
+#define ZCL_TOP_UP_ORIGINATING_DEVICE_3_ATTRIBUTE_ID (0x0122)
+#define ZCL_TOP_UP_CODE_3_ATTRIBUTE_ID (0x0123)
+#define ZCL_TOP_UP_DATE_TIME_4_ATTRIBUTE_ID (0x0130)
+#define ZCL_TOP_UP_AMOUNT_4_ATTRIBUTE_ID (0x0131)
+#define ZCL_TOP_UP_ORIGINATING_DEVICE_4_ATTRIBUTE_ID (0x0132)
+#define ZCL_TOP_UP_CODE_4_ATTRIBUTE_ID (0x0133)
+#define ZCL_TOP_UP_DATE_TIME_5_ATTRIBUTE_ID (0x0140)
+#define ZCL_TOP_UP_AMOUNT_5_ATTRIBUTE_ID (0x0141)
+#define ZCL_TOP_UP_ORIGINATING_DEVICE_5_ATTRIBUTE_ID (0x0142)
+#define ZCL_TOP_UP_CODE_5_ATTRIBUTE_ID (0x0143)
+#define ZCL_DEBT_LABEL_1_ATTRIBUTE_ID (0x0210)
+#define ZCL_DEBT_AMOUNT_1_ATTRIBUTE_ID (0x0211)
+#define ZCL_DEBT_RECOVERY_METHOD_1_ATTRIBUTE_ID (0x0212)
+#define ZCL_DEBT_RECOVERY_START_TIME_1_ATTRIBUTE_ID (0x0213)
+#define ZCL_DEBT_RECOVERY_COLLECTION_TIME_1_ATTRIBUTE_ID (0x0214)
+#define ZCL_DEBT_RECOVERY_FREQUENCY_1_ATTRIBUTE_ID (0x0216)
+#define ZCL_DEBT_RECOVERY_AMOUNT_1_ATTRIBUTE_ID (0x0217)
+#define ZCL_DEBT_RECOVERY_TOP_UP_PERCENTAGE_1_ATTRIBUTE_ID (0x0219)
+#define ZCL_DEBT_LABEL_2_ATTRIBUTE_ID (0x0220)
+#define ZCL_DEBT_AMOUNT_2_ATTRIBUTE_ID (0x0221)
+#define ZCL_DEBT_RECOVERY_METHOD_2_ATTRIBUTE_ID (0x0222)
+#define ZCL_DEBT_RECOVERY_START_TIME_2_ATTRIBUTE_ID (0x0223)
+#define ZCL_DEBT_RECOVERY_COLLECTION_TIME_2_ATTRIBUTE_ID (0x0224)
+#define ZCL_DEBT_RECOVERY_FREQUENCY_2_ATTRIBUTE_ID (0x0226)
+#define ZCL_DEBT_RECOVERY_AMOUNT_2_ATTRIBUTE_ID (0x0227)
+#define ZCL_DEBT_RECOVERY_TOP_UP_PERCENTAGE_2_ATTRIBUTE_ID (0x0229)
+#define ZCL_DEBT_LABEL_3_ATTRIBUTE_ID (0x0230)
+#define ZCL_DEBT_AMOUNT_3_ATTRIBUTE_ID (0x0231)
+#define ZCL_DEBT_RECOVERY_METHOD_3_ATTRIBUTE_ID (0x0232)
+#define ZCL_DEBT_RECOVERY_START_TIME_3_ATTRIBUTE_ID (0x0233)
+#define ZCL_DEBT_RECOVERY_COLLECTION_TIME_3_ATTRIBUTE_ID (0x0234)
+#define ZCL_DEBT_RECOVERY_FREQUENCY_3_ATTRIBUTE_ID (0x0236)
+#define ZCL_DEBT_RECOVERY_AMOUNT_3_ATTRIBUTE_ID (0x0237)
+#define ZCL_DEBT_RECOVERY_TOP_UP_PERCENTAGE_3_ATTRIBUTE_ID (0x0239)
+#define ZCL_PREPAYMENT_ALARM_STATUS_ATTRIBUTE_ID (0x0400)
+#define ZCL_PREPAY_GENERIC_ALARM_MASK_ATTRIBUTE_ID (0x0401)
+#define ZCL_PREPAY_SWITCH_ALARM_MASK_ATTRIBUTE_ID (0x0402)
+#define ZCL_PREPAY_EVENT_ALARM_MASK_ATTRIBUTE_ID (0x0403)
+#define ZCL_HISTORICAL_COST_CONSUMPTION_FORMATTING_ATTRIBUTE_ID (0x0500)
+#define ZCL_CONSUMPTION_UNIT_OF_MEASUREMENT_ATTRIBUTE_ID (0x0501)
+#define ZCL_CURRENCY_SCALING_FACTOR_ATTRIBUTE_ID (0x0502)
+#define ZCL_PREPAYMANT_CURRENCY_ATTRIBUTE_ID (0x0503)
+#define ZCL_CURRENT_DAY_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x051C)
+#define ZCL_CURRENT_DAY_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x051D)
+#define ZCL_PREVIOUS_DAY_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x051E)
+#define ZCL_PREVIOUS_DAY_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x051F)
+#define ZCL_PREVIOUS_DAY_2_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0520)
+#define ZCL_PREVIOUS_DAY_2_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0521)
+#define ZCL_PREVIOUS_DAY_3_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0522)
+#define ZCL_PREVIOUS_DAY_3_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0523)
+#define ZCL_PREVIOUS_DAY_4_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0524)
+#define ZCL_PREVIOUS_DAY_4_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0525)
+#define ZCL_PREVIOUS_DAY_5_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0526)
+#define ZCL_PREVIOUS_DAY_5_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0527)
+#define ZCL_PREVIOUS_DAY_6_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0528)
+#define ZCL_PREVIOUS_DAY_6_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0529)
+#define ZCL_PREVIOUS_DAY_7_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x052A)
+#define ZCL_PREVIOUS_DAY_7_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x052B)
+#define ZCL_PREVIOUS_DAY_8_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x052C)
+#define ZCL_PREVIOUS_DAY_8_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x052D)
+#define ZCL_CURRENT_WEEK_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0530)
+#define ZCL_CURRENT_WEEK_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0531)
+#define ZCL_PREVIOUS_WEEK_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0532)
+#define ZCL_PREVIOUS_WEEK_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0533)
+#define ZCL_PREVIOUS_WEEK_2_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0534)
+#define ZCL_PREVIOUS_WEEK_2_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0535)
+#define ZCL_PREVIOUS_WEEK_3_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0536)
+#define ZCL_PREVIOUS_WEEK_3_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0537)
+#define ZCL_PREVIOUS_WEEK_4_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0538)
+#define ZCL_PREVIOUS_WEEK_4_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0539)
+#define ZCL_PREVIOUS_WEEK_5_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x053A)
+#define ZCL_PREVIOUS_WEEK_5_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x053B)
+#define ZCL_CURRENT_MONTH_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0540)
+#define ZCL_CURRENT_MONTH_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0541)
+#define ZCL_PREVIOUS_MONTH_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0542)
+#define ZCL_PREVIOUS_MONTH_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0543)
+#define ZCL_PREVIOUS_MONTH_2_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0544)
+#define ZCL_PREVIOUS_MONTH_2_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0545)
+#define ZCL_PREVIOUS_MONTH_3_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0546)
+#define ZCL_PREVIOUS_MONTH_3_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0547)
+#define ZCL_PREVIOUS_MONTH_4_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0548)
+#define ZCL_PREVIOUS_MONTH_4_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0549)
+#define ZCL_PREVIOUS_MONTH_5_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x054A)
+#define ZCL_PREVIOUS_MONTH_5_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x054B)
+#define ZCL_PREVIOUS_MONTH_6_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x054C)
+#define ZCL_PREVIOUS_MONTH_6_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x054D)
+#define ZCL_PREVIOUS_MONTH_7_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x054E)
+#define ZCL_PREVIOUS_MONTH_7_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x054F)
+#define ZCL_PREVIOUS_MONTH_8_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0550)
+#define ZCL_PREVIOUS_MONTH_8_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0551)
+#define ZCL_PREVIOUS_MONTH_9_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0552)
+#define ZCL_PREVIOUS_MONTH_9_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0553)
+#define ZCL_PREVIOUS_MONTH_10_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0554)
+#define ZCL_PREVIOUS_MONTH_10_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0555)
+#define ZCL_PREVIOUS_MONTH_11_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0556)
+#define ZCL_PREVIOUS_MONTH_11_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0557)
+#define ZCL_PREVIOUS_MONTH_12_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0558)
+#define ZCL_PREVIOUS_MONTH_12_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0559)
+#define ZCL_PREVIOUS_MONTH_13_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x055A)
+#define ZCL_PREVIOUS_MONTH_13_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x055B)
+#define ZCL_PREPAYMENT_HISTORICAL_FREEZE_TIME_ATTRIBUTE_ID (0x055C)
+
+// Attribute ids for cluster: Energy Management
+
+// Client attributes
+
+// Server attributes
+#define ZCL_LOAD_CONTROL_STATE_ATTRIBUTE_ID (0x0000)
+#define ZCL_CURRENT_EVENT_ID_ATTRIBUTE_ID (0x0001)
+#define ZCL_CURRENT_EVENT_STATUS_ATTRIBUTE_ID (0x0002)
+#define ZCL_CONFORMANCE_LEVEL_ATTRIBUTE_ID (0x0003)
+#define ZCL_MINIMUM_OFF_TIME_ATTRIBUTE_ID (0x0004)
+#define ZCL_MINIMUM_ON_TIME_ATTRIBUTE_ID (0x0005)
+#define ZCL_MINIMUM_CYCLE_PERIOD_ATTRIBUTE_ID (0x0006)
+
+// Attribute ids for cluster: Calendar
+
+// Client attributes
+
+// Server attributes
+#define ZCL_AUXILIARY_SWITCH_1_LABEL_ATTRIBUTE_ID (0x0000)
+#define ZCL_AUXILIARY_SWITCH_2_LABEL_ATTRIBUTE_ID (0x0001)
+#define ZCL_AUXILIARY_SWITCH_3_LABEL_ATTRIBUTE_ID (0x0002)
+#define ZCL_AUXILIARY_SWITCH_4_LABEL_ATTRIBUTE_ID (0x0003)
+#define ZCL_AUXILIARY_SWITCH_5_LABEL_ATTRIBUTE_ID (0x0004)
+#define ZCL_AUXILIARY_SWITCH_6_LABEL_ATTRIBUTE_ID (0x0005)
+#define ZCL_AUXILIARY_SWITCH_7_LABEL_ATTRIBUTE_ID (0x0006)
+#define ZCL_AUXILIARY_SWITCH_8_LABEL_ATTRIBUTE_ID (0x0007)
+
+// Attribute ids for cluster: Device Management
+
+// Client attributes
+#define ZCL_PROVIDER_ID_CLIENT_ATTRIBUTE_ID (0x0000)
+#define ZCL_RECEIVED_PROVIDER_ID_CLIENT_ATTRIBUTE_ID (0x0010)
+#define ZCL_TOU_TARIFF_ACTIVATION_ATTRIBUTE_ID (0x0100)
+#define ZCL_BLOCK_TARIFF_ACTIVATED_ATTRIBUTE_ID (0x0101)
+#define ZCL_BLOCK_TOU_TARIFF_ACTIVATED_ATTRIBUTE_ID (0x0102)
+#define ZCL_SINGLE_TARIFF_RATE_ACTIVATED_ATTRIBUTE_ID (0x0103)
+#define ZCL_ASYNCHRONOUS_BILLING_OCCURRED_ATTRIBUTE_ID (0x0104)
+#define ZCL_SYNCHRONOUS_BILLING_OCCURRED_ATTRIBUTE_ID (0x0105)
+#define ZCL_TARIFF_NOT_SUPPORTED_ATTRIBUTE_ID (0x0106)
+#define ZCL_PRICE_CLUSTER_NOT_FOUND_ATTRIBUTE_ID (0x0107)
+#define ZCL_CURRENCY_CHANGE_PASSIVE_ACTIVATED_ATTRIBUTE_ID (0x0108)
+#define ZCL_CURRENCY_CHANGE_PASSIVE_UPDATED_ATTRIBUTE_ID (0x0109)
+#define ZCL_PRICE_MATRIX_PASSIVE_ACTIVATED_ATTRIBUTE_ID (0x010A)
+#define ZCL_PRICE_MATRIX_PASSIVE_UPDATED_ATTRIBUTE_ID (0x010B)
+#define ZCL_TARIFF_CHANGE_PASSIVE_ACTIVATED_ATTRIBUTE_ID (0x010C)
+#define ZCL_TARIFF_CHANGE_PASSIVE_UPDATED_ATTRIBUTE_ID (0x010D)
+#define ZCL_PUBLISH_PRICE_RECEIVED_ATTRIBUTE_ID (0x01B0)
+#define ZCL_PUBLISH_PRICE_ACTIONED_ATTRIBUTE_ID (0x01B1)
+#define ZCL_PUBLISH_PRICE_CANCELLED_ATTRIBUTE_ID (0x01B2)
+#define ZCL_PUBLISH_PRICE_REJECTED_ATTRIBUTE_ID (0x01B3)
+#define ZCL_PUBLISH_TARIFF_INFO_RECEIVED_ATTRIBUTE_ID (0x01B4)
+#define ZCL_PUBLISH_TARIFF_INFO_ACTIONED_ATTRIBUTE_ID (0x01B5)
+#define ZCL_PUBLISH_TARIFF_INFO_CANCELLED_ATTRIBUTE_ID (0x01B6)
+#define ZCL_PUBLISH_TARIFF_INFO_REJECTED_ATTRIBUTE_ID (0x01B7)
+#define ZCL_PUBLISH_PRICE_MATRIX_RECEIVED_ATTRIBUTE_ID (0x01B8)
+#define ZCL_PUBLISH_PRICE_MATRIX_ACTIONED_ATTRIBUTE_ID (0x01B9)
+#define ZCL_PUBLISH_PRICE_MATRIX_CANCELLED_ATTRIBUTE_ID (0x01BA)
+#define ZCL_PUBLISH_PRICE_MATRIX_REJECTED_ATTRIBUTE_ID (0x01BB)
+#define ZCL_PUBLISH_BLOCK_THRESHOLDS_RECEIVED_ATTRIBUTE_ID (0x01BC)
+#define ZCL_PUBLISH_BLOCK_THRESHOLDS_ACTIONED_ATTRIBUTE_ID (0x01BD)
+#define ZCL_PUBLISH_BLOCK_THRESHOLDS_CANCELLED_ATTRIBUTE_ID (0x01BE)
+#define ZCL_PUBLISH_BLOCK_THRESHOLDS_REJECTED_ATTRIBUTE_ID (0x01BF)
+#define ZCL_PUBLISH_CALORIFIC_VALUE_RECEIVED_ATTRIBUTE_ID (0x01C0)
+#define ZCL_PUBLISH_CALORIFIC_VALUE_ACTIONED_ATTRIBUTE_ID (0x01C1)
+#define ZCL_PUBLISH_CALORIFIC_VALUE_CANCELLED_ATTRIBUTE_ID (0x01C2)
+#define ZCL_PUBLISH_CALORIFIC_VALUE_REJECTED_ATTRIBUTE_ID (0x01C3)
+#define ZCL_PUBLISH_CONVERSION_FACTOR_RECEIVED_ATTRIBUTE_ID (0x01C4)
+#define ZCL_PUBLISH_CONVERSION_FACTOR_ACTIONED_ATTRIBUTE_ID (0x01C5)
+#define ZCL_PUBLISH_CONVERSION_FACTOR_CANCELLED_ATTRIBUTE_ID (0x01C6)
+#define ZCL_PUBLISH_CONVERSION_FACTOR_REJECTED_ATTRIBUTE_ID (0x01C7)
+#define ZCL_PUBLISH_CO2_VALUE_RECEIVED_ATTRIBUTE_ID (0x01C8)
+#define ZCL_PUBLISH_CO2_VALUE_ACTIONED_ATTRIBUTE_ID (0x01C9)
+#define ZCL_PUBLISH_CO2_VALUE_CANCELLED_ATTRIBUTE_ID (0x01CA)
+#define ZCL_PUBLISH_CO2_VALUE_REJECTED_ATTRIBUTE_ID (0x01CB)
+#define ZCL_PUBLISH_CPP_EVENT_RECEIVED_ATTRIBUTE_ID (0x01CC)
+#define ZCL_PUBLISH_CPP_EVENT_ACTIONED_ATTRIBUTE_ID (0x01CD)
+#define ZCL_PUBLISH_CPP_EVENT_CANCELLED_ATTRIBUTE_ID (0x01CE)
+#define ZCL_PUBLISH_CPP_EVENT_REJECTED_ATTRIBUTE_ID (0x01CF)
+#define ZCL_PUBLISH_TIER_LABELS_RECEIVED_ATTRIBUTE_ID (0x01D0)
+#define ZCL_PUBLISH_TIER_LABELS_ACTIONED_ATTRIBUTE_ID (0x01D1)
+#define ZCL_PUBLISH_TIER_LABELS_CANCELLED_ATTRIBUTE_ID (0x01D2)
+#define ZCL_PUBLISH_TIER_LABELS_REJECTED_ATTRIBUTE_ID (0x01D3)
+#define ZCL_PUBLISH_BILLING_PERIOD_RECEIVED_ATTRIBUTE_ID (0x01D4)
+#define ZCL_PUBLISH_BILLING_PERIOD_ACTIONED_ATTRIBUTE_ID (0x01D5)
+#define ZCL_PUBLISH_BILLING_PERIOD_CANCELLED_ATTRIBUTE_ID (0x01D6)
+#define ZCL_PUBLISH_BILLING_PERIOD_REJECTED_ATTRIBUTE_ID (0x01D7)
+#define ZCL_PUBLISH_CONSOLIDATED_BILL_RECEIVED_ATTRIBUTE_ID (0x01D8)
+#define ZCL_PUBLISH_CONSOLIDATED_BILL_ACTIONED_ATTRIBUTE_ID (0x01D9)
+#define ZCL_PUBLISH_CONSOLIDATED_BILL_CANCELLED_ATTRIBUTE_ID (0x01DA)
+#define ZCL_PUBLISH_CONSOLIDATED_BILL_REJECTED_ATTRIBUTE_ID (0x01DB)
+#define ZCL_PUBLISH_BLOCK_PERIOD_RECEIVED_ATTRIBUTE_ID (0x01DC)
+#define ZCL_PUBLISH_BLOCK_PERIOD_ACTIONED_ATTRIBUTE_ID (0x01DD)
+#define ZCL_PUBLISH_BLOCK_PERIOD_CANCELLED_ATTRIBUTE_ID (0x01DE)
+#define ZCL_PUBLISH_BLOCK_PERIOD_REJECTED_ATTRIBUTE_ID (0x01DF)
+#define ZCL_PUBLISH_CREDIT_PAYMENT_INFO_RECEIVED_ATTRIBUTE_ID (0x01E0)
+#define ZCL_PUBLISH_CREDIT_PAYMENT_INFO_ACTIONED_ATTRIBUTE_ID (0x01E1)
+#define ZCL_PUBLISH_CREDIT_PAYMENT_INFO_CANCELLED_ATTRIBUTE_ID (0x01E2)
+#define ZCL_PUBLISH_CREDIT_PAYMENT_INFO_REJECTED_ATTRIBUTE_ID (0x01E3)
+#define ZCL_PUBLISH_CURRENCY_CONVERSION_RECEIVED_ATTRIBUTE_ID (0x01E4)
+#define ZCL_PUBLISH_CURRENCY_CONVERSION_ACTIONED_ATTRIBUTE_ID (0x01E5)
+#define ZCL_PUBLISH_CURRENCY_CONVERSION_CANCELLED_ATTRIBUTE_ID (0x01E6)
+#define ZCL_PUBLISH_CURRENCY_CONVERSION_REJECTED_ATTRIBUTE_ID (0x01E7)
+#define ZCL_CHECK_METER_ATTRIBUTE_ID (0x0200)
+#define ZCL_LOW_BATTERY_ATTRIBUTE_ID (0x0201)
+#define ZCL_TAMPER_DETECT_ATTRIBUTE_ID (0x0202)
+#define ZCL_DEVICE_MANAGEMENT_SUPPLY_STATUS_ATTRIBUTE_ID (0x0203)
+#define ZCL_SUPPLY_QUALITY_ATTRIBUTE_ID (0x0204)
+#define ZCL_LEAK_DETECT_ATTRIBUTE_ID (0x0205)
+#define ZCL_SERVICE_DISCONNECT_ATTRIBUTE_ID (0x0206)
+#define ZCL_REVERSE_FLOW_GENERAL_ATTRIBUTE_ID (0x0207)
+#define ZCL_METER_COVER_REMOVED_ATTRIBUTE_ID (0x0208)
+#define ZCL_METER_COVER_CLOSED_ATTRIBUTE_ID (0x0209)
+#define ZCL_STRONG_MAGNETIC_FIELD_ATTRIBUTE_ID (0x020A)
+#define ZCL_NO_STRONG_MAGNETIC_FIELD_ATTRIBUTE_ID (0x020B)
+#define ZCL_BATTERY_FAILURE_ATTRIBUTE_ID (0x020C)
+#define ZCL_PROGRAM_MEMORY_ERROR_ATTRIBUTE_ID (0x020D)
+#define ZCL_RAM_ERROR_ATTRIBUTE_ID (0x020E)
+#define ZCL_NV_MEMORY_ERROR_ATTRIBUTE_ID (0x020F)
+#define ZCL_LOW_VOLTAGE_L1_ATTRIBUTE_ID (0x0210)
+#define ZCL_HIGH_VOLTAGE_L1_ATTRIBUTE_ID (0x0211)
+#define ZCL_LOW_VOLTAGE_L2_ATTRIBUTE_ID (0x0212)
+#define ZCL_HIGH_VOLTAGE_L2_ATTRIBUTE_ID (0x0213)
+#define ZCL_LOW_VOLTAGE_L3_ATTRIBUTE_ID (0x0214)
+#define ZCL_HIGH_VOLTAGE_L3_ATTRIBUTE_ID (0x0215)
+#define ZCL_OVER_CURRENT_L1_ATTRIBUTE_ID (0x0216)
+#define ZCL_OVER_CURRENT_L2_ATTRIBUTE_ID (0x0217)
+#define ZCL_OVER_CURRENT_L3_ATTRIBUTE_ID (0x0218)
+#define ZCL_FREQUENCY_TOO_LOW_L1_ATTRIBUTE_ID (0x0219)
+#define ZCL_FREQUENCY_TOO_HIGH_L1_ATTRIBUTE_ID (0x021A)
+#define ZCL_FREQUENCY_TOO_LOW_L2_ATTRIBUTE_ID (0x021B)
+#define ZCL_FREQUENCY_TOO_HIGH_L2_ATTRIBUTE_ID (0x021C)
+#define ZCL_FREQUENCY_TOO_LOW_L3_ATTRIBUTE_ID (0x021D)
+#define ZCL_FREQUENCY_TOO_HIGH_L3_ATTRIBUTE_ID (0x021E)
+#define ZCL_GROUND_FAULT_ATTRIBUTE_ID (0x021F)
+#define ZCL_ELECTRIC_TAMPER_DETECT_ATTRIBUTE_ID (0x0220)
+#define ZCL_INCORRECT_POLARITY_ATTRIBUTE_ID (0x0221)
+#define ZCL_CURRENT_NO_VOLTAGE_ATTRIBUTE_ID (0x0222)
+#define ZCL_UNDER_VOLTAGE_ATTRIBUTE_ID (0x0223)
+#define ZCL_OVER_VOLTAGE_ATTRIBUTE_ID (0x0224)
+#define ZCL_NORMAL_VOLTAGE_ATTRIBUTE_ID (0x0225)
+#define ZCL_PF_BELOW_THRESHOLD_ATTRIBUTE_ID (0x0226)
+#define ZCL_PF_ABOVE_THRESHOLD_ATTRIBUTE_ID (0x0227)
+#define ZCL_TERMINAL_COVER_REMOVED_ATTRIBUTE_ID (0x0228)
+#define ZCL_TERMINAL_COVER_CLOSED_ATTRIBUTE_ID (0x0229)
+#define ZCL_BURST_DETECT_ATTRIBUTE_ID (0x0230)
+#define ZCL_PRESSURE_TOO_LOW_ATTRIBUTE_ID (0x0231)
+#define ZCL_PRESSURE_TOO_HIGH_ATTRIBUTE_ID (0x0232)
+#define ZCL_FLOW_SENSOR_COMMUNICATION_ERROR_ATTRIBUTE_ID (0x0233)
+#define ZCL_FLOW_SENSOR_MEASUREMENT_FAULT_ATTRIBUTE_ID (0x0234)
+#define ZCL_FLOW_SENSOR_REVERSE_FLOW_ATTRIBUTE_ID (0x0235)
+#define ZCL_FLOW_SENSOR_AIR_DETECT_ATTRIBUTE_ID (0x0236)
+#define ZCL_PIPE_EMPTY_ATTRIBUTE_ID (0x0237)
+#define ZCL_INLET_TEMP_SENSOR_FAULT_ATTRIBUTE_ID (0x0250)
+#define ZCL_OUTLET_TEMP_SENSOR_FAULT_ATTRIBUTE_ID (0x0251)
+#define ZCL_REVERSE_FLOW_ATTRIBUTE_ID (0x0260)
+#define ZCL_TILT_TAMPER_ATTRIBUTE_ID (0x0261)
+#define ZCL_BATTERY_COVER_REMOVED_ATTRIBUTE_ID (0x0262)
+#define ZCL_BATTERY_COVER_CLOSED_ATTRIBUTE_ID (0x0263)
+#define ZCL_EXCESS_FLOW_ATTRIBUTE_ID (0x0264)
+#define ZCL_TILT_TAMPER_ENABLED_ATTRIBUTE_ID (0x0265)
+#define ZCL_MEASUREMENT_SYSTEM_ERROR_ATTRIBUTE_ID (0x0270)
+#define ZCL_WATCHDOG_ERROR_ATTRIBUTE_ID (0x0271)
+#define ZCL_SUPPLY_DISCONNECT_FAILURE_ATTRIBUTE_ID (0x0272)
+#define ZCL_SUPPLY_CONNECT_FAILURE_ATTRIBUTE_ID (0x0273)
+#define ZCL_MEASUREMENT_SOFTWARE_CHANGED_ATTRIBUTE_ID (0x0274)
+#define ZCL_DST_ENABLED_ATTRIBUTE_ID (0x0275)
+#define ZCL_DST_DISABLED_ATTRIBUTE_ID (0x0276)
+#define ZCL_CLOCK_ADJ_BACKWARD_ATTRIBUTE_ID (0x0277)
+#define ZCL_CLOCK_ADJ_FORWARD_ATTRIBUTE_ID (0x0278)
+#define ZCL_CLOCK_INVALID_ATTRIBUTE_ID (0x0279)
+#define ZCL_COMMUNICATION_ERROR_HAN_ATTRIBUTE_ID (0x027A)
+#define ZCL_COMMUNICATION_OK_HAN_ATTRIBUTE_ID (0x027B)
+#define ZCL_METER_FRAUD_ATTEMPT_ATTRIBUTE_ID (0x027C)
+#define ZCL_POWER_LOSS_ATTRIBUTE_ID (0x027D)
+#define ZCL_UNUSUAL_HAN_TRAFFIC_ATTRIBUTE_ID (0x027E)
+#define ZCL_UNEXPECTED_CLOCK_CHANGE_ATTRIBUTE_ID (0x027F)
+#define ZCL_COMMS_USING_UNAUTHENTICATED_COMPONENT_ATTRIBUTE_ID (0x0280)
+#define ZCL_METERING_ERROR_REG_CLEAR_ATTRIBUTE_ID (0x0281)
+#define ZCL_METERING_ALARM_REG_CLEAR_ATTRIBUTE_ID (0x0282)
+#define ZCL_UNEXPECTED_HW_RESET_ATTRIBUTE_ID (0x0283)
+#define ZCL_UNEXPECTED_PROGRAM_EXECUTION_ATTRIBUTE_ID (0x0284)
+#define ZCL_LIMIT_THRESHOLD_EXCEEDED_ATTRIBUTE_ID (0x0285)
+#define ZCL_LIMIT_THRESHOLD_OK_ATTRIBUTE_ID (0x0286)
+#define ZCL_LIMIT_THRESHOLD_CHANGED_ATTRIBUTE_ID (0x0287)
+#define ZCL_MAXIMUM_DEMAND_EXCEEDED_ATTRIBUTE_ID (0x0288)
+#define ZCL_PROFILE_CLEARED_ATTRIBUTE_ID (0x0289)
+#define ZCL_LOAD_PROFILE_CLEARED_ATTRIBUTE_ID (0x028A)
+#define ZCL_BATTERY_WARN_ATTRIBUTE_ID (0x028B)
+#define ZCL_WRONG_SIGNATURE_ATTRIBUTE_ID (0x028C)
+#define ZCL_NO_SIGNATURE_ATTRIBUTE_ID (0x028D)
+#define ZCL_SIGNATURE_NOT_VALID_ATTRIBUTE_ID (0x028E)
+#define ZCL_UNAUTHORISE_ACTION_FROM_HAN_ATTRIBUTE_ID (0x028F)
+#define ZCL_FAST_POLLING_START_ATTRIBUTE_ID (0x0290)
+#define ZCL_FAST_POLLING_END_ATTRIBUTE_ID (0x0291)
+#define ZCL_METER_REPORTING_INTERVAL_CHANGED_ATTRIBUTE_ID (0x0292)
+#define ZCL_DISCONNECT_TO_LOAD_LIMIT_ATTRIBUTE_ID (0x0293)
+#define ZCL_METER_SUPPLY_STATUS_REGISTER_CHANGED_ATTRIBUTE_ID (0x0294)
+#define ZCL_METER_ALARM_STATUS_REGISTER_CHANGED_ATTRIBUTE_ID (0x0295)
+#define ZCL_EXTENDED_METER_ALARM_STATUS_REGISTER_CHANGED_ATTRIBUTE_ID (0x0296)
+#define ZCL_DATA_ACCESS_VIA_LOCAL_PORT_ATTRIBUTE_ID (0x0297)
+#define ZCL_CONFIGURE_MIRROR_SUCCESS_ATTRIBUTE_ID (0x0298)
+#define ZCL_CONFIGURE_MIRROR_FAILURE_ATTRIBUTE_ID (0x0299)
+#define ZCL_CONFIGURE_NOTIFICATION_FLAG_SCHEME_SUCCESS_ATTRIBUTE_ID (0x029A)
+#define ZCL_CONFIGURE_NOTIFICATION_FLAG_SCHEME_FAILURE_ATTRIBUTE_ID (0x029B)
+#define ZCL_CONFIGURE_NOTIFICATION_FLAGS_SUCCESS_ATTRIBUTE_ID (0x029C)
+#define ZCL_CONFIGURE_NOTIFICATION_FLAGS_FAILURE_ATTRIBUTE_ID (0x029D)
+#define ZCL_STAY_AWAKE_REQUEST_HAN_ATTRIBUTE_ID (0x029E)
+#define ZCL_STAY_AWAKE_REQUEST_WAN_ATTRIBUTE_ID (0x029F)
+#define ZCL_MANUFACTURER_SPECIFIC_A_ATTRIBUTE_ID (0x02B0)
+#define ZCL_MANUFACTURER_SPECIFIC_B_ATTRIBUTE_ID (0x02B1)
+#define ZCL_MANUFACTURER_SPECIFIC_C_ATTRIBUTE_ID (0x02B2)
+#define ZCL_MANUFACTURER_SPECIFIC_D_ATTRIBUTE_ID (0x02B3)
+#define ZCL_MANUFACTURER_SPECIFIC_E_ATTRIBUTE_ID (0x02B4)
+#define ZCL_MANUFACTURER_SPECIFIC_F_ATTRIBUTE_ID (0x02B5)
+#define ZCL_MANUFACTURER_SPECIFIC_G_ATTRIBUTE_ID (0x02B6)
+#define ZCL_MANUFACTURER_SPECIFIC_H_ATTRIBUTE_ID (0x02B7)
+#define ZCL_MANUFACTURER_SPECIFIC_I_ATTRIBUTE_ID (0x02B8)
+#define ZCL_GET_PROFILE_COMMAND_RECEIVED_ATTRIBUTE_ID (0x02C0)
+#define ZCL_GET_PROFILE_COMMAND_ACTIONED_ATTRIBUTE_ID (0x02C1)
+#define ZCL_GET_PROFILE_COMMAND_CANCELLED_ATTRIBUTE_ID (0x02C2)
+#define ZCL_GET_PROFILE_COMMAND_REJECTED_ATTRIBUTE_ID (0x02C3)
+#define ZCL_REQUEST_MIRROR_RESPONSE_COMMAND_RECEIVED_ATTRIBUTE_ID (0x02C4)
+#define ZCL_REQUEST_MIRROR_RESPONSE_COMMAND_ACTIONED_ATTRIBUTE_ID (0x02C5)
+#define ZCL_REQUEST_MIRROR_RESPONSE_COMMAND_CANCELLED_ATTRIBUTE_ID (0x02C6)
+#define ZCL_REQUEST_MIRROR_RESPONSE_COMMAND_REJECTED_ATTRIBUTE_ID (0x02C7)
+#define ZCL_MIRROR_REMOVED_COMMAND_RECEIVED_ATTRIBUTE_ID (0x02C8)
+#define ZCL_MIRROR_REMOVED_COMMAND_ACTIONED_ATTRIBUTE_ID (0x02C9)
+#define ZCL_MIRROR_REMOVED_COMMAND_CANCELLED_ATTRIBUTE_ID (0x02CA)
+#define ZCL_MIRROR_REMOVED_COMMAND_REJECTED_ATTRIBUTE_ID (0x02CB)
+#define ZCL_GET_SNAPSHOT_COMMAND_RECEIVED_ATTRIBUTE_ID (0x02CC)
+#define ZCL_GET_SNAPSHOT_COMMAND_ACTIONED_ATTRIBUTE_ID (0x02CD)
+#define ZCL_GET_SNAPSHOT_COMMAND_CANCELLED_ATTRIBUTE_ID (0x02CE)
+#define ZCL_GET_SNAPSHOT_COMMAND_REJECTED_ATTRIBUTE_ID (0x02CF)
+#define ZCL_TAKE_SNAPSHOT_COMMAND_RECEIVED_ATTRIBUTE_ID (0x02D0)
+#define ZCL_TAKE_SNAPSHOT_COMMAND_ACTIONED_ATTRIBUTE_ID (0x02D1)
+#define ZCL_TAKE_SNAPSHOT_COMMAND_CANCELLED_ATTRIBUTE_ID (0x02D2)
+#define ZCL_TAKE_SNAPSHOT_COMMAND_REJECTED_ATTRIBUTE_ID (0x02D3)
+#define ZCL_MIRROR_REPORT_ATTRIBUTE_RESPONSE_COMMAND_RECEIVED_ATTRIBUTE_ID (0x02D4)
+#define ZCL_MIRROR_REPORT_ATTRIBUTE_RESPONSE_COMMAND_ACTIONED_ATTRIBUTE_ID (0x02D5)
+#define ZCL_MIRROR_REPORT_ATTRIBUTE_RESPONSE_COMMAND_CANCELLED_ATTRIBUTE_ID (0x02D6)
+#define ZCL_MIRROR_REPORT_ATTRIBUTE_RESPONSE_COMMAND_REJECTED_ATTRIBUTE_ID (0x02D7)
+#define ZCL_SCHEDULE_SNAPSHOT_COMMAND_RECEIVED_ATTRIBUTE_ID (0x02D8)
+#define ZCL_SCHEDULE_SNAPSHOT_COMMAND_ACTIONED_ATTRIBUTE_ID (0x02D9)
+#define ZCL_SCHEDULE_SNAPSHOT_COMMAND_CANCELLED_ATTRIBUTE_ID (0x02DA)
+#define ZCL_SCHEDULE_SNAPSHOT_COMMAND_REJECTED_ATTRIBUTE_ID (0x02DB)
+#define ZCL_START_SAMPLING_COMMAND_RECEIVED_ATTRIBUTE_ID (0x02DC)
+#define ZCL_START_SAMPLING_COMMAND_ACTIONED_ATTRIBUTE_ID (0x02DD)
+#define ZCL_START_SAMPLING_COMMAND_CANCELLED_ATTRIBUTE_ID (0x02DE)
+#define ZCL_START_SAMPLING_COMMAND_REJECTED_ATTRIBUTE_ID (0x02DF)
+#define ZCL_GET_SAMPLED_DATA_COMMAND_RECEIVED_ATTRIBUTE_ID (0x02E0)
+#define ZCL_GET_SAMPLED_DATA_COMMAND_ACTIONED_ATTRIBUTE_ID (0x02E1)
+#define ZCL_GET_SAMPLED_DATA_COMMAND_CANCELLED_ATTRIBUTE_ID (0x02E2)
+#define ZCL_GET_SAMPLED_DATA_COMMAND_REJECTED_ATTRIBUTE_ID (0x02E3)
+#define ZCL_SUPPLY_ON_ATTRIBUTE_ID (0x02E4)
+#define ZCL_SUPPLY_ARMED_ATTRIBUTE_ID (0x02E5)
+#define ZCL_SUPPLY_OFF_ATTRIBUTE_ID (0x02E6)
+#define ZCL_DISCONNECTED_DUE_TO_TAMPER_DETECTED_ATTRIBUTE_ID (0x02E7)
+#define ZCL_MANUAL_DISCONNECT_ATTRIBUTE_ID (0x02E8)
+#define ZCL_MANUAL_CONNECT_ATTRIBUTE_ID (0x02E9)
+#define ZCL_REMOTE_DISCONNECTION_ATTRIBUTE_ID (0x02EA)
+#define ZCL_REMOTE_CONNECT_ATTRIBUTE_ID (0x02EB)
+#define ZCL_LOCAL_DISCONNECTION_ATTRIBUTE_ID (0x02EC)
+#define ZCL_LOCAL_CONNECT_ATTRIBUTE_ID (0x02ED)
+#define ZCL_CHANGE_SUPPLY_RECEIVED_ATTRIBUTE_ID (0x02EE)
+#define ZCL_CHANGE_SUPPLY_ACTIONED_ATTRIBUTE_ID (0x02EF)
+#define ZCL_CHANGE_SUPPLY_CANCELLED_ATTRIBUTE_ID (0x02F0)
+#define ZCL_CHANGE_SUPPLY_REJECTED_ATTRIBUTE_ID (0x02F1)
+#define ZCL_LOCAL_CHANGE_SUPPLY_RECEIVED_ATTRIBUTE_ID (0x02F2)
+#define ZCL_LOCAL_CHANGE_SUPPLY_ACTIONED_ATTRIBUTE_ID (0x02F3)
+#define ZCL_LOCAL_CHANGE_SUPPLY_CANCELLED_ATTRIBUTE_ID (0x02F4)
+#define ZCL_LOCAL_CHANGE_SUPPLY_REJECTED_ATTRIBUTE_ID (0x02F5)
+#define ZCL_PUBLISH_UNCONTROLLED_FLOW_THRESHOLD_RECEIVED_ATTRIBUTE_ID (0x02F6)
+#define ZCL_PUBLISH_UNCONTROLLED_FLOW_THRESHOLD_ACTIONED_ATTRIBUTE_ID (0x02F7)
+#define ZCL_PUBLISH_UNCONTROLLED_FLOW_THRESHOLD_CANCELLED_ATTRIBUTE_ID (0x02F8)
+#define ZCL_PUBLISH_UNCONTROLLED_FLOW_THRESHOLD_REJECTED_ATTRIBUTE_ID (0x02F9)
+#define ZCL_MESSAGE_CONFIRMATION_SENT_ATTRIBUTE_ID (0x0300)
+#define ZCL_DISPLAY_MESSAGE_RECEIVED_ATTRIBUTE_ID (0x03C0)
+#define ZCL_DISPLAY_MESSAGE_ACTIONED_ATTRIBUTE_ID (0x03C1)
+#define ZCL_DISPLAY_MESSAGE_CANCELLED_ATTRIBUTE_ID (0x03C2)
+#define ZCL_DISPLAY_MESSAGE_REJECTED_ATTRIBUTE_ID (0x03C3)
+#define ZCL_CANCEL_MESSAGE_RECEIVED_ATTRIBUTE_ID (0x03C4)
+#define ZCL_CANCEL_MESSAGE_ACTIONED_ATTRIBUTE_ID (0x03C5)
+#define ZCL_CANCEL_MESSAGE_CANCELLED_ATTRIBUTE_ID (0x03C6)
+#define ZCL_CANCEL_MESSAGE_REJECTED_ATTRIBUTE_ID (0x03C7)
+#define ZCL_LOW_CREDIT_ATTRIBUTE_ID (0x0400)
+#define ZCL_NO_CREDIT_ATTRIBUTE_ID (0x0401)
+#define ZCL_CREDIT_EXHAUSTED_ATTRIBUTE_ID (0x0402)
+#define ZCL_EMERGENCY_CREDIT_ENABLED_ATTRIBUTE_ID (0x0403)
+#define ZCL_EMERGENCY_CREDIT_EXHAUSTED_ATTRIBUTE_ID (0x0404)
+#define ZCL_PREPAY_IHD_LOW_CREDIT_WARNING_ATTRIBUTE_ID (0x0405)
+#define ZCL_PHYSICAL_ATTACK_ON_THE_PREPAY_METER_ATTRIBUTE_ID (0x0420)
+#define ZCL_ELECTRONIC_ATTACK_ON_THE_PREPAY_METER_ATTRIBUTE_ID (0x0421)
+#define ZCL_DISCOUNT_APPLIED_ATTRIBUTE_ID (0x0422)
+#define ZCL_CREDIT_ADJUSTMENT_ATTRIBUTE_ID (0x0423)
+#define ZCL_CREDIT_ADJUST_FAIL_ATTRIBUTE_ID (0x0424)
+#define ZCL_DEBT_ADJUSTMENT_ATTRIBUTE_ID (0x0425)
+#define ZCL_DEBT_ADJUST_FAIL_ATTRIBUTE_ID (0x0426)
+#define ZCL_MODE_CHANGE_ATTRIBUTE_ID (0x0427)
+#define ZCL_TOPUP_CODE_ERROR_ATTRIBUTE_ID (0x0428)
+#define ZCL_TOPUP_ALREADY_USED_ATTRIBUTE_ID (0x0429)
+#define ZCL_TOPUP_CODE_INVALID_ATTRIBUTE_ID (0x042A)
+#define ZCL_TOPUP_ACCEPTED_VIA_REMOTE_ATTRIBUTE_ID (0x042B)
+#define ZCL_TOPUP_ACCEPTED_VIA_MANUAL_ENTRY_ATTRIBUTE_ID (0x042C)
+#define ZCL_FRIENDLY_CREDIT_IN_USE_ATTRIBUTE_ID (0x042D)
+#define ZCL_FRIENDLY_CREDIT_END_WARNING_ATTRIBUTE_ID (0x042E)
+#define ZCL_FRIENDLY_CREDIT_PERIOD_END_ATTRIBUTE_ID (0x042F)
+#define ZCL_PREPAY_ERROR_REG_CLEAR_ATTRIBUTE_ID (0x0430)
+#define ZCL_PREPAY_ALARM_REG_CLEAR_ATTRIBUTE_ID (0x0431)
+#define ZCL_PREPAY_CLUSTER_NOT_FOUND_ATTRIBUTE_ID (0x0432)
+#define ZCL_TOPUP_VALUE_TOO_LARGE_ATTRIBUTE_ID (0x0433)
+#define ZCL_MODE_CREDIT_2_PREPAY_ATTRIBUTE_ID (0x0441)
+#define ZCL_MODE_PREPAY_2_CREDIT_ATTRIBUTE_ID (0x0442)
+#define ZCL_MODE_DEFAULT_ATTRIBUTE_ID (0x0443)
+#define ZCL_SELECT_AVAILABLE_EMERGENCY_CREDIT_RECEIVED_ATTRIBUTE_ID (0x04C0)
+#define ZCL_SELECT_AVAILABLE_EMERGENCY_CREDIT_ACTIONED_ATTRIBUTE_ID (0x04C1)
+#define ZCL_SELECT_AVAILABLE_EMERGENCY_CREDIT_CANCELLED_ATTRIBUTE_ID (0x04C2)
+#define ZCL_SELECT_AVAILABLE_EMERGENCY_CREDIT_REJECTED_ATTRIBUTE_ID (0x04C3)
+#define ZCL_CHANGE_DEBT_RECEIVED_ATTRIBUTE_ID (0x04C4)
+#define ZCL_CHANGE_DEBT_ACTIONED_ATTRIBUTE_ID (0x04C5)
+#define ZCL_CHANGE_DEBT_CANCELLED_ATTRIBUTE_ID (0x04C6)
+#define ZCL_CHANGE_DEBT_REJECTED_ATTRIBUTE_ID (0x04C7)
+#define ZCL_EMERGENCY_CREDIT_SETUP_RECEIVED_ATTRIBUTE_ID (0x04C8)
+#define ZCL_EMERGENCY_CREDIT_SETUP_ACTIONED_ATTRIBUTE_ID (0x04C9)
+#define ZCL_EMERGENCY_CREDIT_SETUP_CANCELLED_ATTRIBUTE_ID (0x04CA)
+#define ZCL_EMERGENCY_CREDIT_SETUP_REJECTED_ATTRIBUTE_ID (0x04CB)
+#define ZCL_CONSUMER_TOPUP_RECEIVED_ATTRIBUTE_ID (0x04CC)
+#define ZCL_CONSUMER_TOPUP_ACTIONED_ATTRIBUTE_ID (0x04CD)
+#define ZCL_CONSUMER_TOPUP_CANCELLED_ATTRIBUTE_ID (0x04CE)
+#define ZCL_CONSUMER_TOPUP_REJECTED_ATTRIBUTE_ID (0x04CF)
+#define ZCL_CREDIT_ADJUSTMENT_RECEIVED_ATTRIBUTE_ID (0x04D0)
+#define ZCL_CREDIT_ADJUSTMENT_ACTIONED_ATTRIBUTE_ID (0x04D1)
+#define ZCL_CREDIT_ADJUSTMENT_CANCELLED_ATTRIBUTE_ID (0x04D2)
+#define ZCL_CREDIT_ADJUSTMENT_REJECTED_ATTRIBUTE_ID (0x04D3)
+#define ZCL_CHANGE_PAYMENT_MODE_RECEIVED_ATTRIBUTE_ID (0x04D4)
+#define ZCL_CHANGE_PAYMENT_MODE_ACTIONED_ATTRIBUTE_ID (0x04D5)
+#define ZCL_CHANGE_PAYMENT_MODE_CANCELLED_ATTRIBUTE_ID (0x04D6)
+#define ZCL_CHANGE_PAYMENT_MODE_REJECTED_ATTRIBUTE_ID (0x04D7)
+#define ZCL_GET_PREPAY_SNAPSHOT_RECEIVED_ATTRIBUTE_ID (0x04D8)
+#define ZCL_GET_PREPAY_SNAPSHOT_ACTIONED_ATTRIBUTE_ID (0x04D9)
+#define ZCL_GET_PREPAY_SNAPSHOT_CANCELLED_ATTRIBUTE_ID (0x04DA)
+#define ZCL_GET_PREPAY_SNAPSHOT_REJECTED_ATTRIBUTE_ID (0x04DB)
+#define ZCL_GET_TOPUP_LOG_RECEIVED_ATTRIBUTE_ID (0x04DC)
+#define ZCL_GET_TOPUP_LOG_ACTIONED_ATTRIBUTE_ID (0x04DD)
+#define ZCL_GET_TOPUP_LOG_CANCELLED_ATTRIBUTE_ID (0x04DE)
+#define ZCL_GET_TOPUP_LOG_REJECTED_ATTRIBUTE_ID (0x04DF)
+#define ZCL_SET_LOW_CREDIT_WARNING_LEVEL_RECEIVED_ATTRIBUTE_ID (0x04E0)
+#define ZCL_SET_LOW_CREDIT_WARNING_LEVEL_ACTIONED_ATTRIBUTE_ID (0x04E1)
+#define ZCL_SET_LOW_CREDIT_WARNING_LEVEL_CANCELLED_ATTRIBUTE_ID (0x04E2)
+#define ZCL_SET_LOW_CREDIT_WARNING_LEVEL_REJECTED_ATTRIBUTE_ID (0x04E3)
+#define ZCL_GET_DEBT_REPAY_LOG_RECEIVED_ATTRIBUTE_ID (0x04E4)
+#define ZCL_GET_DEBT_REPAY_LOG_ACTIONED_ATTRIBUTE_ID (0x04E5)
+#define ZCL_GET_DEBT_REPAY_LOG_CANCELLED_ATTRIBUTE_ID (0x04E6)
+#define ZCL_GET_DEBT_REPAY_LOG_REJECTED_ATTRIBUTE_ID (0x04E7)
+#define ZCL_SET_MAXIMUM_CREDIT_LIMIT_RECEIVED_ATTRIBUTE_ID (0x04E8)
+#define ZCL_SET_MAXIMUM_CREDIT_LIMIT_ACTIONED_ATTRIBUTE_ID (0x04E9)
+#define ZCL_SET_MAXIMUM_CREDIT_LIMIT_CANCELLED_ATTRIBUTE_ID (0x04EA)
+#define ZCL_SET_MAXIMUM_CREDIT_LIMIT_REJECTED_ATTRIBUTE_ID (0x04EB)
+#define ZCL_SET_OVERALL_DEBT_CAP_RECEIVED_ATTRIBUTE_ID (0x04EC)
+#define ZCL_SET_OVERALL_DEBT_CAP_ACTIONED_ATTRIBUTE_ID (0x04ED)
+#define ZCL_SET_OVERALL_DEBT_CAP_CANCELLED_ATTRIBUTE_ID (0x04EE)
+#define ZCL_SET_OVERALL_DEBT_CAP_REJECTED_ATTRIBUTE_ID (0x04EF)
+#define ZCL_CALENDAR_CLUSTER_NOT_FOUND_ATTRIBUTE_ID (0x0500)
+#define ZCL_CALENDAR_CHANGE_PASSIVE_ACTIVATED_ATTRIBUTE_ID (0x0501)
+#define ZCL_CALENDAR_CHANGE_PASSIVE_UPDATED_ATTRIBUTE_ID (0x0502)
+#define ZCL_PUBLISH_CALENDAR_RECEIVED_ATTRIBUTE_ID (0x05C0)
+#define ZCL_PUBLISH_CALENDAR_ACTIONED_ATTRIBUTE_ID (0x05C1)
+#define ZCL_PUBLISH_CALENDAR_CANCELLED_ATTRIBUTE_ID (0x05C2)
+#define ZCL_PUBLISH_CALENDAR_REJECTED_ATTRIBUTE_ID (0x05C3)
+#define ZCL_PUBLISH_DAY_PROFILE_RECEIVED_ATTRIBUTE_ID (0x05C4)
+#define ZCL_PUBLISH_DAY_PROFILE_ACTIONED_ATTRIBUTE_ID (0x05C5)
+#define ZCL_PUBLISH_DAY_PROFILE_CANCELLED_ATTRIBUTE_ID (0x05C6)
+#define ZCL_PUBLISH_DAY_PROFILE_REJECTED_ATTRIBUTE_ID (0x05C7)
+#define ZCL_PUBLISH_WEEK_PROFILE_RECEIVED_ATTRIBUTE_ID (0x05C8)
+#define ZCL_PUBLISH_WEEK_PROFILE_ACTIONED_ATTRIBUTE_ID (0x05C9)
+#define ZCL_PUBLISH_WEEK_PROFILE_CANCELLED_ATTRIBUTE_ID (0x05CA)
+#define ZCL_PUBLISH_WEEK_PROFILE_REJECTED_ATTRIBUTE_ID (0x05CB)
+#define ZCL_PUBLISH_SEASONS_RECEIVED_ATTRIBUTE_ID (0x05CC)
+#define ZCL_PUBLISH_SEASONS_ACTIONED_ATTRIBUTE_ID (0x05CD)
+#define ZCL_PUBLISH_SEASONS_CANCELLED_ATTRIBUTE_ID (0x05CE)
+#define ZCL_PUBLISH_SEASONS_REJECTED_ATTRIBUTE_ID (0x05CF)
+#define ZCL_PUBLISH_SPECIAL_DAYS_RECEIVED_ATTRIBUTE_ID (0x05D0)
+#define ZCL_PUBLISH_SPECIAL_DAYS_ACTIONED_ATTRIBUTE_ID (0x05D1)
+#define ZCL_PUBLISH_SPECIAL_DAYS_CANCELLED_ATTRIBUTE_ID (0x05D2)
+#define ZCL_PUBLISH_SPECIAL_DAYS_REJECTED_ATTRIBUTE_ID (0x05D3)
+#define ZCL_PASSWORD_1_CHANGE_ATTRIBUTE_ID (0x0600)
+#define ZCL_PASSWORD_2_CHANGE_ATTRIBUTE_ID (0x0601)
+#define ZCL_PASSWORD_3_CHANGE_ATTRIBUTE_ID (0x0602)
+#define ZCL_PASSWORD_4_CHANGE_ATTRIBUTE_ID (0x0603)
+#define ZCL_EVENT_LOG_CLEARED_ATTRIBUTE_ID (0x0604)
+#define ZCL_ZIGBEE_APS_TIMEOUT_ATTRIBUTE_ID (0x0610)
+#define ZCL_ZIGBEE_IEEE_TRANSMISSION_FAILURE_OVER_THRESHOLD_ATTRIBUTE_ID (0x0611)
+#define ZCL_ZIGBEE_IEEE_FRAME_CHECK_SEQUENCE_THRESHOLD_ATTRIBUTE_ID (0x0612)
+#define ZCL_ERROR_CERTIFICATE_ATTRIBUTE_ID (0x0613)
+#define ZCL_ERROR_SIGNATURE_ATTRIBUTE_ID (0x0614)
+#define ZCL_ERROR_PROGRAM_STORAGE_ATTRIBUTE_ID (0x0615)
+#define ZCL_PUBLISH_COT_RECEIVED_ATTRIBUTE_ID (0x06C0)
+#define ZCL_PUBLISH_COT_ACTIONED_ATTRIBUTE_ID (0x06C1)
+#define ZCL_PUBLISH_COT_CANCELLED_ATTRIBUTE_ID (0x06C2)
+#define ZCL_PUBLISH_COT_REJECTED_ATTRIBUTE_ID (0x06C3)
+#define ZCL_PUBLISH_COS_RECEIVED_ATTRIBUTE_ID (0x06C4)
+#define ZCL_PUBLISH_COS_ACTIONED_ATTRIBUTE_ID (0x06C5)
+#define ZCL_PUBLISH_COS_CANCELLED_ATTRIBUTE_ID (0x06C6)
+#define ZCL_PUBLISH_COS_REJECTED_ATTRIBUTE_ID (0x06C7)
+#define ZCL_CHANGE_PASSWORD_RECEIVED_ATTRIBUTE_ID (0x06C8)
+#define ZCL_CHANGE_PASSWORD_ACTIONED_ATTRIBUTE_ID (0x06C9)
+#define ZCL_CHANGE_PASSWORD_CANCELLED_ATTRIBUTE_ID (0x06CA)
+#define ZCL_CHANGE_PASSWORD_REJECTED_ATTRIBUTE_ID (0x06CB)
+#define ZCL_SET_EVENT_CONFIGURATION_RECEIVED_ATTRIBUTE_ID (0x06CC)
+#define ZCL_SET_EVENT_CONFIGURATION_ACTIONED_ATTRIBUTE_ID (0x06CD)
+#define ZCL_SET_EVENT_CONFIGURATION_CANCELLED_ATTRIBUTE_ID (0x06CE)
+#define ZCL_SET_EVENT_CONFIGURATION_REJECTED_ATTRIBUTE_ID (0x06CF)
+#define ZCL_UPDATE_SITE_ID_RECEIVED_ATTRIBUTE_ID (0x06D0)
+#define ZCL_UPDATE_SITE_ID_ACTIONED_ATTRIBUTE_ID (0x06D1)
+#define ZCL_UPDATE_SITE_ID_CANCELLED_ATTRIBUTE_ID (0x06D2)
+#define ZCL_UPDATE_SITE_ID_REJECTED_ATTRIBUTE_ID (0x06D3)
+#define ZCL_UPDATE_CIN_RECEIVED_ATTRIBUTE_ID (0x06D4)
+#define ZCL_UPDATE_CIN_ACTIONED_ATTRIBUTE_ID (0x06D5)
+#define ZCL_UPDATE_CIN_CANCELLED_ATTRIBUTE_ID (0x06D6)
+#define ZCL_UPDATE_CIN_REJECTED_ATTRIBUTE_ID (0x06D7)
+#define ZCL_TUNNELING_CLUSTER_NOT_FOUND_ATTRIBUTE_ID (0x0700)
+#define ZCL_UNSUPPORTED_PROTOCOL_ATTRIBUTE_ID (0x0701)
+#define ZCL_INCORRECT_PROTOCOL_ATTRIBUTE_ID (0x0702)
+#define ZCL_REQUEST_TUNNEL_COMMAND_RECEIVED_ATTRIBUTE_ID (0x07C0)
+#define ZCL_REQUEST_TUNNEL_COMMAND_REJECTED_ATTRIBUTE_ID (0x07C1)
+#define ZCL_REQUEST_TUNNEL_COMMAND_GENERATED_ATTRIBUTE_ID (0x07C2)
+#define ZCL_CLOSE_TUNNEL_COMMAND_RECEIVED_ATTRIBUTE_ID (0x07C3)
+#define ZCL_CLOSE_TUNNEL_COMMAND_REJECTED_ATTRIBUTE_ID (0x07C4)
+#define ZCL_CLOSE_TUNNEL_COMMAND_GENERATED_ATTRIBUTE_ID (0x07C5)
+#define ZCL_TRANSFER_DATA_COMMAND_RECEIVED_ATTRIBUTE_ID (0x07C6)
+#define ZCL_TRANSFER_DATA_COMMAND_REJECTED_ATTRIBUTE_ID (0x07C7)
+#define ZCL_TRANSFER_DATA_COMMAND_GENERATED_ATTRIBUTE_ID (0x07C8)
+#define ZCL_TRANSFER_DATA_ERROR_COMMAND_RECEIVED_ATTRIBUTE_ID (0x07C9)
+#define ZCL_TRANSFER_DATA_ERROR_COMMAND_REJECTED_ATTRIBUTE_ID (0x07CA)
+#define ZCL_TRANSFER_DATA_ERROR_COMMAND_GENERATED_ATTRIBUTE_ID (0x07CB)
+#define ZCL_ACK_TRANSFER_DATA_COMMAND_RECEIVED_ATTRIBUTE_ID (0x07CC)
+#define ZCL_ACK_TRANSFER_DATA_COMMAND_REJECTED_ATTRIBUTE_ID (0x07CD)
+#define ZCL_ACK_TRANSFER_DATA_COMMAND_GENERATED_ATTRIBUTE_ID (0x07CE)
+#define ZCL_READY_DATA_COMMAND_RECEIVED_ATTRIBUTE_ID (0x07CF)
+#define ZCL_READY_DATA_COMMAND_REJECTED_ATTRIBUTE_ID (0x07D0)
+#define ZCL_READY_DATA_COMMAND_GENERATED_ATTRIBUTE_ID (0x07D1)
+#define ZCL_GET_SUPPORTED_TUNNEL_PROTOCOLS_COMMAND_RECEIVED_ATTRIBUTE_ID (0x07D2)
+#define ZCL_GET_SUPPORTED_TUNNEL_PROTOCOLS_COMMAND_REJECTED_ATTRIBUTE_ID (0x07D3)
+#define ZCL_GET_SUPPORTED_TUNNEL_PROTOCOLS_COMMAND_GENERATED_ATTRIBUTE_ID (0x07D4)
+#define ZCL_FIRMWARE_READY_FOR_ACTIVATION_ATTRIBUTE_ID (0x0800)
+#define ZCL_FIRMWARE_ACTIVATED_ATTRIBUTE_ID (0x0801)
+#define ZCL_FIRMWARE_ACTIVATION_FAILURE_ATTRIBUTE_ID (0x0802)
+#define ZCL_PATCH_READY_FOR_ACTIVATION_ATTRIBUTE_ID (0x0803)
+#define ZCL_PATCH_ACTIVATED_ATTRIBUTE_ID (0x0804)
+#define ZCL_PATCH_FAILURE_ATTRIBUTE_ID (0x0805)
+#define ZCL_IMAGE_NOTIFY_COMMAND_RECEIVED_ATTRIBUTE_ID (0x08C0)
+#define ZCL_IMAGE_NOTIFY_COMMAND_REJECTED_ATTRIBUTE_ID (0x08C1)
+#define ZCL_QUERY_NEXT_IMAGE_REQUEST_GENERATED_ATTRIBUTE_ID (0x08C2)
+#define ZCL_QUERY_NEXT_IMAGE_RESPONSE_RECEIVED_ATTRIBUTE_ID (0x08C3)
+#define ZCL_QUERY_NEXT_IMAGE_RESPONSE_REJECTED_ATTRIBUTE_ID (0x08C4)
+#define ZCL_IMAGE_BLOCK_REQUEST_GENERATED_ATTRIBUTE_ID (0x08C5)
+#define ZCL_IMAGE_PAGE_REQUEST_GENERATED_ATTRIBUTE_ID (0x08C6)
+#define ZCL_IMAGE_BLOCK_RESPONSE_RECEIVED_ATTRIBUTE_ID (0x08C7)
+#define ZCL_IMAGE_BLOCK_RESPONSE_REJECTED_ATTRIBUTE_ID (0x08C8)
+#define ZCL_UPGRADE_END_REQUEST_GENERATED_ATTRIBUTE_ID (0x08C9)
+#define ZCL_UPGRADE_END_RESPONSE_RECEIVED_ATTRIBUTE_ID (0x08CA)
+#define ZCL_UPGRADE_END_RESPONSE_REJECTED_ATTRIBUTE_ID (0x08CB)
+#define ZCL_QUERY_SPECIFIC_FILE_REQUEST_GENERATED_ATTRIBUTE_ID (0x08CC)
+#define ZCL_QUERY_SPECIFIC_FILE_RESPONSE_RECEIVED_ATTRIBUTE_ID (0x08CD)
+#define ZCL_QUERY_SPECIFIC_FILE_RESPONSE_REJECTED_ATTRIBUTE_ID (0x08CE)
+
+// Server attributes
+#define ZCL_PROVIDER_ID_SERVER_ATTRIBUTE_ID (0x0100)
+#define ZCL_PROVIDER_NAME_ATTRIBUTE_ID (0x0101)
+#define ZCL_PROVIDER_CONTACT_DETAILS_ATTRIBUTE_ID (0x0102)
+#define ZCL_PROPOSED_PROVIDER_ID_ATTRIBUTE_ID (0x0110)
+#define ZCL_PROPOSED_PROVIDER_NAME_ATTRIBUTE_ID (0x0111)
+#define ZCL_PROPOSED_PROVIDER_CHANGE_DATE_TIME_ATTRIBUTE_ID (0x0112)
+#define ZCL_PROPOSED_PROVIDER_CHANGE_CONTROL_ATTRIBUTE_ID (0x0113)
+#define ZCL_RECEIVED_PROVIDER_ID_SERVER_ATTRIBUTE_ID (0x0120)
+#define ZCL_RECEIVED_PROVIDER_NAME_ATTRIBUTE_ID (0x0121)
+#define ZCL_RECEIVED_PROVIDER_CONTACT_DETAILS_ATTRIBUTE_ID (0x0122)
+#define ZCL_RECEIVED_PROPOSED_PROVIDER_ID_ATTRIBUTE_ID (0x0130)
+#define ZCL_RECEIVED_PROPOSED_PROVIDER_NAME_ATTRIBUTE_ID (0x0131)
+#define ZCL_RECEIVED_PROPOSED_PROVIDER_CHANGE_DATE_TIME_ATTRIBUTE_ID (0x0132)
+#define ZCL_RECEIVED_PROPOSED_PROVIDER_CHANGE_CONTROL_ATTRIBUTE_ID (0x0133)
+#define ZCL_CHANGE_OF_TENANCY_UPDATE_DATE_TIME_ATTRIBUTE_ID (0x0200)
+#define ZCL_PROPOSED_TENANCY_CHANGE_CONTROL_ATTRIBUTE_ID (0x0201)
+#define ZCL_WAN_STATUS_ATTRIBUTE_ID (0x0300)
+#define ZCL_LOW_MEDIUM_THRESHOLD_ATTRIBUTE_ID (0x0400)
+#define ZCL_MEDIUM_HIGH_THRESHOLD_ATTRIBUTE_ID (0x0401)
+
+// Attribute ids for cluster: Events
+
+// Client attributes
+
+// Server attributes
+
+// Attribute ids for cluster: MDU Pairing
+
+// Client attributes
+
+// Server attributes
+
+// Attribute ids for cluster: Sub-GHz
+
+// Client attributes
+
+// Server attributes
+#define ZCL_SUB_GHZ_CLUSTER_CHANNEL_CHANGE_ATTRIBUTE_ID (0x0000)
+#define ZCL_SUB_GHZ_CLUSTER_PAGE_28_CHANNEL_MASK_ATTRIBUTE_ID (0x0001)
+#define ZCL_SUB_GHZ_CLUSTER_PAGE_29_CHANNEL_MASK_ATTRIBUTE_ID (0x0002)
+#define ZCL_SUB_GHZ_CLUSTER_PAGE_30_CHANNEL_MASK_ATTRIBUTE_ID (0x0003)
+#define ZCL_SUB_GHZ_CLUSTER_PAGE_31_CHANNEL_MASK_ATTRIBUTE_ID (0x0004)
+
+// Attribute ids for cluster: Key Establishment
+
+// Client attributes
+#define ZCL_KEY_ESTABLISHMENT_SUITE_CLIENT_ATTRIBUTE_ID (0x0000)
+
+// Server attributes
+#define ZCL_KEY_ESTABLISHMENT_SUITE_SERVER_ATTRIBUTE_ID (0x0000)
+
+// Attribute ids for cluster: Information
+
+// Client attributes
+
+// Server attributes
+#define ZCL_NODE_DESCRIPTION_ATTRIBUTE_ID (0x0000)
+#define ZCL_DELIVERY_ENABLE_ATTRIBUTE_ID (0x0001)
+#define ZCL_PUSH_INFORMATION_TIMER_ATTRIBUTE_ID (0x0002)
+#define ZCL_ENABLE_SECURE_CONFIGURATION_ATTRIBUTE_ID (0x0003)
+#define ZCL_NUMBER_OF_CONTENTS_ATTRIBUTE_ID (0x0010)
+#define ZCL_CONTENT_ROOT_ID_ATTRIBUTE_ID (0x0011)
+
+// Attribute ids for cluster: Data Sharing
+
+// Client attributes
+
+// Server attributes
+#define ZCL_DEVICE_NAME_ATTRIBUTE_ID (0x0000)
+#define ZCL_DEVICE_DESCRIPTION_ATTRIBUTE_ID (0x0001)
+
+// Attribute ids for cluster: Gaming
+
+// Client attributes
+
+// Server attributes
+#define ZCL_PLAYER_NAME_ATTRIBUTE_ID (0x0000)
+#define ZCL_NB_OF_GAMES_ATTRIBUTE_ID (0x0001)
+#define ZCL_LIST_OF_GAMES_ATTRIBUTE_ID (0x0002)
+#define ZCL_ANNOUNCEMENT_INTERVAL_ATTRIBUTE_ID (0x0003)
+#define ZCL_GAME_ID_ATTRIBUTE_ID (0x0010)
+#define ZCL_NAME_OF_GAME_ATTRIBUTE_ID (0x0011)
+#define ZCL_GAME_MASTER_ATTRIBUTE_ID (0x0012)
+#define ZCL_GAMING_STATUS_ATTRIBUTE_ID (0x0013)
+#define ZCL_CURRENT_NB_OF_PLAYERS_ATTRIBUTE_ID (0x0014)
+#define ZCL_LIST_OF_CURRENT_PLAYERS_ATTRIBUTE_ID (0x0015)
+#define ZCL_MAX_NB_OF_PLAYERS_ATTRIBUTE_ID (0x0016)
+#define ZCL_MIN_NB_OF_PLAYERS_ATTRIBUTE_ID (0x0017)
+#define ZCL_CURRENT_GAME_LEVEL_ATTRIBUTE_ID (0x0018)
+#define ZCL_SCORE_OF_THIS_PLAYER_ATTRIBUTE_ID (0x0019)
+#define ZCL_TIMER1_ATTRIBUTE_ID (0x001A)
+#define ZCL_TIMER2_ATTRIBUTE_ID (0x001B)
+#define ZCL_TIMER3_ATTRIBUTE_ID (0x001C)
+#define ZCL_COUNTER1_ATTRIBUTE_ID (0x001D)
+#define ZCL_COUNTER2_ATTRIBUTE_ID (0x001E)
+#define ZCL_DOWNLOADABLE_ATTRIBUTE_ID (0x001F)
+
+// Attribute ids for cluster: Data Rate Control
+
+// Client attributes
+
+// Server attributes
+#define ZCL_AVERAGE_LATENCY_REQUIREMENT_ATTRIBUTE_ID (0x0000)
+#define ZCL_MAX_LATENCY_REQUIREMENT_ATTRIBUTE_ID (0x0001)
+#define ZCL_BANDWIDTH_REQUIREMENT_ATTRIBUTE_ID (0x0002)
+
+// Attribute ids for cluster: Voice over ZigBee
+
+// Client attributes
+
+// Server attributes
+#define ZCL_CODEC_TYPE_ATTRIBUTE_ID (0x0000)
+#define ZCL_SAMPLING_FREQUENCY_ATTRIBUTE_ID (0x0001)
+#define ZCL_CODEC_RATE_ATTRIBUTE_ID (0x0002)
+#define ZCL_ESTABLISHMENT_TIMEOUT_ATTRIBUTE_ID (0x0003)
+#define ZCL_CODEC_TYPE_SUB1_ATTRIBUTE_ID (0x0004)
+#define ZCL_CODEC_TYPE_SUB2_ATTRIBUTE_ID (0x0005)
+#define ZCL_CODEC_TYPE_SUB3_ATTRIBUTE_ID (0x0006)
+#define ZCL_COMPRESSION_TYPE_ATTRIBUTE_ID (0x0007)
+#define ZCL_COMPRESSION_RATE_ATTRIBUTE_ID (0x0008)
+#define ZCL_OPTION_FLAGS_ATTRIBUTE_ID (0x0009)
+#define ZCL_THRESHOLD_ATTRIBUTE_ID (0x000A)
+
+// Attribute ids for cluster: Chatting
+
+// Client attributes
+
+// Server attributes
+#define ZCL_U_ID_ATTRIBUTE_ID (0x0000)
+#define ZCL_NICKNAME_ATTRIBUTE_ID (0x0001)
+#define ZCL_C_ID_ATTRIBUTE_ID (0x0010)
+#define ZCL_NAME_ATTRIBUTE_ID (0x0011)
+#define ZCL_ENABLE_ADD_CHAT_ATTRIBUTE_ID (0x0020)
+
+// Attribute ids for cluster: Payment
+
+// Client attributes
+
+// Server attributes
+#define ZCL_PAYMENT_USER_ID_ATTRIBUTE_ID (0x0000)
+#define ZCL_USER_TYPE_ATTRIBUTE_ID (0x0001)
+#define ZCL_PAYMENT_SERVICE_ID_ATTRIBUTE_ID (0x0010)
+#define ZCL_PAYMENT_SERVICE_PROVIDER_ID_ATTRIBUTE_ID (0x0011)
+#define ZCL_TOTEM_ID_ATTRIBUTE_ID (0x0012)
+#define ZCL_CURRENCY_ATTRIBUTE_ID (0x0020)
+#define ZCL_PRICE_TRAILING_DIGIT_ATTRIBUTE_ID (0x0021)
+#define ZCL_PRICE_ATTRIBUTE_ID (0x0022)
+#define ZCL_GOOD_ID_ATTRIBUTE_ID (0x0030)
+#define ZCL_SERIAL_NUMBER_ATTRIBUTE_ID (0x0031)
+#define ZCL_PAYMENT_TIMESTAMP_ATTRIBUTE_ID (0x0032)
+#define ZCL_TRANS_ID_ATTRIBUTE_ID (0x0033)
+#define ZCL_TRANS_STATUS_ATTRIBUTE_ID (0x0034)
+#define ZCL_PAYMENT_STATUS_ATTRIBUTE_ID (0x0035)
+
+// Attribute ids for cluster: Billing
+
+// Client attributes
+
+// Server attributes
+#define ZCL_USER_ID_ATTRIBUTE_ID (0x0000)
+#define ZCL_SERVICE_ID_ATTRIBUTE_ID (0x0010)
+#define ZCL_SERVICE_PROVIDER_ID_ATTRIBUTE_ID (0x0011)
+#define ZCL_SESSION_INTERVAL_ATTRIBUTE_ID (0x0012)
+#define ZCL_TIMESTAMP_ATTRIBUTE_ID (0x0020)
+#define ZCL_DURATION_ATTRIBUTE_ID (0x0021)
+
+// Attribute ids for cluster: Appliance Identification
+
+// Client attributes
+
+// Server attributes
+#define ZCL_BASIC_IDENTIFICATION_ATTRIBUTE_ID (0x0000)
+#define ZCL_APPLIANCE_COMPANY_NAME_ATTRIBUTE_ID (0x0010)
+#define ZCL_COMPANY_ID_ATTRIBUTE_ID (0x0011)
+#define ZCL_BRAND_NAME_ATTRIBUTE_ID (0x0012)
+#define ZCL_BRAND_ID_ATTRIBUTE_ID (0x0013)
+#define ZCL_APPLIANCE_MODEL_ATTRIBUTE_ID (0x0014)
+#define ZCL_APPLIANCE_PART_NUMBER_ATTRIBUTE_ID (0x0015)
+#define ZCL_APPLIANCE_PRODUCT_REVISION_ATTRIBUTE_ID (0x0016)
+#define ZCL_APPLIANCE_SOFTWARE_REVISION_ATTRIBUTE_ID (0x0017)
+#define ZCL_PRODUCT_TYPE_NAME_ATTRIBUTE_ID (0x0018)
+#define ZCL_PRODUCT_TYPE_ID_ATTRIBUTE_ID (0x0019)
+#define ZCL_CECED_SPECIFICATION_VERSION_ATTRIBUTE_ID (0x001A)
+
+// Attribute ids for cluster: Meter Identification
+
+// Client attributes
+
+// Server attributes
+#define ZCL_METER_COMPANY_NAME_ATTRIBUTE_ID (0x0000)
+#define ZCL_METER_TYPE_ID_ATTRIBUTE_ID (0x0001)
+#define ZCL_DATA_QUALITY_ID_ATTRIBUTE_ID (0x0004)
+#define ZCL_CUSTOMER_NAME_ATTRIBUTE_ID (0x0005)
+#define ZCL_METER_MODEL_ATTRIBUTE_ID (0x0006)
+#define ZCL_METER_PART_NUMBER_ATTRIBUTE_ID (0x0007)
+#define ZCL_METER_PRODUCT_REVISION_ATTRIBUTE_ID (0x0008)
+#define ZCL_METER_SOFTWARE_REVISION_ATTRIBUTE_ID (0x000A)
+#define ZCL_UTILITY_NAME_ATTRIBUTE_ID (0x000B)
+#define ZCL_POD_ATTRIBUTE_ID (0x000C)
+#define ZCL_AVAILABLE_POWER_ATTRIBUTE_ID (0x000D)
+#define ZCL_POWER_THRESHOLD_ATTRIBUTE_ID (0x000E)
+
+// Attribute ids for cluster: Appliance Events and Alert
+
+// Client attributes
+
+// Server attributes
+
+// Attribute ids for cluster: Appliance Statistics
+
+// Client attributes
+
+// Server attributes
+#define ZCL_LOG_MAX_SIZE_ATTRIBUTE_ID (0x0000)
+#define ZCL_LOG_QUEUE_MAX_SIZE_ATTRIBUTE_ID (0x0001)
+
+// Attribute ids for cluster: Electrical Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_MEASUREMENT_TYPE_ATTRIBUTE_ID (0x0000)
+#define ZCL_DC_VOLTAGE_ATTRIBUTE_ID (0x0100)
+#define ZCL_DC_VOLTAGE_MIN_ATTRIBUTE_ID (0x0101)
+#define ZCL_DC_VOLTAGE_MAX_ATTRIBUTE_ID (0x0102)
+#define ZCL_DC_CURRENT_ATTRIBUTE_ID (0x0103)
+#define ZCL_DC_CURRENT_MIN_ATTRIBUTE_ID (0x0104)
+#define ZCL_DC_CURRENT_MAX_ATTRIBUTE_ID (0x0105)
+#define ZCL_DC_POWER_ATTRIBUTE_ID (0x0106)
+#define ZCL_DC_POWER_MIN_ATTRIBUTE_ID (0x0107)
+#define ZCL_DC_POWER_MAX_ATTRIBUTE_ID (0x0108)
+#define ZCL_DC_VOLTAGE_MULTIPLIER_ATTRIBUTE_ID (0x0200)
+#define ZCL_DC_VOLTAGE_DIVISOR_ATTRIBUTE_ID (0x0201)
+#define ZCL_DC_CURRENT_MULTIPLIER_ATTRIBUTE_ID (0x0202)
+#define ZCL_DC_CURRENT_DIVISOR_ATTRIBUTE_ID (0x0203)
+#define ZCL_DC_POWER_MULTIPLIER_ATTRIBUTE_ID (0x0204)
+#define ZCL_DC_POWER_DIVISOR_ATTRIBUTE_ID (0x0205)
+#define ZCL_AC_FREQUENCY_ATTRIBUTE_ID (0x0300)
+#define ZCL_AC_FREQUENCY_MIN_ATTRIBUTE_ID (0x0301)
+#define ZCL_AC_FREQUENCY_MAX_ATTRIBUTE_ID (0x0302)
+#define ZCL_NEUTRAL_CURRENT_ATTRIBUTE_ID (0x0303)
+#define ZCL_TOTAL_ACTIVE_POWER_ATTRIBUTE_ID (0x0304)
+#define ZCL_TOTAL_REACTIVE_POWER_ATTRIBUTE_ID (0x0305)
+#define ZCL_TOTAL_APPARENT_POWER_ATTRIBUTE_ID (0x0306)
+#define ZCL_MEASURED_1_ST_HARMONIC_CURRENT_ATTRIBUTE_ID (0x0307)
+#define ZCL_MEASURED_3_RD_HARMONIC_CURRENT_ATTRIBUTE_ID (0x0308)
+#define ZCL_MEASURED_5_TH_HARMONIC_CURRENT_ATTRIBUTE_ID (0x0309)
+#define ZCL_MEASURED_7_TH_HARMONIC_CURRENT_ATTRIBUTE_ID (0x030A)
+#define ZCL_MEASURED_9_TH_HARMONIC_CURRENT_ATTRIBUTE_ID (0x030B)
+#define ZCL_MEASURED_11_TH_HARMONIC_CURRENT_ATTRIBUTE_ID (0x030C)
+#define ZCL_MEASURED_PHASE_1_ST_HARMONIC_CURRENT_ATTRIBUTE_ID (0x030D)
+#define ZCL_MEASURED_PHASE_3_RD_HARMONIC_CURRENT_ATTRIBUTE_ID (0x030E)
+#define ZCL_MEASURED_PHASE_5_TH_HARMONIC_CURRENT_ATTRIBUTE_ID (0x030F)
+#define ZCL_MEASURED_PHASE_7_TH_HARMONIC_CURRENT_ATTRIBUTE_ID (0x0310)
+#define ZCL_MEASURED_PHASE_9_TH_HARMONIC_CURRENT_ATTRIBUTE_ID (0x0311)
+#define ZCL_MEASURED_PHASE_11_TH_HARMONIC_CURRENT_ATTRIBUTE_ID (0x0312)
+#define ZCL_AC_FREQUENCY_MULTIPLIER_ATTRIBUTE_ID (0x0400)
+#define ZCL_AC_FREQUENCY_DIVISOR_ATTRIBUTE_ID (0x0401)
+#define ZCL_POWER_MULTIPLIER_ATTRIBUTE_ID (0x0402)
+#define ZCL_POWER_DIVISOR_ATTRIBUTE_ID (0x0403)
+#define ZCL_HARMONIC_CURRENT_MULTIPLIER_ATTRIBUTE_ID (0x0404)
+#define ZCL_PHASE_HARMONIC_CURRENT_MULTIPLIER_ATTRIBUTE_ID (0x0405)
+#define ZCL_INSTANTANEOUS_VOLTAGE_ATTRIBUTE_ID (0x0500)
+#define ZCL_INSTANTANEOUS_LINE_CURRENT_ATTRIBUTE_ID (0x0501)
+#define ZCL_INSTANTANEOUS_ACTIVE_CURRENT_ATTRIBUTE_ID (0x0502)
+#define ZCL_INSTANTANEOUS_REACTIVE_CURRENT_ATTRIBUTE_ID (0x0503)
+#define ZCL_INSTANTANEOUS_POWER_ATTRIBUTE_ID (0x0504)
+#define ZCL_RMS_VOLTAGE_ATTRIBUTE_ID (0x0505)
+#define ZCL_RMS_VOLTAGE_MIN_ATTRIBUTE_ID (0x0506)
+#define ZCL_RMS_VOLTAGE_MAX_ATTRIBUTE_ID (0x0507)
+#define ZCL_RMS_CURRENT_ATTRIBUTE_ID (0x0508)
+#define ZCL_RMS_CURRENT_MIN_ATTRIBUTE_ID (0x0509)
+#define ZCL_RMS_CURRENT_MAX_ATTRIBUTE_ID (0x050A)
+#define ZCL_ACTIVE_POWER_ATTRIBUTE_ID (0x050B)
+#define ZCL_ACTIVE_POWER_MIN_ATTRIBUTE_ID (0x050C)
+#define ZCL_ACTIVE_POWER_MAX_ATTRIBUTE_ID (0x050D)
+#define ZCL_REACTIVE_POWER_ATTRIBUTE_ID (0x050E)
+#define ZCL_APPARENT_POWER_ATTRIBUTE_ID (0x050F)
+#define ZCL_AC_POWER_FACTOR_ATTRIBUTE_ID (0x0510)
+#define ZCL_AVERAGE_RMS_VOLTAGE_MEASUREMENT_PERIOD_ATTRIBUTE_ID (0x0511)
+#define ZCL_AVERAGE_RMS_UNDER_VOLTAGE_COUNTER_ATTRIBUTE_ID (0x0513)
+#define ZCL_RMS_EXTREME_OVER_VOLTAGE_PERIOD_ATTRIBUTE_ID (0x0514)
+#define ZCL_RMS_EXTREME_UNDER_VOLTAGE_PERIOD_ATTRIBUTE_ID (0x0515)
+#define ZCL_RMS_VOLTAGE_SAG_PERIOD_ATTRIBUTE_ID (0x0516)
+#define ZCL_RMS_VOLTAGE_SWELL_PERIOD_ATTRIBUTE_ID (0x0517)
+#define ZCL_AC_VOLTAGE_MULTIPLIER_ATTRIBUTE_ID (0x0600)
+#define ZCL_AC_VOLTAGE_DIVISOR_ATTRIBUTE_ID (0x0601)
+#define ZCL_AC_CURRENT_MULTIPLIER_ATTRIBUTE_ID (0x0602)
+#define ZCL_AC_CURRENT_DIVISOR_ATTRIBUTE_ID (0x0603)
+#define ZCL_AC_POWER_MULTIPLIER_ATTRIBUTE_ID (0x0604)
+#define ZCL_AC_POWER_DIVISOR_ATTRIBUTE_ID (0x0605)
+#define ZCL_DC_OVERLOAD_ALARMS_MASK_ATTRIBUTE_ID (0x0700)
+#define ZCL_DC_VOLTAGE_OVERLOAD_ATTRIBUTE_ID (0x0701)
+#define ZCL_DC_CURRENT_OVERLOAD_ATTRIBUTE_ID (0x0702)
+#define ZCL_AC_OVERLOAD_ALARMS_MASK_ATTRIBUTE_ID (0x0800)
+#define ZCL_AC_VOLTAGE_OVERLOAD_ATTRIBUTE_ID (0x0801)
+#define ZCL_AC_CURRENT_OVERLOAD_ATTRIBUTE_ID (0x0802)
+#define ZCL_AC_POWER_OVERLOAD_ATTRIBUTE_ID (0x0803)
+#define ZCL_AC_REACTIVE_POWER_OVERLOAD_ATTRIBUTE_ID (0x0804)
+#define ZCL_AVERAGE_RMS_OVER_VOLTAGE_ATTRIBUTE_ID (0x0805)
+#define ZCL_AVERAGE_RMS_UNDER_VOLTAGE_ATTRIBUTE_ID (0x0806)
+#define ZCL_RMS_EXTREME_OVER_VOLTAGE_ATTRIBUTE_ID (0x0807)
+#define ZCL_RMS_EXTREME_UNDER_VOLTAGE_ATTRIBUTE_ID (0x0808)
+#define ZCL_RMS_VOLTAGE_SAG_ATTRIBUTE_ID (0x0809)
+#define ZCL_RMS_VOLTAGE_SWELL_ATTRIBUTE_ID (0x080A)
+#define ZCL_LINE_CURRENT_PHASE_B_ATTRIBUTE_ID (0x0901)
+#define ZCL_ACTIVE_CURRENT_PHASE_B_ATTRIBUTE_ID (0x0902)
+#define ZCL_REACTIVE_CURRENT_PHASE_B_ATTRIBUTE_ID (0x0903)
+#define ZCL_RMS_VOLTAGE_PHASE_B_ATTRIBUTE_ID (0x0905)
+#define ZCL_RMS_VOLTAGE_MIN_PHASE_B_ATTRIBUTE_ID (0x0906)
+#define ZCL_RMS_VOLTAGE_MAX_PHASE_B_ATTRIBUTE_ID (0x0907)
+#define ZCL_RMS_CURRENT_PHASE_B_ATTRIBUTE_ID (0x0908)
+#define ZCL_RMS_CURRENT_MIN_PHASE_B_ATTRIBUTE_ID (0x0909)
+#define ZCL_RMS_CURRENT_MAX_PHASE_B_ATTRIBUTE_ID (0x090A)
+#define ZCL_ACTIVE_POWER_PHASE_B_ATTRIBUTE_ID (0x090B)
+#define ZCL_ACTIVE_POWER_MIN_PHASE_B_ATTRIBUTE_ID (0x090C)
+#define ZCL_ACTIVE_POWER_MAX_PHASE_B_ATTRIBUTE_ID (0x090D)
+#define ZCL_REACTIVE_POWER_PHASE_B_ATTRIBUTE_ID (0x090E)
+#define ZCL_APPARENT_POWER_PHASE_B_ATTRIBUTE_ID (0x090F)
+#define ZCL_POWER_FACTOR_PHASE_B_ATTRIBUTE_ID (0x0910)
+#define ZCL_AVERAGE_RMS_VOLTAGE_MEASUREMENT_PERIOD_PHASE_B_ATTRIBUTE_ID (0x0911)
+#define ZCL_AVERAGE_RMS_OVER_VOLTAGE_COUNTER_PHASE_B_ATTRIBUTE_ID (0x0912)
+#define ZCL_AVERAGE_RMS_UNDER_VOLTAGE_COUNTER_PHASE_B_ATTRIBUTE_ID (0x0913)
+#define ZCL_RMS_EXTREME_OVER_VOLTAGE_PERIOD_PHASE_B_ATTRIBUTE_ID (0x0914)
+#define ZCL_RMS_EXTREME_UNDER_VOLTAGE_PERIOD_PHASE_B_ATTRIBUTE_ID (0x0915)
+#define ZCL_RMS_VOLTAGE_SAG_PERIOD_PHASE_B_ATTRIBUTE_ID (0x0916)
+#define ZCL_RMS_VOLTAGE_SWELL_PERIOD_PHASE_B_ATTRIBUTE_ID (0x0917)
+#define ZCL_LINE_CURRENT_PHASE_C_ATTRIBUTE_ID (0x0A01)
+#define ZCL_ACTIVE_CURRENT_PHASE_C_ATTRIBUTE_ID (0x0A02)
+#define ZCL_REACTIVE_CURRENT_PHASE_C_ATTRIBUTE_ID (0x0A03)
+#define ZCL_RMS_VOLTAGE_PHASE_C_ATTRIBUTE_ID (0x0A05)
+#define ZCL_RMS_VOLTAGE_MIN_PHASE_C_ATTRIBUTE_ID (0x0A06)
+#define ZCL_RMS_VOLTAGE_MAX_PHASE_C_ATTRIBUTE_ID (0x0A07)
+#define ZCL_RMS_CURRENT_PHASE_C_ATTRIBUTE_ID (0x0A08)
+#define ZCL_RMS_CURRENT_MIN_PHASE_C_ATTRIBUTE_ID (0x0A09)
+#define ZCL_RMS_CURRENT_MAX_PHASE_C_ATTRIBUTE_ID (0x0A0A)
+#define ZCL_ACTIVE_POWER_PHASE_C_ATTRIBUTE_ID (0x0A0B)
+#define ZCL_ACTIVE_POWER_MIN_PHASE_C_ATTRIBUTE_ID (0x0A0C)
+#define ZCL_ACTIVE_POWER_MAX_PHASE_C_ATTRIBUTE_ID (0x0A0D)
+#define ZCL_REACTIVE_POWER_PHASE_C_ATTRIBUTE_ID (0x0A0E)
+#define ZCL_APPARENT_POWER_PHASE_C_ATTRIBUTE_ID (0x0A0F)
+#define ZCL_POWER_FACTOR_PHASE_C_ATTRIBUTE_ID (0x0A10)
+#define ZCL_AVERAGE_RMS_VOLTAGE_MEASUREMENT_PERIOD_PHASE_C_ATTRIBUTE_ID (0x0A11)
+#define ZCL_AVERAGE_RMS_OVER_VOLTAGE_COUNTER_PHASE_C_ATTRIBUTE_ID (0x0A12)
+#define ZCL_AVERAGE_RMS_UNDER_VOLTAGE_COUNTER_PHASE_C_ATTRIBUTE_ID (0x0A13)
+#define ZCL_RMS_EXTREME_OVER_VOLTAGE_PERIOD_PHASE_C_ATTRIBUTE_ID (0x0A14)
+#define ZCL_RMS_EXTREME_UNDER_VOLTAGE_PERIOD_PHASE_C_ATTRIBUTE_ID (0x0A15)
+#define ZCL_RMS_VOLTAGE_SAG_PERIOD_PHASE_C_ATTRIBUTE_ID (0x0A16)
+#define ZCL_RMS_VOLTAGE_SWELL_PERIOD_PHASE_C_ATTRIBUTE_ID (0x0A17)
+
+// Attribute ids for cluster: Diagnostics
+
+// Client attributes
+
+// Server attributes
+#define ZCL_NUMBER_OF_RESETS_ATTRIBUTE_ID (0x0000)
+#define ZCL_PERSISTENT_MEMORY_WRITES_ATTRIBUTE_ID (0x0001)
+#define ZCL_MAC_RX_BCAST_ATTRIBUTE_ID (0x0100)
+#define ZCL_MAC_TX_BCAST_ATTRIBUTE_ID (0x0101)
+#define ZCL_MAC_RX_UCAST_ATTRIBUTE_ID (0x0102)
+#define ZCL_MAC_TX_UCAST_ATTRIBUTE_ID (0x0103)
+#define ZCL_MAC_TX_UCAST_RETRY_ATTRIBUTE_ID (0x0104)
+#define ZCL_MAC_TX_UCAST_FAIL_ATTRIBUTE_ID (0x0105)
+#define ZCL_APS_RX_BCAST_ATTRIBUTE_ID (0x0106)
+#define ZCL_APS_TX_BCAST_ATTRIBUTE_ID (0x0107)
+#define ZCL_APS_RX_UCAST_ATTRIBUTE_ID (0x0108)
+#define ZCL_APS_UCAST_SUCCESS_ATTRIBUTE_ID (0x0109)
+#define ZCL_APS_TX_UCAST_RETRY_ATTRIBUTE_ID (0x010A)
+#define ZCL_APS_TX_UCAST_FAIL_ATTRIBUTE_ID (0x010B)
+#define ZCL_ROUTE_DISC_INITIATED_ATTRIBUTE_ID (0x010C)
+#define ZCL_NEIGHBOR_ADDED_ATTRIBUTE_ID (0x010D)
+#define ZCL_NEIGHBOR_REMOVED_ATTRIBUTE_ID (0x010E)
+#define ZCL_NEIGHBOR_STALE_ATTRIBUTE_ID (0x010F)
+#define ZCL_JOIN_INDICATION_ATTRIBUTE_ID (0x0110)
+#define ZCL_CHILD_MOVED_ATTRIBUTE_ID (0x0111)
+#define ZCL_NWK_FC_FAILURE_ATTRIBUTE_ID (0x0112)
+#define ZCL_APS_FC_FAILURE_ATTRIBUTE_ID (0x0113)
+#define ZCL_APS_UNAUTHORIZED_KEY_ATTRIBUTE_ID (0x0114)
+#define ZCL_NWK_DECRYPT_FAILURE_ATTRIBUTE_ID (0x0115)
+#define ZCL_APS_DECRYPT_FAILURE_ATTRIBUTE_ID (0x0116)
+#define ZCL_PACKET_BUFFER_ALLOC_FAILURES_ATTRIBUTE_ID (0x0117)
+#define ZCL_RELAYED_UNICAST_ATTRIBUTE_ID (0x0118)
+#define ZCL_PHY_TO_MAC_QUEUE_LIMIT_REACHED_ATTRIBUTE_ID (0x0119)
+#define ZCL_PACKET_VALIDATE_DROP_COUNT_ATTRIBUTE_ID (0x011A)
+#define ZCL_AVERAGE_MAC_RETRY_PER_APS_MSG_SENT_ATTRIBUTE_ID (0x011B)
+#define ZCL_LAST_MESSAGE_LQI_ATTRIBUTE_ID (0x011C)
+#define ZCL_LAST_MESSAGE_RSSI_ATTRIBUTE_ID (0x011D)
+
+// Attribute ids for cluster: ZLL Commissioning
+
+// Client attributes
+
+// Server attributes
+
+// Attribute ids for cluster: Binding
+
+// Client attributes
+
+// Server attributes
+
+// Attribute ids for cluster: Sample Mfg Specific Cluster
+
+// Client attributes
+
+// Server attributes
+#define ZCL_ATTRIBUTE_ONE_ATTRIBUTE_ID (0x0000)
+#define ZCL_ATTRIBUTE_TWO_ATTRIBUTE_ID (0x0001)
+
+// Attribute ids for cluster: Sample Mfg Specific Cluster 2
+
+// Client attributes
+
+// Server attributes
+#define ZCL_ATTRIBUTE_THREE_ATTRIBUTE_ID (0x0000)
+#define ZCL_ATTRIBUTE_FOUR_ATTRIBUTE_ID (0x0001)
+
+// Attribute ids for cluster: Configuration Cluster
+
+// Client attributes
+
+// Server attributes
+#define ZCL_TOKENS_LOCKED_ATTRIBUTE_ID (0x0000)
+
+// Attribute ids for cluster: MFGLIB Cluster
+
+// Client attributes
+
+// Server attributes
+#define ZCL_PACKETS_RECEIVED_ATTRIBUTE_ID (0x0000)
+#define ZCL_SAVED_RSSI_ATTRIBUTE_ID (0x0001)
+#define ZCL_SAVED_LQI_ATTRIBUTE_ID (0x0002)
+
+// Attribute ids for cluster: SL Works With All Hubs
+
+// Client attributes
+
+// Server attributes
+#define ZCL_SL_DISABLE_OTA_DOWNGRADES_ATTRIBUTE_ID (0x0002)
+#define ZCL_SL_MGMT_LEAVE_WITHOUT_REJOIN_ENABLED_ATTRIBUTE_ID (0x0003)
+#define ZCL_SL_NWK_RETRY_COUNT_ATTRIBUTE_ID (0x0004)
+#define ZCL_SL_MAC_RETRY_COUNT_ATTRIBUTE_ID (0x0005)
+#define ZCL_SL_ROUTER_CHECKIN_ENABLED_ATTRIBUTE_ID (0x0006)
+#define ZCL_SL_TOUCHLINK_INTERPAN_ENABLED_ATTRIBUTE_ID (0x0007)
+#define ZCL_SL_WWAH_PARENT_CLASSIFICATION_ENABLED_ATTRIBUTE_ID (0x0008)
+#define ZCL_SL_WWAH_APP_EVENT_RETRY_ENABLED_ATTRIBUTE_ID (0x0009)
+#define ZCL_SL_WWAH_APP_EVENT_RETRY_QUEUE_SIZE_ATTRIBUTE_ID (0x000A)
+#define ZCL_SL_WWAH_REJOIN_ENABLED_ATTRIBUTE_ID (0x000B)
+#define ZCL_SL_MAC_POLL_FAILURE_WAIT_TIME_ATTRIBUTE_ID (0x000C)
+#define ZCL_SL_CONFIGURATION_MODE_ENABLED_ATTRIBUTE_ID (0x000D)
+#define ZCL_SL_CURRENT_DEBUG_REPORT_ID_ATTRIBUTE_ID (0x000E)
+#define ZCL_SL_TC_SECURITY_ON_NTWK_KEY_ROTATION_ENABLED_ATTRIBUTE_ID (0x000F)
+#define ZCL_SL_WWAH_BAD_PARENT_RECOVERY_ENABLED_ATTRIBUTE_ID (0x0010)
+#define ZCL_SL_PENDING_NETWORK_UPDATE_CHANNEL_ATTRIBUTE_ID (0x0011)
+#define ZCL_SL_PENDING_NETWORK_UPDATE_PANID_ATTRIBUTE_ID (0x0012)
+#define ZCL_SL_OTA_MAX_OFFLINE_DURATION_ATTRIBUTE_ID (0x0013)
diff --git a/examples/chip-tool/gen/attribute-size.h b/examples/chip-tool/gen/attribute-size.h
new file mode 100644
index 0000000..a6caf3a
--- /dev/null
+++ b/examples/chip-tool/gen/attribute-size.h
@@ -0,0 +1,37 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+// Prevent multiple inclusion
+#pragma once
+
+// ZCL attribute sizes
+ZCL_DATA8_ATTRIBUTE_TYPE, 1, ZCL_DATA16_ATTRIBUTE_TYPE, 2, ZCL_DATA24_ATTRIBUTE_TYPE, 3, ZCL_DATA32_ATTRIBUTE_TYPE, 4,
+    ZCL_DATA40_ATTRIBUTE_TYPE, 5, ZCL_DATA48_ATTRIBUTE_TYPE, 6, ZCL_DATA56_ATTRIBUTE_TYPE, 7, ZCL_DATA64_ATTRIBUTE_TYPE, 8,
+    ZCL_BOOLEAN_ATTRIBUTE_TYPE, 1, ZCL_BITMAP8_ATTRIBUTE_TYPE, 1, ZCL_BITMAP16_ATTRIBUTE_TYPE, 2, ZCL_BITMAP24_ATTRIBUTE_TYPE, 3,
+    ZCL_BITMAP32_ATTRIBUTE_TYPE, 4, ZCL_BITMAP40_ATTRIBUTE_TYPE, 5, ZCL_BITMAP48_ATTRIBUTE_TYPE, 6, ZCL_BITMAP56_ATTRIBUTE_TYPE, 7,
+    ZCL_BITMAP64_ATTRIBUTE_TYPE, 8, ZCL_INT8U_ATTRIBUTE_TYPE, 1, ZCL_INT16U_ATTRIBUTE_TYPE, 2, ZCL_INT24U_ATTRIBUTE_TYPE, 3,
+    ZCL_INT32U_ATTRIBUTE_TYPE, 4, ZCL_INT40U_ATTRIBUTE_TYPE, 5, ZCL_INT48U_ATTRIBUTE_TYPE, 6, ZCL_INT56U_ATTRIBUTE_TYPE, 7,
+    ZCL_INT64U_ATTRIBUTE_TYPE, 8, ZCL_INT8S_ATTRIBUTE_TYPE, 1, ZCL_INT16S_ATTRIBUTE_TYPE, 2, ZCL_INT24S_ATTRIBUTE_TYPE, 3,
+    ZCL_INT32S_ATTRIBUTE_TYPE, 4, ZCL_INT40S_ATTRIBUTE_TYPE, 5, ZCL_INT48S_ATTRIBUTE_TYPE, 6, ZCL_INT56S_ATTRIBUTE_TYPE, 7,
+    ZCL_INT64S_ATTRIBUTE_TYPE, 8, ZCL_ENUM8_ATTRIBUTE_TYPE, 1, ZCL_ENUM16_ATTRIBUTE_TYPE, 2, ZCL_FLOAT_SEMI_ATTRIBUTE_TYPE, 2,
+    ZCL_FLOAT_SINGLE_ATTRIBUTE_TYPE, 4, ZCL_FLOAT_DOUBLE_ATTRIBUTE_TYPE, 8, ZCL_TIME_OF_DAY_ATTRIBUTE_TYPE, 4,
+    ZCL_DATE_ATTRIBUTE_TYPE, 4, ZCL_UTC_TIME_ATTRIBUTE_TYPE, 4, ZCL_CLUSTER_ID_ATTRIBUTE_TYPE, 2, ZCL_ATTRIBUTE_ID_ATTRIBUTE_TYPE,
+    2, ZCL_BACNET_OID_ATTRIBUTE_TYPE, 4, ZCL_IEEE_ADDRESS_ATTRIBUTE_TYPE, 8, ZCL_SECURITY_KEY_ATTRIBUTE_TYPE, 16,
+    ZCL_ENDPOINT_ID_ATTRIBUTE_TYPE, 1, ZCL_GROUP_ID_ATTRIBUTE_TYPE, 2, ZCL_COMMAND_ID_ATTRIBUTE_TYPE, 1, ZCL_NODE_ID_ATTRIBUTE_TYPE,
+    8,
diff --git a/examples/chip-tool/gen/attribute-type.h b/examples/chip-tool/gen/attribute-type.h
new file mode 100644
index 0000000..56900dc
--- /dev/null
+++ b/examples/chip-tool/gen/attribute-type.h
@@ -0,0 +1,86 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+// Prevent multiple inclusion
+#pragma once
+
+// ZCL attribute types
+enum
+{
+    ZCL_NO_DATA_ATTRIBUTE_TYPE           = 0x00, // No data
+    ZCL_DATA8_ATTRIBUTE_TYPE             = 0x08, // 8-bit data
+    ZCL_DATA16_ATTRIBUTE_TYPE            = 0x09, // 16-bit data
+    ZCL_DATA24_ATTRIBUTE_TYPE            = 0x0A, // 24-bit data
+    ZCL_DATA32_ATTRIBUTE_TYPE            = 0x0B, // 32-bit data
+    ZCL_DATA40_ATTRIBUTE_TYPE            = 0x0C, // 40-bit data
+    ZCL_DATA48_ATTRIBUTE_TYPE            = 0x0D, // 48-bit data
+    ZCL_DATA56_ATTRIBUTE_TYPE            = 0x0E, // 56-bit data
+    ZCL_DATA64_ATTRIBUTE_TYPE            = 0x0F, // 64-bit data
+    ZCL_BOOLEAN_ATTRIBUTE_TYPE           = 0x10, // Boolean
+    ZCL_BITMAP8_ATTRIBUTE_TYPE           = 0x18, // 8-bit bitmap
+    ZCL_BITMAP16_ATTRIBUTE_TYPE          = 0x19, // 16-bit bitmap
+    ZCL_BITMAP24_ATTRIBUTE_TYPE          = 0x1A, // 24-bit bitmap
+    ZCL_BITMAP32_ATTRIBUTE_TYPE          = 0x1B, // 32-bit bitmap
+    ZCL_BITMAP40_ATTRIBUTE_TYPE          = 0x1C, // 40-bit bitmap
+    ZCL_BITMAP48_ATTRIBUTE_TYPE          = 0x1D, // 48-bit bitmap
+    ZCL_BITMAP56_ATTRIBUTE_TYPE          = 0x1E, // 56-bit bitmap
+    ZCL_BITMAP64_ATTRIBUTE_TYPE          = 0x1F, // 64-bit bitmap
+    ZCL_INT8U_ATTRIBUTE_TYPE             = 0x20, // Unsigned 8-bit integer
+    ZCL_INT16U_ATTRIBUTE_TYPE            = 0x21, // Unsigned 16-bit integer
+    ZCL_INT24U_ATTRIBUTE_TYPE            = 0x22, // Unsigned 24-bit integer
+    ZCL_INT32U_ATTRIBUTE_TYPE            = 0x23, // Unsigned 32-bit integer
+    ZCL_INT40U_ATTRIBUTE_TYPE            = 0x24, // Unsigned 40-bit integer
+    ZCL_INT48U_ATTRIBUTE_TYPE            = 0x25, // Unsigned 48-bit integer
+    ZCL_INT56U_ATTRIBUTE_TYPE            = 0x26, // Unsigned 56-bit integer
+    ZCL_INT64U_ATTRIBUTE_TYPE            = 0x27, // Unsigned 64-bit integer
+    ZCL_INT8S_ATTRIBUTE_TYPE             = 0x28, // Signed 8-bit integer
+    ZCL_INT16S_ATTRIBUTE_TYPE            = 0x29, // Signed 16-bit integer
+    ZCL_INT24S_ATTRIBUTE_TYPE            = 0x2A, // Signed 24-bit integer
+    ZCL_INT32S_ATTRIBUTE_TYPE            = 0x2B, // Signed 32-bit integer
+    ZCL_INT40S_ATTRIBUTE_TYPE            = 0x2C, // Signed 40-bit integer
+    ZCL_INT48S_ATTRIBUTE_TYPE            = 0x2D, // Signed 48-bit integer
+    ZCL_INT56S_ATTRIBUTE_TYPE            = 0x2E, // Signed 56-bit integer
+    ZCL_INT64S_ATTRIBUTE_TYPE            = 0x2F, // Signed 64-bit integer
+    ZCL_ENUM8_ATTRIBUTE_TYPE             = 0x30, // 8-bit enumeration
+    ZCL_ENUM16_ATTRIBUTE_TYPE            = 0x31, // 16-bit enumeration
+    ZCL_FLOAT_SEMI_ATTRIBUTE_TYPE        = 0x38, // Semi-precision
+    ZCL_FLOAT_SINGLE_ATTRIBUTE_TYPE      = 0x39, // Single precision
+    ZCL_FLOAT_DOUBLE_ATTRIBUTE_TYPE      = 0x3A, // Double precision
+    ZCL_OCTET_STRING_ATTRIBUTE_TYPE      = 0x41, // Octet string
+    ZCL_CHAR_STRING_ATTRIBUTE_TYPE       = 0x42, // Character string
+    ZCL_LONG_OCTET_STRING_ATTRIBUTE_TYPE = 0x43, // Long octet string
+    ZCL_LONG_CHAR_STRING_ATTRIBUTE_TYPE  = 0x44, // Long character string
+    ZCL_ARRAY_ATTRIBUTE_TYPE             = 0x48, // Array
+    ZCL_STRUCT_ATTRIBUTE_TYPE            = 0x4C, // Structure
+    ZCL_SET_ATTRIBUTE_TYPE               = 0x50, // Set
+    ZCL_BAG_ATTRIBUTE_TYPE               = 0x51, // Bag
+    ZCL_TIME_OF_DAY_ATTRIBUTE_TYPE       = 0xE0, // Time of day
+    ZCL_DATE_ATTRIBUTE_TYPE              = 0xE1, // Date
+    ZCL_UTC_TIME_ATTRIBUTE_TYPE          = 0xE2, // UTC Time
+    ZCL_CLUSTER_ID_ATTRIBUTE_TYPE        = 0xE8, // Cluster ID
+    ZCL_ATTRIBUTE_ID_ATTRIBUTE_TYPE      = 0xE9, // Attribute ID
+    ZCL_BACNET_OID_ATTRIBUTE_TYPE        = 0xEA, // BACnet OID
+    ZCL_IEEE_ADDRESS_ATTRIBUTE_TYPE      = 0xF0, // IEEE address
+    ZCL_SECURITY_KEY_ATTRIBUTE_TYPE      = 0xF1, // 128-bit security key
+    ZCL_ENDPOINT_ID_ATTRIBUTE_TYPE       = 0xF2, // Endpoint Id
+    ZCL_GROUP_ID_ATTRIBUTE_TYPE          = 0xF3, // Group Id
+    ZCL_COMMAND_ID_ATTRIBUTE_TYPE        = 0xF4, // Command Id
+    ZCL_NODE_ID_ATTRIBUTE_TYPE           = 0xF5, // Node Id
+    ZCL_UNKNOWN_ATTRIBUTE_TYPE           = 0xFF, // Unknown
+};
diff --git a/examples/chip-tool/gen/call-command-handler.cpp b/examples/chip-tool/gen/call-command-handler.cpp
new file mode 100644
index 0000000..ed3fae9
--- /dev/null
+++ b/examples/chip-tool/gen/call-command-handler.cpp
@@ -0,0 +1,1015 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+#include <stdint.h>
+
+#include "af-structs.h"
+#include "call-command-handler.h"
+#include "callback.h"
+#include "cluster-id.h"
+#include "command-id.h"
+#include "util.h"
+
+using namespace chip;
+
+EmberAfStatus emberAfBarrierControlClusterClientCommandParse(EmberAfClusterCommand * cmd);
+EmberAfStatus emberAfBasicClusterClientCommandParse(EmberAfClusterCommand * cmd);
+EmberAfStatus emberAfBindingClusterClientCommandParse(EmberAfClusterCommand * cmd);
+EmberAfStatus emberAfColorControlClusterClientCommandParse(EmberAfClusterCommand * cmd);
+EmberAfStatus emberAfDoorLockClusterClientCommandParse(EmberAfClusterCommand * cmd);
+EmberAfStatus emberAfGroupsClusterClientCommandParse(EmberAfClusterCommand * cmd);
+EmberAfStatus emberAfIdentifyClusterClientCommandParse(EmberAfClusterCommand * cmd);
+EmberAfStatus emberAfLevelControlClusterClientCommandParse(EmberAfClusterCommand * cmd);
+EmberAfStatus emberAfOnOffClusterClientCommandParse(EmberAfClusterCommand * cmd);
+EmberAfStatus emberAfScenesClusterClientCommandParse(EmberAfClusterCommand * cmd);
+EmberAfStatus emberAfTemperatureMeasurementClusterClientCommandParse(EmberAfClusterCommand * cmd);
+
+static EmberAfStatus status(bool wasHandled, bool clusterExists, bool mfgSpecific)
+{
+    if (wasHandled)
+    {
+        return EMBER_ZCL_STATUS_SUCCESS;
+    }
+    else if (mfgSpecific)
+    {
+        return EMBER_ZCL_STATUS_UNSUP_MANUF_CLUSTER_COMMAND;
+    }
+    else if (clusterExists)
+    {
+        return EMBER_ZCL_STATUS_UNSUP_COMMAND;
+    }
+    else
+    {
+        return EMBER_ZCL_STATUS_UNSUPPORTED_CLUSTER;
+    }
+}
+
+// Main command parsing controller.
+EmberAfStatus emberAfClusterSpecificCommandParse(EmberAfClusterCommand * cmd)
+{
+    EmberAfStatus result = status(false, false, cmd->mfgSpecific);
+    if (cmd->direction == (uint8_t) ZCL_DIRECTION_SERVER_TO_CLIENT &&
+        emberAfContainsClientWithMfgCode(cmd->apsFrame->destinationEndpoint, cmd->apsFrame->clusterId, cmd->mfgCode))
+    {
+        switch (cmd->apsFrame->clusterId)
+        {
+        case ZCL_BARRIER_CONTROL_CLUSTER_ID:
+            // No commands are enabled for cluster Barrier Control
+            result = status(false, true, cmd->mfgSpecific);
+            break;
+        case ZCL_BASIC_CLUSTER_ID:
+            // No commands are enabled for cluster Basic
+            result = status(false, true, cmd->mfgSpecific);
+            break;
+        case ZCL_BINDING_CLUSTER_ID:
+            // No commands are enabled for cluster Binding
+            result = status(false, true, cmd->mfgSpecific);
+            break;
+        case ZCL_COLOR_CONTROL_CLUSTER_ID:
+            // No commands are enabled for cluster Color Control
+            result = status(false, true, cmd->mfgSpecific);
+            break;
+        case ZCL_DOOR_LOCK_CLUSTER_ID:
+            result = emberAfDoorLockClusterClientCommandParse(cmd);
+            break;
+        case ZCL_GROUPS_CLUSTER_ID:
+            result = emberAfGroupsClusterClientCommandParse(cmd);
+            break;
+        case ZCL_IDENTIFY_CLUSTER_ID:
+            result = emberAfIdentifyClusterClientCommandParse(cmd);
+            break;
+        case ZCL_LEVEL_CONTROL_CLUSTER_ID:
+            // No commands are enabled for cluster Level Control
+            result = status(false, true, cmd->mfgSpecific);
+            break;
+        case ZCL_ON_OFF_CLUSTER_ID:
+            // No commands are enabled for cluster On/off
+            result = status(false, true, cmd->mfgSpecific);
+            break;
+        case ZCL_SCENES_CLUSTER_ID:
+            result = emberAfScenesClusterClientCommandParse(cmd);
+            break;
+        case ZCL_TEMP_MEASUREMENT_CLUSTER_ID:
+            // No commands are enabled for cluster Temperature Measurement
+            result = status(false, true, cmd->mfgSpecific);
+            break;
+        default:
+            // Unrecognized cluster ID, error status will apply.
+            break;
+        }
+    }
+    else if (cmd->direction == (uint8_t) ZCL_DIRECTION_CLIENT_TO_SERVER &&
+             emberAfContainsServerWithMfgCode(cmd->apsFrame->destinationEndpoint, cmd->apsFrame->clusterId, cmd->mfgCode))
+    {
+        switch (cmd->apsFrame->clusterId)
+        {
+        default:
+            // Unrecognized cluster ID, error status will apply.
+            break;
+        }
+    }
+    return result;
+}
+
+// Cluster specific command parsing
+
+EmberAfStatus emberAfDoorLockClusterClientCommandParse(EmberAfClusterCommand * cmd)
+{
+    bool wasHandled = false;
+
+    if (!cmd->mfgSpecific)
+    {
+        switch (cmd->commandId)
+        {
+        case ZCL_CLEAR_ALL_PINS_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t status;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfDoorLockClusterClearAllPinsResponseCallback(status);
+            break;
+        }
+        case ZCL_CLEAR_ALL_RFIDS_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t status;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfDoorLockClusterClearAllRfidsResponseCallback(status);
+            break;
+        }
+        case ZCL_CLEAR_HOLIDAY_SCHEDULE_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t status;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfDoorLockClusterClearHolidayScheduleResponseCallback(status);
+            break;
+        }
+        case ZCL_CLEAR_PIN_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t status;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfDoorLockClusterClearPinResponseCallback(status);
+            break;
+        }
+        case ZCL_CLEAR_RFID_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t status;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfDoorLockClusterClearRfidResponseCallback(status);
+            break;
+        }
+        case ZCL_CLEAR_WEEKDAY_SCHEDULE_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t status;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfDoorLockClusterClearWeekdayScheduleResponseCallback(status);
+            break;
+        }
+        case ZCL_CLEAR_YEARDAY_SCHEDULE_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t status;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfDoorLockClusterClearYeardayScheduleResponseCallback(status);
+            break;
+        }
+        case ZCL_GET_HOLIDAY_SCHEDULE_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t scheduleId;
+            uint8_t status;
+            uint32_t localStartTime;
+            uint32_t localEndTime;
+            uint8_t operatingModeDuringHoliday;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            scheduleId    = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status        = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 4)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            localStartTime = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset  = static_cast<uint16_t>(payloadOffset + 4);
+            if (cmd->bufLen < payloadOffset + 4)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            localEndTime  = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 4);
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            operatingModeDuringHoliday = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfDoorLockClusterGetHolidayScheduleResponseCallback(scheduleId, status, localStartTime, localEndTime,
+                                                                                  operatingModeDuringHoliday);
+            break;
+        }
+        case ZCL_GET_LOG_RECORD_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint16_t logEntryId;
+            uint32_t timestamp;
+            uint8_t eventType;
+            uint8_t source;
+            uint8_t eventIdOrAlarmCode;
+            uint16_t userId;
+            uint8_t * pin;
+
+            if (cmd->bufLen < payloadOffset + 2)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            logEntryId    = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
+            if (cmd->bufLen < payloadOffset + 4)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            timestamp     = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 4);
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            eventType     = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            source        = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            eventIdOrAlarmCode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset      = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 2)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            userId        = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
+            if (cmd->bufLen < payloadOffset + 1u)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            pin = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfDoorLockClusterGetLogRecordResponseCallback(logEntryId, timestamp, eventType, source,
+                                                                            eventIdOrAlarmCode, userId, pin);
+            break;
+        }
+        case ZCL_GET_PIN_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint16_t userId;
+            uint8_t userStatus;
+            uint8_t userType;
+            uint8_t * pin;
+
+            if (cmd->bufLen < payloadOffset + 2)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            userId        = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            userStatus    = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            userType      = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 1u)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            pin = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfDoorLockClusterGetPinResponseCallback(userId, userStatus, userType, pin);
+            break;
+        }
+        case ZCL_GET_RFID_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint16_t userId;
+            uint8_t userStatus;
+            uint8_t userType;
+            uint8_t * rfid;
+
+            if (cmd->bufLen < payloadOffset + 2)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            userId        = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            userStatus    = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            userType      = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 1u)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            rfid = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfDoorLockClusterGetRfidResponseCallback(userId, userStatus, userType, rfid);
+            break;
+        }
+        case ZCL_GET_USER_TYPE_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint16_t userId;
+            uint8_t userType;
+
+            if (cmd->bufLen < payloadOffset + 2)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            userId        = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            userType = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfDoorLockClusterGetUserTypeResponseCallback(userId, userType);
+            break;
+        }
+        case ZCL_GET_WEEKDAY_SCHEDULE_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t scheduleId;
+            uint16_t userId;
+            uint8_t status;
+            uint8_t daysMask;
+            uint8_t startHour;
+            uint8_t startMinute;
+            uint8_t endHour;
+            uint8_t endMinute;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            scheduleId    = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 2)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            userId        = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status        = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            daysMask      = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            startHour     = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            startMinute   = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            endHour       = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            endMinute = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfDoorLockClusterGetWeekdayScheduleResponseCallback(scheduleId, userId, status, daysMask, startHour,
+                                                                                  startMinute, endHour, endMinute);
+            break;
+        }
+        case ZCL_GET_YEARDAY_SCHEDULE_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t scheduleId;
+            uint16_t userId;
+            uint8_t status;
+            uint32_t localStartTime;
+            uint32_t localEndTime;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            scheduleId    = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 2)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            userId        = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status        = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 4)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            localStartTime = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset  = static_cast<uint16_t>(payloadOffset + 4);
+            if (cmd->bufLen < payloadOffset + 4)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            localEndTime = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled =
+                emberAfDoorLockClusterGetYeardayScheduleResponseCallback(scheduleId, userId, status, localStartTime, localEndTime);
+            break;
+        }
+        case ZCL_LOCK_DOOR_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t status;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfDoorLockClusterLockDoorResponseCallback(status);
+            break;
+        }
+        case ZCL_SET_HOLIDAY_SCHEDULE_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t status;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfDoorLockClusterSetHolidayScheduleResponseCallback(status);
+            break;
+        }
+        case ZCL_SET_PIN_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t status;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfDoorLockClusterSetPinResponseCallback(status);
+            break;
+        }
+        case ZCL_SET_RFID_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t status;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfDoorLockClusterSetRfidResponseCallback(status);
+            break;
+        }
+        case ZCL_SET_USER_TYPE_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t status;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfDoorLockClusterSetUserTypeResponseCallback(status);
+            break;
+        }
+        case ZCL_SET_WEEKDAY_SCHEDULE_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t status;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfDoorLockClusterSetWeekdayScheduleResponseCallback(status);
+            break;
+        }
+        case ZCL_SET_YEARDAY_SCHEDULE_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t status;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfDoorLockClusterSetYeardayScheduleResponseCallback(status);
+            break;
+        }
+        case ZCL_UNLOCK_DOOR_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t status;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfDoorLockClusterUnlockDoorResponseCallback(status);
+            break;
+        }
+        case ZCL_UNLOCK_WITH_TIMEOUT_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t status;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfDoorLockClusterUnlockWithTimeoutResponseCallback(status);
+            break;
+        }
+        default: {
+            // Unrecognized command ID, error status will apply.
+            break;
+        }
+        }
+    }
+    return status(wasHandled, true, cmd->mfgSpecific);
+}
+EmberAfStatus emberAfGroupsClusterClientCommandParse(EmberAfClusterCommand * cmd)
+{
+    bool wasHandled = false;
+
+    if (!cmd->mfgSpecific)
+    {
+        switch (cmd->commandId)
+        {
+        case ZCL_ADD_GROUP_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t status;
+            uint16_t groupId;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status        = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 2)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfGroupsClusterAddGroupResponseCallback(status, groupId);
+            break;
+        }
+        case ZCL_GET_GROUP_MEMBERSHIP_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t capacity;
+            uint8_t groupCount;
+            /* TYPE WARNING: array array defaults to */ uint8_t * groupList;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            capacity      = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            groupCount    = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            groupList     = cmd->buffer + payloadOffset;
+
+            wasHandled = emberAfGroupsClusterGetGroupMembershipResponseCallback(capacity, groupCount, groupList);
+            break;
+        }
+        case ZCL_REMOVE_GROUP_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t status;
+            uint16_t groupId;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status        = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 2)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfGroupsClusterRemoveGroupResponseCallback(status, groupId);
+            break;
+        }
+        case ZCL_VIEW_GROUP_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t status;
+            uint16_t groupId;
+            uint8_t * groupName;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status        = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 2)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            groupId       = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
+            if (cmd->bufLen < payloadOffset + 1u)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            groupName = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfGroupsClusterViewGroupResponseCallback(status, groupId, groupName);
+            break;
+        }
+        default: {
+            // Unrecognized command ID, error status will apply.
+            break;
+        }
+        }
+    }
+    return status(wasHandled, true, cmd->mfgSpecific);
+}
+EmberAfStatus emberAfIdentifyClusterClientCommandParse(EmberAfClusterCommand * cmd)
+{
+    bool wasHandled = false;
+
+    if (!cmd->mfgSpecific)
+    {
+        switch (cmd->commandId)
+        {
+        case ZCL_IDENTIFY_QUERY_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint16_t timeout;
+
+            if (cmd->bufLen < payloadOffset + 2)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            timeout = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfIdentifyClusterIdentifyQueryResponseCallback(timeout);
+            break;
+        }
+        default: {
+            // Unrecognized command ID, error status will apply.
+            break;
+        }
+        }
+    }
+    return status(wasHandled, true, cmd->mfgSpecific);
+}
+EmberAfStatus emberAfScenesClusterClientCommandParse(EmberAfClusterCommand * cmd)
+{
+    bool wasHandled = false;
+
+    if (!cmd->mfgSpecific)
+    {
+        switch (cmd->commandId)
+        {
+        case ZCL_ADD_SCENE_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t status;
+            uint16_t groupId;
+            uint8_t sceneId;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status        = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 2)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            groupId       = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            sceneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfScenesClusterAddSceneResponseCallback(status, groupId, sceneId);
+            break;
+        }
+        case ZCL_GET_SCENE_MEMBERSHIP_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t status;
+            uint8_t capacity;
+            uint16_t groupId;
+            uint8_t sceneCount;
+            /* TYPE WARNING: array array defaults to */ uint8_t * sceneList;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status        = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            capacity      = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 2)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            groupId       = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
+            if (status == 0)
+            {
+                if (cmd->bufLen < payloadOffset + 1)
+                {
+                    return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+                }
+                sceneCount    = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+                payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            }
+            else
+            {
+                sceneCount = UINT8_MAX;
+            }
+            if (status == 0)
+            {
+                sceneList = cmd->buffer + payloadOffset;
+            }
+            else
+            {
+                sceneList = NULL;
+            }
+
+            wasHandled = emberAfScenesClusterGetSceneMembershipResponseCallback(status, capacity, groupId, sceneCount, sceneList);
+            break;
+        }
+        case ZCL_REMOVE_ALL_SCENES_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t status;
+            uint16_t groupId;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status        = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 2)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfScenesClusterRemoveAllScenesResponseCallback(status, groupId);
+            break;
+        }
+        case ZCL_REMOVE_SCENE_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t status;
+            uint16_t groupId;
+            uint8_t sceneId;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status        = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 2)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            groupId       = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            sceneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfScenesClusterRemoveSceneResponseCallback(status, groupId, sceneId);
+            break;
+        }
+        case ZCL_STORE_SCENE_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t status;
+            uint16_t groupId;
+            uint8_t sceneId;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status        = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 2)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            groupId       = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            sceneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfScenesClusterStoreSceneResponseCallback(status, groupId, sceneId);
+            break;
+        }
+        case ZCL_VIEW_SCENE_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t status;
+            uint16_t groupId;
+            uint8_t sceneId;
+            uint16_t transitionTime;
+            uint8_t * sceneName;
+            /* TYPE WARNING: array array defaults to */ uint8_t * extensionFieldSets;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status        = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 2)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            groupId       = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            sceneId       = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (status == 0)
+            {
+                if (cmd->bufLen < payloadOffset + 2)
+                {
+                    return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+                }
+                transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+                payloadOffset  = static_cast<uint16_t>(payloadOffset + 2);
+            }
+            else
+            {
+                transitionTime = UINT16_MAX;
+            }
+            if (status == 0)
+            {
+                if (cmd->bufLen < payloadOffset + 1u)
+                {
+                    return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+                }
+                sceneName     = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+                payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(sceneName) + 1u);
+            }
+            else
+            {
+                sceneName = NULL;
+            }
+            if (status == 0)
+            {
+                extensionFieldSets = cmd->buffer + payloadOffset;
+            }
+            else
+            {
+                extensionFieldSets = NULL;
+            }
+
+            wasHandled = emberAfScenesClusterViewSceneResponseCallback(status, groupId, sceneId, transitionTime, sceneName,
+                                                                       extensionFieldSets);
+            break;
+        }
+        default: {
+            // Unrecognized command ID, error status will apply.
+            break;
+        }
+        }
+    }
+    return status(wasHandled, true, cmd->mfgSpecific);
+}
diff --git a/src/darwin/Framework/CHIP/CHIPDeviceCallback.h b/examples/chip-tool/gen/call-command-handler.h
similarity index 73%
rename from src/darwin/Framework/CHIP/CHIPDeviceCallback.h
rename to examples/chip-tool/gen/call-command-handler.h
index 6406069..16314d8 100644
--- a/src/darwin/Framework/CHIP/CHIPDeviceCallback.h
+++ b/examples/chip-tool/gen/call-command-handler.h
@@ -1,6 +1,6 @@
-/**
+/*
  *
- *    Copyright (c) 2020 Project CHIP Authors
+ *    Copyright (c) 2021 Project CHIP Authors
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -15,12 +15,9 @@
  *    limitations under the License.
  */
 
-#import <Foundation/Foundation.h>
+// THIS FILE IS GENERATED BY ZAP
 
-#import <CHIP/CHIPError.h>
+// Prevent multiple inclusion
+#pragma once
 
-NS_ASSUME_NONNULL_BEGIN
-
-typedef void (^CHIPDeviceCallback)(NSError * error);
-
-NS_ASSUME_NONNULL_END
+#include "af-types.h"
diff --git a/examples/chip-tool/gen/callback-stub.cpp b/examples/chip-tool/gen/callback-stub.cpp
new file mode 100644
index 0000000..c5dde30
--- /dev/null
+++ b/examples/chip-tool/gen/callback-stub.cpp
@@ -0,0 +1,684 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+#include "callback.h"
+#include "cluster-id.h"
+
+using namespace chip;
+
+// Cluster Init Functions
+void emberAfClusterInitCallback(EndpointId endpoint, ClusterId clusterId)
+{
+    switch (clusterId)
+    {
+    case ZCL_BARRIER_CONTROL_CLUSTER_ID:
+        emberAfBarrierControlClusterInitCallback(endpoint);
+        break;
+    case ZCL_BASIC_CLUSTER_ID:
+        emberAfBasicClusterInitCallback(endpoint);
+        break;
+    case ZCL_BINDING_CLUSTER_ID:
+        emberAfBindingClusterInitCallback(endpoint);
+        break;
+    case ZCL_COLOR_CONTROL_CLUSTER_ID:
+        emberAfColorControlClusterInitCallback(endpoint);
+        break;
+    case ZCL_DOOR_LOCK_CLUSTER_ID:
+        emberAfDoorLockClusterInitCallback(endpoint);
+        break;
+    case ZCL_GROUPS_CLUSTER_ID:
+        emberAfGroupsClusterInitCallback(endpoint);
+        break;
+    case ZCL_IDENTIFY_CLUSTER_ID:
+        emberAfIdentifyClusterInitCallback(endpoint);
+        break;
+    case ZCL_LEVEL_CONTROL_CLUSTER_ID:
+        emberAfLevelControlClusterInitCallback(endpoint);
+        break;
+    case ZCL_ON_OFF_CLUSTER_ID:
+        emberAfOnOffClusterInitCallback(endpoint);
+        break;
+    case ZCL_SCENES_CLUSTER_ID:
+        emberAfScenesClusterInitCallback(endpoint);
+        break;
+    case ZCL_TEMP_MEASUREMENT_CLUSTER_ID:
+        emberAfTemperatureMeasurementClusterInitCallback(endpoint);
+        break;
+    default:
+        // Unrecognized cluster ID
+        break;
+    }
+}
+
+void __attribute__((weak)) emberAfBarrierControlClusterInitCallback(EndpointId endpoint)
+{
+    // To prevent warning
+    (void) endpoint;
+}
+void __attribute__((weak)) emberAfBasicClusterInitCallback(EndpointId endpoint)
+{
+    // To prevent warning
+    (void) endpoint;
+}
+void __attribute__((weak)) emberAfBindingClusterInitCallback(EndpointId endpoint)
+{
+    // To prevent warning
+    (void) endpoint;
+}
+void __attribute__((weak)) emberAfColorControlClusterInitCallback(EndpointId endpoint)
+{
+    // To prevent warning
+    (void) endpoint;
+}
+void __attribute__((weak)) emberAfDoorLockClusterInitCallback(EndpointId endpoint)
+{
+    // To prevent warning
+    (void) endpoint;
+}
+void __attribute__((weak)) emberAfGroupsClusterInitCallback(EndpointId endpoint)
+{
+    // To prevent warning
+    (void) endpoint;
+}
+void __attribute__((weak)) emberAfIdentifyClusterInitCallback(EndpointId endpoint)
+{
+    // To prevent warning
+    (void) endpoint;
+}
+void __attribute__((weak)) emberAfLevelControlClusterInitCallback(EndpointId endpoint)
+{
+    // To prevent warning
+    (void) endpoint;
+}
+void __attribute__((weak)) emberAfOnOffClusterInitCallback(EndpointId endpoint)
+{
+    // To prevent warning
+    (void) endpoint;
+}
+void __attribute__((weak)) emberAfScenesClusterInitCallback(EndpointId endpoint)
+{
+    // To prevent warning
+    (void) endpoint;
+}
+void __attribute__((weak)) emberAfTemperatureMeasurementClusterInitCallback(EndpointId endpoint)
+{
+    // To prevent warning
+    (void) endpoint;
+}
+
+//
+// Non-Cluster Related Callbacks
+//
+
+/** @brief Add To Current App Tasks
+ *
+ * This function is only useful to sleepy end devices.  This function will note
+ * the passed item as part of a set of tasks the application has outstanding
+ * (e.g. message sent requiring APS acknwoledgement).  This will affect how the
+ * application behaves with regard to sleeping and polling.  Until the
+ * outstanding task is completed, the device may poll more frequently and sleep
+ * less often.
+ *
+ * @param tasks   Ver.: always
+ */
+void __attribute__((weak)) emberAfAddToCurrentAppTasksCallback(EmberAfApplicationTask tasks) {}
+
+/** @brief Remove From Current App Tasks
+ *
+ * This function is only useful to sleepy end devices.  This function will
+ * remove the passed item from the set of tasks the application has outstanding
+ * (e.g. message sent requiring APS acknwoledgement).  This will affect how the
+ * application behaves with regard to sleeping and polling.  Removing the item
+ * from the list of outstanding tasks may allow the device to sleep longer and
+ * poll less frequently.  If there are other outstanding tasks the system may
+ * still have to stay away and poll more often.
+ *
+ * @param tasks   Ver.: always
+ */
+void __attribute__((weak)) emberAfRemoveFromCurrentAppTasksCallback(EmberAfApplicationTask tasks) {}
+
+/** @brief Allow Network Write Attribute
+ *
+ * This function is called by the application framework before it writes an
+ * attribute in response to a write attribute request from an external device.
+ * The value passed into this callback is the value to which the attribute is to
+ * be set by the framework.
+        Example:	In mirroring simple metering data
+ * on an Energy Services Interface (ESI) (formerly called Energy Service Portal
+ * (ESP) in SE 1.0).), a mirrored simple meter needs to write read-only
+ * attributes on its mirror. The-meter-mirror sample application, located in
+ * app/framework/sample-apps, uses this callback to allow the mirrored device to
+ * write simple metering attributes on the mirror regardless of the fact that
+ * most simple metering attributes are defined as read-only by the ZigBee
+ * specification.
+        Note:	The ZCL specification does not (as of this
+ * writing) specify any permission-level security for writing writeable
+ * attributes. As far as the ZCL specification is concerned, if an attribute is
+ * writeable, any device that has a link key for the device should be able to
+ * write that attribute. Furthermore if an attribute is read only, it should not
+ * be written over the air. Thus, if you implement permissions for writing
+ * attributes as a feature, you MAY be operating outside the specification. This
+ * is unlikely to be a problem for writing read-only attributes, but it may be a
+ * problem for attributes that are writeable according to the specification but
+ * restricted by the application implementing this callback.
+ *
+ * @param endpoint   Ver.: always
+ * @param clusterId   Ver.: always
+ * @param attributeId   Ver.: always
+ * @param mask   Ver.: always
+ * @param manufacturerCode   Ver.: always
+ * @param value   Ver.: always
+ * @param type   Ver.: always
+ */
+EmberAfAttributeWritePermission __attribute__((weak))
+emberAfAllowNetworkWriteAttributeCallback(EndpointId endpoint, ClusterId clusterId, AttributeId attributeId, uint8_t mask,
+                                          uint16_t manufacturerCode, uint8_t * value, uint8_t type)
+{
+    return EMBER_ZCL_ATTRIBUTE_WRITE_PERMISSION_ALLOW_WRITE_NORMAL; // Default
+}
+
+/** @brief Attribute Read Access
+ *
+ * This function is called whenever the Application Framework needs to check
+ * access permission for an attribute read.
+ *
+ * @param endpoint   Ver.: always
+ * @param clusterId   Ver.: always
+ * @param manufacturerCode   Ver.: always
+ * @param attributeId   Ver.: always
+ */
+bool __attribute__((weak))
+emberAfAttributeReadAccessCallback(EndpointId endpoint, ClusterId clusterId, uint16_t manufacturerCode, AttributeId attributeId)
+{
+    return true;
+}
+
+/** @brief Attribute Write Access
+ *
+ * This function is called whenever the Application Framework needs to check
+ * access permission for an attribute write.
+ *
+ * @param endpoint   Ver.: always
+ * @param clusterId   Ver.: always
+ * @param manufacturerCode   Ver.: always
+ * @param attributeId   Ver.: always
+ */
+bool __attribute__((weak))
+emberAfAttributeWriteAccessCallback(EndpointId endpoint, ClusterId clusterId, uint16_t manufacturerCode, AttributeId attributeId)
+{
+    return true;
+}
+
+/** @brief Default Response
+ *
+ * This function is called by the application framework when a Default Response
+ * command is received from an external device.  The application should return
+ * true if the message was processed or false if it was not.
+ *
+ * @param clusterId The cluster identifier of this response.  Ver.: always
+ * @param commandId The command identifier to which this is a response.  Ver.:
+ * always
+ * @param status Specifies either SUCCESS or the nature of the error that was
+ * detected in the received command.  Ver.: always
+ */
+bool __attribute__((weak)) emberAfDefaultResponseCallback(ClusterId clusterId, CommandId commandId, EmberAfStatus status)
+{
+    return false;
+}
+
+/** @brief Configure Reporting Response
+ *
+ * This function is called by the application framework when a Configure
+ * Reporting Response command is received from an external device.  The
+ * application should return true if the message was processed or false if it
+ * was not.
+ *
+ * @param clusterId The cluster identifier of this response.  Ver.: always
+ * @param buffer Buffer containing the list of attribute status records.  Ver.:
+ * always
+ * @param bufLen The length in bytes of the list.  Ver.: always
+ */
+bool __attribute__((weak)) emberAfConfigureReportingResponseCallback(ClusterId clusterId, uint8_t * buffer, uint16_t bufLen)
+{
+    return false;
+}
+
+/** @brief Read Reporting Configuration Response
+ *
+ * This function is called by the application framework when a Read Reporting
+ * Configuration Response command is received from an external device.  The
+ * application should return true if the message was processed or false if it
+ * was not.
+ *
+ * @param clusterId The cluster identifier of this response.  Ver.: always
+ * @param buffer Buffer containing the list of attribute reporting configuration
+ * records.  Ver.: always
+ * @param bufLen The length in bytes of the list.  Ver.: always
+ */
+bool __attribute__((weak)) emberAfReadReportingConfigurationResponseCallback(ClusterId clusterId, uint8_t * buffer, uint16_t bufLen)
+{
+    return false;
+}
+
+/** @brief Discover Attributes Response
+ *
+ * This function is called by the application framework when a Discover
+ * Attributes Response or Discover Attributes Extended Response command is
+ * received from an external device.  The Discover Attributes Response command
+ * contains a bool indicating if discovery is complete and a list of zero or
+ * more attribute identifier/type records. The final argument indicates whether
+ * the response is in the extended format or not.  The application should return
+ * true if the message was processed or false if it was not.
+ *
+ * @param clusterId The cluster identifier of this response.  Ver.: always
+ * @param discoveryComplete Indicates whether there are more attributes to be
+ * discovered.  true if there are no more attributes to be discovered.  Ver.:
+ * always
+ * @param buffer Buffer containing the list of attribute identifier/type
+ * records.  Ver.: always
+ * @param bufLen The length in bytes of the list.  Ver.: always
+ * @param extended Indicates whether the response is in the extended format or
+ * not.  Ver.: always
+ */
+bool __attribute__((weak)) emberAfDiscoverAttributesResponseCallback(ClusterId clusterId, bool discoveryComplete, uint8_t * buffer,
+                                                                     uint16_t bufLen, bool extended)
+{
+    return false;
+}
+
+/** @brief Discover Commands Generated Response
+ *
+ * This function is called by the framework when Discover Commands Generated
+ * Response is received.
+ *
+ * @param clusterId The cluster identifier of this response.  Ver.: always
+ * @param manufacturerCode Manufacturer code  Ver.: always
+ * @param discoveryComplete Indicates whether there are more commands to be
+ * discovered.  Ver.: always
+ * @param commandIds Buffer containing the list of command identifiers.  Ver.:
+ * always
+ * @param commandIdCount The length of bytes of the list, whish is the same as
+ * the number of identifiers.  Ver.: always
+ */
+bool __attribute__((weak))
+emberAfDiscoverCommandsGeneratedResponseCallback(ClusterId clusterId, uint16_t manufacturerCode, bool discoveryComplete,
+                                                 CommandId * commandIds, uint16_t commandIdCount)
+{
+    return false;
+}
+
+/** @brief Discover Commands Received Response
+ *
+ * This function is called by the framework when Discover Commands Received
+ * Response is received.
+ *
+ * @param clusterId The cluster identifier of this response.  Ver.: always
+ * @param manufacturerCode Manufacturer code  Ver.: always
+ * @param discoveryComplete Indicates whether there are more commands to be
+ * discovered.  Ver.: always
+ * @param commandIds Buffer containing the list of command identifiers.  Ver.:
+ * always
+ * @param commandIdCount The length of bytes of the list, whish is the same as
+ * the number of identifiers.  Ver.: always
+ */
+bool __attribute__((weak))
+emberAfDiscoverCommandsReceivedResponseCallback(ClusterId clusterId, uint16_t manufacturerCode, bool discoveryComplete,
+                                                CommandId * commandIds, uint16_t commandIdCount)
+{
+    return false;
+}
+
+/** @brief Pre Command Received
+ *
+ * This callback is the second in the Application Framework's message processing
+ * chain. At this point in the processing of incoming over-the-air messages, the
+ * application has determined that the incoming message is a ZCL command. It
+ * parses enough of the message to populate an EmberAfClusterCommand struct. The
+ * Application Framework defines this struct value in a local scope to the
+ * command processing but also makes it available through a global pointer
+ * called emberAfCurrentCommand, in app/framework/util/util.c. When command
+ * processing is complete, this pointer is cleared.
+ *
+ * @param cmd   Ver.: always
+ */
+bool __attribute__((weak)) emberAfPreCommandReceivedCallback(EmberAfClusterCommand * cmd)
+{
+    return false;
+}
+
+/** @brief Pre Message Send
+ *
+ * This function is called by the framework when it is about to pass a message
+ * to the stack primitives for sending.   This message may or may not be ZCL,
+ * ZDO, or some other protocol.  This is called prior to
+        any ZigBee
+ * fragmentation that may be done.  If the function returns true it is assumed
+ * the callback has consumed and processed the message.  The callback must also
+ * set the EmberStatus status code to be passed back to the caller.  The
+ * framework will do no further processing on the message.
+        If the
+ * function returns false then it is assumed that the callback has not processed
+ * the mesasge and the framework will continue to process accordingly.
+ *
+ * @param messageStruct The structure containing the parameters of the APS
+ * message to be sent.  Ver.: always
+ * @param status A pointer to the status code value that will be returned to the
+ * caller.  Ver.: always
+ */
+bool __attribute__((weak)) emberAfPreMessageSendCallback(EmberAfMessageStruct * messageStruct, EmberStatus * status)
+{
+    return false;
+}
+
+/** @brief Message Sent
+ *
+ * This function is called by the application framework from the message sent
+ * handler, when it is informed by the stack regarding the message sent status.
+ * All of the values passed to the emberMessageSentHandler are passed on to this
+ * callback. This provides an opportunity for the application to verify that its
+ * message has been sent successfully and take the appropriate action. This
+ * callback should return a bool value of true or false. A value of true
+ * indicates that the message sent notification has been handled and should not
+ * be handled by the application framework.
+ *
+ * @param type   Ver.: always
+ * @param indexOrDestination   Ver.: always
+ * @param apsFrame   Ver.: always
+ * @param msgLen   Ver.: always
+ * @param message   Ver.: always
+ * @param status   Ver.: always
+ */
+bool __attribute__((weak))
+emberAfMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination, EmberApsFrame * apsFrame, uint16_t msgLen,
+                           uint8_t * message, EmberStatus status)
+{
+    return false;
+}
+
+/** @brief Pre Attribute Change
+ *
+ * This function is called by the application framework before it changes an
+ * attribute value.  The value passed into this callback is the value to which
+ * the attribute is to be set by the framework.  The application should return
+ * ::EMBER_ZCL_STATUS_SUCCESS to permit the change or any other ::EmberAfStatus
+ * to reject it.
+ *
+ * @param endpoint   Ver.: always
+ * @param clusterId   Ver.: always
+ * @param attributeId   Ver.: always
+ * @param mask   Ver.: always
+ * @param manufacturerCode   Ver.: always
+ * @param type   Ver.: always
+ * @param size   Ver.: always
+ * @param value   Ver.: always
+ */
+EmberAfStatus __attribute__((weak))
+emberAfPreAttributeChangeCallback(EndpointId endpoint, ClusterId clusterId, AttributeId attributeId, uint8_t mask,
+                                  uint16_t manufacturerCode, uint8_t type, uint8_t size, uint8_t * value)
+{
+    return EMBER_ZCL_STATUS_SUCCESS;
+}
+
+/** @brief Post Attribute Change
+ *
+ * This function is called by the application framework after it changes an
+ * attribute value. The value passed into this callback is the value to which
+ * the attribute was set by the framework.
+ *
+ * @param endpoint   Ver.: always
+ * @param clusterId   Ver.: always
+ * @param attributeId   Ver.: always
+ * @param mask   Ver.: always
+ * @param manufacturerCode   Ver.: always
+ * @param type   Ver.: always
+ * @param size   Ver.: always
+ * @param value   Ver.: always
+ */
+void __attribute__((weak))
+emberAfPostAttributeChangeCallback(EndpointId endpoint, ClusterId clusterId, AttributeId attributeId, uint8_t mask,
+                                   uint16_t manufacturerCode, uint8_t type, uint8_t size, uint8_t * value)
+{}
+
+/** @brief Read Attributes Response
+ *
+ * This function is called by the application framework when a Read Attributes
+ * Response command is received from an external device.  The application should
+ * return true if the message was processed or false if it was not.
+ *
+ * @param clusterId The cluster identifier of this response.  Ver.: always
+ * @param buffer Buffer containing the list of read attribute status records.
+ * Ver.: always
+ * @param bufLen The length in bytes of the list.  Ver.: always
+ */
+bool __attribute__((weak)) emberAfReadAttributesResponseCallback(ClusterId clusterId, uint8_t * buffer, uint16_t bufLen)
+{
+    return false;
+}
+
+/** @brief External Attribute Read
+ *
+ * Like emberAfExternalAttributeWriteCallback above, this function is called
+ * when the framework needs to read an attribute that is not stored within the
+ * Application Framework's data structures.
+        All of the important
+ * information about the attribute itself is passed as a pointer to an
+ * EmberAfAttributeMetadata struct, which is stored within the application and
+ * used to manage the attribute. A complete description of the
+ * EmberAfAttributeMetadata struct is provided in
+ * app/framework/include/af-types.h
+        This function assumes that the
+ * application is able to read the attribute, write it into the passed buffer,
+ * and return immediately. Any attributes that require a state machine for
+ * reading and writing are not really candidates for externalization at the
+ * present time. The Application Framework does not currently include a state
+ * machine for reading or writing attributes that must take place across a
+ * series of application ticks. Attributes that cannot be read in a timely
+ * manner should be stored within the Application Framework and updated
+ * occasionally by the application code from within the
+ * emberAfMainTickCallback.
+        If the application was successfully able to
+ * read the attribute and write it into the passed buffer, it should return a
+ * value of EMBER_ZCL_STATUS_SUCCESS. Ensure that the size of the externally
+ * managed attribute value is smaller than what the buffer can hold. In the case
+ * of a buffer overflow throw an appropriate error such as
+ * EMBER_ZCL_STATUS_INSUFFICIENT_SPACE. Any other return value indicates the
+ * application was not able to read the attribute.
+ *
+ * @param endpoint   Ver.: always
+ * @param clusterId   Ver.: always
+ * @param attributeMetadata   Ver.: always
+ * @param manufacturerCode   Ver.: always
+ * @param buffer   Ver.: always
+ * @param maxReadLength   Ver.: always
+ */
+EmberAfStatus __attribute__((weak))
+emberAfExternalAttributeReadCallback(EndpointId endpoint, ClusterId clusterId, EmberAfAttributeMetadata * attributeMetadata,
+                                     uint16_t manufacturerCode, uint8_t * buffer, uint16_t maxReadLength)
+{
+    return EMBER_ZCL_STATUS_FAILURE;
+}
+
+/** @brief Write Attributes Response
+ *
+ * This function is called by the application framework when a Write Attributes
+ * Response command is received from an external device.  The application should
+ * return true if the message was processed or false if it was not.
+ *
+ * @param clusterId The cluster identifier of this response.  Ver.: always
+ * @param buffer Buffer containing the list of write attribute status records.
+ * Ver.: always
+ * @param bufLen The length in bytes of the list.  Ver.: always
+ */
+bool __attribute__((weak)) emberAfWriteAttributesResponseCallback(ClusterId clusterId, uint8_t * buffer, uint16_t bufLen)
+{
+    return false;
+}
+
+/** @brief External Attribute Write
+ *
+ * This function is called whenever the Application Framework needs to write an
+ * attribute which is not stored within the data structures of the Application
+ * Framework itself. One of the new features in Version 2 is the ability to
+ * store attributes outside the Framework. This is particularly useful for
+ * attributes that do not need to be stored because they can be read off the
+ * hardware when they are needed, or are stored in some central location used by
+ * many modules within the system. In this case, you can indicate that the
+ * attribute is stored externally. When the framework needs to write an external
+ * attribute, it makes a call to this callback.
+        This callback is very
+ * useful for host micros which need to store attributes in persistent memory.
+ * Because each host micro (used with an Ember NCP) has its own type of
+ * persistent memory storage, the Application Framework does not include the
+ * ability to mark attributes as stored in flash the way that it does for Ember
+ * SoCs like the EM35x. On a host micro, any attributes that need to be stored
+ * in persistent memory should be marked as external and accessed through the
+ * external read and write callbacks. Any host code associated with the
+ * persistent storage should be implemented within this callback.
+        All of
+ * the important information about the attribute itself is passed as a pointer
+ * to an EmberAfAttributeMetadata struct, which is stored within the application
+ * and used to manage the attribute. A complete description of the
+ * EmberAfAttributeMetadata struct is provided in
+ * app/framework/include/af-types.h.
+        This function assumes that the
+ * application is able to write the attribute and return immediately. Any
+ * attributes that require a state machine for reading and writing are not
+ * candidates for externalization at the present time. The Application Framework
+ * does not currently include a state machine for reading or writing attributes
+ * that must take place across a series of application ticks. Attributes that
+ * cannot be written immediately should be stored within the Application
+ * Framework and updated occasionally by the application code from within the
+ * emberAfMainTickCallback.
+        If the application was successfully able to
+ * write the attribute, it returns a value of EMBER_ZCL_STATUS_SUCCESS. Any
+ * other return value indicates the application was not able to write the
+ * attribute.
+ *
+ * @param endpoint   Ver.: always
+ * @param clusterId   Ver.: always
+ * @param attributeMetadata   Ver.: always
+ * @param manufacturerCode   Ver.: always
+ * @param buffer   Ver.: always
+ */
+EmberAfStatus __attribute__((weak))
+emberAfExternalAttributeWriteCallback(EndpointId endpoint, ClusterId clusterId, EmberAfAttributeMetadata * attributeMetadata,
+                                      uint16_t manufacturerCode, uint8_t * buffer)
+{
+    return EMBER_ZCL_STATUS_FAILURE;
+}
+
+/** @brief Report Attributes
+ *
+ * This function is called by the application framework when a Report Attributes
+ * command is received from an external device.  The application should return
+ * true if the message was processed or false if it was not.
+ *
+ * @param clusterId The cluster identifier of this command.  Ver.: always
+ * @param buffer Buffer containing the list of attribute report records.  Ver.:
+ * always
+ * @param bufLen The length in bytes of the list.  Ver.: always
+ */
+bool __attribute__((weak)) emberAfReportAttributesCallback(ClusterId clusterId, uint8_t * buffer, uint16_t bufLen)
+{
+    return false;
+}
+
+/** @brief Get Current Time
+ *
+ * This callback is called when device attempts to get current time from the
+ * hardware. If this device has means to retrieve exact time, then this method
+ * should implement it. If the callback can't provide the exact time it should
+ * return 0 to indicate failure. Default action is to return 0, which indicates
+ * that device does not have access to real time.
+ *
+ */
+uint32_t __attribute__((weak)) emberAfGetCurrentTimeCallback()
+{
+    return 0;
+}
+
+/** @brief Get Endpoint Info
+ *
+ * This function is a callback to an application implemented endpoint that
+ * operates outside the normal application framework.  When the framework wishes
+ * to perform operations with that endpoint it uses this callback to retrieve
+ * the endpoint's information.  If the endpoint exists and the application can
+ * provide data then true shall be returned.  Otherwise the callback must return
+ * false.
+ *
+ * @param endpoint The endpoint to retrieve data for.  Ver.: always
+ * @param returnNetworkIndex The index corresponding to the ZigBee network the
+ * endpoint belongs to.  If not using a multi-network device, 0 must be
+ * returned.  Otherwise on a multi-network device the stack will switch to this
+ * network before sending the message.  Ver.: always
+ * @param returnEndpointInfo A pointer to a data struct that will be written
+ * with information about the endpoint.  Ver.: always
+ */
+bool __attribute__((weak))
+emberAfGetEndpointInfoCallback(EndpointId endpoint, uint8_t * returnNetworkIndex, EmberAfEndpointInfoStruct * returnEndpointInfo)
+{
+    return false;
+}
+
+/** @brief Get Source Route Overhead
+ *
+ * This function is called by the framework to determine the overhead required
+ * in the network frame for source routing to a particular destination.
+ *
+ * @param destination The node id of the destination  Ver.: always
+ */
+uint8_t __attribute__((weak)) emberAfGetSourceRouteOverheadCallback(chip::NodeId destination)
+{
+    return 0;
+}
+
+/** @brief Registration Abort
+ *
+ * This callback is called when the device should abort the registration
+ * process.
+ *
+ */
+void __attribute__((weak)) emberAfRegistrationAbortCallback() {}
+
+/** @brief Interpan Send Message
+ *
+ * This function will send a raw MAC message with interpan frame format using
+ * the passed parameters.
+ *
+ * @param header Interpan header info  Ver.: always
+ * @param messageLength The length of the message received or to send  Ver.:
+ * always
+ * @param message The message data received or to send.  Ver.: always
+ */
+EmberStatus __attribute__((weak))
+emberAfInterpanSendMessageCallback(EmberAfInterpanHeader * header, uint16_t messageLength, uint8_t * message)
+{
+    return EMBER_LIBRARY_NOT_PRESENT;
+}
+
+/** @brief Start Move
+ *
+ * This function is called to initiate the process for a device to move (rejoin)
+ * to a new parent.
+ *
+ */
+bool __attribute__((weak)) emberAfStartMoveCallback()
+{
+    return false;
+}
diff --git a/examples/chip-tool/gen/callback.h b/examples/chip-tool/gen/callback.h
new file mode 100644
index 0000000..9dc9bcf
--- /dev/null
+++ b/examples/chip-tool/gen/callback.h
@@ -0,0 +1,1681 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+// Prevent multiple inclusion
+#pragma once
+
+#include "af-structs.h"
+#include "af-types.h"
+#include "basic-types.h"
+
+/** @brief Cluster Init
+ *
+ * This function is called when a specific cluster is initialized. It gives the
+ * application an opportunity to take care of cluster initialization procedures.
+ * It is called exactly once for each endpoint where cluster is present.
+ *
+ * @param endpoint   Ver.: always
+ * @param clusterId   Ver.: always
+ */
+void emberAfClusterInitCallback(chip::EndpointId endpoint, chip::ClusterId clusterId);
+
+// Cluster Init Functions
+
+/** @brief Barrier Control Cluster Init
+ *
+ * Cluster Init
+ *
+ * @param endpoint    Endpoint that is being initialized
+ */
+void emberAfBarrierControlClusterInitCallback(chip::EndpointId endpoint);
+
+/** @brief Basic Cluster Init
+ *
+ * Cluster Init
+ *
+ * @param endpoint    Endpoint that is being initialized
+ */
+void emberAfBasicClusterInitCallback(chip::EndpointId endpoint);
+
+/** @brief Binding Cluster Init
+ *
+ * Cluster Init
+ *
+ * @param endpoint    Endpoint that is being initialized
+ */
+void emberAfBindingClusterInitCallback(chip::EndpointId endpoint);
+
+/** @brief Color Control Cluster Init
+ *
+ * Cluster Init
+ *
+ * @param endpoint    Endpoint that is being initialized
+ */
+void emberAfColorControlClusterInitCallback(chip::EndpointId endpoint);
+
+/** @brief Door Lock Cluster Init
+ *
+ * Cluster Init
+ *
+ * @param endpoint    Endpoint that is being initialized
+ */
+void emberAfDoorLockClusterInitCallback(chip::EndpointId endpoint);
+
+/** @brief Groups Cluster Init
+ *
+ * Cluster Init
+ *
+ * @param endpoint    Endpoint that is being initialized
+ */
+void emberAfGroupsClusterInitCallback(chip::EndpointId endpoint);
+
+/** @brief Identify Cluster Init
+ *
+ * Cluster Init
+ *
+ * @param endpoint    Endpoint that is being initialized
+ */
+void emberAfIdentifyClusterInitCallback(chip::EndpointId endpoint);
+
+/** @brief Level Control Cluster Init
+ *
+ * Cluster Init
+ *
+ * @param endpoint    Endpoint that is being initialized
+ */
+void emberAfLevelControlClusterInitCallback(chip::EndpointId endpoint);
+
+/** @brief On/off Cluster Init
+ *
+ * Cluster Init
+ *
+ * @param endpoint    Endpoint that is being initialized
+ */
+void emberAfOnOffClusterInitCallback(chip::EndpointId endpoint);
+
+/** @brief Scenes Cluster Init
+ *
+ * Cluster Init
+ *
+ * @param endpoint    Endpoint that is being initialized
+ */
+void emberAfScenesClusterInitCallback(chip::EndpointId endpoint);
+
+/** @brief Temperature Measurement Cluster Init
+ *
+ * Cluster Init
+ *
+ * @param endpoint    Endpoint that is being initialized
+ */
+void emberAfTemperatureMeasurementClusterInitCallback(chip::EndpointId endpoint);
+
+// Cluster Server/Client Init Functions
+
+//
+// Barrier Control Cluster client
+//
+
+/** @brief Barrier Control Cluster Client Init
+ *
+ * Client Init
+ *
+ * @param endpoint    Endpoint that is being initialized
+ */
+void emberAfBarrierControlClusterClientInitCallback(chip::EndpointId endpoint);
+
+/** @brief Barrier Control Cluster Client Attribute Changed
+ *
+ * Client Attribute Changed
+ *
+ * @param endpoint    Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ */
+void emberAfBarrierControlClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
+
+/** @brief Barrier Control Cluster Client Manufacturer Specific Attribute Changed
+ *
+ * Client Manufacturer Specific Attribute Changed
+ *
+ * @param endpoint          Endpoint that is being initialized
+ * @param attributeId       Attribute that changed
+ * @param manufacturerCode  Manufacturer Code of the attribute that changed
+ */
+void emberAfBarrierControlClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
+                                                                                    chip::AttributeId attributeId,
+                                                                                    uint16_t manufacturerCode);
+
+/** @brief Barrier Control Cluster Client Message Sent
+ *
+ * Client Message Sent
+ *
+ * @param type               The type of message sent
+ * @param indexOrDestination The destination or address to which the message was sent
+ * @param apsFrame           The APS frame for the message
+ * @param msgLen             The length of the message
+ * @param message            The message that was sent
+ * @param status             The status of the sent message
+ */
+void emberAfBarrierControlClusterClientMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
+                                                           EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
+                                                           EmberStatus status);
+
+/** @brief Barrier Control Cluster Client Pre Attribute Changed
+ *
+ * client Pre Attribute Changed
+ *
+ * @param endpoint      Endpoint that is being initialized
+ * @param attributeId   Attribute to be changed
+ * @param attributeType Attribute type
+ * @param size          Attribute size
+ * @param value         Attribute value
+ */
+EmberAfStatus emberAfBarrierControlClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint,
+                                                                            chip::AttributeId attributeId,
+                                                                            EmberAfAttributeType attributeType, uint8_t size,
+                                                                            uint8_t * value);
+
+/** @brief Barrier Control Cluster Client Tick
+ *
+ * client Tick
+ *
+ * @param endpoint  Endpoint that is being served
+ */
+void emberAfBarrierControlClusterClientTickCallback(chip::EndpointId endpoint);
+
+//
+// Basic Cluster client
+//
+
+/** @brief Basic Cluster Client Init
+ *
+ * Client Init
+ *
+ * @param endpoint    Endpoint that is being initialized
+ */
+void emberAfBasicClusterClientInitCallback(chip::EndpointId endpoint);
+
+/** @brief Basic Cluster Client Attribute Changed
+ *
+ * Client Attribute Changed
+ *
+ * @param endpoint    Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ */
+void emberAfBasicClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
+
+/** @brief Basic Cluster Client Manufacturer Specific Attribute Changed
+ *
+ * Client Manufacturer Specific Attribute Changed
+ *
+ * @param endpoint          Endpoint that is being initialized
+ * @param attributeId       Attribute that changed
+ * @param manufacturerCode  Manufacturer Code of the attribute that changed
+ */
+void emberAfBasicClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
+                                                                           uint16_t manufacturerCode);
+
+/** @brief Basic Cluster Client Message Sent
+ *
+ * Client Message Sent
+ *
+ * @param type               The type of message sent
+ * @param indexOrDestination The destination or address to which the message was sent
+ * @param apsFrame           The APS frame for the message
+ * @param msgLen             The length of the message
+ * @param message            The message that was sent
+ * @param status             The status of the sent message
+ */
+void emberAfBasicClusterClientMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
+                                                  EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message, EmberStatus status);
+
+/** @brief Basic Cluster Client Pre Attribute Changed
+ *
+ * client Pre Attribute Changed
+ *
+ * @param endpoint      Endpoint that is being initialized
+ * @param attributeId   Attribute to be changed
+ * @param attributeType Attribute type
+ * @param size          Attribute size
+ * @param value         Attribute value
+ */
+EmberAfStatus emberAfBasicClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
+                                                                   EmberAfAttributeType attributeType, uint8_t size,
+                                                                   uint8_t * value);
+
+/** @brief Basic Cluster Client Tick
+ *
+ * client Tick
+ *
+ * @param endpoint  Endpoint that is being served
+ */
+void emberAfBasicClusterClientTickCallback(chip::EndpointId endpoint);
+
+//
+// Binding Cluster client
+//
+
+/** @brief Binding Cluster Client Init
+ *
+ * Client Init
+ *
+ * @param endpoint    Endpoint that is being initialized
+ */
+void emberAfBindingClusterClientInitCallback(chip::EndpointId endpoint);
+
+/** @brief Binding Cluster Client Attribute Changed
+ *
+ * Client Attribute Changed
+ *
+ * @param endpoint    Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ */
+void emberAfBindingClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
+
+/** @brief Binding Cluster Client Manufacturer Specific Attribute Changed
+ *
+ * Client Manufacturer Specific Attribute Changed
+ *
+ * @param endpoint          Endpoint that is being initialized
+ * @param attributeId       Attribute that changed
+ * @param manufacturerCode  Manufacturer Code of the attribute that changed
+ */
+void emberAfBindingClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
+                                                                             chip::AttributeId attributeId,
+                                                                             uint16_t manufacturerCode);
+
+/** @brief Binding Cluster Client Message Sent
+ *
+ * Client Message Sent
+ *
+ * @param type               The type of message sent
+ * @param indexOrDestination The destination or address to which the message was sent
+ * @param apsFrame           The APS frame for the message
+ * @param msgLen             The length of the message
+ * @param message            The message that was sent
+ * @param status             The status of the sent message
+ */
+void emberAfBindingClusterClientMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
+                                                    EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
+                                                    EmberStatus status);
+
+/** @brief Binding Cluster Client Pre Attribute Changed
+ *
+ * client Pre Attribute Changed
+ *
+ * @param endpoint      Endpoint that is being initialized
+ * @param attributeId   Attribute to be changed
+ * @param attributeType Attribute type
+ * @param size          Attribute size
+ * @param value         Attribute value
+ */
+EmberAfStatus emberAfBindingClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
+                                                                     EmberAfAttributeType attributeType, uint8_t size,
+                                                                     uint8_t * value);
+
+/** @brief Binding Cluster Client Tick
+ *
+ * client Tick
+ *
+ * @param endpoint  Endpoint that is being served
+ */
+void emberAfBindingClusterClientTickCallback(chip::EndpointId endpoint);
+
+//
+// Color Control Cluster client
+//
+
+/** @brief Color Control Cluster Client Init
+ *
+ * Client Init
+ *
+ * @param endpoint    Endpoint that is being initialized
+ */
+void emberAfColorControlClusterClientInitCallback(chip::EndpointId endpoint);
+
+/** @brief Color Control Cluster Client Attribute Changed
+ *
+ * Client Attribute Changed
+ *
+ * @param endpoint    Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ */
+void emberAfColorControlClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
+
+/** @brief Color Control Cluster Client Manufacturer Specific Attribute Changed
+ *
+ * Client Manufacturer Specific Attribute Changed
+ *
+ * @param endpoint          Endpoint that is being initialized
+ * @param attributeId       Attribute that changed
+ * @param manufacturerCode  Manufacturer Code of the attribute that changed
+ */
+void emberAfColorControlClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
+                                                                                  chip::AttributeId attributeId,
+                                                                                  uint16_t manufacturerCode);
+
+/** @brief Color Control Cluster Client Message Sent
+ *
+ * Client Message Sent
+ *
+ * @param type               The type of message sent
+ * @param indexOrDestination The destination or address to which the message was sent
+ * @param apsFrame           The APS frame for the message
+ * @param msgLen             The length of the message
+ * @param message            The message that was sent
+ * @param status             The status of the sent message
+ */
+void emberAfColorControlClusterClientMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
+                                                         EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
+                                                         EmberStatus status);
+
+/** @brief Color Control Cluster Client Pre Attribute Changed
+ *
+ * client Pre Attribute Changed
+ *
+ * @param endpoint      Endpoint that is being initialized
+ * @param attributeId   Attribute to be changed
+ * @param attributeType Attribute type
+ * @param size          Attribute size
+ * @param value         Attribute value
+ */
+EmberAfStatus emberAfColorControlClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
+                                                                          EmberAfAttributeType attributeType, uint8_t size,
+                                                                          uint8_t * value);
+
+/** @brief Color Control Cluster Client Tick
+ *
+ * client Tick
+ *
+ * @param endpoint  Endpoint that is being served
+ */
+void emberAfColorControlClusterClientTickCallback(chip::EndpointId endpoint);
+
+//
+// Door Lock Cluster client
+//
+
+/** @brief Door Lock Cluster Client Init
+ *
+ * Client Init
+ *
+ * @param endpoint    Endpoint that is being initialized
+ */
+void emberAfDoorLockClusterClientInitCallback(chip::EndpointId endpoint);
+
+/** @brief Door Lock Cluster Client Attribute Changed
+ *
+ * Client Attribute Changed
+ *
+ * @param endpoint    Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ */
+void emberAfDoorLockClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
+
+/** @brief Door Lock Cluster Client Manufacturer Specific Attribute Changed
+ *
+ * Client Manufacturer Specific Attribute Changed
+ *
+ * @param endpoint          Endpoint that is being initialized
+ * @param attributeId       Attribute that changed
+ * @param manufacturerCode  Manufacturer Code of the attribute that changed
+ */
+void emberAfDoorLockClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
+                                                                              chip::AttributeId attributeId,
+                                                                              uint16_t manufacturerCode);
+
+/** @brief Door Lock Cluster Client Message Sent
+ *
+ * Client Message Sent
+ *
+ * @param type               The type of message sent
+ * @param indexOrDestination The destination or address to which the message was sent
+ * @param apsFrame           The APS frame for the message
+ * @param msgLen             The length of the message
+ * @param message            The message that was sent
+ * @param status             The status of the sent message
+ */
+void emberAfDoorLockClusterClientMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
+                                                     EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
+                                                     EmberStatus status);
+
+/** @brief Door Lock Cluster Client Pre Attribute Changed
+ *
+ * client Pre Attribute Changed
+ *
+ * @param endpoint      Endpoint that is being initialized
+ * @param attributeId   Attribute to be changed
+ * @param attributeType Attribute type
+ * @param size          Attribute size
+ * @param value         Attribute value
+ */
+EmberAfStatus emberAfDoorLockClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
+                                                                      EmberAfAttributeType attributeType, uint8_t size,
+                                                                      uint8_t * value);
+
+/** @brief Door Lock Cluster Client Tick
+ *
+ * client Tick
+ *
+ * @param endpoint  Endpoint that is being served
+ */
+void emberAfDoorLockClusterClientTickCallback(chip::EndpointId endpoint);
+
+//
+// Groups Cluster client
+//
+
+/** @brief Groups Cluster Client Init
+ *
+ * Client Init
+ *
+ * @param endpoint    Endpoint that is being initialized
+ */
+void emberAfGroupsClusterClientInitCallback(chip::EndpointId endpoint);
+
+/** @brief Groups Cluster Client Attribute Changed
+ *
+ * Client Attribute Changed
+ *
+ * @param endpoint    Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ */
+void emberAfGroupsClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
+
+/** @brief Groups Cluster Client Manufacturer Specific Attribute Changed
+ *
+ * Client Manufacturer Specific Attribute Changed
+ *
+ * @param endpoint          Endpoint that is being initialized
+ * @param attributeId       Attribute that changed
+ * @param manufacturerCode  Manufacturer Code of the attribute that changed
+ */
+void emberAfGroupsClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
+                                                                            chip::AttributeId attributeId,
+                                                                            uint16_t manufacturerCode);
+
+/** @brief Groups Cluster Client Message Sent
+ *
+ * Client Message Sent
+ *
+ * @param type               The type of message sent
+ * @param indexOrDestination The destination or address to which the message was sent
+ * @param apsFrame           The APS frame for the message
+ * @param msgLen             The length of the message
+ * @param message            The message that was sent
+ * @param status             The status of the sent message
+ */
+void emberAfGroupsClusterClientMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
+                                                   EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
+                                                   EmberStatus status);
+
+/** @brief Groups Cluster Client Pre Attribute Changed
+ *
+ * client Pre Attribute Changed
+ *
+ * @param endpoint      Endpoint that is being initialized
+ * @param attributeId   Attribute to be changed
+ * @param attributeType Attribute type
+ * @param size          Attribute size
+ * @param value         Attribute value
+ */
+EmberAfStatus emberAfGroupsClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
+                                                                    EmberAfAttributeType attributeType, uint8_t size,
+                                                                    uint8_t * value);
+
+/** @brief Groups Cluster Client Tick
+ *
+ * client Tick
+ *
+ * @param endpoint  Endpoint that is being served
+ */
+void emberAfGroupsClusterClientTickCallback(chip::EndpointId endpoint);
+
+//
+// Identify Cluster client
+//
+
+/** @brief Identify Cluster Client Init
+ *
+ * Client Init
+ *
+ * @param endpoint    Endpoint that is being initialized
+ */
+void emberAfIdentifyClusterClientInitCallback(chip::EndpointId endpoint);
+
+/** @brief Identify Cluster Client Attribute Changed
+ *
+ * Client Attribute Changed
+ *
+ * @param endpoint    Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ */
+void emberAfIdentifyClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
+
+/** @brief Identify Cluster Client Manufacturer Specific Attribute Changed
+ *
+ * Client Manufacturer Specific Attribute Changed
+ *
+ * @param endpoint          Endpoint that is being initialized
+ * @param attributeId       Attribute that changed
+ * @param manufacturerCode  Manufacturer Code of the attribute that changed
+ */
+void emberAfIdentifyClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
+                                                                              chip::AttributeId attributeId,
+                                                                              uint16_t manufacturerCode);
+
+/** @brief Identify Cluster Client Message Sent
+ *
+ * Client Message Sent
+ *
+ * @param type               The type of message sent
+ * @param indexOrDestination The destination or address to which the message was sent
+ * @param apsFrame           The APS frame for the message
+ * @param msgLen             The length of the message
+ * @param message            The message that was sent
+ * @param status             The status of the sent message
+ */
+void emberAfIdentifyClusterClientMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
+                                                     EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
+                                                     EmberStatus status);
+
+/** @brief Identify Cluster Client Pre Attribute Changed
+ *
+ * client Pre Attribute Changed
+ *
+ * @param endpoint      Endpoint that is being initialized
+ * @param attributeId   Attribute to be changed
+ * @param attributeType Attribute type
+ * @param size          Attribute size
+ * @param value         Attribute value
+ */
+EmberAfStatus emberAfIdentifyClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
+                                                                      EmberAfAttributeType attributeType, uint8_t size,
+                                                                      uint8_t * value);
+
+/** @brief Identify Cluster Client Tick
+ *
+ * client Tick
+ *
+ * @param endpoint  Endpoint that is being served
+ */
+void emberAfIdentifyClusterClientTickCallback(chip::EndpointId endpoint);
+
+//
+// Level Control Cluster client
+//
+
+/** @brief Level Control Cluster Client Init
+ *
+ * Client Init
+ *
+ * @param endpoint    Endpoint that is being initialized
+ */
+void emberAfLevelControlClusterClientInitCallback(chip::EndpointId endpoint);
+
+/** @brief Level Control Cluster Client Attribute Changed
+ *
+ * Client Attribute Changed
+ *
+ * @param endpoint    Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ */
+void emberAfLevelControlClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
+
+/** @brief Level Control Cluster Client Manufacturer Specific Attribute Changed
+ *
+ * Client Manufacturer Specific Attribute Changed
+ *
+ * @param endpoint          Endpoint that is being initialized
+ * @param attributeId       Attribute that changed
+ * @param manufacturerCode  Manufacturer Code of the attribute that changed
+ */
+void emberAfLevelControlClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
+                                                                                  chip::AttributeId attributeId,
+                                                                                  uint16_t manufacturerCode);
+
+/** @brief Level Control Cluster Client Message Sent
+ *
+ * Client Message Sent
+ *
+ * @param type               The type of message sent
+ * @param indexOrDestination The destination or address to which the message was sent
+ * @param apsFrame           The APS frame for the message
+ * @param msgLen             The length of the message
+ * @param message            The message that was sent
+ * @param status             The status of the sent message
+ */
+void emberAfLevelControlClusterClientMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
+                                                         EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
+                                                         EmberStatus status);
+
+/** @brief Level Control Cluster Client Pre Attribute Changed
+ *
+ * client Pre Attribute Changed
+ *
+ * @param endpoint      Endpoint that is being initialized
+ * @param attributeId   Attribute to be changed
+ * @param attributeType Attribute type
+ * @param size          Attribute size
+ * @param value         Attribute value
+ */
+EmberAfStatus emberAfLevelControlClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
+                                                                          EmberAfAttributeType attributeType, uint8_t size,
+                                                                          uint8_t * value);
+
+/** @brief Level Control Cluster Client Tick
+ *
+ * client Tick
+ *
+ * @param endpoint  Endpoint that is being served
+ */
+void emberAfLevelControlClusterClientTickCallback(chip::EndpointId endpoint);
+
+//
+// On/off Cluster client
+//
+
+/** @brief On/off Cluster Client Init
+ *
+ * Client Init
+ *
+ * @param endpoint    Endpoint that is being initialized
+ */
+void emberAfOnOffClusterClientInitCallback(chip::EndpointId endpoint);
+
+/** @brief On/off Cluster Client Attribute Changed
+ *
+ * Client Attribute Changed
+ *
+ * @param endpoint    Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ */
+void emberAfOnOffClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
+
+/** @brief On/off Cluster Client Manufacturer Specific Attribute Changed
+ *
+ * Client Manufacturer Specific Attribute Changed
+ *
+ * @param endpoint          Endpoint that is being initialized
+ * @param attributeId       Attribute that changed
+ * @param manufacturerCode  Manufacturer Code of the attribute that changed
+ */
+void emberAfOnOffClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
+                                                                           uint16_t manufacturerCode);
+
+/** @brief On/off Cluster Client Message Sent
+ *
+ * Client Message Sent
+ *
+ * @param type               The type of message sent
+ * @param indexOrDestination The destination or address to which the message was sent
+ * @param apsFrame           The APS frame for the message
+ * @param msgLen             The length of the message
+ * @param message            The message that was sent
+ * @param status             The status of the sent message
+ */
+void emberAfOnOffClusterClientMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
+                                                  EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message, EmberStatus status);
+
+/** @brief On/off Cluster Client Pre Attribute Changed
+ *
+ * client Pre Attribute Changed
+ *
+ * @param endpoint      Endpoint that is being initialized
+ * @param attributeId   Attribute to be changed
+ * @param attributeType Attribute type
+ * @param size          Attribute size
+ * @param value         Attribute value
+ */
+EmberAfStatus emberAfOnOffClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
+                                                                   EmberAfAttributeType attributeType, uint8_t size,
+                                                                   uint8_t * value);
+
+/** @brief On/off Cluster Client Tick
+ *
+ * client Tick
+ *
+ * @param endpoint  Endpoint that is being served
+ */
+void emberAfOnOffClusterClientTickCallback(chip::EndpointId endpoint);
+
+//
+// Scenes Cluster client
+//
+
+/** @brief Scenes Cluster Client Init
+ *
+ * Client Init
+ *
+ * @param endpoint    Endpoint that is being initialized
+ */
+void emberAfScenesClusterClientInitCallback(chip::EndpointId endpoint);
+
+/** @brief Scenes Cluster Client Attribute Changed
+ *
+ * Client Attribute Changed
+ *
+ * @param endpoint    Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ */
+void emberAfScenesClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
+
+/** @brief Scenes Cluster Client Manufacturer Specific Attribute Changed
+ *
+ * Client Manufacturer Specific Attribute Changed
+ *
+ * @param endpoint          Endpoint that is being initialized
+ * @param attributeId       Attribute that changed
+ * @param manufacturerCode  Manufacturer Code of the attribute that changed
+ */
+void emberAfScenesClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
+                                                                            chip::AttributeId attributeId,
+                                                                            uint16_t manufacturerCode);
+
+/** @brief Scenes Cluster Client Message Sent
+ *
+ * Client Message Sent
+ *
+ * @param type               The type of message sent
+ * @param indexOrDestination The destination or address to which the message was sent
+ * @param apsFrame           The APS frame for the message
+ * @param msgLen             The length of the message
+ * @param message            The message that was sent
+ * @param status             The status of the sent message
+ */
+void emberAfScenesClusterClientMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
+                                                   EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
+                                                   EmberStatus status);
+
+/** @brief Scenes Cluster Client Pre Attribute Changed
+ *
+ * client Pre Attribute Changed
+ *
+ * @param endpoint      Endpoint that is being initialized
+ * @param attributeId   Attribute to be changed
+ * @param attributeType Attribute type
+ * @param size          Attribute size
+ * @param value         Attribute value
+ */
+EmberAfStatus emberAfScenesClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
+                                                                    EmberAfAttributeType attributeType, uint8_t size,
+                                                                    uint8_t * value);
+
+/** @brief Scenes Cluster Client Tick
+ *
+ * client Tick
+ *
+ * @param endpoint  Endpoint that is being served
+ */
+void emberAfScenesClusterClientTickCallback(chip::EndpointId endpoint);
+
+//
+// Temperature Measurement Cluster client
+//
+
+/** @brief Temperature Measurement Cluster Client Init
+ *
+ * Client Init
+ *
+ * @param endpoint    Endpoint that is being initialized
+ */
+void emberAfTemperatureMeasurementClusterClientInitCallback(chip::EndpointId endpoint);
+
+/** @brief Temperature Measurement Cluster Client Attribute Changed
+ *
+ * Client Attribute Changed
+ *
+ * @param endpoint    Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ */
+void emberAfTemperatureMeasurementClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
+
+/** @brief Temperature Measurement Cluster Client Manufacturer Specific Attribute Changed
+ *
+ * Client Manufacturer Specific Attribute Changed
+ *
+ * @param endpoint          Endpoint that is being initialized
+ * @param attributeId       Attribute that changed
+ * @param manufacturerCode  Manufacturer Code of the attribute that changed
+ */
+void emberAfTemperatureMeasurementClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
+                                                                                            chip::AttributeId attributeId,
+                                                                                            uint16_t manufacturerCode);
+
+/** @brief Temperature Measurement Cluster Client Message Sent
+ *
+ * Client Message Sent
+ *
+ * @param type               The type of message sent
+ * @param indexOrDestination The destination or address to which the message was sent
+ * @param apsFrame           The APS frame for the message
+ * @param msgLen             The length of the message
+ * @param message            The message that was sent
+ * @param status             The status of the sent message
+ */
+void emberAfTemperatureMeasurementClusterClientMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
+                                                                   EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
+                                                                   EmberStatus status);
+
+/** @brief Temperature Measurement Cluster Client Pre Attribute Changed
+ *
+ * client Pre Attribute Changed
+ *
+ * @param endpoint      Endpoint that is being initialized
+ * @param attributeId   Attribute to be changed
+ * @param attributeType Attribute type
+ * @param size          Attribute size
+ * @param value         Attribute value
+ */
+EmberAfStatus emberAfTemperatureMeasurementClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint,
+                                                                                    chip::AttributeId attributeId,
+                                                                                    EmberAfAttributeType attributeType,
+                                                                                    uint8_t size, uint8_t * value);
+
+/** @brief Temperature Measurement Cluster Client Tick
+ *
+ * client Tick
+ *
+ * @param endpoint  Endpoint that is being served
+ */
+void emberAfTemperatureMeasurementClusterClientTickCallback(chip::EndpointId endpoint);
+
+// Cluster Commands Callback
+
+/**
+ * @brief Door Lock Cluster ClearAllPinsResponse Command callback
+ * @param status
+ */
+
+bool emberAfDoorLockClusterClearAllPinsResponseCallback(uint8_t status);
+
+/**
+ * @brief Door Lock Cluster ClearAllRfidsResponse Command callback
+ * @param status
+ */
+
+bool emberAfDoorLockClusterClearAllRfidsResponseCallback(uint8_t status);
+
+/**
+ * @brief Door Lock Cluster ClearHolidayScheduleResponse Command callback
+ * @param status
+ */
+
+bool emberAfDoorLockClusterClearHolidayScheduleResponseCallback(uint8_t status);
+
+/**
+ * @brief Door Lock Cluster ClearPinResponse Command callback
+ * @param status
+ */
+
+bool emberAfDoorLockClusterClearPinResponseCallback(uint8_t status);
+
+/**
+ * @brief Door Lock Cluster ClearRfidResponse Command callback
+ * @param status
+ */
+
+bool emberAfDoorLockClusterClearRfidResponseCallback(uint8_t status);
+
+/**
+ * @brief Door Lock Cluster ClearWeekdayScheduleResponse Command callback
+ * @param status
+ */
+
+bool emberAfDoorLockClusterClearWeekdayScheduleResponseCallback(uint8_t status);
+
+/**
+ * @brief Door Lock Cluster ClearYeardayScheduleResponse Command callback
+ * @param status
+ */
+
+bool emberAfDoorLockClusterClearYeardayScheduleResponseCallback(uint8_t status);
+
+/**
+ * @brief Door Lock Cluster GetHolidayScheduleResponse Command callback
+ * @param scheduleId
+ * @param status
+ * @param localStartTime
+ * @param localEndTime
+ * @param operatingModeDuringHoliday
+ */
+
+bool emberAfDoorLockClusterGetHolidayScheduleResponseCallback(uint8_t scheduleId, uint8_t status, uint32_t localStartTime,
+                                                              uint32_t localEndTime, uint8_t operatingModeDuringHoliday);
+
+/**
+ * @brief Door Lock Cluster GetLogRecordResponse Command callback
+ * @param logEntryId
+ * @param timestamp
+ * @param eventType
+ * @param source
+ * @param eventIdOrAlarmCode
+ * @param userId
+ * @param pin
+ */
+
+bool emberAfDoorLockClusterGetLogRecordResponseCallback(uint16_t logEntryId, uint32_t timestamp, uint8_t eventType, uint8_t source,
+                                                        uint8_t eventIdOrAlarmCode, uint16_t userId, uint8_t * pin);
+
+/**
+ * @brief Door Lock Cluster GetPinResponse Command callback
+ * @param userId
+ * @param userStatus
+ * @param userType
+ * @param pin
+ */
+
+bool emberAfDoorLockClusterGetPinResponseCallback(uint16_t userId, uint8_t userStatus, uint8_t userType, uint8_t * pin);
+
+/**
+ * @brief Door Lock Cluster GetRfidResponse Command callback
+ * @param userId
+ * @param userStatus
+ * @param userType
+ * @param rfid
+ */
+
+bool emberAfDoorLockClusterGetRfidResponseCallback(uint16_t userId, uint8_t userStatus, uint8_t userType, uint8_t * rfid);
+
+/**
+ * @brief Door Lock Cluster GetUserTypeResponse Command callback
+ * @param userId
+ * @param userType
+ */
+
+bool emberAfDoorLockClusterGetUserTypeResponseCallback(uint16_t userId, uint8_t userType);
+
+/**
+ * @brief Door Lock Cluster GetWeekdayScheduleResponse Command callback
+ * @param scheduleId
+ * @param userId
+ * @param status
+ * @param daysMask
+ * @param startHour
+ * @param startMinute
+ * @param endHour
+ * @param endMinute
+ */
+
+bool emberAfDoorLockClusterGetWeekdayScheduleResponseCallback(uint8_t scheduleId, uint16_t userId, uint8_t status, uint8_t daysMask,
+                                                              uint8_t startHour, uint8_t startMinute, uint8_t endHour,
+                                                              uint8_t endMinute);
+
+/**
+ * @brief Door Lock Cluster GetYeardayScheduleResponse Command callback
+ * @param scheduleId
+ * @param userId
+ * @param status
+ * @param localStartTime
+ * @param localEndTime
+ */
+
+bool emberAfDoorLockClusterGetYeardayScheduleResponseCallback(uint8_t scheduleId, uint16_t userId, uint8_t status,
+                                                              uint32_t localStartTime, uint32_t localEndTime);
+
+/**
+ * @brief Door Lock Cluster LockDoorResponse Command callback
+ * @param status
+ */
+
+bool emberAfDoorLockClusterLockDoorResponseCallback(uint8_t status);
+
+/**
+ * @brief Door Lock Cluster SetHolidayScheduleResponse Command callback
+ * @param status
+ */
+
+bool emberAfDoorLockClusterSetHolidayScheduleResponseCallback(uint8_t status);
+
+/**
+ * @brief Door Lock Cluster SetPinResponse Command callback
+ * @param status
+ */
+
+bool emberAfDoorLockClusterSetPinResponseCallback(uint8_t status);
+
+/**
+ * @brief Door Lock Cluster SetRfidResponse Command callback
+ * @param status
+ */
+
+bool emberAfDoorLockClusterSetRfidResponseCallback(uint8_t status);
+
+/**
+ * @brief Door Lock Cluster SetUserTypeResponse Command callback
+ * @param status
+ */
+
+bool emberAfDoorLockClusterSetUserTypeResponseCallback(uint8_t status);
+
+/**
+ * @brief Door Lock Cluster SetWeekdayScheduleResponse Command callback
+ * @param status
+ */
+
+bool emberAfDoorLockClusterSetWeekdayScheduleResponseCallback(uint8_t status);
+
+/**
+ * @brief Door Lock Cluster SetYeardayScheduleResponse Command callback
+ * @param status
+ */
+
+bool emberAfDoorLockClusterSetYeardayScheduleResponseCallback(uint8_t status);
+
+/**
+ * @brief Door Lock Cluster UnlockDoorResponse Command callback
+ * @param status
+ */
+
+bool emberAfDoorLockClusterUnlockDoorResponseCallback(uint8_t status);
+
+/**
+ * @brief Door Lock Cluster UnlockWithTimeoutResponse Command callback
+ * @param status
+ */
+
+bool emberAfDoorLockClusterUnlockWithTimeoutResponseCallback(uint8_t status);
+
+/**
+ * @brief Groups Cluster AddGroupResponse Command callback
+ * @param status
+ * @param groupId
+ */
+
+bool emberAfGroupsClusterAddGroupResponseCallback(uint8_t status, uint16_t groupId);
+
+/**
+ * @brief Groups Cluster GetGroupMembershipResponse Command callback
+ * @param capacity
+ * @param groupCount
+ * @param groupList
+ */
+
+bool emberAfGroupsClusterGetGroupMembershipResponseCallback(uint8_t capacity, uint8_t groupCount,
+                                                            /* TYPE WARNING: array array defaults to */ uint8_t * groupList);
+
+/**
+ * @brief Groups Cluster RemoveGroupResponse Command callback
+ * @param status
+ * @param groupId
+ */
+
+bool emberAfGroupsClusterRemoveGroupResponseCallback(uint8_t status, uint16_t groupId);
+
+/**
+ * @brief Groups Cluster ViewGroupResponse Command callback
+ * @param status
+ * @param groupId
+ * @param groupName
+ */
+
+bool emberAfGroupsClusterViewGroupResponseCallback(uint8_t status, uint16_t groupId, uint8_t * groupName);
+
+/**
+ * @brief Identify Cluster IdentifyQueryResponse Command callback
+ * @param timeout
+ */
+
+bool emberAfIdentifyClusterIdentifyQueryResponseCallback(uint16_t timeout);
+
+/**
+ * @brief Scenes Cluster AddSceneResponse Command callback
+ * @param status
+ * @param groupId
+ * @param sceneId
+ */
+
+bool emberAfScenesClusterAddSceneResponseCallback(uint8_t status, uint16_t groupId, uint8_t sceneId);
+
+/**
+ * @brief Scenes Cluster GetSceneMembershipResponse Command callback
+ * @param status
+ * @param capacity
+ * @param groupId
+ * @param sceneCount
+ * @param sceneList
+ */
+
+bool emberAfScenesClusterGetSceneMembershipResponseCallback(uint8_t status, uint8_t capacity, uint16_t groupId, uint8_t sceneCount,
+                                                            /* TYPE WARNING: array array defaults to */ uint8_t * sceneList);
+
+/**
+ * @brief Scenes Cluster RemoveAllScenesResponse Command callback
+ * @param status
+ * @param groupId
+ */
+
+bool emberAfScenesClusterRemoveAllScenesResponseCallback(uint8_t status, uint16_t groupId);
+
+/**
+ * @brief Scenes Cluster RemoveSceneResponse Command callback
+ * @param status
+ * @param groupId
+ * @param sceneId
+ */
+
+bool emberAfScenesClusterRemoveSceneResponseCallback(uint8_t status, uint16_t groupId, uint8_t sceneId);
+
+/**
+ * @brief Scenes Cluster StoreSceneResponse Command callback
+ * @param status
+ * @param groupId
+ * @param sceneId
+ */
+
+bool emberAfScenesClusterStoreSceneResponseCallback(uint8_t status, uint16_t groupId, uint8_t sceneId);
+
+/**
+ * @brief Scenes Cluster ViewSceneResponse Command callback
+ * @param status
+ * @param groupId
+ * @param sceneId
+ * @param transitionTime
+ * @param sceneName
+ * @param extensionFieldSets
+ */
+
+bool emberAfScenesClusterViewSceneResponseCallback(uint8_t status, uint16_t groupId, uint8_t sceneId, uint16_t transitionTime,
+                                                   uint8_t * sceneName,
+                                                   /* TYPE WARNING: array array defaults to */ uint8_t * extensionFieldSets);
+
+//
+// Non-Cluster Related Callbacks
+//
+
+/** @brief Add To Current App Tasks
+ *
+ * This function is only useful to sleepy end devices.  This function will note
+ * the passed item as part of a set of tasks the application has outstanding
+ * (e.g. message sent requiring APS acknwoledgement).  This will affect how the
+ * application behaves with regard to sleeping and polling.  Until the
+ * outstanding task is completed, the device may poll more frequently and sleep
+ * less often.
+ *
+ * @param tasks   Ver.: always
+ */
+void emberAfAddToCurrentAppTasksCallback(EmberAfApplicationTask tasks);
+
+/** @brief Remove From Current App Tasks
+ *
+ * This function is only useful to sleepy end devices.  This function will
+ * remove the passed item from the set of tasks the application has outstanding
+ * (e.g. message sent requiring APS acknwoledgement).  This will affect how the
+ * application behaves with regard to sleeping and polling.  Removing the item
+ * from the list of outstanding tasks may allow the device to sleep longer and
+ * poll less frequently.  If there are other outstanding tasks the system may
+ * still have to stay away and poll more often.
+ *
+ * @param tasks   Ver.: always
+ */
+void emberAfRemoveFromCurrentAppTasksCallback(EmberAfApplicationTask tasks);
+
+/** @brief Allow Network Write Attribute
+ *
+ * This function is called by the application framework before it writes an
+ * attribute in response to a write attribute request from an external device.
+ * The value passed into this callback is the value to which the attribute is to
+ * be set by the framework.
+        Example:	In mirroring simple metering data
+ * on an Energy Services Interface (ESI) (formerly called Energy Service Portal
+ * (ESP) in SE 1.0).), a mirrored simple meter needs to write read-only
+ * attributes on its mirror. The-meter-mirror sample application, located in
+ * app/framework/sample-apps, uses this callback to allow the mirrored device to
+ * write simple metering attributes on the mirror regardless of the fact that
+ * most simple metering attributes are defined as read-only by the ZigBee
+ * specification.
+        Note:	The ZCL specification does not (as of this
+ * writing) specify any permission-level security for writing writeable
+ * attributes. As far as the ZCL specification is concerned, if an attribute is
+ * writeable, any device that has a link key for the device should be able to
+ * write that attribute. Furthermore if an attribute is read only, it should not
+ * be written over the air. Thus, if you implement permissions for writing
+ * attributes as a feature, you MAY be operating outside the specification. This
+ * is unlikely to be a problem for writing read-only attributes, but it may be a
+ * problem for attributes that are writeable according to the specification but
+ * restricted by the application implementing this callback.
+ *
+ * @param endpoint   Ver.: always
+ * @param clusterId   Ver.: always
+ * @param attributeId   Ver.: always
+ * @param mask   Ver.: always
+ * @param manufacturerCode   Ver.: always
+ * @param value   Ver.: always
+ * @param type   Ver.: always
+ */
+EmberAfAttributeWritePermission emberAfAllowNetworkWriteAttributeCallback(chip::EndpointId endpoint, chip::ClusterId clusterId,
+                                                                          chip::AttributeId attributeId, uint8_t mask,
+                                                                          uint16_t manufacturerCode, uint8_t * value, uint8_t type);
+
+/** @brief Attribute Read Access
+ *
+ * This function is called whenever the Application Framework needs to check
+ * access permission for an attribute read.
+ *
+ * @param endpoint   Ver.: always
+ * @param clusterId   Ver.: always
+ * @param manufacturerCode   Ver.: always
+ * @param attributeId   Ver.: always
+ */
+bool emberAfAttributeReadAccessCallback(chip::EndpointId endpoint, chip::ClusterId clusterId, uint16_t manufacturerCode,
+                                        chip::AttributeId attributeId);
+
+/** @brief Attribute Write Access
+ *
+ * This function is called whenever the Application Framework needs to check
+ * access permission for an attribute write.
+ *
+ * @param endpoint   Ver.: always
+ * @param clusterId   Ver.: always
+ * @param manufacturerCode   Ver.: always
+ * @param attributeId   Ver.: always
+ */
+bool emberAfAttributeWriteAccessCallback(chip::EndpointId endpoint, chip::ClusterId clusterId, uint16_t manufacturerCode,
+                                         chip::AttributeId attributeId);
+
+/** @brief Default Response
+ *
+ * This function is called by the application framework when a Default Response
+ * command is received from an external device.  The application should return
+ * true if the message was processed or false if it was not.
+ *
+ * @param clusterId The cluster identifier of this response.  Ver.: always
+ * @param commandId The command identifier to which this is a response.  Ver.:
+ * always
+ * @param status Specifies either SUCCESS or the nature of the error that was
+ * detected in the received command.  Ver.: always
+ */
+bool emberAfDefaultResponseCallback(chip::ClusterId clusterId, chip::CommandId commandId, EmberAfStatus status);
+
+/** @brief Configure Reporting Response
+ *
+ * This function is called by the application framework when a Configure
+ * Reporting Response command is received from an external device.  The
+ * application should return true if the message was processed or false if it
+ * was not.
+ *
+ * @param clusterId The cluster identifier of this response.  Ver.: always
+ * @param buffer Buffer containing the list of attribute status records.  Ver.:
+ * always
+ * @param bufLen The length in bytes of the list.  Ver.: always
+ */
+bool emberAfConfigureReportingResponseCallback(chip::ClusterId clusterId, uint8_t * buffer, uint16_t bufLen);
+
+/** @brief Read Reporting Configuration Response
+ *
+ * This function is called by the application framework when a Read Reporting
+ * Configuration Response command is received from an external device.  The
+ * application should return true if the message was processed or false if it
+ * was not.
+ *
+ * @param clusterId The cluster identifier of this response.  Ver.: always
+ * @param buffer Buffer containing the list of attribute reporting configuration
+ * records.  Ver.: always
+ * @param bufLen The length in bytes of the list.  Ver.: always
+ */
+bool emberAfReadReportingConfigurationResponseCallback(chip::ClusterId clusterId, uint8_t * buffer, uint16_t bufLen);
+
+/** @brief Discover Attributes Response
+ *
+ * This function is called by the application framework when a Discover
+ * Attributes Response or Discover Attributes Extended Response command is
+ * received from an external device.  The Discover Attributes Response command
+ * contains a bool indicating if discovery is complete and a list of zero or
+ * more attribute identifier/type records. The final argument indicates whether
+ * the response is in the extended format or not.  The application should return
+ * true if the message was processed or false if it was not.
+ *
+ * @param clusterId The cluster identifier of this response.  Ver.: always
+ * @param discoveryComplete Indicates whether there are more attributes to be
+ * discovered.  true if there are no more attributes to be discovered.  Ver.:
+ * always
+ * @param buffer Buffer containing the list of attribute identifier/type
+ * records.  Ver.: always
+ * @param bufLen The length in bytes of the list.  Ver.: always
+ * @param extended Indicates whether the response is in the extended format or
+ * not.  Ver.: always
+ */
+bool emberAfDiscoverAttributesResponseCallback(chip::ClusterId clusterId, bool discoveryComplete, uint8_t * buffer, uint16_t bufLen,
+                                               bool extended);
+
+/** @brief Discover Commands Generated Response
+ *
+ * This function is called by the framework when Discover Commands Generated
+ * Response is received.
+ *
+ * @param clusterId The cluster identifier of this response.  Ver.: always
+ * @param manufacturerCode Manufacturer code  Ver.: always
+ * @param discoveryComplete Indicates whether there are more commands to be
+ * discovered.  Ver.: always
+ * @param commandIds Buffer containing the list of command identifiers.  Ver.:
+ * always
+ * @param commandIdCount The length of bytes of the list, whish is the same as
+ * the number of identifiers.  Ver.: always
+ */
+bool emberAfDiscoverCommandsGeneratedResponseCallback(chip::ClusterId clusterId, uint16_t manufacturerCode, bool discoveryComplete,
+                                                      chip::CommandId * commandIds, uint16_t commandIdCount);
+
+/** @brief Discover Commands Received Response
+ *
+ * This function is called by the framework when Discover Commands Received
+ * Response is received.
+ *
+ * @param clusterId The cluster identifier of this response.  Ver.: always
+ * @param manufacturerCode Manufacturer code  Ver.: always
+ * @param discoveryComplete Indicates whether there are more commands to be
+ * discovered.  Ver.: always
+ * @param commandIds Buffer containing the list of command identifiers.  Ver.:
+ * always
+ * @param commandIdCount The length of bytes of the list, whish is the same as
+ * the number of identifiers.  Ver.: always
+ */
+bool emberAfDiscoverCommandsReceivedResponseCallback(chip::ClusterId clusterId, uint16_t manufacturerCode, bool discoveryComplete,
+                                                     chip::CommandId * commandIds, uint16_t commandIdCount);
+
+/** @brief Pre Command Received
+ *
+ * This callback is the second in the Application Framework's message processing
+ * chain. At this point in the processing of incoming over-the-air messages, the
+ * application has determined that the incoming message is a ZCL command. It
+ * parses enough of the message to populate an EmberAfClusterCommand struct. The
+ * Application Framework defines this struct value in a local scope to the
+ * command processing but also makes it available through a global pointer
+ * called emberAfCurrentCommand, in app/framework/util/util.c. When command
+ * processing is complete, this pointer is cleared.
+ *
+ * @param cmd   Ver.: always
+ */
+bool emberAfPreCommandReceivedCallback(EmberAfClusterCommand * cmd);
+
+/** @brief Pre Message Send
+ *
+ * This function is called by the framework when it is about to pass a message
+ * to the stack primitives for sending.   This message may or may not be ZCL,
+ * ZDO, or some other protocol.  This is called prior to
+        any ZigBee
+ * fragmentation that may be done.  If the function returns true it is assumed
+ * the callback has consumed and processed the message.  The callback must also
+ * set the EmberStatus status code to be passed back to the caller.  The
+ * framework will do no further processing on the message.
+        If the
+ * function returns false then it is assumed that the callback has not processed
+ * the mesasge and the framework will continue to process accordingly.
+ *
+ * @param messageStruct The structure containing the parameters of the APS
+ * message to be sent.  Ver.: always
+ * @param status A pointer to the status code value that will be returned to the
+ * caller.  Ver.: always
+ */
+bool emberAfPreMessageSendCallback(EmberAfMessageStruct * messageStruct, EmberStatus * status);
+
+/** @brief Message Sent
+ *
+ * This function is called by the application framework from the message sent
+ * handler, when it is informed by the stack regarding the message sent status.
+ * All of the values passed to the emberMessageSentHandler are passed on to this
+ * callback. This provides an opportunity for the application to verify that its
+ * message has been sent successfully and take the appropriate action. This
+ * callback should return a bool value of true or false. A value of true
+ * indicates that the message sent notification has been handled and should not
+ * be handled by the application framework.
+ *
+ * @param type   Ver.: always
+ * @param indexOrDestination   Ver.: always
+ * @param apsFrame   Ver.: always
+ * @param msgLen   Ver.: always
+ * @param message   Ver.: always
+ * @param status   Ver.: always
+ */
+bool emberAfMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination, EmberApsFrame * apsFrame,
+                                uint16_t msgLen, uint8_t * message, EmberStatus status);
+
+/** @brief Pre Attribute Change
+ *
+ * This function is called by the application framework before it changes an
+ * attribute value.  The value passed into this callback is the value to which
+ * the attribute is to be set by the framework.  The application should return
+ * ::EMBER_ZCL_STATUS_SUCCESS to permit the change or any other ::EmberAfStatus
+ * to reject it.
+ *
+ * @param endpoint   Ver.: always
+ * @param clusterId   Ver.: always
+ * @param attributeId   Ver.: always
+ * @param mask   Ver.: always
+ * @param manufacturerCode   Ver.: always
+ * @param type   Ver.: always
+ * @param size   Ver.: always
+ * @param value   Ver.: always
+ */
+EmberAfStatus emberAfPreAttributeChangeCallback(chip::EndpointId endpoint, chip::ClusterId clusterId, chip::AttributeId attributeId,
+                                                uint8_t mask, uint16_t manufacturerCode, uint8_t type, uint8_t size,
+                                                uint8_t * value);
+
+/** @brief Post Attribute Change
+ *
+ * This function is called by the application framework after it changes an
+ * attribute value. The value passed into this callback is the value to which
+ * the attribute was set by the framework.
+ *
+ * @param endpoint   Ver.: always
+ * @param clusterId   Ver.: always
+ * @param attributeId   Ver.: always
+ * @param mask   Ver.: always
+ * @param manufacturerCode   Ver.: always
+ * @param type   Ver.: always
+ * @param size   Ver.: always
+ * @param value   Ver.: always
+ */
+void emberAfPostAttributeChangeCallback(chip::EndpointId endpoint, chip::ClusterId clusterId, chip::AttributeId attributeId,
+                                        uint8_t mask, uint16_t manufacturerCode, uint8_t type, uint8_t size, uint8_t * value);
+
+/** @brief Read Attributes Response
+ *
+ * This function is called by the application framework when a Read Attributes
+ * Response command is received from an external device.  The application should
+ * return true if the message was processed or false if it was not.
+ *
+ * @param clusterId The cluster identifier of this response.  Ver.: always
+ * @param buffer Buffer containing the list of read attribute status records.
+ * Ver.: always
+ * @param bufLen The length in bytes of the list.  Ver.: always
+ */
+bool emberAfReadAttributesResponseCallback(chip::ClusterId clusterId, uint8_t * buffer, uint16_t bufLen);
+
+/** @brief External Attribute Read
+ *
+ * Like emberAfExternalAttributeWriteCallback above, this function is called
+ * when the framework needs to read an attribute that is not stored within the
+ * Application Framework's data structures.
+        All of the important
+ * information about the attribute itself is passed as a pointer to an
+ * EmberAfAttributeMetadata struct, which is stored within the application and
+ * used to manage the attribute. A complete description of the
+ * EmberAfAttributeMetadata struct is provided in
+ * app/framework/include/af-types.h
+        This function assumes that the
+ * application is able to read the attribute, write it into the passed buffer,
+ * and return immediately. Any attributes that require a state machine for
+ * reading and writing are not really candidates for externalization at the
+ * present time. The Application Framework does not currently include a state
+ * machine for reading or writing attributes that must take place across a
+ * series of application ticks. Attributes that cannot be read in a timely
+ * manner should be stored within the Application Framework and updated
+ * occasionally by the application code from within the
+ * emberAfMainTickCallback.
+        If the application was successfully able to
+ * read the attribute and write it into the passed buffer, it should return a
+ * value of EMBER_ZCL_STATUS_SUCCESS. Ensure that the size of the externally
+ * managed attribute value is smaller than what the buffer can hold. In the case
+ * of a buffer overflow throw an appropriate error such as
+ * EMBER_ZCL_STATUS_INSUFFICIENT_SPACE. Any other return value indicates the
+ * application was not able to read the attribute.
+ *
+ * @param endpoint   Ver.: always
+ * @param clusterId   Ver.: always
+ * @param attributeMetadata   Ver.: always
+ * @param manufacturerCode   Ver.: always
+ * @param buffer   Ver.: always
+ * @param maxReadLength   Ver.: always
+ */
+EmberAfStatus emberAfExternalAttributeReadCallback(chip::EndpointId endpoint, chip::ClusterId clusterId,
+                                                   EmberAfAttributeMetadata * attributeMetadata, uint16_t manufacturerCode,
+                                                   uint8_t * buffer, uint16_t maxReadLength);
+
+/** @brief Write Attributes Response
+ *
+ * This function is called by the application framework when a Write Attributes
+ * Response command is received from an external device.  The application should
+ * return true if the message was processed or false if it was not.
+ *
+ * @param clusterId The cluster identifier of this response.  Ver.: always
+ * @param buffer Buffer containing the list of write attribute status records.
+ * Ver.: always
+ * @param bufLen The length in bytes of the list.  Ver.: always
+ */
+bool emberAfWriteAttributesResponseCallback(chip::ClusterId clusterId, uint8_t * buffer, uint16_t bufLen);
+
+/** @brief External Attribute Write
+ *
+ * This function is called whenever the Application Framework needs to write an
+ * attribute which is not stored within the data structures of the Application
+ * Framework itself. One of the new features in Version 2 is the ability to
+ * store attributes outside the Framework. This is particularly useful for
+ * attributes that do not need to be stored because they can be read off the
+ * hardware when they are needed, or are stored in some central location used by
+ * many modules within the system. In this case, you can indicate that the
+ * attribute is stored externally. When the framework needs to write an external
+ * attribute, it makes a call to this callback.
+        This callback is very
+ * useful for host micros which need to store attributes in persistent memory.
+ * Because each host micro (used with an Ember NCP) has its own type of
+ * persistent memory storage, the Application Framework does not include the
+ * ability to mark attributes as stored in flash the way that it does for Ember
+ * SoCs like the EM35x. On a host micro, any attributes that need to be stored
+ * in persistent memory should be marked as external and accessed through the
+ * external read and write callbacks. Any host code associated with the
+ * persistent storage should be implemented within this callback.
+        All of
+ * the important information about the attribute itself is passed as a pointer
+ * to an EmberAfAttributeMetadata struct, which is stored within the application
+ * and used to manage the attribute. A complete description of the
+ * EmberAfAttributeMetadata struct is provided in
+ * app/framework/include/af-types.h.
+        This function assumes that the
+ * application is able to write the attribute and return immediately. Any
+ * attributes that require a state machine for reading and writing are not
+ * candidates for externalization at the present time. The Application Framework
+ * does not currently include a state machine for reading or writing attributes
+ * that must take place across a series of application ticks. Attributes that
+ * cannot be written immediately should be stored within the Application
+ * Framework and updated occasionally by the application code from within the
+ * emberAfMainTickCallback.
+        If the application was successfully able to
+ * write the attribute, it returns a value of EMBER_ZCL_STATUS_SUCCESS. Any
+ * other return value indicates the application was not able to write the
+ * attribute.
+ *
+ * @param endpoint   Ver.: always
+ * @param clusterId   Ver.: always
+ * @param attributeMetadata   Ver.: always
+ * @param manufacturerCode   Ver.: always
+ * @param buffer   Ver.: always
+ */
+EmberAfStatus emberAfExternalAttributeWriteCallback(chip::EndpointId endpoint, chip::ClusterId clusterId,
+                                                    EmberAfAttributeMetadata * attributeMetadata, uint16_t manufacturerCode,
+                                                    uint8_t * buffer);
+
+/** @brief Report Attributes
+ *
+ * This function is called by the application framework when a Report Attributes
+ * command is received from an external device.  The application should return
+ * true if the message was processed or false if it was not.
+ *
+ * @param clusterId The cluster identifier of this command.  Ver.: always
+ * @param buffer Buffer containing the list of attribute report records.  Ver.:
+ * always
+ * @param bufLen The length in bytes of the list.  Ver.: always
+ */
+bool emberAfReportAttributesCallback(chip::ClusterId clusterId, uint8_t * buffer, uint16_t bufLen);
+
+/** @brief Get Current Time
+ *
+ * This callback is called when device attempts to get current time from the
+ * hardware. If this device has means to retrieve exact time, then this method
+ * should implement it. If the callback can't provide the exact time it should
+ * return 0 to indicate failure. Default action is to return 0, which indicates
+ * that device does not have access to real time.
+ *
+ */
+uint32_t emberAfGetCurrentTimeCallback();
+
+/** @brief Get Endpoint Info
+ *
+ * This function is a callback to an application implemented endpoint that
+ * operates outside the normal application framework.  When the framework wishes
+ * to perform operations with that endpoint it uses this callback to retrieve
+ * the endpoint's information.  If the endpoint exists and the application can
+ * provide data then true shall be returned.  Otherwise the callback must return
+ * false.
+ *
+ * @param endpoint The endpoint to retrieve data for.  Ver.: always
+ * @param returnNetworkIndex The index corresponding to the ZigBee network the
+ * endpoint belongs to.  If not using a multi-network device, 0 must be
+ * returned.  Otherwise on a multi-network device the stack will switch to this
+ * network before sending the message.  Ver.: always
+ * @param returnEndpointInfo A pointer to a data struct that will be written
+ * with information about the endpoint.  Ver.: always
+ */
+bool emberAfGetEndpointInfoCallback(chip::EndpointId endpoint, uint8_t * returnNetworkIndex,
+                                    EmberAfEndpointInfoStruct * returnEndpointInfo);
+
+/** @brief Get Source Route Overhead
+ *
+ * This function is called by the framework to determine the overhead required
+ * in the network frame for source routing to a particular destination.
+ *
+ * @param destination The node id of the destination  Ver.: always
+ */
+uint8_t emberAfGetSourceRouteOverheadCallback(chip::NodeId destination);
+
+/** @brief Registration Abort
+ *
+ * This callback is called when the device should abort the registration
+ * process.
+ *
+ */
+void emberAfRegistrationAbortCallback();
+
+/** @brief Interpan Send Message
+ *
+ * This function will send a raw MAC message with interpan frame format using
+ * the passed parameters.
+ *
+ * @param header Interpan header info  Ver.: always
+ * @param messageLength The length of the message received or to send  Ver.:
+ * always
+ * @param message The message data received or to send.  Ver.: always
+ */
+EmberStatus emberAfInterpanSendMessageCallback(EmberAfInterpanHeader * header, uint16_t messageLength, uint8_t * message);
+
+/** @brief Start Move
+ *
+ * This function is called to initiate the process for a device to move (rejoin)
+ * to a new parent.
+ *
+ */
+bool emberAfStartMoveCallback();
diff --git a/examples/chip-tool/gen/client-command-macro.h b/examples/chip-tool/gen/client-command-macro.h
new file mode 100644
index 0000000..0cdc542
--- /dev/null
+++ b/examples/chip-tool/gen/client-command-macro.h
@@ -0,0 +1,6192 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+// Prevent multiple inclusion
+#pragma once
+
+/** @brief Command description for ReadAttributes
+ *
+ * Command: ReadAttributes
+ * @param attributeIds ATTRIBUTE_ID []
+ * @param attributeIdsLen int
+ */
+#define emberAfFillCommandGlobalReadAttributes(clusterId, attributeIds, attributeIdsLen)                                           \
+    emberAfFillExternalBuffer(mask, clusterId, ZCL_READ_ATTRIBUTES_COMMAND_ID, "b", attributeIds, attributeIdsLen);
+
+/** @brief Command description for ReadAttributesResponse
+ *
+ * Command: ReadAttributesResponse
+ * @param readAttributeStatusRecords ReadAttributeStatusRecord []
+ * @param readAttributeStatusRecordsLen int
+ */
+#define emberAfFillCommandGlobalReadAttributesResponse(clusterId, readAttributeStatusRecords, readAttributeStatusRecordsLen)       \
+    emberAfFillExternalBuffer(mask, clusterId, ZCL_READ_ATTRIBUTES_RESPONSE_COMMAND_ID, "b", readAttributeStatusRecords,           \
+                              readAttributeStatusRecordsLen);
+
+/** @brief Command description for WriteAttributes
+ *
+ * Command: WriteAttributes
+ * @param writeAttributeRecords WriteAttributeRecord []
+ * @param writeAttributeRecordsLen int
+ */
+#define emberAfFillCommandGlobalWriteAttributes(clusterId, writeAttributeRecords, writeAttributeRecordsLen)                        \
+    emberAfFillExternalBuffer(mask, clusterId, ZCL_WRITE_ATTRIBUTES_COMMAND_ID, "b", writeAttributeRecords,                        \
+                              writeAttributeRecordsLen);
+
+/** @brief Command description for WriteAttributesUndivided
+ *
+ * Command: WriteAttributesUndivided
+ * @param writeAttributeRecords WriteAttributeRecord []
+ * @param writeAttributeRecordsLen int
+ */
+#define emberAfFillCommandGlobalWriteAttributesUndivided(clusterId, writeAttributeRecords, writeAttributeRecordsLen)               \
+    emberAfFillExternalBuffer(mask, clusterId, ZCL_WRITE_ATTRIBUTES_UNDIVIDED_COMMAND_ID, "b", writeAttributeRecords,              \
+                              writeAttributeRecordsLen);
+
+/** @brief Command description for WriteAttributesResponse
+ *
+ * Command: WriteAttributesResponse
+ * @param writeAttributeStatusRecords WriteAttributeStatusRecord []
+ * @param writeAttributeStatusRecordsLen int
+ */
+#define emberAfFillCommandGlobalWriteAttributesResponse(clusterId, writeAttributeStatusRecords, writeAttributeStatusRecordsLen)    \
+    emberAfFillExternalBuffer(mask, clusterId, ZCL_WRITE_ATTRIBUTES_RESPONSE_COMMAND_ID, "b", writeAttributeStatusRecords,         \
+                              writeAttributeStatusRecordsLen);
+
+/** @brief Command description for WriteAttributesNoResponse
+ *
+ * Command: WriteAttributesNoResponse
+ * @param writeAttributeRecords WriteAttributeRecord []
+ * @param writeAttributeRecordsLen int
+ */
+#define emberAfFillCommandGlobalWriteAttributesNoResponse(clusterId, writeAttributeRecords, writeAttributeRecordsLen)              \
+    emberAfFillExternalBuffer(mask, clusterId, ZCL_WRITE_ATTRIBUTES_NO_RESPONSE_COMMAND_ID, "b", writeAttributeRecords,            \
+                              writeAttributeRecordsLen);
+
+/** @brief Command description for ConfigureReporting
+ *
+ * Command: ConfigureReporting
+ * @param configureReportingRecords ConfigureReportingRecord []
+ * @param configureReportingRecordsLen int
+ */
+#define emberAfFillCommandGlobalConfigureReporting(clusterId, configureReportingRecords, configureReportingRecordsLen)             \
+    emberAfFillExternalBuffer(mask, clusterId, ZCL_CONFIGURE_REPORTING_COMMAND_ID, "b", configureReportingRecords,                 \
+                              configureReportingRecordsLen);
+
+/** @brief Command description for ConfigureReportingResponse
+ *
+ * Command: ConfigureReportingResponse
+ * @param configureReportingStatusRecords ConfigureReportingStatusRecord []
+ * @param configureReportingStatusRecordsLen int
+ */
+#define emberAfFillCommandGlobalConfigureReportingResponse(clusterId, configureReportingStatusRecords,                             \
+                                                           configureReportingStatusRecordsLen)                                     \
+    emberAfFillExternalBuffer(mask, clusterId, ZCL_CONFIGURE_REPORTING_RESPONSE_COMMAND_ID, "b", configureReportingStatusRecords,  \
+                              configureReportingStatusRecordsLen);
+
+/** @brief Command description for ReadReportingConfiguration
+ *
+ * Command: ReadReportingConfiguration
+ * @param readReportingConfigurationAttributeRecords ReadReportingConfigurationAttributeRecord []
+ * @param readReportingConfigurationAttributeRecordsLen int
+ */
+#define emberAfFillCommandGlobalReadReportingConfiguration(clusterId, readReportingConfigurationAttributeRecords,                  \
+                                                           readReportingConfigurationAttributeRecordsLen)                          \
+    emberAfFillExternalBuffer(mask, clusterId, ZCL_READ_REPORTING_CONFIGURATION_COMMAND_ID, "b",                                   \
+                              readReportingConfigurationAttributeRecords, readReportingConfigurationAttributeRecordsLen);
+
+/** @brief Command description for ReadReportingConfigurationResponse
+ *
+ * Command: ReadReportingConfigurationResponse
+ * @param readReportingConfigurationRecords ReadReportingConfigurationRecord []
+ * @param readReportingConfigurationRecordsLen int
+ */
+#define emberAfFillCommandGlobalReadReportingConfigurationResponse(clusterId, readReportingConfigurationRecords,                   \
+                                                                   readReportingConfigurationRecordsLen)                           \
+    emberAfFillExternalBuffer(mask, clusterId, ZCL_READ_REPORTING_CONFIGURATION_RESPONSE_COMMAND_ID, "b",                          \
+                              readReportingConfigurationRecords, readReportingConfigurationRecordsLen);
+
+/** @brief Command description for ReportAttributes
+ *
+ * Command: ReportAttributes
+ * @param reportAttributeRecords ReportAttributeRecord []
+ * @param reportAttributeRecordsLen int
+ */
+#define emberAfFillCommandGlobalReportAttributes(clusterId, reportAttributeRecords, reportAttributeRecordsLen)                     \
+    emberAfFillExternalBuffer(mask, clusterId, ZCL_REPORT_ATTRIBUTES_COMMAND_ID, "b", reportAttributeRecords,                      \
+                              reportAttributeRecordsLen);
+
+/** @brief Command description for DefaultResponse
+ *
+ * Command: DefaultResponse
+ * @param commandId INT8U
+ * @param status Status
+ */
+#define emberAfFillCommandGlobalDefaultResponse(clusterId, commandId, status)                                                      \
+    emberAfFillExternalBuffer(mask, clusterId, ZCL_DEFAULT_RESPONSE_COMMAND_ID, "uu", commandId, status);
+
+/** @brief Command description for DiscoverAttributes
+ *
+ * Command: DiscoverAttributes
+ * @param startId ATTRIBUTE_ID
+ * @param maxAttributeIds INT8U
+ */
+#define emberAfFillCommandGlobalDiscoverAttributes(clusterId, startId, maxAttributeIds)                                            \
+    emberAfFillExternalBuffer(mask, clusterId, ZCL_DISCOVER_ATTRIBUTES_COMMAND_ID, "uu", startId, maxAttributeIds);
+
+/** @brief Command description for DiscoverAttributesResponse
+ *
+ * Command: DiscoverAttributesResponse
+ * @param discoveryComplete INT8U
+ * @param discoverAttributesInfoRecords DiscoverAttributesInfoRecord []
+ * @param discoverAttributesInfoRecordsLen int
+ */
+#define emberAfFillCommandGlobalDiscoverAttributesResponse(clusterId, discoveryComplete, discoverAttributesInfoRecords,            \
+                                                           discoverAttributesInfoRecordsLen)                                       \
+    emberAfFillExternalBuffer(mask, clusterId, ZCL_DISCOVER_ATTRIBUTES_RESPONSE_COMMAND_ID, "ub", discoveryComplete,               \
+                              discoverAttributesInfoRecords, discoverAttributesInfoRecordsLen);
+
+/** @brief Command description for ReadAttributesStructured
+ *
+ * Command: ReadAttributesStructured
+ * @param readStructuredAttributeRecords ReadStructuredAttributeRecord []
+ * @param readStructuredAttributeRecordsLen int
+ */
+#define emberAfFillCommandGlobalReadAttributesStructured(clusterId, readStructuredAttributeRecords,                                \
+                                                         readStructuredAttributeRecordsLen)                                        \
+    emberAfFillExternalBuffer(mask, clusterId, ZCL_READ_ATTRIBUTES_STRUCTURED_COMMAND_ID, "b", readStructuredAttributeRecords,     \
+                              readStructuredAttributeRecordsLen);
+
+/** @brief Command description for WriteAttributesStructured
+ *
+ * Command: WriteAttributesStructured
+ * @param writeStructuredAttributeRecords WriteStructuredAttributeRecord []
+ * @param writeStructuredAttributeRecordsLen int
+ */
+#define emberAfFillCommandGlobalWriteAttributesStructured(clusterId, writeStructuredAttributeRecords,                              \
+                                                          writeStructuredAttributeRecordsLen)                                      \
+    emberAfFillExternalBuffer(mask, clusterId, ZCL_WRITE_ATTRIBUTES_STRUCTURED_COMMAND_ID, "b", writeStructuredAttributeRecords,   \
+                              writeStructuredAttributeRecordsLen);
+
+/** @brief Command description for WriteAttributesStructuredResponse
+ *
+ * Command: WriteAttributesStructuredResponse
+ * @param writeStructuredAttributeStatusRecords WriteStructuredAttributeStatusRecord []
+ * @param writeStructuredAttributeStatusRecordsLen int
+ */
+#define emberAfFillCommandGlobalWriteAttributesStructuredResponse(clusterId, writeStructuredAttributeStatusRecords,                \
+                                                                  writeStructuredAttributeStatusRecordsLen)                        \
+    emberAfFillExternalBuffer(mask, clusterId, ZCL_WRITE_ATTRIBUTES_STRUCTURED_RESPONSE_COMMAND_ID, "b",                           \
+                              writeStructuredAttributeStatusRecords, writeStructuredAttributeStatusRecordsLen);
+
+/** @brief Command description for DiscoverCommandsReceived
+ *
+ * Command: DiscoverCommandsReceived
+ * @param startCommandId INT8U
+ * @param maxCommandIds INT8U
+ */
+#define emberAfFillCommandGlobalDiscoverCommandsReceived(clusterId, startCommandId, maxCommandIds)                                 \
+    emberAfFillExternalBuffer(mask, clusterId, ZCL_DISCOVER_COMMANDS_RECEIVED_COMMAND_ID, "uu", startCommandId, maxCommandIds);
+
+/** @brief Command description for DiscoverCommandsReceivedResponse
+ *
+ * Command: DiscoverCommandsReceivedResponse
+ * @param discoveryComplete INT8U
+ * @param commandIds INT8U []
+ * @param commandIdsLen int
+ */
+#define emberAfFillCommandGlobalDiscoverCommandsReceivedResponse(clusterId, discoveryComplete, commandIds, commandIdsLen)          \
+    emberAfFillExternalBuffer(mask, clusterId, ZCL_DISCOVER_COMMANDS_RECEIVED_RESPONSE_COMMAND_ID, "ub", discoveryComplete,        \
+                              commandIds, commandIdsLen);
+
+/** @brief Command description for DiscoverCommandsGenerated
+ *
+ * Command: DiscoverCommandsGenerated
+ * @param startCommandId INT8U
+ * @param maxCommandIds INT8U
+ */
+#define emberAfFillCommandGlobalDiscoverCommandsGenerated(clusterId, startCommandId, maxCommandIds)                                \
+    emberAfFillExternalBuffer(mask, clusterId, ZCL_DISCOVER_COMMANDS_GENERATED_COMMAND_ID, "uu", startCommandId, maxCommandIds);
+
+/** @brief Command description for DiscoverCommandsGeneratedResponse
+ *
+ * Command: DiscoverCommandsGeneratedResponse
+ * @param discoveryComplete INT8U
+ * @param commandIds INT8U []
+ * @param commandIdsLen int
+ */
+#define emberAfFillCommandGlobalDiscoverCommandsGeneratedResponse(clusterId, discoveryComplete, commandIds, commandIdsLen)         \
+    emberAfFillExternalBuffer(mask, clusterId, ZCL_DISCOVER_COMMANDS_GENERATED_RESPONSE_COMMAND_ID, "ub", discoveryComplete,       \
+                              commandIds, commandIdsLen);
+
+/** @brief Command description for DiscoverAttributesExtended
+ *
+ * Command: DiscoverAttributesExtended
+ * @param startId ATTRIBUTE_ID
+ * @param maxAttributeIds INT8U
+ */
+#define emberAfFillCommandGlobalDiscoverAttributesExtended(clusterId, startId, maxAttributeIds)                                    \
+    emberAfFillExternalBuffer(mask, clusterId, ZCL_DISCOVER_ATTRIBUTES_EXTENDED_COMMAND_ID, "uu", startId, maxAttributeIds);
+
+/** @brief Command description for DiscoverAttributesExtendedResponse
+ *
+ * Command: DiscoverAttributesExtendedResponse
+ * @param discoveryComplete INT8U
+ * @param extendedDiscoverAttributesInfoRecords ExtendedDiscoverAttributesInfoRecord []
+ * @param extendedDiscoverAttributesInfoRecordsLen int
+ */
+#define emberAfFillCommandGlobalDiscoverAttributesExtendedResponse(                                                                \
+    clusterId, discoveryComplete, extendedDiscoverAttributesInfoRecords, extendedDiscoverAttributesInfoRecordsLen)                 \
+    emberAfFillExternalBuffer(mask, clusterId, ZCL_DISCOVER_ATTRIBUTES_EXTENDED_RESPONSE_COMMAND_ID, "ub", discoveryComplete,      \
+                              extendedDiscoverAttributesInfoRecords, extendedDiscoverAttributesInfoRecordsLen);
+
+/** @brief Command description for ResetToFactoryDefaults
+ *
+ * Command: ResetToFactoryDefaults
+ */
+#define emberAfFillCommandBasicClusterResetToFactoryDefaults()                                                                     \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_RESET_TO_FACTORY_DEFAULTS_COMMAND_ID, "", );
+
+/** @brief Command description for Identify
+ *
+ * Command: Identify
+ * @param identifyTime INT16U
+ * @param timeout INT16U
+ */
+#define emberAfFillCommandIdentifyClusterIdentify(identifyTime, timeout)                                                           \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_IDENTIFY_COMMAND_ID, "uu", identifyTime, timeout);
+
+/** @brief Command description for IdentifyQuery
+ *
+ * Command: IdentifyQuery
+ */
+#define emberAfFillCommandIdentifyClusterIdentifyQuery()                                                                           \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_IDENTIFY_QUERY_COMMAND_ID, "", );
+
+/** @brief Command description for EZModeInvoke
+ *
+ * Command: EZModeInvoke
+ * @param action BITMAP8
+ */
+#define emberAfFillCommandIdentifyClusterEZModeInvoke(action)                                                                      \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_EZ_MODE_INVOKE_COMMAND_ID, "u", action);
+
+/** @brief Command description for UpdateCommissionState
+ *
+ * Command: UpdateCommissionState
+ * @param action ENUM8
+ * @param commissionStateMask BITMAP8
+ */
+#define emberAfFillCommandIdentifyClusterUpdateCommissionState(action, commissionStateMask)                                        \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_UPDATE_COMMISSION_STATE_COMMAND_ID, "uu", action, commissionStateMask);
+
+/** @brief Command description for TriggerEffect
+ *
+ * Command: TriggerEffect
+ * @param effectId IdentifyEffectIdentifier
+ * @param effectVariant IdentifyEffectVariant
+ */
+#define emberAfFillCommandIdentifyClusterTriggerEffect(effectId, effectVariant)                                                    \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_TRIGGER_EFFECT_COMMAND_ID, "uu", effectId, effectVariant);
+
+/** @brief Command description for AddGroup
+ *
+ * Command: AddGroup
+ * @param groupId INT16U
+ * @param status Status
+ * @param groupName CHAR_STRING
+ * @param groupId INT16U
+ */
+#define emberAfFillCommandGroupsClusterAddGroup(groupId, status, groupName, groupId)                                               \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_ADD_GROUP_COMMAND_ID, "uuuu", groupId, status, groupName, groupId);
+
+/** @brief Command description for ViewGroup
+ *
+ * Command: ViewGroup
+ * @param groupId INT16U
+ * @param status Status
+ * @param groupId INT16U
+ * @param groupName CHAR_STRING
+ */
+#define emberAfFillCommandGroupsClusterViewGroup(groupId, status, groupId, groupName)                                              \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_VIEW_GROUP_COMMAND_ID, "uuuu", groupId, status, groupId, groupName);
+
+/** @brief Command description for GetGroupMembership
+ *
+ * Command: GetGroupMembership
+ * @param groupCount INT8U
+ * @param capacity INT8U
+ * @param groupList INT16U []
+ * @param groupListLen int
+ * @param groupCount INT8U
+ * @param groupList INT16U []
+ * @param groupListLen int
+ */
+#define emberAfFillCommandGroupsClusterGetGroupMembership(groupCount, capacity, groupList, groupListLen, groupCount, groupList,    \
+                                                          groupListLen)                                                            \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_GET_GROUP_MEMBERSHIP_COMMAND_ID, "uubub", groupCount, capacity, groupList, groupListLen,         \
+                              groupCount, groupList, groupListLen);
+
+/** @brief Command description for RemoveGroup
+ *
+ * Command: RemoveGroup
+ * @param groupId INT16U
+ * @param status Status
+ * @param groupId INT16U
+ */
+#define emberAfFillCommandGroupsClusterRemoveGroup(groupId, status, groupId)                                                       \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_REMOVE_GROUP_COMMAND_ID, "uuu", groupId, status, groupId);
+
+/** @brief Command description for RemoveAllGroups
+ *
+ * Command: RemoveAllGroups
+ */
+#define emberAfFillCommandGroupsClusterRemoveAllGroups()                                                                           \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_REMOVE_ALL_GROUPS_COMMAND_ID, "", );
+
+/** @brief Command description for AddGroupIfIdentifying
+ *
+ * Command: AddGroupIfIdentifying
+ * @param groupId INT16U
+ * @param groupName CHAR_STRING
+ */
+#define emberAfFillCommandGroupsClusterAddGroupIfIdentifying(groupId, groupName)                                                   \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_ADD_GROUP_IF_IDENTIFYING_COMMAND_ID, "uu", groupId, groupName);
+
+/** @brief Command description for AddScene
+ *
+ * Command: AddScene
+ * @param groupId INT16U
+ * @param status Status
+ * @param sceneId INT8U
+ * @param groupId INT16U
+ * @param transitionTime INT16U
+ * @param sceneId INT8U
+ * @param sceneName CHAR_STRING
+ * @param extensionFieldSets SceneExtensionFieldSet []
+ * @param extensionFieldSetsLen int
+ */
+#define emberAfFillCommandScenesClusterAddScene(groupId, status, sceneId, groupId, transitionTime, sceneId, sceneName,             \
+                                                extensionFieldSets, extensionFieldSetsLen)                                         \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_ADD_SCENE_COMMAND_ID, "uuuuuuub", groupId, status, sceneId, groupId, transitionTime, sceneId,    \
+                              sceneName, extensionFieldSets, extensionFieldSetsLen);
+
+/** @brief Command description for ViewScene
+ *
+ * Command: ViewScene
+ * @param groupId INT16U
+ * @param status Status
+ * @param sceneId INT8U
+ * @param groupId INT16U
+ * @param sceneId INT8U
+ * @param transitionTime INT16U
+ * @param sceneName CHAR_STRING
+ * @param extensionFieldSets SceneExtensionFieldSet []
+ * @param extensionFieldSetsLen int
+ */
+#define emberAfFillCommandScenesClusterViewScene(groupId, status, sceneId, groupId, sceneId, transitionTime, sceneName,            \
+                                                 extensionFieldSets, extensionFieldSetsLen)                                        \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_VIEW_SCENE_COMMAND_ID, "uuuuuuub", groupId, status, sceneId, groupId, sceneId, transitionTime,   \
+                              sceneName, extensionFieldSets, extensionFieldSetsLen);
+
+/** @brief Command description for RemoveScene
+ *
+ * Command: RemoveScene
+ * @param groupId INT16U
+ * @param status Status
+ * @param sceneId INT8U
+ * @param groupId INT16U
+ * @param sceneId INT8U
+ */
+#define emberAfFillCommandScenesClusterRemoveScene(groupId, status, sceneId, groupId, sceneId)                                     \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_REMOVE_SCENE_COMMAND_ID, "uuuuu", groupId, status, sceneId, groupId, sceneId);
+
+/** @brief Command description for RemoveAllScenes
+ *
+ * Command: RemoveAllScenes
+ * @param groupId INT16U
+ * @param status Status
+ * @param groupId INT16U
+ */
+#define emberAfFillCommandScenesClusterRemoveAllScenes(groupId, status, groupId)                                                   \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_REMOVE_ALL_SCENES_COMMAND_ID, "uuu", groupId, status, groupId);
+
+/** @brief Command description for StoreScene
+ *
+ * Command: StoreScene
+ * @param groupId INT16U
+ * @param status Status
+ * @param sceneId INT8U
+ * @param groupId INT16U
+ * @param sceneId INT8U
+ */
+#define emberAfFillCommandScenesClusterStoreScene(groupId, status, sceneId, groupId, sceneId)                                      \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_STORE_SCENE_COMMAND_ID, "uuuuu", groupId, status, sceneId, groupId, sceneId);
+
+/** @brief Command description for RecallScene
+ *
+ * Command: RecallScene
+ * @param groupId INT16U
+ * @param sceneId INT8U
+ * @param transitionTime INT16U
+ */
+#define emberAfFillCommandScenesClusterRecallScene(groupId, sceneId, transitionTime)                                               \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_RECALL_SCENE_COMMAND_ID, "uuu", groupId, sceneId, transitionTime);
+
+/** @brief Command description for GetSceneMembership
+ *
+ * Command: GetSceneMembership
+ * @param groupId INT16U
+ * @param status Status
+ * @param capacity INT8U
+ * @param groupId INT16U
+ * @param sceneCount INT8U
+ * @param sceneList INT8U []
+ * @param sceneListLen int
+ */
+#define emberAfFillCommandScenesClusterGetSceneMembership(groupId, status, capacity, groupId, sceneCount, sceneList, sceneListLen) \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_GET_SCENE_MEMBERSHIP_COMMAND_ID, "uuuuub", groupId, status, capacity, groupId, sceneCount,       \
+                              sceneList, sceneListLen);
+
+/** @brief Command description for EnhancedAddScene
+ *
+ * Command: EnhancedAddScene
+ * @param groupId INT16U
+ * @param status Status
+ * @param sceneId INT8U
+ * @param groupId INT16U
+ * @param transitionTime INT16U
+ * @param sceneId INT8U
+ * @param sceneName CHAR_STRING
+ * @param extensionFieldSets SceneExtensionFieldSet []
+ * @param extensionFieldSetsLen int
+ */
+#define emberAfFillCommandScenesClusterEnhancedAddScene(groupId, status, sceneId, groupId, transitionTime, sceneId, sceneName,     \
+                                                        extensionFieldSets, extensionFieldSetsLen)                                 \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_ENHANCED_ADD_SCENE_COMMAND_ID, "uuuuuuub", groupId, status, sceneId, groupId, transitionTime,    \
+                              sceneId, sceneName, extensionFieldSets, extensionFieldSetsLen);
+
+/** @brief Command description for EnhancedViewScene
+ *
+ * Command: EnhancedViewScene
+ * @param groupId INT16U
+ * @param status Status
+ * @param sceneId INT8U
+ * @param groupId INT16U
+ * @param sceneId INT8U
+ * @param transitionTime INT16U
+ * @param sceneName CHAR_STRING
+ * @param extensionFieldSets SceneExtensionFieldSet []
+ * @param extensionFieldSetsLen int
+ */
+#define emberAfFillCommandScenesClusterEnhancedViewScene(groupId, status, sceneId, groupId, sceneId, transitionTime, sceneName,    \
+                                                         extensionFieldSets, extensionFieldSetsLen)                                \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_ENHANCED_VIEW_SCENE_COMMAND_ID, "uuuuuuub", groupId, status, sceneId, groupId, sceneId,          \
+                              transitionTime, sceneName, extensionFieldSets, extensionFieldSetsLen);
+
+/** @brief Command description for CopyScene
+ *
+ * Command: CopyScene
+ * @param mode ScenesCopyMode
+ * @param status Status
+ * @param groupIdFrom INT16U
+ * @param groupIdFrom INT16U
+ * @param sceneIdFrom INT8U
+ * @param sceneIdFrom INT8U
+ * @param groupIdTo INT16U
+ * @param sceneIdTo INT8U
+ */
+#define emberAfFillCommandScenesClusterCopyScene(mode, status, groupIdFrom, groupIdFrom, sceneIdFrom, sceneIdFrom, groupIdTo,      \
+                                                 sceneIdTo)                                                                        \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_COPY_SCENE_COMMAND_ID, "uuuuuuuu", mode, status, groupIdFrom, groupIdFrom, sceneIdFrom,          \
+                              sceneIdFrom, groupIdTo, sceneIdTo);
+
+/** @brief Command description for Off
+ *
+ * Command: Off
+ */
+#define emberAfFillCommandOn                                                                                                       \
+    /                                                                                                                              \
+        offClusterOff() emberAfFillExternalBuffer(mask,                                                                            \
+                                                                                                                                   \
+                                                  ZCL_OFF_COMMAND_ID, "", );
+
+/** @brief Command description for On
+ *
+ * Command: On
+ */
+#define emberAfFillCommandOn                                                                                                       \
+    /                                                                                                                              \
+        offClusterOn() emberAfFillExternalBuffer(mask,                                                                             \
+                                                                                                                                   \
+                                                 ZCL_ON_COMMAND_ID, "", );
+
+/** @brief Command description for Toggle
+ *
+ * Command: Toggle
+ */
+#define emberAfFillCommandOn                                                                                                       \
+    /                                                                                                                              \
+        offClusterToggle() emberAfFillExternalBuffer(mask,                                                                         \
+                                                                                                                                   \
+                                                     ZCL_TOGGLE_COMMAND_ID, "", );
+
+/** @brief Command description for OffWithEffect
+ *
+ * Command: OffWithEffect
+ * @param effectId OnOffEffectIdentifier
+ * @param effectVariant ENUM8
+ */
+#define emberAfFillCommandOn                                                                                                       \
+    /                                                                                                                              \
+        offClusterOffWithEffect(effectId, effectVariant)                                                                           \
+            emberAfFillExternalBuffer(mask,                                                                                        \
+                                                                                                                                   \
+                                      ZCL_OFF_WITH_EFFECT_COMMAND_ID, "uu", effectId, effectVariant);
+
+/** @brief Command description for OnWithRecallGlobalScene
+ *
+ * Command: OnWithRecallGlobalScene
+ */
+#define emberAfFillCommandOn                                                                                                       \
+    /                                                                                                                              \
+        offClusterOnWithRecallGlobalScene() emberAfFillExternalBuffer(mask,                                                        \
+                                                                                                                                   \
+                                                                      ZCL_ON_WITH_RECALL_GLOBAL_SCENE_COMMAND_ID, "", );
+
+/** @brief Command description for OnWithTimedOff
+ *
+ * Command: OnWithTimedOff
+ * @param onOffControl OnOffControl
+ * @param onTime INT16U
+ * @param offWaitTime INT16U
+ */
+#define emberAfFillCommandOn                                                                                                       \
+    /                                                                                                                              \
+        offClusterOnWithTimedOff(onOffControl, onTime, offWaitTime)                                                                \
+            emberAfFillExternalBuffer(mask,                                                                                        \
+                                                                                                                                   \
+                                      ZCL_ON_WITH_TIMED_OFF_COMMAND_ID, "uuu", onOffControl, onTime, offWaitTime);
+
+/** @brief Command description for MoveToLevel
+ *
+ * Command: MoveToLevel
+ * @param level INT8U
+ * @param transitionTime INT16U
+ * @param optionMask BITMAP8
+ * @param optionOverride BITMAP8
+ */
+#define emberAfFillCommandLevel                                                                                                    \
+    ControlClusterMoveToLevel(level, transitionTime, optionMask, optionOverride)                                                   \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_MOVE_TO_LEVEL_COMMAND_ID, "uuuu", level, transitionTime, optionMask, optionOverride);
+
+/** @brief Command description for Move
+ *
+ * Command: Move
+ * @param moveMode MoveMode
+ * @param rate INT8U
+ * @param optionMask BITMAP8
+ * @param optionOverride BITMAP8
+ */
+#define emberAfFillCommandLevel                                                                                                    \
+    ControlClusterMove(moveMode, rate, optionMask, optionOverride)                                                                 \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_MOVE_COMMAND_ID, "uuuu", moveMode, rate, optionMask, optionOverride);
+
+/** @brief Command description for Step
+ *
+ * Command: Step
+ * @param stepMode StepMode
+ * @param stepSize INT8U
+ * @param transitionTime INT16U
+ * @param optionMask BITMAP8
+ * @param optionOverride BITMAP8
+ */
+#define emberAfFillCommandLevel                                                                                                    \
+    ControlClusterStep(stepMode, stepSize, transitionTime, optionMask, optionOverride)                                             \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_STEP_COMMAND_ID, "uuuuu", stepMode, stepSize, transitionTime, optionMask, optionOverride);
+
+/** @brief Command description for Stop
+ *
+ * Command: Stop
+ * @param optionMask BITMAP8
+ * @param optionOverride BITMAP8
+ */
+#define emberAfFillCommandLevel                                                                                                    \
+    ControlClusterStop(optionMask, optionOverride)                                                                                 \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_STOP_COMMAND_ID, "uu", optionMask, optionOverride);
+
+/** @brief Command description for MoveToLevelWithOnOff
+ *
+ * Command: MoveToLevelWithOnOff
+ * @param level INT8U
+ * @param transitionTime INT16U
+ */
+#define emberAfFillCommandLevel                                                                                                    \
+    ControlClusterMoveToLevelWithOnOff(level, transitionTime)                                                                      \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_MOVE_TO_LEVEL_WITH_ON_OFF_COMMAND_ID, "uu", level, transitionTime);
+
+/** @brief Command description for MoveWithOnOff
+ *
+ * Command: MoveWithOnOff
+ * @param moveMode MoveMode
+ * @param rate INT8U
+ */
+#define emberAfFillCommandLevel                                                                                                    \
+    ControlClusterMoveWithOnOff(moveMode, rate) emberAfFillExternalBuffer(mask,                                                    \
+                                                                                                                                   \
+                                                                          ZCL_MOVE_WITH_ON_OFF_COMMAND_ID, "uu", moveMode, rate);
+
+/** @brief Command description for StepWithOnOff
+ *
+ * Command: StepWithOnOff
+ * @param stepMode StepMode
+ * @param stepSize INT8U
+ * @param transitionTime INT16U
+ */
+#define emberAfFillCommandLevel                                                                                                    \
+    ControlClusterStepWithOnOff(stepMode, stepSize, transitionTime)                                                                \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_STEP_WITH_ON_OFF_COMMAND_ID, "uuu", stepMode, stepSize, transitionTime);
+
+/** @brief Command description for StopWithOnOff
+ *
+ * Command: StopWithOnOff
+ */
+#define emberAfFillCommandLevel                                                                                                    \
+    ControlClusterStopWithOnOff() emberAfFillExternalBuffer(mask,                                                                  \
+                                                                                                                                   \
+                                                            ZCL_STOP_WITH_ON_OFF_COMMAND_ID, "", );
+
+/** @brief Command description for ResetAlarm
+ *
+ * Command: ResetAlarm
+ * @param alarmCode ENUM8
+ * @param alarmCode ENUM8
+ * @param clusterId CLUSTER_ID
+ * @param clusterId CLUSTER_ID
+ */
+#define emberAfFillCommandAlarmsClusterResetAlarm(alarmCode, alarmCode, clusterId, clusterId)                                      \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_RESET_ALARM_COMMAND_ID, "uuuu", alarmCode, alarmCode, clusterId, clusterId);
+
+/** @brief Command description for ResetAllAlarms
+ *
+ * Command: ResetAllAlarms
+ * @param status Status
+ * @param alarmCode ENUM8
+ * @param clusterId CLUSTER_ID
+ * @param timeStamp INT32U
+ */
+#define emberAfFillCommandAlarmsClusterResetAllAlarms(status, alarmCode, clusterId, timeStamp)                                     \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_RESET_ALL_ALARMS_COMMAND_ID, "uuuu", status, alarmCode, clusterId, timeStamp);
+
+/** @brief Command description for GetAlarm
+ *
+ * Command: GetAlarm
+ */
+#define emberAfFillCommandAlarmsClusterGetAlarm()                                                                                  \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_GET_ALARM_COMMAND_ID, "", );
+
+/** @brief Command description for ResetAlarmLog
+ *
+ * Command: ResetAlarmLog
+ */
+#define emberAfFillCommandAlarmsClusterResetAlarmLog()                                                                             \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_RESET_ALARM_LOG_COMMAND_ID, "", );
+
+/** @brief Command description for SetAbsoluteLocation
+ *
+ * Command: SetAbsoluteLocation
+ * @param coordinate1 INT16S
+ * @param status Status
+ * @param coordinate2 INT16S
+ * @param power INT16S
+ * @param coordinate3 INT16S
+ * @param pathLossExponent INT16U
+ * @param power INT16S
+ * @param calculationPeriod INT16U
+ * @param pathLossExponent INT16U
+ * @param numberRssiMeasurements INT8U
+ * @param reportingPeriod INT16U
+ */
+#define emberAfFillCommandRSSI                                                                                                     \
+    LocationClusterSetAbsoluteLocation(coordinate1, status, coordinate2, power, coordinate3, pathLossExponent, power,              \
+                                       calculationPeriod, pathLossExponent, numberRssiMeasurements, reportingPeriod)               \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_SET_ABSOLUTE_LOCATION_COMMAND_ID, "uuuuuuuuuuu", coordinate1, status, coordinate2, power,    \
+                                  coordinate3, pathLossExponent, power, calculationPeriod, pathLossExponent,                       \
+                                  numberRssiMeasurements, reportingPeriod);
+
+/** @brief Command description for SetDeviceConfiguration
+ *
+ * Command: SetDeviceConfiguration
+ * @param power INT16S
+ * @param status Status
+ * @param pathLossExponent INT16U
+ * @param locationType LocationType
+ * @param calculationPeriod INT16U
+ * @param coordinate1 INT16S
+ * @param numberRssiMeasurements INT8U
+ * @param coordinate2 INT16S
+ * @param reportingPeriod INT16U
+ * @param coordinate3 INT16S
+ * @param power INT16S
+ * @param pathLossExponent INT16U
+ * @param locationMethod LocationMethod
+ * @param qualityMeasure INT8U
+ * @param locationAge INT16U
+ */
+#define emberAfFillCommandRSSI                                                                                                     \
+    LocationClusterSetDeviceConfiguration(power, status, pathLossExponent, locationType, calculationPeriod, coordinate1,           \
+                                          numberRssiMeasurements, coordinate2, reportingPeriod, coordinate3, power,                \
+                                          pathLossExponent, locationMethod, qualityMeasure, locationAge)                           \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_SET_DEVICE_CONFIGURATION_COMMAND_ID, "uuuuuuuuuuuuuuu", power, status, pathLossExponent,     \
+                                  locationType, calculationPeriod, coordinate1, numberRssiMeasurements, coordinate2,               \
+                                  reportingPeriod, coordinate3, power, pathLossExponent, locationMethod, qualityMeasure,           \
+                                  locationAge);
+
+/** @brief Command description for GetDeviceConfiguration
+ *
+ * Command: GetDeviceConfiguration
+ * @param targetAddress IEEE_ADDRESS
+ * @param locationType LocationType
+ * @param coordinate1 INT16S
+ * @param coordinate2 INT16S
+ * @param coordinate3 INT16S
+ * @param power INT16S
+ * @param pathLossExponent INT16U
+ * @param locationMethod LocationMethod
+ * @param qualityMeasure INT8U
+ * @param locationAge INT16U
+ */
+#define emberAfFillCommandRSSI                                                                                                     \
+    LocationClusterGetDeviceConfiguration(targetAddress, locationType, coordinate1, coordinate2, coordinate3, power,               \
+                                          pathLossExponent, locationMethod, qualityMeasure, locationAge)                           \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_DEVICE_CONFIGURATION_COMMAND_ID, "uuuuuuuuuu", targetAddress, locationType, coordinate1, \
+                                  coordinate2, coordinate3, power, pathLossExponent, locationMethod, qualityMeasure, locationAge);
+
+/** @brief Command description for GetLocationData
+ *
+ * Command: GetLocationData
+ * @param flags GetLocationDataFlags
+ * @param locationType LocationType
+ * @param numberResponses INT8U
+ * @param coordinate1 INT16S
+ * @param targetAddress IEEE_ADDRESS
+ * @param coordinate2 INT16S
+ * @param coordinate3 INT16S
+ * @param qualityMeasure INT8U
+ * @param locationAge INT16U
+ */
+#define emberAfFillCommandRSSI                                                                                                     \
+    LocationClusterGetLocationData(flags, locationType, numberResponses, coordinate1, targetAddress, coordinate2, coordinate3,     \
+                                   qualityMeasure, locationAge)                                                                    \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_LOCATION_DATA_COMMAND_ID, "uuuuuuuuu", flags, locationType, numberResponses,             \
+                                  coordinate1, targetAddress, coordinate2, coordinate3, qualityMeasure, locationAge);
+
+/** @brief Command description for RssiResponse
+ *
+ * Command: RssiResponse
+ * @param replyingDevice IEEE_ADDRESS
+ * @param locationType LocationType
+ * @param coordinate1 INT16S
+ * @param coordinate2 INT16S
+ * @param coordinate3 INT16S
+ * @param rssi INT8S
+ * @param numberRssiMeasurements INT8U
+ */
+#define emberAfFillCommandRSSI                                                                                                     \
+    LocationClusterRssiResponse(replyingDevice, locationType, coordinate1, coordinate2, coordinate3, rssi, numberRssiMeasurements) \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_RSSI_RESPONSE_COMMAND_ID, "uuuuuuu", replyingDevice, locationType, coordinate1, coordinate2, \
+                                  coordinate3, rssi, numberRssiMeasurements);
+
+/** @brief Command description for RssiRequest
+ *
+ * Command: RssiRequest
+ * @param targetAddress IEEE_ADDRESS
+ * @param numberRssiMeasurements INT8U
+ * @param calculationPeriod INT16U
+ */
+#define emberAfFillCommandRSSI                                                                                                     \
+    LocationClusterRssiRequest(targetAddress, numberRssiMeasurements, calculationPeriod)                                           \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_RSSI_REQUEST_COMMAND_ID, "uuu", targetAddress, numberRssiMeasurements, calculationPeriod);
+
+/** @brief Command description for AnchorNodeAnnounce
+ *
+ * Command: AnchorNodeAnnounce
+ * @param anchorNodeIeeeAddress IEEE_ADDRESS
+ * @param measuringDevice IEEE_ADDRESS
+ * @param coordinate1 INT16S
+ * @param neighbors INT8U
+ * @param coordinate2 INT16S
+ * @param neighborsInfo NeighborInfo []
+ * @param neighborsInfoLen int
+ * @param coordinate3 INT16S
+ */
+#define emberAfFillCommandRSSI                                                                                                     \
+    LocationClusterAnchorNodeAnnounce(anchorNodeIeeeAddress, measuringDevice, coordinate1, neighbors, coordinate2, neighborsInfo,  \
+                                      neighborsInfoLen, coordinate3)                                                               \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_ANCHOR_NODE_ANNOUNCE_COMMAND_ID, "uuuuubu", anchorNodeIeeeAddress, measuringDevice,          \
+                                  coordinate1, neighbors, coordinate2, neighborsInfo, neighborsInfoLen, coordinate3);
+
+/** @brief Command description for RequestOwnLocation
+ *
+ * Command: RequestOwnLocation
+ * @param blindNode IEEE_ADDRESS
+ */
+#define emberAfFillCommandRSSI                                                                                                     \
+    LocationClusterRequestOwnLocation(blindNode) emberAfFillExternalBuffer(mask,                                                   \
+                                                                                                                                   \
+                                                                           ZCL_REQUEST_OWN_LOCATION_COMMAND_ID, "u", blindNode);
+
+/** @brief Command description for RestartDevice
+ *
+ * Command: RestartDevice
+ * @param options RestartOptions
+ * @param status ENUM8
+ * @param delay INT8U
+ * @param jitter INT8U
+ */
+#define emberAfFillCommandCommissioningClusterRestartDevice(options, status, delay, jitter)                                        \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_RESTART_DEVICE_COMMAND_ID, "uuuu", options, status, delay, jitter);
+
+/** @brief Command description for SaveStartupParameters
+ *
+ * Command: SaveStartupParameters
+ * @param options BITMAP8
+ * @param status ENUM8
+ * @param index INT8U
+ */
+#define emberAfFillCommandCommissioningClusterSaveStartupParameters(options, status, index)                                        \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_SAVE_STARTUP_PARAMETERS_COMMAND_ID, "uuu", options, status, index);
+
+/** @brief Command description for RestoreStartupParameters
+ *
+ * Command: RestoreStartupParameters
+ * @param options BITMAP8
+ * @param status ENUM8
+ * @param index INT8U
+ */
+#define emberAfFillCommandCommissioningClusterRestoreStartupParameters(options, status, index)                                     \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_RESTORE_STARTUP_PARAMETERS_COMMAND_ID, "uuu", options, status, index);
+
+/** @brief Command description for ResetStartupParameters
+ *
+ * Command: ResetStartupParameters
+ * @param options ResetOptions
+ * @param status ENUM8
+ * @param index INT8U
+ */
+#define emberAfFillCommandCommissioningClusterResetStartupParameters(options, status, index)                                       \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_RESET_STARTUP_PARAMETERS_COMMAND_ID, "uuu", options, status, index);
+
+/** @brief Command description for TransferPartitionedFrame
+ *
+ * Command: TransferPartitionedFrame
+ * @param fragmentationOptions BITMAP8
+ * @param ackOptions BITMAP8
+ * @param partitionedIndicatorAndFrame INT8U []
+ * @param partitionedIndicatorAndFrameLen int
+ * @param firstFrameIdAndNackList INT8U []
+ * @param firstFrameIdAndNackListLen int
+ */
+#define emberAfFillCommandPartitionClusterTransferPartitionedFrame(fragmentationOptions, ackOptions, partitionedIndicatorAndFrame, \
+                                                                   partitionedIndicatorAndFrameLen, firstFrameIdAndNackList,       \
+                                                                   firstFrameIdAndNackListLen)                                     \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_TRANSFER_PARTITIONED_FRAME_COMMAND_ID, "uubb", fragmentationOptions, ackOptions,                 \
+                              partitionedIndicatorAndFrame, partitionedIndicatorAndFrameLen, firstFrameIdAndNackList,              \
+                              firstFrameIdAndNackListLen);
+
+/** @brief Command description for ReadHandshakeParam
+ *
+ * Command: ReadHandshakeParam
+ * @param partitionedClusterId CLUSTER_ID
+ * @param partitionedClusterId CLUSTER_ID
+ * @param attributeList ATTRIBUTE_ID []
+ * @param attributeListLen int
+ * @param readAttributeStatusRecords ReadAttributeStatusRecord []
+ * @param readAttributeStatusRecordsLen int
+ */
+#define emberAfFillCommandPartitionClusterReadHandshakeParam(partitionedClusterId, partitionedClusterId, attributeList,            \
+                                                             attributeListLen, readAttributeStatusRecords,                         \
+                                                             readAttributeStatusRecordsLen)                                        \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_READ_HANDSHAKE_PARAM_COMMAND_ID, "uubb", partitionedClusterId, partitionedClusterId,             \
+                              attributeList, attributeListLen, readAttributeStatusRecords, readAttributeStatusRecordsLen);
+
+/** @brief Command description for WriteHandshakeParam
+ *
+ * Command: WriteHandshakeParam
+ * @param partitionedClusterId CLUSTER_ID
+ * @param writeAttributeRecords WriteAttributeRecord []
+ * @param writeAttributeRecordsLen int
+ */
+#define emberAfFillCommandPartitionClusterWriteHandshakeParam(partitionedClusterId, writeAttributeRecords,                         \
+                                                              writeAttributeRecordsLen)                                            \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_WRITE_HANDSHAKE_PARAM_COMMAND_ID, "ub", partitionedClusterId, writeAttributeRecords,             \
+                              writeAttributeRecordsLen);
+
+/** @brief Command description for ImageNotify
+ *
+ * Command: ImageNotify
+ * @param payloadType ENUM8
+ * @param queryJitter INT8U
+ * @param manufacturerId INT16U
+ * @param imageType INT16U
+ * @param newFileVersion INT32U
+ */
+#define emberAfFillCommandOver                                                                                                     \
+    the Air BootloadingClusterImageNotify(payloadType, queryJitter, manufacturerId, imageType, newFileVersion)                     \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_IMAGE_NOTIFY_COMMAND_ID, "uuuuu", payloadType, queryJitter, manufacturerId, imageType,       \
+                                  newFileVersion);
+
+/** @brief Command description for QueryNextImageRequest
+ *
+ * Command: QueryNextImageRequest
+ * @param fieldControl INT8U
+ * @param manufacturerId INT16U
+ * @param imageType INT16U
+ * @param currentFileVersion INT32U
+ * @param hardwareVersion INT16U
+ */
+#define emberAfFillCommandOver                                                                                                     \
+    the Air BootloadingClusterQueryNextImageRequest(fieldControl, manufacturerId, imageType, currentFileVersion, hardwareVersion)  \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_QUERY_NEXT_IMAGE_REQUEST_COMMAND_ID, "uuuuu", fieldControl, manufacturerId, imageType,       \
+                                  currentFileVersion, hardwareVersion);
+
+/** @brief Command description for QueryNextImageResponse
+ *
+ * Command: QueryNextImageResponse
+ * @param status Status
+ * @param manufacturerId INT16U
+ * @param imageType INT16U
+ * @param fileVersion INT32U
+ * @param imageSize INT32U
+ */
+#define emberAfFillCommandOver                                                                                                     \
+    the Air BootloadingClusterQueryNextImageResponse(status, manufacturerId, imageType, fileVersion, imageSize)                    \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_QUERY_NEXT_IMAGE_RESPONSE_COMMAND_ID, "uuuuu", status, manufacturerId, imageType,            \
+                                  fileVersion, imageSize);
+
+/** @brief Command description for ImageBlockRequest
+ *
+ * Command: ImageBlockRequest
+ * @param fieldControl INT8U
+ * @param manufacturerId INT16U
+ * @param imageType INT16U
+ * @param fileVersion INT32U
+ * @param fileOffset INT32U
+ * @param maxDataSize INT8U
+ * @param requestNodeAddress IEEE_ADDRESS
+ */
+#define emberAfFillCommandOver                                                                                                     \
+    the Air BootloadingClusterImageBlockRequest(fieldControl, manufacturerId, imageType, fileVersion, fileOffset, maxDataSize,     \
+                                                requestNodeAddress)                                                                \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_IMAGE_BLOCK_REQUEST_COMMAND_ID, "uuuuuuu", fieldControl, manufacturerId, imageType,          \
+                                  fileVersion, fileOffset, maxDataSize, requestNodeAddress);
+
+/** @brief Command description for ImagePageRequest
+ *
+ * Command: ImagePageRequest
+ * @param fieldControl INT8U
+ * @param manufacturerId INT16U
+ * @param imageType INT16U
+ * @param fileVersion INT32U
+ * @param fileOffset INT32U
+ * @param maxDataSize INT8U
+ * @param pageSize INT16U
+ * @param responseSpacing INT16U
+ * @param requestNodeAddress IEEE_ADDRESS
+ */
+#define emberAfFillCommandOver                                                                                                     \
+    the Air BootloadingClusterImagePageRequest(fieldControl, manufacturerId, imageType, fileVersion, fileOffset, maxDataSize,      \
+                                               pageSize, responseSpacing, requestNodeAddress)                                      \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_IMAGE_PAGE_REQUEST_COMMAND_ID, "uuuuuuuuu", fieldControl, manufacturerId, imageType,         \
+                                  fileVersion, fileOffset, maxDataSize, pageSize, responseSpacing, requestNodeAddress);
+
+/** @brief Command description for ImageBlockResponse
+ *
+ * Command: ImageBlockResponse
+ * @param status Status
+ * @param manufacturerId INT16U
+ * @param imageType INT16U
+ * @param fileVersion INT32U
+ * @param fileOffset INT32U
+ * @param dataSize INT8U
+ * @param imageData INT8U []
+ * @param imageDataLen int
+ */
+#define emberAfFillCommandOver                                                                                                     \
+    the Air BootloadingClusterImageBlockResponse(status, manufacturerId, imageType, fileVersion, fileOffset, dataSize, imageData,  \
+                                                 imageDataLen)                                                                     \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_IMAGE_BLOCK_RESPONSE_COMMAND_ID, "uuuuuub", status, manufacturerId, imageType, fileVersion,  \
+                                  fileOffset, dataSize, imageData, imageDataLen);
+
+/** @brief Command description for UpgradeEndRequest
+ *
+ * Command: UpgradeEndRequest
+ * @param status Status
+ * @param manufacturerId INT16U
+ * @param imageType INT16U
+ * @param fileVersion INT32U
+ */
+#define emberAfFillCommandOver                                                                                                     \
+    the Air BootloadingClusterUpgradeEndRequest(status, manufacturerId, imageType, fileVersion)                                    \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_UPGRADE_END_REQUEST_COMMAND_ID, "uuuu", status, manufacturerId, imageType, fileVersion);
+
+/** @brief Command description for UpgradeEndResponse
+ *
+ * Command: UpgradeEndResponse
+ * @param manufacturerId INT16U
+ * @param imageType INT16U
+ * @param fileVersion INT32U
+ * @param currentTime UTC_TIME
+ * @param upgradeTime UTC_TIME
+ */
+#define emberAfFillCommandOver                                                                                                     \
+    the Air BootloadingClusterUpgradeEndResponse(manufacturerId, imageType, fileVersion, currentTime, upgradeTime)                 \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_UPGRADE_END_RESPONSE_COMMAND_ID, "uuuuu", manufacturerId, imageType, fileVersion,            \
+                                  currentTime, upgradeTime);
+
+/** @brief Command description for QuerySpecificFileRequest
+ *
+ * Command: QuerySpecificFileRequest
+ * @param requestNodeAddress IEEE_ADDRESS
+ * @param manufacturerId INT16U
+ * @param imageType INT16U
+ * @param fileVersion INT32U
+ * @param currentZigbeeStackVersion INT16U
+ */
+#define emberAfFillCommandOver                                                                                                     \
+    the Air BootloadingClusterQuerySpecificFileRequest(requestNodeAddress, manufacturerId, imageType, fileVersion,                 \
+                                                       currentZigbeeStackVersion)                                                  \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_QUERY_SPECIFIC_FILE_REQUEST_COMMAND_ID, "uuuuu", requestNodeAddress, manufacturerId,         \
+                                  imageType, fileVersion, currentZigbeeStackVersion);
+
+/** @brief Command description for QuerySpecificFileResponse
+ *
+ * Command: QuerySpecificFileResponse
+ * @param status Status
+ * @param manufacturerId INT16U
+ * @param imageType INT16U
+ * @param fileVersion INT32U
+ * @param imageSize INT32U
+ */
+#define emberAfFillCommandOver                                                                                                     \
+    the Air BootloadingClusterQuerySpecificFileResponse(status, manufacturerId, imageType, fileVersion, imageSize)                 \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_QUERY_SPECIFIC_FILE_RESPONSE_COMMAND_ID, "uuuuu", status, manufacturerId, imageType,         \
+                                  fileVersion, imageSize);
+
+/** @brief Command description for PowerProfileRequest
+ *
+ * Command: PowerProfileRequest
+ * @param powerProfileId INT8U
+ * @param totalProfileNum INT8U
+ * @param powerProfileId INT8U
+ * @param numOfTransferredPhases INT8U
+ * @param transferredPhases TransferredPhase []
+ * @param transferredPhasesLen int
+ */
+#define emberAfFillCommandPower                                                                                                    \
+    ProfileClusterPowerProfileRequest(powerProfileId, totalProfileNum, powerProfileId, numOfTransferredPhases, transferredPhases,  \
+                                      transferredPhasesLen)                                                                        \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_POWER_PROFILE_REQUEST_COMMAND_ID, "uuuub", powerProfileId, totalProfileNum, powerProfileId,  \
+                                  numOfTransferredPhases, transferredPhases, transferredPhasesLen);
+
+/** @brief Command description for PowerProfileStateRequest
+ *
+ * Command: PowerProfileStateRequest
+ * @param totalProfileNum INT8U
+ * @param powerProfileId INT8U
+ * @param numOfTransferredPhases INT8U
+ * @param transferredPhases TransferredPhase []
+ * @param transferredPhasesLen int
+ */
+#define emberAfFillCommandPower                                                                                                    \
+    ProfileClusterPowerProfileStateRequest(totalProfileNum, powerProfileId, numOfTransferredPhases, transferredPhases,             \
+                                           transferredPhasesLen)                                                                   \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_POWER_PROFILE_STATE_REQUEST_COMMAND_ID, "uuub", totalProfileNum, powerProfileId,             \
+                                  numOfTransferredPhases, transferredPhases, transferredPhasesLen);
+
+/** @brief Command description for GetPowerProfilePriceResponse
+ *
+ * Command: GetPowerProfilePriceResponse
+ * @param powerProfileId INT8U
+ * @param powerProfileCount INT8U
+ * @param currency INT16U
+ * @param powerProfileRecords PowerProfileRecord []
+ * @param powerProfileRecordsLen int
+ * @param price INT32U
+ * @param priceTrailingDigit INT8U
+ */
+#define emberAfFillCommandPower                                                                                                    \
+    ProfileClusterGetPowerProfilePriceResponse(powerProfileId, powerProfileCount, currency, powerProfileRecords,                   \
+                                               powerProfileRecordsLen, price, priceTrailingDigit)                                  \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_POWER_PROFILE_PRICE_RESPONSE_COMMAND_ID, "uuubuu", powerProfileId, powerProfileCount,    \
+                                  currency, powerProfileRecords, powerProfileRecordsLen, price, priceTrailingDigit);
+
+/** @brief Command description for GetOverallSchedulePriceResponse
+ *
+ * Command: GetOverallSchedulePriceResponse
+ * @param currency INT16U
+ * @param powerProfileId INT8U
+ * @param price INT32U
+ * @param priceTrailingDigit INT8U
+ */
+#define emberAfFillCommandPower                                                                                                    \
+    ProfileClusterGetOverallSchedulePriceResponse(currency, powerProfileId, price, priceTrailingDigit) emberAfFillExternalBuffer(  \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_GET_OVERALL_SCHEDULE_PRICE_RESPONSE_COMMAND_ID, "uuuu", currency, powerProfileId, price, priceTrailingDigit);
+
+/** @brief Command description for EnergyPhasesScheduleNotification
+ *
+ * Command: EnergyPhasesScheduleNotification
+ * @param powerProfileId INT8U
+ * @param powerProfileCount INT8U
+ * @param numOfScheduledPhases INT8U
+ * @param powerProfileRecords PowerProfileRecord []
+ * @param powerProfileRecordsLen int
+ * @param scheduledPhases ScheduledPhase []
+ * @param scheduledPhasesLen int
+ */
+#define emberAfFillCommandPower                                                                                                    \
+    ProfileClusterEnergyPhasesScheduleNotification(powerProfileId, powerProfileCount, numOfScheduledPhases, powerProfileRecords,   \
+                                                   powerProfileRecordsLen, scheduledPhases, scheduledPhasesLen)                    \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_ENERGY_PHASES_SCHEDULE_NOTIFICATION_COMMAND_ID, "uuubb", powerProfileId, powerProfileCount,  \
+                                  numOfScheduledPhases, powerProfileRecords, powerProfileRecordsLen, scheduledPhases,              \
+                                  scheduledPhasesLen);
+
+/** @brief Command description for GetOverallSchedulePrice
+ *
+ * Command: GetOverallSchedulePrice
+ * @param powerProfileId INT8U
+ * @param numOfScheduledPhases INT8U
+ * @param scheduledPhases ScheduledPhase []
+ * @param scheduledPhasesLen int
+ */
+#define emberAfFillCommandPower                                                                                                    \
+    ProfileClusterGetOverallSchedulePrice(powerProfileId, numOfScheduledPhases, scheduledPhases, scheduledPhasesLen)               \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_OVERALL_SCHEDULE_PRICE_COMMAND_ID, "uub", powerProfileId, numOfScheduledPhases,          \
+                                  scheduledPhases, scheduledPhasesLen);
+
+/** @brief Command description for PowerProfileScheduleConstraintsRequest
+ *
+ * Command: PowerProfileScheduleConstraintsRequest
+ * @param powerProfileId INT8U
+ * @param powerProfileId INT8U
+ */
+#define emberAfFillCommandPower                                                                                                    \
+    ProfileClusterPowerProfileScheduleConstraintsRequest(powerProfileId, powerProfileId) emberAfFillExternalBuffer(                \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_POWER_PROFILE_SCHEDULE_CONSTRAINTS_REQUEST_COMMAND_ID, "uu", powerProfileId, powerProfileId);
+
+/** @brief Command description for EnergyPhasesScheduleStateRequest
+ *
+ * Command: EnergyPhasesScheduleStateRequest
+ * @param powerProfileId INT8U
+ * @param powerProfileId INT8U
+ * @param numOfScheduledPhases INT8U
+ * @param scheduledPhases ScheduledPhase []
+ * @param scheduledPhasesLen int
+ */
+#define emberAfFillCommandPower                                                                                                    \
+    ProfileClusterEnergyPhasesScheduleStateRequest(powerProfileId, powerProfileId, numOfScheduledPhases, scheduledPhases,          \
+                                                   scheduledPhasesLen)                                                             \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_ENERGY_PHASES_SCHEDULE_STATE_REQUEST_COMMAND_ID, "uuub", powerProfileId, powerProfileId,     \
+                                  numOfScheduledPhases, scheduledPhases, scheduledPhasesLen);
+
+/** @brief Command description for GetPowerProfilePriceExtendedResponse
+ *
+ * Command: GetPowerProfilePriceExtendedResponse
+ * @param powerProfileId INT8U
+ * @param powerProfileId INT8U
+ * @param currency INT16U
+ * @param numOfScheduledPhases INT8U
+ * @param price INT32U
+ * @param scheduledPhases ScheduledPhase []
+ * @param scheduledPhasesLen int
+ * @param priceTrailingDigit INT8U
+ */
+#define emberAfFillCommandPower                                                                                                    \
+    ProfileClusterGetPowerProfilePriceExtendedResponse(powerProfileId, powerProfileId, currency, numOfScheduledPhases, price,      \
+                                                       scheduledPhases, scheduledPhasesLen, priceTrailingDigit)                    \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_POWER_PROFILE_PRICE_EXTENDED_RESPONSE_COMMAND_ID, "uuuuubu", powerProfileId,             \
+                                  powerProfileId, currency, numOfScheduledPhases, price, scheduledPhases, scheduledPhasesLen,      \
+                                  priceTrailingDigit);
+
+/** @brief Command description for PowerProfileScheduleConstraintsNotification
+ *
+ * Command: PowerProfileScheduleConstraintsNotification
+ * @param powerProfileId INT8U
+ * @param startAfter INT16U
+ * @param stopBefore INT16U
+ */
+#define emberAfFillCommandPower                                                                                                    \
+    ProfileClusterPowerProfileScheduleConstraintsNotification(powerProfileId, startAfter, stopBefore) emberAfFillExternalBuffer(   \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_POWER_PROFILE_SCHEDULE_CONSTRAINTS_NOTIFICATION_COMMAND_ID, "uuu", powerProfileId, startAfter, stopBefore);
+
+/** @brief Command description for PowerProfileScheduleConstraintsResponse
+ *
+ * Command: PowerProfileScheduleConstraintsResponse
+ * @param powerProfileId INT8U
+ * @param startAfter INT16U
+ * @param stopBefore INT16U
+ */
+#define emberAfFillCommandPower                                                                                                    \
+    ProfileClusterPowerProfileScheduleConstraintsResponse(powerProfileId, startAfter, stopBefore) emberAfFillExternalBuffer(       \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_POWER_PROFILE_SCHEDULE_CONSTRAINTS_RESPONSE_COMMAND_ID, "uuu", powerProfileId, startAfter, stopBefore);
+
+/** @brief Command description for GetPowerProfilePriceExtended
+ *
+ * Command: GetPowerProfilePriceExtended
+ * @param options BITMAP8
+ * @param powerProfileId INT8U
+ * @param powerProfileStartTime INT16U
+ */
+#define emberAfFillCommandPower                                                                                                    \
+    ProfileClusterGetPowerProfilePriceExtended(options, powerProfileId, powerProfileStartTime) emberAfFillExternalBuffer(          \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_GET_POWER_PROFILE_PRICE_EXTENDED_COMMAND_ID, "uuu", options, powerProfileId, powerProfileStartTime);
+
+/** @brief Command description for ExecutionOfACommand
+ *
+ * Command: ExecutionOfACommand
+ * @param commandId CommandIdentification
+ * @param applianceStatus ApplianceStatus
+ * @param remoteEnableFlagsAndDeviceStatus2 RemoteEnableFlagsAndDeviceStatus2
+ * @param applianceStatus2 INT24U
+ */
+#define emberAfFillCommandAppliance                                                                                                \
+    ControlClusterExecutionOfACommand(commandId, applianceStatus, remoteEnableFlagsAndDeviceStatus2, applianceStatus2)             \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_EXECUTION_OF_A_COMMAND_COMMAND_ID, "uuuu", commandId, applianceStatus,                       \
+                                  remoteEnableFlagsAndDeviceStatus2, applianceStatus2);
+
+/** @brief Command description for SignalState
+ *
+ * Command: SignalState
+ * @param applianceStatus ApplianceStatus
+ * @param remoteEnableFlagsAndDeviceStatus2 RemoteEnableFlagsAndDeviceStatus2
+ * @param applianceStatus2 INT24U
+ */
+#define emberAfFillCommandAppliance                                                                                                \
+    ControlClusterSignalState(applianceStatus, remoteEnableFlagsAndDeviceStatus2, applianceStatus2) emberAfFillExternalBuffer(     \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_SIGNAL_STATE_COMMAND_ID, "uuu", applianceStatus, remoteEnableFlagsAndDeviceStatus2, applianceStatus2);
+
+/** @brief Command description for WriteFunctions
+ *
+ * Command: WriteFunctions
+ * @param functionId INT16U
+ * @param functionDataType ENUM8
+ * @param functionData INT8U []
+ * @param functionDataLen int
+ */
+#define emberAfFillCommandAppliance                                                                                                \
+    ControlClusterWriteFunctions(functionId, functionDataType, functionData, functionDataLen) emberAfFillExternalBuffer(           \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_WRITE_FUNCTIONS_COMMAND_ID, "uub", functionId, functionDataType, functionData, functionDataLen);
+
+/** @brief Command description for OverloadPauseResume
+ *
+ * Command: OverloadPauseResume
+ */
+#define emberAfFillCommandAppliance                                                                                                \
+    ControlClusterOverloadPauseResume() emberAfFillExternalBuffer(mask,                                                            \
+                                                                                                                                   \
+                                                                  ZCL_OVERLOAD_PAUSE_RESUME_COMMAND_ID, "", );
+
+/** @brief Command description for OverloadPause
+ *
+ * Command: OverloadPause
+ */
+#define emberAfFillCommandAppliance                                                                                                \
+    ControlClusterOverloadPause() emberAfFillExternalBuffer(mask,                                                                  \
+                                                                                                                                   \
+                                                            ZCL_OVERLOAD_PAUSE_COMMAND_ID, "", );
+
+/** @brief Command description for OverloadWarning
+ *
+ * Command: OverloadWarning
+ * @param warningEvent WarningEvent
+ */
+#define emberAfFillCommandAppliance                                                                                                \
+    ControlClusterOverloadWarning(warningEvent) emberAfFillExternalBuffer(mask,                                                    \
+                                                                                                                                   \
+                                                                          ZCL_OVERLOAD_WARNING_COMMAND_ID, "u", warningEvent);
+
+/** @brief Command description for CheckIn
+ *
+ * Command: CheckIn
+ * @param startFastPolling BOOLEAN
+ * @param fastPollTimeout INT16U
+ */
+#define emberAfFillCommandPoll                                                                                                     \
+    ControlClusterCheckIn(startFastPolling, fastPollTimeout)                                                                       \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_CHECK_IN_COMMAND_ID, "uu", startFastPolling, fastPollTimeout);
+
+/** @brief Command description for FastPollStop
+ *
+ * Command: FastPollStop
+ */
+#define emberAfFillCommandPoll                                                                                                     \
+    ControlClusterFastPollStop() emberAfFillExternalBuffer(mask,                                                                   \
+                                                                                                                                   \
+                                                           ZCL_FAST_POLL_STOP_COMMAND_ID, "", );
+
+/** @brief Command description for SetLongPollInterval
+ *
+ * Command: SetLongPollInterval
+ * @param newLongPollInterval INT32U
+ */
+#define emberAfFillCommandPoll                                                                                                     \
+    ControlClusterSetLongPollInterval(newLongPollInterval)                                                                         \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_SET_LONG_POLL_INTERVAL_COMMAND_ID, "u", newLongPollInterval);
+
+/** @brief Command description for SetShortPollInterval
+ *
+ * Command: SetShortPollInterval
+ * @param newShortPollInterval INT16U
+ */
+#define emberAfFillCommandPoll                                                                                                     \
+    ControlClusterSetShortPollInterval(newShortPollInterval)                                                                       \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_SET_SHORT_POLL_INTERVAL_COMMAND_ID, "u", newShortPollInterval);
+
+/** @brief Command description for GpNotification
+ *
+ * Command: GpNotification
+ * @param options GpNotificationOption
+ * @param options GpNotificationResponseOption
+ * @param gpdSrcId INT32U
+ * @param gpdSrcId INT32U
+ * @param gpdIeee IEEE_ADDRESS
+ * @param gpdIeee IEEE_ADDRESS
+ * @param gpdEndpoint INT8U
+ * @param endpoint INT8U
+ * @param gpdSecurityFrameCounter INT32U
+ * @param gpdSecurityFrameCounter INT32U
+ * @param gpdCommandId INT8U
+ * @param gpdCommandPayload OCTET_STRING
+ * @param gppShortAddress INT16U
+ * @param gppDistance INT8U
+ */
+#define emberAfFillCommandGreen                                                                                                    \
+    PowerClusterGpNotification(options, options, gpdSrcId, gpdSrcId, gpdIeee, gpdIeee, gpdEndpoint, endpoint,                      \
+                               gpdSecurityFrameCounter, gpdSecurityFrameCounter, gpdCommandId, gpdCommandPayload, gppShortAddress, \
+                               gppDistance)                                                                                        \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GP_NOTIFICATION_COMMAND_ID, "uuuuuuuuuuuuuu", options, options, gpdSrcId, gpdSrcId, gpdIeee, \
+                                  gpdIeee, gpdEndpoint, endpoint, gpdSecurityFrameCounter, gpdSecurityFrameCounter, gpdCommandId,  \
+                                  gpdCommandPayload, gppShortAddress, gppDistance);
+
+/** @brief Command description for GpPairingSearch
+ *
+ * Command: GpPairingSearch
+ * @param options GpPairingSearchOption
+ * @param options GpPairingOption
+ * @param gpdSrcId INT32U
+ * @param gpdSrcId INT32U
+ * @param gpdIeee IEEE_ADDRESS
+ * @param gpdIeee IEEE_ADDRESS
+ * @param endpoint INT8U
+ * @param endpoint INT8U
+ * @param sinkIeeeAddress IEEE_ADDRESS
+ * @param sinkNwkAddress INT16U
+ * @param sinkGroupId INT16U
+ * @param deviceId GpDeviceId
+ * @param gpdSecurityFrameCounter INT32U
+ * @param gpdKey SECURITY_KEY
+ * @param assignedAlias INT16U
+ * @param groupcastRadius INT8U
+ */
+#define emberAfFillCommandGreen                                                                                                    \
+    PowerClusterGpPairingSearch(options, options, gpdSrcId, gpdSrcId, gpdIeee, gpdIeee, endpoint, endpoint, sinkIeeeAddress,       \
+                                sinkNwkAddress, sinkGroupId, deviceId, gpdSecurityFrameCounter, gpdKey, assignedAlias,             \
+                                groupcastRadius)                                                                                   \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GP_PAIRING_SEARCH_COMMAND_ID, "uuuuuuuuuuuuuuuu", options, options, gpdSrcId, gpdSrcId,      \
+                                  gpdIeee, gpdIeee, endpoint, endpoint, sinkIeeeAddress, sinkNwkAddress, sinkGroupId, deviceId,    \
+                                  gpdSecurityFrameCounter, gpdKey, assignedAlias, groupcastRadius);
+
+/** @brief Command description for GpProxyCommissioningMode
+ *
+ * Command: GpProxyCommissioningMode
+ * @param options GpProxyCommissioningModeOption
+ * @param commissioningWindow INT16U
+ * @param channel INT8U
+ */
+#define emberAfFillCommandGreen                                                                                                    \
+    PowerClusterGpProxyCommissioningMode(options, commissioningWindow, channel)                                                    \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GP_PROXY_COMMISSIONING_MODE_COMMAND_ID, "uuu", options, commissioningWindow, channel);
+
+/** @brief Command description for GpTunnelingStop
+ *
+ * Command: GpTunnelingStop
+ * @param options GpTunnelingStopOption
+ * @param gpdSrcId INT32U
+ * @param gpdIeee IEEE_ADDRESS
+ * @param endpoint INT8U
+ * @param gpdSecurityFrameCounter INT32U
+ * @param gppShortAddress INT16U
+ * @param gppDistance INT8S
+ */
+#define emberAfFillCommandGreen                                                                                                    \
+    PowerClusterGpTunnelingStop(options, gpdSrcId, gpdIeee, endpoint, gpdSecurityFrameCounter, gppShortAddress, gppDistance)       \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GP_TUNNELING_STOP_COMMAND_ID, "uuuuuuu", options, gpdSrcId, gpdIeee, endpoint,               \
+                                  gpdSecurityFrameCounter, gppShortAddress, gppDistance);
+
+/** @brief Command description for GpCommissioningNotification
+ *
+ * Command: GpCommissioningNotification
+ * @param options GpCommissioningNotificationOption
+ * @param gpdSrcId INT32U
+ * @param gpdIeee IEEE_ADDRESS
+ * @param endpoint INT8U
+ * @param gpdSecurityFrameCounter INT32U
+ * @param gpdCommandId INT8U
+ * @param gpdCommandPayload OCTET_STRING
+ * @param gppShortAddress INT16U
+ * @param gppLink INT8U
+ * @param mic INT32U
+ */
+#define emberAfFillCommandGreen                                                                                                    \
+    PowerClusterGpCommissioningNotification(options, gpdSrcId, gpdIeee, endpoint, gpdSecurityFrameCounter, gpdCommandId,           \
+                                            gpdCommandPayload, gppShortAddress, gppLink, mic)                                      \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GP_COMMISSIONING_NOTIFICATION_COMMAND_ID, "uuuuuuuuuu", options, gpdSrcId, gpdIeee,          \
+                                  endpoint, gpdSecurityFrameCounter, gpdCommandId, gpdCommandPayload, gppShortAddress, gppLink,    \
+                                  mic);
+
+/** @brief Command description for GpSinkCommissioningMode
+ *
+ * Command: GpSinkCommissioningMode
+ * @param options GpSinkCommissioningModeOptions
+ * @param gpmAddrForSecurity INT16U
+ * @param gpmAddrForPairing INT16U
+ * @param sinkEndpoint INT8U
+ */
+#define emberAfFillCommandGreen                                                                                                    \
+    PowerClusterGpSinkCommissioningMode(options, gpmAddrForSecurity, gpmAddrForPairing, sinkEndpoint) emberAfFillExternalBuffer(   \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_GP_SINK_COMMISSIONING_MODE_COMMAND_ID, "uuuu", options, gpmAddrForSecurity, gpmAddrForPairing, sinkEndpoint);
+
+/** @brief Command description for GpResponse
+ *
+ * Command: GpResponse
+ * @param options GpResponseOption
+ * @param tempMasterShortAddress INT16U
+ * @param tempMasterTxChannel BITMAP8
+ * @param gpdSrcId INT32U
+ * @param gpdIeee IEEE_ADDRESS
+ * @param endpoint INT8U
+ * @param gpdCommandId INT8U
+ * @param gpdCommandPayload OCTET_STRING
+ */
+#define emberAfFillCommandGreen                                                                                                    \
+    PowerClusterGpResponse(options, tempMasterShortAddress, tempMasterTxChannel, gpdSrcId, gpdIeee, endpoint, gpdCommandId,        \
+                           gpdCommandPayload)                                                                                      \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GP_RESPONSE_COMMAND_ID, "uuuuuuuu", options, tempMasterShortAddress, tempMasterTxChannel,    \
+                                  gpdSrcId, gpdIeee, endpoint, gpdCommandId, gpdCommandPayload);
+
+/** @brief Command description for GpTranslationTableUpdate
+ *
+ * Command: GpTranslationTableUpdate
+ * @param options GpTranslationTableUpdateOption
+ * @param gpdSrcId INT32U
+ * @param gpdIeee IEEE_ADDRESS
+ * @param endpoint INT8U
+ * @param translations GpTranslationTableUpdateTranslation []
+ * @param translationsLen int
+ */
+#define emberAfFillCommandGreen                                                                                                    \
+    PowerClusterGpTranslationTableUpdate(options, gpdSrcId, gpdIeee, endpoint, translations, translationsLen)                      \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GP_TRANSLATION_TABLE_UPDATE_COMMAND_ID, "uuuub", options, gpdSrcId, gpdIeee, endpoint,       \
+                                  translations, translationsLen);
+
+/** @brief Command description for GpTranslationTableRequest
+ *
+ * Command: GpTranslationTableRequest
+ * @param startIndex INT8U
+ * @param status GpTranslationTableResponseStatus
+ * @param options GpTranslationTableResponseOption
+ * @param totalNumberOfEntries INT8U
+ * @param startIndex INT8U
+ * @param entriesCount INT8U
+ * @param translationTableList INT8U []
+ * @param translationTableListLen int
+ */
+#define emberAfFillCommandGreen                                                                                                    \
+    PowerClusterGpTranslationTableRequest(startIndex, status, options, totalNumberOfEntries, startIndex, entriesCount,             \
+                                          translationTableList, translationTableListLen)                                           \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GP_TRANSLATION_TABLE_REQUEST_COMMAND_ID, "uuuuuub", startIndex, status, options,             \
+                                  totalNumberOfEntries, startIndex, entriesCount, translationTableList, translationTableListLen);
+
+/** @brief Command description for GpPairingConfiguration
+ *
+ * Command: GpPairingConfiguration
+ * @param actions GpPairingConfigurationActions
+ * @param options GpPairingConfigurationOption
+ * @param gpdSrcId INT32U
+ * @param gpdIeee IEEE_ADDRESS
+ * @param endpoint INT8U
+ * @param deviceId INT8U
+ * @param groupListCount INT8U
+ * @param groupList GpPairingConfigurationGroupList []
+ * @param groupListLen int
+ * @param gpdAssignedAlias INT16U
+ * @param groupcastRadius INT8U
+ * @param securityOptions INT8U
+ * @param gpdSecurityFrameCounter INT32U
+ * @param gpdSecurityKey SECURITY_KEY
+ * @param numberOfPairedEndpoints INT8U
+ * @param pairedEndpoints INT8U []
+ * @param pairedEndpointsLen int
+ * @param applicationInformation GpApplicationInformation
+ * @param manufacturerId INT16U
+ * @param modeId INT16U
+ * @param numberOfGpdCommands INT8U
+ * @param gpdCommandIdList INT8U []
+ * @param gpdCommandIdListLen int
+ * @param clusterIdListCount INT8U
+ * @param clusterListServer INT16U []
+ * @param clusterListServerLen int
+ * @param clusterListClient INT16U []
+ * @param clusterListClientLen int
+ * @param switchInformationLength INT8U
+ * @param switchConfiguration INT8U
+ * @param currentContactStatus INT8U
+ * @param totalNumberOfReports INT8U
+ * @param numberOfReports INT8U
+ * @param reportDescriptor INT8U []
+ * @param reportDescriptorLen int
+ */
+#define emberAfFillCommandGreen                                                                                                    \
+    PowerClusterGpPairingConfiguration(                                                                                            \
+        actions, options, gpdSrcId, gpdIeee, endpoint, deviceId, groupListCount, groupList, groupListLen, gpdAssignedAlias,        \
+        groupcastRadius, securityOptions, gpdSecurityFrameCounter, gpdSecurityKey, numberOfPairedEndpoints, pairedEndpoints,       \
+        pairedEndpointsLen, applicationInformation, manufacturerId, modeId, numberOfGpdCommands, gpdCommandIdList,                 \
+        gpdCommandIdListLen, clusterIdListCount, clusterListServer, clusterListServerLen, clusterListClient, clusterListClientLen, \
+        switchInformationLength, switchConfiguration, currentContactStatus, totalNumberOfReports, numberOfReports,                 \
+        reportDescriptor, reportDescriptorLen)                                                                                     \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GP_PAIRING_CONFIGURATION_COMMAND_ID, "uuuuuuubuuuuuubuuuububbuuuuub", actions, options,      \
+                                  gpdSrcId, gpdIeee, endpoint, deviceId, groupListCount, groupList, groupListLen,                  \
+                                  gpdAssignedAlias, groupcastRadius, securityOptions, gpdSecurityFrameCounter, gpdSecurityKey,     \
+                                  numberOfPairedEndpoints, pairedEndpoints, pairedEndpointsLen, applicationInformation,            \
+                                  manufacturerId, modeId, numberOfGpdCommands, gpdCommandIdList, gpdCommandIdListLen,              \
+                                  clusterIdListCount, clusterListServer, clusterListServerLen, clusterListClient,                  \
+                                  clusterListClientLen, switchInformationLength, switchConfiguration, currentContactStatus,        \
+                                  totalNumberOfReports, numberOfReports, reportDescriptor, reportDescriptorLen);
+
+/** @brief Command description for GpSinkTableRequest
+ *
+ * Command: GpSinkTableRequest
+ * @param options GpSinkTableRequestOptions
+ * @param status ENUM8
+ * @param gpdSrcId INT32U
+ * @param totalNumberofNonEmptySinkTableEntries INT8U
+ * @param gpdIeee INT64U
+ * @param startIndex INT8U
+ * @param endpoint INT8U
+ * @param sinkTableEntriesCount INT8U
+ * @param index INT8U
+ * @param sinkTableEntries INT8U []
+ * @param sinkTableEntriesLen int
+ */
+#define emberAfFillCommandGreen                                                                                                    \
+    PowerClusterGpSinkTableRequest(options, status, gpdSrcId, totalNumberofNonEmptySinkTableEntries, gpdIeee, startIndex,          \
+                                   endpoint, sinkTableEntriesCount, index, sinkTableEntries, sinkTableEntriesLen)                  \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GP_SINK_TABLE_REQUEST_COMMAND_ID, "uuuuuuuuub", options, status, gpdSrcId,                   \
+                                  totalNumberofNonEmptySinkTableEntries, gpdIeee, startIndex, endpoint, sinkTableEntriesCount,     \
+                                  index, sinkTableEntries, sinkTableEntriesLen);
+
+/** @brief Command description for GpProxyTableResponse
+ *
+ * Command: GpProxyTableResponse
+ * @param status GpProxyTableResponseStatus
+ * @param options GpProxyTableRequestOptions
+ * @param totalNumberOfNonEmptyProxyTableEntries INT8U
+ * @param gpdSrcId INT32U
+ * @param startIndex INT8U
+ * @param gpdIeee INT64U
+ * @param entriesCount INT8U
+ * @param endpoint INT8U
+ * @param proxyTableEntries INT8U []
+ * @param proxyTableEntriesLen int
+ * @param index INT8U
+ */
+#define emberAfFillCommandGreen                                                                                                    \
+    PowerClusterGpProxyTableResponse(status, options, totalNumberOfNonEmptyProxyTableEntries, gpdSrcId, startIndex, gpdIeee,       \
+                                     entriesCount, endpoint, proxyTableEntries, proxyTableEntriesLen, index)                       \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GP_PROXY_TABLE_RESPONSE_COMMAND_ID, "uuuuuuuubu", status, options,                           \
+                                  totalNumberOfNonEmptyProxyTableEntries, gpdSrcId, startIndex, gpdIeee, entriesCount, endpoint,   \
+                                  proxyTableEntries, proxyTableEntriesLen, index);
+
+/** @brief Command description for LockDoor
+ *
+ * Command: LockDoor
+ * @param PIN CHAR_STRING
+ * @param status INT8U
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterLockDoor(PIN, status) emberAfFillExternalBuffer(mask,                                                               \
+                                                                                                                                   \
+                                                               ZCL_LOCK_DOOR_COMMAND_ID, "uu", PIN, status);
+
+/** @brief Command description for UnlockDoor
+ *
+ * Command: UnlockDoor
+ * @param PIN CHAR_STRING
+ * @param status INT8U
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterUnlockDoor(PIN, status) emberAfFillExternalBuffer(mask,                                                             \
+                                                                                                                                   \
+                                                                 ZCL_UNLOCK_DOOR_COMMAND_ID, "uu", PIN, status);
+
+/** @brief Command description for Toggle
+ *
+ * Command: Toggle
+ * @param pin CHAR_STRING
+ * @param status INT8U
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterToggle(pin, status) emberAfFillExternalBuffer(mask,                                                                 \
+                                                                                                                                   \
+                                                             ZCL_TOGGLE_COMMAND_ID, "uu", pin, status);
+
+/** @brief Command description for UnlockWithTimeout
+ *
+ * Command: UnlockWithTimeout
+ * @param timeoutInSeconds INT16U
+ * @param status INT8U
+ * @param pin CHAR_STRING
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterUnlockWithTimeout(timeoutInSeconds, status, pin)                                                                    \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_UNLOCK_WITH_TIMEOUT_COMMAND_ID, "uuu", timeoutInSeconds, status, pin);
+
+/** @brief Command description for GetLogRecord
+ *
+ * Command: GetLogRecord
+ * @param logIndex INT16U
+ * @param logEntryId INT16U
+ * @param timestamp INT32U
+ * @param eventType ENUM8
+ * @param source INT8U
+ * @param eventIdOrAlarmCode INT8U
+ * @param userId INT16U
+ * @param pin CHAR_STRING
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterGetLogRecord(logIndex, logEntryId, timestamp, eventType, source, eventIdOrAlarmCode, userId, pin)                   \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_LOG_RECORD_COMMAND_ID, "uuuuuuuu", logIndex, logEntryId, timestamp, eventType, source,   \
+                                  eventIdOrAlarmCode, userId, pin);
+
+/** @brief Command description for SetPin
+ *
+ * Command: SetPin
+ * @param userId INT16U
+ * @param status DoorLockSetPinOrIdStatus
+ * @param userStatus DoorLockUserStatus
+ * @param userType DoorLockUserType
+ * @param pin CHAR_STRING
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterSetPin(userId, status, userStatus, userType, pin)                                                                   \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_SET_PIN_COMMAND_ID, "uuuuu", userId, status, userStatus, userType, pin);
+
+/** @brief Command description for GetPin
+ *
+ * Command: GetPin
+ * @param userId INT16U
+ * @param userId INT16U
+ * @param userStatus DoorLockUserStatus
+ * @param userType DoorLockUserType
+ * @param pin CHAR_STRING
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterGetPin(userId, userId, userStatus, userType, pin)                                                                   \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_PIN_COMMAND_ID, "uuuuu", userId, userId, userStatus, userType, pin);
+
+/** @brief Command description for ClearPin
+ *
+ * Command: ClearPin
+ * @param userId INT16U
+ * @param status INT8U
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterClearPin(userId, status) emberAfFillExternalBuffer(mask,                                                            \
+                                                                                                                                   \
+                                                                  ZCL_CLEAR_PIN_COMMAND_ID, "uu", userId, status);
+
+/** @brief Command description for ClearAllPins
+ *
+ * Command: ClearAllPins
+ * @param status INT8U
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterClearAllPins(status) emberAfFillExternalBuffer(mask,                                                                \
+                                                                                                                                   \
+                                                              ZCL_CLEAR_ALL_PINS_COMMAND_ID, "u", status);
+
+/** @brief Command description for SetUserStatus
+ *
+ * Command: SetUserStatus
+ * @param userId INT16U
+ * @param status INT8U
+ * @param userStatus INT8U
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterSetUserStatus(userId, status, userStatus)                                                                           \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_SET_USER_STATUS_COMMAND_ID, "uuu", userId, status, userStatus);
+
+/** @brief Command description for GetUserStatus
+ *
+ * Command: GetUserStatus
+ * @param userId INT16U
+ * @param userId INT16U
+ * @param status INT8U
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterGetUserStatus(userId, userId, status)                                                                               \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_USER_STATUS_COMMAND_ID, "uuu", userId, userId, status);
+
+/** @brief Command description for SetWeekdaySchedule
+ *
+ * Command: SetWeekdaySchedule
+ * @param scheduleId INT8U
+ * @param status INT8U
+ * @param userId INT16U
+ * @param daysMask DoorLockDayOfWeek
+ * @param startHour INT8U
+ * @param startMinute INT8U
+ * @param endHour INT8U
+ * @param endMinute INT8U
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterSetWeekdaySchedule(scheduleId, status, userId, daysMask, startHour, startMinute, endHour, endMinute)                \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_SET_WEEKDAY_SCHEDULE_COMMAND_ID, "uuuuuuuu", scheduleId, status, userId, daysMask,           \
+                                  startHour, startMinute, endHour, endMinute);
+
+/** @brief Command description for GetWeekdaySchedule
+ *
+ * Command: GetWeekdaySchedule
+ * @param scheduleId INT8U
+ * @param scheduleId INT8U
+ * @param userId INT16U
+ * @param userId INT16U
+ * @param status INT8U
+ * @param daysMask INT8U
+ * @param startHour INT8U
+ * @param startMinute INT8U
+ * @param endHour INT8U
+ * @param endMinute INT8U
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterGetWeekdaySchedule(scheduleId, scheduleId, userId, userId, status, daysMask, startHour, startMinute, endHour,       \
+                                  endMinute)                                                                                       \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_WEEKDAY_SCHEDULE_COMMAND_ID, "uuuuuuuuuu", scheduleId, scheduleId, userId, userId,       \
+                                  status, daysMask, startHour, startMinute, endHour, endMinute);
+
+/** @brief Command description for ClearWeekdaySchedule
+ *
+ * Command: ClearWeekdaySchedule
+ * @param scheduleId INT8U
+ * @param status INT8U
+ * @param userId INT16U
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterClearWeekdaySchedule(scheduleId, status, userId)                                                                    \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_CLEAR_WEEKDAY_SCHEDULE_COMMAND_ID, "uuu", scheduleId, status, userId);
+
+/** @brief Command description for SetYeardaySchedule
+ *
+ * Command: SetYeardaySchedule
+ * @param scheduleId INT8U
+ * @param status INT8U
+ * @param userId INT16U
+ * @param localStartTime INT32U
+ * @param localEndTime INT32U
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterSetYeardaySchedule(scheduleId, status, userId, localStartTime, localEndTime) emberAfFillExternalBuffer(             \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_SET_YEARDAY_SCHEDULE_COMMAND_ID, "uuuuu", scheduleId, status, userId, localStartTime, localEndTime);
+
+/** @brief Command description for GetYeardaySchedule
+ *
+ * Command: GetYeardaySchedule
+ * @param scheduleId INT8U
+ * @param scheduleId INT8U
+ * @param userId INT16U
+ * @param userId INT16U
+ * @param status INT8U
+ * @param localStartTime INT32U
+ * @param localEndTime INT32U
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterGetYeardaySchedule(scheduleId, scheduleId, userId, userId, status, localStartTime, localEndTime)                    \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_YEARDAY_SCHEDULE_COMMAND_ID, "uuuuuuu", scheduleId, scheduleId, userId, userId, status,  \
+                                  localStartTime, localEndTime);
+
+/** @brief Command description for ClearYeardaySchedule
+ *
+ * Command: ClearYeardaySchedule
+ * @param scheduleId INT8U
+ * @param status INT8U
+ * @param userId INT16U
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterClearYeardaySchedule(scheduleId, status, userId)                                                                    \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_CLEAR_YEARDAY_SCHEDULE_COMMAND_ID, "uuu", scheduleId, status, userId);
+
+/** @brief Command description for SetHolidaySchedule
+ *
+ * Command: SetHolidaySchedule
+ * @param scheduleId INT8U
+ * @param status INT8U
+ * @param localStartTime INT32U
+ * @param localEndTime INT32U
+ * @param operatingModeDuringHoliday ENUM8
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterSetHolidaySchedule(scheduleId, status, localStartTime, localEndTime, operatingModeDuringHoliday)                    \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_SET_HOLIDAY_SCHEDULE_COMMAND_ID, "uuuuu", scheduleId, status, localStartTime, localEndTime,  \
+                                  operatingModeDuringHoliday);
+
+/** @brief Command description for GetHolidaySchedule
+ *
+ * Command: GetHolidaySchedule
+ * @param scheduleId INT8U
+ * @param scheduleId INT8U
+ * @param status INT8U
+ * @param localStartTime INT32U
+ * @param localEndTime INT32U
+ * @param operatingModeDuringHoliday ENUM8
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterGetHolidaySchedule(scheduleId, scheduleId, status, localStartTime, localEndTime, operatingModeDuringHoliday)        \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_HOLIDAY_SCHEDULE_COMMAND_ID, "uuuuuu", scheduleId, scheduleId, status, localStartTime,   \
+                                  localEndTime, operatingModeDuringHoliday);
+
+/** @brief Command description for ClearHolidaySchedule
+ *
+ * Command: ClearHolidaySchedule
+ * @param scheduleId INT8U
+ * @param status INT8U
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterClearHolidaySchedule(scheduleId, status)                                                                            \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_CLEAR_HOLIDAY_SCHEDULE_COMMAND_ID, "uu", scheduleId, status);
+
+/** @brief Command description for SetUserType
+ *
+ * Command: SetUserType
+ * @param userId INT16U
+ * @param status INT8U
+ * @param userType DoorLockUserType
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterSetUserType(userId, status, userType)                                                                               \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_SET_USER_TYPE_COMMAND_ID, "uuu", userId, status, userType);
+
+/** @brief Command description for GetUserType
+ *
+ * Command: GetUserType
+ * @param userId INT16U
+ * @param userId INT16U
+ * @param userType DoorLockUserType
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterGetUserType(userId, userId, userType)                                                                               \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_USER_TYPE_COMMAND_ID, "uuu", userId, userId, userType);
+
+/** @brief Command description for SetRfid
+ *
+ * Command: SetRfid
+ * @param userId INT16U
+ * @param status DoorLockSetPinOrIdStatus
+ * @param userStatus DoorLockUserStatus
+ * @param userType DoorLockUserType
+ * @param id CHAR_STRING
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterSetRfid(userId, status, userStatus, userType, id)                                                                   \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_SET_RFID_COMMAND_ID, "uuuuu", userId, status, userStatus, userType, id);
+
+/** @brief Command description for GetRfid
+ *
+ * Command: GetRfid
+ * @param userId INT16U
+ * @param userId INT16U
+ * @param userStatus DoorLockUserStatus
+ * @param userType DoorLockUserType
+ * @param rfid CHAR_STRING
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterGetRfid(userId, userId, userStatus, userType, rfid)                                                                 \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_RFID_COMMAND_ID, "uuuuu", userId, userId, userStatus, userType, rfid);
+
+/** @brief Command description for ClearRfid
+ *
+ * Command: ClearRfid
+ * @param userId INT16U
+ * @param status INT8U
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterClearRfid(userId, status) emberAfFillExternalBuffer(mask,                                                           \
+                                                                                                                                   \
+                                                                   ZCL_CLEAR_RFID_COMMAND_ID, "uu", userId, status);
+
+/** @brief Command description for ClearAllRfids
+ *
+ * Command: ClearAllRfids
+ * @param status INT8U
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterClearAllRfids(status) emberAfFillExternalBuffer(mask,                                                               \
+                                                                                                                                   \
+                                                               ZCL_CLEAR_ALL_RFIDS_COMMAND_ID, "u", status);
+
+/** @brief Command description for OperationEventNotification
+ *
+ * Command: OperationEventNotification
+ * @param source INT8U
+ * @param eventCode DoorLockOperationEventCode
+ * @param userId INT16U
+ * @param pin CHAR_STRING
+ * @param timeStamp INT32U
+ * @param data CHAR_STRING
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterOperationEventNotification(source, eventCode, userId, pin, timeStamp, data) emberAfFillExternalBuffer(              \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_OPERATION_EVENT_NOTIFICATION_COMMAND_ID, "uuuuuu", source, eventCode, userId, pin, timeStamp, data);
+
+/** @brief Command description for ProgrammingEventNotification
+ *
+ * Command: ProgrammingEventNotification
+ * @param source INT8U
+ * @param eventCode DoorLockProgrammingEventCode
+ * @param userId INT16U
+ * @param pin CHAR_STRING
+ * @param userType DoorLockUserType
+ * @param userStatus DoorLockUserStatus
+ * @param timeStamp INT32U
+ * @param data CHAR_STRING
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterProgrammingEventNotification(source, eventCode, userId, pin, userType, userStatus, timeStamp, data)                 \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_PROGRAMMING_EVENT_NOTIFICATION_COMMAND_ID, "uuuuuuuu", source, eventCode, userId, pin,       \
+                                  userType, userStatus, timeStamp, data);
+
+/** @brief Command description for WindowCoveringUpOpen
+ *
+ * Command: WindowCoveringUpOpen
+ */
+#define emberAfFillCommandWindow                                                                                                   \
+    CoveringClusterWindowCoveringUpOpen() emberAfFillExternalBuffer(mask,                                                          \
+                                                                                                                                   \
+                                                                    ZCL_WINDOW_COVERING_UP_OPEN_COMMAND_ID, "", );
+
+/** @brief Command description for WindowCoveringDownClose
+ *
+ * Command: WindowCoveringDownClose
+ */
+#define emberAfFillCommandWindow                                                                                                   \
+    CoveringClusterWindowCoveringDownClose() emberAfFillExternalBuffer(mask,                                                       \
+                                                                                                                                   \
+                                                                       ZCL_WINDOW_COVERING_DOWN_CLOSE_COMMAND_ID, "", );
+
+/** @brief Command description for WindowCoveringStop
+ *
+ * Command: WindowCoveringStop
+ */
+#define emberAfFillCommandWindow                                                                                                   \
+    CoveringClusterWindowCoveringStop() emberAfFillExternalBuffer(mask,                                                            \
+                                                                                                                                   \
+                                                                  ZCL_WINDOW_COVERING_STOP_COMMAND_ID, "", );
+
+/** @brief Command description for WindowCoveringGoToLiftValue
+ *
+ * Command: WindowCoveringGoToLiftValue
+ * @param liftValue INT16U
+ */
+#define emberAfFillCommandWindow                                                                                                   \
+    CoveringClusterWindowCoveringGoToLiftValue(liftValue)                                                                          \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_WINDOW_COVERING_GO_TO_LIFT_VALUE_COMMAND_ID, "u", liftValue);
+
+/** @brief Command description for WindowCoveringGoToLiftPercentage
+ *
+ * Command: WindowCoveringGoToLiftPercentage
+ * @param percentageLiftValue INT8U
+ */
+#define emberAfFillCommandWindow                                                                                                   \
+    CoveringClusterWindowCoveringGoToLiftPercentage(percentageLiftValue)                                                           \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_WINDOW_COVERING_GO_TO_LIFT_PERCENTAGE_COMMAND_ID, "u", percentageLiftValue);
+
+/** @brief Command description for WindowCoveringGoToTiltValue
+ *
+ * Command: WindowCoveringGoToTiltValue
+ * @param tiltValue INT16U
+ */
+#define emberAfFillCommandWindow                                                                                                   \
+    CoveringClusterWindowCoveringGoToTiltValue(tiltValue)                                                                          \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_WINDOW_COVERING_GO_TO_TILT_VALUE_COMMAND_ID, "u", tiltValue);
+
+/** @brief Command description for WindowCoveringGoToTiltPercentage
+ *
+ * Command: WindowCoveringGoToTiltPercentage
+ * @param percentageTiltValue INT8U
+ */
+#define emberAfFillCommandWindow                                                                                                   \
+    CoveringClusterWindowCoveringGoToTiltPercentage(percentageTiltValue)                                                           \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_WINDOW_COVERING_GO_TO_TILT_PERCENTAGE_COMMAND_ID, "u", percentageTiltValue);
+
+/** @brief Command description for BarrierControlGoToPercent
+ *
+ * Command: BarrierControlGoToPercent
+ * @param percentOpen INT8U
+ */
+#define emberAfFillCommandBarrier                                                                                                  \
+    ControlClusterBarrierControlGoToPercent(percentOpen)                                                                           \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_BARRIER_CONTROL_GO_TO_PERCENT_COMMAND_ID, "u", percentOpen);
+
+/** @brief Command description for BarrierControlStop
+ *
+ * Command: BarrierControlStop
+ */
+#define emberAfFillCommandBarrier                                                                                                  \
+    ControlClusterBarrierControlStop() emberAfFillExternalBuffer(mask,                                                             \
+                                                                                                                                   \
+                                                                 ZCL_BARRIER_CONTROL_STOP_COMMAND_ID, "", );
+
+/** @brief Command description for SetpointRaiseLower
+ *
+ * Command: SetpointRaiseLower
+ * @param mode SetpointAdjustMode
+ * @param numberOfTransitionsForSequence ENUM8
+ * @param amount INT8S
+ * @param dayOfWeekForSequence DayOfWeek
+ * @param modeForSequence ModeForSequence
+ * @param payload INT8U []
+ * @param payloadLen int
+ */
+#define emberAfFillCommandThermostatClusterSetpointRaiseLower(mode, numberOfTransitionsForSequence, amount, dayOfWeekForSequence,  \
+                                                              modeForSequence, payload, payloadLen)                                \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_SETPOINT_RAISE_LOWER_COMMAND_ID, "uuuuub", mode, numberOfTransitionsForSequence, amount,         \
+                              dayOfWeekForSequence, modeForSequence, payload, payloadLen);
+
+/** @brief Command description for SetWeeklySchedule
+ *
+ * Command: SetWeeklySchedule
+ * @param numberOfTransitionsForSequence ENUM8
+ * @param timeOfDay INT16U
+ * @param dayOfWeekForSequence DayOfWeek
+ * @param relayStatus BITMAP16
+ * @param modeForSequence ModeForSequence
+ * @param localTemperature INT16S
+ * @param payload INT8U []
+ * @param payloadLen int
+ * @param humidityInPercentage INT8U
+ * @param setpoint INT16S
+ * @param unreadEntries INT16U
+ */
+#define emberAfFillCommandThermostatClusterSetWeeklySchedule(numberOfTransitionsForSequence, timeOfDay, dayOfWeekForSequence,      \
+                                                             relayStatus, modeForSequence, localTemperature, payload, payloadLen,  \
+                                                             humidityInPercentage, setpoint, unreadEntries)                        \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_SET_WEEKLY_SCHEDULE_COMMAND_ID, "uuuuuubuuu", numberOfTransitionsForSequence, timeOfDay,         \
+                              dayOfWeekForSequence, relayStatus, modeForSequence, localTemperature, payload, payloadLen,           \
+                              humidityInPercentage, setpoint, unreadEntries);
+
+/** @brief Command description for GetWeeklySchedule
+ *
+ * Command: GetWeeklySchedule
+ * @param daysToReturn DayOfWeek
+ * @param modeToReturn ModeForSequence
+ */
+#define emberAfFillCommandThermostatClusterGetWeeklySchedule(daysToReturn, modeToReturn)                                           \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_GET_WEEKLY_SCHEDULE_COMMAND_ID, "uu", daysToReturn, modeToReturn);
+
+/** @brief Command description for ClearWeeklySchedule
+ *
+ * Command: ClearWeeklySchedule
+ */
+#define emberAfFillCommandThermostatClusterClearWeeklySchedule()                                                                   \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_CLEAR_WEEKLY_SCHEDULE_COMMAND_ID, "", );
+
+/** @brief Command description for GetRelayStatusLog
+ *
+ * Command: GetRelayStatusLog
+ */
+#define emberAfFillCommandThermostatClusterGetRelayStatusLog()                                                                     \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_GET_RELAY_STATUS_LOG_COMMAND_ID, "", );
+
+/** @brief Command description for MoveToHue
+ *
+ * Command: MoveToHue
+ * @param hue INT8U
+ * @param direction HueDirection
+ * @param transitionTime INT16U
+ * @param optionsMask BITMAP8
+ * @param optionsOverride BITMAP8
+ */
+#define emberAfFillCommandColor                                                                                                    \
+    ControlClusterMoveToHue(hue, direction, transitionTime, optionsMask, optionsOverride) emberAfFillExternalBuffer(               \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_MOVE_TO_HUE_COMMAND_ID, "uuuuu", hue, direction, transitionTime, optionsMask, optionsOverride);
+
+/** @brief Command description for MoveHue
+ *
+ * Command: MoveHue
+ * @param moveMode HueMoveMode
+ * @param rate INT8U
+ * @param optionsMask BITMAP8
+ * @param optionsOverride BITMAP8
+ */
+#define emberAfFillCommandColor                                                                                                    \
+    ControlClusterMoveHue(moveMode, rate, optionsMask, optionsOverride)                                                            \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_MOVE_HUE_COMMAND_ID, "uuuu", moveMode, rate, optionsMask, optionsOverride);
+
+/** @brief Command description for StepHue
+ *
+ * Command: StepHue
+ * @param stepMode HueStepMode
+ * @param stepSize INT8U
+ * @param transitionTime INT8U
+ * @param optionsMask BITMAP8
+ * @param optionsOverride BITMAP8
+ */
+#define emberAfFillCommandColor                                                                                                    \
+    ControlClusterStepHue(stepMode, stepSize, transitionTime, optionsMask, optionsOverride) emberAfFillExternalBuffer(             \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_STEP_HUE_COMMAND_ID, "uuuuu", stepMode, stepSize, transitionTime, optionsMask, optionsOverride);
+
+/** @brief Command description for MoveToSaturation
+ *
+ * Command: MoveToSaturation
+ * @param saturation INT8U
+ * @param transitionTime INT16U
+ * @param optionsMask BITMAP8
+ * @param optionsOverride BITMAP8
+ */
+#define emberAfFillCommandColor                                                                                                    \
+    ControlClusterMoveToSaturation(saturation, transitionTime, optionsMask, optionsOverride) emberAfFillExternalBuffer(            \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_MOVE_TO_SATURATION_COMMAND_ID, "uuuu", saturation, transitionTime, optionsMask, optionsOverride);
+
+/** @brief Command description for MoveSaturation
+ *
+ * Command: MoveSaturation
+ * @param moveMode SaturationMoveMode
+ * @param rate INT8U
+ * @param optionsMask BITMAP8
+ * @param optionsOverride BITMAP8
+ */
+#define emberAfFillCommandColor                                                                                                    \
+    ControlClusterMoveSaturation(moveMode, rate, optionsMask, optionsOverride)                                                     \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_MOVE_SATURATION_COMMAND_ID, "uuuu", moveMode, rate, optionsMask, optionsOverride);
+
+/** @brief Command description for StepSaturation
+ *
+ * Command: StepSaturation
+ * @param stepMode SaturationStepMode
+ * @param stepSize INT8U
+ * @param transitionTime INT8U
+ * @param optionsMask BITMAP8
+ * @param optionsOverride BITMAP8
+ */
+#define emberAfFillCommandColor                                                                                                    \
+    ControlClusterStepSaturation(stepMode, stepSize, transitionTime, optionsMask, optionsOverride) emberAfFillExternalBuffer(      \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_STEP_SATURATION_COMMAND_ID, "uuuuu", stepMode, stepSize, transitionTime, optionsMask, optionsOverride);
+
+/** @brief Command description for MoveToHueAndSaturation
+ *
+ * Command: MoveToHueAndSaturation
+ * @param hue INT8U
+ * @param saturation INT8U
+ * @param transitionTime INT16U
+ * @param optionsMask BITMAP8
+ * @param optionsOverride BITMAP8
+ */
+#define emberAfFillCommandColor                                                                                                    \
+    ControlClusterMoveToHueAndSaturation(hue, saturation, transitionTime, optionsMask, optionsOverride) emberAfFillExternalBuffer( \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_MOVE_TO_HUE_AND_SATURATION_COMMAND_ID, "uuuuu", hue, saturation, transitionTime, optionsMask, optionsOverride);
+
+/** @brief Command description for MoveToColor
+ *
+ * Command: MoveToColor
+ * @param colorX INT16U
+ * @param colorY INT16U
+ * @param transitionTime INT16U
+ * @param optionsMask BITMAP8
+ * @param optionsOverride BITMAP8
+ */
+#define emberAfFillCommandColor                                                                                                    \
+    ControlClusterMoveToColor(colorX, colorY, transitionTime, optionsMask, optionsOverride) emberAfFillExternalBuffer(             \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_MOVE_TO_COLOR_COMMAND_ID, "uuuuu", colorX, colorY, transitionTime, optionsMask, optionsOverride);
+
+/** @brief Command description for MoveColor
+ *
+ * Command: MoveColor
+ * @param rateX INT16S
+ * @param rateY INT16S
+ * @param optionsMask BITMAP8
+ * @param optionsOverride BITMAP8
+ */
+#define emberAfFillCommandColor                                                                                                    \
+    ControlClusterMoveColor(rateX, rateY, optionsMask, optionsOverride)                                                            \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_MOVE_COLOR_COMMAND_ID, "uuuu", rateX, rateY, optionsMask, optionsOverride);
+
+/** @brief Command description for StepColor
+ *
+ * Command: StepColor
+ * @param stepX INT16S
+ * @param stepY INT16S
+ * @param transitionTime INT16U
+ * @param optionsMask BITMAP8
+ * @param optionsOverride BITMAP8
+ */
+#define emberAfFillCommandColor                                                                                                    \
+    ControlClusterStepColor(stepX, stepY, transitionTime, optionsMask, optionsOverride)                                            \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_STEP_COLOR_COMMAND_ID, "uuuuu", stepX, stepY, transitionTime, optionsMask, optionsOverride);
+
+/** @brief Command description for MoveToColorTemperature
+ *
+ * Command: MoveToColorTemperature
+ * @param colorTemperature INT16U
+ * @param transitionTime INT16U
+ * @param optionsMask BITMAP8
+ * @param optionsOverride BITMAP8
+ */
+#define emberAfFillCommandColor                                                                                                    \
+    ControlClusterMoveToColorTemperature(colorTemperature, transitionTime, optionsMask, optionsOverride)                           \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_MOVE_TO_COLOR_TEMPERATURE_COMMAND_ID, "uuuu", colorTemperature, transitionTime, optionsMask, \
+                                  optionsOverride);
+
+/** @brief Command description for EnhancedMoveToHue
+ *
+ * Command: EnhancedMoveToHue
+ * @param enhancedHue INT16U
+ * @param direction HueDirection
+ * @param transitionTime INT16U
+ */
+#define emberAfFillCommandColor                                                                                                    \
+    ControlClusterEnhancedMoveToHue(enhancedHue, direction, transitionTime)                                                        \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_ENHANCED_MOVE_TO_HUE_COMMAND_ID, "uuu", enhancedHue, direction, transitionTime);
+
+/** @brief Command description for EnhancedMoveHue
+ *
+ * Command: EnhancedMoveHue
+ * @param moveMode HueMoveMode
+ * @param rate INT16U
+ */
+#define emberAfFillCommandColor                                                                                                    \
+    ControlClusterEnhancedMoveHue(moveMode, rate)                                                                                  \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_ENHANCED_MOVE_HUE_COMMAND_ID, "uu", moveMode, rate);
+
+/** @brief Command description for EnhancedStepHue
+ *
+ * Command: EnhancedStepHue
+ * @param stepMode HueStepMode
+ * @param stepSize INT16U
+ * @param transitionTime INT16U
+ */
+#define emberAfFillCommandColor                                                                                                    \
+    ControlClusterEnhancedStepHue(stepMode, stepSize, transitionTime)                                                              \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_ENHANCED_STEP_HUE_COMMAND_ID, "uuu", stepMode, stepSize, transitionTime);
+
+/** @brief Command description for EnhancedMoveToHueAndSaturation
+ *
+ * Command: EnhancedMoveToHueAndSaturation
+ * @param enhancedHue INT16U
+ * @param saturation INT8U
+ * @param transitionTime INT16U
+ */
+#define emberAfFillCommandColor                                                                                                    \
+    ControlClusterEnhancedMoveToHueAndSaturation(enhancedHue, saturation, transitionTime) emberAfFillExternalBuffer(               \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_ENHANCED_MOVE_TO_HUE_AND_SATURATION_COMMAND_ID, "uuu", enhancedHue, saturation, transitionTime);
+
+/** @brief Command description for ColorLoopSet
+ *
+ * Command: ColorLoopSet
+ * @param updateFlags ColorLoopUpdateFlags
+ * @param action ColorLoopAction
+ * @param direction ColorLoopDirection
+ * @param time INT16U
+ * @param startHue INT16U
+ */
+#define emberAfFillCommandColor                                                                                                    \
+    ControlClusterColorLoopSet(updateFlags, action, direction, time, startHue)                                                     \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_COLOR_LOOP_SET_COMMAND_ID, "uuuuu", updateFlags, action, direction, time, startHue);
+
+/** @brief Command description for StopMoveStep
+ *
+ * Command: StopMoveStep
+ * @param optionsMask BITMAP8
+ * @param optionsOverride BITMAP8
+ */
+#define emberAfFillCommandColor                                                                                                    \
+    ControlClusterStopMoveStep(optionsMask, optionsOverride)                                                                       \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_STOP_MOVE_STEP_COMMAND_ID, "uu", optionsMask, optionsOverride);
+
+/** @brief Command description for MoveColorTemperature
+ *
+ * Command: MoveColorTemperature
+ * @param moveMode HueMoveMode
+ * @param rate INT16U
+ * @param colorTemperatureMinimum INT16U
+ * @param colorTemperatureMaximum INT16U
+ * @param optionsMask BITMAP8
+ * @param optionsOverride BITMAP8
+ */
+#define emberAfFillCommandColor                                                                                                    \
+    ControlClusterMoveColorTemperature(moveMode, rate, colorTemperatureMinimum, colorTemperatureMaximum, optionsMask,              \
+                                       optionsOverride)                                                                            \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_MOVE_COLOR_TEMPERATURE_COMMAND_ID, "uuuuuu", moveMode, rate, colorTemperatureMinimum,        \
+                                  colorTemperatureMaximum, optionsMask, optionsOverride);
+
+/** @brief Command description for StepColorTemperature
+ *
+ * Command: StepColorTemperature
+ * @param stepMode HueStepMode
+ * @param stepSize INT16U
+ * @param transitionTime INT16U
+ * @param colorTemperatureMinimum INT16U
+ * @param colorTemperatureMaximum INT16U
+ * @param optionsMask BITMAP8
+ * @param optionsOverride BITMAP8
+ */
+#define emberAfFillCommandColor                                                                                                    \
+    ControlClusterStepColorTemperature(stepMode, stepSize, transitionTime, colorTemperatureMinimum, colorTemperatureMaximum,       \
+                                       optionsMask, optionsOverride)                                                               \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_STEP_COLOR_TEMPERATURE_COMMAND_ID, "uuuuuuu", stepMode, stepSize, transitionTime,            \
+                                  colorTemperatureMinimum, colorTemperatureMaximum, optionsMask, optionsOverride);
+
+/** @brief Command description for ZoneEnrollResponse
+ *
+ * Command: ZoneEnrollResponse
+ * @param enrollResponseCode IasEnrollResponseCode
+ * @param zoneStatus IasZoneStatus
+ * @param zoneId INT8U
+ * @param extendedStatus BITMAP8
+ * @param zoneId INT8U
+ * @param delay INT16U
+ */
+#define emberAfFillCommandIAS                                                                                                      \
+    ZoneClusterZoneEnrollResponse(enrollResponseCode, zoneStatus, zoneId, extendedStatus, zoneId, delay)                           \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_ZONE_ENROLL_RESPONSE_COMMAND_ID, "uuuuuu", enrollResponseCode, zoneStatus, zoneId,           \
+                                  extendedStatus, zoneId, delay);
+
+/** @brief Command description for InitiateNormalOperationMode
+ *
+ * Command: InitiateNormalOperationMode
+ * @param zoneType IasZoneType
+ * @param manufacturerCode INT16U
+ */
+#define emberAfFillCommandIAS                                                                                                      \
+    ZoneClusterInitiateNormalOperationMode(zoneType, manufacturerCode)                                                             \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_INITIATE_NORMAL_OPERATION_MODE_COMMAND_ID, "uu", zoneType, manufacturerCode);
+
+/** @brief Command description for InitiateNormalOperationModeResponse
+ *
+ * Command: InitiateNormalOperationModeResponse
+ * @param testModeDuration INT8U
+ * @param currentZoneSensitivityLevel INT8U
+ */
+#define emberAfFillCommandIAS                                                                                                      \
+    ZoneClusterInitiateNormalOperationModeResponse(testModeDuration, currentZoneSensitivityLevel) emberAfFillExternalBuffer(       \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_INITIATE_NORMAL_OPERATION_MODE_RESPONSE_COMMAND_ID, "uu", testModeDuration, currentZoneSensitivityLevel);
+
+/** @brief Command description for InitiateTestModeResponse
+ *
+ * Command: InitiateTestModeResponse
+ */
+#define emberAfFillCommandIAS                                                                                                      \
+    ZoneClusterInitiateTestModeResponse() emberAfFillExternalBuffer(mask,                                                          \
+                                                                                                                                   \
+                                                                    ZCL_INITIATE_TEST_MODE_RESPONSE_COMMAND_ID, "", );
+
+/** @brief Command description for Arm
+ *
+ * Command: Arm
+ * @param armMode IasAceArmMode
+ * @param armNotification IasAceArmNotification
+ * @param armDisarmCode CHAR_STRING
+ * @param zoneId INT8U
+ */
+#define emberAfFillCommandIAS                                                                                                      \
+    ACEClusterArm(armMode, armNotification, armDisarmCode, zoneId)                                                                 \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_ARM_COMMAND_ID, "uuuu", armMode, armNotification, armDisarmCode, zoneId);
+
+/** @brief Command description for Bypass
+ *
+ * Command: Bypass
+ * @param numberOfZones INT8U
+ * @param section0 BITMAP16
+ * @param zoneIds INT8U []
+ * @param zoneIdsLen int
+ * @param section1 BITMAP16
+ * @param armDisarmCode CHAR_STRING
+ * @param section2 BITMAP16
+ * @param section3 BITMAP16
+ * @param section4 BITMAP16
+ * @param section5 BITMAP16
+ * @param section6 BITMAP16
+ * @param section7 BITMAP16
+ * @param section8 BITMAP16
+ * @param section9 BITMAP16
+ * @param section10 BITMAP16
+ * @param section11 BITMAP16
+ * @param section12 BITMAP16
+ * @param section13 BITMAP16
+ * @param section14 BITMAP16
+ * @param section15 BITMAP16
+ */
+#define emberAfFillCommandIAS                                                                                                      \
+    ACEClusterBypass(numberOfZones, section0, zoneIds, zoneIdsLen, section1, armDisarmCode, section2, section3, section4,          \
+                     section5, section6, section7, section8, section9, section10, section11, section12, section13, section14,      \
+                     section15)                                                                                                    \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_BYPASS_COMMAND_ID, "uubuuuuuuuuuuuuuuuu", numberOfZones, section0, zoneIds, zoneIdsLen,      \
+                                  section1, armDisarmCode, section2, section3, section4, section5, section6, section7, section8,   \
+                                  section9, section10, section11, section12, section13, section14, section15);
+
+/** @brief Command description for Emergency
+ *
+ * Command: Emergency
+ * @param zoneId INT8U
+ * @param zoneType IasZoneType
+ * @param ieeeAddress IEEE_ADDRESS
+ * @param zoneLabel CHAR_STRING
+ */
+#define emberAfFillCommandIAS                                                                                                      \
+    ACEClusterEmergency(zoneId, zoneType, ieeeAddress, zoneLabel)                                                                  \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_EMERGENCY_COMMAND_ID, "uuuu", zoneId, zoneType, ieeeAddress, zoneLabel);
+
+/** @brief Command description for Fire
+ *
+ * Command: Fire
+ * @param zoneId INT8U
+ * @param zoneStatus ENUM16
+ * @param audibleNotification IasAceAudibleNotification
+ * @param zoneLabel CHAR_STRING
+ */
+#define emberAfFillCommandIAS                                                                                                      \
+    ACEClusterFire(zoneId, zoneStatus, audibleNotification, zoneLabel)                                                             \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_FIRE_COMMAND_ID, "uuuu", zoneId, zoneStatus, audibleNotification, zoneLabel);
+
+/** @brief Command description for Panic
+ *
+ * Command: Panic
+ * @param panelStatus IasAcePanelStatus
+ * @param secondsRemaining INT8U
+ * @param audibleNotification IasAceAudibleNotification
+ * @param alarmStatus IasAceAlarmStatus
+ */
+#define emberAfFillCommandIAS                                                                                                      \
+    ACEClusterPanic(panelStatus, secondsRemaining, audibleNotification, alarmStatus)                                               \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_PANIC_COMMAND_ID, "uuuu", panelStatus, secondsRemaining, audibleNotification, alarmStatus);
+
+/** @brief Command description for GetZoneIdMap
+ *
+ * Command: GetZoneIdMap
+ * @param panelStatus IasAcePanelStatus
+ * @param secondsRemaining INT8U
+ * @param audibleNotification IasAceAudibleNotification
+ * @param alarmStatus IasAceAlarmStatus
+ */
+#define emberAfFillCommandIAS                                                                                                      \
+    ACEClusterGetZoneIdMap(panelStatus, secondsRemaining, audibleNotification, alarmStatus) emberAfFillExternalBuffer(             \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_GET_ZONE_ID_MAP_COMMAND_ID, "uuuu", panelStatus, secondsRemaining, audibleNotification, alarmStatus);
+
+/** @brief Command description for GetZoneInformation
+ *
+ * Command: GetZoneInformation
+ * @param zoneId INT8U
+ * @param numberOfZones INT8U
+ * @param zoneIds INT8U []
+ * @param zoneIdsLen int
+ */
+#define emberAfFillCommandIAS                                                                                                      \
+    ACEClusterGetZoneInformation(zoneId, numberOfZones, zoneIds, zoneIdsLen)                                                       \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_ZONE_INFORMATION_COMMAND_ID, "uub", zoneId, numberOfZones, zoneIds, zoneIdsLen);
+
+/** @brief Command description for GetPanelStatus
+ *
+ * Command: GetPanelStatus
+ * @param numberOfZones INT8U
+ * @param bypassResult IasAceBypassResult []
+ * @param bypassResultLen int
+ */
+#define emberAfFillCommandIAS                                                                                                      \
+    ACEClusterGetPanelStatus(numberOfZones, bypassResult, bypassResultLen)                                                         \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_PANEL_STATUS_COMMAND_ID, "ub", numberOfZones, bypassResult, bypassResultLen);
+
+/** @brief Command description for GetBypassedZoneList
+ *
+ * Command: GetBypassedZoneList
+ * @param zoneStatusComplete BOOLEAN
+ * @param numberOfZones INT8U
+ * @param zoneStatusResult IasAceZoneStatusResult []
+ * @param zoneStatusResultLen int
+ */
+#define emberAfFillCommandIAS                                                                                                      \
+    ACEClusterGetBypassedZoneList(zoneStatusComplete, numberOfZones, zoneStatusResult, zoneStatusResultLen)                        \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_BYPASSED_ZONE_LIST_COMMAND_ID, "uub", zoneStatusComplete, numberOfZones,                 \
+                                  zoneStatusResult, zoneStatusResultLen);
+
+/** @brief Command description for GetZoneStatus
+ *
+ * Command: GetZoneStatus
+ * @param startingZoneId INT8U
+ * @param maxNumberOfZoneIds INT8U
+ * @param zoneStatusMaskFlag BOOLEAN
+ * @param zoneStatusMask BITMAP16
+ */
+#define emberAfFillCommandIAS                                                                                                      \
+    ACEClusterGetZoneStatus(startingZoneId, maxNumberOfZoneIds, zoneStatusMaskFlag, zoneStatusMask) emberAfFillExternalBuffer(     \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_GET_ZONE_STATUS_COMMAND_ID, "uuuu", startingZoneId, maxNumberOfZoneIds, zoneStatusMaskFlag, zoneStatusMask);
+
+/** @brief Command description for StartWarning
+ *
+ * Command: StartWarning
+ * @param warningInfo WarningInfo
+ * @param warningDuration INT16U
+ * @param strobeDutyCycle INT8U
+ * @param strobeLevel ENUM8
+ */
+#define emberAfFillCommandIAS                                                                                                      \
+    WDClusterStartWarning(warningInfo, warningDuration, strobeDutyCycle, strobeLevel) emberAfFillExternalBuffer(                   \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_START_WARNING_COMMAND_ID, "uuuu", warningInfo, warningDuration, strobeDutyCycle, strobeLevel);
+
+/** @brief Command description for Squawk
+ *
+ * Command: Squawk
+ * @param squawkInfo SquawkInfo
+ */
+#define emberAfFillCommandIAS                                                                                                      \
+    WDClusterSquawk(squawkInfo) emberAfFillExternalBuffer(mask,                                                                    \
+                                                                                                                                   \
+                                                          ZCL_SQUAWK_COMMAND_ID, "u", squawkInfo);
+
+/** @brief Command description for MatchProtocolAddress
+ *
+ * Command: MatchProtocolAddress
+ * @param protocolAddress OCTET_STRING
+ * @param deviceIeeeAddress IEEE_ADDRESS
+ * @param protocolAddress OCTET_STRING
+ */
+#define emberAfFillCommandGeneric                                                                                                  \
+    TunnelClusterMatchProtocolAddress(protocolAddress, deviceIeeeAddress, protocolAddress) emberAfFillExternalBuffer(              \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_MATCH_PROTOCOL_ADDRESS_COMMAND_ID, "uuu", protocolAddress, deviceIeeeAddress, protocolAddress);
+
+/** @brief Command description for AdvertiseProtocolAddress
+ *
+ * Command: AdvertiseProtocolAddress
+ * @param protocolAddress OCTET_STRING
+ */
+#define emberAfFillCommandGeneric                                                                                                  \
+    TunnelClusterAdvertiseProtocolAddress(protocolAddress)                                                                         \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_ADVERTISE_PROTOCOL_ADDRESS_COMMAND_ID, "u", protocolAddress);
+
+/** @brief Command description for TransferNpdu
+ *
+ * Command: TransferNpdu
+ * @param npdu DATA8 []
+ * @param npduLen int
+ */
+#define emberAfFillCommandBACnet                                                                                                   \
+    Protocol TunnelClusterTransferNpdu(npdu, npduLen) emberAfFillExternalBuffer(mask,                                              \
+                                                                                                                                   \
+                                                                                ZCL_TRANSFER_NPDU_COMMAND_ID, "b", npdu, npduLen);
+
+/** @brief Command description for TransferAPDU
+ *
+ * Command: TransferAPDU
+ * @param apdu OCTET_STRING
+ */
+#define emberAfFillCommand11073                                                                                                    \
+    Protocol TunnelClusterTransferAPDU(apdu) emberAfFillExternalBuffer(mask,                                                       \
+                                                                                                                                   \
+                                                                       ZCL_TRANSFER_APDU_COMMAND_ID, "u", apdu);
+
+/** @brief Command description for ConnectRequest
+ *
+ * Command: ConnectRequest
+ * @param connectControl 11073ConnectRequestConnectControl
+ * @param idleTimeout INT16U
+ * @param managerTarget IEEE_ADDRESS
+ * @param managerEndpoint INT8U
+ */
+#define emberAfFillCommand11073                                                                                                    \
+    Protocol TunnelClusterConnectRequest(connectControl, idleTimeout, managerTarget, managerEndpoint) emberAfFillExternalBuffer(   \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_CONNECT_REQUEST_COMMAND_ID, "uuuu", connectControl, idleTimeout, managerTarget, managerEndpoint);
+
+/** @brief Command description for DisconnectRequest
+ *
+ * Command: DisconnectRequest
+ * @param managerIEEEAddress IEEE_ADDRESS
+ */
+#define emberAfFillCommand11073                                                                                                    \
+    Protocol TunnelClusterDisconnectRequest(managerIEEEAddress)                                                                    \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_DISCONNECT_REQUEST_COMMAND_ID, "u", managerIEEEAddress);
+
+/** @brief Command description for ConnectStatusNotification
+ *
+ * Command: ConnectStatusNotification
+ * @param connectStatus 11073TunnelConnectionStatus
+ */
+#define emberAfFillCommand11073                                                                                                    \
+    Protocol TunnelClusterConnectStatusNotification(connectStatus)                                                                 \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_CONNECT_STATUS_NOTIFICATION_COMMAND_ID, "u", connectStatus);
+
+/** @brief Command description for TransferApdu
+ *
+ * Command: TransferApdu
+ * @param apdu OCTET_STRING
+ */
+#define emberAfFillCommandISO                                                                                                      \
+    7816 Protocol TunnelClusterTransferApdu(apdu) emberAfFillExternalBuffer(mask,                                                  \
+                                                                                                                                   \
+                                                                            ZCL_TRANSFER_APDU_COMMAND_ID, "u", apdu);
+
+/** @brief Command description for InsertSmartCard
+ *
+ * Command: InsertSmartCard
+ */
+#define emberAfFillCommandISO                                                                                                      \
+    7816 Protocol TunnelClusterInsertSmartCard() emberAfFillExternalBuffer(mask,                                                   \
+                                                                                                                                   \
+                                                                           ZCL_INSERT_SMART_CARD_COMMAND_ID, "", );
+
+/** @brief Command description for ExtractSmartCard
+ *
+ * Command: ExtractSmartCard
+ */
+#define emberAfFillCommandISO                                                                                                      \
+    7816 Protocol TunnelClusterExtractSmartCard() emberAfFillExternalBuffer(mask,                                                  \
+                                                                                                                                   \
+                                                                            ZCL_EXTRACT_SMART_CARD_COMMAND_ID, "", );
+
+/** @brief Command description for PublishPrice
+ *
+ * Command: PublishPrice
+ * @param providerId INT32U
+ * @param commandOptions AmiCommandOptions
+ * @param rateLabel OCTET_STRING
+ * @param issuerEventId INT32U
+ * @param currentTime UTC_TIME
+ * @param unitOfMeasure AmiUnitOfMeasure
+ * @param currency INT16U
+ * @param priceTrailingDigitAndPriceTier PriceTrailingDigitAndPriceTier
+ * @param numberOfPriceTiersAndRegisterTier PriceNumberOfPriceTiersAndRegisterTier
+ * @param startTime UTC_TIME
+ * @param durationInMinutes INT16U
+ * @param price INT32U
+ * @param priceRatio INT8U
+ * @param generationPrice INT32U
+ * @param generationPriceRatio INT8U
+ * @param alternateCostDelivered INT32U
+ * @param alternateCostUnit AlternateCostUnit
+ * @param alternateCostTrailingDigit AlternateCostTrailingDigit
+ * @param numberOfBlockThresholds INT8U
+ * @param priceControl PriceControlMask
+ * @param numberOfGenerationTiers INT8U
+ * @param generationTier GenerationTier
+ * @param extendedNumberOfPriceTiers ExtendedNumberOfPriceTiers
+ * @param extendedPriceTier ExtendedPriceTier
+ * @param extendedRegisterTier ExtendedRegisterTier
+ */
+#define emberAfFillCommandPriceClusterPublishPrice(                                                                                \
+    providerId, commandOptions, rateLabel, issuerEventId, currentTime, unitOfMeasure, currency, priceTrailingDigitAndPriceTier,    \
+    numberOfPriceTiersAndRegisterTier, startTime, durationInMinutes, price, priceRatio, generationPrice, generationPriceRatio,     \
+    alternateCostDelivered, alternateCostUnit, alternateCostTrailingDigit, numberOfBlockThresholds, priceControl,                  \
+    numberOfGenerationTiers, generationTier, extendedNumberOfPriceTiers, extendedPriceTier, extendedRegisterTier)                  \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_PUBLISH_PRICE_COMMAND_ID, "uuuuuuuuuuuuuuuuuuuuuuuuu", providerId, commandOptions, rateLabel,    \
+                              issuerEventId, currentTime, unitOfMeasure, currency, priceTrailingDigitAndPriceTier,                 \
+                              numberOfPriceTiersAndRegisterTier, startTime, durationInMinutes, price, priceRatio, generationPrice, \
+                              generationPriceRatio, alternateCostDelivered, alternateCostUnit, alternateCostTrailingDigit,         \
+                              numberOfBlockThresholds, priceControl, numberOfGenerationTiers, generationTier,                      \
+                              extendedNumberOfPriceTiers, extendedPriceTier, extendedRegisterTier);
+
+/** @brief Command description for PublishBlockPeriod
+ *
+ * Command: PublishBlockPeriod
+ * @param providerId INT32U
+ * @param startTime UTC_TIME
+ * @param issuerEventId INT32U
+ * @param numberOfEvents INT8U
+ * @param blockPeriodStartTime UTC_TIME
+ * @param blockPeriodDuration INT24U
+ * @param numberOfPriceTiersAndNumberOfBlockThresholds BITMAP8
+ * @param blockPeriodControl BlockPeriodControl
+ * @param blockPeriodDurationType BlockPeriodDurationType
+ * @param tariffType TariffType
+ * @param tariffResolutionPeriod TariffResolutionPeriod
+ */
+#define emberAfFillCommandPriceClusterPublishBlockPeriod(                                                                          \
+    providerId, startTime, issuerEventId, numberOfEvents, blockPeriodStartTime, blockPeriodDuration,                               \
+    numberOfPriceTiersAndNumberOfBlockThresholds, blockPeriodControl, blockPeriodDurationType, tariffType, tariffResolutionPeriod) \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_PUBLISH_BLOCK_PERIOD_COMMAND_ID, "uuuuuuuuuuu", providerId, startTime, issuerEventId,            \
+                              numberOfEvents, blockPeriodStartTime, blockPeriodDuration,                                           \
+                              numberOfPriceTiersAndNumberOfBlockThresholds, blockPeriodControl, blockPeriodDurationType,           \
+                              tariffType, tariffResolutionPeriod);
+
+/** @brief Command description for PublishConversionFactor
+ *
+ * Command: PublishConversionFactor
+ * @param issuerEventId INT32U
+ * @param providerId INT32U
+ * @param startTime UTC_TIME
+ * @param issuerEventId INT32U
+ * @param conversionFactor INT32U
+ * @param priceAckTime UTC_TIME
+ * @param conversionFactorTrailingDigit ConversionFactorTrailingDigit
+ * @param control PriceControlMask
+ */
+#define emberAfFillCommandPriceClusterPublishConversionFactor(                                                                     \
+    issuerEventId, providerId, startTime, issuerEventId, conversionFactor, priceAckTime, conversionFactorTrailingDigit, control)   \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_PUBLISH_CONVERSION_FACTOR_COMMAND_ID, "uuuuuuuu", issuerEventId, providerId, startTime,          \
+                              issuerEventId, conversionFactor, priceAckTime, conversionFactorTrailingDigit, control);
+
+/** @brief Command description for PublishCalorificValue
+ *
+ * Command: PublishCalorificValue
+ * @param issuerEventId INT32U
+ * @param startTime UTC_TIME
+ * @param startTime UTC_TIME
+ * @param numberOfEvents INT8U
+ * @param calorificValue INT32U
+ * @param tariffType TariffType
+ * @param calorificValueUnit CalorificValueUnit
+ * @param calorificValueTrailingDigit CalorificValueTrailingDigit
+ */
+#define emberAfFillCommandPriceClusterPublishCalorificValue(issuerEventId, startTime, startTime, numberOfEvents, calorificValue,   \
+                                                            tariffType, calorificValueUnit, calorificValueTrailingDigit)           \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_PUBLISH_CALORIFIC_VALUE_COMMAND_ID, "uuuuuuuu", issuerEventId, startTime, startTime,             \
+                              numberOfEvents, calorificValue, tariffType, calorificValueUnit, calorificValueTrailingDigit);
+
+/** @brief Command description for PublishTariffInformation
+ *
+ * Command: PublishTariffInformation
+ * @param providerId INT32U
+ * @param earliestStartTime UTC_TIME
+ * @param issuerEventId INT32U
+ * @param minIssuerEventId INT32U
+ * @param issuerTariffId INT32U
+ * @param numberOfCommands INT8U
+ * @param startTime UTC_TIME
+ * @param tariffTypeChargingScheme TariffTypeChargingScheme
+ * @param tariffLabel OCTET_STRING
+ * @param numberOfPriceTiersInUse INT8U
+ * @param numberOfBlockThresholdsInUse INT8U
+ * @param unitOfMeasure AmiUnitOfMeasure
+ * @param currency INT16U
+ * @param priceTrailingDigit PriceTrailingDigit
+ * @param standingCharge INT32U
+ * @param tierBlockMode TierBlockMode
+ * @param blockThresholdMultiplier INT24U
+ * @param blockThresholdDivisor INT24U
+ */
+#define emberAfFillCommandPriceClusterPublishTariffInformation(                                                                    \
+    providerId, earliestStartTime, issuerEventId, minIssuerEventId, issuerTariffId, numberOfCommands, startTime,                   \
+    tariffTypeChargingScheme, tariffLabel, numberOfPriceTiersInUse, numberOfBlockThresholdsInUse, unitOfMeasure, currency,         \
+    priceTrailingDigit, standingCharge, tierBlockMode, blockThresholdMultiplier, blockThresholdDivisor)                            \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_PUBLISH_TARIFF_INFORMATION_COMMAND_ID, "uuuuuuuuuuuuuuuuuu", providerId, earliestStartTime,      \
+                              issuerEventId, minIssuerEventId, issuerTariffId, numberOfCommands, startTime,                        \
+                              tariffTypeChargingScheme, tariffLabel, numberOfPriceTiersInUse, numberOfBlockThresholdsInUse,        \
+                              unitOfMeasure, currency, priceTrailingDigit, standingCharge, tierBlockMode,                          \
+                              blockThresholdMultiplier, blockThresholdDivisor);
+
+/** @brief Command description for PublishPriceMatrix
+ *
+ * Command: PublishPriceMatrix
+ * @param providerId INT32U
+ * @param earliestStartTime UTC_TIME
+ * @param issuerEventId INT32U
+ * @param minIssuerEventId INT32U
+ * @param startTime UTC_TIME
+ * @param numberOfCommands INT8U
+ * @param issuerTariffId INT32U
+ * @param commandIndex INT8U
+ * @param numberOfCommands INT8U
+ * @param subPayloadControl PriceMatrixSubPayloadControl
+ * @param payload PriceMatrixSubPayload []
+ * @param payloadLen int
+ */
+#define emberAfFillCommandPriceClusterPublishPriceMatrix(providerId, earliestStartTime, issuerEventId, minIssuerEventId,           \
+                                                         startTime, numberOfCommands, issuerTariffId, commandIndex,                \
+                                                         numberOfCommands, subPayloadControl, payload, payloadLen)                 \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_PUBLISH_PRICE_MATRIX_COMMAND_ID, "uuuuuuuuuub", providerId, earliestStartTime, issuerEventId,    \
+                              minIssuerEventId, startTime, numberOfCommands, issuerTariffId, commandIndex, numberOfCommands,       \
+                              subPayloadControl, payload, payloadLen);
+
+/** @brief Command description for PublishBlockThresholds
+ *
+ * Command: PublishBlockThresholds
+ * @param providerId INT32U
+ * @param earliestStartTime UTC_TIME
+ * @param issuerEventId INT32U
+ * @param minIssuerEventId INT32U
+ * @param startTime UTC_TIME
+ * @param numberOfCommands INT8U
+ * @param issuerTariffId INT32U
+ * @param tariffType TariffType
+ * @param commandIndex INT8U
+ * @param numberOfCommands INT8U
+ * @param subPayloadControl BlockThresholdSubPayloadControl
+ * @param payload BlockThresholdSubPayload []
+ * @param payloadLen int
+ */
+#define emberAfFillCommandPriceClusterPublishBlockThresholds(                                                                      \
+    providerId, earliestStartTime, issuerEventId, minIssuerEventId, startTime, numberOfCommands, issuerTariffId, tariffType,       \
+    commandIndex, numberOfCommands, subPayloadControl, payload, payloadLen)                                                        \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_PUBLISH_BLOCK_THRESHOLDS_COMMAND_ID, "uuuuuuuuuuub", providerId, earliestStartTime,              \
+                              issuerEventId, minIssuerEventId, startTime, numberOfCommands, issuerTariffId, tariffType,            \
+                              commandIndex, numberOfCommands, subPayloadControl, payload, payloadLen);
+
+/** @brief Command description for PublishCO2Value
+ *
+ * Command: PublishCO2Value
+ * @param providerId INT32U
+ * @param issuerTariffId INT32U
+ * @param issuerEventId INT32U
+ * @param startTime UTC_TIME
+ * @param tariffType TariffType
+ * @param cO2Value INT32U
+ * @param cO2ValueUnit CO2Unit
+ * @param cO2ValueTrailingDigit CO2TrailingDigit
+ */
+#define emberAfFillCommandPriceClusterPublishCO2Value(providerId, issuerTariffId, issuerEventId, startTime, tariffType, cO2Value,  \
+                                                      cO2ValueUnit, cO2ValueTrailingDigit)                                         \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_PUBLISH_CO2_VALUE_COMMAND_ID, "uuuuuuuu", providerId, issuerTariffId, issuerEventId, startTime,  \
+                              tariffType, cO2Value, cO2ValueUnit, cO2ValueTrailingDigit);
+
+/** @brief Command description for PublishTierLabels
+ *
+ * Command: PublishTierLabels
+ * @param providerId INT32U
+ * @param issuerTariffId INT32U
+ * @param issuerEventId INT32U
+ * @param issuerTariffId INT32U
+ * @param commandIndex INT8U
+ * @param numberOfCommands INT8U
+ * @param numberOfLabels INT8U
+ * @param tierLabelsPayload INT8U []
+ * @param tierLabelsPayloadLen int
+ */
+#define emberAfFillCommandPriceClusterPublishTierLabels(providerId, issuerTariffId, issuerEventId, issuerTariffId, commandIndex,   \
+                                                        numberOfCommands, numberOfLabels, tierLabelsPayload, tierLabelsPayloadLen) \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_PUBLISH_TIER_LABELS_COMMAND_ID, "uuuuuuub", providerId, issuerTariffId, issuerEventId,           \
+                              issuerTariffId, commandIndex, numberOfCommands, numberOfLabels, tierLabelsPayload,                   \
+                              tierLabelsPayloadLen);
+
+/** @brief Command description for PublishBillingPeriod
+ *
+ * Command: PublishBillingPeriod
+ * @param providerId INT32U
+ * @param earliestStartTime UTC_TIME
+ * @param issuerEventId INT32U
+ * @param minIssuerEventId INT32U
+ * @param billingPeriodStartTime UTC_TIME
+ * @param numberOfCommands INT8U
+ * @param billingPeriodDuration BillingPeriodDuration
+ * @param tariffType TariffType
+ * @param billingPeriodDurationType BillingPeriodDurationType
+ * @param tariffType TariffType
+ */
+#define emberAfFillCommandPriceClusterPublishBillingPeriod(providerId, earliestStartTime, issuerEventId, minIssuerEventId,         \
+                                                           billingPeriodStartTime, numberOfCommands, billingPeriodDuration,        \
+                                                           tariffType, billingPeriodDurationType, tariffType)                      \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_PUBLISH_BILLING_PERIOD_COMMAND_ID, "uuuuuuuuuu", providerId, earliestStartTime, issuerEventId,   \
+                              minIssuerEventId, billingPeriodStartTime, numberOfCommands, billingPeriodDuration, tariffType,       \
+                              billingPeriodDurationType, tariffType);
+
+/** @brief Command description for PublishConsolidatedBill
+ *
+ * Command: PublishConsolidatedBill
+ * @param providerId INT32U
+ * @param issuerTariffId INT32U
+ * @param issuerEventId INT32U
+ * @param billingPeriodStartTime UTC_TIME
+ * @param billingPeriodDuration BillingPeriodDuration
+ * @param billingPeriodDurationType BillingPeriodDurationType
+ * @param tariffType TariffType
+ * @param consolidatedBill INT32U
+ * @param currency INT16U
+ * @param billTrailingDigit BillTrailingDigit
+ */
+#define emberAfFillCommandPriceClusterPublishConsolidatedBill(providerId, issuerTariffId, issuerEventId, billingPeriodStartTime,   \
+                                                              billingPeriodDuration, billingPeriodDurationType, tariffType,        \
+                                                              consolidatedBill, currency, billTrailingDigit)                       \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_PUBLISH_CONSOLIDATED_BILL_COMMAND_ID, "uuuuuuuuuu", providerId, issuerTariffId, issuerEventId,   \
+                              billingPeriodStartTime, billingPeriodDuration, billingPeriodDurationType, tariffType,                \
+                              consolidatedBill, currency, billTrailingDigit);
+
+/** @brief Command description for PublishCppEvent
+ *
+ * Command: PublishCppEvent
+ * @param providerId INT32U
+ * @param earliestStartTime UTC_TIME
+ * @param issuerEventId INT32U
+ * @param minIssuerEventId INT32U
+ * @param startTime UTC_TIME
+ * @param numberOfCommands INT8U
+ * @param durationInMinutes INT16U
+ * @param tariffType TariffType
+ * @param tariffType TariffType
+ * @param cppPriceTier CppPriceTier
+ * @param cppAuth PublishCppEventCppAuth
+ */
+#define emberAfFillCommandPriceClusterPublishCppEvent(providerId, earliestStartTime, issuerEventId, minIssuerEventId, startTime,   \
+                                                      numberOfCommands, durationInMinutes, tariffType, tariffType, cppPriceTier,   \
+                                                      cppAuth)                                                                     \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_PUBLISH_CPP_EVENT_COMMAND_ID, "uuuuuuuuuuu", providerId, earliestStartTime, issuerEventId,       \
+                              minIssuerEventId, startTime, numberOfCommands, durationInMinutes, tariffType, tariffType,            \
+                              cppPriceTier, cppAuth);
+
+/** @brief Command description for PublishCreditPayment
+ *
+ * Command: PublishCreditPayment
+ * @param providerId INT32U
+ * @param earliestStartTime UTC_TIME
+ * @param issuerEventId INT32U
+ * @param minIssuerEventId INT32U
+ * @param creditPaymentDueDate UTC_TIME
+ * @param numberOfCommands INT8U
+ * @param creditPaymentOverDueAmount INT32U
+ * @param tariffType TariffType
+ * @param creditPaymentStatus CreditPaymentStatus
+ * @param creditPayment INT32U
+ * @param creditPaymentDate UTC_TIME
+ * @param creditPaymentRef OCTET_STRING
+ */
+#define emberAfFillCommandPriceClusterPublishCreditPayment(                                                                        \
+    providerId, earliestStartTime, issuerEventId, minIssuerEventId, creditPaymentDueDate, numberOfCommands,                        \
+    creditPaymentOverDueAmount, tariffType, creditPaymentStatus, creditPayment, creditPaymentDate, creditPaymentRef)               \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_PUBLISH_CREDIT_PAYMENT_COMMAND_ID, "uuuuuuuuuuuu", providerId, earliestStartTime, issuerEventId, \
+                              minIssuerEventId, creditPaymentDueDate, numberOfCommands, creditPaymentOverDueAmount, tariffType,    \
+                              creditPaymentStatus, creditPayment, creditPaymentDate, creditPaymentRef);
+
+/** @brief Command description for PublishCurrencyConversion
+ *
+ * Command: PublishCurrencyConversion
+ * @param providerId INT32U
+ * @param issuerEventId INT32U
+ * @param issuerEventId INT32U
+ * @param cppAuth CppEventResponseCppAuth
+ * @param startTime UTC_TIME
+ * @param oldCurrency INT16U
+ * @param newCurrency INT16U
+ * @param conversionFactor INT32U
+ * @param conversionFactorTrailingDigit ConversionFactorTrailingDigit
+ * @param currencyChangeControlFlags CurrencyChangeControl
+ */
+#define emberAfFillCommandPriceClusterPublishCurrencyConversion(providerId, issuerEventId, issuerEventId, cppAuth, startTime,      \
+                                                                oldCurrency, newCurrency, conversionFactor,                        \
+                                                                conversionFactorTrailingDigit, currencyChangeControlFlags)         \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_PUBLISH_CURRENCY_CONVERSION_COMMAND_ID, "uuuuuuuuuu", providerId, issuerEventId, issuerEventId,  \
+                              cppAuth, startTime, oldCurrency, newCurrency, conversionFactor, conversionFactorTrailingDigit,       \
+                              currencyChangeControlFlags);
+
+/** @brief Command description for CancelTariff
+ *
+ * Command: CancelTariff
+ * @param providerId INT32U
+ * @param latestEndTime UTC_TIME
+ * @param issuerTariffId INT32U
+ * @param numberOfRecords INT8U
+ * @param tariffType TariffType
+ */
+#define emberAfFillCommandPriceClusterCancelTariff(providerId, latestEndTime, issuerTariffId, numberOfRecords, tariffType)         \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_CANCEL_TARIFF_COMMAND_ID, "uuuuu", providerId, latestEndTime, issuerTariffId, numberOfRecords,   \
+                              tariffType);
+
+/** @brief Command description for GetCurrencyConversionCommand
+ *
+ * Command: GetCurrencyConversionCommand
+ */
+#define emberAfFillCommandPriceClusterGetCurrencyConversionCommand()                                                               \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_GET_CURRENCY_CONVERSION_COMMAND_COMMAND_ID, "", );
+
+/** @brief Command description for GetTariffCancellation
+ *
+ * Command: GetTariffCancellation
+ */
+#define emberAfFillCommandPriceClusterGetTariffCancellation()                                                                      \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_GET_TARIFF_CANCELLATION_COMMAND_ID, "", );
+
+/** @brief Command description for LoadControlEvent
+ *
+ * Command: LoadControlEvent
+ * @param issuerEventId INT32U
+ * @param issuerEventId INT32U
+ * @param deviceClass AmiDeviceClass
+ * @param eventStatus AmiEventStatus
+ * @param utilityEnrollmentGroup INT8U
+ * @param eventStatusTime UTC_TIME
+ * @param startTime UTC_TIME
+ * @param criticalityLevelApplied AmiCriticalityLevel
+ * @param durationInMinutes INT16U
+ * @param coolingTemperatureSetPointApplied INT16U
+ * @param criticalityLevel AmiCriticalityLevel
+ * @param heatingTemperatureSetPointApplied INT16U
+ * @param coolingTemperatureOffset INT8U
+ * @param averageLoadAdjustmentPercentageApplied INT8S
+ * @param heatingTemperatureOffset INT8U
+ * @param dutyCycleApplied INT8U
+ * @param coolingTemperatureSetPoint INT16S
+ * @param eventControl AmiEventControl
+ * @param heatingTemperatureSetPoint INT16S
+ * @param signatureType SignatureType
+ * @param averageLoadAdjustmentPercentage INT8S
+ * @param signature Signature
+ * @param dutyCycle INT8U
+ * @param eventControl AmiEventControl
+ */
+#define emberAfFillCommandDemand                                                                                                   \
+    Response and Load ControlClusterLoadControlEvent(                                                                              \
+        issuerEventId, issuerEventId, deviceClass, eventStatus, utilityEnrollmentGroup, eventStatusTime, startTime,                \
+        criticalityLevelApplied, durationInMinutes, coolingTemperatureSetPointApplied, criticalityLevel,                           \
+        heatingTemperatureSetPointApplied, coolingTemperatureOffset, averageLoadAdjustmentPercentageApplied,                       \
+        heatingTemperatureOffset, dutyCycleApplied, coolingTemperatureSetPoint, eventControl, heatingTemperatureSetPoint,          \
+        signatureType, averageLoadAdjustmentPercentage, signature, dutyCycle, eventControl)                                        \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_LOAD_CONTROL_EVENT_COMMAND_ID, "uuuuuuuuuuuuuuuuuuuuuuuu", issuerEventId, issuerEventId,     \
+                                  deviceClass, eventStatus, utilityEnrollmentGroup, eventStatusTime, startTime,                    \
+                                  criticalityLevelApplied, durationInMinutes, coolingTemperatureSetPointApplied, criticalityLevel, \
+                                  heatingTemperatureSetPointApplied, coolingTemperatureOffset,                                     \
+                                  averageLoadAdjustmentPercentageApplied, heatingTemperatureOffset, dutyCycleApplied,              \
+                                  coolingTemperatureSetPoint, eventControl, heatingTemperatureSetPoint, signatureType,             \
+                                  averageLoadAdjustmentPercentage, signature, dutyCycle, eventControl);
+
+/** @brief Command description for CancelLoadControlEvent
+ *
+ * Command: CancelLoadControlEvent
+ * @param issuerEventId INT32U
+ * @param startTime UTC_TIME
+ * @param deviceClass AmiDeviceClass
+ * @param numberOfEvents INT8U
+ * @param utilityEnrollmentGroup INT8U
+ * @param issuerEventId INT32U
+ * @param cancelControl AmiCancelControl
+ * @param effectiveTime UTC_TIME
+ */
+#define emberAfFillCommandDemand                                                                                                   \
+    Response and Load ControlClusterCancelLoadControlEvent(issuerEventId, startTime, deviceClass, numberOfEvents,                  \
+                                                           utilityEnrollmentGroup, issuerEventId, cancelControl, effectiveTime)    \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_CANCEL_LOAD_CONTROL_EVENT_COMMAND_ID, "uuuuuuuu", issuerEventId, startTime, deviceClass,     \
+                                  numberOfEvents, utilityEnrollmentGroup, issuerEventId, cancelControl, effectiveTime);
+
+/** @brief Command description for CancelAllLoadControlEvents
+ *
+ * Command: CancelAllLoadControlEvents
+ * @param cancelControl AmiCancelControl
+ */
+#define emberAfFillCommandDemand                                                                                                   \
+    Response and Load ControlClusterCancelAllLoadControlEvents(cancelControl)                                                      \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_CANCEL_ALL_LOAD_CONTROL_EVENTS_COMMAND_ID, "u", cancelControl);
+
+/** @brief Command description for GetProfileResponse
+ *
+ * Command: GetProfileResponse
+ * @param endTime UTC_TIME
+ * @param intervalChannel AmiIntervalChannel
+ * @param status AmiGetProfileStatus
+ * @param endTime UTC_TIME
+ * @param profileIntervalPeriod AmiIntervalPeriod
+ * @param numberOfPeriods INT8U
+ * @param numberOfPeriodsDelivered INT8U
+ * @param intervals INT24U []
+ * @param intervalsLen int
+ */
+#define emberAfFillCommandSimple                                                                                                   \
+    MeteringClusterGetProfileResponse(endTime, intervalChannel, status, endTime, profileIntervalPeriod, numberOfPeriods,           \
+                                      numberOfPeriodsDelivered, intervals, intervalsLen)                                           \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_PROFILE_RESPONSE_COMMAND_ID, "uuuuuuub", endTime, intervalChannel, status, endTime,      \
+                                  profileIntervalPeriod, numberOfPeriods, numberOfPeriodsDelivered, intervals, intervalsLen);
+
+/** @brief Command description for RequestMirror
+ *
+ * Command: RequestMirror
+ * @param endpointId INT16U
+ */
+#define emberAfFillCommandSimple                                                                                                   \
+    MeteringClusterRequestMirror(endpointId) emberAfFillExternalBuffer(mask,                                                       \
+                                                                                                                                   \
+                                                                       ZCL_REQUEST_MIRROR_COMMAND_ID, "u", endpointId);
+
+/** @brief Command description for RemoveMirror
+ *
+ * Command: RemoveMirror
+ * @param endpointId INT16U
+ */
+#define emberAfFillCommandSimple                                                                                                   \
+    MeteringClusterRemoveMirror(endpointId) emberAfFillExternalBuffer(mask,                                                        \
+                                                                                                                                   \
+                                                                      ZCL_REMOVE_MIRROR_COMMAND_ID, "u", endpointId);
+
+/** @brief Command description for RequestFastPollModeResponse
+ *
+ * Command: RequestFastPollModeResponse
+ * @param appliedUpdatePeriod INT8U
+ * @param fastPollUpdatePeriod INT8U
+ * @param fastPollModeEndtime UTC_TIME
+ * @param duration INT8U
+ */
+#define emberAfFillCommandSimple                                                                                                   \
+    MeteringClusterRequestFastPollModeResponse(appliedUpdatePeriod, fastPollUpdatePeriod, fastPollModeEndtime, duration)           \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_REQUEST_FAST_POLL_MODE_RESPONSE_COMMAND_ID, "uuuu", appliedUpdatePeriod,                     \
+                                  fastPollUpdatePeriod, fastPollModeEndtime, duration);
+
+/** @brief Command description for ScheduleSnapshotResponse
+ *
+ * Command: ScheduleSnapshotResponse
+ * @param issuerEventId INT32U
+ * @param issuerEventId INT32U
+ * @param snapshotResponsePayload SnapshotResponsePayload []
+ * @param snapshotResponsePayloadLen int
+ * @param commandIndex INT8U
+ * @param commandCount INT8U
+ * @param snapshotSchedulePayload SnapshotSchedulePayload []
+ * @param snapshotSchedulePayloadLen int
+ */
+#define emberAfFillCommandSimple                                                                                                   \
+    MeteringClusterScheduleSnapshotResponse(issuerEventId, issuerEventId, snapshotResponsePayload, snapshotResponsePayloadLen,     \
+                                            commandIndex, commandCount, snapshotSchedulePayload, snapshotSchedulePayloadLen)       \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_SCHEDULE_SNAPSHOT_RESPONSE_COMMAND_ID, "uubuub", issuerEventId, issuerEventId,               \
+                                  snapshotResponsePayload, snapshotResponsePayloadLen, commandIndex, commandCount,                 \
+                                  snapshotSchedulePayload, snapshotSchedulePayloadLen);
+
+/** @brief Command description for TakeSnapshotResponse
+ *
+ * Command: TakeSnapshotResponse
+ * @param snapshotId INT32U
+ * @param snapshotCause SnapshotCause
+ * @param snapshotConfirmation SnapshotConfirmation
+ */
+#define emberAfFillCommandSimple                                                                                                   \
+    MeteringClusterTakeSnapshotResponse(snapshotId, snapshotCause, snapshotConfirmation)                                           \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_TAKE_SNAPSHOT_RESPONSE_COMMAND_ID, "uuu", snapshotId, snapshotCause, snapshotConfirmation);
+
+/** @brief Command description for PublishSnapshot
+ *
+ * Command: PublishSnapshot
+ * @param snapshotId INT32U
+ * @param earliestStartTime UTC_TIME
+ * @param snapshotTime UTC_TIME
+ * @param latestEndTime UTC_TIME
+ * @param totalSnapshotsFound INT8U
+ * @param snapshotOffset INT8U
+ * @param commandIndex INT8U
+ * @param snapshotCause SnapshotCause
+ * @param totalCommands INT8U
+ * @param snapshotCause SnapshotCause
+ * @param snapshotPayloadType SnapshotPayloadType
+ * @param snapshotPayload INT8U []
+ * @param snapshotPayloadLen int
+ */
+#define emberAfFillCommandSimple                                                                                                   \
+    MeteringClusterPublishSnapshot(snapshotId, earliestStartTime, snapshotTime, latestEndTime, totalSnapshotsFound,                \
+                                   snapshotOffset, commandIndex, snapshotCause, totalCommands, snapshotCause, snapshotPayloadType, \
+                                   snapshotPayload, snapshotPayloadLen)                                                            \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_PUBLISH_SNAPSHOT_COMMAND_ID, "uuuuuuuuuuub", snapshotId, earliestStartTime, snapshotTime,    \
+                                  latestEndTime, totalSnapshotsFound, snapshotOffset, commandIndex, snapshotCause, totalCommands,  \
+                                  snapshotCause, snapshotPayloadType, snapshotPayload, snapshotPayloadLen);
+
+/** @brief Command description for GetSampledDataResponse
+ *
+ * Command: GetSampledDataResponse
+ * @param sampleId INT16U
+ * @param issuerEventId INT32U
+ * @param sampleStartTime UTC_TIME
+ * @param startSamplingTime UTC_TIME
+ * @param sampleType SampleType
+ * @param sampleType SampleType
+ * @param sampleRequestInterval INT16U
+ * @param sampleRequestInterval INT16U
+ * @param numberOfSamples INT16U
+ * @param maxNumberOfSamples INT16U
+ * @param samples INT24U []
+ * @param samplesLen int
+ */
+#define emberAfFillCommandSimple                                                                                                   \
+    MeteringClusterGetSampledDataResponse(sampleId, issuerEventId, sampleStartTime, startSamplingTime, sampleType, sampleType,     \
+                                          sampleRequestInterval, sampleRequestInterval, numberOfSamples, maxNumberOfSamples,       \
+                                          samples, samplesLen)                                                                     \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_SAMPLED_DATA_RESPONSE_COMMAND_ID, "uuuuuuuuuub", sampleId, issuerEventId,                \
+                                  sampleStartTime, startSamplingTime, sampleType, sampleType, sampleRequestInterval,               \
+                                  sampleRequestInterval, numberOfSamples, maxNumberOfSamples, samples, samplesLen);
+
+/** @brief Command description for ConfigureMirror
+ *
+ * Command: ConfigureMirror
+ * @param issuerEventId INT32U
+ * @param sampleId INT16U
+ * @param reportingInterval INT24U
+ * @param earliestSampleTime UTC_TIME
+ * @param mirrorNotificationReporting BOOLEAN
+ * @param sampleType SampleType
+ * @param notificationScheme INT8U
+ * @param numberOfSamples INT16U
+ */
+#define emberAfFillCommandSimple                                                                                                   \
+    MeteringClusterConfigureMirror(issuerEventId, sampleId, reportingInterval, earliestSampleTime, mirrorNotificationReporting,    \
+                                   sampleType, notificationScheme, numberOfSamples)                                                \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_CONFIGURE_MIRROR_COMMAND_ID, "uuuuuuuu", issuerEventId, sampleId, reportingInterval,         \
+                                  earliestSampleTime, mirrorNotificationReporting, sampleType, notificationScheme,                 \
+                                  numberOfSamples);
+
+/** @brief Command description for ConfigureNotificationScheme
+ *
+ * Command: ConfigureNotificationScheme
+ * @param issuerEventId INT32U
+ * @param notificationScheme INT8U
+ * @param notificationScheme INT8U
+ * @param notificationFlags BITMAP32 []
+ * @param notificationFlagsLen int
+ * @param notificationFlagOrder BITMAP32
+ */
+#define emberAfFillCommandSimple                                                                                                   \
+    MeteringClusterConfigureNotificationScheme(issuerEventId, notificationScheme, notificationScheme, notificationFlags,           \
+                                               notificationFlagsLen, notificationFlagOrder)                                        \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_CONFIGURE_NOTIFICATION_SCHEME_COMMAND_ID, "uuubu", issuerEventId, notificationScheme,        \
+                                  notificationScheme, notificationFlags, notificationFlagsLen, notificationFlagOrder);
+
+/** @brief Command description for ConfigureNotificationFlags
+ *
+ * Command: ConfigureNotificationFlags
+ * @param issuerEventId INT32U
+ * @param providerId INT32U
+ * @param notificationScheme INT8U
+ * @param issuerEventId INT32U
+ * @param notificationFlagAttributeId INT16U
+ * @param clusterId INT16U
+ * @param manufacturerCode INT16U
+ * @param numberOfCommands INT8U
+ * @param commandIds INT8U []
+ * @param commandIdsLen int
+ */
+#define emberAfFillCommandSimple                                                                                                   \
+    MeteringClusterConfigureNotificationFlags(issuerEventId, providerId, notificationScheme, issuerEventId,                        \
+                                              notificationFlagAttributeId, clusterId, manufacturerCode, numberOfCommands,          \
+                                              commandIds, commandIdsLen)                                                           \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_CONFIGURE_NOTIFICATION_FLAGS_COMMAND_ID, "uuuuuuuub", issuerEventId, providerId,             \
+                                  notificationScheme, issuerEventId, notificationFlagAttributeId, clusterId, manufacturerCode,     \
+                                  numberOfCommands, commandIds, commandIdsLen);
+
+/** @brief Command description for GetNotifiedMessage
+ *
+ * Command: GetNotifiedMessage
+ * @param notificationScheme INT8U
+ * @param providerId INT32U
+ * @param notificationFlagAttributeId INT16U
+ * @param issuerEventId INT32U
+ * @param notificationFlagsN BITMAP32
+ * @param requestDateTime UTC_TIME
+ * @param implementationDateTime UTC_TIME
+ * @param proposedSupplyStatus MeteringSupplyStatus
+ * @param supplyControlBits SupplyControlBits
+ */
+#define emberAfFillCommandSimple                                                                                                   \
+    MeteringClusterGetNotifiedMessage(notificationScheme, providerId, notificationFlagAttributeId, issuerEventId,                  \
+                                      notificationFlagsN, requestDateTime, implementationDateTime, proposedSupplyStatus,           \
+                                      supplyControlBits)                                                                           \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_NOTIFIED_MESSAGE_COMMAND_ID, "uuuuuuuuu", notificationScheme, providerId,                \
+                                  notificationFlagAttributeId, issuerEventId, notificationFlagsN, requestDateTime,                 \
+                                  implementationDateTime, proposedSupplyStatus, supplyControlBits);
+
+/** @brief Command description for SupplyStatusResponse
+ *
+ * Command: SupplyStatusResponse
+ * @param providerId INT32U
+ * @param proposedSupplyStatus ProposedSupplyStatus
+ * @param issuerEventId INT32U
+ * @param implementationDateTime UTC_TIME
+ * @param supplyStatus MeteringSupplyStatus
+ */
+#define emberAfFillCommandSimple                                                                                                   \
+    MeteringClusterSupplyStatusResponse(providerId, proposedSupplyStatus, issuerEventId, implementationDateTime, supplyStatus)     \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_SUPPLY_STATUS_RESPONSE_COMMAND_ID, "uuuuu", providerId, proposedSupplyStatus, issuerEventId, \
+                                  implementationDateTime, supplyStatus);
+
+/** @brief Command description for StartSamplingResponse
+ *
+ * Command: StartSamplingResponse
+ * @param sampleId INT16U
+ * @param issuerEventId INT32U
+ * @param supplyTamperState SupplyStatus
+ * @param supplyDepletionState SupplyStatus
+ * @param supplyUncontrolledFlowState SupplyStatus
+ * @param loadLimitSupplyState SupplyStatus
+ */
+#define emberAfFillCommandSimple                                                                                                   \
+    MeteringClusterStartSamplingResponse(sampleId, issuerEventId, supplyTamperState, supplyDepletionState,                         \
+                                         supplyUncontrolledFlowState, loadLimitSupplyState)                                        \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_START_SAMPLING_RESPONSE_COMMAND_ID, "uuuuuu", sampleId, issuerEventId, supplyTamperState,    \
+                                  supplyDepletionState, supplyUncontrolledFlowState, loadLimitSupplyState);
+
+/** @brief Command description for SetUncontrolledFlowThreshold
+ *
+ * Command: SetUncontrolledFlowThreshold
+ * @param providerId INT32U
+ * @param issuerEventId INT32U
+ * @param uncontrolledFlowThreshold INT16U
+ * @param unitOfMeasure AmiUnitOfMeasure
+ * @param multiplier INT16U
+ * @param divisor INT16U
+ * @param stabilisationPeriod INT8U
+ * @param measurementPeriod INT16U
+ */
+#define emberAfFillCommandSimple                                                                                                   \
+    MeteringClusterSetUncontrolledFlowThreshold(providerId, issuerEventId, uncontrolledFlowThreshold, unitOfMeasure, multiplier,   \
+                                                divisor, stabilisationPeriod, measurementPeriod)                                   \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_SET_UNCONTROLLED_FLOW_THRESHOLD_COMMAND_ID, "uuuuuuuu", providerId, issuerEventId,           \
+                                  uncontrolledFlowThreshold, unitOfMeasure, multiplier, divisor, stabilisationPeriod,              \
+                                  measurementPeriod);
+
+/** @brief Command description for GetLastMessage
+ *
+ * Command: GetLastMessage
+ * @param messageId INT32U
+ * @param messageControl MessagingControlMask
+ * @param startTime UTC_TIME
+ * @param durationInMinutes INT16U
+ * @param message CHAR_STRING
+ * @param optionalExtendedMessageControl MessagingExtendedControlMask
+ */
+#define emberAfFillCommandMessagingClusterGetLastMessage(messageId, messageControl, startTime, durationInMinutes, message,         \
+                                                         optionalExtendedMessageControl)                                           \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_GET_LAST_MESSAGE_COMMAND_ID, "uuuuuu", messageId, messageControl, startTime, durationInMinutes,  \
+                              message, optionalExtendedMessageControl);
+
+/** @brief Command description for CancelMessage
+ *
+ * Command: CancelMessage
+ * @param messageId INT32U
+ * @param messageId INT32U
+ * @param messageControl MessagingControlMask
+ * @param confirmationTime UTC_TIME
+ * @param messageConfirmationControl BITMAP8
+ * @param messageResponse OCTET_STRING
+ */
+#define emberAfFillCommandMessagingClusterCancelMessage(messageId, messageId, messageControl, confirmationTime,                    \
+                                                        messageConfirmationControl, messageResponse)                               \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_CANCEL_MESSAGE_COMMAND_ID, "uuuuuu", messageId, messageId, messageControl, confirmationTime,     \
+                              messageConfirmationControl, messageResponse);
+
+/** @brief Command description for DisplayProtectedMessage
+ *
+ * Command: DisplayProtectedMessage
+ * @param messageId INT32U
+ * @param earliestImplementationTime UTC_TIME
+ * @param messageControl MessagingControlMask
+ * @param startTime UTC_TIME
+ * @param durationInMinutes INT16U
+ * @param message CHAR_STRING
+ * @param optionalExtendedMessageControl MessagingExtendedControlMask
+ */
+#define emberAfFillCommandMessagingClusterDisplayProtectedMessage(                                                                 \
+    messageId, earliestImplementationTime, messageControl, startTime, durationInMinutes, message, optionalExtendedMessageControl)  \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_DISPLAY_PROTECTED_MESSAGE_COMMAND_ID, "uuuuuuu", messageId, earliestImplementationTime,          \
+                              messageControl, startTime, durationInMinutes, message, optionalExtendedMessageControl);
+
+/** @brief Command description for CancelAllMessages
+ *
+ * Command: CancelAllMessages
+ * @param implementationDateTime UTC_TIME
+ */
+#define emberAfFillCommandMessagingClusterCancelAllMessages(implementationDateTime)                                                \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_CANCEL_ALL_MESSAGES_COMMAND_ID, "u", implementationDateTime);
+
+/** @brief Command description for RequestTunnel
+ *
+ * Command: RequestTunnel
+ * @param protocolId INT8U
+ * @param tunnelId INT16U
+ * @param manufacturerCode INT16U
+ * @param tunnelStatus TunnelingTunnelStatus
+ * @param flowControlSupport BOOLEAN
+ * @param maximumIncomingTransferSize INT16U
+ * @param maximumIncomingTransferSize INT16U
+ */
+#define emberAfFillCommandTunnelingClusterRequestTunnel(protocolId, tunnelId, manufacturerCode, tunnelStatus, flowControlSupport,  \
+                                                        maximumIncomingTransferSize, maximumIncomingTransferSize)                  \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_REQUEST_TUNNEL_COMMAND_ID, "uuuuuuu", protocolId, tunnelId, manufacturerCode, tunnelStatus,      \
+                              flowControlSupport, maximumIncomingTransferSize, maximumIncomingTransferSize);
+
+/** @brief Command description for CloseTunnel
+ *
+ * Command: CloseTunnel
+ * @param tunnelId INT16U
+ * @param tunnelId INT16U
+ * @param data INT8U []
+ * @param dataLen int
+ */
+#define emberAfFillCommandTunnelingClusterCloseTunnel(tunnelId, tunnelId, data, dataLen)                                           \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_CLOSE_TUNNEL_COMMAND_ID, "uub", tunnelId, tunnelId, data, dataLen);
+
+/** @brief Command description for TransferDataClientToServer
+ *
+ * Command: TransferDataClientToServer
+ * @param tunnelId INT16U
+ * @param tunnelId INT16U
+ * @param data INT8U []
+ * @param dataLen int
+ * @param transferDataStatus TunnelingTransferDataStatus
+ */
+#define emberAfFillCommandTunnelingClusterTransferDataClientToServer(tunnelId, tunnelId, data, dataLen, transferDataStatus)        \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_TRANSFER_DATA_CLIENT_TO_SERVER_COMMAND_ID, "uubu", tunnelId, tunnelId, data, dataLen,            \
+                              transferDataStatus);
+
+/** @brief Command description for TransferDataErrorClientToServer
+ *
+ * Command: TransferDataErrorClientToServer
+ * @param tunnelId INT16U
+ * @param tunnelId INT16U
+ * @param transferDataStatus TunnelingTransferDataStatus
+ * @param numberOfBytesLeft INT16U
+ */
+#define emberAfFillCommandTunnelingClusterTransferDataErrorClientToServer(tunnelId, tunnelId, transferDataStatus,                  \
+                                                                          numberOfBytesLeft)                                       \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_TRANSFER_DATA_ERROR_CLIENT_TO_SERVER_COMMAND_ID, "uuuu", tunnelId, tunnelId, transferDataStatus, \
+                              numberOfBytesLeft);
+
+/** @brief Command description for AckTransferDataClientToServer
+ *
+ * Command: AckTransferDataClientToServer
+ * @param tunnelId INT16U
+ * @param tunnelId INT16U
+ * @param numberOfBytesLeft INT16U
+ * @param numberOfOctetsLeft INT16U
+ */
+#define emberAfFillCommandTunnelingClusterAckTransferDataClientToServer(tunnelId, tunnelId, numberOfBytesLeft, numberOfOctetsLeft) \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_ACK_TRANSFER_DATA_CLIENT_TO_SERVER_COMMAND_ID, "uuuu", tunnelId, tunnelId, numberOfBytesLeft,    \
+                              numberOfOctetsLeft);
+
+/** @brief Command description for ReadyDataClientToServer
+ *
+ * Command: ReadyDataClientToServer
+ * @param tunnelId INT16U
+ * @param protocolListComplete BOOLEAN
+ * @param numberOfOctetsLeft INT16U
+ * @param protocolCount INT8U
+ * @param protocolList Protocol []
+ * @param protocolListLen int
+ */
+#define emberAfFillCommandTunnelingClusterReadyDataClientToServer(tunnelId, protocolListComplete, numberOfOctetsLeft,              \
+                                                                  protocolCount, protocolList, protocolListLen)                    \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_READY_DATA_CLIENT_TO_SERVER_COMMAND_ID, "uuuub", tunnelId, protocolListComplete,                 \
+                              numberOfOctetsLeft, protocolCount, protocolList, protocolListLen);
+
+/** @brief Command description for GetSupportedTunnelProtocols
+ *
+ * Command: GetSupportedTunnelProtocols
+ * @param protocolOffset INT8U
+ * @param tunnelId INT16U
+ */
+#define emberAfFillCommandTunnelingClusterGetSupportedTunnelProtocols(protocolOffset, tunnelId)                                    \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_GET_SUPPORTED_TUNNEL_PROTOCOLS_COMMAND_ID, "uu", protocolOffset, tunnelId);
+
+/** @brief Command description for SelectAvailableEmergencyCredit
+ *
+ * Command: SelectAvailableEmergencyCredit
+ * @param commandIssueDateTime UTC_TIME
+ * @param originatingDevice OriginatingDevice
+ * @param siteId OCTET_STRING
+ * @param meterSerialNumber OCTET_STRING
+ */
+#define emberAfFillCommandPrepaymentClusterSelectAvailableEmergencyCredit(commandIssueDateTime, originatingDevice, siteId,         \
+                                                                          meterSerialNumber)                                       \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_SELECT_AVAILABLE_EMERGENCY_CREDIT_COMMAND_ID, "uuuu", commandIssueDateTime, originatingDevice,   \
+                              siteId, meterSerialNumber);
+
+/** @brief Command description for PublishPrepaySnapshot
+ *
+ * Command: PublishPrepaySnapshot
+ * @param snapshotId INT32U
+ * @param snapshotTime UTC_TIME
+ * @param totalSnapshotsFound INT8U
+ * @param commandIndex INT8U
+ * @param totalNumberOfCommands INT8U
+ * @param snapshotCause PrepaySnapshotPayloadCause
+ * @param snapshotPayloadType PrepaySnapshotPayloadType
+ * @param snapshotPayload INT8U []
+ * @param snapshotPayloadLen int
+ */
+#define emberAfFillCommandPrepaymentClusterPublishPrepaySnapshot(snapshotId, snapshotTime, totalSnapshotsFound, commandIndex,      \
+                                                                 totalNumberOfCommands, snapshotCause, snapshotPayloadType,        \
+                                                                 snapshotPayload, snapshotPayloadLen)                              \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_PUBLISH_PREPAY_SNAPSHOT_COMMAND_ID, "uuuuuuub", snapshotId, snapshotTime, totalSnapshotsFound,   \
+                              commandIndex, totalNumberOfCommands, snapshotCause, snapshotPayloadType, snapshotPayload,            \
+                              snapshotPayloadLen);
+
+/** @brief Command description for ChangeDebt
+ *
+ * Command: ChangeDebt
+ * @param issuerEventId INT32U
+ * @param friendlyCredit FriendlyCredit
+ * @param debtLabel OCTET_STRING
+ * @param friendlyCreditCalendarId INT32U
+ * @param debtAmount INT32U
+ * @param emergencyCreditLimit INT32U
+ * @param debtRecoveryMethod DebtRecoveryMethod
+ * @param emergencyCreditThreshold INT32U
+ * @param debtAmountType DebtAmountType
+ * @param debtRecoveryStartTime UTC_TIME
+ * @param debtRecoveryCollectionTime INT16U
+ * @param debtRecoveryFrequency DebtRecoveryFrequency
+ * @param debtRecoveryAmount INT32U
+ * @param debtRecoveryBalancePercentage INT16U
+ */
+#define emberAfFillCommandPrepaymentClusterChangeDebt(                                                                             \
+    issuerEventId, friendlyCredit, debtLabel, friendlyCreditCalendarId, debtAmount, emergencyCreditLimit, debtRecoveryMethod,      \
+    emergencyCreditThreshold, debtAmountType, debtRecoveryStartTime, debtRecoveryCollectionTime, debtRecoveryFrequency,            \
+    debtRecoveryAmount, debtRecoveryBalancePercentage)                                                                             \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_CHANGE_DEBT_COMMAND_ID, "uuuuuuuuuuuuuu", issuerEventId, friendlyCredit, debtLabel,              \
+                              friendlyCreditCalendarId, debtAmount, emergencyCreditLimit, debtRecoveryMethod,                      \
+                              emergencyCreditThreshold, debtAmountType, debtRecoveryStartTime, debtRecoveryCollectionTime,         \
+                              debtRecoveryFrequency, debtRecoveryAmount, debtRecoveryBalancePercentage);
+
+/** @brief Command description for EmergencyCreditSetup
+ *
+ * Command: EmergencyCreditSetup
+ * @param issuerEventId INT32U
+ * @param resultType ResultType
+ * @param startTime UTC_TIME
+ * @param topUpValue INT32U
+ * @param emergencyCreditLimit INT32U
+ * @param sourceOfTopUp OriginatingDevice
+ * @param emergencyCreditThreshold INT32U
+ * @param creditRemaining INT32U
+ */
+#define emberAfFillCommandPrepaymentClusterEmergencyCreditSetup(issuerEventId, resultType, startTime, topUpValue,                  \
+                                                                emergencyCreditLimit, sourceOfTopUp, emergencyCreditThreshold,     \
+                                                                creditRemaining)                                                   \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_EMERGENCY_CREDIT_SETUP_COMMAND_ID, "uuuuuuuu", issuerEventId, resultType, startTime, topUpValue, \
+                              emergencyCreditLimit, sourceOfTopUp, emergencyCreditThreshold, creditRemaining);
+
+/** @brief Command description for ConsumerTopUp
+ *
+ * Command: ConsumerTopUp
+ * @param originatingDevice OriginatingDevice
+ * @param topUpCode OCTET_STRING
+ */
+#define emberAfFillCommandPrepaymentClusterConsumerTopUp(originatingDevice, topUpCode)                                             \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_CONSUMER_TOP_UP_COMMAND_ID, "uu", originatingDevice, topUpCode);
+
+/** @brief Command description for CreditAdjustment
+ *
+ * Command: CreditAdjustment
+ * @param issuerEventId INT32U
+ * @param commandIndex INT8U
+ * @param startTime UTC_TIME
+ * @param totalNumberOfCommands INT8U
+ * @param creditAdjustmentType CreditAdjustmentType
+ * @param topUpPayload TopUpPayload []
+ * @param topUpPayloadLen int
+ * @param creditAdjustmentValue INT32U
+ */
+#define emberAfFillCommandPrepaymentClusterCreditAdjustment(issuerEventId, commandIndex, startTime, totalNumberOfCommands,         \
+                                                            creditAdjustmentType, topUpPayload, topUpPayloadLen,                   \
+                                                            creditAdjustmentValue)                                                 \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_CREDIT_ADJUSTMENT_COMMAND_ID, "uuuuubu", issuerEventId, commandIndex, startTime,                 \
+                              totalNumberOfCommands, creditAdjustmentType, topUpPayload, topUpPayloadLen, creditAdjustmentValue);
+
+/** @brief Command description for ChangePaymentMode
+ *
+ * Command: ChangePaymentMode
+ * @param providerId INT32U
+ * @param commandIndex INT8U
+ * @param issuerEventId INT32U
+ * @param totalNumberOfCommands INT8U
+ * @param implementationDateTime UTC_TIME
+ * @param debtPayload DebtPayload []
+ * @param debtPayloadLen int
+ * @param proposedPaymentControlConfiguration PaymentControlConfiguration
+ * @param cutOffValue INT32U
+ */
+#define emberAfFillCommandPrepaymentClusterChangePaymentMode(providerId, commandIndex, issuerEventId, totalNumberOfCommands,       \
+                                                             implementationDateTime, debtPayload, debtPayloadLen,                  \
+                                                             proposedPaymentControlConfiguration, cutOffValue)                     \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_CHANGE_PAYMENT_MODE_COMMAND_ID, "uuuuubuu", providerId, commandIndex, issuerEventId,             \
+                              totalNumberOfCommands, implementationDateTime, debtPayload, debtPayloadLen,                          \
+                              proposedPaymentControlConfiguration, cutOffValue);
+
+/** @brief Command description for GetPrepaySnapshot
+ *
+ * Command: GetPrepaySnapshot
+ * @param earliestStartTime UTC_TIME
+ * @param latestEndTime UTC_TIME
+ * @param snapshotOffset INT8U
+ * @param snapshotCause PrepaySnapshotPayloadCause
+ */
+#define emberAfFillCommandPrepaymentClusterGetPrepaySnapshot(earliestStartTime, latestEndTime, snapshotOffset, snapshotCause)      \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_GET_PREPAY_SNAPSHOT_COMMAND_ID, "uuuu", earliestStartTime, latestEndTime, snapshotOffset,        \
+                              snapshotCause);
+
+/** @brief Command description for GetTopUpLog
+ *
+ * Command: GetTopUpLog
+ * @param latestEndTime UTC_TIME
+ * @param numberOfRecords INT8U
+ */
+#define emberAfFillCommandPrepaymentClusterGetTopUpLog(latestEndTime, numberOfRecords)                                             \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_GET_TOP_UP_LOG_COMMAND_ID, "uu", latestEndTime, numberOfRecords);
+
+/** @brief Command description for SetLowCreditWarningLevel
+ *
+ * Command: SetLowCreditWarningLevel
+ * @param lowCreditWarningLevel INT32U
+ */
+#define emberAfFillCommandPrepaymentClusterSetLowCreditWarningLevel(lowCreditWarningLevel)                                         \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_SET_LOW_CREDIT_WARNING_LEVEL_COMMAND_ID, "u", lowCreditWarningLevel);
+
+/** @brief Command description for GetDebtRepaymentLog
+ *
+ * Command: GetDebtRepaymentLog
+ * @param latestEndTime UTC_TIME
+ * @param numberOfDebts INT8U
+ * @param debtType RepaymentDebtType
+ */
+#define emberAfFillCommandPrepaymentClusterGetDebtRepaymentLog(latestEndTime, numberOfDebts, debtType)                             \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_GET_DEBT_REPAYMENT_LOG_COMMAND_ID, "uuu", latestEndTime, numberOfDebts, debtType);
+
+/** @brief Command description for SetMaximumCreditLimit
+ *
+ * Command: SetMaximumCreditLimit
+ * @param providerId INT32U
+ * @param issuerEventId INT32U
+ * @param implementationDateTime UTC_TIME
+ * @param maximumCreditLevel INT32U
+ * @param maximumCreditPerTopUp INT32U
+ */
+#define emberAfFillCommandPrepaymentClusterSetMaximumCreditLimit(providerId, issuerEventId, implementationDateTime,                \
+                                                                 maximumCreditLevel, maximumCreditPerTopUp)                        \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_SET_MAXIMUM_CREDIT_LIMIT_COMMAND_ID, "uuuuu", providerId, issuerEventId, implementationDateTime, \
+                              maximumCreditLevel, maximumCreditPerTopUp);
+
+/** @brief Command description for SetOverallDebtCap
+ *
+ * Command: SetOverallDebtCap
+ * @param providerId INT32U
+ * @param issuerEventId INT32U
+ * @param implementationDateTime UTC_TIME
+ * @param overallDebtCap INT32U
+ */
+#define emberAfFillCommandPrepaymentClusterSetOverallDebtCap(providerId, issuerEventId, implementationDateTime, overallDebtCap)    \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_SET_OVERALL_DEBT_CAP_COMMAND_ID, "uuuu", providerId, issuerEventId, implementationDateTime,      \
+                              overallDebtCap);
+
+/** @brief Command description for ReportEventStatus
+ *
+ * Command: ReportEventStatus
+ * @param issuerEventId INT32U
+ * @param issuerEventId INT32U
+ * @param eventStatus AmiEventStatus
+ * @param deviceClass AmiDeviceClass
+ * @param eventStatusTime UTC_TIME
+ * @param utilityEnrollmentGroup INT8U
+ * @param criticalityLevelApplied AmiCriticalityLevel
+ * @param actionRequired INT8U
+ * @param coolingTemperatureSetPointApplied INT16U
+ * @param heatingTemperatureSetPointApplied INT16U
+ * @param averageLoadAdjustmentPercentageApplied INT8S
+ * @param dutyCycleApplied INT8U
+ * @param eventControl AmiEventControl
+ */
+#define emberAfFillCommandEnergy                                                                                                   \
+    ManagementClusterReportEventStatus(issuerEventId, issuerEventId, eventStatus, deviceClass, eventStatusTime,                    \
+                                       utilityEnrollmentGroup, criticalityLevelApplied, actionRequired,                            \
+                                       coolingTemperatureSetPointApplied, heatingTemperatureSetPointApplied,                       \
+                                       averageLoadAdjustmentPercentageApplied, dutyCycleApplied, eventControl)                     \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_REPORT_EVENT_STATUS_COMMAND_ID, "uuuuuuuuuuuuu", issuerEventId, issuerEventId, eventStatus,  \
+                                  deviceClass, eventStatusTime, utilityEnrollmentGroup, criticalityLevelApplied, actionRequired,   \
+                                  coolingTemperatureSetPointApplied, heatingTemperatureSetPointApplied,                            \
+                                  averageLoadAdjustmentPercentageApplied, dutyCycleApplied, eventControl);
+
+/** @brief Command description for PublishCalendar
+ *
+ * Command: PublishCalendar
+ * @param providerId INT32U
+ * @param earliestStartTime UTC_TIME
+ * @param issuerEventId INT32U
+ * @param minIssuerEventId INT32U
+ * @param issuerCalendarId INT32U
+ * @param numberOfCalendars INT8U
+ * @param startTime UTC_TIME
+ * @param calendarType CalendarType
+ * @param calendarType CalendarType
+ * @param providerId INT32U
+ * @param calendarTimeReference CalendarTimeReference
+ * @param calendarName OCTET_STRING
+ * @param numberOfSeasons INT8U
+ * @param numberOfWeekProfiles INT8U
+ * @param numberOfDayProfiles INT8U
+ */
+#define emberAfFillCommandCalendarClusterPublishCalendar(                                                                          \
+    providerId, earliestStartTime, issuerEventId, minIssuerEventId, issuerCalendarId, numberOfCalendars, startTime, calendarType,  \
+    calendarType, providerId, calendarTimeReference, calendarName, numberOfSeasons, numberOfWeekProfiles, numberOfDayProfiles)     \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_PUBLISH_CALENDAR_COMMAND_ID, "uuuuuuuuuuuuuuu", providerId, earliestStartTime, issuerEventId,    \
+                              minIssuerEventId, issuerCalendarId, numberOfCalendars, startTime, calendarType, calendarType,        \
+                              providerId, calendarTimeReference, calendarName, numberOfSeasons, numberOfWeekProfiles,              \
+                              numberOfDayProfiles);
+
+/** @brief Command description for PublishDayProfile
+ *
+ * Command: PublishDayProfile
+ * @param providerId INT32U
+ * @param providerId INT32U
+ * @param issuerEventId INT32U
+ * @param issuerCalendarId INT32U
+ * @param issuerCalendarId INT32U
+ * @param startDayId INT8U
+ * @param dayId INT8U
+ * @param numberOfDays INT8U
+ * @param totalNumberOfScheduleEntries INT8U
+ * @param commandIndex INT8U
+ * @param totalNumberOfCommands INT8U
+ * @param calendarType CalendarType
+ * @param dayScheduleEntries ScheduleEntry []
+ * @param dayScheduleEntriesLen int
+ */
+#define emberAfFillCommandCalendarClusterPublishDayProfile(                                                                        \
+    providerId, providerId, issuerEventId, issuerCalendarId, issuerCalendarId, startDayId, dayId, numberOfDays,                    \
+    totalNumberOfScheduleEntries, commandIndex, totalNumberOfCommands, calendarType, dayScheduleEntries, dayScheduleEntriesLen)    \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_PUBLISH_DAY_PROFILE_COMMAND_ID, "uuuuuuuuuuuub", providerId, providerId, issuerEventId,          \
+                              issuerCalendarId, issuerCalendarId, startDayId, dayId, numberOfDays, totalNumberOfScheduleEntries,   \
+                              commandIndex, totalNumberOfCommands, calendarType, dayScheduleEntries, dayScheduleEntriesLen);
+
+/** @brief Command description for PublishWeekProfile
+ *
+ * Command: PublishWeekProfile
+ * @param providerId INT32U
+ * @param providerId INT32U
+ * @param issuerEventId INT32U
+ * @param issuerCalendarId INT32U
+ * @param issuerCalendarId INT32U
+ * @param startWeekId INT8U
+ * @param weekId INT8U
+ * @param numberOfWeeks INT8U
+ * @param dayIdRefMonday INT8U
+ * @param dayIdRefTuesday INT8U
+ * @param dayIdRefWednesday INT8U
+ * @param dayIdRefThursday INT8U
+ * @param dayIdRefFriday INT8U
+ * @param dayIdRefSaturday INT8U
+ * @param dayIdRefSunday INT8U
+ */
+#define emberAfFillCommandCalendarClusterPublishWeekProfile(                                                                       \
+    providerId, providerId, issuerEventId, issuerCalendarId, issuerCalendarId, startWeekId, weekId, numberOfWeeks, dayIdRefMonday, \
+    dayIdRefTuesday, dayIdRefWednesday, dayIdRefThursday, dayIdRefFriday, dayIdRefSaturday, dayIdRefSunday)                        \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_PUBLISH_WEEK_PROFILE_COMMAND_ID, "uuuuuuuuuuuuuuu", providerId, providerId, issuerEventId,       \
+                              issuerCalendarId, issuerCalendarId, startWeekId, weekId, numberOfWeeks, dayIdRefMonday,              \
+                              dayIdRefTuesday, dayIdRefWednesday, dayIdRefThursday, dayIdRefFriday, dayIdRefSaturday,              \
+                              dayIdRefSunday);
+
+/** @brief Command description for PublishSeasons
+ *
+ * Command: PublishSeasons
+ * @param providerId INT32U
+ * @param providerId INT32U
+ * @param issuerEventId INT32U
+ * @param issuerCalendarId INT32U
+ * @param issuerCalendarId INT32U
+ * @param commandIndex INT8U
+ * @param totalNumberOfCommands INT8U
+ * @param seasonEntries SeasonEntry []
+ * @param seasonEntriesLen int
+ */
+#define emberAfFillCommandCalendarClusterPublishSeasons(providerId, providerId, issuerEventId, issuerCalendarId, issuerCalendarId, \
+                                                        commandIndex, totalNumberOfCommands, seasonEntries, seasonEntriesLen)      \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_PUBLISH_SEASONS_COMMAND_ID, "uuuuuuub", providerId, providerId, issuerEventId, issuerCalendarId, \
+                              issuerCalendarId, commandIndex, totalNumberOfCommands, seasonEntries, seasonEntriesLen);
+
+/** @brief Command description for PublishSpecialDays
+ *
+ * Command: PublishSpecialDays
+ * @param providerId INT32U
+ * @param startTime UTC_TIME
+ * @param issuerEventId INT32U
+ * @param numberOfEvents INT8U
+ * @param issuerCalendarId INT32U
+ * @param calendarType CalendarType
+ * @param startTime UTC_TIME
+ * @param providerId INT32U
+ * @param calendarType CalendarType
+ * @param issuerCalendarId INT32U
+ * @param totalNumberOfSpecialDays INT8U
+ * @param commandIndex INT8U
+ * @param totalNumberOfCommands INT8U
+ * @param specialDayEntries SpecialDay []
+ * @param specialDayEntriesLen int
+ */
+#define emberAfFillCommandCalendarClusterPublishSpecialDays(                                                                       \
+    providerId, startTime, issuerEventId, numberOfEvents, issuerCalendarId, calendarType, startTime, providerId, calendarType,     \
+    issuerCalendarId, totalNumberOfSpecialDays, commandIndex, totalNumberOfCommands, specialDayEntries, specialDayEntriesLen)      \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_PUBLISH_SPECIAL_DAYS_COMMAND_ID, "uuuuuuuuuuuuub", providerId, startTime, issuerEventId,         \
+                              numberOfEvents, issuerCalendarId, calendarType, startTime, providerId, calendarType,                 \
+                              issuerCalendarId, totalNumberOfSpecialDays, commandIndex, totalNumberOfCommands, specialDayEntries,  \
+                              specialDayEntriesLen);
+
+/** @brief Command description for GetCalendarCancellation
+ *
+ * Command: GetCalendarCancellation
+ * @param providerId INT32U
+ * @param issuerCalendarId INT32U
+ * @param calendarType CalendarType
+ */
+#define emberAfFillCommandCalendarClusterGetCalendarCancellation(providerId, issuerCalendarId, calendarType)                       \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_GET_CALENDAR_CANCELLATION_COMMAND_ID, "uuu", providerId, issuerCalendarId, calendarType);
+
+/** @brief Command description for GetChangeOfTenancy
+ *
+ * Command: GetChangeOfTenancy
+ * @param providerId INT32U
+ * @param issuerEventId INT32U
+ * @param tariffType TariffType
+ * @param implementationDateTime UTC_TIME
+ * @param proposedTenancyChangeControl ProposedChangeControl
+ */
+#define emberAfFillCommandDevice                                                                                                   \
+    ManagementClusterGetChangeOfTenancy(providerId, issuerEventId, tariffType, implementationDateTime,                             \
+                                        proposedTenancyChangeControl)                                                              \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_CHANGE_OF_TENANCY_COMMAND_ID, "uuuuu", providerId, issuerEventId, tariffType,            \
+                                  implementationDateTime, proposedTenancyChangeControl);
+
+/** @brief Command description for GetChangeOfSupplier
+ *
+ * Command: GetChangeOfSupplier
+ * @param currentProviderId INT32U
+ * @param issuerEventId INT32U
+ * @param tariffType TariffType
+ * @param proposedProviderId INT32U
+ * @param providerChangeImplementationTime UTC_TIME
+ * @param providerChangeControl ProposedChangeControl
+ * @param proposedProviderName OCTET_STRING
+ * @param proposedProviderContactDetails OCTET_STRING
+ */
+#define emberAfFillCommandDevice                                                                                                   \
+    ManagementClusterGetChangeOfSupplier(currentProviderId, issuerEventId, tariffType, proposedProviderId,                         \
+                                         providerChangeImplementationTime, providerChangeControl, proposedProviderName,            \
+                                         proposedProviderContactDetails)                                                           \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_CHANGE_OF_SUPPLIER_COMMAND_ID, "uuuuuuuu", currentProviderId, issuerEventId, tariffType, \
+                                  proposedProviderId, providerChangeImplementationTime, providerChangeControl,                     \
+                                  proposedProviderName, proposedProviderContactDetails);
+
+/** @brief Command description for RequestNewPassword
+ *
+ * Command: RequestNewPassword
+ * @param passwordType PasswordType
+ * @param issuerEventId INT32U
+ * @param implementationDateTime UTC_TIME
+ * @param durationInMinutes INT16U
+ * @param passwordType PasswordType
+ * @param password OCTET_STRING
+ */
+#define emberAfFillCommandDevice                                                                                                   \
+    ManagementClusterRequestNewPassword(passwordType, issuerEventId, implementationDateTime, durationInMinutes, passwordType,      \
+                                        password)                                                                                  \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_REQUEST_NEW_PASSWORD_COMMAND_ID, "uuuuuu", passwordType, issuerEventId,                      \
+                                  implementationDateTime, durationInMinutes, passwordType, password);
+
+/** @brief Command description for GetSiteId
+ *
+ * Command: GetSiteId
+ * @param issuerEventId INT32U
+ * @param siteIdTime UTC_TIME
+ * @param providerId INT32U
+ * @param siteId OCTET_STRING
+ */
+#define emberAfFillCommandDevice                                                                                                   \
+    ManagementClusterGetSiteId(issuerEventId, siteIdTime, providerId, siteId)                                                      \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_SITE_ID_COMMAND_ID, "uuuu", issuerEventId, siteIdTime, providerId, siteId);
+
+/** @brief Command description for ReportEventConfiguration
+ *
+ * Command: ReportEventConfiguration
+ * @param commandIndex INT8U
+ * @param issuerEventId INT32U
+ * @param totalCommands INT8U
+ * @param startDateTime UTC_TIME
+ * @param eventConfigurationPayload EventConfigurationPayload []
+ * @param eventConfigurationPayloadLen int
+ * @param eventConfiguration EventConfiguration
+ * @param configurationControl EventConfigurationControl
+ * @param eventConfigurationPayload INT8U []
+ * @param eventConfigurationPayloadLen int
+ */
+#define emberAfFillCommandDevice                                                                                                   \
+    ManagementClusterReportEventConfiguration(commandIndex, issuerEventId, totalCommands, startDateTime,                           \
+                                              eventConfigurationPayload, eventConfigurationPayloadLen, eventConfiguration,         \
+                                              configurationControl, eventConfigurationPayload, eventConfigurationPayloadLen)       \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_REPORT_EVENT_CONFIGURATION_COMMAND_ID, "uuuubuub", commandIndex, issuerEventId,              \
+                                  totalCommands, startDateTime, eventConfigurationPayload, eventConfigurationPayloadLen,           \
+                                  eventConfiguration, configurationControl, eventConfigurationPayload,                             \
+                                  eventConfigurationPayloadLen);
+
+/** @brief Command description for GetCIN
+ *
+ * Command: GetCIN
+ * @param eventId INT16U
+ */
+#define emberAfFillCommandDevice                                                                                                   \
+    ManagementClusterGetCIN(eventId) emberAfFillExternalBuffer(mask,                                                               \
+                                                                                                                                   \
+                                                               ZCL_GET_CIN_COMMAND_ID, "u", eventId);
+
+/** @brief Command description for UpdateCIN
+ *
+ * Command: UpdateCIN
+ * @param issuerEventId INT32U
+ * @param implementationTime UTC_TIME
+ * @param providerId INT32U
+ * @param customerIdNumber OCTET_STRING
+ */
+#define emberAfFillCommandDevice                                                                                                   \
+    ManagementClusterUpdateCIN(issuerEventId, implementationTime, providerId, customerIdNumber) emberAfFillExternalBuffer(         \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_UPDATE_CIN_COMMAND_ID, "uuuu", issuerEventId, implementationTime, providerId, customerIdNumber);
+
+/** @brief Command description for GetEventLog
+ *
+ * Command: GetEventLog
+ * @param eventControlLogId EventControlLogId
+ * @param logId EventLogId
+ * @param eventId INT16U
+ * @param eventId INT16U
+ * @param startTime UTC_TIME
+ * @param eventTime UTC_TIME
+ * @param endTime UTC_TIME
+ * @param eventControl EventActionControl
+ * @param numberOfEvents INT8U
+ * @param eventData OCTET_STRING
+ * @param eventOffset INT16U
+ */
+#define emberAfFillCommandEventsClusterGetEventLog(eventControlLogId, logId, eventId, eventId, startTime, eventTime, endTime,      \
+                                                   eventControl, numberOfEvents, eventData, eventOffset)                           \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_GET_EVENT_LOG_COMMAND_ID, "uuuuuuuuuuu", eventControlLogId, logId, eventId, eventId, startTime,  \
+                              eventTime, endTime, eventControl, numberOfEvents, eventData, eventOffset);
+
+/** @brief Command description for ClearEventLogRequest
+ *
+ * Command: ClearEventLogRequest
+ * @param logId EventLogId
+ * @param totalNumberOfEvents INT16U
+ * @param commandIndex INT8U
+ * @param totalCommands INT8U
+ * @param logPayloadControl NumberOfEventsLogPayloadControl
+ * @param logPayload EventLogPayload []
+ * @param logPayloadLen int
+ */
+#define emberAfFillCommandEventsClusterClearEventLogRequest(logId, totalNumberOfEvents, commandIndex, totalCommands,               \
+                                                            logPayloadControl, logPayload, logPayloadLen)                          \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_CLEAR_EVENT_LOG_REQUEST_COMMAND_ID, "uuuuub", logId, totalNumberOfEvents, commandIndex,          \
+                              totalCommands, logPayloadControl, logPayload, logPayloadLen);
+
+/** @brief Command description for ClearEventLogResponse
+ *
+ * Command: ClearEventLogResponse
+ * @param clearedEventsLogs ClearedEventsLogs
+ */
+#define emberAfFillCommandEventsClusterClearEventLogResponse(clearedEventsLogs)                                                    \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_CLEAR_EVENT_LOG_RESPONSE_COMMAND_ID, "u", clearedEventsLogs);
+
+/** @brief Command description for PairingResponse
+ *
+ * Command: PairingResponse
+ * @param pairingInformationVersion INT32U
+ * @param localPairingInformationVersion INT32U
+ * @param totalNumberOfDevices INT8U
+ * @param eui64OfRequestingDevice IEEE_ADDRESS
+ * @param commandIndex INT8U
+ * @param totalNumberOfCommands INT8U
+ * @param eui64s IEEE_ADDRESS []
+ * @param eui64sLen int
+ */
+#define emberAfFillCommandMDU                                                                                                      \
+    PairingClusterPairingResponse(pairingInformationVersion, localPairingInformationVersion, totalNumberOfDevices,                 \
+                                  eui64OfRequestingDevice, commandIndex, totalNumberOfCommands, eui64s, eui64sLen)                 \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_PAIRING_RESPONSE_COMMAND_ID, "uuuuuub", pairingInformationVersion,                           \
+                                  localPairingInformationVersion, totalNumberOfDevices, eui64OfRequestingDevice, commandIndex,     \
+                                  totalNumberOfCommands, eui64s, eui64sLen);
+
+/** @brief Command description for GetSuspendZclMessagesStatus
+ *
+ * Command: GetSuspendZclMessagesStatus
+ * @param period INT8U
+ */
+#define emberAfFillCommandSub                                                                                                      \
+    -GHzClusterGetSuspendZclMessagesStatus(period)                                                                                 \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_SUSPEND_ZCL_MESSAGES_STATUS_COMMAND_ID, "u", period);
+
+/** @brief Command description for InitiateKeyEstablishmentRequest
+ *
+ * Command: InitiateKeyEstablishmentRequest
+ * @param keyEstablishmentSuite BITMAP16
+ * @param requestedKeyEstablishmentSuite BITMAP16
+ * @param ephemeralDataGenerateTime INT8U
+ * @param ephemeralDataGenerateTime INT8U
+ * @param confirmKeyGenerateTime INT8U
+ * @param confirmKeyGenerateTime INT8U
+ * @param identity Identity
+ * @param identity Identity
+ */
+#define emberAfFillCommandKey                                                                                                      \
+    EstablishmentClusterInitiateKeyEstablishmentRequest(keyEstablishmentSuite, requestedKeyEstablishmentSuite,                     \
+                                                        ephemeralDataGenerateTime, ephemeralDataGenerateTime,                      \
+                                                        confirmKeyGenerateTime, confirmKeyGenerateTime, identity, identity)        \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_INITIATE_KEY_ESTABLISHMENT_REQUEST_COMMAND_ID, "uuuuuuuu", keyEstablishmentSuite,            \
+                                  requestedKeyEstablishmentSuite, ephemeralDataGenerateTime, ephemeralDataGenerateTime,            \
+                                  confirmKeyGenerateTime, confirmKeyGenerateTime, identity, identity);
+
+/** @brief Command description for EphemeralDataRequest
+ *
+ * Command: EphemeralDataRequest
+ * @param ephemeralData EphemeralData
+ * @param ephemeralData EphemeralData
+ */
+#define emberAfFillCommandKey                                                                                                      \
+    EstablishmentClusterEphemeralDataRequest(ephemeralData, ephemeralData)                                                         \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_EPHEMERAL_DATA_REQUEST_COMMAND_ID, "uu", ephemeralData, ephemeralData);
+
+/** @brief Command description for ConfirmKeyDataRequest
+ *
+ * Command: ConfirmKeyDataRequest
+ * @param secureMessageAuthenticationCode Smac
+ * @param secureMessageAuthenticationCode Smac
+ */
+#define emberAfFillCommandKey                                                                                                      \
+    EstablishmentClusterConfirmKeyDataRequest(secureMessageAuthenticationCode, secureMessageAuthenticationCode)                    \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_CONFIRM_KEY_DATA_REQUEST_COMMAND_ID, "uu", secureMessageAuthenticationCode,                  \
+                                  secureMessageAuthenticationCode);
+
+/** @brief Command description for TerminateKeyEstablishment
+ *
+ * Command: TerminateKeyEstablishment
+ * @param statusCode AmiKeyEstablishmentStatus
+ * @param waitTime INT8U
+ * @param keyEstablishmentSuite BITMAP16
+ */
+#define emberAfFillCommandKey                                                                                                      \
+    EstablishmentClusterTerminateKeyEstablishment(statusCode, waitTime, keyEstablishmentSuite)                                     \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_TERMINATE_KEY_ESTABLISHMENT_COMMAND_ID, "uuu", statusCode, waitTime, keyEstablishmentSuite);
+
+/** @brief Command description for RequestInformation
+ *
+ * Command: RequestInformation
+ * @param inquiryId ENUM8
+ * @param number INT8U
+ * @param dataTypeId BITMAP8
+ * @param buffer INT8U []
+ * @param bufferLen int
+ * @param requestInformationPayload INT8U []
+ * @param requestInformationPayloadLen int
+ */
+#define emberAfFillCommandInformationClusterRequestInformation(inquiryId, number, dataTypeId, buffer, bufferLen,                   \
+                                                               requestInformationPayload, requestInformationPayloadLen)            \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_REQUEST_INFORMATION_COMMAND_ID, "uuubb", inquiryId, number, dataTypeId, buffer, bufferLen,       \
+                              requestInformationPayload, requestInformationPayloadLen);
+
+/** @brief Command description for PushInformationResponse
+ *
+ * Command: PushInformationResponse
+ * @param notificationList Notification []
+ * @param notificationListLen int
+ * @param contents INT8U []
+ * @param contentsLen int
+ */
+#define emberAfFillCommandInformationClusterPushInformationResponse(notificationList, notificationListLen, contents, contentsLen)  \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_PUSH_INFORMATION_RESPONSE_COMMAND_ID, "bb", notificationList, notificationListLen, contents,     \
+                              contentsLen);
+
+/** @brief Command description for SendPreference
+ *
+ * Command: SendPreference
+ * @param preferenceType INT16U
+ * @param statusFeedbackList Status []
+ * @param statusFeedbackListLen int
+ * @param preferencePayload INT8U []
+ * @param preferencePayloadLen int
+ */
+#define emberAfFillCommandInformationClusterSendPreference(preferenceType, statusFeedbackList, statusFeedbackListLen,              \
+                                                           preferencePayload, preferencePayloadLen)                                \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_SEND_PREFERENCE_COMMAND_ID, "ubb", preferenceType, statusFeedbackList, statusFeedbackListLen,    \
+                              preferencePayload, preferencePayloadLen);
+
+/** @brief Command description for ServerRequestPreference
+ *
+ * Command: ServerRequestPreference
+ * @param statusFeedback Status
+ * @param preferenceType INT16U
+ * @param preferencePayload INT8U []
+ * @param preferencePayloadLen int
+ */
+#define emberAfFillCommandInformationClusterServerRequestPreference(statusFeedback, preferenceType, preferencePayload,             \
+                                                                    preferencePayloadLen)                                          \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_SERVER_REQUEST_PREFERENCE_COMMAND_ID, "uub", statusFeedback, preferenceType, preferencePayload,  \
+                              preferencePayloadLen);
+
+/** @brief Command description for Update
+ *
+ * Command: Update
+ * @param accessControl ENUM8
+ * @param statusFeedbackList Status []
+ * @param statusFeedbackListLen int
+ * @param option BITMAP8
+ * @param contents INT8U []
+ * @param contentsLen int
+ */
+#define emberAfFillCommandInformationClusterUpdate(accessControl, statusFeedbackList, statusFeedbackListLen, option, contents,     \
+                                                   contentsLen)                                                                    \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_UPDATE_COMMAND_ID, "ubub", accessControl, statusFeedbackList, statusFeedbackListLen, option,     \
+                              contents, contentsLen);
+
+/** @brief Command description for Delete
+ *
+ * Command: Delete
+ * @param deletionOptions BITMAP8
+ * @param notificationList Notification []
+ * @param notificationListLen int
+ * @param contentIds INT16U []
+ * @param contentIdsLen int
+ */
+#define emberAfFillCommandInformationClusterDelete(deletionOptions, notificationList, notificationListLen, contentIds,             \
+                                                   contentIdsLen)                                                                  \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_DELETE_COMMAND_ID, "ubb", deletionOptions, notificationList, notificationListLen, contentIds,    \
+                              contentIdsLen);
+
+/** @brief Command description for ConfigureNodeDescription
+ *
+ * Command: ConfigureNodeDescription
+ * @param description CHAR_STRING
+ * @param notificationList Notification []
+ * @param notificationListLen int
+ */
+#define emberAfFillCommandInformationClusterConfigureNodeDescription(description, notificationList, notificationListLen)           \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_CONFIGURE_NODE_DESCRIPTION_COMMAND_ID, "ub", description, notificationList,                      \
+                              notificationListLen);
+
+/** @brief Command description for ConfigureDeliveryEnable
+ *
+ * Command: ConfigureDeliveryEnable
+ * @param enable BOOLEAN
+ */
+#define emberAfFillCommandInformationClusterConfigureDeliveryEnable(enable)                                                        \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_CONFIGURE_DELIVERY_ENABLE_COMMAND_ID, "u", enable);
+
+/** @brief Command description for ConfigurePushInformationTimer
+ *
+ * Command: ConfigurePushInformationTimer
+ * @param timer INT32U
+ */
+#define emberAfFillCommandInformationClusterConfigurePushInformationTimer(timer)                                                   \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_CONFIGURE_PUSH_INFORMATION_TIMER_COMMAND_ID, "u", timer);
+
+/** @brief Command description for ConfigureSetRootId
+ *
+ * Command: ConfigureSetRootId
+ * @param rootId INT16U
+ */
+#define emberAfFillCommandInformationClusterConfigureSetRootId(rootId)                                                             \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_CONFIGURE_SET_ROOT_ID_COMMAND_ID, "u", rootId);
+
+/** @brief Command description for ReadFileRequest
+ *
+ * Command: ReadFileRequest
+ * @param fileIndex INT16U
+ * @param writeOptions BITMAP8
+ * @param fileStartPositionAndRequestedOctetCount INT8U []
+ * @param fileStartPositionAndRequestedOctetCountLen int
+ * @param fileSize INT8U []
+ * @param fileSizeLen int
+ */
+#define emberAfFillCommandData                                                                                                     \
+    SharingClusterReadFileRequest(fileIndex, writeOptions, fileStartPositionAndRequestedOctetCount,                                \
+                                  fileStartPositionAndRequestedOctetCountLen, fileSize, fileSizeLen)                               \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_READ_FILE_REQUEST_COMMAND_ID, "uubb", fileIndex, writeOptions,                               \
+                                  fileStartPositionAndRequestedOctetCount, fileStartPositionAndRequestedOctetCountLen, fileSize,   \
+                                  fileSizeLen);
+
+/** @brief Command description for ReadRecordRequest
+ *
+ * Command: ReadRecordRequest
+ * @param fileIndex INT16U
+ * @param fileIndex INT16U
+ * @param fileStartRecordAndRequestedRecordCount INT8U []
+ * @param fileStartRecordAndRequestedRecordCountLen int
+ * @param fileStartPosition INT32U
+ * @param octetCount INT32U
+ */
+#define emberAfFillCommandData                                                                                                     \
+    SharingClusterReadRecordRequest(fileIndex, fileIndex, fileStartRecordAndRequestedRecordCount,                                  \
+                                    fileStartRecordAndRequestedRecordCountLen, fileStartPosition, octetCount)                      \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_READ_RECORD_REQUEST_COMMAND_ID, "uubuu", fileIndex, fileIndex,                               \
+                                  fileStartRecordAndRequestedRecordCount, fileStartRecordAndRequestedRecordCountLen,               \
+                                  fileStartPosition, octetCount);
+
+/** @brief Command description for WriteFileResponse
+ *
+ * Command: WriteFileResponse
+ * @param status ENUM8
+ * @param fileIndex INT16U
+ * @param fileIndex INT8U []
+ * @param fileIndexLen int
+ * @param fileStartRecord INT16U
+ * @param recordCount INT16U
+ */
+#define emberAfFillCommandData                                                                                                     \
+    SharingClusterWriteFileResponse(status, fileIndex, fileIndex, fileIndexLen, fileStartRecord, recordCount)                      \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_WRITE_FILE_RESPONSE_COMMAND_ID, "uubuu", status, fileIndex, fileIndex, fileIndexLen,         \
+                                  fileStartRecord, recordCount);
+
+/** @brief Command description for FileTransmission
+ *
+ * Command: FileTransmission
+ * @param transmitOptions BITMAP8
+ * @param buffer INT8U []
+ * @param bufferLen int
+ */
+#define emberAfFillCommandData                                                                                                     \
+    SharingClusterFileTransmission(transmitOptions, buffer, bufferLen)                                                             \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_FILE_TRANSMISSION_COMMAND_ID, "ub", transmitOptions, buffer, bufferLen);
+
+/** @brief Command description for RecordTransmission
+ *
+ * Command: RecordTransmission
+ * @param transmitOptions BITMAP8
+ * @param buffer INT8U []
+ * @param bufferLen int
+ */
+#define emberAfFillCommandData                                                                                                     \
+    SharingClusterRecordTransmission(transmitOptions, buffer, bufferLen)                                                           \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_RECORD_TRANSMISSION_COMMAND_ID, "ub", transmitOptions, buffer, bufferLen);
+
+/** @brief Command description for SearchGame
+ *
+ * Command: SearchGame
+ * @param specificGame ENUM8
+ * @param gameId INT16U
+ * @param gameId INT16U
+ * @param gameMaster BOOLEAN
+ * @param listOfGame CHAR_STRING
+ */
+#define emberAfFillCommandGamingClusterSearchGame(specificGame, gameId, gameId, gameMaster, listOfGame)                            \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_SEARCH_GAME_COMMAND_ID, "uuuuu", specificGame, gameId, gameId, gameMaster, listOfGame);
+
+/** @brief Command description for JoinGame
+ *
+ * Command: JoinGame
+ * @param gameId INT16U
+ * @param commandId INT8U
+ * @param joinAsMaster BOOLEAN
+ * @param status BITMAP8
+ * @param nameOfGame CHAR_STRING
+ * @param message CHAR_STRING
+ */
+#define emberAfFillCommandGamingClusterJoinGame(gameId, commandId, joinAsMaster, status, nameOfGame, message)                      \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_JOIN_GAME_COMMAND_ID, "uuuuuu", gameId, commandId, joinAsMaster, status, nameOfGame, message);
+
+/** @brief Command description for StartGame
+ *
+ * Command: StartGame
+ */
+#define emberAfFillCommandGamingClusterStartGame()                                                                                 \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_START_GAME_COMMAND_ID, "", );
+
+/** @brief Command description for PauseGame
+ *
+ * Command: PauseGame
+ */
+#define emberAfFillCommandGamingClusterPauseGame()                                                                                 \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_PAUSE_GAME_COMMAND_ID, "", );
+
+/** @brief Command description for ResumeGame
+ *
+ * Command: ResumeGame
+ */
+#define emberAfFillCommandGamingClusterResumeGame()                                                                                \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_RESUME_GAME_COMMAND_ID, "", );
+
+/** @brief Command description for QuitGame
+ *
+ * Command: QuitGame
+ */
+#define emberAfFillCommandGamingClusterQuitGame()                                                                                  \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_QUIT_GAME_COMMAND_ID, "", );
+
+/** @brief Command description for EndGame
+ *
+ * Command: EndGame
+ */
+#define emberAfFillCommandGamingClusterEndGame()                                                                                   \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_END_GAME_COMMAND_ID, "", );
+
+/** @brief Command description for StartOver
+ *
+ * Command: StartOver
+ */
+#define emberAfFillCommandGamingClusterStartOver()                                                                                 \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_START_OVER_COMMAND_ID, "", );
+
+/** @brief Command description for ActionControl
+ *
+ * Command: ActionControl
+ * @param actions BITMAP32
+ */
+#define emberAfFillCommandGamingClusterActionControl(actions)                                                                      \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_ACTION_CONTROL_COMMAND_ID, "u", actions);
+
+/** @brief Command description for DownloadGame
+ *
+ * Command: DownloadGame
+ */
+#define emberAfFillCommandGamingClusterDownloadGame()                                                                              \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_DOWNLOAD_GAME_COMMAND_ID, "", );
+
+/** @brief Command description for PathCreation
+ *
+ * Command: PathCreation
+ * @param originatorAddress DATA16
+ * @param originatorAddress DATA16
+ * @param destinationAddress DATA16
+ * @param destinationAddress DATA16
+ * @param dataRate INT8U
+ * @param dataRate INT8U
+ */
+#define emberAfFillCommandData                                                                                                     \
+    Rate ControlClusterPathCreation(originatorAddress, originatorAddress, destinationAddress, destinationAddress, dataRate,        \
+                                    dataRate)                                                                                      \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_PATH_CREATION_COMMAND_ID, "uuuuuu", originatorAddress, originatorAddress,                    \
+                                  destinationAddress, destinationAddress, dataRate, dataRate);
+
+/** @brief Command description for DataRateNotification
+ *
+ * Command: DataRateNotification
+ * @param originatorAddress DATA16
+ * @param destinationAddress DATA16
+ * @param dataRate INT8U
+ */
+#define emberAfFillCommandData                                                                                                     \
+    Rate ControlClusterDataRateNotification(originatorAddress, destinationAddress, dataRate)                                       \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_DATA_RATE_NOTIFICATION_COMMAND_ID, "uuu", originatorAddress, destinationAddress, dataRate);
+
+/** @brief Command description for PathDeletion
+ *
+ * Command: PathDeletion
+ * @param originatorAddress DATA16
+ * @param destinationAddress DATA16
+ */
+#define emberAfFillCommandData                                                                                                     \
+    Rate ControlClusterPathDeletion(originatorAddress, destinationAddress)                                                         \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_PATH_DELETION_COMMAND_ID, "uu", originatorAddress, destinationAddress);
+
+/** @brief Command description for EstablishmentRequest
+ *
+ * Command: EstablishmentRequest
+ * @param flag BITMAP8
+ * @param ackNack ENUM8
+ * @param codecType ENUM8
+ * @param codecType ENUM8
+ * @param sampFreq ENUM8
+ * @param codecRate ENUM8
+ * @param serviceType ENUM8
+ * @param buffer INT8U []
+ * @param bufferLen int
+ */
+#define emberAfFillCommandVoice                                                                                                    \
+    over ZigBeeClusterEstablishmentRequest(flag, ackNack, codecType, codecType, sampFreq, codecRate, serviceType, buffer,          \
+                                           bufferLen)                                                                              \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_ESTABLISHMENT_REQUEST_COMMAND_ID, "uuuuuuub", flag, ackNack, codecType, codecType, sampFreq, \
+                                  codecRate, serviceType, buffer, bufferLen);
+
+/** @brief Command description for VoiceTransmission
+ *
+ * Command: VoiceTransmission
+ * @param voiceData INT8U []
+ * @param voiceDataLen int
+ * @param sequenceNumber INT8U
+ * @param errorFlag ENUM8
+ */
+#define emberAfFillCommandVoice                                                                                                    \
+    over ZigBeeClusterVoiceTransmission(voiceData, voiceDataLen, sequenceNumber, errorFlag)                                        \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_VOICE_TRANSMISSION_COMMAND_ID, "buu", voiceData, voiceDataLen, sequenceNumber, errorFlag);
+
+/** @brief Command description for VoiceTransmissionCompletion
+ *
+ * Command: VoiceTransmissionCompletion
+ * @param controlType ENUM8
+ */
+#define emberAfFillCommandVoice                                                                                                    \
+    over ZigBeeClusterVoiceTransmissionCompletion(controlType)                                                                     \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_VOICE_TRANSMISSION_COMPLETION_COMMAND_ID, "u", controlType);
+
+/** @brief Command description for ControlResponse
+ *
+ * Command: ControlResponse
+ * @param ackNack ENUM8
+ */
+#define emberAfFillCommandVoice                                                                                                    \
+    over ZigBeeClusterControlResponse(ackNack) emberAfFillExternalBuffer(mask,                                                     \
+                                                                                                                                   \
+                                                                         ZCL_CONTROL_RESPONSE_COMMAND_ID, "u", ackNack);
+
+/** @brief Command description for JoinChatRequest
+ *
+ * Command: JoinChatRequest
+ * @param uid INT16U
+ * @param status ENUM8
+ * @param nickname CHAR_STRING
+ * @param cid INT16U
+ * @param cid INT16U
+ */
+#define emberAfFillCommandChattingClusterJoinChatRequest(uid, status, nickname, cid, cid)                                          \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_JOIN_CHAT_REQUEST_COMMAND_ID, "uuuuu", uid, status, nickname, cid, cid);
+
+/** @brief Command description for LeaveChatRequest
+ *
+ * Command: LeaveChatRequest
+ * @param cid INT16U
+ * @param status ENUM8
+ * @param uid INT16U
+ * @param cid INT16U
+ * @param chatParticipantList ChatParticipant []
+ * @param chatParticipantListLen int
+ */
+#define emberAfFillCommandChattingClusterLeaveChatRequest(cid, status, uid, cid, chatParticipantList, chatParticipantListLen)      \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_LEAVE_CHAT_REQUEST_COMMAND_ID, "uuuub", cid, status, uid, cid, chatParticipantList,              \
+                              chatParticipantListLen);
+
+/** @brief Command description for SearchChatRequest
+ *
+ * Command: SearchChatRequest
+ * @param cid INT16U
+ * @param uid INT16U
+ * @param nickname CHAR_STRING
+ */
+#define emberAfFillCommandChattingClusterSearchChatRequest(cid, uid, nickname)                                                     \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_SEARCH_CHAT_REQUEST_COMMAND_ID, "uuu", cid, uid, nickname);
+
+/** @brief Command description for SwitchChairmanResponse
+ *
+ * Command: SwitchChairmanResponse
+ * @param cid INT16U
+ * @param cid INT16U
+ * @param uid INT16U
+ * @param uid INT16U
+ * @param nickname CHAR_STRING
+ */
+#define emberAfFillCommandChattingClusterSwitchChairmanResponse(cid, cid, uid, uid, nickname)                                      \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_SWITCH_CHAIRMAN_RESPONSE_COMMAND_ID, "uuuuu", cid, cid, uid, uid, nickname);
+
+/** @brief Command description for StartChatRequest
+ *
+ * Command: StartChatRequest
+ * @param name CHAR_STRING
+ * @param options BITMAP8
+ * @param uid INT16U
+ * @param chatRoomList ChatRoom []
+ * @param chatRoomListLen int
+ * @param nickname CHAR_STRING
+ */
+#define emberAfFillCommandChattingClusterStartChatRequest(name, options, uid, chatRoomList, chatRoomListLen, nickname)             \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_START_CHAT_REQUEST_COMMAND_ID, "uuubu", name, options, uid, chatRoomList, chatRoomListLen,       \
+                              nickname);
+
+/** @brief Command description for ChatMessage
+ *
+ * Command: ChatMessage
+ * @param destinationUid INT16U
+ * @param cid INT16U
+ * @param sourceUid INT16U
+ * @param cid INT16U
+ * @param nickname CHAR_STRING
+ * @param message CHAR_STRING
+ */
+#define emberAfFillCommandChattingClusterChatMessage(destinationUid, cid, sourceUid, cid, nickname, message)                       \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_CHAT_MESSAGE_COMMAND_ID, "uuuuuu", destinationUid, cid, sourceUid, cid, nickname, message);
+
+/** @brief Command description for GetNodeInformationRequest
+ *
+ * Command: GetNodeInformationRequest
+ * @param cid INT16U
+ * @param cid INT16U
+ * @param uid INT16U
+ * @param nodeInformationList NodeInformation []
+ * @param nodeInformationListLen int
+ */
+#define emberAfFillCommandChattingClusterGetNodeInformationRequest(cid, cid, uid, nodeInformationList, nodeInformationListLen)     \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_GET_NODE_INFORMATION_REQUEST_COMMAND_ID, "uuub", cid, cid, uid, nodeInformationList,             \
+                              nodeInformationListLen);
+
+/** @brief Command description for SwitchChairmanNotification
+ *
+ * Command: SwitchChairmanNotification
+ * @param cid INT16U
+ * @param uid INT16U
+ * @param address DATA16
+ * @param endpoint INT8U
+ */
+#define emberAfFillCommandChattingClusterSwitchChairmanNotification(cid, uid, address, endpoint)                                   \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_SWITCH_CHAIRMAN_NOTIFICATION_COMMAND_ID, "uuuu", cid, uid, address, endpoint);
+
+/** @brief Command description for GetNodeInformationResponse
+ *
+ * Command: GetNodeInformationResponse
+ * @param status ENUM8
+ * @param cid INT16U
+ * @param uid INT16U
+ * @param addressEndpointAndNickname INT8U []
+ * @param addressEndpointAndNicknameLen int
+ */
+#define emberAfFillCommandChattingClusterGetNodeInformationResponse(status, cid, uid, addressEndpointAndNickname,                  \
+                                                                    addressEndpointAndNicknameLen)                                 \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_GET_NODE_INFORMATION_RESPONSE_COMMAND_ID, "uuub", status, cid, uid, addressEndpointAndNickname,  \
+                              addressEndpointAndNicknameLen);
+
+/** @brief Command description for BuyRequest
+ *
+ * Command: BuyRequest
+ * @param userId OCTET_STRING
+ * @param serialNumber OCTET_STRING
+ * @param userType INT16U
+ * @param currency INT32U
+ * @param serviceId INT16U
+ * @param priceTrailingDigit INT8U
+ * @param goodId OCTET_STRING
+ * @param price INT32U
+ * @param timestamp OCTET_STRING
+ * @param transId INT16U
+ * @param transStatus ENUM8
+ */
+#define emberAfFillCommandPaymentClusterBuyRequest(userId, serialNumber, userType, currency, serviceId, priceTrailingDigit,        \
+                                                   goodId, price, timestamp, transId, transStatus)                                 \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_BUY_REQUEST_COMMAND_ID, "uuuuuuuuuuu", userId, serialNumber, userType, currency, serviceId,      \
+                              priceTrailingDigit, goodId, price, timestamp, transId, transStatus);
+
+/** @brief Command description for AcceptPayment
+ *
+ * Command: AcceptPayment
+ * @param userId OCTET_STRING
+ * @param serialNumber OCTET_STRING
+ * @param userType INT16U
+ * @param currency INT32U
+ * @param serviceId INT16U
+ * @param priceTrailingDigit INT8U
+ * @param goodId OCTET_STRING
+ * @param price INT32U
+ * @param timestamp OCTET_STRING
+ */
+#define emberAfFillCommandPaymentClusterAcceptPayment(userId, serialNumber, userType, currency, serviceId, priceTrailingDigit,     \
+                                                      goodId, price, timestamp)                                                    \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_ACCEPT_PAYMENT_COMMAND_ID, "uuuuuuuuu", userId, serialNumber, userType, currency, serviceId,     \
+                              priceTrailingDigit, goodId, price, timestamp);
+
+/** @brief Command description for PaymentConfirm
+ *
+ * Command: PaymentConfirm
+ * @param serialNumber OCTET_STRING
+ * @param serialNumber OCTET_STRING
+ * @param transId INT16U
+ * @param status ENUM8
+ * @param transStatus ENUM8
+ */
+#define emberAfFillCommandPaymentClusterPaymentConfirm(serialNumber, serialNumber, transId, status, transStatus)                   \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_PAYMENT_CONFIRM_COMMAND_ID, "uuuuu", serialNumber, serialNumber, transId, status, transStatus);
+
+/** @brief Command description for Subscribe
+ *
+ * Command: Subscribe
+ * @param userId OCTET_STRING
+ * @param userId OCTET_STRING
+ * @param serviceId INT16U
+ * @param serviceId INT16U
+ * @param serviceProviderId INT16U
+ * @param serviceProviderId INT16U
+ */
+#define emberAfFillCommandBillingClusterSubscribe(userId, userId, serviceId, serviceId, serviceProviderId, serviceProviderId)      \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_SUBSCRIBE_COMMAND_ID, "uuuuuu", userId, userId, serviceId, serviceId, serviceProviderId,         \
+                              serviceProviderId);
+
+/** @brief Command description for Unsubscribe
+ *
+ * Command: Unsubscribe
+ * @param userId OCTET_STRING
+ * @param userId OCTET_STRING
+ * @param serviceId INT16U
+ * @param serviceId INT16U
+ * @param serviceProviderId INT16U
+ * @param serviceProviderId INT16U
+ * @param timestamp OCTET_STRING
+ * @param duration INT16U
+ */
+#define emberAfFillCommandBillingClusterUnsubscribe(userId, userId, serviceId, serviceId, serviceProviderId, serviceProviderId,    \
+                                                    timestamp, duration)                                                           \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_UNSUBSCRIBE_COMMAND_ID, "uuuuuuuu", userId, userId, serviceId, serviceId, serviceProviderId,     \
+                              serviceProviderId, timestamp, duration);
+
+/** @brief Command description for StartBillingSession
+ *
+ * Command: StartBillingSession
+ * @param userId OCTET_STRING
+ * @param serviceId INT16U
+ * @param serviceProviderId INT16U
+ */
+#define emberAfFillCommandBillingClusterStartBillingSession(userId, serviceId, serviceProviderId)                                  \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_START_BILLING_SESSION_COMMAND_ID, "uuu", userId, serviceId, serviceProviderId);
+
+/** @brief Command description for StopBillingSession
+ *
+ * Command: StopBillingSession
+ * @param userId OCTET_STRING
+ * @param serviceId INT16U
+ * @param serviceProviderId INT16U
+ */
+#define emberAfFillCommandBillingClusterStopBillingSession(userId, serviceId, serviceProviderId)                                   \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_STOP_BILLING_SESSION_COMMAND_ID, "uuu", userId, serviceId, serviceProviderId);
+
+/** @brief Command description for BillStatusNotification
+ *
+ * Command: BillStatusNotification
+ * @param userId OCTET_STRING
+ * @param status ENUM8
+ */
+#define emberAfFillCommandBillingClusterBillStatusNotification(userId, status)                                                     \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_BILL_STATUS_NOTIFICATION_COMMAND_ID, "uu", userId, status);
+
+/** @brief Command description for SessionKeepAlive
+ *
+ * Command: SessionKeepAlive
+ * @param userId OCTET_STRING
+ * @param serviceId INT16U
+ * @param serviceProviderId INT16U
+ */
+#define emberAfFillCommandBillingClusterSessionKeepAlive(userId, serviceId, serviceProviderId)                                     \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_SESSION_KEEP_ALIVE_COMMAND_ID, "uuu", userId, serviceId, serviceProviderId);
+
+/** @brief Command description for GetAlerts
+ *
+ * Command: GetAlerts
+ * @param alertsCount AlertCount
+ * @param alertStructures AlertStructure []
+ * @param alertStructuresLen int
+ */
+#define emberAfFillCommandAppliance                                                                                                \
+    Events and AlertClusterGetAlerts(alertsCount, alertStructures, alertStructuresLen)                                             \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_ALERTS_COMMAND_ID, "ub", alertsCount, alertStructures, alertStructuresLen);
+
+/** @brief Command description for AlertsNotification
+ *
+ * Command: AlertsNotification
+ * @param alertsCount AlertCount
+ * @param alertStructures AlertStructure []
+ * @param alertStructuresLen int
+ */
+#define emberAfFillCommandAppliance                                                                                                \
+    Events and AlertClusterAlertsNotification(alertsCount, alertStructures, alertStructuresLen)                                    \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_ALERTS_NOTIFICATION_COMMAND_ID, "ub", alertsCount, alertStructures, alertStructuresLen);
+
+/** @brief Command description for EventsNotification
+ *
+ * Command: EventsNotification
+ * @param eventHeader INT8U
+ * @param eventId EventIdentification
+ */
+#define emberAfFillCommandAppliance                                                                                                \
+    Events and AlertClusterEventsNotification(eventHeader, eventId)                                                                \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_EVENTS_NOTIFICATION_COMMAND_ID, "uu", eventHeader, eventId);
+
+/** @brief Command description for LogNotification
+ *
+ * Command: LogNotification
+ * @param timeStamp TIME_OF_DAY
+ * @param logId INT32U
+ * @param logId INT32U
+ * @param logLength INT32U
+ * @param logPayload INT8U []
+ * @param logPayloadLen int
+ */
+#define emberAfFillCommandAppliance                                                                                                \
+    StatisticsClusterLogNotification(timeStamp, logId, logId, logLength, logPayload, logPayloadLen) emberAfFillExternalBuffer(     \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_LOG_NOTIFICATION_COMMAND_ID, "uuuub", timeStamp, logId, logId, logLength, logPayload, logPayloadLen);
+
+/** @brief Command description for LogQueueRequest
+ *
+ * Command: LogQueueRequest
+ * @param timeStamp TIME_OF_DAY
+ * @param logId INT32U
+ * @param logLength INT32U
+ * @param logPayload INT8U []
+ * @param logPayloadLen int
+ */
+#define emberAfFillCommandAppliance                                                                                                \
+    StatisticsClusterLogQueueRequest(timeStamp, logId, logLength, logPayload, logPayloadLen) emberAfFillExternalBuffer(            \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_LOG_QUEUE_REQUEST_COMMAND_ID, "uuub", timeStamp, logId, logLength, logPayload, logPayloadLen);
+
+/** @brief Command description for LogQueueResponse
+ *
+ * Command: LogQueueResponse
+ * @param logQueueSize INT8U
+ * @param logIds INT32U []
+ * @param logIdsLen int
+ */
+#define emberAfFillCommandAppliance                                                                                                \
+    StatisticsClusterLogQueueResponse(logQueueSize, logIds, logIdsLen)                                                             \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_LOG_QUEUE_RESPONSE_COMMAND_ID, "ub", logQueueSize, logIds, logIdsLen);
+
+/** @brief Command description for StatisticsAvailable
+ *
+ * Command: StatisticsAvailable
+ * @param logQueueSize INT8U
+ * @param logIds INT32U []
+ * @param logIdsLen int
+ */
+#define emberAfFillCommandAppliance                                                                                                \
+    StatisticsClusterStatisticsAvailable(logQueueSize, logIds, logIdsLen)                                                          \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_STATISTICS_AVAILABLE_COMMAND_ID, "ub", logQueueSize, logIds, logIdsLen);
+
+/** @brief Command description for GetProfileInfoCommand
+ *
+ * Command: GetProfileInfoCommand
+ * @param profileCount INT8U
+ * @param profileIntervalPeriod ENUM8
+ * @param maxNumberOfIntervals INT8U
+ * @param listOfAttributes INT16U []
+ * @param listOfAttributesLen int
+ */
+#define emberAfFillCommandElectrical                                                                                               \
+    MeasurementClusterGetProfileInfoCommand(profileCount, profileIntervalPeriod, maxNumberOfIntervals, listOfAttributes,           \
+                                            listOfAttributesLen)                                                                   \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_PROFILE_INFO_COMMAND_COMMAND_ID, "uuub", profileCount, profileIntervalPeriod,            \
+                                  maxNumberOfIntervals, listOfAttributes, listOfAttributesLen);
+
+/** @brief Command description for GetMeasurementProfileResponseCommand
+ *
+ * Command: GetMeasurementProfileResponseCommand
+ * @param startTime INT32U
+ * @param attributeId INT16U
+ * @param status ENUM8
+ * @param startTime INT32U
+ * @param profileIntervalPeriod ENUM8
+ * @param numberOfIntervals ENUM8
+ * @param numberOfIntervalsDelivered INT8U
+ * @param attributeId INT16U
+ * @param intervals INT8U []
+ * @param intervalsLen int
+ */
+#define emberAfFillCommandElectrical                                                                                               \
+    MeasurementClusterGetMeasurementProfileResponseCommand(startTime, attributeId, status, startTime, profileIntervalPeriod,       \
+                                                           numberOfIntervals, numberOfIntervalsDelivered, attributeId, intervals,  \
+                                                           intervalsLen)                                                           \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_MEASUREMENT_PROFILE_RESPONSE_COMMAND_COMMAND_ID, "uuuuuuuub", startTime, attributeId,    \
+                                  status, startTime, profileIntervalPeriod, numberOfIntervals, numberOfIntervalsDelivered,         \
+                                  attributeId, intervals, intervalsLen);
+
+/** @brief Command description for ScanRequest
+ *
+ * Command: ScanRequest
+ * @param transaction INT32U
+ * @param zigbeeInformation ZigbeeInformation
+ * @param zllInformation ZllInformation
+ */
+#define emberAfFillCommandZLL                                                                                                      \
+    CommissioningClusterScanRequest(transaction, zigbeeInformation, zllInformation)                                                \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_SCAN_REQUEST_COMMAND_ID, "uuu", transaction, zigbeeInformation, zllInformation);
+
+/** @brief Command description for ScanResponse
+ *
+ * Command: ScanResponse
+ * @param transaction INT32U
+ * @param rssiCorrection INT8U
+ * @param zigbeeInformation ZigbeeInformation
+ * @param zllInformation ZllInformation
+ * @param keyBitmask KeyBitmask
+ * @param responseId INT32U
+ * @param extendedPanId IEEE_ADDRESS
+ * @param networkUpdateId INT8U
+ * @param logicalChannel INT8U
+ * @param panId INT16U
+ * @param networkAddress INT16U
+ * @param numberOfSubDevices INT8U
+ * @param totalGroupIds INT8U
+ * @param endpointId INT8U
+ * @param profileId INT16U
+ * @param deviceId INT16U
+ * @param version INT8U
+ * @param groupIdCount INT8U
+ */
+#define emberAfFillCommandZLL                                                                                                      \
+    CommissioningClusterScanResponse(transaction, rssiCorrection, zigbeeInformation, zllInformation, keyBitmask, responseId,       \
+                                     extendedPanId, networkUpdateId, logicalChannel, panId, networkAddress, numberOfSubDevices,    \
+                                     totalGroupIds, endpointId, profileId, deviceId, version, groupIdCount)                        \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_SCAN_RESPONSE_COMMAND_ID, "uuuuuuuuuuuuuuuuuu", transaction, rssiCorrection,                 \
+                                  zigbeeInformation, zllInformation, keyBitmask, responseId, extendedPanId, networkUpdateId,       \
+                                  logicalChannel, panId, networkAddress, numberOfSubDevices, totalGroupIds, endpointId, profileId, \
+                                  deviceId, version, groupIdCount);
+
+/** @brief Command description for DeviceInformationRequest
+ *
+ * Command: DeviceInformationRequest
+ * @param transaction INT32U
+ * @param startIndex INT8U
+ */
+#define emberAfFillCommandZLL                                                                                                      \
+    CommissioningClusterDeviceInformationRequest(transaction, startIndex)                                                          \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_DEVICE_INFORMATION_REQUEST_COMMAND_ID, "uu", transaction, startIndex);
+
+/** @brief Command description for DeviceInformationResponse
+ *
+ * Command: DeviceInformationResponse
+ * @param transaction INT32U
+ * @param numberOfSubDevices INT8U
+ * @param startIndex INT8U
+ * @param deviceInformationRecordCount INT8U
+ * @param deviceInformationRecordList DeviceInformationRecord []
+ * @param deviceInformationRecordListLen int
+ */
+#define emberAfFillCommandZLL                                                                                                      \
+    CommissioningClusterDeviceInformationResponse(transaction, numberOfSubDevices, startIndex, deviceInformationRecordCount,       \
+                                                  deviceInformationRecordList, deviceInformationRecordListLen)                     \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_DEVICE_INFORMATION_RESPONSE_COMMAND_ID, "uuuub", transaction, numberOfSubDevices,            \
+                                  startIndex, deviceInformationRecordCount, deviceInformationRecordList,                           \
+                                  deviceInformationRecordListLen);
+
+/** @brief Command description for IdentifyRequest
+ *
+ * Command: IdentifyRequest
+ * @param transaction INT32U
+ * @param identifyDuration INT16U
+ */
+#define emberAfFillCommandZLL                                                                                                      \
+    CommissioningClusterIdentifyRequest(transaction, identifyDuration)                                                             \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_IDENTIFY_REQUEST_COMMAND_ID, "uu", transaction, identifyDuration);
+
+/** @brief Command description for ResetToFactoryNewRequest
+ *
+ * Command: ResetToFactoryNewRequest
+ * @param transaction INT32U
+ */
+#define emberAfFillCommandZLL                                                                                                      \
+    CommissioningClusterResetToFactoryNewRequest(transaction)                                                                      \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_RESET_TO_FACTORY_NEW_REQUEST_COMMAND_ID, "u", transaction);
+
+/** @brief Command description for NetworkStartRequest
+ *
+ * Command: NetworkStartRequest
+ * @param transaction INT32U
+ * @param extendedPanId IEEE_ADDRESS
+ * @param keyIndex KeyIndex
+ * @param encryptedNetworkKey SECURITY_KEY
+ * @param logicalChannel INT8U
+ * @param panId INT16U
+ * @param networkAddress INT16U
+ * @param groupIdentifiersBegin INT16U
+ * @param groupIdentifiersEnd INT16U
+ * @param freeNetworkAddressRangeBegin INT16U
+ * @param freeNetworkAddressRangeEnd INT16U
+ * @param freeGroupIdentifierRangeBegin INT16U
+ * @param freeGroupIdentifierRangeEnd INT16U
+ * @param initiatorIeeeAddress IEEE_ADDRESS
+ * @param initiatorNetworkAddress INT16U
+ */
+#define emberAfFillCommandZLL                                                                                                      \
+    CommissioningClusterNetworkStartRequest(                                                                                       \
+        transaction, extendedPanId, keyIndex, encryptedNetworkKey, logicalChannel, panId, networkAddress, groupIdentifiersBegin,   \
+        groupIdentifiersEnd, freeNetworkAddressRangeBegin, freeNetworkAddressRangeEnd, freeGroupIdentifierRangeBegin,              \
+        freeGroupIdentifierRangeEnd, initiatorIeeeAddress, initiatorNetworkAddress)                                                \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_NETWORK_START_REQUEST_COMMAND_ID, "uuuuuuuuuuuuuuu", transaction, extendedPanId, keyIndex,   \
+                                  encryptedNetworkKey, logicalChannel, panId, networkAddress, groupIdentifiersBegin,               \
+                                  groupIdentifiersEnd, freeNetworkAddressRangeBegin, freeNetworkAddressRangeEnd,                   \
+                                  freeGroupIdentifierRangeBegin, freeGroupIdentifierRangeEnd, initiatorIeeeAddress,                \
+                                  initiatorNetworkAddress);
+
+/** @brief Command description for NetworkStartResponse
+ *
+ * Command: NetworkStartResponse
+ * @param transaction INT32U
+ * @param status ZllStatus
+ * @param extendedPanId IEEE_ADDRESS
+ * @param networkUpdateId INT8U
+ * @param logicalChannel INT8U
+ * @param panId INT16U
+ */
+#define emberAfFillCommandZLL                                                                                                      \
+    CommissioningClusterNetworkStartResponse(transaction, status, extendedPanId, networkUpdateId, logicalChannel, panId)           \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_NETWORK_START_RESPONSE_COMMAND_ID, "uuuuuu", transaction, status, extendedPanId,             \
+                                  networkUpdateId, logicalChannel, panId);
+
+/** @brief Command description for NetworkJoinRouterRequest
+ *
+ * Command: NetworkJoinRouterRequest
+ * @param transaction INT32U
+ * @param extendedPanId IEEE_ADDRESS
+ * @param keyIndex KeyIndex
+ * @param encryptedNetworkKey SECURITY_KEY
+ * @param networkUpdateId INT8U
+ * @param logicalChannel INT8U
+ * @param panId INT16U
+ * @param networkAddress INT16U
+ * @param groupIdentifiersBegin INT16U
+ * @param groupIdentifiersEnd INT16U
+ * @param freeNetworkAddressRangeBegin INT16U
+ * @param freeNetworkAddressRangeEnd INT16U
+ * @param freeGroupIdentifierRangeBegin INT16U
+ * @param freeGroupIdentifierRangeEnd INT16U
+ */
+#define emberAfFillCommandZLL                                                                                                      \
+    CommissioningClusterNetworkJoinRouterRequest(transaction, extendedPanId, keyIndex, encryptedNetworkKey, networkUpdateId,       \
+                                                 logicalChannel, panId, networkAddress, groupIdentifiersBegin,                     \
+                                                 groupIdentifiersEnd, freeNetworkAddressRangeBegin, freeNetworkAddressRangeEnd,    \
+                                                 freeGroupIdentifierRangeBegin, freeGroupIdentifierRangeEnd)                       \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_NETWORK_JOIN_ROUTER_REQUEST_COMMAND_ID, "uuuuuuuuuuuuuu", transaction, extendedPanId,        \
+                                  keyIndex, encryptedNetworkKey, networkUpdateId, logicalChannel, panId, networkAddress,           \
+                                  groupIdentifiersBegin, groupIdentifiersEnd, freeNetworkAddressRangeBegin,                        \
+                                  freeNetworkAddressRangeEnd, freeGroupIdentifierRangeBegin, freeGroupIdentifierRangeEnd);
+
+/** @brief Command description for NetworkJoinRouterResponse
+ *
+ * Command: NetworkJoinRouterResponse
+ * @param transaction INT32U
+ * @param status ZllStatus
+ */
+#define emberAfFillCommandZLL                                                                                                      \
+    CommissioningClusterNetworkJoinRouterResponse(transaction, status)                                                             \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_NETWORK_JOIN_ROUTER_RESPONSE_COMMAND_ID, "uu", transaction, status);
+
+/** @brief Command description for NetworkJoinEndDeviceRequest
+ *
+ * Command: NetworkJoinEndDeviceRequest
+ * @param transaction INT32U
+ * @param extendedPanId IEEE_ADDRESS
+ * @param keyIndex KeyIndex
+ * @param encryptedNetworkKey SECURITY_KEY
+ * @param networkUpdateId INT8U
+ * @param logicalChannel INT8U
+ * @param panId INT16U
+ * @param networkAddress INT16U
+ * @param groupIdentifiersBegin INT16U
+ * @param groupIdentifiersEnd INT16U
+ * @param freeNetworkAddressRangeBegin INT16U
+ * @param freeNetworkAddressRangeEnd INT16U
+ * @param freeGroupIdentifierRangeBegin INT16U
+ * @param freeGroupIdentifierRangeEnd INT16U
+ */
+#define emberAfFillCommandZLL                                                                                                      \
+    CommissioningClusterNetworkJoinEndDeviceRequest(transaction, extendedPanId, keyIndex, encryptedNetworkKey, networkUpdateId,    \
+                                                    logicalChannel, panId, networkAddress, groupIdentifiersBegin,                  \
+                                                    groupIdentifiersEnd, freeNetworkAddressRangeBegin, freeNetworkAddressRangeEnd, \
+                                                    freeGroupIdentifierRangeBegin, freeGroupIdentifierRangeEnd)                    \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_NETWORK_JOIN_END_DEVICE_REQUEST_COMMAND_ID, "uuuuuuuuuuuuuu", transaction, extendedPanId,    \
+                                  keyIndex, encryptedNetworkKey, networkUpdateId, logicalChannel, panId, networkAddress,           \
+                                  groupIdentifiersBegin, groupIdentifiersEnd, freeNetworkAddressRangeBegin,                        \
+                                  freeNetworkAddressRangeEnd, freeGroupIdentifierRangeBegin, freeGroupIdentifierRangeEnd);
+
+/** @brief Command description for NetworkJoinEndDeviceResponse
+ *
+ * Command: NetworkJoinEndDeviceResponse
+ * @param transaction INT32U
+ * @param status ZllStatus
+ */
+#define emberAfFillCommandZLL                                                                                                      \
+    CommissioningClusterNetworkJoinEndDeviceResponse(transaction, status)                                                          \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_NETWORK_JOIN_END_DEVICE_RESPONSE_COMMAND_ID, "uu", transaction, status);
+
+/** @brief Command description for NetworkUpdateRequest
+ *
+ * Command: NetworkUpdateRequest
+ * @param transaction INT32U
+ * @param extendedPanId IEEE_ADDRESS
+ * @param networkUpdateId INT8U
+ * @param logicalChannel INT8U
+ * @param panId INT16U
+ * @param networkAddress INT16U
+ */
+#define emberAfFillCommandZLL                                                                                                      \
+    CommissioningClusterNetworkUpdateRequest(transaction, extendedPanId, networkUpdateId, logicalChannel, panId, networkAddress)   \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_NETWORK_UPDATE_REQUEST_COMMAND_ID, "uuuuuu", transaction, extendedPanId, networkUpdateId,    \
+                                  logicalChannel, panId, networkAddress);
+
+/** @brief Command description for EndpointInformation
+ *
+ * Command: EndpointInformation
+ * @param ieeeAddress IEEE_ADDRESS
+ * @param networkAddress INT16U
+ * @param endpointId INT8U
+ * @param profileId INT16U
+ * @param deviceId INT16U
+ * @param version INT8U
+ */
+#define emberAfFillCommandZLL                                                                                                      \
+    CommissioningClusterEndpointInformation(ieeeAddress, networkAddress, endpointId, profileId, deviceId, version)                 \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_ENDPOINT_INFORMATION_COMMAND_ID, "uuuuuu", ieeeAddress, networkAddress, endpointId,          \
+                                  profileId, deviceId, version);
+
+/** @brief Command description for GetGroupIdentifiersRequest
+ *
+ * Command: GetGroupIdentifiersRequest
+ * @param startIndex INT8U
+ * @param total INT8U
+ * @param startIndex INT8U
+ * @param count INT8U
+ * @param groupInformationRecordList GroupInformationRecord []
+ * @param groupInformationRecordListLen int
+ */
+#define emberAfFillCommandZLL                                                                                                      \
+    CommissioningClusterGetGroupIdentifiersRequest(startIndex, total, startIndex, count, groupInformationRecordList,               \
+                                                   groupInformationRecordListLen)                                                  \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_GROUP_IDENTIFIERS_REQUEST_COMMAND_ID, "uuuub", startIndex, total, startIndex, count,     \
+                                  groupInformationRecordList, groupInformationRecordListLen);
+
+/** @brief Command description for GetEndpointListRequest
+ *
+ * Command: GetEndpointListRequest
+ * @param startIndex INT8U
+ * @param total INT8U
+ * @param startIndex INT8U
+ * @param count INT8U
+ * @param endpointInformationRecordList EndpointInformationRecord []
+ * @param endpointInformationRecordListLen int
+ */
+#define emberAfFillCommandZLL                                                                                                      \
+    CommissioningClusterGetEndpointListRequest(startIndex, total, startIndex, count, endpointInformationRecordList,                \
+                                               endpointInformationRecordListLen)                                                   \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_ENDPOINT_LIST_REQUEST_COMMAND_ID, "uuuub", startIndex, total, startIndex, count,         \
+                                  endpointInformationRecordList, endpointInformationRecordListLen);
+
+/** @brief Command description for Bind
+ *
+ * Command: Bind
+ * @param nodeId NODE_ID
+ * @param groupId GROUP_ID
+ * @param endpointId ENDPOINT_ID
+ * @param clusterId CLUSTER_ID
+ */
+#define emberAfFillCommandBindingClusterBind(nodeId, groupId, endpointId, clusterId)                                               \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_BIND_COMMAND_ID, "uuuu", nodeId, groupId, endpointId, clusterId);
+
+/** @brief Command description for Unbind
+ *
+ * Command: Unbind
+ * @param nodeId NODE_ID
+ * @param groupId GROUP_ID
+ * @param endpointId ENDPOINT_ID
+ * @param clusterId CLUSTER_ID
+ */
+#define emberAfFillCommandBindingClusterUnbind(nodeId, groupId, endpointId, clusterId)                                             \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_UNBIND_COMMAND_ID, "uuuu", nodeId, groupId, endpointId, clusterId);
+
+/** @brief Command description for CommandOne
+ *
+ * Command: CommandOne
+ * @param argOne INT8U
+ * @param argOne INT8U
+ */
+#define emberAfFillCommandSample                                                                                                   \
+    Mfg Specific ClusterClusterCommandOne(argOne, argOne)                                                                          \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_COMMAND_ONE_COMMAND_ID, "uu", argOne, argOne);
+
+/** @brief Command description for SetToken
+ *
+ * Command: SetToken
+ * @param token INT16U
+ * @param token INT16U
+ * @param data OCTET_STRING
+ * @param data OCTET_STRING
+ */
+#define emberAfFillCommandConfiguration                                                                                            \
+    ClusterClusterSetToken(token, token, data, data)                                                                               \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_SET_TOKEN_COMMAND_ID, "uuuu", token, token, data, data);
+
+/** @brief Command description for LockTokens
+ *
+ * Command: LockTokens
+ */
+#define emberAfFillCommandConfiguration                                                                                            \
+    ClusterClusterLockTokens() emberAfFillExternalBuffer(mask,                                                                     \
+                                                                                                                                   \
+                                                         ZCL_LOCK_TOKENS_COMMAND_ID, "", );
+
+/** @brief Command description for ReadTokens
+ *
+ * Command: ReadTokens
+ * @param token INT16U
+ */
+#define emberAfFillCommandConfiguration                                                                                            \
+    ClusterClusterReadTokens(token) emberAfFillExternalBuffer(mask,                                                                \
+                                                                                                                                   \
+                                                              ZCL_READ_TOKENS_COMMAND_ID, "u", token);
+
+/** @brief Command description for UnlockTokens
+ *
+ * Command: UnlockTokens
+ * @param data OCTET_STRING
+ */
+#define emberAfFillCommandConfiguration                                                                                            \
+    ClusterClusterUnlockTokens(data) emberAfFillExternalBuffer(mask,                                                               \
+                                                                                                                                   \
+                                                               ZCL_UNLOCK_TOKENS_COMMAND_ID, "u", data);
+
+/** @brief Command description for stream
+ *
+ * Command: stream
+ * @param channel INT8U
+ * @param power INT8S
+ * @param time INT16U
+ */
+#define emberAfFillCommandMFGLIB                                                                                                   \
+    ClusterClusterstream(channel, power, time) emberAfFillExternalBuffer(mask,                                                     \
+                                                                                                                                   \
+                                                                         ZCL_STREAM_COMMAND_ID, "uuu", channel, power, time);
+
+/** @brief Command description for tone
+ *
+ * Command: tone
+ * @param channel INT8U
+ * @param power INT8S
+ * @param time INT16U
+ */
+#define emberAfFillCommandMFGLIB                                                                                                   \
+    ClusterClustertone(channel, power, time) emberAfFillExternalBuffer(mask,                                                       \
+                                                                                                                                   \
+                                                                       ZCL_TONE_COMMAND_ID, "uuu", channel, power, time);
+
+/** @brief Command description for rxMode
+ *
+ * Command: rxMode
+ * @param channel INT8U
+ * @param power INT8S
+ * @param time INT16U
+ */
+#define emberAfFillCommandMFGLIB                                                                                                   \
+    ClusterClusterrxMode(channel, power, time) emberAfFillExternalBuffer(mask,                                                     \
+                                                                                                                                   \
+                                                                         ZCL_RX_MODE_COMMAND_ID, "uuu", channel, power, time);
+
+/** @brief Command description for EnableApsLinkKeyAuthorization
+ *
+ * Command: EnableApsLinkKeyAuthorization
+ * @param numberExemptClusters INT8U
+ * @param clusterId CLUSTER_ID
+ * @param clusterId CLUSTER_ID []
+ * @param clusterIdLen int
+ * @param apsLinkKeyAuthStatus BOOLEAN
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterEnableApsLinkKeyAuthorization(numberExemptClusters, clusterId, clusterId, clusterIdLen,              \
+                                                            apsLinkKeyAuthStatus)                                                  \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_ENABLE_APS_LINK_KEY_AUTHORIZATION_COMMAND_ID, "uubu", numberExemptClusters, clusterId,       \
+                                  clusterId, clusterIdLen, apsLinkKeyAuthStatus);
+
+/** @brief Command description for DisableApsLinkKeyAuthorization
+ *
+ * Command: DisableApsLinkKeyAuthorization
+ * @param numberExemptClusters INT8U
+ * @param powerNotificationReason WwahPowerNotificationReason
+ * @param clusterId CLUSTER_ID []
+ * @param clusterIdLen int
+ * @param manufacturerId INT16U
+ * @param manufacturerReasonLength INT8U
+ * @param manufacturerReason INT8U []
+ * @param manufacturerReasonLen int
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterDisableApsLinkKeyAuthorization(numberExemptClusters, powerNotificationReason, clusterId,             \
+                                                             clusterIdLen, manufacturerId, manufacturerReasonLength,               \
+                                                             manufacturerReason, manufacturerReasonLen)                            \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_DISABLE_APS_LINK_KEY_AUTHORIZATION_COMMAND_ID, "uubuub", numberExemptClusters,               \
+                                  powerNotificationReason, clusterId, clusterIdLen, manufacturerId, manufacturerReasonLength,      \
+                                  manufacturerReason, manufacturerReasonLen);
+
+/** @brief Command description for ApsLinkKeyAuthorizationQuery
+ *
+ * Command: ApsLinkKeyAuthorizationQuery
+ * @param clusterId CLUSTER_ID
+ * @param powerNotificationReason WwahPowerNotificationReason
+ * @param manufacturerId INT16U
+ * @param manufacturerReasonLength INT8U
+ * @param manufacturerReason INT8U []
+ * @param manufacturerReasonLen int
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterApsLinkKeyAuthorizationQuery(clusterId, powerNotificationReason, manufacturerId,                     \
+                                                           manufacturerReasonLength, manufacturerReason, manufacturerReasonLen)    \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_APS_LINK_KEY_AUTHORIZATION_QUERY_COMMAND_ID, "uuuub", clusterId, powerNotificationReason,    \
+                                  manufacturerId, manufacturerReasonLength, manufacturerReason, manufacturerReasonLen);
+
+/** @brief Command description for RequestNewApsLinkKey
+ *
+ * Command: RequestNewApsLinkKey
+ * @param deviceEui64 IEEE_ADDRESS
+ * @param deviceShort INT16U
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterRequestNewApsLinkKey(deviceEui64, deviceShort)                                                       \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_REQUEST_NEW_APS_LINK_KEY_COMMAND_ID, "uu", deviceEui64, deviceShort);
+
+/** @brief Command description for EnableWwahAppEventRetryAlgorithm
+ *
+ * Command: EnableWwahAppEventRetryAlgorithm
+ * @param firstBackoffTimeSeconds INT8U
+ * @param numberExemptClusters INT8U
+ * @param backoffSeqCommonRatio INT8U
+ * @param clusterId CLUSTER_ID []
+ * @param clusterIdLen int
+ * @param maxBackoffTimeSeconds INT32U
+ * @param maxRedeliveryAttempts INT8U
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterEnableWwahAppEventRetryAlgorithm(                                                                    \
+        firstBackoffTimeSeconds, numberExemptClusters, backoffSeqCommonRatio, clusterId, clusterIdLen, maxBackoffTimeSeconds,      \
+        maxRedeliveryAttempts) emberAfFillExternalBuffer(mask,                                                                     \
+                                                                                                                                   \
+                                                         ZCL_ENABLE_WWAH_APP_EVENT_RETRY_ALGORITHM_COMMAND_ID, "uuubuu",           \
+                                                         firstBackoffTimeSeconds, numberExemptClusters, backoffSeqCommonRatio,     \
+                                                         clusterId, clusterIdLen, maxBackoffTimeSeconds, maxRedeliveryAttempts);
+
+/** @brief Command description for DisableWwahAppEventRetryAlgorithm
+ *
+ * Command: DisableWwahAppEventRetryAlgorithm
+ * @param currentPowerMode INT32U
+ * @param availablePowerSources INT32U
+ * @param currentPowerSource INT32U
+ * @param currentPowerSourceLevel INT32U
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterDisableWwahAppEventRetryAlgorithm(currentPowerMode, availablePowerSources, currentPowerSource,       \
+                                                                currentPowerSourceLevel)                                           \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_DISABLE_WWAH_APP_EVENT_RETRY_ALGORITHM_COMMAND_ID, "uuuu", currentPowerMode,                 \
+                                  availablePowerSources, currentPowerSource, currentPowerSourceLevel);
+
+/** @brief Command description for RequestTime
+ *
+ * Command: RequestTime
+ * @param debugReportId INT8U
+ * @param debugReportSize INT32U
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterRequestTime(debugReportId, debugReportSize)                                                          \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_REQUEST_TIME_COMMAND_ID, "uu", debugReportId, debugReportSize);
+
+/** @brief Command description for EnableWwahRejoinAlgorithm
+ *
+ * Command: EnableWwahRejoinAlgorithm
+ * @param fastRejoinTimeoutSeconds INT16U
+ * @param debugReportId INT8U
+ * @param durationBetweenRejoinsSeconds INT16U
+ * @param debugReportData INT8U []
+ * @param debugReportDataLen int
+ * @param fastRejoinFirstBackoffSeconds INT16U
+ * @param maxBackoffTimeSeconds INT16U
+ * @param maxBackoffIterations INT16U
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterEnableWwahRejoinAlgorithm(fastRejoinTimeoutSeconds, debugReportId, durationBetweenRejoinsSeconds,    \
+                                                        debugReportData, debugReportDataLen, fastRejoinFirstBackoffSeconds,        \
+                                                        maxBackoffTimeSeconds, maxBackoffIterations)                               \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_ENABLE_WWAH_REJOIN_ALGORITHM_COMMAND_ID, "uuubuuu", fastRejoinTimeoutSeconds, debugReportId, \
+                                  durationBetweenRejoinsSeconds, debugReportData, debugReportDataLen,                              \
+                                  fastRejoinFirstBackoffSeconds, maxBackoffTimeSeconds, maxBackoffIterations);
+
+/** @brief Command description for DisableWwahRejoinAlgorithm
+ *
+ * Command: DisableWwahRejoinAlgorithm
+ * @param numberOfClusters INT8U
+ * @param clusterId CLUSTER_ID []
+ * @param clusterIdLen int
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterDisableWwahRejoinAlgorithm(numberOfClusters, clusterId, clusterIdLen)                                \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_DISABLE_WWAH_REJOIN_ALGORITHM_COMMAND_ID, "ub", numberOfClusters, clusterId, clusterIdLen);
+
+/** @brief Command description for SetIasZoneEnrollmentMethod
+ *
+ * Command: SetIasZoneEnrollmentMethod
+ * @param enrollmentMode WwahIasZoneEnrollmentMode
+ * @param numberOfBeacons INT8U
+ * @param beacon WwahBeaconSurvey []
+ * @param beaconLen int
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterSetIasZoneEnrollmentMethod(enrollmentMode, numberOfBeacons, beacon, beaconLen)                       \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_SET_IAS_ZONE_ENROLLMENT_METHOD_COMMAND_ID, "uub", enrollmentMode, numberOfBeacons, beacon,   \
+                                  beaconLen);
+
+/** @brief Command description for ClearBindingTable
+ *
+ * Command: ClearBindingTable
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterClearBindingTable() emberAfFillExternalBuffer(mask,                                                  \
+                                                                                                                                   \
+                                                                            ZCL_CLEAR_BINDING_TABLE_COMMAND_ID, "", );
+
+/** @brief Command description for EnablePeriodicRouterCheckIns
+ *
+ * Command: EnablePeriodicRouterCheckIns
+ * @param checkInInterval INT16U
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterEnablePeriodicRouterCheckIns(checkInInterval)                                                        \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_ENABLE_PERIODIC_ROUTER_CHECK_INS_COMMAND_ID, "u", checkInInterval);
+
+/** @brief Command description for DisablePeriodicRouterCheckIns
+ *
+ * Command: DisablePeriodicRouterCheckIns
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterDisablePeriodicRouterCheckIns()                                                                      \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_DISABLE_PERIODIC_ROUTER_CHECK_INS_COMMAND_ID, "", );
+
+/** @brief Command description for SetMacPollFailureWaitTime
+ *
+ * Command: SetMacPollFailureWaitTime
+ * @param waitTime INT8U
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterSetMacPollFailureWaitTime(waitTime)                                                                  \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_SET_MAC_POLL_FAILURE_WAIT_TIME_COMMAND_ID, "u", waitTime);
+
+/** @brief Command description for SetPendingNetworkUpdate
+ *
+ * Command: SetPendingNetworkUpdate
+ * @param channel INT8U
+ * @param panId INT16U
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterSetPendingNetworkUpdate(channel, panId)                                                              \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_SET_PENDING_NETWORK_UPDATE_COMMAND_ID, "uu", channel, panId);
+
+/** @brief Command description for RequireApsAcksOnUnicasts
+ *
+ * Command: RequireApsAcksOnUnicasts
+ * @param numberExemptClusters INT8U
+ * @param clusterId CLUSTER_ID []
+ * @param clusterIdLen int
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterRequireApsAcksOnUnicasts(numberExemptClusters, clusterId, clusterIdLen) emberAfFillExternalBuffer(   \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_REQUIRE_APS_ACKS_ON_UNICASTS_COMMAND_ID, "ub", numberExemptClusters, clusterId, clusterIdLen);
+
+/** @brief Command description for RemoveApsAcksOnUnicastsRequirement
+ *
+ * Command: RemoveApsAcksOnUnicastsRequirement
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterRemoveApsAcksOnUnicastsRequirement()                                                                 \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_REMOVE_APS_ACKS_ON_UNICASTS_REQUIREMENT_COMMAND_ID, "", );
+
+/** @brief Command description for ApsAckRequirementQuery
+ *
+ * Command: ApsAckRequirementQuery
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterApsAckRequirementQuery() emberAfFillExternalBuffer(mask,                                             \
+                                                                                                                                   \
+                                                                                 ZCL_APS_ACK_REQUIREMENT_QUERY_COMMAND_ID, "", );
+
+/** @brief Command description for DebugReportQuery
+ *
+ * Command: DebugReportQuery
+ * @param debugReportId INT8U
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterDebugReportQuery(debugReportId)                                                                      \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_DEBUG_REPORT_QUERY_COMMAND_ID, "u", debugReportId);
+
+/** @brief Command description for SurveyBeacons
+ *
+ * Command: SurveyBeacons
+ * @param standardBeacons BOOLEAN
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterSurveyBeacons(standardBeacons)                                                                       \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_SURVEY_BEACONS_COMMAND_ID, "u", standardBeacons);
+
+/** @brief Command description for DisableOtaDowngrades
+ *
+ * Command: DisableOtaDowngrades
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterDisableOtaDowngrades() emberAfFillExternalBuffer(mask,                                               \
+                                                                                                                                   \
+                                                                               ZCL_DISABLE_OTA_DOWNGRADES_COMMAND_ID, "", );
+
+/** @brief Command description for DisableMgmtLeaveWithoutRejoin
+ *
+ * Command: DisableMgmtLeaveWithoutRejoin
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterDisableMgmtLeaveWithoutRejoin()                                                                      \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_DISABLE_MGMT_LEAVE_WITHOUT_REJOIN_COMMAND_ID, "", );
+
+/** @brief Command description for DisableTouchlinkInterpanMessageSupport
+ *
+ * Command: DisableTouchlinkInterpanMessageSupport
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterDisableTouchlinkInterpanMessageSupport()                                                             \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_DISABLE_TOUCHLINK_INTERPAN_MESSAGE_SUPPORT_COMMAND_ID, "", );
+
+/** @brief Command description for EnableWwahParentClassification
+ *
+ * Command: EnableWwahParentClassification
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterEnableWwahParentClassification()                                                                     \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_ENABLE_WWAH_PARENT_CLASSIFICATION_COMMAND_ID, "", );
+
+/** @brief Command description for DisableWwahParentClassification
+ *
+ * Command: DisableWwahParentClassification
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterDisableWwahParentClassification()                                                                    \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_DISABLE_WWAH_PARENT_CLASSIFICATION_COMMAND_ID, "", );
+
+/** @brief Command description for EnableTcSecurityOnNtwkKeyRotation
+ *
+ * Command: EnableTcSecurityOnNtwkKeyRotation
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterEnableTcSecurityOnNtwkKeyRotation()                                                                  \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_ENABLE_TC_SECURITY_ON_NTWK_KEY_ROTATION_COMMAND_ID, "", );
+
+/** @brief Command description for EnableWwahBadParentRecovery
+ *
+ * Command: EnableWwahBadParentRecovery
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterEnableWwahBadParentRecovery()                                                                        \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_ENABLE_WWAH_BAD_PARENT_RECOVERY_COMMAND_ID, "", );
+
+/** @brief Command description for DisableWwahBadParentRecovery
+ *
+ * Command: DisableWwahBadParentRecovery
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterDisableWwahBadParentRecovery()                                                                       \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_DISABLE_WWAH_BAD_PARENT_RECOVERY_COMMAND_ID, "", );
+
+/** @brief Command description for EnableConfigurationMode
+ *
+ * Command: EnableConfigurationMode
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterEnableConfigurationMode() emberAfFillExternalBuffer(mask,                                            \
+                                                                                                                                   \
+                                                                                  ZCL_ENABLE_CONFIGURATION_MODE_COMMAND_ID, "", );
+
+/** @brief Command description for DisableConfigurationMode
+ *
+ * Command: DisableConfigurationMode
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterDisableConfigurationMode()                                                                           \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_DISABLE_CONFIGURATION_MODE_COMMAND_ID, "", );
+
+/** @brief Command description for UseTrustCenterForClusterServer
+ *
+ * Command: UseTrustCenterForClusterServer
+ * @param numberOfClusters INT8U
+ * @param clusterId CLUSTER_ID []
+ * @param clusterIdLen int
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterUseTrustCenterForClusterServer(numberOfClusters, clusterId, clusterIdLen) emberAfFillExternalBuffer( \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_USE_TRUST_CENTER_FOR_CLUSTER_SERVER_COMMAND_ID, "ub", numberOfClusters, clusterId, clusterIdLen);
+
+/** @brief Command description for TrustCenterForClusterServerQuery
+ *
+ * Command: TrustCenterForClusterServerQuery
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterTrustCenterForClusterServerQuery()                                                                   \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_TRUST_CENTER_FOR_CLUSTER_SERVER_QUERY_COMMAND_ID, "", );
+
+/** @brief Command description for UseTrustCenterForClusterServerResponse
+ *
+ * Command: UseTrustCenterForClusterServerResponse
+ * @param status Status
+ * @param clusterStatusLength INT8U
+ * @param clusterStatus WwahClusterStatusToUseTC []
+ * @param clusterStatusLen int
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterUseTrustCenterForClusterServerResponse(status, clusterStatusLength, clusterStatus, clusterStatusLen) \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_USE_TRUST_CENTER_FOR_CLUSTER_SERVER_RESPONSE_COMMAND_ID, "uub", status, clusterStatusLength, \
+                                  clusterStatus, clusterStatusLen);
diff --git a/examples/chip-tool/gen/cluster-id.h b/examples/chip-tool/gen/cluster-id.h
new file mode 100644
index 0000000..262de53
--- /dev/null
+++ b/examples/chip-tool/gen/cluster-id.h
@@ -0,0 +1,351 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+// Prevent multiple inclusion
+#pragma once
+
+// Definitions for cluster: Basic
+#define ZCL_BASIC_CLUSTER_ID (0x0000)
+
+// Definitions for cluster: Power Configuration
+#define ZCL_POWER_CONFIG_CLUSTER_ID (0x0001)
+
+// Definitions for cluster: Device Temperature Configuration
+#define ZCL_DEVICE_TEMP_CLUSTER_ID (0x0002)
+
+// Definitions for cluster: Identify
+#define ZCL_IDENTIFY_CLUSTER_ID (0x0003)
+
+// Definitions for cluster: Groups
+#define ZCL_GROUPS_CLUSTER_ID (0x0004)
+
+// Definitions for cluster: Scenes
+#define ZCL_SCENES_CLUSTER_ID (0x0005)
+
+// Definitions for cluster: On/off
+#define ZCL_ON_OFF_CLUSTER_ID (0x0006)
+
+// Definitions for cluster: On/off Switch Configuration
+#define ZCL_ON_OFF_SWITCH_CONFIG_CLUSTER_ID (0x0007)
+
+// Definitions for cluster: Level Control
+#define ZCL_LEVEL_CONTROL_CLUSTER_ID (0x0008)
+
+// Definitions for cluster: Alarms
+#define ZCL_ALARM_CLUSTER_ID (0x0009)
+
+// Definitions for cluster: Time
+#define ZCL_TIME_CLUSTER_ID (0x000A)
+
+// Definitions for cluster: RSSI Location
+#define ZCL_RSSI_LOCATION_CLUSTER_ID (0x000B)
+
+// Definitions for cluster: Binary Input (Basic)
+#define ZCL_BINARY_INPUT_BASIC_CLUSTER_ID (0x000F)
+
+// Definitions for cluster: Commissioning
+#define ZCL_COMMISSIONING_CLUSTER_ID (0x0015)
+
+// Definitions for cluster: Partition
+#define ZCL_PARTITION_CLUSTER_ID (0x0016)
+
+// Definitions for cluster: Over the Air Bootloading
+#define ZCL_OTA_BOOTLOAD_CLUSTER_ID (0x0019)
+
+// Definitions for cluster: Power Profile
+#define ZCL_POWER_PROFILE_CLUSTER_ID (0x001A)
+
+// Definitions for cluster: Appliance Control
+#define ZCL_APPLIANCE_CONTROL_CLUSTER_ID (0x001B)
+
+// Definitions for cluster: Poll Control
+#define ZCL_POLL_CONTROL_CLUSTER_ID (0x0020)
+
+// Definitions for cluster: Green Power
+#define ZCL_GREEN_POWER_CLUSTER_ID (0x0021)
+
+// Definitions for cluster: Keep-Alive
+#define ZCL_KEEPALIVE_CLUSTER_ID (0x0025)
+
+// Definitions for cluster: Shade Configuration
+#define ZCL_SHADE_CONFIG_CLUSTER_ID (0x0100)
+
+// Definitions for cluster: Door Lock
+#define ZCL_DOOR_LOCK_CLUSTER_ID (0x0101)
+
+// Definitions for cluster: Window Covering
+#define ZCL_WINDOW_COVERING_CLUSTER_ID (0x0102)
+
+// Definitions for cluster: Barrier Control
+#define ZCL_BARRIER_CONTROL_CLUSTER_ID (0x0103)
+
+// Definitions for cluster: Pump Configuration and Control
+#define ZCL_PUMP_CONFIG_CONTROL_CLUSTER_ID (0x0200)
+
+// Definitions for cluster: Thermostat
+#define ZCL_THERMOSTAT_CLUSTER_ID (0x0201)
+
+// Definitions for cluster: Fan Control
+#define ZCL_FAN_CONTROL_CLUSTER_ID (0x0202)
+
+// Definitions for cluster: Dehumidification Control
+#define ZCL_DEHUMID_CONTROL_CLUSTER_ID (0x0203)
+
+// Definitions for cluster: Thermostat User Interface Configuration
+#define ZCL_THERMOSTAT_UI_CONFIG_CLUSTER_ID (0x0204)
+
+// Definitions for cluster: Color Control
+#define ZCL_COLOR_CONTROL_CLUSTER_ID (0x0300)
+
+// Definitions for cluster: Ballast Configuration
+#define ZCL_BALLAST_CONFIGURATION_CLUSTER_ID (0x0301)
+
+// Definitions for cluster: Illuminance Measurement
+#define ZCL_ILLUM_MEASUREMENT_CLUSTER_ID (0x0400)
+
+// Definitions for cluster: Illuminance Level Sensing
+#define ZCL_ILLUM_LEVEL_SENSING_CLUSTER_ID (0x0401)
+
+// Definitions for cluster: Temperature Measurement
+#define ZCL_TEMP_MEASUREMENT_CLUSTER_ID (0x0402)
+
+// Definitions for cluster: Pressure Measurement
+#define ZCL_PRESSURE_MEASUREMENT_CLUSTER_ID (0x0403)
+
+// Definitions for cluster: Flow Measurement
+#define ZCL_FLOW_MEASUREMENT_CLUSTER_ID (0x0404)
+
+// Definitions for cluster: Relative Humidity Measurement
+#define ZCL_RELATIVE_HUMIDITY_MEASUREMENT_CLUSTER_ID (0x0405)
+
+// Definitions for cluster: Occupancy Sensing
+#define ZCL_OCCUPANCY_SENSING_CLUSTER_ID (0x0406)
+
+// Definitions for cluster: Carbon Monoxide Concentration Measurement
+#define ZCL_CARBON_MONOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x040C)
+
+// Definitions for cluster: Carbon Dioxide Concentration Measurement
+#define ZCL_CARBON_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x040D)
+
+// Definitions for cluster: Ethylene Concentration Measurement
+#define ZCL_ETHYLENE_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x040E)
+
+// Definitions for cluster: Ethylene Oxide Concentration Measurement
+#define ZCL_ETHYLENE_OXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x040F)
+
+// Definitions for cluster: Hydrogen Concentration Measurement
+#define ZCL_HYDROGEN_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0410)
+
+// Definitions for cluster: Hydrogen Sulphide Concentration Measurement
+#define ZCL_HYDROGEN_SULPHIDE_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0411)
+
+// Definitions for cluster: Nitric Oxide Concentration Measurement
+#define ZCL_NITRIC_OXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0412)
+
+// Definitions for cluster: Nitrogen Dioxide Concentration Measurement
+#define ZCL_NITROGEN_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0413)
+
+// Definitions for cluster: Oxygen Concentration Measurement
+#define ZCL_OXYGEN_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0414)
+
+// Definitions for cluster: Ozone Concentration Measurement
+#define ZCL_OZONE_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0415)
+
+// Definitions for cluster: Sulfur Dioxide Concentration Measurement
+#define ZCL_SULFUR_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0416)
+
+// Definitions for cluster: Dissolved Oxygen Concentration Measurement
+#define ZCL_DISSOLVED_OXYGEN_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0417)
+
+// Definitions for cluster: Bromate Concentration Measurement
+#define ZCL_BROMATE_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0418)
+
+// Definitions for cluster: Chloramines Concentration Measurement
+#define ZCL_CHLORAMINES_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0419)
+
+// Definitions for cluster: Chlorine Concentration Measurement
+#define ZCL_CHLORINE_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x041A)
+
+// Definitions for cluster: Fecal coliform and E. Coli Concentration Measurement
+#define ZCL_FECAL_COLIFORM_AND_E_COLI_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x041B)
+
+// Definitions for cluster: Fluoride Concentration Measurement
+#define ZCL_FLUORIDE_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x041C)
+
+// Definitions for cluster: Haloacetic Acids Concentration Measurement
+#define ZCL_HALOACETIC_ACIDS_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x041D)
+
+// Definitions for cluster: Total Trihalomethanes Concentration Measurement
+#define ZCL_TOTAL_TRIHALOMETHANES_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x041E)
+
+// Definitions for cluster: Total Coliform Bacteria Concentration Measurement
+#define ZCL_TOTAL_COLIFORM_BACTERIA_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x041F)
+
+// Definitions for cluster: Turbidity Concentration Measurement
+#define ZCL_TURBIDITY_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0420)
+
+// Definitions for cluster: Copper Concentration Measurement
+#define ZCL_COPPER_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0421)
+
+// Definitions for cluster: Lead Concentration Measurement
+#define ZCL_LEAD_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0422)
+
+// Definitions for cluster: Manganese Concentration Measurement
+#define ZCL_MANGANESE_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0423)
+
+// Definitions for cluster: Sulfate Concentration Measurement
+#define ZCL_SULFATE_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0424)
+
+// Definitions for cluster: Bromodichloromethane Concentration Measurement
+#define ZCL_BROMODICHLOROMETHANE_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0425)
+
+// Definitions for cluster: Bromoform Concentration Measurement
+#define ZCL_BROMOFORM_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0426)
+
+// Definitions for cluster: Chlorodibromomethane Concentration Measurement
+#define ZCL_CHLORODIBROMOMETHANE_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0427)
+
+// Definitions for cluster: Chloroform Concentration Measurement
+#define ZCL_CHLOROFORM_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0428)
+
+// Definitions for cluster: Sodium Concentration Measurement
+#define ZCL_SODIUM_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0429)
+
+// Definitions for cluster: IAS Zone
+#define ZCL_IAS_ZONE_CLUSTER_ID (0x0500)
+
+// Definitions for cluster: IAS ACE
+#define ZCL_IAS_ACE_CLUSTER_ID (0x0501)
+
+// Definitions for cluster: IAS WD
+#define ZCL_IAS_WD_CLUSTER_ID (0x0502)
+
+// Definitions for cluster: Generic Tunnel
+#define ZCL_GENERIC_TUNNEL_CLUSTER_ID (0x0600)
+
+// Definitions for cluster: BACnet Protocol Tunnel
+#define ZCL_BACNET_PROTOCOL_TUNNEL_CLUSTER_ID (0x0601)
+
+// Definitions for cluster: 11073 Protocol Tunnel
+#define ZCL_11073_PROTOCOL_TUNNEL_CLUSTER_ID (0x0614)
+
+// Definitions for cluster: ISO 7816 Protocol Tunnel
+#define ZCL_ISO7816_PROTOCOL_TUNNEL_CLUSTER_ID (0x0615)
+
+// Definitions for cluster: Price
+#define ZCL_PRICE_CLUSTER_ID (0x0700)
+
+// Definitions for cluster: Demand Response and Load Control
+#define ZCL_DEMAND_RESPONSE_LOAD_CONTROL_CLUSTER_ID (0x0701)
+
+// Definitions for cluster: Simple Metering
+#define ZCL_SIMPLE_METERING_CLUSTER_ID (0x0702)
+
+// Definitions for cluster: Messaging
+#define ZCL_MESSAGING_CLUSTER_ID (0x0703)
+
+// Definitions for cluster: Tunneling
+#define ZCL_TUNNELING_CLUSTER_ID (0x0704)
+
+// Definitions for cluster: Prepayment
+#define ZCL_PREPAYMENT_CLUSTER_ID (0x0705)
+
+// Definitions for cluster: Energy Management
+#define ZCL_ENERGY_MANAGEMENT_CLUSTER_ID (0x0706)
+
+// Definitions for cluster: Calendar
+#define ZCL_CALENDAR_CLUSTER_ID (0x0707)
+
+// Definitions for cluster: Device Management
+#define ZCL_DEVICE_MANAGEMENT_CLUSTER_ID (0x0708)
+
+// Definitions for cluster: Events
+#define ZCL_EVENTS_CLUSTER_ID (0x0709)
+
+// Definitions for cluster: MDU Pairing
+#define ZCL_MDU_PAIRING_CLUSTER_ID (0x070A)
+
+// Definitions for cluster: Sub-GHz
+#define ZCL_SUB_GHZ_CLUSTER_ID (0x070B)
+
+// Definitions for cluster: Key Establishment
+#define ZCL_KEY_ESTABLISHMENT_CLUSTER_ID (0x0800)
+
+// Definitions for cluster: Information
+#define ZCL_INFORMATION_CLUSTER_ID (0x0900)
+
+// Definitions for cluster: Data Sharing
+#define ZCL_DATA_SHARING_CLUSTER_ID (0x0901)
+
+// Definitions for cluster: Gaming
+#define ZCL_GAMING_CLUSTER_ID (0x0902)
+
+// Definitions for cluster: Data Rate Control
+#define ZCL_DATA_RATE_CONTROL_CLUSTER_ID (0x0903)
+
+// Definitions for cluster: Voice over ZigBee
+#define ZCL_VOICE_OVER_ZIGBEE_CLUSTER_ID (0x0904)
+
+// Definitions for cluster: Chatting
+#define ZCL_CHATTING_CLUSTER_ID (0x0905)
+
+// Definitions for cluster: Payment
+#define ZCL_PAYMENT_CLUSTER_ID (0x0A01)
+
+// Definitions for cluster: Billing
+#define ZCL_BILLING_CLUSTER_ID (0x0A02)
+
+// Definitions for cluster: Appliance Identification
+#define ZCL_APPLIANCE_IDENTIFICATION_CLUSTER_ID (0x0B00)
+
+// Definitions for cluster: Meter Identification
+#define ZCL_METER_IDENTIFICATION_CLUSTER_ID (0x0B01)
+
+// Definitions for cluster: Appliance Events and Alert
+#define ZCL_APPLIANCE_EVENTS_AND_ALERT_CLUSTER_ID (0x0B02)
+
+// Definitions for cluster: Appliance Statistics
+#define ZCL_APPLIANCE_STATISTICS_CLUSTER_ID (0x0B03)
+
+// Definitions for cluster: Electrical Measurement
+#define ZCL_ELECTRICAL_MEASUREMENT_CLUSTER_ID (0x0B04)
+
+// Definitions for cluster: Diagnostics
+#define ZCL_DIAGNOSTICS_CLUSTER_ID (0x0B05)
+
+// Definitions for cluster: ZLL Commissioning
+#define ZCL_ZLL_COMMISSIONING_CLUSTER_ID (0x1000)
+
+// Definitions for cluster: Binding
+#define ZCL_BINDING_CLUSTER_ID (0xF000)
+
+// Definitions for cluster: Sample Mfg Specific Cluster
+#define ZCL_SAMPLE_MFG_SPECIFIC_CLUSTER_ID (0xFC00)
+
+// Definitions for cluster: Sample Mfg Specific Cluster 2
+#define ZCL_SAMPLE_MFG_SPECIFIC_CLUSTER_2_ID (0xFC00)
+
+// Definitions for cluster: Configuration Cluster
+#define ZCL_OTA_CONFIGURATION_CLUSTER_ID (0xFC01)
+
+// Definitions for cluster: MFGLIB Cluster
+#define ZCL_MFGLIB_CLUSTER_ID (0xFC02)
+
+// Definitions for cluster: SL Works With All Hubs
+#define ZCL_SL_WWAH_CLUSTER_ID (0xFC57)
diff --git a/examples/chip-tool/gen/command-id.h b/examples/chip-tool/gen/command-id.h
new file mode 100644
index 0000000..9e60862
--- /dev/null
+++ b/examples/chip-tool/gen/command-id.h
@@ -0,0 +1,753 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+// Prevent multiple inclusion
+#pragma once
+
+// Global, non-cluster-specific commands
+#define ZCL_READ_ATTRIBUTES_COMMAND_ID (0x00)
+#define ZCL_READ_ATTRIBUTES_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_WRITE_ATTRIBUTES_COMMAND_ID (0x02)
+#define ZCL_WRITE_ATTRIBUTES_UNDIVIDED_COMMAND_ID (0x03)
+#define ZCL_WRITE_ATTRIBUTES_RESPONSE_COMMAND_ID (0x04)
+#define ZCL_WRITE_ATTRIBUTES_NO_RESPONSE_COMMAND_ID (0x05)
+#define ZCL_CONFIGURE_REPORTING_COMMAND_ID (0x06)
+#define ZCL_CONFIGURE_REPORTING_RESPONSE_COMMAND_ID (0x07)
+#define ZCL_READ_REPORTING_CONFIGURATION_COMMAND_ID (0x08)
+#define ZCL_READ_REPORTING_CONFIGURATION_RESPONSE_COMMAND_ID (0x09)
+#define ZCL_REPORT_ATTRIBUTES_COMMAND_ID (0x0A)
+#define ZCL_DEFAULT_RESPONSE_COMMAND_ID (0x0B)
+#define ZCL_DISCOVER_ATTRIBUTES_COMMAND_ID (0x0C)
+#define ZCL_DISCOVER_ATTRIBUTES_RESPONSE_COMMAND_ID (0x0D)
+#define ZCL_READ_ATTRIBUTES_STRUCTURED_COMMAND_ID (0x0E)
+#define ZCL_WRITE_ATTRIBUTES_STRUCTURED_COMMAND_ID (0x0F)
+#define ZCL_WRITE_ATTRIBUTES_STRUCTURED_RESPONSE_COMMAND_ID (0x10)
+#define ZCL_DISCOVER_COMMANDS_RECEIVED_COMMAND_ID (0x11)
+#define ZCL_DISCOVER_COMMANDS_RECEIVED_RESPONSE_COMMAND_ID (0x12)
+#define ZCL_DISCOVER_COMMANDS_GENERATED_COMMAND_ID (0x13)
+#define ZCL_DISCOVER_COMMANDS_GENERATED_RESPONSE_COMMAND_ID (0x14)
+#define ZCL_DISCOVER_ATTRIBUTES_EXTENDED_COMMAND_ID (0x15)
+#define ZCL_DISCOVER_ATTRIBUTES_EXTENDED_RESPONSE_COMMAND_ID (0x16)
+
+// Commands for cluster: Basic
+#define ZCL_RESET_TO_FACTORY_DEFAULTS_COMMAND_ID (0x00)
+#define ZCL_MFG_SPECIFIC_PING_COMMAND_ID (0x00)
+
+// Commands for cluster: Identify
+#define ZCL_IDENTIFY_COMMAND_ID (0x00)
+#define ZCL_IDENTIFY_QUERY_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_IDENTIFY_QUERY_COMMAND_ID (0x01)
+#define ZCL_EZ_MODE_INVOKE_COMMAND_ID (0x02)
+#define ZCL_UPDATE_COMMISSION_STATE_COMMAND_ID (0x03)
+#define ZCL_TRIGGER_EFFECT_COMMAND_ID (0x40)
+
+// Commands for cluster: Groups
+#define ZCL_ADD_GROUP_COMMAND_ID (0x00)
+#define ZCL_ADD_GROUP_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_VIEW_GROUP_COMMAND_ID (0x01)
+#define ZCL_VIEW_GROUP_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_GET_GROUP_MEMBERSHIP_COMMAND_ID (0x02)
+#define ZCL_GET_GROUP_MEMBERSHIP_RESPONSE_COMMAND_ID (0x02)
+#define ZCL_REMOVE_GROUP_COMMAND_ID (0x03)
+#define ZCL_REMOVE_GROUP_RESPONSE_COMMAND_ID (0x03)
+#define ZCL_REMOVE_ALL_GROUPS_COMMAND_ID (0x04)
+#define ZCL_ADD_GROUP_IF_IDENTIFYING_COMMAND_ID (0x05)
+
+// Commands for cluster: Scenes
+#define ZCL_ADD_SCENE_COMMAND_ID (0x00)
+#define ZCL_ADD_SCENE_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_VIEW_SCENE_COMMAND_ID (0x01)
+#define ZCL_VIEW_SCENE_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_REMOVE_SCENE_COMMAND_ID (0x02)
+#define ZCL_REMOVE_SCENE_RESPONSE_COMMAND_ID (0x02)
+#define ZCL_REMOVE_ALL_SCENES_COMMAND_ID (0x03)
+#define ZCL_REMOVE_ALL_SCENES_RESPONSE_COMMAND_ID (0x03)
+#define ZCL_STORE_SCENE_COMMAND_ID (0x04)
+#define ZCL_STORE_SCENE_RESPONSE_COMMAND_ID (0x04)
+#define ZCL_RECALL_SCENE_COMMAND_ID (0x05)
+#define ZCL_GET_SCENE_MEMBERSHIP_COMMAND_ID (0x06)
+#define ZCL_GET_SCENE_MEMBERSHIP_RESPONSE_COMMAND_ID (0x06)
+#define ZCL_ENHANCED_ADD_SCENE_COMMAND_ID (0x40)
+#define ZCL_ENHANCED_ADD_SCENE_RESPONSE_COMMAND_ID (0x40)
+#define ZCL_ENHANCED_VIEW_SCENE_COMMAND_ID (0x41)
+#define ZCL_ENHANCED_VIEW_SCENE_RESPONSE_COMMAND_ID (0x41)
+#define ZCL_COPY_SCENE_COMMAND_ID (0x42)
+#define ZCL_COPY_SCENE_RESPONSE_COMMAND_ID (0x42)
+
+// Commands for cluster: On/off
+#define ZCL_OFF_COMMAND_ID (0x00)
+#define ZCL_SAMPLE_MFG_SPECIFIC_OFF_WITH_TRANSITION_COMMAND_ID (0x00)
+#define ZCL_ON_COMMAND_ID (0x01)
+#define ZCL_SAMPLE_MFG_SPECIFIC_ON_WITH_TRANSITION_COMMAND_ID (0x01)
+#define ZCL_SAMPLE_MFG_SPECIFIC_ON_WITH_TRANSITION2_COMMAND_ID (0x01)
+#define ZCL_TOGGLE_COMMAND_ID (0x02)
+#define ZCL_SAMPLE_MFG_SPECIFIC_TOGGLE_WITH_TRANSITION_COMMAND_ID (0x02)
+#define ZCL_SAMPLE_MFG_SPECIFIC_TOGGLE_WITH_TRANSITION2_COMMAND_ID (0x02)
+#define ZCL_OFF_WITH_EFFECT_COMMAND_ID (0x40)
+#define ZCL_ON_WITH_RECALL_GLOBAL_SCENE_COMMAND_ID (0x41)
+#define ZCL_ON_WITH_TIMED_OFF_COMMAND_ID (0x42)
+
+// Commands for cluster: Level Control
+#define ZCL_MOVE_TO_LEVEL_COMMAND_ID (0x00)
+#define ZCL_MOVE_COMMAND_ID (0x01)
+#define ZCL_STEP_COMMAND_ID (0x02)
+#define ZCL_STOP_COMMAND_ID (0x03)
+#define ZCL_MOVE_TO_LEVEL_WITH_ON_OFF_COMMAND_ID (0x04)
+#define ZCL_MOVE_WITH_ON_OFF_COMMAND_ID (0x05)
+#define ZCL_STEP_WITH_ON_OFF_COMMAND_ID (0x06)
+#define ZCL_STOP_WITH_ON_OFF_COMMAND_ID (0x07)
+
+// Commands for cluster: Alarms
+#define ZCL_RESET_ALARM_COMMAND_ID (0x00)
+#define ZCL_ALARM_COMMAND_ID (0x00)
+#define ZCL_RESET_ALL_ALARMS_COMMAND_ID (0x01)
+#define ZCL_GET_ALARM_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_GET_ALARM_COMMAND_ID (0x02)
+#define ZCL_RESET_ALARM_LOG_COMMAND_ID (0x03)
+
+// Commands for cluster: RSSI Location
+#define ZCL_SET_ABSOLUTE_LOCATION_COMMAND_ID (0x00)
+#define ZCL_DEVICE_CONFIGURATION_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_SET_DEVICE_CONFIGURATION_COMMAND_ID (0x01)
+#define ZCL_LOCATION_DATA_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_GET_DEVICE_CONFIGURATION_COMMAND_ID (0x02)
+#define ZCL_LOCATION_DATA_NOTIFICATION_COMMAND_ID (0x02)
+#define ZCL_GET_LOCATION_DATA_COMMAND_ID (0x03)
+#define ZCL_COMPACT_LOCATION_DATA_NOTIFICATION_COMMAND_ID (0x03)
+#define ZCL_RSSI_RESPONSE_COMMAND_ID (0x04)
+#define ZCL_RSSI_PING_COMMAND_ID (0x04)
+#define ZCL_SEND_PINGS_COMMAND_ID (0x05)
+#define ZCL_RSSI_REQUEST_COMMAND_ID (0x05)
+#define ZCL_ANCHOR_NODE_ANNOUNCE_COMMAND_ID (0x06)
+#define ZCL_REPORT_RSSI_MEASUREMENTS_COMMAND_ID (0x06)
+#define ZCL_REQUEST_OWN_LOCATION_COMMAND_ID (0x07)
+
+// Commands for cluster: Commissioning
+#define ZCL_RESTART_DEVICE_COMMAND_ID (0x00)
+#define ZCL_RESTART_DEVICE_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_SAVE_STARTUP_PARAMETERS_COMMAND_ID (0x01)
+#define ZCL_SAVE_STARTUP_PARAMETERS_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_RESTORE_STARTUP_PARAMETERS_COMMAND_ID (0x02)
+#define ZCL_RESTORE_STARTUP_PARAMETERS_RESPONSE_COMMAND_ID (0x02)
+#define ZCL_RESET_STARTUP_PARAMETERS_COMMAND_ID (0x03)
+#define ZCL_RESET_STARTUP_PARAMETERS_RESPONSE_COMMAND_ID (0x03)
+
+// Commands for cluster: Partition
+#define ZCL_TRANSFER_PARTITIONED_FRAME_COMMAND_ID (0x00)
+#define ZCL_MULTIPLE_ACK_COMMAND_ID (0x00)
+#define ZCL_READ_HANDSHAKE_PARAM_COMMAND_ID (0x01)
+#define ZCL_READ_HANDSHAKE_PARAM_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_WRITE_HANDSHAKE_PARAM_COMMAND_ID (0x02)
+
+// Commands for cluster: Over the Air Bootloading
+#define ZCL_IMAGE_NOTIFY_COMMAND_ID (0x00)
+#define ZCL_QUERY_NEXT_IMAGE_REQUEST_COMMAND_ID (0x01)
+#define ZCL_QUERY_NEXT_IMAGE_RESPONSE_COMMAND_ID (0x02)
+#define ZCL_IMAGE_BLOCK_REQUEST_COMMAND_ID (0x03)
+#define ZCL_IMAGE_PAGE_REQUEST_COMMAND_ID (0x04)
+#define ZCL_IMAGE_BLOCK_RESPONSE_COMMAND_ID (0x05)
+#define ZCL_UPGRADE_END_REQUEST_COMMAND_ID (0x06)
+#define ZCL_UPGRADE_END_RESPONSE_COMMAND_ID (0x07)
+#define ZCL_QUERY_SPECIFIC_FILE_REQUEST_COMMAND_ID (0x08)
+#define ZCL_QUERY_SPECIFIC_FILE_RESPONSE_COMMAND_ID (0x09)
+
+// Commands for cluster: Power Profile
+#define ZCL_POWER_PROFILE_REQUEST_COMMAND_ID (0x00)
+#define ZCL_POWER_PROFILE_NOTIFICATION_COMMAND_ID (0x00)
+#define ZCL_POWER_PROFILE_STATE_REQUEST_COMMAND_ID (0x01)
+#define ZCL_POWER_PROFILE_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_GET_POWER_PROFILE_PRICE_RESPONSE_COMMAND_ID (0x02)
+#define ZCL_POWER_PROFILE_STATE_RESPONSE_COMMAND_ID (0x02)
+#define ZCL_GET_OVERALL_SCHEDULE_PRICE_RESPONSE_COMMAND_ID (0x03)
+#define ZCL_GET_POWER_PROFILE_PRICE_COMMAND_ID (0x03)
+#define ZCL_ENERGY_PHASES_SCHEDULE_NOTIFICATION_COMMAND_ID (0x04)
+#define ZCL_POWER_PROFILES_STATE_NOTIFICATION_COMMAND_ID (0x04)
+#define ZCL_ENERGY_PHASES_SCHEDULE_RESPONSE_COMMAND_ID (0x05)
+#define ZCL_GET_OVERALL_SCHEDULE_PRICE_COMMAND_ID (0x05)
+#define ZCL_POWER_PROFILE_SCHEDULE_CONSTRAINTS_REQUEST_COMMAND_ID (0x06)
+#define ZCL_ENERGY_PHASES_SCHEDULE_REQUEST_COMMAND_ID (0x06)
+#define ZCL_ENERGY_PHASES_SCHEDULE_STATE_REQUEST_COMMAND_ID (0x07)
+#define ZCL_ENERGY_PHASES_SCHEDULE_STATE_RESPONSE_COMMAND_ID (0x07)
+#define ZCL_GET_POWER_PROFILE_PRICE_EXTENDED_RESPONSE_COMMAND_ID (0x08)
+#define ZCL_ENERGY_PHASES_SCHEDULE_STATE_NOTIFICATION_COMMAND_ID (0x08)
+#define ZCL_POWER_PROFILE_SCHEDULE_CONSTRAINTS_NOTIFICATION_COMMAND_ID (0x09)
+#define ZCL_POWER_PROFILE_SCHEDULE_CONSTRAINTS_RESPONSE_COMMAND_ID (0x0A)
+#define ZCL_GET_POWER_PROFILE_PRICE_EXTENDED_COMMAND_ID (0x0B)
+
+// Commands for cluster: Appliance Control
+#define ZCL_EXECUTION_OF_A_COMMAND_COMMAND_ID (0x00)
+#define ZCL_SIGNAL_STATE_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_SIGNAL_STATE_COMMAND_ID (0x01)
+#define ZCL_SIGNAL_STATE_NOTIFICATION_COMMAND_ID (0x01)
+#define ZCL_WRITE_FUNCTIONS_COMMAND_ID (0x02)
+#define ZCL_OVERLOAD_PAUSE_RESUME_COMMAND_ID (0x03)
+#define ZCL_OVERLOAD_PAUSE_COMMAND_ID (0x04)
+#define ZCL_OVERLOAD_WARNING_COMMAND_ID (0x05)
+
+// Commands for cluster: Poll Control
+#define ZCL_CHECK_IN_COMMAND_ID (0x00)
+#define ZCL_CHECK_IN_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_FAST_POLL_STOP_COMMAND_ID (0x01)
+#define ZCL_SET_LONG_POLL_INTERVAL_COMMAND_ID (0x02)
+#define ZCL_SET_SHORT_POLL_INTERVAL_COMMAND_ID (0x03)
+
+// Commands for cluster: Green Power
+#define ZCL_GP_NOTIFICATION_COMMAND_ID (0x00)
+#define ZCL_GP_NOTIFICATION_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_GP_PAIRING_SEARCH_COMMAND_ID (0x01)
+#define ZCL_GP_PAIRING_COMMAND_ID (0x01)
+#define ZCL_GP_PROXY_COMMISSIONING_MODE_COMMAND_ID (0x02)
+#define ZCL_GP_TUNNELING_STOP_COMMAND_ID (0x03)
+#define ZCL_GP_COMMISSIONING_NOTIFICATION_COMMAND_ID (0x04)
+#define ZCL_GP_SINK_COMMISSIONING_MODE_COMMAND_ID (0x05)
+#define ZCL_GP_RESPONSE_COMMAND_ID (0x06)
+#define ZCL_GP_TRANSLATION_TABLE_UPDATE_COMMAND_ID (0x07)
+#define ZCL_GP_TRANSLATION_TABLE_REQUEST_COMMAND_ID (0x08)
+#define ZCL_GP_TRANSLATION_TABLE_RESPONSE_COMMAND_ID (0x08)
+#define ZCL_GP_PAIRING_CONFIGURATION_COMMAND_ID (0x09)
+#define ZCL_GP_SINK_TABLE_REQUEST_COMMAND_ID (0x0A)
+#define ZCL_GP_SINK_TABLE_RESPONSE_COMMAND_ID (0x0A)
+#define ZCL_GP_PROXY_TABLE_RESPONSE_COMMAND_ID (0x0B)
+#define ZCL_GP_PROXY_TABLE_REQUEST_COMMAND_ID (0x0B)
+
+// Commands for cluster: Door Lock
+#define ZCL_LOCK_DOOR_COMMAND_ID (0x00)
+#define ZCL_LOCK_DOOR_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_UNLOCK_DOOR_COMMAND_ID (0x01)
+#define ZCL_UNLOCK_DOOR_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_TOGGLE_COMMAND_ID (0x02)
+#define ZCL_TOGGLE_RESPONSE_COMMAND_ID (0x02)
+#define ZCL_UNLOCK_WITH_TIMEOUT_COMMAND_ID (0x03)
+#define ZCL_UNLOCK_WITH_TIMEOUT_RESPONSE_COMMAND_ID (0x03)
+#define ZCL_GET_LOG_RECORD_COMMAND_ID (0x04)
+#define ZCL_GET_LOG_RECORD_RESPONSE_COMMAND_ID (0x04)
+#define ZCL_SET_PIN_COMMAND_ID (0x05)
+#define ZCL_SET_PIN_RESPONSE_COMMAND_ID (0x05)
+#define ZCL_GET_PIN_COMMAND_ID (0x06)
+#define ZCL_GET_PIN_RESPONSE_COMMAND_ID (0x06)
+#define ZCL_CLEAR_PIN_COMMAND_ID (0x07)
+#define ZCL_CLEAR_PIN_RESPONSE_COMMAND_ID (0x07)
+#define ZCL_CLEAR_ALL_PINS_COMMAND_ID (0x08)
+#define ZCL_CLEAR_ALL_PINS_RESPONSE_COMMAND_ID (0x08)
+#define ZCL_SET_USER_STATUS_COMMAND_ID (0x09)
+#define ZCL_SET_USER_STATUS_RESPONSE_COMMAND_ID (0x09)
+#define ZCL_GET_USER_STATUS_COMMAND_ID (0x0A)
+#define ZCL_GET_USER_STATUS_RESPONSE_COMMAND_ID (0x0A)
+#define ZCL_SET_WEEKDAY_SCHEDULE_COMMAND_ID (0x0B)
+#define ZCL_SET_WEEKDAY_SCHEDULE_RESPONSE_COMMAND_ID (0x0B)
+#define ZCL_GET_WEEKDAY_SCHEDULE_COMMAND_ID (0x0C)
+#define ZCL_GET_WEEKDAY_SCHEDULE_RESPONSE_COMMAND_ID (0x0C)
+#define ZCL_CLEAR_WEEKDAY_SCHEDULE_COMMAND_ID (0x0D)
+#define ZCL_CLEAR_WEEKDAY_SCHEDULE_RESPONSE_COMMAND_ID (0x0D)
+#define ZCL_SET_YEARDAY_SCHEDULE_COMMAND_ID (0x0E)
+#define ZCL_SET_YEARDAY_SCHEDULE_RESPONSE_COMMAND_ID (0x0E)
+#define ZCL_GET_YEARDAY_SCHEDULE_COMMAND_ID (0x0F)
+#define ZCL_GET_YEARDAY_SCHEDULE_RESPONSE_COMMAND_ID (0x0F)
+#define ZCL_CLEAR_YEARDAY_SCHEDULE_COMMAND_ID (0x10)
+#define ZCL_CLEAR_YEARDAY_SCHEDULE_RESPONSE_COMMAND_ID (0x10)
+#define ZCL_SET_HOLIDAY_SCHEDULE_COMMAND_ID (0x11)
+#define ZCL_SET_HOLIDAY_SCHEDULE_RESPONSE_COMMAND_ID (0x11)
+#define ZCL_GET_HOLIDAY_SCHEDULE_COMMAND_ID (0x12)
+#define ZCL_GET_HOLIDAY_SCHEDULE_RESPONSE_COMMAND_ID (0x12)
+#define ZCL_CLEAR_HOLIDAY_SCHEDULE_COMMAND_ID (0x13)
+#define ZCL_CLEAR_HOLIDAY_SCHEDULE_RESPONSE_COMMAND_ID (0x13)
+#define ZCL_SET_USER_TYPE_COMMAND_ID (0x14)
+#define ZCL_SET_USER_TYPE_RESPONSE_COMMAND_ID (0x14)
+#define ZCL_GET_USER_TYPE_COMMAND_ID (0x15)
+#define ZCL_GET_USER_TYPE_RESPONSE_COMMAND_ID (0x15)
+#define ZCL_SET_RFID_COMMAND_ID (0x16)
+#define ZCL_SET_RFID_RESPONSE_COMMAND_ID (0x16)
+#define ZCL_GET_RFID_COMMAND_ID (0x17)
+#define ZCL_GET_RFID_RESPONSE_COMMAND_ID (0x17)
+#define ZCL_CLEAR_RFID_COMMAND_ID (0x18)
+#define ZCL_CLEAR_RFID_RESPONSE_COMMAND_ID (0x18)
+#define ZCL_CLEAR_ALL_RFIDS_COMMAND_ID (0x19)
+#define ZCL_CLEAR_ALL_RFIDS_RESPONSE_COMMAND_ID (0x19)
+#define ZCL_OPERATION_EVENT_NOTIFICATION_COMMAND_ID (0x20)
+#define ZCL_PROGRAMMING_EVENT_NOTIFICATION_COMMAND_ID (0x21)
+
+// Commands for cluster: Window Covering
+#define ZCL_WINDOW_COVERING_UP_OPEN_COMMAND_ID (0x00)
+#define ZCL_WINDOW_COVERING_DOWN_CLOSE_COMMAND_ID (0x01)
+#define ZCL_WINDOW_COVERING_STOP_COMMAND_ID (0x02)
+#define ZCL_WINDOW_COVERING_GO_TO_LIFT_VALUE_COMMAND_ID (0x04)
+#define ZCL_WINDOW_COVERING_GO_TO_LIFT_PERCENTAGE_COMMAND_ID (0x05)
+#define ZCL_WINDOW_COVERING_GO_TO_TILT_VALUE_COMMAND_ID (0x07)
+#define ZCL_WINDOW_COVERING_GO_TO_TILT_PERCENTAGE_COMMAND_ID (0x08)
+
+// Commands for cluster: Barrier Control
+#define ZCL_BARRIER_CONTROL_GO_TO_PERCENT_COMMAND_ID (0x00)
+#define ZCL_BARRIER_CONTROL_STOP_COMMAND_ID (0x01)
+
+// Commands for cluster: Thermostat
+#define ZCL_SETPOINT_RAISE_LOWER_COMMAND_ID (0x00)
+#define ZCL_CURRENT_WEEKLY_SCHEDULE_COMMAND_ID (0x00)
+#define ZCL_SET_WEEKLY_SCHEDULE_COMMAND_ID (0x01)
+#define ZCL_RELAY_STATUS_LOG_COMMAND_ID (0x01)
+#define ZCL_GET_WEEKLY_SCHEDULE_COMMAND_ID (0x02)
+#define ZCL_CLEAR_WEEKLY_SCHEDULE_COMMAND_ID (0x03)
+#define ZCL_GET_RELAY_STATUS_LOG_COMMAND_ID (0x04)
+
+// Commands for cluster: Color Control
+#define ZCL_MOVE_TO_HUE_COMMAND_ID (0x00)
+#define ZCL_MOVE_HUE_COMMAND_ID (0x01)
+#define ZCL_STEP_HUE_COMMAND_ID (0x02)
+#define ZCL_MOVE_TO_SATURATION_COMMAND_ID (0x03)
+#define ZCL_MOVE_SATURATION_COMMAND_ID (0x04)
+#define ZCL_STEP_SATURATION_COMMAND_ID (0x05)
+#define ZCL_MOVE_TO_HUE_AND_SATURATION_COMMAND_ID (0x06)
+#define ZCL_MOVE_TO_COLOR_COMMAND_ID (0x07)
+#define ZCL_MOVE_COLOR_COMMAND_ID (0x08)
+#define ZCL_STEP_COLOR_COMMAND_ID (0x09)
+#define ZCL_MOVE_TO_COLOR_TEMPERATURE_COMMAND_ID (0x0A)
+#define ZCL_ENHANCED_MOVE_TO_HUE_COMMAND_ID (0x40)
+#define ZCL_ENHANCED_MOVE_HUE_COMMAND_ID (0x41)
+#define ZCL_ENHANCED_STEP_HUE_COMMAND_ID (0x42)
+#define ZCL_ENHANCED_MOVE_TO_HUE_AND_SATURATION_COMMAND_ID (0x43)
+#define ZCL_COLOR_LOOP_SET_COMMAND_ID (0x44)
+#define ZCL_STOP_MOVE_STEP_COMMAND_ID (0x47)
+#define ZCL_MOVE_COLOR_TEMPERATURE_COMMAND_ID (0x4B)
+#define ZCL_STEP_COLOR_TEMPERATURE_COMMAND_ID (0x4C)
+
+// Commands for cluster: IAS Zone
+#define ZCL_ZONE_ENROLL_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_ZONE_STATUS_CHANGE_NOTIFICATION_COMMAND_ID (0x00)
+#define ZCL_INITIATE_NORMAL_OPERATION_MODE_COMMAND_ID (0x01)
+#define ZCL_ZONE_ENROLL_REQUEST_COMMAND_ID (0x01)
+#define ZCL_INITIATE_TEST_MODE_COMMAND_ID (0x02)
+#define ZCL_INITIATE_NORMAL_OPERATION_MODE_RESPONSE_COMMAND_ID (0x02)
+#define ZCL_INITIATE_TEST_MODE_RESPONSE_COMMAND_ID (0x03)
+
+// Commands for cluster: IAS ACE
+#define ZCL_ARM_COMMAND_ID (0x00)
+#define ZCL_ARM_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_BYPASS_COMMAND_ID (0x01)
+#define ZCL_GET_ZONE_ID_MAP_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_EMERGENCY_COMMAND_ID (0x02)
+#define ZCL_GET_ZONE_INFORMATION_RESPONSE_COMMAND_ID (0x02)
+#define ZCL_FIRE_COMMAND_ID (0x03)
+#define ZCL_ZONE_STATUS_CHANGED_COMMAND_ID (0x03)
+#define ZCL_PANIC_COMMAND_ID (0x04)
+#define ZCL_PANEL_STATUS_CHANGED_COMMAND_ID (0x04)
+#define ZCL_GET_ZONE_ID_MAP_COMMAND_ID (0x05)
+#define ZCL_GET_PANEL_STATUS_RESPONSE_COMMAND_ID (0x05)
+#define ZCL_GET_ZONE_INFORMATION_COMMAND_ID (0x06)
+#define ZCL_SET_BYPASSED_ZONE_LIST_COMMAND_ID (0x06)
+#define ZCL_GET_PANEL_STATUS_COMMAND_ID (0x07)
+#define ZCL_BYPASS_RESPONSE_COMMAND_ID (0x07)
+#define ZCL_GET_BYPASSED_ZONE_LIST_COMMAND_ID (0x08)
+#define ZCL_GET_ZONE_STATUS_RESPONSE_COMMAND_ID (0x08)
+#define ZCL_GET_ZONE_STATUS_COMMAND_ID (0x09)
+
+// Commands for cluster: IAS WD
+#define ZCL_START_WARNING_COMMAND_ID (0x00)
+#define ZCL_SQUAWK_COMMAND_ID (0x01)
+
+// Commands for cluster: Generic Tunnel
+#define ZCL_MATCH_PROTOCOL_ADDRESS_COMMAND_ID (0x00)
+#define ZCL_MATCH_PROTOCOL_ADDRESS_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_ADVERTISE_PROTOCOL_ADDRESS_COMMAND_ID (0x01)
+
+// Commands for cluster: BACnet Protocol Tunnel
+#define ZCL_TRANSFER_NPDU_COMMAND_ID (0x00)
+
+// Commands for cluster: 11073 Protocol Tunnel
+#define ZCL_TRANSFER_APDU_COMMAND_ID (0x00)
+#define ZCL_CONNECT_REQUEST_COMMAND_ID (0x01)
+#define ZCL_DISCONNECT_REQUEST_COMMAND_ID (0x02)
+#define ZCL_CONNECT_STATUS_NOTIFICATION_COMMAND_ID (0x03)
+
+// Commands for cluster: ISO 7816 Protocol Tunnel
+#define ZCL_TRANSFER_APDU_COMMAND_ID (0x00)
+#define ZCL_INSERT_SMART_CARD_COMMAND_ID (0x01)
+#define ZCL_EXTRACT_SMART_CARD_COMMAND_ID (0x02)
+
+// Commands for cluster: Price
+#define ZCL_PUBLISH_PRICE_COMMAND_ID (0x00)
+#define ZCL_GET_CURRENT_PRICE_COMMAND_ID (0x00)
+#define ZCL_PUBLISH_BLOCK_PERIOD_COMMAND_ID (0x01)
+#define ZCL_GET_SCHEDULED_PRICES_COMMAND_ID (0x01)
+#define ZCL_PUBLISH_CONVERSION_FACTOR_COMMAND_ID (0x02)
+#define ZCL_PRICE_ACKNOWLEDGEMENT_COMMAND_ID (0x02)
+#define ZCL_PUBLISH_CALORIFIC_VALUE_COMMAND_ID (0x03)
+#define ZCL_GET_BLOCK_PERIODS_COMMAND_ID (0x03)
+#define ZCL_PUBLISH_TARIFF_INFORMATION_COMMAND_ID (0x04)
+#define ZCL_GET_CONVERSION_FACTOR_COMMAND_ID (0x04)
+#define ZCL_PUBLISH_PRICE_MATRIX_COMMAND_ID (0x05)
+#define ZCL_GET_CALORIFIC_VALUE_COMMAND_ID (0x05)
+#define ZCL_PUBLISH_BLOCK_THRESHOLDS_COMMAND_ID (0x06)
+#define ZCL_GET_TARIFF_INFORMATION_COMMAND_ID (0x06)
+#define ZCL_PUBLISH_CO2_VALUE_COMMAND_ID (0x07)
+#define ZCL_GET_PRICE_MATRIX_COMMAND_ID (0x07)
+#define ZCL_PUBLISH_TIER_LABELS_COMMAND_ID (0x08)
+#define ZCL_GET_BLOCK_THRESHOLDS_COMMAND_ID (0x08)
+#define ZCL_PUBLISH_BILLING_PERIOD_COMMAND_ID (0x09)
+#define ZCL_GET_CO2_VALUE_COMMAND_ID (0x09)
+#define ZCL_PUBLISH_CONSOLIDATED_BILL_COMMAND_ID (0x0A)
+#define ZCL_GET_TIER_LABELS_COMMAND_ID (0x0A)
+#define ZCL_PUBLISH_CPP_EVENT_COMMAND_ID (0x0B)
+#define ZCL_GET_BILLING_PERIOD_COMMAND_ID (0x0B)
+#define ZCL_PUBLISH_CREDIT_PAYMENT_COMMAND_ID (0x0C)
+#define ZCL_GET_CONSOLIDATED_BILL_COMMAND_ID (0x0C)
+#define ZCL_PUBLISH_CURRENCY_CONVERSION_COMMAND_ID (0x0D)
+#define ZCL_CPP_EVENT_RESPONSE_COMMAND_ID (0x0D)
+#define ZCL_CANCEL_TARIFF_COMMAND_ID (0x0E)
+#define ZCL_GET_CREDIT_PAYMENT_COMMAND_ID (0x0E)
+#define ZCL_GET_CURRENCY_CONVERSION_COMMAND_COMMAND_ID (0x0F)
+#define ZCL_GET_TARIFF_CANCELLATION_COMMAND_ID (0x10)
+
+// Commands for cluster: Demand Response and Load Control
+#define ZCL_LOAD_CONTROL_EVENT_COMMAND_ID (0x00)
+#define ZCL_REPORT_EVENT_STATUS_COMMAND_ID (0x00)
+#define ZCL_CANCEL_LOAD_CONTROL_EVENT_COMMAND_ID (0x01)
+#define ZCL_GET_SCHEDULED_EVENTS_COMMAND_ID (0x01)
+#define ZCL_CANCEL_ALL_LOAD_CONTROL_EVENTS_COMMAND_ID (0x02)
+
+// Commands for cluster: Simple Metering
+#define ZCL_GET_PROFILE_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_GET_PROFILE_COMMAND_ID (0x00)
+#define ZCL_REQUEST_MIRROR_COMMAND_ID (0x01)
+#define ZCL_REQUEST_MIRROR_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_REMOVE_MIRROR_COMMAND_ID (0x02)
+#define ZCL_MIRROR_REMOVED_COMMAND_ID (0x02)
+#define ZCL_REQUEST_FAST_POLL_MODE_RESPONSE_COMMAND_ID (0x03)
+#define ZCL_REQUEST_FAST_POLL_MODE_COMMAND_ID (0x03)
+#define ZCL_SCHEDULE_SNAPSHOT_RESPONSE_COMMAND_ID (0x04)
+#define ZCL_SCHEDULE_SNAPSHOT_COMMAND_ID (0x04)
+#define ZCL_TAKE_SNAPSHOT_RESPONSE_COMMAND_ID (0x05)
+#define ZCL_TAKE_SNAPSHOT_COMMAND_ID (0x05)
+#define ZCL_PUBLISH_SNAPSHOT_COMMAND_ID (0x06)
+#define ZCL_GET_SNAPSHOT_COMMAND_ID (0x06)
+#define ZCL_GET_SAMPLED_DATA_RESPONSE_COMMAND_ID (0x07)
+#define ZCL_START_SAMPLING_COMMAND_ID (0x07)
+#define ZCL_CONFIGURE_MIRROR_COMMAND_ID (0x08)
+#define ZCL_GET_SAMPLED_DATA_COMMAND_ID (0x08)
+#define ZCL_CONFIGURE_NOTIFICATION_SCHEME_COMMAND_ID (0x09)
+#define ZCL_MIRROR_REPORT_ATTRIBUTE_RESPONSE_COMMAND_ID (0x09)
+#define ZCL_CONFIGURE_NOTIFICATION_FLAGS_COMMAND_ID (0x0A)
+#define ZCL_RESET_LOAD_LIMIT_COUNTER_COMMAND_ID (0x0A)
+#define ZCL_GET_NOTIFIED_MESSAGE_COMMAND_ID (0x0B)
+#define ZCL_CHANGE_SUPPLY_COMMAND_ID (0x0B)
+#define ZCL_SUPPLY_STATUS_RESPONSE_COMMAND_ID (0x0C)
+#define ZCL_LOCAL_CHANGE_SUPPLY_COMMAND_ID (0x0C)
+#define ZCL_START_SAMPLING_RESPONSE_COMMAND_ID (0x0D)
+#define ZCL_SET_SUPPLY_STATUS_COMMAND_ID (0x0D)
+#define ZCL_SET_UNCONTROLLED_FLOW_THRESHOLD_COMMAND_ID (0x0E)
+
+// Commands for cluster: Messaging
+#define ZCL_DISPLAY_MESSAGE_COMMAND_ID (0x00)
+#define ZCL_GET_LAST_MESSAGE_COMMAND_ID (0x00)
+#define ZCL_CANCEL_MESSAGE_COMMAND_ID (0x01)
+#define ZCL_MESSAGE_CONFIRMATION_COMMAND_ID (0x01)
+#define ZCL_DISPLAY_PROTECTED_MESSAGE_COMMAND_ID (0x02)
+#define ZCL_GET_MESSAGE_CANCELLATION_COMMAND_ID (0x02)
+#define ZCL_CANCEL_ALL_MESSAGES_COMMAND_ID (0x03)
+
+// Commands for cluster: Tunneling
+#define ZCL_REQUEST_TUNNEL_COMMAND_ID (0x00)
+#define ZCL_REQUEST_TUNNEL_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_CLOSE_TUNNEL_COMMAND_ID (0x01)
+#define ZCL_TRANSFER_DATA_SERVER_TO_CLIENT_COMMAND_ID (0x01)
+#define ZCL_TRANSFER_DATA_CLIENT_TO_SERVER_COMMAND_ID (0x02)
+#define ZCL_TRANSFER_DATA_ERROR_SERVER_TO_CLIENT_COMMAND_ID (0x02)
+#define ZCL_TRANSFER_DATA_ERROR_CLIENT_TO_SERVER_COMMAND_ID (0x03)
+#define ZCL_ACK_TRANSFER_DATA_SERVER_TO_CLIENT_COMMAND_ID (0x03)
+#define ZCL_ACK_TRANSFER_DATA_CLIENT_TO_SERVER_COMMAND_ID (0x04)
+#define ZCL_READY_DATA_SERVER_TO_CLIENT_COMMAND_ID (0x04)
+#define ZCL_READY_DATA_CLIENT_TO_SERVER_COMMAND_ID (0x05)
+#define ZCL_SUPPORTED_TUNNEL_PROTOCOLS_RESPONSE_COMMAND_ID (0x05)
+#define ZCL_GET_SUPPORTED_TUNNEL_PROTOCOLS_COMMAND_ID (0x06)
+#define ZCL_TUNNEL_CLOSURE_NOTIFICATION_COMMAND_ID (0x06)
+
+// Commands for cluster: Prepayment
+#define ZCL_SELECT_AVAILABLE_EMERGENCY_CREDIT_COMMAND_ID (0x00)
+#define ZCL_PUBLISH_PREPAY_SNAPSHOT_COMMAND_ID (0x01)
+#define ZCL_CHANGE_DEBT_COMMAND_ID (0x02)
+#define ZCL_CHANGE_PAYMENT_MODE_RESPONSE_COMMAND_ID (0x02)
+#define ZCL_EMERGENCY_CREDIT_SETUP_COMMAND_ID (0x03)
+#define ZCL_CONSUMER_TOP_UP_RESPONSE_COMMAND_ID (0x03)
+#define ZCL_CONSUMER_TOP_UP_COMMAND_ID (0x04)
+#define ZCL_CREDIT_ADJUSTMENT_COMMAND_ID (0x05)
+#define ZCL_PUBLISH_TOP_UP_LOG_COMMAND_ID (0x05)
+#define ZCL_CHANGE_PAYMENT_MODE_COMMAND_ID (0x06)
+#define ZCL_PUBLISH_DEBT_LOG_COMMAND_ID (0x06)
+#define ZCL_GET_PREPAY_SNAPSHOT_COMMAND_ID (0x07)
+#define ZCL_GET_TOP_UP_LOG_COMMAND_ID (0x08)
+#define ZCL_SET_LOW_CREDIT_WARNING_LEVEL_COMMAND_ID (0x09)
+#define ZCL_GET_DEBT_REPAYMENT_LOG_COMMAND_ID (0x0A)
+#define ZCL_SET_MAXIMUM_CREDIT_LIMIT_COMMAND_ID (0x0B)
+#define ZCL_SET_OVERALL_DEBT_CAP_COMMAND_ID (0x0C)
+
+// Commands for cluster: Energy Management
+#define ZCL_REPORT_EVENT_STATUS_COMMAND_ID (0x00)
+#define ZCL_MANAGE_EVENT_COMMAND_ID (0x00)
+
+// Commands for cluster: Calendar
+#define ZCL_PUBLISH_CALENDAR_COMMAND_ID (0x00)
+#define ZCL_GET_CALENDAR_COMMAND_ID (0x00)
+#define ZCL_PUBLISH_DAY_PROFILE_COMMAND_ID (0x01)
+#define ZCL_GET_DAY_PROFILES_COMMAND_ID (0x01)
+#define ZCL_PUBLISH_WEEK_PROFILE_COMMAND_ID (0x02)
+#define ZCL_GET_WEEK_PROFILES_COMMAND_ID (0x02)
+#define ZCL_PUBLISH_SEASONS_COMMAND_ID (0x03)
+#define ZCL_GET_SEASONS_COMMAND_ID (0x03)
+#define ZCL_PUBLISH_SPECIAL_DAYS_COMMAND_ID (0x04)
+#define ZCL_GET_SPECIAL_DAYS_COMMAND_ID (0x04)
+#define ZCL_CANCEL_CALENDAR_COMMAND_ID (0x05)
+#define ZCL_GET_CALENDAR_CANCELLATION_COMMAND_ID (0x05)
+
+// Commands for cluster: Device Management
+#define ZCL_GET_CHANGE_OF_TENANCY_COMMAND_ID (0x00)
+#define ZCL_PUBLISH_CHANGE_OF_TENANCY_COMMAND_ID (0x00)
+#define ZCL_GET_CHANGE_OF_SUPPLIER_COMMAND_ID (0x01)
+#define ZCL_PUBLISH_CHANGE_OF_SUPPLIER_COMMAND_ID (0x01)
+#define ZCL_REQUEST_NEW_PASSWORD_COMMAND_ID (0x02)
+#define ZCL_REQUEST_NEW_PASSWORD_RESPONSE_COMMAND_ID (0x02)
+#define ZCL_GET_SITE_ID_COMMAND_ID (0x03)
+#define ZCL_UPDATE_SITE_ID_COMMAND_ID (0x03)
+#define ZCL_REPORT_EVENT_CONFIGURATION_COMMAND_ID (0x04)
+#define ZCL_SET_EVENT_CONFIGURATION_COMMAND_ID (0x04)
+#define ZCL_GET_CIN_COMMAND_ID (0x05)
+#define ZCL_GET_EVENT_CONFIGURATION_COMMAND_ID (0x05)
+#define ZCL_UPDATE_CIN_COMMAND_ID (0x06)
+
+// Commands for cluster: Events
+#define ZCL_GET_EVENT_LOG_COMMAND_ID (0x00)
+#define ZCL_PUBLISH_EVENT_COMMAND_ID (0x00)
+#define ZCL_CLEAR_EVENT_LOG_REQUEST_COMMAND_ID (0x01)
+#define ZCL_PUBLISH_EVENT_LOG_COMMAND_ID (0x01)
+#define ZCL_CLEAR_EVENT_LOG_RESPONSE_COMMAND_ID (0x02)
+
+// Commands for cluster: MDU Pairing
+#define ZCL_PAIRING_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_PAIRING_REQUEST_COMMAND_ID (0x00)
+
+// Commands for cluster: Sub-GHz
+#define ZCL_SUSPEND_ZCL_MESSAGES_COMMAND_ID (0x00)
+#define ZCL_GET_SUSPEND_ZCL_MESSAGES_STATUS_COMMAND_ID (0x00)
+
+// Commands for cluster: Key Establishment
+#define ZCL_INITIATE_KEY_ESTABLISHMENT_REQUEST_COMMAND_ID (0x00)
+#define ZCL_INITIATE_KEY_ESTABLISHMENT_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_EPHEMERAL_DATA_REQUEST_COMMAND_ID (0x01)
+#define ZCL_EPHEMERAL_DATA_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_CONFIRM_KEY_DATA_REQUEST_COMMAND_ID (0x02)
+#define ZCL_CONFIRM_KEY_DATA_RESPONSE_COMMAND_ID (0x02)
+#define ZCL_TERMINATE_KEY_ESTABLISHMENT_COMMAND_ID (0x03)
+
+// Commands for cluster: Information
+#define ZCL_REQUEST_INFORMATION_COMMAND_ID (0x00)
+#define ZCL_REQUEST_INFORMATION_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_PUSH_INFORMATION_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_PUSH_INFORMATION_COMMAND_ID (0x01)
+#define ZCL_SEND_PREFERENCE_COMMAND_ID (0x02)
+#define ZCL_SEND_PREFERENCE_RESPONSE_COMMAND_ID (0x02)
+#define ZCL_REQUEST_PREFERENCE_RESPONSE_COMMAND_ID (0x03)
+#define ZCL_SERVER_REQUEST_PREFERENCE_COMMAND_ID (0x03)
+#define ZCL_UPDATE_COMMAND_ID (0x04)
+#define ZCL_REQUEST_PREFERENCE_CONFIRMATION_COMMAND_ID (0x04)
+#define ZCL_DELETE_COMMAND_ID (0x05)
+#define ZCL_UPDATE_RESPONSE_COMMAND_ID (0x05)
+#define ZCL_CONFIGURE_NODE_DESCRIPTION_COMMAND_ID (0x06)
+#define ZCL_DELETE_RESPONSE_COMMAND_ID (0x06)
+#define ZCL_CONFIGURE_DELIVERY_ENABLE_COMMAND_ID (0x07)
+#define ZCL_CONFIGURE_PUSH_INFORMATION_TIMER_COMMAND_ID (0x08)
+#define ZCL_CONFIGURE_SET_ROOT_ID_COMMAND_ID (0x09)
+
+// Commands for cluster: Data Sharing
+#define ZCL_READ_FILE_REQUEST_COMMAND_ID (0x00)
+#define ZCL_WRITE_FILE_REQUEST_COMMAND_ID (0x00)
+#define ZCL_READ_RECORD_REQUEST_COMMAND_ID (0x01)
+#define ZCL_MODIFY_FILE_REQUEST_COMMAND_ID (0x01)
+#define ZCL_WRITE_FILE_RESPONSE_COMMAND_ID (0x02)
+#define ZCL_MODIFY_RECORD_REQUEST_COMMAND_ID (0x02)
+#define ZCL_FILE_TRANSMISSION_COMMAND_ID (0x03)
+#define ZCL_RECORD_TRANSMISSION_COMMAND_ID (0x04)
+
+// Commands for cluster: Gaming
+#define ZCL_SEARCH_GAME_COMMAND_ID (0x00)
+#define ZCL_GAME_ANNOUNCEMENT_COMMAND_ID (0x00)
+#define ZCL_JOIN_GAME_COMMAND_ID (0x01)
+#define ZCL_GENERAL_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_START_GAME_COMMAND_ID (0x02)
+#define ZCL_PAUSE_GAME_COMMAND_ID (0x03)
+#define ZCL_RESUME_GAME_COMMAND_ID (0x04)
+#define ZCL_QUIT_GAME_COMMAND_ID (0x05)
+#define ZCL_END_GAME_COMMAND_ID (0x06)
+#define ZCL_START_OVER_COMMAND_ID (0x07)
+#define ZCL_ACTION_CONTROL_COMMAND_ID (0x08)
+#define ZCL_DOWNLOAD_GAME_COMMAND_ID (0x09)
+
+// Commands for cluster: Data Rate Control
+#define ZCL_PATH_CREATION_COMMAND_ID (0x00)
+#define ZCL_DATA_RATE_CONTROL_COMMAND_ID (0x00)
+#define ZCL_DATA_RATE_NOTIFICATION_COMMAND_ID (0x01)
+#define ZCL_PATH_DELETION_COMMAND_ID (0x02)
+
+// Commands for cluster: Voice over ZigBee
+#define ZCL_ESTABLISHMENT_REQUEST_COMMAND_ID (0x00)
+#define ZCL_ESTABLISHMENT_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_VOICE_TRANSMISSION_COMMAND_ID (0x01)
+#define ZCL_VOICE_TRANSMISSION_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_VOICE_TRANSMISSION_COMPLETION_COMMAND_ID (0x02)
+#define ZCL_CONTROL_COMMAND_ID (0x02)
+#define ZCL_CONTROL_RESPONSE_COMMAND_ID (0x03)
+
+// Commands for cluster: Chatting
+#define ZCL_JOIN_CHAT_REQUEST_COMMAND_ID (0x00)
+#define ZCL_START_CHAT_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_LEAVE_CHAT_REQUEST_COMMAND_ID (0x01)
+#define ZCL_JOIN_CHAT_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_SEARCH_CHAT_REQUEST_COMMAND_ID (0x02)
+#define ZCL_USER_LEFT_COMMAND_ID (0x02)
+#define ZCL_SWITCH_CHAIRMAN_RESPONSE_COMMAND_ID (0x03)
+#define ZCL_USER_JOINED_COMMAND_ID (0x03)
+#define ZCL_START_CHAT_REQUEST_COMMAND_ID (0x04)
+#define ZCL_SEARCH_CHAT_RESPONSE_COMMAND_ID (0x04)
+#define ZCL_CHAT_MESSAGE_COMMAND_ID (0x05)
+#define ZCL_SWITCH_CHAIRMAN_REQUEST_COMMAND_ID (0x05)
+#define ZCL_GET_NODE_INFORMATION_REQUEST_COMMAND_ID (0x06)
+#define ZCL_SWITCH_CHAIRMAN_CONFIRM_COMMAND_ID (0x06)
+#define ZCL_SWITCH_CHAIRMAN_NOTIFICATION_COMMAND_ID (0x07)
+#define ZCL_GET_NODE_INFORMATION_RESPONSE_COMMAND_ID (0x08)
+
+// Commands for cluster: Payment
+#define ZCL_BUY_REQUEST_COMMAND_ID (0x00)
+#define ZCL_BUY_CONFIRM_COMMAND_ID (0x00)
+#define ZCL_ACCEPT_PAYMENT_COMMAND_ID (0x01)
+#define ZCL_RECEIPT_DELIVERY_COMMAND_ID (0x01)
+#define ZCL_PAYMENT_CONFIRM_COMMAND_ID (0x02)
+#define ZCL_TRANSACTION_END_COMMAND_ID (0x02)
+
+// Commands for cluster: Billing
+#define ZCL_SUBSCRIBE_COMMAND_ID (0x00)
+#define ZCL_CHECK_BILL_STATUS_COMMAND_ID (0x00)
+#define ZCL_UNSUBSCRIBE_COMMAND_ID (0x01)
+#define ZCL_SEND_BILL_RECORD_COMMAND_ID (0x01)
+#define ZCL_START_BILLING_SESSION_COMMAND_ID (0x02)
+#define ZCL_STOP_BILLING_SESSION_COMMAND_ID (0x03)
+#define ZCL_BILL_STATUS_NOTIFICATION_COMMAND_ID (0x04)
+#define ZCL_SESSION_KEEP_ALIVE_COMMAND_ID (0x05)
+
+// Commands for cluster: Appliance Events and Alert
+#define ZCL_GET_ALERTS_COMMAND_ID (0x00)
+#define ZCL_GET_ALERTS_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_ALERTS_NOTIFICATION_COMMAND_ID (0x01)
+#define ZCL_EVENTS_NOTIFICATION_COMMAND_ID (0x02)
+
+// Commands for cluster: Appliance Statistics
+#define ZCL_LOG_NOTIFICATION_COMMAND_ID (0x00)
+#define ZCL_LOG_REQUEST_COMMAND_ID (0x00)
+#define ZCL_LOG_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_LOG_QUEUE_REQUEST_COMMAND_ID (0x01)
+#define ZCL_LOG_QUEUE_RESPONSE_COMMAND_ID (0x02)
+#define ZCL_STATISTICS_AVAILABLE_COMMAND_ID (0x03)
+
+// Commands for cluster: Electrical Measurement
+#define ZCL_GET_PROFILE_INFO_RESPONSE_COMMAND_COMMAND_ID (0x00)
+#define ZCL_GET_PROFILE_INFO_COMMAND_COMMAND_ID (0x00)
+#define ZCL_GET_MEASUREMENT_PROFILE_RESPONSE_COMMAND_COMMAND_ID (0x01)
+#define ZCL_GET_MEASUREMENT_PROFILE_COMMAND_COMMAND_ID (0x01)
+
+// Commands for cluster: ZLL Commissioning
+#define ZCL_SCAN_REQUEST_COMMAND_ID (0x00)
+#define ZCL_SCAN_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_DEVICE_INFORMATION_REQUEST_COMMAND_ID (0x02)
+#define ZCL_DEVICE_INFORMATION_RESPONSE_COMMAND_ID (0x03)
+#define ZCL_IDENTIFY_REQUEST_COMMAND_ID (0x06)
+#define ZCL_RESET_TO_FACTORY_NEW_REQUEST_COMMAND_ID (0x07)
+#define ZCL_NETWORK_START_REQUEST_COMMAND_ID (0x10)
+#define ZCL_NETWORK_START_RESPONSE_COMMAND_ID (0x11)
+#define ZCL_NETWORK_JOIN_ROUTER_REQUEST_COMMAND_ID (0x12)
+#define ZCL_NETWORK_JOIN_ROUTER_RESPONSE_COMMAND_ID (0x13)
+#define ZCL_NETWORK_JOIN_END_DEVICE_REQUEST_COMMAND_ID (0x14)
+#define ZCL_NETWORK_JOIN_END_DEVICE_RESPONSE_COMMAND_ID (0x15)
+#define ZCL_NETWORK_UPDATE_REQUEST_COMMAND_ID (0x16)
+#define ZCL_ENDPOINT_INFORMATION_COMMAND_ID (0x40)
+#define ZCL_GET_GROUP_IDENTIFIERS_REQUEST_COMMAND_ID (0x41)
+#define ZCL_GET_GROUP_IDENTIFIERS_RESPONSE_COMMAND_ID (0x41)
+#define ZCL_GET_ENDPOINT_LIST_REQUEST_COMMAND_ID (0x42)
+#define ZCL_GET_ENDPOINT_LIST_RESPONSE_COMMAND_ID (0x42)
+
+// Commands for cluster: Binding
+#define ZCL_BIND_COMMAND_ID (0x00)
+#define ZCL_UNBIND_COMMAND_ID (0x01)
+
+// Commands for cluster: Sample Mfg Specific Cluster
+#define ZCL_COMMAND_ONE_COMMAND_ID (0x00)
+
+// Commands for cluster: Sample Mfg Specific Cluster 2
+#define ZCL_COMMAND_TWO_COMMAND_ID (0x00)
+
+// Commands for cluster: Configuration Cluster
+#define ZCL_SET_TOKEN_COMMAND_ID (0x00)
+#define ZCL_RETURN_TOKEN_COMMAND_ID (0x00)
+#define ZCL_LOCK_TOKENS_COMMAND_ID (0x01)
+#define ZCL_READ_TOKENS_COMMAND_ID (0x02)
+#define ZCL_UNLOCK_TOKENS_COMMAND_ID (0x03)
+
+// Commands for cluster: MFGLIB Cluster
+#define ZCL_STREAM_COMMAND_ID (0x00)
+#define ZCL_TONE_COMMAND_ID (0x01)
+#define ZCL_RX_MODE_COMMAND_ID (0x02)
+
+// Commands for cluster: SL Works With All Hubs
+#define ZCL_ENABLE_APS_LINK_KEY_AUTHORIZATION_COMMAND_ID (0x00)
+#define ZCL_APS_LINK_KEY_AUTHORIZATION_QUERY_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_DISABLE_APS_LINK_KEY_AUTHORIZATION_COMMAND_ID (0x01)
+#define ZCL_POWERING_OFF_NOTIFICATION_COMMAND_ID (0x01)
+#define ZCL_APS_LINK_KEY_AUTHORIZATION_QUERY_COMMAND_ID (0x02)
+#define ZCL_POWERING_ON_NOTIFICATION_COMMAND_ID (0x02)
+#define ZCL_REQUEST_NEW_APS_LINK_KEY_COMMAND_ID (0x03)
+#define ZCL_SHORT_ADDRESS_CHANGE_COMMAND_ID (0x03)
+#define ZCL_ENABLE_WWAH_APP_EVENT_RETRY_ALGORITHM_COMMAND_ID (0x04)
+#define ZCL_APS_ACK_ENABLEMENT_QUERY_RESPONSE_COMMAND_ID (0x04)
+#define ZCL_DISABLE_WWAH_APP_EVENT_RETRY_ALGORITHM_COMMAND_ID (0x05)
+#define ZCL_POWER_DESCRIPTOR_CHANGE_COMMAND_ID (0x05)
+#define ZCL_REQUEST_TIME_COMMAND_ID (0x06)
+#define ZCL_NEW_DEBUG_REPORT_NOTIFICATION_COMMAND_ID (0x06)
+#define ZCL_ENABLE_WWAH_REJOIN_ALGORITHM_COMMAND_ID (0x07)
+#define ZCL_DEBUG_REPORT_QUERY_RESPONSE_COMMAND_ID (0x07)
+#define ZCL_DISABLE_WWAH_REJOIN_ALGORITHM_COMMAND_ID (0x08)
+#define ZCL_TRUST_CENTER_FOR_CLUSTER_SERVER_QUERY_RESPONSE_COMMAND_ID (0x08)
+#define ZCL_SET_IAS_ZONE_ENROLLMENT_METHOD_COMMAND_ID (0x09)
+#define ZCL_SURVEY_BEACONS_RESPONSE_COMMAND_ID (0x09)
+#define ZCL_CLEAR_BINDING_TABLE_COMMAND_ID (0x0A)
+#define ZCL_ENABLE_PERIODIC_ROUTER_CHECK_INS_COMMAND_ID (0x0B)
+#define ZCL_DISABLE_PERIODIC_ROUTER_CHECK_INS_COMMAND_ID (0x0C)
+#define ZCL_SET_MAC_POLL_FAILURE_WAIT_TIME_COMMAND_ID (0x0D)
+#define ZCL_SET_PENDING_NETWORK_UPDATE_COMMAND_ID (0x0E)
+#define ZCL_REQUIRE_APS_ACKS_ON_UNICASTS_COMMAND_ID (0x0F)
+#define ZCL_REMOVE_APS_ACKS_ON_UNICASTS_REQUIREMENT_COMMAND_ID (0x10)
+#define ZCL_APS_ACK_REQUIREMENT_QUERY_COMMAND_ID (0x11)
+#define ZCL_DEBUG_REPORT_QUERY_COMMAND_ID (0x12)
+#define ZCL_SURVEY_BEACONS_COMMAND_ID (0x13)
+#define ZCL_DISABLE_OTA_DOWNGRADES_COMMAND_ID (0x14)
+#define ZCL_DISABLE_MGMT_LEAVE_WITHOUT_REJOIN_COMMAND_ID (0x15)
+#define ZCL_DISABLE_TOUCHLINK_INTERPAN_MESSAGE_SUPPORT_COMMAND_ID (0x16)
+#define ZCL_ENABLE_WWAH_PARENT_CLASSIFICATION_COMMAND_ID (0x17)
+#define ZCL_DISABLE_WWAH_PARENT_CLASSIFICATION_COMMAND_ID (0x18)
+#define ZCL_ENABLE_TC_SECURITY_ON_NTWK_KEY_ROTATION_COMMAND_ID (0x19)
+#define ZCL_ENABLE_WWAH_BAD_PARENT_RECOVERY_COMMAND_ID (0x1A)
+#define ZCL_DISABLE_WWAH_BAD_PARENT_RECOVERY_COMMAND_ID (0x1B)
+#define ZCL_ENABLE_CONFIGURATION_MODE_COMMAND_ID (0x1C)
+#define ZCL_DISABLE_CONFIGURATION_MODE_COMMAND_ID (0x1D)
+#define ZCL_USE_TRUST_CENTER_FOR_CLUSTER_SERVER_COMMAND_ID (0x1E)
+#define ZCL_TRUST_CENTER_FOR_CLUSTER_SERVER_QUERY_COMMAND_ID (0x1F)
+#define ZCL_USE_TRUST_CENTER_FOR_CLUSTER_SERVER_RESPONSE_COMMAND_ID (0x9E)
diff --git a/examples/chip-tool/gen/endpoint_config.h b/examples/chip-tool/gen/endpoint_config.h
new file mode 100644
index 0000000..2d57360
--- /dev/null
+++ b/examples/chip-tool/gen/endpoint_config.h
@@ -0,0 +1,428 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+// Prevent multiple inclusion
+#pragma once
+
+// Default values for the attributes longer than a pointer,
+// in a form of a binary blob
+// Separate block is generated for big-endian and little-endian cases.
+#if BIGENDIAN_CPU
+#define GENERATED_DEFAULTS                                                                                                         \
+    {                                                                                                                              \
+    }
+
+#else // !BIGENDIAN_CPU
+#define GENERATED_DEFAULTS                                                                                                         \
+    {                                                                                                                              \
+    }
+
+#endif // BIGENDIAN_CPU
+
+#define GENERATED_DEFAULTS_COUNT (0)
+
+#define ZAP_TYPE(type) ZCL_##type##_ATTRIBUTE_TYPE
+#define ZAP_LONG_DEFAULTS_INDEX(index)                                                                                             \
+    {                                                                                                                              \
+        (uint8_t *) (&generatedDefaults[index])                                                                                    \
+    }
+#define ZAP_MIN_MAX_DEFAULTS_INDEX(index)                                                                                          \
+    {                                                                                                                              \
+        (uint8_t *) (&minMaxDefault[index])                                                                                        \
+    }
+
+// This is an array of EmberAfAttributeMinMaxValue structures.
+#define GENERATED_MIN_MAX_DEFAULT_COUNT 0
+#define GENERATED_MIN_MAX_DEFAULTS                                                                                                 \
+    {                                                                                                                              \
+    }
+
+#define ZAP_ATTRIBUTE_MASK(mask) ATTRIBUTE_MASK_##mask
+// This is an array of EmberAfAttributeMetadata structures.
+#define GENERATED_ATTRIBUTE_COUNT 11
+#define GENERATED_ATTRIBUTES                                                                                                       \
+    {                                                                                                                              \
+        { 0xFFFD, ZAP_TYPE(INT16U), 2, ZAP_ATTRIBUTE_MASK(CLIENT), { (uint8_t *) 3 } }, /* Basic (client): cluster revision */     \
+            {                                                                                                                      \
+                0xFFFD, ZAP_TYPE(INT16U), 2, ZAP_ATTRIBUTE_MASK(CLIENT), { (uint8_t *) 2 }                                         \
+            }, /* Identify (client): cluster revision */                                                                           \
+            {                                                                                                                      \
+                0xFFFD, ZAP_TYPE(INT16U), 2, ZAP_ATTRIBUTE_MASK(CLIENT), { (uint8_t *) 3 }                                         \
+            }, /* Groups (client): cluster revision */                                                                             \
+            {                                                                                                                      \
+                0xFFFD, ZAP_TYPE(INT16U), 2, ZAP_ATTRIBUTE_MASK(CLIENT), { (uint8_t *) 3 }                                         \
+            }, /* Scenes (client): cluster revision */                                                                             \
+            {                                                                                                                      \
+                0xFFFD, ZAP_TYPE(INT16U), 2, ZAP_ATTRIBUTE_MASK(CLIENT), { (uint8_t *) 2 }                                         \
+            }, /* On/off (client): cluster revision */                                                                             \
+            {                                                                                                                      \
+                0xFFFD, ZAP_TYPE(INT16U), 2, ZAP_ATTRIBUTE_MASK(CLIENT), { (uint8_t *) 3 }                                         \
+            }, /* Level Control (client): cluster revision */                                                                      \
+            {                                                                                                                      \
+                0xFFFD, ZAP_TYPE(INT16U), 2, ZAP_ATTRIBUTE_MASK(CLIENT), { (uint8_t *) 3 }                                         \
+            }, /* Door Lock (client): cluster revision */                                                                          \
+            {                                                                                                                      \
+                0xFFFD, ZAP_TYPE(INT16U), 2, ZAP_ATTRIBUTE_MASK(CLIENT), { (uint8_t *) 0x0001 }                                    \
+            }, /* Barrier Control (client): cluster revision */                                                                    \
+            {                                                                                                                      \
+                0xFFFD, ZAP_TYPE(INT16U), 2, ZAP_ATTRIBUTE_MASK(CLIENT), { (uint8_t *) 3 }                                         \
+            }, /* Color Control (client): cluster revision */                                                                      \
+            {                                                                                                                      \
+                0xFFFD, ZAP_TYPE(INT16U), 2, ZAP_ATTRIBUTE_MASK(CLIENT), { (uint8_t *) 3 }                                         \
+            }, /* Temperature Measurement (client): cluster revision */                                                            \
+            {                                                                                                                      \
+                0xFFFD, ZAP_TYPE(INT16U), 2, ZAP_ATTRIBUTE_MASK(CLIENT), { (uint8_t *) 0x0001 }                                    \
+            }, /* Binding (client): cluster revision */                                                                            \
+    }
+
+// This is an array of EmberAfCluster structures.
+#define ZAP_ATTRIBUTE_INDEX(index) ((EmberAfAttributeMetadata *) (&generatedAttributes[index]))
+
+// Cluster function static arrays
+#define GENERATED_FUNCTION_ARRAYS
+
+#define ZAP_CLUSTER_MASK(mask) CLUSTER_MASK_##mask
+#define GENERATED_CLUSTER_COUNT 11
+#define GENERATED_CLUSTERS                                                                                                         \
+    {                                                                                                                              \
+        { 0x0000, ZAP_ATTRIBUTE_INDEX(0), 1, 2, ZAP_CLUSTER_MASK(CLIENT), NULL }, /* Endpoint: 1, Cluster: Basic (client) */       \
+            {                                                                                                                      \
+                0x0003, ZAP_ATTRIBUTE_INDEX(1), 1, 2, ZAP_CLUSTER_MASK(CLIENT), NULL                                               \
+            }, /* Endpoint: 1, Cluster: Identify (client) */                                                                       \
+            { 0x0004, ZAP_ATTRIBUTE_INDEX(2), 1, 2, ZAP_CLUSTER_MASK(CLIENT), NULL }, /* Endpoint: 1, Cluster: Groups (client) */  \
+            { 0x0005, ZAP_ATTRIBUTE_INDEX(3), 1, 2, ZAP_CLUSTER_MASK(CLIENT), NULL }, /* Endpoint: 1, Cluster: Scenes (client) */  \
+            { 0x0006, ZAP_ATTRIBUTE_INDEX(4), 1, 2, ZAP_CLUSTER_MASK(CLIENT), NULL }, /* Endpoint: 1, Cluster: On/off (client) */  \
+            {                                                                                                                      \
+                0x0008, ZAP_ATTRIBUTE_INDEX(5), 1, 2, ZAP_CLUSTER_MASK(CLIENT), NULL                                               \
+            }, /* Endpoint: 1, Cluster: Level Control (client) */                                                                  \
+            {                                                                                                                      \
+                0x0101, ZAP_ATTRIBUTE_INDEX(6), 1, 2, ZAP_CLUSTER_MASK(CLIENT), NULL                                               \
+            }, /* Endpoint: 1, Cluster: Door Lock (client) */                                                                      \
+            {                                                                                                                      \
+                0x0103, ZAP_ATTRIBUTE_INDEX(7), 1, 2, ZAP_CLUSTER_MASK(CLIENT), NULL                                               \
+            }, /* Endpoint: 1, Cluster: Barrier Control (client) */                                                                \
+            {                                                                                                                      \
+                0x0300, ZAP_ATTRIBUTE_INDEX(8), 1, 2, ZAP_CLUSTER_MASK(CLIENT), NULL                                               \
+            }, /* Endpoint: 1, Cluster: Color Control (client) */                                                                  \
+            {                                                                                                                      \
+                0x0402, ZAP_ATTRIBUTE_INDEX(9), 1, 2, ZAP_CLUSTER_MASK(CLIENT), NULL                                               \
+            }, /* Endpoint: 1, Cluster: Temperature Measurement (client) */                                                        \
+            {                                                                                                                      \
+                0xF000, ZAP_ATTRIBUTE_INDEX(10), 1, 2, ZAP_CLUSTER_MASK(CLIENT), NULL                                              \
+            }, /* Endpoint: 1, Cluster: Binding (client) */                                                                        \
+    }
+
+#define ZAP_CLUSTER_INDEX(index) ((EmberAfCluster *) (&generatedClusters[index]))
+
+// This is an array of EmberAfEndpointType structures.
+#define GENERATED_ENDPOINT_TYPES                                                                                                   \
+    {                                                                                                                              \
+        { ZAP_CLUSTER_INDEX(0), 11, 22 },                                                                                          \
+    }
+
+// Largest attribute size is needed for various buffers
+#define ATTRIBUTE_LARGEST (2)
+
+// Total size of singleton attributes
+#define ATTRIBUTE_SINGLETONS_SIZE (0)
+
+// Total size of attribute storage
+#define ATTRIBUTE_MAX_SIZE (22)
+
+// Number of fixed endpoints
+#define FIXED_ENDPOINT_COUNT (1)
+
+// Array of endpoints that are supported, the data inside
+// the array is the endpoint number.
+#define FIXED_ENDPOINT_ARRAY                                                                                                       \
+    {                                                                                                                              \
+        0x0001                                                                                                                     \
+    }
+
+// Array of profile ids
+#define FIXED_PROFILE_IDS                                                                                                          \
+    {                                                                                                                              \
+        0x0103                                                                                                                     \
+    }
+
+// Array of device ids
+#define FIXED_DEVICE_IDS                                                                                                           \
+    {                                                                                                                              \
+        0                                                                                                                          \
+    }
+
+// Array of device versions
+#define FIXED_DEVICE_VERSIONS                                                                                                      \
+    {                                                                                                                              \
+        1                                                                                                                          \
+    }
+
+// Array of endpoint types supported on each endpoint
+#define FIXED_ENDPOINT_TYPES                                                                                                       \
+    {                                                                                                                              \
+        0                                                                                                                          \
+    }
+
+// Array of networks supported on each endpoint
+#define FIXED_NETWORKS                                                                                                             \
+    {                                                                                                                              \
+        0                                                                                                                          \
+    }
+
+// Array of EmberAfCommandMetadata structs.
+#define ZAP_COMMAND_MASK(mask) COMMAND_MASK_##mask
+#define EMBER_AF_GENERATED_COMMAND_COUNT (105)
+#define GENERATED_COMMANDS                                                                                                         \
+    {                                                                                                                              \
+        { 0x0000, 0x00,                                                                                                            \
+          ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Basic (client): MfgSpecificPing */           \
+            {                                                                                                                      \
+                0x0000, 0x00, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            },                                                   /* Basic (client): ResetToFactoryDefaults */                      \
+            { 0x0003, 0x00, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Identify (client): Identify */                                 \
+            { 0x0003, 0x00, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Identify (client): IdentifyQueryResponse */                    \
+            { 0x0003, 0x01, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Identify (client): IdentifyQuery */                            \
+            { 0x0004, 0x00, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Groups (client): AddGroup */                                   \
+            { 0x0004, 0x00, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Groups (client): AddGroupResponse */                           \
+            { 0x0004, 0x01, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Groups (client): ViewGroup */                                  \
+            { 0x0004, 0x01, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Groups (client): ViewGroupResponse */                          \
+            { 0x0004, 0x02, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Groups (client): GetGroupMembership */                         \
+            { 0x0004, 0x02, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Groups (client): GetGroupMembershipResponse */                 \
+            { 0x0004, 0x03, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Groups (client): RemoveGroup */                                \
+            { 0x0004, 0x03, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Groups (client): RemoveGroupResponse */                        \
+            { 0x0004, 0x04, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Groups (client): RemoveAllGroups */                            \
+            { 0x0004, 0x05, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Groups (client): AddGroupIfIdentifying */                      \
+            { 0x0005, 0x00, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Scenes (client): AddScene */                                   \
+            { 0x0005, 0x00, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Scenes (client): AddSceneResponse */                           \
+            { 0x0005, 0x01, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Scenes (client): ViewScene */                                  \
+            { 0x0005, 0x01, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Scenes (client): ViewSceneResponse */                          \
+            { 0x0005, 0x02, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Scenes (client): RemoveScene */                                \
+            { 0x0005, 0x02, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Scenes (client): RemoveSceneResponse */                        \
+            { 0x0005, 0x03, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Scenes (client): RemoveAllScenes */                            \
+            { 0x0005, 0x03, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Scenes (client): RemoveAllScenesResponse */                    \
+            { 0x0005, 0x04, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Scenes (client): StoreScene */                                 \
+            { 0x0005, 0x04, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Scenes (client): StoreSceneResponse */                         \
+            { 0x0005, 0x05, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Scenes (client): RecallScene */                                \
+            { 0x0005, 0x06, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Scenes (client): GetSceneMembership */                         \
+            { 0x0005, 0x06, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Scenes (client): GetSceneMembershipResponse */                 \
+            { 0x0006, 0x00, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* On/off (client): Off */                                        \
+            { 0x0006, 0x01, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* On/off (client): On */                                         \
+            { 0x0006, 0x02, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* On/off (client): Toggle */                                     \
+            { 0x0008, 0x00, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Level Control (client): MoveToLevel */                         \
+            { 0x0008, 0x01, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Level Control (client): Move */                                \
+            { 0x0008, 0x02, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Level Control (client): Step */                                \
+            { 0x0008, 0x03, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Level Control (client): Stop */                                \
+            { 0x0008, 0x04, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Level Control (client): MoveToLevelWithOnOff */                \
+            { 0x0008, 0x05, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Level Control (client): MoveWithOnOff */                       \
+            { 0x0008, 0x06, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Level Control (client): StepWithOnOff */                       \
+            { 0x0008, 0x07, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Level Control (client): StopWithOnOff */                       \
+            { 0x0101, 0x00, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Door Lock (client): LockDoor */                                \
+            { 0x0101, 0x00, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Door Lock (client): LockDoorResponse */                        \
+            { 0x0101, 0x01, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Door Lock (client): UnlockDoor */                              \
+            { 0x0101, 0x01, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Door Lock (client): UnlockDoorResponse */                      \
+            { 0x0101, 0x03,                                                                                                        \
+              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Door Lock (client): UnlockWithTimeout */ \
+            {                                                                                                                      \
+                0x0101, 0x03, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Door Lock (client): UnlockWithTimeoutResponse */                                                                 \
+            { 0x0101, 0x04,                                                                                                        \
+              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Door Lock (client): GetLogRecord */      \
+            {                                                                                                                      \
+                0x0101, 0x04, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Door Lock (client): GetLogRecordResponse */                                                                      \
+            { 0x0101, 0x05,                                                                                                        \
+              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Door Lock (client): SetPin */            \
+            { 0x0101, 0x05,                                                                                                        \
+              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Door Lock (client): SetPinResponse */    \
+            { 0x0101, 0x06,                                                                                                        \
+              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Door Lock (client): GetPin */            \
+            { 0x0101, 0x06,                                                                                                        \
+              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Door Lock (client): GetPinResponse */    \
+            { 0x0101, 0x07,                                                                                                        \
+              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Door Lock (client): ClearPin */          \
+            { 0x0101, 0x07,                                                                                                        \
+              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Door Lock (client): ClearPinResponse */  \
+            { 0x0101, 0x08,                                                                                                        \
+              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Door Lock (client): ClearAllPins */      \
+            {                                                                                                                      \
+                0x0101, 0x08, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            },                   /* Door Lock (client): ClearAllPinsResponse */                                                    \
+            { 0x0101, 0x09, 0 }, /* Door Lock (client): SetUserStatusResponse */                                                   \
+            { 0x0101, 0x0A, 0 }, /* Door Lock (client): GetUserStatusResponse */                                                   \
+            {                                                                                                                      \
+                0x0101, 0x0B, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Door Lock (client): SetWeekdaySchedule */                                                                        \
+            {                                                                                                                      \
+                0x0101, 0x0B, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Door Lock (client): SetWeekdayScheduleResponse */                                                                \
+            {                                                                                                                      \
+                0x0101, 0x0C, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Door Lock (client): GetWeekdaySchedule */                                                                        \
+            {                                                                                                                      \
+                0x0101, 0x0C, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Door Lock (client): GetWeekdayScheduleResponse */                                                                \
+            {                                                                                                                      \
+                0x0101, 0x0D, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Door Lock (client): ClearWeekdaySchedule */                                                                      \
+            {                                                                                                                      \
+                0x0101, 0x0D, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Door Lock (client): ClearWeekdayScheduleResponse */                                                              \
+            {                                                                                                                      \
+                0x0101, 0x0E, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Door Lock (client): SetYeardaySchedule */                                                                        \
+            {                                                                                                                      \
+                0x0101, 0x0E, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Door Lock (client): SetYeardayScheduleResponse */                                                                \
+            {                                                                                                                      \
+                0x0101, 0x0F, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Door Lock (client): GetYeardaySchedule */                                                                        \
+            {                                                                                                                      \
+                0x0101, 0x0F, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Door Lock (client): GetYeardayScheduleResponse */                                                                \
+            {                                                                                                                      \
+                0x0101, 0x10, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Door Lock (client): ClearYeardaySchedule */                                                                      \
+            {                                                                                                                      \
+                0x0101, 0x10, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Door Lock (client): ClearYeardayScheduleResponse */                                                              \
+            {                                                                                                                      \
+                0x0101, 0x11, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Door Lock (client): SetHolidaySchedule */                                                                        \
+            {                                                                                                                      \
+                0x0101, 0x11, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Door Lock (client): SetHolidayScheduleResponse */                                                                \
+            {                                                                                                                      \
+                0x0101, 0x12, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Door Lock (client): GetHolidaySchedule */                                                                        \
+            {                                                                                                                      \
+                0x0101, 0x12, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Door Lock (client): GetHolidayScheduleResponse */                                                                \
+            {                                                                                                                      \
+                0x0101, 0x13, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Door Lock (client): ClearHolidaySchedule */                                                                      \
+            {                                                                                                                      \
+                0x0101, 0x13, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Door Lock (client): ClearHolidayScheduleResponse */                                                              \
+            { 0x0101, 0x14,                                                                                                        \
+              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Door Lock (client): SetUserType */       \
+            {                                                                                                                      \
+                0x0101, 0x14, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Door Lock (client): SetUserTypeResponse */                                                                       \
+            { 0x0101, 0x15,                                                                                                        \
+              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Door Lock (client): GetUserType */       \
+            {                                                                                                                      \
+                0x0101, 0x15, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Door Lock (client): GetUserTypeResponse */                                                                       \
+            { 0x0101, 0x16,                                                                                                        \
+              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Door Lock (client): SetRfid */           \
+            { 0x0101, 0x16,                                                                                                        \
+              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Door Lock (client): SetRfidResponse */   \
+            { 0x0101, 0x17,                                                                                                        \
+              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Door Lock (client): GetRfid */           \
+            { 0x0101, 0x17,                                                                                                        \
+              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Door Lock (client): GetRfidResponse */   \
+            { 0x0101, 0x18,                                                                                                        \
+              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Door Lock (client): ClearRfid */         \
+            { 0x0101, 0x18,                                                                                                        \
+              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Door Lock (client): ClearRfidResponse */ \
+            { 0x0101, 0x19,                                                                                                        \
+              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Door Lock (client): ClearAllRfids */     \
+            {                                                                                                                      \
+                0x0101, 0x19, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            },                                                   /* Door Lock (client): ClearAllRfidsResponse */                   \
+            { 0x0103, 0x00, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Barrier Control (client): BarrierControlGoToPercent */         \
+            { 0x0103, 0x01, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Barrier Control (client): BarrierControlStop */                \
+            { 0x0300, 0x00,                                                                                                        \
+              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Color Control (client): MoveToHue */     \
+            { 0x0300, 0x01,                                                                                                        \
+              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Color Control (client): MoveHue */       \
+            { 0x0300, 0x02,                                                                                                        \
+              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Color Control (client): StepHue */       \
+            {                                                                                                                      \
+                0x0300, 0x03, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Color Control (client): MoveToSaturation */                                                                      \
+            {                                                                                                                      \
+                0x0300, 0x04, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Color Control (client): MoveSaturation */                                                                        \
+            {                                                                                                                      \
+                0x0300, 0x05, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Color Control (client): StepSaturation */                                                                        \
+            {                                                                                                                      \
+                0x0300, 0x06, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            },                                                   /* Color Control (client): MoveToHueAndSaturation */              \
+            { 0x0300, 0x07, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Color Control (client): MoveToColor */                         \
+            { 0x0300, 0x08, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Color Control (client): MoveColor */                           \
+            { 0x0300, 0x09, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Color Control (client): StepColor */                           \
+            {                                                                                                                      \
+                0x0300, 0x0A, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Color Control (client): MoveToColorTemperature */                                                                \
+            { 0x0300, 0x47,                                                                                                        \
+              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Color Control (client): StopMoveStep */  \
+            {                                                                                                                      \
+                0x0300, 0x4B, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Color Control (client): MoveColorTemperature */                                                                  \
+            {                                                                                                                      \
+                0x0300, 0x4C, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            },                                                   /* Color Control (client): StepColorTemperature */                \
+            { 0xF000, 0x00, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Binding (client): Bind */                                      \
+            { 0xF000, 0x01, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Binding (client): Unbind */                                    \
+    }
+
+// Array of EmberAfManufacturerCodeEntry structures for commands.
+#define GENERATED_COMMAND_MANUFACTURER_CODE_COUNT (1)
+#define GENERATED_COMMAND_MANUFACTURER_CODES                                                                                       \
+    {                                                                                                                              \
+        { 0, 0x1002 },                                                                                                             \
+    }
+
+// This is an array of EmberAfManufacturerCodeEntry structures for clusters.
+#define GENERATED_CLUSTER_MANUFACTURER_CODE_COUNT (0)
+#define GENERATED_CLUSTER_MANUFACTURER_CODES                                                                                       \
+    {                                                                                                                              \
+        {                                                                                                                          \
+            0x00, 0x00                                                                                                             \
+        }                                                                                                                          \
+    }
+
+// This is an array of EmberAfManufacturerCodeEntry structures for attributes.
+#define GENERATED_ATTRIBUTE_MANUFACTURER_CODE_COUNT (0)
+#define GENERATED_ATTRIBUTE_MANUFACTURER_CODES                                                                                     \
+    {                                                                                                                              \
+        {                                                                                                                          \
+            0x00, 0x00                                                                                                             \
+        }                                                                                                                          \
+    }
+
+// Array of EmberAfPluginReportingEntry structures.
+#define ZRD(x) EMBER_ZCL_REPORTING_DIRECTION_##x
+#define ZAP_REPORT_DIRECTION(x) ZRD(x)
+
+// Use this macro to check if Reporting plugin is included
+#define EMBER_AF_PLUGIN_REPORTING
+// User options for plugin Reporting
+#define EMBER_AF_PLUGIN_REPORTING_TABLE_SIZE (1)
+#define EMBER_AF_PLUGIN_REPORTING_ENABLE_GROUP_BOUND_REPORTS
+
+#define EMBER_AF_GENERATED_REPORTING_CONFIG_DEFAULTS_TABLE_SIZE (1)
+#define EMBER_AF_GENERATED_REPORTING_CONFIG_DEFAULTS                                                                               \
+    {                                                                                                                              \
+        {                                                                                                                          \
+            ZAP_REPORT_DIRECTION(REPORTED), 0x0001, 0x0000, 0xFFFD, ZAP_CLUSTER_MASK(CLIENT), 0x0000, { { 0, 65344, 0 } }          \
+        }, /* Reporting for cluster: "Basic", attribute: "cluster revision". side: client */                                       \
+    }
diff --git a/examples/chip-tool/gen/enums.h b/examples/chip-tool/gen/enums.h
new file mode 100644
index 0000000..7cf4c5c
--- /dev/null
+++ b/examples/chip-tool/gen/enums.h
@@ -0,0 +1,4007 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+// Prevent multiple inclusion
+#pragma once
+
+// ZCL enums
+
+// Enum for 11073ConnectRequestConnectControl
+typedef enum
+{
+    EMBER_ZCL_11073_CONNECT_REQUEST_CONNECT_CONTROL_PREEMPTIBLE = 1,
+} EmberAf11073ConnectRequestConnectControl;
+
+// Enum for 11073TunnelConnectionStatus
+typedef enum
+{
+    EMBER_ZCL_11073_TUNNEL_CONNECTION_STATUS_DISCONNECTED      = 0,
+    EMBER_ZCL_11073_TUNNEL_CONNECTION_STATUS_CONNECTED         = 1,
+    EMBER_ZCL_11073_TUNNEL_CONNECTION_STATUS_NOT_AUTHORIZED    = 2,
+    EMBER_ZCL_11073_TUNNEL_CONNECTION_STATUS_RECONNECT_REQUEST = 3,
+    EMBER_ZCL_11073_TUNNEL_CONNECTION_STATUS_ALREADY_CONNECTED = 4,
+} EmberAf11073TunnelConnectionStatus;
+
+// Enum for AlertCountType
+typedef enum
+{
+    EMBER_ZCL_ALERT_COUNT_TYPE_UNSTRUCTURED = 0,
+} EmberAfAlertCountType;
+
+// Enum for AlertStructureCategory
+typedef enum
+{
+    EMBER_ZCL_ALERT_STRUCTURE_CATEGORY_WARNING = 256,
+    EMBER_ZCL_ALERT_STRUCTURE_CATEGORY_DANGER  = 512,
+    EMBER_ZCL_ALERT_STRUCTURE_CATEGORY_FAILURE = 768,
+} EmberAfAlertStructureCategory;
+
+// Enum for AlertStructurePresenceRecovery
+typedef enum
+{
+    EMBER_ZCL_ALERT_STRUCTURE_PRESENCE_RECOVERY_RECOVERY = 0,
+    EMBER_ZCL_ALERT_STRUCTURE_PRESENCE_RECOVERY_PRESENCE = 4096,
+} EmberAfAlertStructurePresenceRecovery;
+
+// Enum for AlternateCostUnit
+typedef enum
+{
+    EMBER_ZCL_ALTERNATE_COST_UNIT_KG_OF_CO2_PER_UNIT_OF_MEASURE = 2,
+} EmberAfAlternateCostUnit;
+
+// Enum for AmiCriticalityLevel
+typedef enum
+{
+    EMBER_ZCL_AMI_CRITICALITY_LEVEL_RESERVED           = 0,
+    EMBER_ZCL_AMI_CRITICALITY_LEVEL_GREEN              = 1,
+    EMBER_ZCL_AMI_CRITICALITY_LEVEL_1                  = 2,
+    EMBER_ZCL_AMI_CRITICALITY_LEVEL_2                  = 3,
+    EMBER_ZCL_AMI_CRITICALITY_LEVEL_3                  = 4,
+    EMBER_ZCL_AMI_CRITICALITY_LEVEL_4                  = 5,
+    EMBER_ZCL_AMI_CRITICALITY_LEVEL_5                  = 6,
+    EMBER_ZCL_AMI_CRITICALITY_LEVEL_EMERGENCY          = 7,
+    EMBER_ZCL_AMI_CRITICALITY_LEVEL_PLANNED_OUTAGE     = 8,
+    EMBER_ZCL_AMI_CRITICALITY_LEVEL_SERVICE_DISCONNECT = 9,
+    EMBER_ZCL_AMI_CRITICALITY_LEVEL_UTILITY_DEFINED1   = 10,
+    EMBER_ZCL_AMI_CRITICALITY_LEVEL_UTILITY_DEFINED2   = 11,
+    EMBER_ZCL_AMI_CRITICALITY_LEVEL_UTILITY_DEFINED3   = 12,
+    EMBER_ZCL_AMI_CRITICALITY_LEVEL_UTILITY_DEFINED4   = 13,
+    EMBER_ZCL_AMI_CRITICALITY_LEVEL_UTILITY_DEFINED5   = 14,
+    EMBER_ZCL_AMI_CRITICALITY_LEVEL_UTILITY_DEFINED6   = 15,
+} EmberAfAmiCriticalityLevel;
+
+// Enum for AmiEventStatus
+typedef enum
+{
+    EMBER_ZCL_AMI_EVENT_STATUS_LOAD_CONTROL_EVENT_COMMAND_RX                          = 1,
+    EMBER_ZCL_AMI_EVENT_STATUS_EVENT_STARTED                                          = 2,
+    EMBER_ZCL_AMI_EVENT_STATUS_EVENT_COMPLETED                                        = 3,
+    EMBER_ZCL_AMI_EVENT_STATUS_USER_HAS_CHOOSE_TO_OPT_OUT                             = 4,
+    EMBER_ZCL_AMI_EVENT_STATUS_USER_HAS_CHOOSE_TO_OPT_IN                              = 5,
+    EMBER_ZCL_AMI_EVENT_STATUS_THE_EVENT_HAS_BEEN_CANCELED                            = 6,
+    EMBER_ZCL_AMI_EVENT_STATUS_THE_EVENT_HAS_BEEN_SUPERSEDED                          = 7,
+    EMBER_ZCL_AMI_EVENT_STATUS_EVENT_PARTIALLY_COMPLETED_WITH_USER_OPT_OUT            = 8,
+    EMBER_ZCL_AMI_EVENT_STATUS_EVENT_PARTIALLY_COMPLETED_DUE_TO_USER_OPT_IN           = 9,
+    EMBER_ZCL_AMI_EVENT_STATUS_EVENT_COMPLETED_NO_USER_PARTICIPATION_PREVIOUS_OPT_OUT = 10,
+    EMBER_ZCL_AMI_EVENT_STATUS_INVALID_OPT_OUT                                        = 246,
+    EMBER_ZCL_AMI_EVENT_STATUS_EVENT_NOT_FOUND                                        = 247,
+    EMBER_ZCL_AMI_EVENT_STATUS_REJECTED_INVALID_CANCEL_COMMAND                        = 248,
+    EMBER_ZCL_AMI_EVENT_STATUS_REJECTED_INVALID_CANCEL_COMMAND_INVALID_EFFECTIVE_TIME = 249,
+    EMBER_ZCL_AMI_EVENT_STATUS_REJECTED_EVENT_EXPIRED                                 = 251,
+    EMBER_ZCL_AMI_EVENT_STATUS_REJECTED_INVALID_CANCEL_UNDEFINED_EVENT                = 253,
+    EMBER_ZCL_AMI_EVENT_STATUS_LOAD_CONTROL_EVENT_COMMAND_REJECTED                    = 254,
+} EmberAfAmiEventStatus;
+
+// Enum for AmiGetProfileStatus
+typedef enum
+{
+    EMBER_ZCL_AMI_GET_PROFILE_STATUS_SUCCESS                                       = 0,
+    EMBER_ZCL_AMI_GET_PROFILE_STATUS_UNDEFINED_INTERVAL_CHANNEL_REQUESTED          = 1,
+    EMBER_ZCL_AMI_GET_PROFILE_STATUS_INTERVAL_CHANNEL_NOT_SUPPORTED                = 2,
+    EMBER_ZCL_AMI_GET_PROFILE_STATUS_INVALID_END_TIME                              = 3,
+    EMBER_ZCL_AMI_GET_PROFILE_STATUS_MORE_PERIODS_REQUESTED_THAN_CAN_BE_RETURNED   = 4,
+    EMBER_ZCL_AMI_GET_PROFILE_STATUS_NO_INTERVALS_AVAILABLE_FOR_THE_REQUESTED_TIME = 5,
+} EmberAfAmiGetProfileStatus;
+
+// Enum for AmiIntervalChannel
+typedef enum
+{
+    EMBER_ZCL_AMI_INTERVAL_CHANNEL_CONSUMPTION_DELIVERED = 0,
+    EMBER_ZCL_AMI_INTERVAL_CHANNEL_CONSUMPTION_RECEIVED  = 1,
+} EmberAfAmiIntervalChannel;
+
+// Enum for AmiIntervalPeriod
+typedef enum
+{
+    EMBER_ZCL_AMI_INTERVAL_PERIOD_DAILY      = 0,
+    EMBER_ZCL_AMI_INTERVAL_PERIOD_MINUTES60  = 1,
+    EMBER_ZCL_AMI_INTERVAL_PERIOD_MINUTES30  = 2,
+    EMBER_ZCL_AMI_INTERVAL_PERIOD_MINUTES15  = 3,
+    EMBER_ZCL_AMI_INTERVAL_PERIOD_MINUTES10  = 4,
+    EMBER_ZCL_AMI_INTERVAL_PERIOD_MINUTES7P5 = 5,
+    EMBER_ZCL_AMI_INTERVAL_PERIOD_MINUTES5   = 6,
+    EMBER_ZCL_AMI_INTERVAL_PERIOD_MINUTES2P5 = 7,
+} EmberAfAmiIntervalPeriod;
+
+// Enum for AmiKeyEstablishmentStatus
+typedef enum
+{
+    EMBER_ZCL_AMI_KEY_ESTABLISHMENT_STATUS_SUCCESS           = 0,
+    EMBER_ZCL_AMI_KEY_ESTABLISHMENT_STATUS_UNKNOWN_ISSUER    = 1,
+    EMBER_ZCL_AMI_KEY_ESTABLISHMENT_STATUS_BAD_KEY_CONFIRM   = 2,
+    EMBER_ZCL_AMI_KEY_ESTABLISHMENT_STATUS_BAD_MESSAGE       = 3,
+    EMBER_ZCL_AMI_KEY_ESTABLISHMENT_STATUS_NO_RESOURCES      = 4,
+    EMBER_ZCL_AMI_KEY_ESTABLISHMENT_STATUS_UNSUPPORTED_SUITE = 5,
+    EMBER_ZCL_AMI_KEY_ESTABLISHMENT_STATUS_INVALID_KEY_USAGE = 6,
+} EmberAfAmiKeyEstablishmentStatus;
+
+// Enum for AmiRegistrationState
+typedef enum
+{
+    EMBER_ZCL_AMI_REGISTRATION_STATE_UNREGISTERED                   = 0,
+    EMBER_ZCL_AMI_REGISTRATION_STATE_JOINING_NETWORK                = 1,
+    EMBER_ZCL_AMI_REGISTRATION_STATE_JOINED_NETWORK                 = 2,
+    EMBER_ZCL_AMI_REGISTRATION_STATE_SUBMITTED_REGISTRATION_REQUEST = 3,
+    EMBER_ZCL_AMI_REGISTRATION_STATE_REGISTRATION_REJECTED          = 4,
+    EMBER_ZCL_AMI_REGISTRATION_STATE_REGISTERED                     = 5,
+    EMBER_ZCL_AMI_REGISTRATION_STATE_REGISTERATION_NOT_POSSIBLE     = 6,
+} EmberAfAmiRegistrationState;
+
+// Enum for AmiUnitOfMeasure
+typedef enum
+{
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_KILO_WATT_HOURS                = 0,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_CUBIC_METER_PER_HOUR           = 1,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_CUBIC_FEET_PER_HOUR            = 2,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_CENTUM_CUBIC_FEET_PER_HOUR     = 3,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_US_GALLONS_PER_HOUR            = 4,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_IMPERIAL_GALLONS_PER_HOUR      = 5,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_BT_US_OR_BTU_PER_HOUR          = 6,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_LITERS_OR_LITERS_PER_HOUR      = 7,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_KPA_GAUGE                      = 8,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_KPA_ABSOLUTE                   = 9,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_MCF_OR_MCF_PER_SECOND          = 10,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_UNITLESS                       = 11,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_MJ_OR_MJ_PER_SECOND            = 12,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_K_VAR_OR_K_VAR_HOURS           = 13,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_KILO_WATT_HOURS_BCD            = 128,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_CUBIC_METER_PER_HOUR_BCD       = 129,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_CUBIC_FEET_PER_HOUR_BCD        = 130,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_CENTUM_CUBIC_FEET_PER_HOUR_BCD = 131,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_US_GALLONS_PER_HOUR_BCD        = 132,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_IMPERIAL_GALLONS_PER_HOUR_BCD  = 133,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_BT_US_OR_BTU_PER_HOUR_BCD      = 134,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_LITERS_OR_LITERS_PER_HOUR_BCD  = 135,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_KPA_GUAGE_BCD                  = 136,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_KPA_ABSOLUTE_BCD               = 137,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_MCF_OR_MCF_PER_SECOND_BCD      = 138,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_UNITLESS_BCD                   = 139,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_MJ_OR_MJ_PER_SECOND_BCD        = 140,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_K_VAR_OR_K_VAR_HOURS_BCD       = 141,
+} EmberAfAmiUnitOfMeasure;
+
+// Enum for AnonymousDataState
+typedef enum
+{
+    EMBER_ZCL_ANONYMOUS_DATA_STATE_NO_SOURCE_FOUND = 0,
+    EMBER_ZCL_ANONYMOUS_DATA_STATE_SOURCE_FOUND    = 1,
+} EmberAfAnonymousDataState;
+
+// Enum for ApplianceStatus
+typedef enum
+{
+    EMBER_ZCL_APPLIANCE_STATUS_OFF                         = 1,
+    EMBER_ZCL_APPLIANCE_STATUS_STAND_BY                    = 2,
+    EMBER_ZCL_APPLIANCE_STATUS_PROGRAMMED                  = 3,
+    EMBER_ZCL_APPLIANCE_STATUS_PROGRAMMED_WAITING_TO_START = 4,
+    EMBER_ZCL_APPLIANCE_STATUS_RUNNING                     = 5,
+    EMBER_ZCL_APPLIANCE_STATUS_PAUSE                       = 6,
+    EMBER_ZCL_APPLIANCE_STATUS_END_PROGRAMMED              = 7,
+    EMBER_ZCL_APPLIANCE_STATUS_FAILURE                     = 8,
+    EMBER_ZCL_APPLIANCE_STATUS_PROGRAMME_INTERRUPTED       = 9,
+    EMBER_ZCL_APPLIANCE_STATUS_IDLE                        = 10,
+    EMBER_ZCL_APPLIANCE_STATUS_RINSE_HOLD                  = 11,
+    EMBER_ZCL_APPLIANCE_STATUS_SERVICE                     = 12,
+    EMBER_ZCL_APPLIANCE_STATUS_SUPERFREEZING               = 13,
+    EMBER_ZCL_APPLIANCE_STATUS_SUPERCOOLING                = 14,
+    EMBER_ZCL_APPLIANCE_STATUS_SUPERHEATING                = 15,
+} EmberAfApplianceStatus;
+
+// Enum for AttributeReportingStatus
+typedef enum
+{
+    EMBER_ZCL_ATTRIBUTE_REPORTING_STATUS_PENDING                      = 0,
+    EMBER_ZCL_ATTRIBUTE_REPORTING_STATUS_ATTRIBUTE_REPORTING_COMPLETE = 1,
+} EmberAfAttributeReportingStatus;
+
+// Enum for AttributeWritePermission
+typedef enum
+{
+    EMBER_ZCL_ATTRIBUTE_WRITE_PERMISSION_DENY_WRITE               = 0,
+    EMBER_ZCL_ATTRIBUTE_WRITE_PERMISSION_ALLOW_WRITE_NORMAL       = 1,
+    EMBER_ZCL_ATTRIBUTE_WRITE_PERMISSION_ALLOW_WRITE_OF_READ_ONLY = 2,
+    EMBER_ZCL_ATTRIBUTE_WRITE_PERMISSION_UNSUPPORTED_ATTRIBUTE    = 134,
+    EMBER_ZCL_ATTRIBUTE_WRITE_PERMISSION_INVALID_VALUE            = 135,
+    EMBER_ZCL_ATTRIBUTE_WRITE_PERMISSION_READ_ONLY                = 136,
+    EMBER_ZCL_ATTRIBUTE_WRITE_PERMISSION_INVALID_DATA_TYPE        = 141,
+} EmberAfAttributeWritePermission;
+
+// Enum for BarrierControlBarrierPosition
+typedef enum
+{
+    EMBER_ZCL_BARRIER_CONTROL_BARRIER_POSITION_CLOSED  = 0,
+    EMBER_ZCL_BARRIER_CONTROL_BARRIER_POSITION_OPEN    = 100,
+    EMBER_ZCL_BARRIER_CONTROL_BARRIER_POSITION_UNKNOWN = 255,
+} EmberAfBarrierControlBarrierPosition;
+
+// Enum for BarrierControlMovingState
+typedef enum
+{
+    EMBER_ZCL_BARRIER_CONTROL_MOVING_STATE_STOPPED = 0,
+    EMBER_ZCL_BARRIER_CONTROL_MOVING_STATE_CLOSING = 1,
+    EMBER_ZCL_BARRIER_CONTROL_MOVING_STATE_OPENING = 2,
+} EmberAfBarrierControlMovingState;
+
+// Enum for BatterySize
+typedef enum
+{
+    EMBER_ZCL_BATTERY_SIZE_NO_BATTERY = 0,
+    EMBER_ZCL_BATTERY_SIZE_BUILT_IN   = 1,
+    EMBER_ZCL_BATTERY_SIZE_OTHER      = 2,
+    EMBER_ZCL_BATTERY_SIZE_AA         = 3,
+    EMBER_ZCL_BATTERY_SIZE_AAA        = 4,
+    EMBER_ZCL_BATTERY_SIZE_C          = 5,
+    EMBER_ZCL_BATTERY_SIZE_D          = 6,
+    EMBER_ZCL_BATTERY_SIZE_UNKNOWN    = 255,
+} EmberAfBatterySize;
+
+// Enum for BillingPeriodDurationUnits
+typedef enum
+{
+    EMBER_ZCL_BILLING_PERIOD_DURATION_UNITS_MINUTES = 0,
+    EMBER_ZCL_BILLING_PERIOD_DURATION_UNITS_DAYS    = 4194304,
+    EMBER_ZCL_BILLING_PERIOD_DURATION_UNITS_WEEKS   = 8388608,
+    EMBER_ZCL_BILLING_PERIOD_DURATION_UNITS_MONTHS  = 12582912,
+} EmberAfBillingPeriodDurationUnits;
+
+// Enum for Block
+typedef enum
+{
+    EMBER_ZCL_BLOCK_NO_BLOCKS_IN_USE = 0,
+    EMBER_ZCL_BLOCK_BLOCK1           = 1,
+    EMBER_ZCL_BLOCK_BLOCK2           = 2,
+    EMBER_ZCL_BLOCK_BLOCK3           = 3,
+    EMBER_ZCL_BLOCK_BLOCK4           = 4,
+    EMBER_ZCL_BLOCK_BLOCK5           = 5,
+    EMBER_ZCL_BLOCK_BLOCK6           = 6,
+    EMBER_ZCL_BLOCK_BLOCK7           = 7,
+    EMBER_ZCL_BLOCK_BLOCK8           = 8,
+    EMBER_ZCL_BLOCK_BLOCK9           = 9,
+    EMBER_ZCL_BLOCK_BLOCK10          = 10,
+    EMBER_ZCL_BLOCK_BLOCK11          = 11,
+    EMBER_ZCL_BLOCK_BLOCK12          = 12,
+    EMBER_ZCL_BLOCK_BLOCK13          = 13,
+    EMBER_ZCL_BLOCK_BLOCK14          = 14,
+    EMBER_ZCL_BLOCK_BLOCK15          = 15,
+    EMBER_ZCL_BLOCK_BLOCK16          = 16,
+} EmberAfBlock;
+
+// Enum for BlockPeriodDurationTypeControl
+typedef enum
+{
+    EMBER_ZCL_BLOCK_PERIOD_DURATION_TYPE_CONTROL_START_OF_TIMEBASE = 0,
+    EMBER_ZCL_BLOCK_PERIOD_DURATION_TYPE_CONTROL_END_OF_TIMEBASE   = 16,
+    EMBER_ZCL_BLOCK_PERIOD_DURATION_TYPE_CONTROL_NOT_SPECIFIED     = 32,
+} EmberAfBlockPeriodDurationTypeControl;
+
+// Enum for BlockPeriodDurationTypeTimebase
+typedef enum
+{
+    EMBER_ZCL_BLOCK_PERIOD_DURATION_TYPE_TIMEBASE_MINUTES = 0,
+    EMBER_ZCL_BLOCK_PERIOD_DURATION_TYPE_TIMEBASE_DAYS    = 1,
+    EMBER_ZCL_BLOCK_PERIOD_DURATION_TYPE_TIMEBASE_WEEKS   = 2,
+    EMBER_ZCL_BLOCK_PERIOD_DURATION_TYPE_TIMEBASE_MONTHS  = 3,
+} EmberAfBlockPeriodDurationTypeTimebase;
+
+// Enum for CO2Unit
+typedef enum
+{
+    EMBER_ZCL_CO2_UNIT_KILOGRAM_PER_KILOWATT_HOUR        = 1,
+    EMBER_ZCL_CO2_UNIT_KILOGRAM_PER_GALLON_OF_GASOLINE   = 2,
+    EMBER_ZCL_CO2_UNIT_KILOGRAM_PER_THERM_OF_NATURAL_GAS = 3,
+} EmberAfCO2Unit;
+
+// Enum for CalendarTimeReference
+typedef enum
+{
+    EMBER_ZCL_CALENDAR_TIME_REFERENCE_UTC_TIME      = 0,
+    EMBER_ZCL_CALENDAR_TIME_REFERENCE_STANDARD_TIME = 1,
+    EMBER_ZCL_CALENDAR_TIME_REFERENCE_LOCAL_TIME    = 2,
+} EmberAfCalendarTimeReference;
+
+// Enum for CalendarType
+typedef enum
+{
+    EMBER_ZCL_CALENDAR_TYPE_DELIVERED_CALENDAR              = 0,
+    EMBER_ZCL_CALENDAR_TYPE_RECEIVED_CALENDAR               = 1,
+    EMBER_ZCL_CALENDAR_TYPE_DELIVERED_AND_RECEIVED_CALENDAR = 2,
+    EMBER_ZCL_CALENDAR_TYPE_FRIENDLY_CREDIT_CALENDAR        = 3,
+    EMBER_ZCL_CALENDAR_TYPE_AUXILLIARY_LOAD_SWITCH_CALENDAR = 4,
+} EmberAfCalendarType;
+
+// Enum for CalorificValueUnit
+typedef enum
+{
+    EMBER_ZCL_CALORIFIC_VALUE_UNIT_MEGAJOULE_PER_CUBIC_METER = 1,
+    EMBER_ZCL_CALORIFIC_VALUE_UNIT_MEGAJOULE_PER_KILOGRAM    = 2,
+} EmberAfCalorificValueUnit;
+
+// Enum for CecedSpecificationVersion
+typedef enum
+{
+    EMBER_ZCL_CECED_SPECIFICATION_VERSION_COMPLIANT_WITH_V10_NOT_CERTIFIED = 16,
+    EMBER_ZCL_CECED_SPECIFICATION_VERSION_COMPLIANT_WITH_V10_CERTIFIED     = 26,
+} EmberAfCecedSpecificationVersion;
+
+// Enum for ColorControlOptions
+typedef enum
+{
+    EMBER_ZCL_COLOR_CONTROL_OPTIONS_EXECUTE_IF_OFF = 1,
+} EmberAfColorControlOptions;
+
+// Enum for ColorLoopAction
+typedef enum
+{
+    EMBER_ZCL_COLOR_LOOP_ACTION_DEACTIVATE                                  = 0,
+    EMBER_ZCL_COLOR_LOOP_ACTION_ACTIVATE_FROM_COLOR_LOOP_START_ENHANCED_HUE = 1,
+    EMBER_ZCL_COLOR_LOOP_ACTION_ACTIVATE_FROM_ENHANCED_CURRENT_HUE          = 2,
+} EmberAfColorLoopAction;
+
+// Enum for ColorLoopDirection
+typedef enum
+{
+    EMBER_ZCL_COLOR_LOOP_DIRECTION_DECREMENT_HUE = 0,
+    EMBER_ZCL_COLOR_LOOP_DIRECTION_INCREMENT_HUE = 1,
+} EmberAfColorLoopDirection;
+
+// Enum for ColorMode
+typedef enum
+{
+    EMBER_ZCL_COLOR_MODE_CURRENT_HUE_AND_CURRENT_SATURATION = 0,
+    EMBER_ZCL_COLOR_MODE_CURRENT_X_AND_CURRENT_Y            = 1,
+    EMBER_ZCL_COLOR_MODE_COLOR_TEMPERATURE                  = 2,
+} EmberAfColorMode;
+
+// Enum for CommandIdentification
+typedef enum
+{
+    EMBER_ZCL_COMMAND_IDENTIFICATION_START                  = 1,
+    EMBER_ZCL_COMMAND_IDENTIFICATION_STOP                   = 2,
+    EMBER_ZCL_COMMAND_IDENTIFICATION_PAUSE                  = 3,
+    EMBER_ZCL_COMMAND_IDENTIFICATION_START_SUPERFREEZING    = 4,
+    EMBER_ZCL_COMMAND_IDENTIFICATION_STOP_SUPERFREEZING     = 5,
+    EMBER_ZCL_COMMAND_IDENTIFICATION_START_SUPERCOOLING     = 6,
+    EMBER_ZCL_COMMAND_IDENTIFICATION_STOP_SUPERCOOLING      = 7,
+    EMBER_ZCL_COMMAND_IDENTIFICATION_DISABLE_GAS            = 8,
+    EMBER_ZCL_COMMAND_IDENTIFICATION_ENABLE_GAS             = 9,
+    EMBER_ZCL_COMMAND_IDENTIFICATION_ENABLE_ENERGY_CONTROL  = 10,
+    EMBER_ZCL_COMMAND_IDENTIFICATION_DISABLE_ENERGY_CONTROL = 11,
+} EmberAfCommandIdentification;
+
+// Enum for CommissioningStartupControl
+typedef enum
+{
+    EMBER_ZCL_COMMISSIONING_STARTUP_CONTROL_NO_ACTION          = 0,
+    EMBER_ZCL_COMMISSIONING_STARTUP_CONTROL_FORM_NETWORK       = 1,
+    EMBER_ZCL_COMMISSIONING_STARTUP_CONTROL_REJOIN_NETWORK     = 2,
+    EMBER_ZCL_COMMISSIONING_STARTUP_CONTROL_START_FROM_SCRATCH = 3,
+} EmberAfCommissioningStartupControl;
+
+// Enum for CommodityType
+typedef enum
+{
+    EMBER_ZCL_COMMODITY_TYPE_ELECTRIC_METERING                   = 0,
+    EMBER_ZCL_COMMODITY_TYPE_GAS_METERING                        = 1,
+    EMBER_ZCL_COMMODITY_TYPE_WATER_METERING                      = 2,
+    EMBER_ZCL_COMMODITY_TYPE_THERMAL_METERING                    = 3,
+    EMBER_ZCL_COMMODITY_TYPE_PRESSURE_METERING                   = 4,
+    EMBER_ZCL_COMMODITY_TYPE_HEAT_METERING                       = 5,
+    EMBER_ZCL_COMMODITY_TYPE_COOLING_METERING                    = 6,
+    EMBER_ZCL_COMMODITY_TYPE_ELECTRIC_VEHICLE_CHARGING_METERING  = 7,
+    EMBER_ZCL_COMMODITY_TYPE_PV_GENERATION_METERING              = 8,
+    EMBER_ZCL_COMMODITY_TYPE_WIND_TURBINE_GENERATION_METERING    = 9,
+    EMBER_ZCL_COMMODITY_TYPE_WATER_TURBINE_GENERATION_METERING   = 10,
+    EMBER_ZCL_COMMODITY_TYPE_MICRO_GENERATION_METERING           = 11,
+    EMBER_ZCL_COMMODITY_TYPE_SOLAR_HOT_WATER_GENERATION_METERING = 12,
+    EMBER_ZCL_COMMODITY_TYPE_ELECTRIC_METERING_ELEMENT1          = 13,
+    EMBER_ZCL_COMMODITY_TYPE_ELECTRIC_METERING_ELEMENT2          = 14,
+    EMBER_ZCL_COMMODITY_TYPE_ELECTRIC_METERING_ELEMENT3          = 15,
+} EmberAfCommodityType;
+
+// Enum for CppEventResponseCppAuth
+typedef enum
+{
+    EMBER_ZCL_CPP_EVENT_RESPONSE_CPP_AUTH_ACCEPTED = 1,
+    EMBER_ZCL_CPP_EVENT_RESPONSE_CPP_AUTH_REJECTED = 2,
+} EmberAfCppEventResponseCppAuth;
+
+// Enum for CppPriceTier
+typedef enum
+{
+    EMBER_ZCL_CPP_PRICE_TIER_CPP1 = 0,
+    EMBER_ZCL_CPP_PRICE_TIER_CPP2 = 1,
+} EmberAfCppPriceTier;
+
+// Enum for CreditAdjustmentType
+typedef enum
+{
+    EMBER_ZCL_CREDIT_ADJUSTMENT_TYPE_CREDIT_INCREMENTAL = 0,
+    EMBER_ZCL_CREDIT_ADJUSTMENT_TYPE_CREDIT_ABSOLUTE    = 1,
+} EmberAfCreditAdjustmentType;
+
+// Enum for CreditPaymentStatus
+typedef enum
+{
+    EMBER_ZCL_CREDIT_PAYMENT_STATUS_PENDING            = 0,
+    EMBER_ZCL_CREDIT_PAYMENT_STATUS_RECEIVED_PAID      = 1,
+    EMBER_ZCL_CREDIT_PAYMENT_STATUS_OVERDUE            = 2,
+    EMBER_ZCL_CREDIT_PAYMENT_STATUS_2_PAYMENTS_OVERDUE = 3,
+    EMBER_ZCL_CREDIT_PAYMENT_STATUS_3_PAYMENTS_OVERDUE = 4,
+} EmberAfCreditPaymentStatus;
+
+// Enum for DataQualityId
+typedef enum
+{
+    EMBER_ZCL_DATA_QUALITY_ID_ALL_DATA_CERTIFIED                       = 0,
+    EMBER_ZCL_DATA_QUALITY_ID_ONLY_INSTANTANEOUS_POWER_NOT_CERTIFIED   = 1,
+    EMBER_ZCL_DATA_QUALITY_ID_ONLY_CUMULATED_CONSUMPTION_NOT_CERTIFIED = 2,
+    EMBER_ZCL_DATA_QUALITY_ID_NOT_CERTIFIED_DATA                       = 3,
+} EmberAfDataQualityId;
+
+// Enum for DebtAmountType
+typedef enum
+{
+    EMBER_ZCL_DEBT_AMOUNT_TYPE_TYPE1_ABSOLUTE    = 0,
+    EMBER_ZCL_DEBT_AMOUNT_TYPE_TYPE1_INCREMENTAL = 1,
+    EMBER_ZCL_DEBT_AMOUNT_TYPE_TYPE2_ABSOLUTE    = 2,
+    EMBER_ZCL_DEBT_AMOUNT_TYPE_TYPE2_INCREMENTAL = 3,
+    EMBER_ZCL_DEBT_AMOUNT_TYPE_TYPE3_ABSOLUTE    = 4,
+    EMBER_ZCL_DEBT_AMOUNT_TYPE_TYPE3_INCREMENTAL = 5,
+} EmberAfDebtAmountType;
+
+// Enum for DebtRecoveryFrequency
+typedef enum
+{
+    EMBER_ZCL_DEBT_RECOVERY_FREQUENCY_PER_HOUR    = 0,
+    EMBER_ZCL_DEBT_RECOVERY_FREQUENCY_PER_DAY     = 1,
+    EMBER_ZCL_DEBT_RECOVERY_FREQUENCY_PER_WEEK    = 2,
+    EMBER_ZCL_DEBT_RECOVERY_FREQUENCY_PER_MONTH   = 3,
+    EMBER_ZCL_DEBT_RECOVERY_FREQUENCY_PER_QUARTER = 4,
+} EmberAfDebtRecoveryFrequency;
+
+// Enum for DebtRecoveryMethod
+typedef enum
+{
+    EMBER_ZCL_DEBT_RECOVERY_METHOD_TIME_BASED       = 0,
+    EMBER_ZCL_DEBT_RECOVERY_METHOD_PERCENTAGE_BASED = 1,
+    EMBER_ZCL_DEBT_RECOVERY_METHOD_CATCH_UP_BASED   = 2,
+} EmberAfDebtRecoveryMethod;
+
+// Enum for DehumidifcationLockout
+typedef enum
+{
+    EMBER_ZCL_DEHUMIDIFCATION_LOCKOUT_NOT_ALLOWED = 0,
+    EMBER_ZCL_DEHUMIDIFCATION_LOCKOUT_ALLOWED     = 1,
+} EmberAfDehumidifcationLockout;
+
+// Enum for DeviceInformationRecordSort
+typedef enum
+{
+    EMBER_ZCL_DEVICE_INFORMATION_RECORD_SORT_NOT_SORTED      = 0,
+    EMBER_ZCL_DEVICE_INFORMATION_RECORD_SORT_TOP_OF_THE_LIST = 1,
+} EmberAfDeviceInformationRecordSort;
+
+// Enum for DeviceStatus2Structure
+typedef enum
+{
+    EMBER_ZCL_DEVICE_STATUS2_STRUCTURE_IRIS_SYMPTOM_CODE = 32,
+} EmberAfDeviceStatus2Structure;
+
+// Enum for DoorLockEventSource
+typedef enum
+{
+    EMBER_ZCL_DOOR_LOCK_EVENT_SOURCE_KEYPAD        = 0,
+    EMBER_ZCL_DOOR_LOCK_EVENT_SOURCE_RF            = 1,
+    EMBER_ZCL_DOOR_LOCK_EVENT_SOURCE_MANUAL        = 2,
+    EMBER_ZCL_DOOR_LOCK_EVENT_SOURCE_RFID          = 3,
+    EMBER_ZCL_DOOR_LOCK_EVENT_SOURCE_INDETERMINATE = 255,
+} EmberAfDoorLockEventSource;
+
+// Enum for DoorLockEventType
+typedef enum
+{
+    EMBER_ZCL_DOOR_LOCK_EVENT_TYPE_OPERATION   = 0,
+    EMBER_ZCL_DOOR_LOCK_EVENT_TYPE_PROGRAMMING = 1,
+    EMBER_ZCL_DOOR_LOCK_EVENT_TYPE_ALARM       = 2,
+} EmberAfDoorLockEventType;
+
+// Enum for DoorLockOperatingMode
+typedef enum
+{
+    EMBER_ZCL_DOOR_LOCK_OPERATING_MODE_NORMAL_MODE            = 0,
+    EMBER_ZCL_DOOR_LOCK_OPERATING_MODE_VACATION_MODE          = 1,
+    EMBER_ZCL_DOOR_LOCK_OPERATING_MODE_PRIVACY_MODE           = 2,
+    EMBER_ZCL_DOOR_LOCK_OPERATING_MODE_NO_RF_LOCK_OR_UNLOCK   = 3,
+    EMBER_ZCL_DOOR_LOCK_OPERATING_MODE_LOCAL_PROGRAMMING_MODE = 4,
+    EMBER_ZCL_DOOR_LOCK_OPERATING_MODE_PASSAGE_MODE           = 5,
+} EmberAfDoorLockOperatingMode;
+
+// Enum for DoorLockOperationEventCode
+typedef enum
+{
+    EMBER_ZCL_DOOR_LOCK_OPERATION_EVENT_CODE_UNKNOWN_OR_MFG_SPECIFIC  = 0,
+    EMBER_ZCL_DOOR_LOCK_OPERATION_EVENT_CODE_LOCK                     = 1,
+    EMBER_ZCL_DOOR_LOCK_OPERATION_EVENT_CODE_UNLOCK                   = 2,
+    EMBER_ZCL_DOOR_LOCK_OPERATION_EVENT_CODE_LOCK_INVALID_PIN_OR_ID   = 3,
+    EMBER_ZCL_DOOR_LOCK_OPERATION_EVENT_CODE_LOCK_INVALID_SCHEDULE    = 4,
+    EMBER_ZCL_DOOR_LOCK_OPERATION_EVENT_CODE_UNLOCK_INVALID_PIN_OR_ID = 5,
+    EMBER_ZCL_DOOR_LOCK_OPERATION_EVENT_CODE_UNLOCK_INVALID_SCHEDULE  = 6,
+    EMBER_ZCL_DOOR_LOCK_OPERATION_EVENT_CODE_ONE_TOUCH_LOCK           = 7,
+    EMBER_ZCL_DOOR_LOCK_OPERATION_EVENT_CODE_KEY_LOCK                 = 8,
+    EMBER_ZCL_DOOR_LOCK_OPERATION_EVENT_CODE_KEY_UNLOCK               = 9,
+    EMBER_ZCL_DOOR_LOCK_OPERATION_EVENT_CODE_AUTO_LOCK                = 10,
+    EMBER_ZCL_DOOR_LOCK_OPERATION_EVENT_CODE_SCHEDULE_LOCK            = 11,
+    EMBER_ZCL_DOOR_LOCK_OPERATION_EVENT_CODE_SCHEDULE_UNLOCK          = 12,
+    EMBER_ZCL_DOOR_LOCK_OPERATION_EVENT_CODE_MANUAL_LOCK              = 13,
+    EMBER_ZCL_DOOR_LOCK_OPERATION_EVENT_CODE_MANUAL_UNLOCK            = 14,
+} EmberAfDoorLockOperationEventCode;
+
+// Enum for DoorLockProgrammingEventCode
+typedef enum
+{
+    EMBER_ZCL_DOOR_LOCK_PROGRAMMING_EVENT_CODE_UNKNOWN_OR_MFG_SPECIFIC = 0,
+    EMBER_ZCL_DOOR_LOCK_PROGRAMMING_EVENT_CODE_MASTER_CODE_CHANGED     = 1,
+    EMBER_ZCL_DOOR_LOCK_PROGRAMMING_EVENT_CODE_PIN_ADDED               = 2,
+    EMBER_ZCL_DOOR_LOCK_PROGRAMMING_EVENT_CODE_PIN_DELETED             = 3,
+    EMBER_ZCL_DOOR_LOCK_PROGRAMMING_EVENT_CODE_PIN_CHANGED             = 4,
+    EMBER_ZCL_DOOR_LOCK_PROGRAMMING_EVENT_CODE_ID_ADDED                = 5,
+    EMBER_ZCL_DOOR_LOCK_PROGRAMMING_EVENT_CODE_ID_DELETED              = 6,
+} EmberAfDoorLockProgrammingEventCode;
+
+// Enum for DoorLockSecurityLevel
+typedef enum
+{
+    EMBER_ZCL_DOOR_LOCK_SECURITY_LEVEL_NETWORK_SECURITY = 0,
+    EMBER_ZCL_DOOR_LOCK_SECURITY_LEVEL_APS_SECURITY     = 1,
+} EmberAfDoorLockSecurityLevel;
+
+// Enum for DoorLockSetPinOrIdStatus
+typedef enum
+{
+    EMBER_ZCL_DOOR_LOCK_SET_PIN_OR_ID_STATUS_SUCCESS              = 0,
+    EMBER_ZCL_DOOR_LOCK_SET_PIN_OR_ID_STATUS_GENERAL_FAILURE      = 1,
+    EMBER_ZCL_DOOR_LOCK_SET_PIN_OR_ID_STATUS_MEMORY_FULL          = 2,
+    EMBER_ZCL_DOOR_LOCK_SET_PIN_OR_ID_STATUS_DUPLICATE_CODE_ERROR = 3,
+} EmberAfDoorLockSetPinOrIdStatus;
+
+// Enum for DoorLockSoundVolume
+typedef enum
+{
+    EMBER_ZCL_DOOR_LOCK_SOUND_VOLUME_SILENT = 0,
+    EMBER_ZCL_DOOR_LOCK_SOUND_VOLUME_LOW    = 1,
+    EMBER_ZCL_DOOR_LOCK_SOUND_VOLUME_HIGH   = 2,
+} EmberAfDoorLockSoundVolume;
+
+// Enum for DoorLockState
+typedef enum
+{
+    EMBER_ZCL_DOOR_LOCK_STATE_NOT_FULLY_LOCKED = 0,
+    EMBER_ZCL_DOOR_LOCK_STATE_LOCKED           = 1,
+    EMBER_ZCL_DOOR_LOCK_STATE_UNLOCKED         = 2,
+} EmberAfDoorLockState;
+
+// Enum for DoorLockType
+typedef enum
+{
+    EMBER_ZCL_DOOR_LOCK_TYPE_DEAD_BOLT      = 0,
+    EMBER_ZCL_DOOR_LOCK_TYPE_MAGNETIC       = 1,
+    EMBER_ZCL_DOOR_LOCK_TYPE_MORTISE        = 2,
+    EMBER_ZCL_DOOR_LOCK_TYPE_RIM            = 3,
+    EMBER_ZCL_DOOR_LOCK_TYPE_LATCH_BOLT     = 4,
+    EMBER_ZCL_DOOR_LOCK_TYPE_CYLINDRICAL    = 5,
+    EMBER_ZCL_DOOR_LOCK_TYPE_TUBULAR        = 6,
+    EMBER_ZCL_DOOR_LOCK_TYPE_INTERCONNECTED = 7,
+    EMBER_ZCL_DOOR_LOCK_TYPE_DEAD_LATCH     = 8,
+    EMBER_ZCL_DOOR_LOCK_TYPE_OTHER          = 9,
+} EmberAfDoorLockType;
+
+// Enum for DoorLockUserStatus
+typedef enum
+{
+    EMBER_ZCL_DOOR_LOCK_USER_STATUS_AVAILABLE         = 0,
+    EMBER_ZCL_DOOR_LOCK_USER_STATUS_OCCUPIED_ENABLED  = 1,
+    EMBER_ZCL_DOOR_LOCK_USER_STATUS_OCCUPIED_DISABLED = 3,
+    EMBER_ZCL_DOOR_LOCK_USER_STATUS_NOT_SUPPORTED     = 255,
+} EmberAfDoorLockUserStatus;
+
+// Enum for DoorLockUserType
+typedef enum
+{
+    EMBER_ZCL_DOOR_LOCK_USER_TYPE_UNRESTRICTED           = 0,
+    EMBER_ZCL_DOOR_LOCK_USER_TYPE_YEAR_DAY_SCHEDULE_USER = 1,
+    EMBER_ZCL_DOOR_LOCK_USER_TYPE_WEEK_DAY_SCHEDULE_USER = 2,
+    EMBER_ZCL_DOOR_LOCK_USER_TYPE_MASTER_USER            = 3,
+    EMBER_ZCL_DOOR_LOCK_USER_TYPE_NON_ACCESS_USER        = 4,
+    EMBER_ZCL_DOOR_LOCK_USER_TYPE_NOT_SUPPORTED          = 255,
+} EmberAfDoorLockUserType;
+
+// Enum for DoorState
+typedef enum
+{
+    EMBER_ZCL_DOOR_STATE_OPEN              = 0,
+    EMBER_ZCL_DOOR_STATE_CLOSED            = 1,
+    EMBER_ZCL_DOOR_STATE_ERROR_JAMMED      = 2,
+    EMBER_ZCL_DOOR_STATE_ERROR_FORCED_OPEN = 3,
+    EMBER_ZCL_DOOR_STATE_ERROR_UNSPECIFIED = 4,
+} EmberAfDoorState;
+
+// Enum for ElectricityAlarmGroups
+typedef enum
+{
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_LOW_VOLTAGE_L1         = 16,
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_HIGH_VOLTAGE_L1        = 17,
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_LOW_VOLTAGE_L2         = 18,
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_HIGH_VOLTAGE_L2        = 19,
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_LOW_VOLTAGE_L3         = 20,
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_HIGH_VOLTAGE_L3        = 21,
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_OVER_CURRENT_L1        = 22,
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_OVER_CURRENT_L2        = 23,
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_OVER_CURRENT_L3        = 24,
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_FREQUENCY_TOO_LOW_L1   = 25,
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_FREQUENCY_TOO_HIGH_L1  = 26,
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_FREQUENCY_TOO_LOW_L2   = 27,
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_FREQUENCY_TOO_HIGH_L2  = 28,
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_FREQUENCY_TOO_LOW_L3   = 29,
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_FREQUENCY_TOO_HIGH_L3  = 30,
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_GROUND_FAULT           = 31,
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_ELECTRIC_TAMPER_DETECT = 32,
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_INCORRECT_POLARITY     = 33,
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_CURRENT_NO_VOLTAGE     = 34,
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_UNDER_VOLTAGE          = 35,
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_OVER_VOLTAGE           = 36,
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_NORMAL_VOLTAGE         = 37,
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_PF_BELOW_THRESHOLD     = 38,
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_PF_ABOVE_THRESHOLD     = 39,
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_TERMINAL_COVER_REMOVED = 40,
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_TERMINAL_COVER_CLOSED  = 41,
+} EmberAfElectricityAlarmGroups;
+
+// Enum for EnhancedColorMode
+typedef enum
+{
+    EMBER_ZCL_ENHANCED_COLOR_MODE_CURRENT_HUE_AND_CURRENT_SATURATION          = 0,
+    EMBER_ZCL_ENHANCED_COLOR_MODE_CURRENT_X_AND_CURRENT_Y                     = 1,
+    EMBER_ZCL_ENHANCED_COLOR_MODE_COLOR_TEMPERATURE                           = 2,
+    EMBER_ZCL_ENHANCED_COLOR_MODE_ENHANCED_CURRENT_HUE_AND_CURRENT_SATURATION = 3,
+} EmberAfEnhancedColorMode;
+
+// Enum for EventConfigurationControl
+typedef enum
+{
+    EMBER_ZCL_EVENT_CONFIGURATION_CONTROL_APPLY_BY_LIST                = 0,
+    EMBER_ZCL_EVENT_CONFIGURATION_CONTROL_APPLY_BY_EVENT_GROUP         = 1,
+    EMBER_ZCL_EVENT_CONFIGURATION_CONTROL_APPLY_BY_LOG_TYPE            = 2,
+    EMBER_ZCL_EVENT_CONFIGURATION_CONTROL_APPLY_BY_CONFIGURATION_MATCH = 3,
+} EmberAfEventConfigurationControl;
+
+// Enum for EventConfigurationLogAction
+typedef enum
+{
+    EMBER_ZCL_EVENT_CONFIGURATION_LOG_ACTION_DO_NOT_LOG            = 0,
+    EMBER_ZCL_EVENT_CONFIGURATION_LOG_ACTION_LOG_AS_TAMPER         = 1,
+    EMBER_ZCL_EVENT_CONFIGURATION_LOG_ACTION_LOG_AS_FAULT          = 2,
+    EMBER_ZCL_EVENT_CONFIGURATION_LOG_ACTION_LOG_AS_GENERAL_EVENT  = 3,
+    EMBER_ZCL_EVENT_CONFIGURATION_LOG_ACTION_LOG_AS_SECURITY_EVENT = 4,
+    EMBER_ZCL_EVENT_CONFIGURATION_LOG_ACTION_LOG_AS_NETWORK_EVENT  = 5,
+} EmberAfEventConfigurationLogAction;
+
+// Enum for EventControl
+typedef enum
+{
+    EMBER_ZCL_EVENT_CONTROL_RETRIEVE_MINIMAL_INFORMATION = 0,
+    EMBER_ZCL_EVENT_CONTROL_RETRIEVE_FULL_INFORMATION    = 16,
+} EmberAfEventControl;
+
+// Enum for EventId
+typedef enum
+{
+    EMBER_ZCL_EVENT_ID_METER_COVER_REMOVED                   = 0,
+    EMBER_ZCL_EVENT_ID_METER_COVER_CLOSED                    = 1,
+    EMBER_ZCL_EVENT_ID_STRONG_MAGNETIC_FIELD                 = 2,
+    EMBER_ZCL_EVENT_ID_NO_STRONG_MAGNETIC_FIELD              = 3,
+    EMBER_ZCL_EVENT_ID_BATTERY_FAILURE                       = 4,
+    EMBER_ZCL_EVENT_ID_LOW_BATTERY                           = 5,
+    EMBER_ZCL_EVENT_ID_PROGRAM_MEMORY_ERROR                  = 6,
+    EMBER_ZCL_EVENT_ID_RAM_ERROR                             = 7,
+    EMBER_ZCL_EVENT_ID_NV_MEMORY_ERROR                       = 8,
+    EMBER_ZCL_EVENT_ID_MEASUREMENT_SYSTEM_ERROR              = 9,
+    EMBER_ZCL_EVENT_ID_WATCHDOG_ERROR                        = 10,
+    EMBER_ZCL_EVENT_ID_SUPPLY_DISCONNECT_FAILURE             = 11,
+    EMBER_ZCL_EVENT_ID_SUPPLY_CONNECT_FAILURE                = 12,
+    EMBER_ZCL_EVENT_ID_MEASURMENT_SOFTWARE_CHANGED           = 13,
+    EMBER_ZCL_EVENT_ID_DST_ENABLED                           = 14,
+    EMBER_ZCL_EVENT_ID_DST_DISABLED                          = 15,
+    EMBER_ZCL_EVENT_ID_CLOCK_ADJ_BACKWARD                    = 16,
+    EMBER_ZCL_EVENT_ID_CLOCK_ADJ_FORWARD                     = 17,
+    EMBER_ZCL_EVENT_ID_CLOCK_INVALID                         = 18,
+    EMBER_ZCL_EVENT_ID_COMMS_ERROR_HAN                       = 19,
+    EMBER_ZCL_EVENT_ID_COMMS_OK_HAN                          = 20,
+    EMBER_ZCL_EVENT_ID_FRAUD_ATTEMPT                         = 21,
+    EMBER_ZCL_EVENT_ID_POWER_LOSS                            = 22,
+    EMBER_ZCL_EVENT_ID_INCORRECT_PROTOCOL                    = 23,
+    EMBER_ZCL_EVENT_ID_UNUSUAL_HAN_TRAFFIC                   = 24,
+    EMBER_ZCL_EVENT_ID_UNEXPECTED_CLOCK_CHANGE               = 25,
+    EMBER_ZCL_EVENT_ID_COMMS_USING_UNAUTHENTICATED_COMPONENT = 26,
+    EMBER_ZCL_EVENT_ID_ERROR_REG_CLEAR                       = 27,
+    EMBER_ZCL_EVENT_ID_ALARM_REG_CLEAR                       = 28,
+    EMBER_ZCL_EVENT_ID_UNEXPECTED_HW_RESET                   = 29,
+    EMBER_ZCL_EVENT_ID_UNEXPECTED_PROGRAM_EXECUTION          = 30,
+    EMBER_ZCL_EVENT_ID_EVENT_LOG_CLEARED                     = 31,
+    EMBER_ZCL_EVENT_ID_MANUAL_DISCONNECT                     = 32,
+    EMBER_ZCL_EVENT_ID_MANUAL_CONNECT                        = 33,
+    EMBER_ZCL_EVENT_ID_REMOTE_DISCONNECTION                  = 34,
+    EMBER_ZCL_EVENT_ID_LOCAL_DISCONNECTION                   = 35,
+    EMBER_ZCL_EVENT_ID_LIMIT_THRESHOLD_EXCEEDED              = 36,
+    EMBER_ZCL_EVENT_ID_LIMIT_THRESHOLD_OK                    = 37,
+    EMBER_ZCL_EVENT_ID_LIMIT_THRESHOLD_CHANGED               = 38,
+    EMBER_ZCL_EVENT_ID_MAXIMUM_DEMAND_EXCEEDED               = 39,
+    EMBER_ZCL_EVENT_ID_PROFILE_CLEARED                       = 40,
+    EMBER_ZCL_EVENT_ID_FIRMWARE_READY_FOR_ACTIVATION         = 41,
+    EMBER_ZCL_EVENT_ID_FIRMWARE_ACTIVATED                    = 42,
+    EMBER_ZCL_EVENT_ID_PATCH_FAILURE                         = 43,
+    EMBER_ZCL_EVENT_ID_TOU_TARIFF_ACTIVATION                 = 44,
+    EMBER_ZCL_EVENT_ID_8X8_TARIFFACTIVATED                   = 45,
+    EMBER_ZCL_EVENT_ID_SINGLE_TARIFF_RATE_ACTIVATED          = 46,
+    EMBER_ZCL_EVENT_ID_ASYNCHRONOUS_BILLING_OCCURRED         = 47,
+    EMBER_ZCL_EVENT_ID_SYNCHRONOUS_BILLING_OCCURRED          = 48,
+    EMBER_ZCL_EVENT_ID_INCORRECT_POLARITY                    = 128,
+    EMBER_ZCL_EVENT_ID_CURRENT_NO_VOLTAGE                    = 129,
+    EMBER_ZCL_EVENT_ID_UNDER_VOLTAGE                         = 130,
+    EMBER_ZCL_EVENT_ID_OVER_VOLTAGE                          = 131,
+    EMBER_ZCL_EVENT_ID_NORMAL_VOLTAGE                        = 132,
+    EMBER_ZCL_EVENT_ID_PF_BELOW_THRESHOLD                    = 133,
+    EMBER_ZCL_EVENT_ID_PF_ABOVE_THRESHOLD                    = 134,
+    EMBER_ZCL_EVENT_ID_TERMINAL_COVER_REMOVED                = 135,
+    EMBER_ZCL_EVENT_ID_TERMINAL_COVER_CLOSED                 = 136,
+    EMBER_ZCL_EVENT_ID_REVERSE_FLOW                          = 160,
+    EMBER_ZCL_EVENT_ID_TILT_TAMPER                           = 161,
+    EMBER_ZCL_EVENT_ID_BATTERY_COVER_REMOVED                 = 162,
+    EMBER_ZCL_EVENT_ID_BATTERY_COVER_CLOSED                  = 163,
+    EMBER_ZCL_EVENT_ID_EXCESS_FLOW                           = 164,
+    EMBER_ZCL_EVENT_ID_CREDIT_OK                             = 192,
+    EMBER_ZCL_EVENT_ID_LOW_CREDIT                            = 193,
+    EMBER_ZCL_EVENT_ID_EMERGENCY_CREDIT_IN_USE               = 192,
+    EMBER_ZCL_EVENT_ID_EMERGENCY_CREDIT_EXHAUSTED            = 193,
+    EMBER_ZCL_EVENT_ID_ZERO_CREDIT_EC_NOT_SELECTED           = 194,
+    EMBER_ZCL_EVENT_ID_SUPPLY_ON                             = 195,
+    EMBER_ZCL_EVENT_ID_SUPPLY_OFF_AARMED                     = 196,
+    EMBER_ZCL_EVENT_ID_SUPPLY_OFF                            = 197,
+    EMBER_ZCL_EVENT_ID_DISCOUNT_APPLIED                      = 198,
+    EMBER_ZCL_EVENT_ID_MANUFACTURER_SPECIFIC_A               = 224,
+    EMBER_ZCL_EVENT_ID_MANUFACTURER_SPECIFIC_B               = 225,
+    EMBER_ZCL_EVENT_ID_MANUFACTURER_SPECIFIC_C               = 226,
+    EMBER_ZCL_EVENT_ID_MANUFACTURER_SPECIFIC_D               = 227,
+    EMBER_ZCL_EVENT_ID_MANUFACTURER_SPECIFIC_E               = 228,
+    EMBER_ZCL_EVENT_ID_MANUFACTURER_SPECIFIC_F               = 229,
+    EMBER_ZCL_EVENT_ID_MANUFACTURER_SPECIFIC_G               = 230,
+    EMBER_ZCL_EVENT_ID_MANUFACTURER_SPECIFIC_H               = 231,
+    EMBER_ZCL_EVENT_ID_MANUFACTURER_SPECIFIC_I               = 232,
+} EmberAfEventId;
+
+// Enum for EventIdentification
+typedef enum
+{
+    EMBER_ZCL_EVENT_IDENTIFICATION_END_OF_CYCLE        = 1,
+    EMBER_ZCL_EVENT_IDENTIFICATION_TEMPERATURE_REACHED = 4,
+    EMBER_ZCL_EVENT_IDENTIFICATION_END_OF_COOKING      = 5,
+    EMBER_ZCL_EVENT_IDENTIFICATION_SWITCHING_OFF       = 6,
+    EMBER_ZCL_EVENT_IDENTIFICATION_WRONG_DATA          = 7,
+} EmberAfEventIdentification;
+
+// Enum for EventLogId
+typedef enum
+{
+    EMBER_ZCL_EVENT_LOG_ID_ALL_LOGS                = 0,
+    EMBER_ZCL_EVENT_LOG_ID_TAMPER_LOG              = 1,
+    EMBER_ZCL_EVENT_LOG_ID_FAULT_LOG               = 2,
+    EMBER_ZCL_EVENT_LOG_ID_GENERAL_EVENT_LOG       = 3,
+    EMBER_ZCL_EVENT_LOG_ID_SECURITY_EVENT_LOG      = 4,
+    EMBER_ZCL_EVENT_LOG_ID_NETWORK_EVENT_LOG       = 5,
+    EMBER_ZCL_EVENT_LOG_ID_GBCS_GENERAL_EVENT_LOG  = 6,
+    EMBER_ZCL_EVENT_LOG_ID_GBCS_SECURITY_EVENT_LOG = 7,
+} EmberAfEventLogId;
+
+// Enum for EventLogPayloadControl
+typedef enum
+{
+    EMBER_ZCL_EVENT_LOG_PAYLOAD_CONTROL_EVENTS_DO_NOT_CROSS_FRAME_BOUNDARY = 0,
+    EMBER_ZCL_EVENT_LOG_PAYLOAD_CONTROL_EVENT_CROSSES_FRAME_BOUNDARY       = 1,
+} EmberAfEventLogPayloadControl;
+
+// Enum for ExtendedGenericAlarmGroups
+typedef enum
+{
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_MEASUREMENT_SYSTEM_ERROR                     = 112,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_WATCHDOG_ERROR                               = 113,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_SUPPLY_DISCONNECT_FAILURE                    = 114,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_SUPPLY_CONNECT_FAILURE                       = 115,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_MEASURMENT_SOFTWARE_CHANGED                  = 116,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_DST_ENABLED                                  = 117,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_DST_DISABLED                                 = 118,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_CLOCK_ADJ_BACKWARD                           = 119,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_CLOCK_ADJ_FORWARD                            = 120,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_CLOCK_INVALID                                = 121,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_COMMUNICATION_ERROR_HAN                      = 122,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_COMMUNICATION_OK_H_AN                        = 123,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_METER_FRAUD_ATTEMPT                          = 124,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_POWER_LOSS                                   = 125,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_UNUSUAL_HAN_TRAFFIC                          = 126,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_UNEXPECTED_CLOCK_CHANGE                      = 127,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_COMMS_USING_UNAUTHENTICATED_COMPONENT        = 128,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_ERROR_REG_CLEAR                              = 129,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_ALARM_REG_CLEAR                              = 130,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_UNEXPECTED_HW_RESET                          = 131,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_UNEXPECTED_PROGRAM_EXECUTION                 = 132,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_EVENT_LOG_CLEARED                            = 133,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_LIMIT_THRESHOLD_EXCEEDED                     = 134,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_LIMIT_THRESHOLD_OK                           = 135,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_LIMIT_THRESHOLD_CHANGED                      = 136,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_MAXIMUM_DEMAND_EXCEEDED                      = 137,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_PROFILE_CLEARED                              = 138,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_SAMPLING_BUFFERCLEARED                       = 139,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_BATTERY_WARNING                              = 140,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_WRONG_SIGNATURE                              = 141,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_NO_SIGNATURE                                 = 142,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_UNAUTHORISED_ACTIONFROM_HAN                  = 143,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_FAST_POLLING_START                           = 144,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_FAST_POLLING_END                             = 145,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_METER_REPORTING_INTERVAL_CHANGED             = 146,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_DISCONNECT_DUETO_LOAD_LIMIT                  = 147,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_METER_SUPPLY_STATUS_REGISTER_CHANGED         = 148,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_METER_ALARM_STATUS_REGISTER_CHANGED          = 149,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_EXTENDED_METER_ALARM_STATUS_REGISTER_CHANGED = 150,
+} EmberAfExtendedGenericAlarmGroups;
+
+// Enum for ExtendedNumberOfPriceTiers
+typedef enum
+{
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_REFER_TO_NUMBER_OF_PRICE_TIERS_FIELD = 0,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS16              = 1,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS17              = 2,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS18              = 3,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS19              = 4,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS20              = 5,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS21              = 6,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS22              = 7,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS23              = 8,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS24              = 9,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS25              = 10,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS26              = 11,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS27              = 12,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS28              = 13,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS29              = 14,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS30              = 15,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS31              = 16,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS32              = 17,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS33              = 18,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS34              = 19,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS35              = 20,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS36              = 21,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS37              = 22,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS38              = 23,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS39              = 24,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS40              = 25,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS41              = 26,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS42              = 27,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS43              = 28,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS44              = 29,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS45              = 30,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS46              = 31,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS47              = 32,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS48              = 33,
+} EmberAfExtendedNumberOfPriceTiers;
+
+// Enum for ExtendedPriceTier
+typedef enum
+{
+    EMBER_ZCL_EXTENDED_PRICE_TIER_REFER_TO_PRICE_TIER_FIELD = 0,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER16_PRICE_LABEL        = 1,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER17_PRICE_LABEL        = 2,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER18_PRICE_LABEL        = 3,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER19_PRICE_LABEL        = 4,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER20_PRICE_LABEL        = 5,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER21_PRICE_LABEL        = 6,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER22_PRICE_LABEL        = 7,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER23_PRICE_LABEL        = 8,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER24_PRICE_LABEL        = 9,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER25_PRICE_LABEL        = 10,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER26_PRICE_LABEL        = 11,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER27_PRICE_LABEL        = 12,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER28_PRICE_LABEL        = 13,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER29_PRICE_LABEL        = 14,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER30_PRICE_LABEL        = 15,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER31_PRICE_LABEL        = 16,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER32_PRICE_LABEL        = 17,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER33_PRICE_LABEL        = 18,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER34_PRICE_LABEL        = 19,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER35_PRICE_LABEL        = 20,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER36_PRICE_LABEL        = 21,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER37_PRICE_LABEL        = 22,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER38_PRICE_LABEL        = 23,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER39_PRICE_LABEL        = 24,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER40_PRICE_LABEL        = 25,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER41_PRICE_LABEL        = 26,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER42_PRICE_LABEL        = 27,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER43_PRICE_LABEL        = 28,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER44_PRICE_LABEL        = 29,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER45_PRICE_LABEL        = 30,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER46_PRICE_LABEL        = 31,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER47_PRICE_LABEL        = 32,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER48_PRICE_LABEL        = 33,
+} EmberAfExtendedPriceTier;
+
+// Enum for ExtendedRegisterTier
+typedef enum
+{
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_REFER_TO_REGISTER_TIER_FIELD                 = 0,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER16_SUMMATION_DELIVERED_ATTRIBUTE = 1,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER17_SUMMATION_DELIVERED_ATTRIBUTE = 2,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER18_SUMMATION_DELIVERED_ATTRIBUTE = 3,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER19_SUMMATION_DELIVERED_ATTRIBUTE = 4,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER20_SUMMATION_DELIVERED_ATTRIBUTE = 5,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER21_SUMMATION_DELIVERED_ATTRIBUTE = 6,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER22_SUMMATION_DELIVERED_ATTRIBUTE = 7,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER23_SUMMATION_DELIVERED_ATTRIBUTE = 8,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER24_SUMMATION_DELIVERED_ATTRIBUTE = 9,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER25_SUMMATION_DELIVERED_ATTRIBUTE = 10,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER26_SUMMATION_DELIVERED_ATTRIBUTE = 11,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER27_SUMMATION_DELIVERED_ATTRIBUTE = 12,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER28_SUMMATION_DELIVERED_ATTRIBUTE = 13,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER29_SUMMATION_DELIVERED_ATTRIBUTE = 14,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER30_SUMMATION_DELIVERED_ATTRIBUTE = 15,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER31_SUMMATION_DELIVERED_ATTRIBUTE = 16,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER32_SUMMATION_DELIVERED_ATTRIBUTE = 17,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER33_SUMMATION_DELIVERED_ATTRIBUTE = 18,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER34_SUMMATION_DELIVERED_ATTRIBUTE = 19,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER35_SUMMATION_DELIVERED_ATTRIBUTE = 20,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER36_SUMMATION_DELIVERED_ATTRIBUTE = 21,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER37_SUMMATION_DELIVERED_ATTRIBUTE = 22,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER38_SUMMATION_DELIVERED_ATTRIBUTE = 23,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER39_SUMMATION_DELIVERED_ATTRIBUTE = 24,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER40_SUMMATION_DELIVERED_ATTRIBUTE = 25,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER41_SUMMATION_DELIVERED_ATTRIBUTE = 26,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER42_SUMMATION_DELIVERED_ATTRIBUTE = 27,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER43_SUMMATION_DELIVERED_ATTRIBUTE = 28,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER44_SUMMATION_DELIVERED_ATTRIBUTE = 29,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER45_SUMMATION_DELIVERED_ATTRIBUTE = 30,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER46_SUMMATION_DELIVERED_ATTRIBUTE = 31,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER47_SUMMATION_DELIVERED_ATTRIBUTE = 32,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER48_SUMMATION_DELIVERED_ATTRIBUTE = 33,
+} EmberAfExtendedRegisterTier;
+
+// Enum for EzModeCommissioningClusterType
+typedef enum
+{
+    EMBER_ZCL_EZ_MODE_COMMISSIONING_CLUSTER_TYPE_SERVER = 0,
+    EMBER_ZCL_EZ_MODE_COMMISSIONING_CLUSTER_TYPE_CLIENT = 1,
+} EmberAfEzModeCommissioningClusterType;
+
+// Enum for FanMode
+typedef enum
+{
+    EMBER_ZCL_FAN_MODE_OFF    = 0,
+    EMBER_ZCL_FAN_MODE_LOW    = 1,
+    EMBER_ZCL_FAN_MODE_MEDIUM = 2,
+    EMBER_ZCL_FAN_MODE_HIGH   = 3,
+    EMBER_ZCL_FAN_MODE_ON     = 4,
+    EMBER_ZCL_FAN_MODE_AUTO   = 5,
+    EMBER_ZCL_FAN_MODE_SMART  = 6,
+} EmberAfFanMode;
+
+// Enum for FanModeSequence
+typedef enum
+{
+    EMBER_ZCL_FAN_MODE_SEQUENCE_LOW_MED_HIGH      = 0,
+    EMBER_ZCL_FAN_MODE_SEQUENCE_LOW_HIGH          = 1,
+    EMBER_ZCL_FAN_MODE_SEQUENCE_LOW_MED_HIGH_AUTO = 2,
+    EMBER_ZCL_FAN_MODE_SEQUENCE_LOW_HIGH_AUTO     = 3,
+    EMBER_ZCL_FAN_MODE_SEQUENCE_ON_AUTO           = 4,
+} EmberAfFanModeSequence;
+
+// Enum for GasSpecificAlarmGroups
+typedef enum
+{
+    EMBER_ZCL_GAS_SPECIFIC_ALARM_GROUPS_TILT_TAMPER           = 96,
+    EMBER_ZCL_GAS_SPECIFIC_ALARM_GROUPS_BATTERY_COVER_REMOVED = 97,
+    EMBER_ZCL_GAS_SPECIFIC_ALARM_GROUPS_BATTERY_COVER_CLOSED  = 98,
+    EMBER_ZCL_GAS_SPECIFIC_ALARM_GROUPS_EXCESS_FLOW           = 99,
+    EMBER_ZCL_GAS_SPECIFIC_ALARM_GROUPS_TILT_TAMPER_ENDED     = 100,
+} EmberAfGasSpecificAlarmGroups;
+
+// Enum for GenerationTier
+typedef enum
+{
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER1_SUMMATION_RECEIVED_ATTRIBUTE  = 1,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER2_SUMMATION_RECEIVED_ATTRIBUTE  = 2,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER3_SUMMATION_RECEIVED_ATTRIBUTE  = 3,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER4_SUMMATION_RECEIVED_ATTRIBUTE  = 4,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER5_SUMMATION_RECEIVED_ATTRIBUTE  = 5,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER6_SUMMATION_RECEIVED_ATTRIBUTE  = 6,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER7_SUMMATION_RECEIVED_ATTRIBUTE  = 7,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER8_SUMMATION_RECEIVED_ATTRIBUTE  = 8,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER9_SUMMATION_RECEIVED_ATTRIBUTE  = 9,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER10_SUMMATION_RECEIVED_ATTRIBUTE = 10,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER11_SUMMATION_RECEIVED_ATTRIBUTE = 11,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER12_SUMMATION_RECEIVED_ATTRIBUTE = 12,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER13_SUMMATION_RECEIVED_ATTRIBUTE = 13,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER14_SUMMATION_RECEIVED_ATTRIBUTE = 14,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER15_SUMMATION_RECEIVED_ATTRIBUTE = 15,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER16_SUMMATION_RECEIVED_ATTRIBUTE = 16,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER17_SUMMATION_RECEIVED_ATTRIBUTE = 17,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER18_SUMMATION_RECEIVED_ATTRIBUTE = 18,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER19_SUMMATION_RECEIVED_ATTRIBUTE = 19,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER20_SUMMATION_RECEIVED_ATTRIBUTE = 20,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER21_SUMMATION_RECEIVED_ATTRIBUTE = 21,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER22_SUMMATION_RECEIVED_ATTRIBUTE = 22,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER23_SUMMATION_RECEIVED_ATTRIBUTE = 23,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER24_SUMMATION_RECEIVED_ATTRIBUTE = 24,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER25_SUMMATION_RECEIVED_ATTRIBUTE = 25,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER26_SUMMATION_RECEIVED_ATTRIBUTE = 26,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER27_SUMMATION_RECEIVED_ATTRIBUTE = 27,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER28_SUMMATION_RECEIVED_ATTRIBUTE = 28,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER29_SUMMATION_RECEIVED_ATTRIBUTE = 29,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER30_SUMMATION_RECEIVED_ATTRIBUTE = 30,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER31_SUMMATION_RECEIVED_ATTRIBUTE = 31,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER32_SUMMATION_RECEIVED_ATTRIBUTE = 32,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER33_SUMMATION_RECEIVED_ATTRIBUTE = 33,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER34_SUMMATION_RECEIVED_ATTRIBUTE = 34,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER35_SUMMATION_RECEIVED_ATTRIBUTE = 35,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER36_SUMMATION_RECEIVED_ATTRIBUTE = 36,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER37_SUMMATION_RECEIVED_ATTRIBUTE = 37,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER38_SUMMATION_RECEIVED_ATTRIBUTE = 38,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER39_SUMMATION_RECEIVED_ATTRIBUTE = 39,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER40_SUMMATION_RECEIVED_ATTRIBUTE = 40,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER41_SUMMATION_RECEIVED_ATTRIBUTE = 41,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER42_SUMMATION_RECEIVED_ATTRIBUTE = 42,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER43_SUMMATION_RECEIVED_ATTRIBUTE = 43,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER44_SUMMATION_RECEIVED_ATTRIBUTE = 44,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER45_SUMMATION_RECEIVED_ATTRIBUTE = 45,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER46_SUMMATION_RECEIVED_ATTRIBUTE = 46,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER47_SUMMATION_RECEIVED_ATTRIBUTE = 47,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER48_SUMMATION_RECEIVED_ATTRIBUTE = 48,
+} EmberAfGenerationTier;
+
+// Enum for GenericAlarmGroups
+typedef enum
+{
+    EMBER_ZCL_GENERIC_ALARM_GROUPS_CHECK_METER              = 0,
+    EMBER_ZCL_GENERIC_ALARM_GROUPS_LOW_BATTERY              = 1,
+    EMBER_ZCL_GENERIC_ALARM_GROUPS_TAMPER_DETECT            = 2,
+    EMBER_ZCL_GENERIC_ALARM_GROUPS_LEAK_DETECT              = 5,
+    EMBER_ZCL_GENERIC_ALARM_GROUPS_SERVICE_DISCONNECT       = 6,
+    EMBER_ZCL_GENERIC_ALARM_GROUPS_METER_COVER_REMOVED      = 8,
+    EMBER_ZCL_GENERIC_ALARM_GROUPS_METER_COVER_CLOSED       = 9,
+    EMBER_ZCL_GENERIC_ALARM_GROUPS_STRONG_MAGNETIC_FIELD    = 10,
+    EMBER_ZCL_GENERIC_ALARM_GROUPS_NO_STRONG_MAGNETIC_FIELD = 11,
+    EMBER_ZCL_GENERIC_ALARM_GROUPS_BATTERY_FAILURE          = 12,
+    EMBER_ZCL_GENERIC_ALARM_GROUPS_PROGRAM_MEMORY_ERROR     = 13,
+    EMBER_ZCL_GENERIC_ALARM_GROUPS_RAM_ERROR                = 14,
+    EMBER_ZCL_GENERIC_ALARM_GROUPS_NV_MEMORY_ERROR          = 15,
+} EmberAfGenericAlarmGroups;
+
+// Enum for GenericAlarmGroupsElectricity
+typedef enum
+{
+    EMBER_ZCL_GENERIC_ALARM_GROUPS_ELECTRICITY_POWER_FAILURE = 3,
+    EMBER_ZCL_GENERIC_ALARM_GROUPS_ELECTRICITY_POWER_QUALITY = 4,
+} EmberAfGenericAlarmGroupsElectricity;
+
+// Enum for GenericAlarmGroupsGas
+typedef enum
+{
+    EMBER_ZCL_GENERIC_ALARM_GROUPS_GAS_LOW_PRESSURE = 4,
+    EMBER_ZCL_GENERIC_ALARM_GROUPS_GAS_REVERSE_FLOW = 7,
+} EmberAfGenericAlarmGroupsGas;
+
+// Enum for GenericAlarmGroupsHeatCooling
+typedef enum
+{
+    EMBER_ZCL_GENERIC_ALARM_GROUPS_HEAT_COOLING_TEMPERATURE_SENSOR = 3,
+    EMBER_ZCL_GENERIC_ALARM_GROUPS_HEAT_COOLING_BURST_DETECT       = 4,
+    EMBER_ZCL_GENERIC_ALARM_GROUPS_HEAT_COOLING_FLOW_SENSOR        = 7,
+} EmberAfGenericAlarmGroupsHeatCooling;
+
+// Enum for GenericAlarmGroupsWater
+typedef enum
+{
+    EMBER_ZCL_GENERIC_ALARM_GROUPS_WATER_WATER_PIPE_EMPTY   = 3,
+    EMBER_ZCL_GENERIC_ALARM_GROUPS_WATER_WATER_LOW_PRESSURE = 4,
+    EMBER_ZCL_GENERIC_ALARM_GROUPS_WATER_WATER_REVERSE_FLOW = 7,
+} EmberAfGenericAlarmGroupsWater;
+
+// Enum for GenericDeviceClass
+typedef enum
+{
+    EMBER_ZCL_GENERIC_DEVICE_CLASS_LIGHTING = 0,
+} EmberAfGenericDeviceClass;
+
+// Enum for GenericDeviceType
+typedef enum
+{
+    EMBER_ZCL_GENERIC_DEVICE_TYPE_INCANDESCENT               = 0,
+    EMBER_ZCL_GENERIC_DEVICE_TYPE_SPOTLIGHT_HALOGEN          = 1,
+    EMBER_ZCL_GENERIC_DEVICE_TYPE_HALOGEN_BULB               = 2,
+    EMBER_ZCL_GENERIC_DEVICE_TYPE_CFL                        = 3,
+    EMBER_ZCL_GENERIC_DEVICE_TYPE_LINEAR_FLOURESCENT         = 4,
+    EMBER_ZCL_GENERIC_DEVICE_TYPE_LED_BULB                   = 5,
+    EMBER_ZCL_GENERIC_DEVICE_TYPE_SPOTLIGHT_LED              = 6,
+    EMBER_ZCL_GENERIC_DEVICE_TYPE_LED_STRIP                  = 7,
+    EMBER_ZCL_GENERIC_DEVICE_TYPE_LED_TUBE                   = 8,
+    EMBER_ZCL_GENERIC_DEVICE_TYPE_GENERIC_INDOOR_FIXTURE     = 9,
+    EMBER_ZCL_GENERIC_DEVICE_TYPE_GENERIC_OUTDOOR_FIXTURE    = 10,
+    EMBER_ZCL_GENERIC_DEVICE_TYPE_PENDANT_FIXTURE            = 11,
+    EMBER_ZCL_GENERIC_DEVICE_TYPE_FLOOR_STANDING_FIXTURE     = 12,
+    EMBER_ZCL_GENERIC_DEVICE_TYPE_GENERIC_CONTROLLER         = 224,
+    EMBER_ZCL_GENERIC_DEVICE_TYPE_WALL_SWITCH                = 225,
+    EMBER_ZCL_GENERIC_DEVICE_TYPE_PORTABLE_REMOTE_CONTROLLER = 226,
+    EMBER_ZCL_GENERIC_DEVICE_TYPE_MOTION_OR_LIGHT_SENSOR     = 227,
+    EMBER_ZCL_GENERIC_DEVICE_TYPE_GENERIC_ACTUATOR           = 240,
+    EMBER_ZCL_GENERIC_DEVICE_TYPE_PLUGIN_UNIT                = 241,
+    EMBER_ZCL_GENERIC_DEVICE_TYPE_RETROFIT_ACTUATOR          = 242,
+    EMBER_ZCL_GENERIC_DEVICE_TYPE_UNSPECIFIED                = 255,
+} EmberAfGenericDeviceType;
+
+// Enum for GenericFlowPressureAlarmGroups
+typedef enum
+{
+    EMBER_ZCL_GENERIC_FLOW_PRESSURE_ALARM_GROUPS_BURST_DETECT                    = 48,
+    EMBER_ZCL_GENERIC_FLOW_PRESSURE_ALARM_GROUPS_PRESSURE_TOO_LOW                = 49,
+    EMBER_ZCL_GENERIC_FLOW_PRESSURE_ALARM_GROUPS_PRESSURE_TOO_HIGH               = 50,
+    EMBER_ZCL_GENERIC_FLOW_PRESSURE_ALARM_GROUPS_FLOW_SENSOR_COMMUNICATION_ERROR = 51,
+    EMBER_ZCL_GENERIC_FLOW_PRESSURE_ALARM_GROUPS_FLOW_SENSOR_MEASUREMENT_FAULT   = 52,
+    EMBER_ZCL_GENERIC_FLOW_PRESSURE_ALARM_GROUPS_FLOW_SENSOR_REVERSE_FLOW        = 53,
+    EMBER_ZCL_GENERIC_FLOW_PRESSURE_ALARM_GROUPS_FLOW_SENSOR_AIR_DETECT          = 54,
+    EMBER_ZCL_GENERIC_FLOW_PRESSURE_ALARM_GROUPS_PIPE_EMPTY                      = 55,
+} EmberAfGenericFlowPressureAlarmGroups;
+
+// Enum for GpDeviceId
+typedef enum
+{
+    EMBER_ZCL_GP_DEVICE_ID_GP_SIMPLE_GENERIC_ONE_STATE_SWITCH   = 0,
+    EMBER_ZCL_GP_DEVICE_ID_GP_SIMPLE_GENERIC_TWO_STATE_SWITCH   = 0,
+    EMBER_ZCL_GP_DEVICE_ID_GP_ON_OFF_SWITCH                     = 8,
+    EMBER_ZCL_GP_DEVICE_ID_GP_LEVEL_CONTROL_SWITCH              = 16,
+    EMBER_ZCL_GP_DEVICE_ID_GP_SIMPLE_SENSOR                     = 24,
+    EMBER_ZCL_GP_DEVICE_ID_GP_ADVANCED_GENERIC_ONE_STATE_SWITCH = 24,
+    EMBER_ZCL_GP_DEVICE_ID_GP_ADVANCED_GENERIC_TWO_STATE_SWITCH = 24,
+    EMBER_ZCL_GP_DEVICE_ID_GP_COLOR_DIMMER_SWITCH               = 24,
+    EMBER_ZCL_GP_DEVICE_ID_GP_LIGHT_SENSOR                      = 24,
+    EMBER_ZCL_GP_DEVICE_ID_GP_OCCPANCY_SENSOR                   = 24,
+    EMBER_ZCL_GP_DEVICE_ID_GP_DOOR_LOCK_CONTROLLER              = 24,
+    EMBER_ZCL_GP_DEVICE_ID_GP_TEMPERATURE_SENSOR                = 24,
+    EMBER_ZCL_GP_DEVICE_ID_GP_PRESSURE_SENSOR                   = 24,
+    EMBER_ZCL_GP_DEVICE_ID_GP_FLOW_SENSOR                       = 24,
+    EMBER_ZCL_GP_DEVICE_ID_GP_INDOOR_ENVIRONMENT_SNESOR         = 24,
+} EmberAfGpDeviceId;
+
+// Enum for GpGpdf
+typedef enum
+{
+    EMBER_ZCL_GP_GPDF_IDENTIFY                    = 0,
+    EMBER_ZCL_GP_GPDF_MATCH_ONLY_ON_GPD_ADDRESS   = 2,
+    EMBER_ZCL_GP_GPDF_RECALL_SCENE0               = 16,
+    EMBER_ZCL_GP_GPDF_RECALL_SCENE1               = 17,
+    EMBER_ZCL_GP_GPDF_RECALL_SCENE2               = 18,
+    EMBER_ZCL_GP_GPDF_RECALL_SCENE3               = 19,
+    EMBER_ZCL_GP_GPDF_RECALL_SCENE4               = 20,
+    EMBER_ZCL_GP_GPDF_RECALL_SCENE5               = 21,
+    EMBER_ZCL_GP_GPDF_RECALL_SCENE6               = 22,
+    EMBER_ZCL_GP_GPDF_RECALL_SCENE7               = 23,
+    EMBER_ZCL_GP_GPDF_STORE_SCENE0                = 24,
+    EMBER_ZCL_GP_GPDF_STORE_SCENE1                = 25,
+    EMBER_ZCL_GP_GPDF_STORE_SCENE2                = 26,
+    EMBER_ZCL_GP_GPDF_STORE_SCENE3                = 27,
+    EMBER_ZCL_GP_GPDF_STORE_SCENE4                = 28,
+    EMBER_ZCL_GP_GPDF_STORE_SCENE5                = 29,
+    EMBER_ZCL_GP_GPDF_STORE_SCENE6                = 30,
+    EMBER_ZCL_GP_GPDF_STORE_SCENE7                = 31,
+    EMBER_ZCL_GP_GPDF_OFF                         = 32,
+    EMBER_ZCL_GP_GPDF_ON                          = 33,
+    EMBER_ZCL_GP_GPDF_TOGGLE                      = 34,
+    EMBER_ZCL_GP_GPDF_RELEASE                     = 35,
+    EMBER_ZCL_GP_GPDF_MOVE_UP                     = 48,
+    EMBER_ZCL_GP_GPDF_MOVE_DOWN                   = 49,
+    EMBER_ZCL_GP_GPDF_STEP_UP                     = 50,
+    EMBER_ZCL_GP_GPDF_STEP_DOWN                   = 51,
+    EMBER_ZCL_GP_GPDF_LEVEL_CONTROL_STOP          = 52,
+    EMBER_ZCL_GP_GPDF_MOVE_UP_WITH_ON_OFF         = 53,
+    EMBER_ZCL_GP_GPDF_MOVE_DOWN_WITH_ON_OFF       = 54,
+    EMBER_ZCL_GP_GPDF_STEP_UP_WITH_ON_OFF         = 55,
+    EMBER_ZCL_GP_GPDF_STEP_DOWN_WITH_ON_OFF       = 56,
+    EMBER_ZCL_GP_GPDF_MOVE_HUE_STOP               = 64,
+    EMBER_ZCL_GP_GPDF_MOVE_HUE_UP                 = 65,
+    EMBER_ZCL_GP_GPDF_MOVE_HUE_DOWN               = 66,
+    EMBER_ZCL_GP_GPDF_STEP_HUE_UP                 = 67,
+    EMBER_ZCL_GP_GPDF_STEP_HUE_DOWN               = 68,
+    EMBER_ZCL_GP_GPDF_MOVE_SATURATION_STOP        = 69,
+    EMBER_ZCL_GP_GPDF_MOVE_SATURATION_UP          = 70,
+    EMBER_ZCL_GP_GPDF_MOVE_SATURATION_DOWN        = 71,
+    EMBER_ZCL_GP_GPDF_STEP_SATURATION_UP          = 72,
+    EMBER_ZCL_GP_GPDF_STEP_SATURATION_DOWN        = 73,
+    EMBER_ZCL_GP_GPDF_MOVE_COLOR                  = 74,
+    EMBER_ZCL_GP_GPDF_STEP_COLOR                  = 75,
+    EMBER_ZCL_GP_GPDF_LOCK_DOOR                   = 80,
+    EMBER_ZCL_GP_GPDF_UNLOCK_DOOR                 = 81,
+    EMBER_ZCL_GP_GPDF_PRESS1_OF1                  = 96,
+    EMBER_ZCL_GP_GPDF_RELEASE1_OF1                = 97,
+    EMBER_ZCL_GP_GPDF_PRESS1_OF2                  = 98,
+    EMBER_ZCL_GP_GPDF_RELEASE1_OF2                = 99,
+    EMBER_ZCL_GP_GPDF_PRESS2_OF2                  = 100,
+    EMBER_ZCL_GP_GPDF_RELEASE2_OF2                = 101,
+    EMBER_ZCL_GP_GPDF_SHORT_PRESS1_OF1            = 102,
+    EMBER_ZCL_GP_GPDF_SHORT_PRESS1_OF2            = 103,
+    EMBER_ZCL_GP_GPDF_SHORT_PRESS2_OF2            = 104,
+    EMBER_ZCL_GP_GPDF_8BITS_VECTOR_PRESS          = 105,
+    EMBER_ZCL_GP_GPDF_8BITS_VECTOR_RELEASE        = 106,
+    EMBER_ZCL_GP_GPDF_ATTRIBUTE_REPORTING         = 160,
+    EMBER_ZCL_GP_GPDF_MFR_SP_ATTR_RPTG            = 161,
+    EMBER_ZCL_GP_GPDF_MULTI_CLUSTER_RPTG          = 162,
+    EMBER_ZCL_GP_GPDF_MFR_SP_MULTI_CLUSTER_RPTG   = 163,
+    EMBER_ZCL_GP_GPDF_REQUEST_ATTRIBUTE           = 164,
+    EMBER_ZCL_GP_GPDF_READ_ATTR_RESPONSE          = 165,
+    EMBER_ZCL_GP_GPDF_ZCL_TUNNELING_WITH_PAYLOAD  = 166,
+    EMBER_ZCL_GP_GPDF_COMPACT_ATTRIBUTE_REPORTING = 168,
+    EMBER_ZCL_GP_GPDF_ANY_GPD_SENSOR_CMD          = 175,
+    EMBER_ZCL_GP_GPDF_MFR_DEF_GPD_CMD0            = 176,
+    EMBER_ZCL_GP_GPDF_MFR_DEF_GPD_CMD1            = 177,
+    EMBER_ZCL_GP_GPDF_MFR_DEF_GPD_CMD2            = 178,
+    EMBER_ZCL_GP_GPDF_MFR_DEF_GPD_CMD3            = 179,
+    EMBER_ZCL_GP_GPDF_MFR_DEF_GPD_CMD4            = 180,
+    EMBER_ZCL_GP_GPDF_MFR_DEF_GPD_CMD5            = 181,
+    EMBER_ZCL_GP_GPDF_MFR_DEF_GPD_CMD6            = 182,
+    EMBER_ZCL_GP_GPDF_MFR_DEF_GPD_CMD7            = 183,
+    EMBER_ZCL_GP_GPDF_MFR_DEF_GPD_CMD8            = 184,
+    EMBER_ZCL_GP_GPDF_MFR_DEF_GPD_CMD9            = 185,
+    EMBER_ZCL_GP_GPDF_MFR_DEF_GPD_CMD_A           = 186,
+    EMBER_ZCL_GP_GPDF_MFR_DEF_GPD_CMD_B           = 187,
+    EMBER_ZCL_GP_GPDF_MFR_DEF_GPD_CMD_C           = 188,
+    EMBER_ZCL_GP_GPDF_MFR_DEF_GPD_CMD_D           = 189,
+    EMBER_ZCL_GP_GPDF_MFR_DEF_GPD_CMD_E           = 190,
+    EMBER_ZCL_GP_GPDF_MFR_DEF_GPD_CMD_F           = 191,
+    EMBER_ZCL_GP_GPDF_COMMISSIONING               = 224,
+    EMBER_ZCL_GP_GPDF_DECOMMISSIONING             = 225,
+    EMBER_ZCL_GP_GPDF_SUCCESS                     = 226,
+    EMBER_ZCL_GP_GPDF_CHANNEL_REQUEST             = 227,
+    EMBER_ZCL_GP_GPDF_APPLICATION_DESCRIPTION     = 228,
+    EMBER_ZCL_GP_GPDF_COMMISSIONING_REPLY         = 240,
+    EMBER_ZCL_GP_GPDF_WRITE_ATTRIBUTES            = 241,
+    EMBER_ZCL_GP_GPDF_READ_ATTRIBUTES             = 242,
+    EMBER_ZCL_GP_GPDF_CHANNEL_CONFIGURATION       = 243,
+    EMBER_ZCL_GP_GPDF_ZCL_TUNNELING               = 246,
+} EmberAfGpGpdf;
+
+// Enum for GpPairingConfigurationAction
+typedef enum
+{
+    EMBER_ZCL_GP_PAIRING_CONFIGURATION_ACTION_NO_ACTION                = 0,
+    EMBER_ZCL_GP_PAIRING_CONFIGURATION_ACTION_EXTEND_SINK_TABLE_ENTRY  = 1,
+    EMBER_ZCL_GP_PAIRING_CONFIGURATION_ACTION_REPLACE_SINK_TABLE_ENTRY = 2,
+    EMBER_ZCL_GP_PAIRING_CONFIGURATION_ACTION_REMOVE_A_PAIRING         = 3,
+    EMBER_ZCL_GP_PAIRING_CONFIGURATION_ACTION_REMOVE_GPD               = 4,
+    EMBER_ZCL_GP_PAIRING_CONFIGURATION_ACTION_APPLICATION_DESCRIPTION  = 5,
+} EmberAfGpPairingConfigurationAction;
+
+// Enum for GpPairingConfigurationOptionCommunicationMode
+typedef enum
+{
+    EMBER_ZCL_GP_PAIRING_CONFIGURATION_OPTION_COMMUNICATION_MODE_UNICAST_FORWARDING                       = 0,
+    EMBER_ZCL_GP_PAIRING_CONFIGURATION_OPTION_COMMUNICATION_MODE_GROUPCAST_FORWARDING_TO_D_GROUP_ID       = 8,
+    EMBER_ZCL_GP_PAIRING_CONFIGURATION_OPTION_COMMUNICATION_MODE_GROUPCAST_FORWARDING_TO_PRE_COMMISSIONED = 16,
+    EMBER_ZCL_GP_PAIRING_CONFIGURATION_OPTION_COMMUNICATION_MODE_UNICAST_FORWARDING_LIGHTWEIGHT           = 24,
+} EmberAfGpPairingConfigurationOptionCommunicationMode;
+
+// Enum for GpPairingOptionsCommunicationMode
+typedef enum
+{
+    EMBER_ZCL_GP_PAIRING_OPTIONS_COMMUNICATION_MODE_FULL_UNICAST_FORWARDING               = 0,
+    EMBER_ZCL_GP_PAIRING_OPTIONS_COMMUNICATION_MODE_GROUPCAST_FORWARDING_TO_D_GROUP_ID    = 1,
+    EMBER_ZCL_GP_PAIRING_OPTIONS_COMMUNICATION_MODE_GROUPCAST_FORWARDING_TO_PRE_COMM_UNIT = 16,
+    EMBER_ZCL_GP_PAIRING_OPTIONS_COMMUNICATION_MODE_UNICAST_FORWARDING_BY_PROX_SUPPORT    = 17,
+} EmberAfGpPairingOptionsCommunicationMode;
+
+// Enum for GpProxyTableRequestOptionsRequestType
+typedef enum
+{
+    EMBER_ZCL_GP_PROXY_TABLE_REQUEST_OPTIONS_REQUEST_TYPE_BY_GPD_ID = 0,
+    EMBER_ZCL_GP_PROXY_TABLE_REQUEST_OPTIONS_REQUEST_TYPE_BY_INDEX  = 1,
+} EmberAfGpProxyTableRequestOptionsRequestType;
+
+// Enum for GpProxyTableResponseStatus
+typedef enum
+{
+    EMBER_ZCL_GP_PROXY_TABLE_RESPONSE_STATUS_SUCCESS   = 0,
+    EMBER_ZCL_GP_PROXY_TABLE_RESPONSE_STATUS_NOT_FOUND = 139,
+} EmberAfGpProxyTableResponseStatus;
+
+// Enum for GpSecurityKeyType
+typedef enum
+{
+    EMBER_ZCL_GP_SECURITY_KEY_TYPE_NONE                       = 0,
+    EMBER_ZCL_GP_SECURITY_KEY_TYPE_ZIGBEE_NETWORK_KEY         = 1,
+    EMBER_ZCL_GP_SECURITY_KEY_TYPE_GPD_GROUP_KEY              = 2,
+    EMBER_ZCL_GP_SECURITY_KEY_TYPE_NETWORK_DERIVED_GROUP_KEY  = 3,
+    EMBER_ZCL_GP_SECURITY_KEY_TYPE_INDIVIDIGUAL_GPD_KEY       = 4,
+    EMBER_ZCL_GP_SECURITY_KEY_TYPE_DERIVED_INDIVIDUAL_GPD_KEY = 7,
+} EmberAfGpSecurityKeyType;
+
+// Enum for GpSinkTableRequestOptions
+typedef enum
+{
+    EMBER_ZCL_GP_SINK_TABLE_REQUEST_OPTIONS_REQUEST_TABLE_ENTRIES_BY_GPD_ID = 0,
+    EMBER_ZCL_GP_SINK_TABLE_REQUEST_OPTIONS_REQUEST_TABLE_ENTRIES_BY_INDEX  = 1,
+} EmberAfGpSinkTableRequestOptions;
+
+// Enum for GpSinkTableResponseStatus
+typedef enum
+{
+    EMBER_ZCL_GP_SINK_TABLE_RESPONSE_STATUS_SUCCESS   = 0,
+    EMBER_ZCL_GP_SINK_TABLE_RESPONSE_STATUS_NOT_FOUND = 139,
+} EmberAfGpSinkTableResponseStatus;
+
+// Enum for GpTranslationTableResponseStatus
+typedef enum
+{
+    EMBER_ZCL_GP_TRANSLATION_TABLE_RESPONSE_STATUS_SUCCESS   = 0,
+    EMBER_ZCL_GP_TRANSLATION_TABLE_RESPONSE_STATUS_NOT_FOUND = 139,
+} EmberAfGpTranslationTableResponseStatus;
+
+// Enum for GpTranslationTableUpdateAction
+typedef enum
+{
+    EMBER_ZCL_GP_TRANSLATION_TABLE_UPDATE_ACTION_ADD_TRANSLATION_TABLE_ENTRY     = 0,
+    EMBER_ZCL_GP_TRANSLATION_TABLE_UPDATE_ACTION_REPLACE_TRANSLATION_TABLE_ENTRY = 8,
+    EMBER_ZCL_GP_TRANSLATION_TABLE_UPDATE_ACTION_REMOVE_TRANSLATION_TABLE_ENTRY  = 16,
+    EMBER_ZCL_GP_TRANSLATION_TABLE_UPDATE_ACTION_RESERVED                        = 24,
+} EmberAfGpTranslationTableUpdateAction;
+
+// Enum for HeatAndCoolingSpecificAlarmGroups
+typedef enum
+{
+    EMBER_ZCL_HEAT_AND_COOLING_SPECIFIC_ALARM_GROUPS_INLET_TEMPERATURE_SENSOR_FAULT  = 80,
+    EMBER_ZCL_HEAT_AND_COOLING_SPECIFIC_ALARM_GROUPS_OUTLET_TEMPERATURE_SENSOR_FAULT = 81,
+} EmberAfHeatAndCoolingSpecificAlarmGroups;
+
+// Enum for HueDirection
+typedef enum
+{
+    EMBER_ZCL_HUE_DIRECTION_SHORTEST_DISTANCE = 0,
+    EMBER_ZCL_HUE_DIRECTION_LONGEST_DISTANCE  = 1,
+    EMBER_ZCL_HUE_DIRECTION_UP                = 2,
+    EMBER_ZCL_HUE_DIRECTION_DOWN              = 3,
+} EmberAfHueDirection;
+
+// Enum for HueMoveMode
+typedef enum
+{
+    EMBER_ZCL_HUE_MOVE_MODE_STOP = 0,
+    EMBER_ZCL_HUE_MOVE_MODE_UP   = 1,
+    EMBER_ZCL_HUE_MOVE_MODE_DOWN = 3,
+} EmberAfHueMoveMode;
+
+// Enum for HueStepMode
+typedef enum
+{
+    EMBER_ZCL_HUE_STEP_MODE_UP   = 1,
+    EMBER_ZCL_HUE_STEP_MODE_DOWN = 3,
+} EmberAfHueStepMode;
+
+// Enum for IasAceAlarmStatus
+typedef enum
+{
+    EMBER_ZCL_IAS_ACE_ALARM_STATUS_NO_ALARM        = 0,
+    EMBER_ZCL_IAS_ACE_ALARM_STATUS_BURGLAR         = 1,
+    EMBER_ZCL_IAS_ACE_ALARM_STATUS_FIRE            = 2,
+    EMBER_ZCL_IAS_ACE_ALARM_STATUS_EMERGENCY       = 3,
+    EMBER_ZCL_IAS_ACE_ALARM_STATUS_POLICE_PANIC    = 4,
+    EMBER_ZCL_IAS_ACE_ALARM_STATUS_FIRE_PANIC      = 5,
+    EMBER_ZCL_IAS_ACE_ALARM_STATUS_EMERGENCY_PANIC = 6,
+} EmberAfIasAceAlarmStatus;
+
+// Enum for IasAceArmMode
+typedef enum
+{
+    EMBER_ZCL_IAS_ACE_ARM_MODE_DISARM                     = 0,
+    EMBER_ZCL_IAS_ACE_ARM_MODE_ARM_DAY_HOME_ZONES_ONLY    = 1,
+    EMBER_ZCL_IAS_ACE_ARM_MODE_ARM_NIGHT_SLEEP_ZONES_ONLY = 2,
+    EMBER_ZCL_IAS_ACE_ARM_MODE_ARM_ALL_ZONES              = 3,
+} EmberAfIasAceArmMode;
+
+// Enum for IasAceArmNotification
+typedef enum
+{
+    EMBER_ZCL_IAS_ACE_ARM_NOTIFICATION_ALL_ZONES_DISARMED           = 0,
+    EMBER_ZCL_IAS_ACE_ARM_NOTIFICATION_ONLY_DAY_HOME_ZONES_ARMED    = 1,
+    EMBER_ZCL_IAS_ACE_ARM_NOTIFICATION_ONLY_NIGHT_SLEEP_ZONES_ARMED = 2,
+    EMBER_ZCL_IAS_ACE_ARM_NOTIFICATION_ALL_ZONES_ARMED              = 3,
+    EMBER_ZCL_IAS_ACE_ARM_NOTIFICATION_INVALID_ARM_DISARM_CODE      = 4,
+    EMBER_ZCL_IAS_ACE_ARM_NOTIFICATION_NOT_READY_TO_ARM             = 5,
+    EMBER_ZCL_IAS_ACE_ARM_NOTIFICATION_ALREADY_DISARMED             = 6,
+} EmberAfIasAceArmNotification;
+
+// Enum for IasAceAudibleNotification
+typedef enum
+{
+    EMBER_ZCL_IAS_ACE_AUDIBLE_NOTIFICATION_MUTE          = 0,
+    EMBER_ZCL_IAS_ACE_AUDIBLE_NOTIFICATION_DEFAULT_SOUND = 1,
+} EmberAfIasAceAudibleNotification;
+
+// Enum for IasAceBypassResult
+typedef enum
+{
+    EMBER_ZCL_IAS_ACE_BYPASS_RESULT_ZONE_BYPASSED           = 0,
+    EMBER_ZCL_IAS_ACE_BYPASS_RESULT_ZONE_NOT_BYPASSED       = 1,
+    EMBER_ZCL_IAS_ACE_BYPASS_RESULT_NOT_ALLOWED             = 2,
+    EMBER_ZCL_IAS_ACE_BYPASS_RESULT_INVALID_ZONE_ID         = 3,
+    EMBER_ZCL_IAS_ACE_BYPASS_RESULT_UNKNOWN_ZONE_ID         = 4,
+    EMBER_ZCL_IAS_ACE_BYPASS_RESULT_INVALID_ARM_DISARM_CODE = 5,
+} EmberAfIasAceBypassResult;
+
+// Enum for IasAcePanelStatus
+typedef enum
+{
+    EMBER_ZCL_IAS_ACE_PANEL_STATUS_PANEL_DISARMED   = 0,
+    EMBER_ZCL_IAS_ACE_PANEL_STATUS_ARMED_STAY       = 1,
+    EMBER_ZCL_IAS_ACE_PANEL_STATUS_ARMED_NIGHT      = 2,
+    EMBER_ZCL_IAS_ACE_PANEL_STATUS_ARMED_AWAY       = 3,
+    EMBER_ZCL_IAS_ACE_PANEL_STATUS_EXIT_DELAY       = 4,
+    EMBER_ZCL_IAS_ACE_PANEL_STATUS_ENTRY_DELAY      = 5,
+    EMBER_ZCL_IAS_ACE_PANEL_STATUS_NOT_READY_TO_ARM = 6,
+    EMBER_ZCL_IAS_ACE_PANEL_STATUS_IN_ALARM         = 7,
+    EMBER_ZCL_IAS_ACE_PANEL_STATUS_ARMING_STAY      = 8,
+    EMBER_ZCL_IAS_ACE_PANEL_STATUS_ARMING_NIGHT     = 9,
+    EMBER_ZCL_IAS_ACE_PANEL_STATUS_ARMING_AWAY      = 10,
+} EmberAfIasAcePanelStatus;
+
+// Enum for IasEnrollResponseCode
+typedef enum
+{
+    EMBER_ZCL_IAS_ENROLL_RESPONSE_CODE_SUCCESS          = 0,
+    EMBER_ZCL_IAS_ENROLL_RESPONSE_CODE_NOT_SUPPORTED    = 1,
+    EMBER_ZCL_IAS_ENROLL_RESPONSE_CODE_NO_ENROLL_PERMIT = 2,
+    EMBER_ZCL_IAS_ENROLL_RESPONSE_CODE_TOO_MANY_ZONES   = 3,
+} EmberAfIasEnrollResponseCode;
+
+// Enum for IasZoneState
+typedef enum
+{
+    EMBER_ZCL_IAS_ZONE_STATE_NOT_ENROLLED = 0,
+    EMBER_ZCL_IAS_ZONE_STATE_ENROLLED     = 1,
+} EmberAfIasZoneState;
+
+// Enum for IasZoneType
+typedef enum
+{
+    EMBER_ZCL_IAS_ZONE_TYPE_STANDARD_CIE              = 0,
+    EMBER_ZCL_IAS_ZONE_TYPE_MOTION_SENSOR             = 13,
+    EMBER_ZCL_IAS_ZONE_TYPE_CONTACT_SWITCH            = 21,
+    EMBER_ZCL_IAS_ZONE_TYPE_FIRE_SENSOR               = 40,
+    EMBER_ZCL_IAS_ZONE_TYPE_WATER_SENSOR              = 42,
+    EMBER_ZCL_IAS_ZONE_TYPE_GAS_SENSOR                = 43,
+    EMBER_ZCL_IAS_ZONE_TYPE_PERSONAL_EMERGENCY_DEVICE = 44,
+    EMBER_ZCL_IAS_ZONE_TYPE_VIBRATION_MOVEMENT_SENSOR = 45,
+    EMBER_ZCL_IAS_ZONE_TYPE_REMOTE_CONTROL            = 271,
+    EMBER_ZCL_IAS_ZONE_TYPE_KEY_FOB                   = 277,
+    EMBER_ZCL_IAS_ZONE_TYPE_KEYPAD                    = 541,
+    EMBER_ZCL_IAS_ZONE_TYPE_STANDARD_WARNING_DEVICE   = 549,
+    EMBER_ZCL_IAS_ZONE_TYPE_GLASS_BREAK_SENSOR        = 550,
+    EMBER_ZCL_IAS_ZONE_TYPE_CARBON_MONOXIDE_SENSOR    = 551,
+    EMBER_ZCL_IAS_ZONE_TYPE_SECURITY_REPEATER         = 553,
+    EMBER_ZCL_IAS_ZONE_TYPE_INVALID_ZONE_TYPE         = 65535,
+} EmberAfIasZoneType;
+
+// Enum for IdentifyEffectIdentifier
+typedef enum
+{
+    EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_BLINK          = 0,
+    EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_BREATHE        = 1,
+    EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_OKAY           = 2,
+    EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_CHANNEL_CHANGE = 11,
+    EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_FINISH_EFFECT  = 254,
+    EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_STOP_EFFECT    = 255,
+} EmberAfIdentifyEffectIdentifier;
+
+// Enum for IdentifyEffectVariant
+typedef enum
+{
+    EMBER_ZCL_IDENTIFY_EFFECT_VARIANT_DEFAULT = 0,
+} EmberAfIdentifyEffectVariant;
+
+// Enum for KeyIndex
+typedef enum
+{
+    EMBER_ZCL_KEY_INDEX_DEVELOPMENT   = 0,
+    EMBER_ZCL_KEY_INDEX_MASTER        = 4,
+    EMBER_ZCL_KEY_INDEX_CERTIFICATION = 15,
+} EmberAfKeyIndex;
+
+// Enum for KeypadLockout
+typedef enum
+{
+    EMBER_ZCL_KEYPAD_LOCKOUT_NO_LOCKOUT          = 0,
+    EMBER_ZCL_KEYPAD_LOCKOUT_LEVEL_ONE_LOCKOUT   = 1,
+    EMBER_ZCL_KEYPAD_LOCKOUT_LEVEL_TWO_LOCKOUT   = 2,
+    EMBER_ZCL_KEYPAD_LOCKOUT_LEVEL_THREE_LOCKOUT = 3,
+    EMBER_ZCL_KEYPAD_LOCKOUT_LEVEL_FOUR_LOCKOUT  = 4,
+    EMBER_ZCL_KEYPAD_LOCKOUT_LEVELFIVE_LOCKOUT   = 5,
+} EmberAfKeypadLockout;
+
+// Enum for LevelControlOptions
+typedef enum
+{
+    EMBER_ZCL_LEVEL_CONTROL_OPTIONS_EXECUTE_IF_OFF             = 1,
+    EMBER_ZCL_LEVEL_CONTROL_OPTIONS_COUPLE_COLOR_TEMP_TO_LEVEL = 2,
+} EmberAfLevelControlOptions;
+
+// Enum for LevelStatus
+typedef enum
+{
+    EMBER_ZCL_LEVEL_STATUS_ON_TARGET    = 0,
+    EMBER_ZCL_LEVEL_STATUS_BELOW_TARGET = 1,
+    EMBER_ZCL_LEVEL_STATUS_ABOVE_TARGET = 2,
+} EmberAfLevelStatus;
+
+// Enum for LocationMethod
+typedef enum
+{
+    EMBER_ZCL_LOCATION_METHOD_LATERATION        = 0,
+    EMBER_ZCL_LOCATION_METHOD_SIGNPOSTING       = 1,
+    EMBER_ZCL_LOCATION_METHOD_RF_FINGERPRINTING = 2,
+    EMBER_ZCL_LOCATION_METHOD_OUT_OF_BAND       = 3,
+} EmberAfLocationMethod;
+
+// Enum for ManufacturerSpecificAlarmGroups
+typedef enum
+{
+    EMBER_ZCL_MANUFACTURER_SPECIFIC_ALARM_GROUPS_MANUFACTURER_SPECIFIC_A = 176,
+    EMBER_ZCL_MANUFACTURER_SPECIFIC_ALARM_GROUPS_MANUFACTURER_SPECIFIC_B = 177,
+    EMBER_ZCL_MANUFACTURER_SPECIFIC_ALARM_GROUPS_MANUFACTURER_SPECIFIC_C = 178,
+    EMBER_ZCL_MANUFACTURER_SPECIFIC_ALARM_GROUPS_MANUFACTURER_SPECIFIC_D = 179,
+    EMBER_ZCL_MANUFACTURER_SPECIFIC_ALARM_GROUPS_MANUFACTURER_SPECIFIC_E = 180,
+    EMBER_ZCL_MANUFACTURER_SPECIFIC_ALARM_GROUPS_MANUFACTURER_SPECIFIC_F = 181,
+    EMBER_ZCL_MANUFACTURER_SPECIFIC_ALARM_GROUPS_MANUFACTURER_SPECIFIC_G = 182,
+    EMBER_ZCL_MANUFACTURER_SPECIFIC_ALARM_GROUPS_MANUFACTURER_SPECIFIC_H = 183,
+    EMBER_ZCL_MANUFACTURER_SPECIFIC_ALARM_GROUPS_MANUFACTURER_SPECIFIC_I = 184,
+} EmberAfManufacturerSpecificAlarmGroups;
+
+// Enum for MeasurementLightSensorType
+typedef enum
+{
+    EMBER_ZCL_MEASUREMENT_LIGHT_SENSOR_TYPE_PHOTODIODE = 0,
+    EMBER_ZCL_MEASUREMENT_LIGHT_SENSOR_TYPE_CMOS       = 1,
+} EmberAfMeasurementLightSensorType;
+
+// Enum for MessagingControlConfirmation
+typedef enum
+{
+    EMBER_ZCL_MESSAGING_CONTROL_CONFIRMATION_NOT_REQUIRED = 0,
+    EMBER_ZCL_MESSAGING_CONTROL_CONFIRMATION_REQUIRED     = 128,
+} EmberAfMessagingControlConfirmation;
+
+// Enum for MessagingControlEnhancedConfirmation
+typedef enum
+{
+    EMBER_ZCL_MESSAGING_CONTROL_ENHANCED_CONFIRMATION_NOT_REQUIRED = 0,
+    EMBER_ZCL_MESSAGING_CONTROL_ENHANCED_CONFIRMATION_REQUIRED     = 32,
+} EmberAfMessagingControlEnhancedConfirmation;
+
+// Enum for MessagingControlImportance
+typedef enum
+{
+    EMBER_ZCL_MESSAGING_CONTROL_IMPORTANCE_LOW      = 0,
+    EMBER_ZCL_MESSAGING_CONTROL_IMPORTANCE_MEDIUM   = 4,
+    EMBER_ZCL_MESSAGING_CONTROL_IMPORTANCE_HIGH     = 8,
+    EMBER_ZCL_MESSAGING_CONTROL_IMPORTANCE_CRITICAL = 12,
+} EmberAfMessagingControlImportance;
+
+// Enum for MessagingControlTransmission
+typedef enum
+{
+    EMBER_ZCL_MESSAGING_CONTROL_TRANSMISSION_NORMAL               = 0,
+    EMBER_ZCL_MESSAGING_CONTROL_TRANSMISSION_NORMAL_AND_ANONYMOUS = 1,
+    EMBER_ZCL_MESSAGING_CONTROL_TRANSMISSION_ANONYMOUS            = 2,
+    EMBER_ZCL_MESSAGING_CONTROL_TRANSMISSION_RESERVED             = 3,
+} EmberAfMessagingControlTransmission;
+
+// Enum for MeterDeviceType
+typedef enum
+{
+    EMBER_ZCL_METER_DEVICE_TYPE_ELECTRIC_METER          = 0,
+    EMBER_ZCL_METER_DEVICE_TYPE_GAS_METER               = 1,
+    EMBER_ZCL_METER_DEVICE_TYPE_WATER_METER             = 2,
+    EMBER_ZCL_METER_DEVICE_TYPE_THERMAL_METER           = 3,
+    EMBER_ZCL_METER_DEVICE_TYPE_PRESSURE_METER          = 4,
+    EMBER_ZCL_METER_DEVICE_TYPE_HEAT_METER              = 5,
+    EMBER_ZCL_METER_DEVICE_TYPE_COOLING_METER           = 6,
+    EMBER_ZCL_METER_DEVICE_TYPE_MIRRORED_GAS_METER      = 128,
+    EMBER_ZCL_METER_DEVICE_TYPE_MIRRORED_WATER_METER    = 129,
+    EMBER_ZCL_METER_DEVICE_TYPE_MIRRORED_THERMAL_METER  = 130,
+    EMBER_ZCL_METER_DEVICE_TYPE_MIRRORED_PRESSURE_METER = 131,
+    EMBER_ZCL_METER_DEVICE_TYPE_MIRRORED_HEAT_METER     = 132,
+    EMBER_ZCL_METER_DEVICE_TYPE_MIRRORED_COOLING_METER  = 133,
+    EMBER_ZCL_METER_DEVICE_TYPE_UNDEFINED_MIRROR_METER  = 254,
+} EmberAfMeterDeviceType;
+
+// Enum for MeterTypeId
+typedef enum
+{
+    EMBER_ZCL_METER_TYPE_ID_UTILITY_PRIMARY_METER    = 0,
+    EMBER_ZCL_METER_TYPE_ID_UTILITY_PRODUCTION_METER = 1,
+    EMBER_ZCL_METER_TYPE_ID_UTILITY_SECONDARY_METER  = 2,
+    EMBER_ZCL_METER_TYPE_ID_PRIVATE_PRIMARY_METER    = 256,
+    EMBER_ZCL_METER_TYPE_ID_PRIVATE_PRODUCTION_METER = 257,
+    EMBER_ZCL_METER_TYPE_ID_PRIVATE_SECONDARY_METERS = 258,
+    EMBER_ZCL_METER_TYPE_ID_GENERIC_METER            = 272,
+} EmberAfMeterTypeId;
+
+// Enum for MeteringAlarmCode
+typedef enum
+{
+    EMBER_ZCL_METERING_ALARM_CODE_CHECK_METER                                  = 0,
+    EMBER_ZCL_METERING_ALARM_CODE_LOW_BATTERY                                  = 1,
+    EMBER_ZCL_METERING_ALARM_CODE_TAMPER_DETECT                                = 2,
+    EMBER_ZCL_METERING_ALARM_CODE_POWER_FAILURE_PIPE_EMPTY_TEMPERATURE_SENSOR  = 3,
+    EMBER_ZCL_METERING_ALARM_CODE_POWER_QUALITY_LOW_PRESSURE_BURST_DETECT      = 4,
+    EMBER_ZCL_METERING_ALARM_CODE_LEAK_DETECT                                  = 5,
+    EMBER_ZCL_METERING_ALARM_CODE_SERVICE_DISCONNECT                           = 6,
+    EMBER_ZCL_METERING_ALARM_CODE_REVERSE_FLOW_FLOW_SENSOR                     = 7,
+    EMBER_ZCL_METERING_ALARM_CODE_METER_COVER_REMOVED                          = 8,
+    EMBER_ZCL_METERING_ALARM_CODE_METER_COVER_CLOSED                           = 9,
+    EMBER_ZCL_METERING_ALARM_CODE_STRONG_MAGNETIC_FIELD                        = 10,
+    EMBER_ZCL_METERING_ALARM_CODE_NO_STRONG_MAGNETIC_FIELD                     = 11,
+    EMBER_ZCL_METERING_ALARM_CODE_BATTERY_FAILURE                              = 12,
+    EMBER_ZCL_METERING_ALARM_CODE_PROGRAM_MEMORY_ERROR                         = 13,
+    EMBER_ZCL_METERING_ALARM_CODE_RAM_ERROR                                    = 14,
+    EMBER_ZCL_METERING_ALARM_CODE_NV_MEMORY_ERROR                              = 15,
+    EMBER_ZCL_METERING_ALARM_CODE_LOW_VOLTAGE_L1                               = 16,
+    EMBER_ZCL_METERING_ALARM_CODE_HIGH_VOLTAGE_L1                              = 17,
+    EMBER_ZCL_METERING_ALARM_CODE_LOW_VOLTAGE_L2                               = 18,
+    EMBER_ZCL_METERING_ALARM_CODE_HIGH_VOLTAGE_L2                              = 19,
+    EMBER_ZCL_METERING_ALARM_CODE_LOW_VOLTAGE_L3                               = 20,
+    EMBER_ZCL_METERING_ALARM_CODE_HIGH_VOLTAGE_L3                              = 21,
+    EMBER_ZCL_METERING_ALARM_CODE_OVER_CURRENT_L1                              = 22,
+    EMBER_ZCL_METERING_ALARM_CODE_OVER_CURRENT_L2                              = 23,
+    EMBER_ZCL_METERING_ALARM_CODE_OVER_CURRENT_L3                              = 24,
+    EMBER_ZCL_METERING_ALARM_CODE_FREQUENCY_TOO_LOW_L1                         = 25,
+    EMBER_ZCL_METERING_ALARM_CODE_FREQUENCY_TOO_HIGH_L1                        = 26,
+    EMBER_ZCL_METERING_ALARM_CODE_FREQUENCY_TOO_LOW_L2                         = 27,
+    EMBER_ZCL_METERING_ALARM_CODE_FREQUENCY_TOO_HIGH_L2                        = 28,
+    EMBER_ZCL_METERING_ALARM_CODE_FREQUENCY_TOO_LOW_L3                         = 29,
+    EMBER_ZCL_METERING_ALARM_CODE_FREQUENCY_TOO_HIGH_L3                        = 30,
+    EMBER_ZCL_METERING_ALARM_CODE_GROUND_FAULT                                 = 31,
+    EMBER_ZCL_METERING_ALARM_CODE_ELECTRIC_TAMPER_DETECT                       = 32,
+    EMBER_ZCL_METERING_ALARM_CODE_INCORRECT_POLARITY                           = 33,
+    EMBER_ZCL_METERING_ALARM_CODE_CURRENT_NO_VOLTAGE                           = 34,
+    EMBER_ZCL_METERING_ALARM_CODE_UNDER_VOLTAGE                                = 35,
+    EMBER_ZCL_METERING_ALARM_CODE_OVER_VOLTAGE                                 = 36,
+    EMBER_ZCL_METERING_ALARM_CODE_NORMAL_VOLTAGE                               = 37,
+    EMBER_ZCL_METERING_ALARM_CODE_PF_BELOW_THRESHOLD                           = 38,
+    EMBER_ZCL_METERING_ALARM_CODE_PF_ABOVE_THRESHOLD                           = 39,
+    EMBER_ZCL_METERING_ALARM_CODE_TERMINAL_COVER_REMOVED                       = 40,
+    EMBER_ZCL_METERING_ALARM_CODE_TERMINAL_COVER_CLOSED                        = 41,
+    EMBER_ZCL_METERING_ALARM_CODE_BURST_DETECT                                 = 48,
+    EMBER_ZCL_METERING_ALARM_CODE_PRESSURE_TOO_LOW                             = 49,
+    EMBER_ZCL_METERING_ALARM_CODE_PRESSURE_TOO_HIGH                            = 50,
+    EMBER_ZCL_METERING_ALARM_CODE_FLOW_SENSOR_COMMUNICATION_ERROR              = 51,
+    EMBER_ZCL_METERING_ALARM_CODE_FLOW_SENSOR_MEASUREMENT_FAULT                = 52,
+    EMBER_ZCL_METERING_ALARM_CODE_FLOW_SENSOR_REVERSE_FLOW                     = 53,
+    EMBER_ZCL_METERING_ALARM_CODE_FLOW_SENSOR_AIR_DETECT                       = 54,
+    EMBER_ZCL_METERING_ALARM_CODE_PIPE_EMPTY                                   = 55,
+    EMBER_ZCL_METERING_ALARM_CODE_INLET_TEMPERATURE_SENSOR_FAULT               = 80,
+    EMBER_ZCL_METERING_ALARM_CODE_OUTLET_TEMPERATURE_SENSOR_FAULT              = 81,
+    EMBER_ZCL_METERING_ALARM_CODE_TILT_TAMPER                                  = 96,
+    EMBER_ZCL_METERING_ALARM_CODE_BATTERY_COVER_REMOVED                        = 97,
+    EMBER_ZCL_METERING_ALARM_CODE_BATTERY_COVER_CLOSED                         = 98,
+    EMBER_ZCL_METERING_ALARM_CODE_EXCESS_FLOW                                  = 99,
+    EMBER_ZCL_METERING_ALARM_CODE_TILT_TAMPER_ENDED                            = 100,
+    EMBER_ZCL_METERING_ALARM_CODE_MEASUREMENT_SYSTEM_ERROR                     = 112,
+    EMBER_ZCL_METERING_ALARM_CODE_WATCHDOG_ERROR                               = 113,
+    EMBER_ZCL_METERING_ALARM_CODE_SUPPLY_DISCONNECT_FAILURE                    = 114,
+    EMBER_ZCL_METERING_ALARM_CODE_SUPPLY_CONNECT_FAILURE                       = 115,
+    EMBER_ZCL_METERING_ALARM_CODE_MEASURMENT_SOFTWARE_CHANGED                  = 116,
+    EMBER_ZCL_METERING_ALARM_CODE_DST_ENABLED                                  = 117,
+    EMBER_ZCL_METERING_ALARM_CODE_DST_DISABLED                                 = 118,
+    EMBER_ZCL_METERING_ALARM_CODE_CLOCK_ADJ_BACKWARD                           = 119,
+    EMBER_ZCL_METERING_ALARM_CODE_CLOCK_ADJ_FORWARD                            = 120,
+    EMBER_ZCL_METERING_ALARM_CODE_CLOCK_INVALID                                = 121,
+    EMBER_ZCL_METERING_ALARM_CODE_COMMUNICATION_ERROR_HAN                      = 122,
+    EMBER_ZCL_METERING_ALARM_CODE_COMMUNICATION_OK_H_AN                        = 123,
+    EMBER_ZCL_METERING_ALARM_CODE_METER_FRAUD_ATTEMPT                          = 124,
+    EMBER_ZCL_METERING_ALARM_CODE_POWER_LOSS                                   = 125,
+    EMBER_ZCL_METERING_ALARM_CODE_UNUSUAL_HAN_TRAFFIC                          = 126,
+    EMBER_ZCL_METERING_ALARM_CODE_UNEXPECTED_CLOCK_CHANGE                      = 127,
+    EMBER_ZCL_METERING_ALARM_CODE_COMMS_USING_UNAUTHENTICATED_COMPONENT        = 128,
+    EMBER_ZCL_METERING_ALARM_CODE_ERROR_REG_CLEAR                              = 129,
+    EMBER_ZCL_METERING_ALARM_CODE_ALARM_REG_CLEAR                              = 130,
+    EMBER_ZCL_METERING_ALARM_CODE_UNEXPECTED_HW_RESET                          = 131,
+    EMBER_ZCL_METERING_ALARM_CODE_UNEXPECTED_PROGRAM_EXECUTION                 = 132,
+    EMBER_ZCL_METERING_ALARM_CODE_EVENT_LOG_CLEARED                            = 133,
+    EMBER_ZCL_METERING_ALARM_CODE_LIMIT_THRESHOLD_EXCEEDED                     = 134,
+    EMBER_ZCL_METERING_ALARM_CODE_LIMIT_THRESHOLD_OK                           = 135,
+    EMBER_ZCL_METERING_ALARM_CODE_LIMIT_THRESHOLD_CHANGED                      = 136,
+    EMBER_ZCL_METERING_ALARM_CODE_MAXIMUM_DEMAND_EXCEEDED                      = 137,
+    EMBER_ZCL_METERING_ALARM_CODE_PROFILE_CLEARED                              = 138,
+    EMBER_ZCL_METERING_ALARM_CODE_SAMPLING_BUFFERCLEARED                       = 139,
+    EMBER_ZCL_METERING_ALARM_CODE_BATTERY_WARNING                              = 140,
+    EMBER_ZCL_METERING_ALARM_CODE_WRONG_SIGNATURE                              = 141,
+    EMBER_ZCL_METERING_ALARM_CODE_NO_SIGNATURE                                 = 142,
+    EMBER_ZCL_METERING_ALARM_CODE_UNAUTHORISED_ACTIONFROM_HAN                  = 143,
+    EMBER_ZCL_METERING_ALARM_CODE_FAST_POLLING_START                           = 144,
+    EMBER_ZCL_METERING_ALARM_CODE_FAST_POLLING_END                             = 145,
+    EMBER_ZCL_METERING_ALARM_CODE_METER_REPORTING_INTERVAL_CHANGED             = 146,
+    EMBER_ZCL_METERING_ALARM_CODE_DISCONNECT_DUETO_LOAD_LIMIT                  = 147,
+    EMBER_ZCL_METERING_ALARM_CODE_METER_SUPPLY_STATUS_REGISTER_CHANGED         = 148,
+    EMBER_ZCL_METERING_ALARM_CODE_METER_ALARM_STATUS_REGISTER_CHANGED          = 149,
+    EMBER_ZCL_METERING_ALARM_CODE_EXTENDED_METER_ALARM_STATUS_REGISTER_CHANGED = 150,
+    EMBER_ZCL_METERING_ALARM_CODE_MANUFACTURER_SPECIFIC_A                      = 176,
+    EMBER_ZCL_METERING_ALARM_CODE_MANUFACTURER_SPECIFIC_B                      = 177,
+    EMBER_ZCL_METERING_ALARM_CODE_MANUFACTURER_SPECIFIC_C                      = 178,
+    EMBER_ZCL_METERING_ALARM_CODE_MANUFACTURER_SPECIFIC_D                      = 179,
+    EMBER_ZCL_METERING_ALARM_CODE_MANUFACTURER_SPECIFIC_E                      = 180,
+    EMBER_ZCL_METERING_ALARM_CODE_MANUFACTURER_SPECIFIC_F                      = 181,
+    EMBER_ZCL_METERING_ALARM_CODE_MANUFACTURER_SPECIFIC_G                      = 182,
+    EMBER_ZCL_METERING_ALARM_CODE_MANUFACTURER_SPECIFIC_H                      = 183,
+    EMBER_ZCL_METERING_ALARM_CODE_MANUFACTURER_SPECIFIC_I                      = 184,
+} EmberAfMeteringAlarmCode;
+
+// Enum for MeteringBlockEnumerations
+typedef enum
+{
+    EMBER_ZCL_METERING_BLOCK_ENUMERATIONS_NO_BLOCKS_IN_USE = 0,
+    EMBER_ZCL_METERING_BLOCK_ENUMERATIONS_BLOCK1           = 1,
+    EMBER_ZCL_METERING_BLOCK_ENUMERATIONS_BLOCK2           = 2,
+    EMBER_ZCL_METERING_BLOCK_ENUMERATIONS_BLOCK3           = 3,
+    EMBER_ZCL_METERING_BLOCK_ENUMERATIONS_BLOCK4           = 4,
+    EMBER_ZCL_METERING_BLOCK_ENUMERATIONS_BLOCK5           = 5,
+    EMBER_ZCL_METERING_BLOCK_ENUMERATIONS_BLOCK6           = 6,
+    EMBER_ZCL_METERING_BLOCK_ENUMERATIONS_BLOCK7           = 7,
+    EMBER_ZCL_METERING_BLOCK_ENUMERATIONS_BLOCK8           = 8,
+    EMBER_ZCL_METERING_BLOCK_ENUMERATIONS_BLOCK9           = 9,
+    EMBER_ZCL_METERING_BLOCK_ENUMERATIONS_BLOCK10          = 10,
+    EMBER_ZCL_METERING_BLOCK_ENUMERATIONS_BLOCK11          = 11,
+    EMBER_ZCL_METERING_BLOCK_ENUMERATIONS_BLOCK12          = 12,
+    EMBER_ZCL_METERING_BLOCK_ENUMERATIONS_BLOCK13          = 13,
+    EMBER_ZCL_METERING_BLOCK_ENUMERATIONS_BLOCK14          = 14,
+    EMBER_ZCL_METERING_BLOCK_ENUMERATIONS_BLOCK15          = 15,
+    EMBER_ZCL_METERING_BLOCK_ENUMERATIONS_BLOCK16          = 16,
+} EmberAfMeteringBlockEnumerations;
+
+// Enum for MeteringConsumptionStatus
+typedef enum
+{
+    EMBER_ZCL_METERING_CONSUMPTION_STATUS_LOW_ENERGY_USAGE    = 0,
+    EMBER_ZCL_METERING_CONSUMPTION_STATUS_MEDIUM_ENERGY_USAGE = 1,
+    EMBER_ZCL_METERING_CONSUMPTION_STATUS_HIGH_ENERGY_USAGE   = 2,
+} EmberAfMeteringConsumptionStatus;
+
+// Enum for MeteringDeviceType
+typedef enum
+{
+    EMBER_ZCL_METERING_DEVICE_TYPE_ELECTRIC_METERING                            = 0,
+    EMBER_ZCL_METERING_DEVICE_TYPE_GAS_METERING                                 = 1,
+    EMBER_ZCL_METERING_DEVICE_TYPE_WATER_METERING                               = 2,
+    EMBER_ZCL_METERING_DEVICE_TYPE_THERMAL_METERING                             = 3,
+    EMBER_ZCL_METERING_DEVICE_TYPE_PRESSURE_METERING                            = 4,
+    EMBER_ZCL_METERING_DEVICE_TYPE_HEAT_METERING                                = 5,
+    EMBER_ZCL_METERING_DEVICE_TYPE_COOLING_METERING                             = 6,
+    EMBER_ZCL_METERING_DEVICE_TYPE_ELECTRIC_VEHICLE_CHARGING_METERING           = 7,
+    EMBER_ZCL_METERING_DEVICE_TYPE_PV_GENERATION_METERING                       = 8,
+    EMBER_ZCL_METERING_DEVICE_TYPE_WIND_TURBINE_GENERATION_METERING             = 9,
+    EMBER_ZCL_METERING_DEVICE_TYPE_WATER_TURBINE_GENERATION_METERING            = 10,
+    EMBER_ZCL_METERING_DEVICE_TYPE_MICRO_GENERATION_METERING                    = 11,
+    EMBER_ZCL_METERING_DEVICE_TYPE_SOLAR_HOT_WATER_GENERATION_METERING          = 12,
+    EMBER_ZCL_METERING_DEVICE_TYPE_ELECTRIC_METERING_ELEMENT1                   = 13,
+    EMBER_ZCL_METERING_DEVICE_TYPE_ELECTRIC_METERING_ELEMENT2                   = 14,
+    EMBER_ZCL_METERING_DEVICE_TYPE_ELECTRIC_METERING_ELEMENT3                   = 15,
+    EMBER_ZCL_METERING_DEVICE_TYPE_MIRRORED_ELECTRIC_METERING                   = 127,
+    EMBER_ZCL_METERING_DEVICE_TYPE_MIRRORED_GAS_METERING                        = 128,
+    EMBER_ZCL_METERING_DEVICE_TYPE_MIRRORED_WATER_METERING                      = 129,
+    EMBER_ZCL_METERING_DEVICE_TYPE_MIRRORED_THERMAL_METERING                    = 130,
+    EMBER_ZCL_METERING_DEVICE_TYPE_MIRRORED_PRESSURE_METERING                   = 131,
+    EMBER_ZCL_METERING_DEVICE_TYPE_MIRRORED_HEAT_METERING                       = 132,
+    EMBER_ZCL_METERING_DEVICE_TYPE_MIRRORED_COOLING_METERING                    = 133,
+    EMBER_ZCL_METERING_DEVICE_TYPE_MIRRORED_ELECTRIC_VEHICLE_CHARGING_METERING  = 134,
+    EMBER_ZCL_METERING_DEVICE_TYPE_MIRRORED_PV_GENERATION_METERING              = 135,
+    EMBER_ZCL_METERING_DEVICE_TYPE_MIRRORED_WIND_TURBINE_GENERATION_METERING    = 136,
+    EMBER_ZCL_METERING_DEVICE_TYPE_MIRRORED_WATER_TURBINE_GENERATION_METERING   = 137,
+    EMBER_ZCL_METERING_DEVICE_TYPE_MIRRORED_MICRO_GENERATION_METERING           = 138,
+    EMBER_ZCL_METERING_DEVICE_TYPE_MIRRORED_SOLAR_HOT_WATER_GENERATION_METERING = 139,
+    EMBER_ZCL_METERING_DEVICE_TYPE_MIRRORED_ELECTRIC_METERING_ELEMENT1          = 140,
+    EMBER_ZCL_METERING_DEVICE_TYPE_MIRRORED_ELECTRIC_METERING_ELEMENT2          = 141,
+    EMBER_ZCL_METERING_DEVICE_TYPE_MIRRORED_ELECTRIC_METERING_ELEMENT3          = 142,
+    EMBER_ZCL_METERING_DEVICE_TYPE_UNDEFINED_MIRROR_METER                       = 254,
+} EmberAfMeteringDeviceType;
+
+// Enum for MeteringSupplyStatus
+typedef enum
+{
+    EMBER_ZCL_METERING_SUPPLY_STATUS_SUPPLY_OFF       = 0,
+    EMBER_ZCL_METERING_SUPPLY_STATUS_SUPPLY_OFF_ARMED = 1,
+    EMBER_ZCL_METERING_SUPPLY_STATUS_SUPPLY_ON        = 2,
+} EmberAfMeteringSupplyStatus;
+
+// Enum for MeteringTemperatureUnitOfMeasure
+typedef enum
+{
+    EMBER_ZCL_METERING_TEMPERATURE_UNIT_OF_MEASURE_KELVIN         = 0,
+    EMBER_ZCL_METERING_TEMPERATURE_UNIT_OF_MEASURE_CELSIUS        = 1,
+    EMBER_ZCL_METERING_TEMPERATURE_UNIT_OF_MEASURE_FAHRENHEIT     = 2,
+    EMBER_ZCL_METERING_TEMPERATURE_UNIT_OF_MEASURE_KELVIN_BCD     = 128,
+    EMBER_ZCL_METERING_TEMPERATURE_UNIT_OF_MEASURE_CELSIUS_BCD    = 129,
+    EMBER_ZCL_METERING_TEMPERATURE_UNIT_OF_MEASURE_FAHRENHEIT_BCD = 130,
+} EmberAfMeteringTemperatureUnitOfMeasure;
+
+// Enum for MoveMode
+typedef enum
+{
+    EMBER_ZCL_MOVE_MODE_UP   = 0,
+    EMBER_ZCL_MOVE_MODE_DOWN = 1,
+} EmberAfMoveMode;
+
+// Enum for NotificationScheme
+typedef enum
+{
+    EMBER_ZCL_NOTIFICATION_SCHEME_NO_NOTIFICATION_SCHEME_DEFINED   = 0,
+    EMBER_ZCL_NOTIFICATION_SCHEME_PREDEFINED_NOTIFICATION_SCHEME_A = 1,
+    EMBER_ZCL_NOTIFICATION_SCHEME_PREDEFINED_NOTIFICATION_SCHEME_B = 2,
+} EmberAfNotificationScheme;
+
+// Enum for OccupancySensorType
+typedef enum
+{
+    EMBER_ZCL_OCCUPANCY_SENSOR_TYPE_PIR                = 0,
+    EMBER_ZCL_OCCUPANCY_SENSOR_TYPE_ULTRASONIC         = 1,
+    EMBER_ZCL_OCCUPANCY_SENSOR_TYPE_PIR_AND_ULTRASONIC = 2,
+    EMBER_ZCL_OCCUPANCY_SENSOR_TYPE_PHYSICAL_CONTACT   = 3,
+} EmberAfOccupancySensorType;
+
+// Enum for OnOffDelayedAllOffEffectVariant
+typedef enum
+{
+    EMBER_ZCL_ON_OFF_DELAYED_ALL_OFF_EFFECT_VARIANT_FADE_TO_OFF_IN_0P8_SECONDS                                        = 0,
+    EMBER_ZCL_ON_OFF_DELAYED_ALL_OFF_EFFECT_VARIANT_NO_FADE                                                           = 1,
+    EMBER_ZCL_ON_OFF_DELAYED_ALL_OFF_EFFECT_VARIANT_50_PERCENT_DIM_DOWN_IN_0P8_SECONDS_THEN_FADE_TO_OFF_IN_12_SECONDS = 2,
+} EmberAfOnOffDelayedAllOffEffectVariant;
+
+// Enum for OnOffDyingLightEffectVariant
+typedef enum
+{
+    EMBER_ZCL_ON_OFF_DYING_LIGHT_EFFECT_VARIANT_20_PERCENTER_DIM_UP_IN_0P5_SECONDS_THEN_FADE_TO_OFF_IN_1_SECOND = 0,
+} EmberAfOnOffDyingLightEffectVariant;
+
+// Enum for OnOffEffectIdentifier
+typedef enum
+{
+    EMBER_ZCL_ON_OFF_EFFECT_IDENTIFIER_DELAYED_ALL_OFF = 0,
+    EMBER_ZCL_ON_OFF_EFFECT_IDENTIFIER_DYING_LIGHT     = 1,
+} EmberAfOnOffEffectIdentifier;
+
+// Enum for OperatingMode
+typedef enum
+{
+    EMBER_ZCL_OPERATING_MODE_NORMAL    = 0,
+    EMBER_ZCL_OPERATING_MODE_CONFIGURE = 1,
+} EmberAfOperatingMode;
+
+// Enum for OriginatingDevice
+typedef enum
+{
+    EMBER_ZCL_ORIGINATING_DEVICE_ENERGY_SERVICE_INTERFACE = 0,
+    EMBER_ZCL_ORIGINATING_DEVICE_METER                    = 1,
+    EMBER_ZCL_ORIGINATING_DEVICE_IN_HOME_DISPLAY_DEVICE   = 2,
+} EmberAfOriginatingDevice;
+
+// Enum for PasswordType
+typedef enum
+{
+    EMBER_ZCL_PASSWORD_TYPE_PASSWORD1_SERVICE_MENU_ACCESS  = 1,
+    EMBER_ZCL_PASSWORD_TYPE_PASSWORD2_CONSUMER_MENU_ACCESS = 2,
+    EMBER_ZCL_PASSWORD_TYPE_PASSWORD3                      = 3,
+    EMBER_ZCL_PASSWORD_TYPE_PASSWORD4                      = 4,
+} EmberAfPasswordType;
+
+// Enum for PaymentDiscountDuration
+typedef enum
+{
+    EMBER_ZCL_PAYMENT_DISCOUNT_DURATION_CURRENT_BILLING_PERIOD    = 0,
+    EMBER_ZCL_PAYMENT_DISCOUNT_DURATION_CURRENT_CONSOLIDATED_BILL = 1,
+    EMBER_ZCL_PAYMENT_DISCOUNT_DURATION_ONE_MONTH                 = 2,
+    EMBER_ZCL_PAYMENT_DISCOUNT_DURATION_ONE_QUARTER               = 3,
+    EMBER_ZCL_PAYMENT_DISCOUNT_DURATION_ONE_YEAR                  = 4,
+} EmberAfPaymentDiscountDuration;
+
+// Enum for PhysicalEnvironment
+typedef enum
+{
+    EMBER_ZCL_PHYSICAL_ENVIRONMENT_UNSPECIFIED                   = 0,
+    EMBER_ZCL_PHYSICAL_ENVIRONMENT_FIRST_PROFILE_SPECIFIED_VALUE = 1,
+    EMBER_ZCL_PHYSICAL_ENVIRONMENT_LAST_PROFILE_SPECIFIED_VALUE  = 127,
+    EMBER_ZCL_PHYSICAL_ENVIRONMENT_UNKNOWN                       = 255,
+} EmberAfPhysicalEnvironment;
+
+// Enum for PowerProfileState
+typedef enum
+{
+    EMBER_ZCL_POWER_PROFILE_STATE_POWER_PROFILE_WAITING_TO_START = 1,
+    EMBER_ZCL_POWER_PROFILE_STATE_POWER_PROFILE_STARTED          = 2,
+    EMBER_ZCL_POWER_PROFILE_STATE_ENERGY_PHASE_RUNNING           = 3,
+    EMBER_ZCL_POWER_PROFILE_STATE_ENERGY_PHASE_ENDED             = 4,
+    EMBER_ZCL_POWER_PROFILE_STATE_ENERGY_PHASE_WAITING_TO_START  = 5,
+    EMBER_ZCL_POWER_PROFILE_STATE_ENERGY_PHASE_STARTED           = 6,
+    EMBER_ZCL_POWER_PROFILE_STATE_POWER_PROFILE_ENDED            = 7,
+    EMBER_ZCL_POWER_PROFILE_STATE_PROFILE_READY_FOR_SCHEDULING   = 8,
+    EMBER_ZCL_POWER_PROFILE_STATE_POWER_PROFILE_SCHEDULED        = 9,
+} EmberAfPowerProfileState;
+
+// Enum for PowerSource
+typedef enum
+{
+    EMBER_ZCL_POWER_SOURCE_UNKNOWN                         = 0,
+    EMBER_ZCL_POWER_SOURCE_SINGLE_PHASE_MAINS              = 1,
+    EMBER_ZCL_POWER_SOURCE_THREE_PHASE_MAINS               = 2,
+    EMBER_ZCL_POWER_SOURCE_BATTERY                         = 3,
+    EMBER_ZCL_POWER_SOURCE_DC_SOURCE                       = 4,
+    EMBER_ZCL_POWER_SOURCE_EMERGENCY_MAINS_CONSTANT_POWER  = 5,
+    EMBER_ZCL_POWER_SOURCE_EMERGENCY_MAINS_TRANSFER_SWITCH = 6,
+    EMBER_ZCL_POWER_SOURCE_BATTERY_BACKUP                  = 128,
+} EmberAfPowerSource;
+
+// Enum for PrePayGenericAlarmGroup
+typedef enum
+{
+    EMBER_ZCL_PRE_PAY_GENERIC_ALARM_GROUP_LOW_CREDIT                 = 0,
+    EMBER_ZCL_PRE_PAY_GENERIC_ALARM_GROUP_NO_CREDIT                  = 1,
+    EMBER_ZCL_PRE_PAY_GENERIC_ALARM_GROUP_CREDIT_EXHAUSTED           = 2,
+    EMBER_ZCL_PRE_PAY_GENERIC_ALARM_GROUP_EMERGENCY_CREDIT_ENABLED   = 3,
+    EMBER_ZCL_PRE_PAY_GENERIC_ALARM_GROUP_EMERGENCY_CREDIT_EXHAUSTED = 4,
+    EMBER_ZCL_PRE_PAY_GENERIC_ALARM_GROUP_IHD_LOW_CREDIT_WARNING     = 5,
+    EMBER_ZCL_PRE_PAY_GENERIC_ALARM_GROUP_EVENT_LOG_CLEARED          = 6,
+} EmberAfPrePayGenericAlarmGroup;
+
+// Enum for PrepayEventAlarmGroup
+typedef enum
+{
+    EMBER_ZCL_PREPAY_EVENT_ALARM_GROUP_PHYSICAL_ATTACK_ON_THE_PREPAY_METER   = 32,
+    EMBER_ZCL_PREPAY_EVENT_ALARM_GROUP_ELECTRONIC_ATTACK_ON_THE_PREPAY_METER = 33,
+    EMBER_ZCL_PREPAY_EVENT_ALARM_GROUP_DISCOUNT_APPLIED                      = 34,
+    EMBER_ZCL_PREPAY_EVENT_ALARM_GROUP_CREDIT_ADJUSTMENT                     = 35,
+    EMBER_ZCL_PREPAY_EVENT_ALARM_GROUP_CREDIT_ADJUSTMENT_FAIL                = 36,
+    EMBER_ZCL_PREPAY_EVENT_ALARM_GROUP_DEBT_ADJUSTMENT                       = 37,
+    EMBER_ZCL_PREPAY_EVENT_ALARM_GROUP_DEBT_ADJUSTMENT_FAIL                  = 38,
+    EMBER_ZCL_PREPAY_EVENT_ALARM_GROUP_MODE_CHANGE                           = 39,
+    EMBER_ZCL_PREPAY_EVENT_ALARM_GROUP_TOPUP_CODE_ERROR                      = 40,
+    EMBER_ZCL_PREPAY_EVENT_ALARM_GROUP_TOPUP_ALREADY_USED                    = 41,
+    EMBER_ZCL_PREPAY_EVENT_ALARM_GROUP_TOPUP_CODE_INVALID                    = 42,
+    EMBER_ZCL_PREPAY_EVENT_ALARM_GROUP_FRIENDLY_CREDIT_IN_USE                = 43,
+    EMBER_ZCL_PREPAY_EVENT_ALARM_GROUP_FRIENDLY_CREDIT_PERIOD_END_WARNING    = 44,
+    EMBER_ZCL_PREPAY_EVENT_ALARM_GROUP_FRIENDLY_CREDIT_PERIOD_END            = 45,
+    EMBER_ZCL_PREPAY_EVENT_ALARM_GROUP_ERROR_REG_CLEAR                       = 48,
+    EMBER_ZCL_PREPAY_EVENT_ALARM_GROUP_ALARM_REG_CLEAR                       = 49,
+    EMBER_ZCL_PREPAY_EVENT_ALARM_GROUP_PREPAY_CLUSTER_NOT_FOUND              = 50,
+    EMBER_ZCL_PREPAY_EVENT_ALARM_GROUP_MODE_CREDIT2_PREPAY                   = 65,
+    EMBER_ZCL_PREPAY_EVENT_ALARM_GROUP_MODE_PREPAY2_CREDIT                   = 66,
+    EMBER_ZCL_PREPAY_EVENT_ALARM_GROUP_MODE_DEFAULT                          = 67,
+} EmberAfPrepayEventAlarmGroup;
+
+// Enum for PrepaySnapshotPayloadType
+typedef enum
+{
+    EMBER_ZCL_PREPAY_SNAPSHOT_PAYLOAD_TYPE_DEBT_CREDIT_STATUS = 0,
+    EMBER_ZCL_PREPAY_SNAPSHOT_PAYLOAD_TYPE_NOT_USED           = 255,
+} EmberAfPrepaySnapshotPayloadType;
+
+// Enum for PrepaySwitchAlarmGroup
+typedef enum
+{
+    EMBER_ZCL_PREPAY_SWITCH_ALARM_GROUP_SUPPLY_ON                           = 16,
+    EMBER_ZCL_PREPAY_SWITCH_ALARM_GROUP_SUPPLY_ARM                          = 17,
+    EMBER_ZCL_PREPAY_SWITCH_ALARM_GROUP_SUPPLY_OFF                          = 18,
+    EMBER_ZCL_PREPAY_SWITCH_ALARM_GROUP_DISCONNECTION_FAILURE               = 19,
+    EMBER_ZCL_PREPAY_SWITCH_ALARM_GROUP_DISCONNECTED_DUE_TO_TAMPER_DETECTED = 20,
+    EMBER_ZCL_PREPAY_SWITCH_ALARM_GROUP_DISCONNECTED_DUE_TO_CUT_OFF_VALUE   = 21,
+    EMBER_ZCL_PREPAY_SWITCH_ALARM_GROUP_REMOTE_DISCONNECTED                 = 22,
+} EmberAfPrepaySwitchAlarmGroup;
+
+// Enum for PriceControlAcknowledgement
+typedef enum
+{
+    EMBER_ZCL_PRICE_CONTROL_ACKNOWLEDGEMENT_NOT_REQUIRED = 0,
+    EMBER_ZCL_PRICE_CONTROL_ACKNOWLEDGEMENT_REQUIRED     = 1,
+} EmberAfPriceControlAcknowledgement;
+
+// Enum for PriceTier
+typedef enum
+{
+    EMBER_ZCL_PRICE_TIER_NO_TIER_RELATED                    = 0,
+    EMBER_ZCL_PRICE_TIER_TIER1_PRICE_LABEL                  = 1,
+    EMBER_ZCL_PRICE_TIER_TIER2_PRICE_LABEL                  = 2,
+    EMBER_ZCL_PRICE_TIER_TIER3_PRICE_LABEL                  = 3,
+    EMBER_ZCL_PRICE_TIER_TIER4_PRICE_LABEL                  = 4,
+    EMBER_ZCL_PRICE_TIER_TIER5_PRICE_LABEL                  = 5,
+    EMBER_ZCL_PRICE_TIER_TIER6_PRICE_LABEL                  = 6,
+    EMBER_ZCL_PRICE_TIER_TIER7_PRICE_LABEL                  = 7,
+    EMBER_ZCL_PRICE_TIER_TIER8_PRICE_LABEL                  = 8,
+    EMBER_ZCL_PRICE_TIER_TIER9_PRICE_LABEL                  = 9,
+    EMBER_ZCL_PRICE_TIER_TIER10_PRICE_LABEL                 = 10,
+    EMBER_ZCL_PRICE_TIER_TIER11_PRICE_LABEL                 = 11,
+    EMBER_ZCL_PRICE_TIER_TIER12_PRICE_LABEL                 = 12,
+    EMBER_ZCL_PRICE_TIER_TIER13_PRICE_LABEL                 = 13,
+    EMBER_ZCL_PRICE_TIER_TIER14_PRICE_LABEL                 = 14,
+    EMBER_ZCL_PRICE_TIER_REFER_TO_EXTENDED_PRICE_TIER_FIELD = 15,
+    EMBER_ZCL_PRICE_TIER_TIER15_PRICE_LABEL                 = 15,
+} EmberAfPriceTier;
+
+// Enum for ProductCode
+typedef enum
+{
+    EMBER_ZCL_PRODUCT_CODE_MANUFACTURER_DEFINED        = 0,
+    EMBER_ZCL_PRODUCT_CODE_ITERNATIONAL_ARTICLE_NUMBER = 1,
+    EMBER_ZCL_PRODUCT_CODE_GLOBAL_TRADE_ITEM_NUMBER    = 2,
+    EMBER_ZCL_PRODUCT_CODE_UNIVERSAL_PRODUCT_CODE      = 3,
+    EMBER_ZCL_PRODUCT_CODE_STOCK_KEEPING_UNIT          = 4,
+} EmberAfProductCode;
+
+// Enum for ProductTypeId
+typedef enum
+{
+    EMBER_ZCL_PRODUCT_TYPE_ID_WHITE_GOODS          = 0,
+    EMBER_ZCL_PRODUCT_TYPE_ID_DISHWASHER           = 22017,
+    EMBER_ZCL_PRODUCT_TYPE_ID_TUMBLE_DRYER         = 22018,
+    EMBER_ZCL_PRODUCT_TYPE_ID_WASHER_DRYER         = 22019,
+    EMBER_ZCL_PRODUCT_TYPE_ID_WASHING_MACHINE      = 22020,
+    EMBER_ZCL_PRODUCT_TYPE_ID_HOBS                 = 24067,
+    EMBER_ZCL_PRODUCT_TYPE_ID_INDUCTION_HOBS       = 24073,
+    EMBER_ZCL_PRODUCT_TYPE_ID_OVEN                 = 24065,
+    EMBER_ZCL_PRODUCT_TYPE_ID_ELECTRICAL_OVEN      = 24070,
+    EMBER_ZCL_PRODUCT_TYPE_ID_REFRIGERATOR_FREEZER = 26113,
+} EmberAfProductTypeId;
+
+// Enum for ProposedSupplyStatus
+typedef enum
+{
+    EMBER_ZCL_PROPOSED_SUPPLY_STATUS_RESERVED         = 0,
+    EMBER_ZCL_PROPOSED_SUPPLY_STATUS_SUPPLY_OFF_ARMED = 1,
+    EMBER_ZCL_PROPOSED_SUPPLY_STATUS_SUPPLY_ON        = 2,
+} EmberAfProposedSupplyStatus;
+
+// Enum for PublishCppEventCppAuth
+typedef enum
+{
+    EMBER_ZCL_PUBLISH_CPP_EVENT_CPP_AUTH_PENDING  = 0,
+    EMBER_ZCL_PUBLISH_CPP_EVENT_CPP_AUTH_ACCEPTED = 1,
+    EMBER_ZCL_PUBLISH_CPP_EVENT_CPP_AUTH_REJECTED = 2,
+    EMBER_ZCL_PUBLISH_CPP_EVENT_CPP_AUTH_FORCED   = 3,
+} EmberAfPublishCppEventCppAuth;
+
+// Enum for PumpControlMode
+typedef enum
+{
+    EMBER_ZCL_PUMP_CONTROL_MODE_CONSTANT_SPEED        = 0,
+    EMBER_ZCL_PUMP_CONTROL_MODE_CONSTANT_PRESSURE     = 1,
+    EMBER_ZCL_PUMP_CONTROL_MODE_PROPORTIONAL_PRESSURE = 2,
+    EMBER_ZCL_PUMP_CONTROL_MODE_CONSTANT_FLOW         = 3,
+    EMBER_ZCL_PUMP_CONTROL_MODE_CONSTANT_TEMPERATURE  = 5,
+    EMBER_ZCL_PUMP_CONTROL_MODE_AUTOMATIC             = 7,
+} EmberAfPumpControlMode;
+
+// Enum for PumpOperationMode
+typedef enum
+{
+    EMBER_ZCL_PUMP_OPERATION_MODE_NORMAL  = 0,
+    EMBER_ZCL_PUMP_OPERATION_MODE_MINIMUM = 1,
+    EMBER_ZCL_PUMP_OPERATION_MODE_MAXIMUM = 2,
+    EMBER_ZCL_PUMP_OPERATION_MODE_LOCAL   = 3,
+} EmberAfPumpOperationMode;
+
+// Enum for PushHistoricalMeteringData
+typedef enum
+{
+    EMBER_ZCL_PUSH_HISTORICAL_METERING_DATA_DAY   = 64,
+    EMBER_ZCL_PUSH_HISTORICAL_METERING_DATA_WEEK  = 128,
+    EMBER_ZCL_PUSH_HISTORICAL_METERING_DATA_MONTH = 384,
+    EMBER_ZCL_PUSH_HISTORICAL_METERING_DATA_YEAR  = 448,
+} EmberAfPushHistoricalMeteringData;
+
+// Enum for PushHistoricalPaymentData
+typedef enum
+{
+    EMBER_ZCL_PUSH_HISTORICAL_PAYMENT_DATA_DAY   = 512,
+    EMBER_ZCL_PUSH_HISTORICAL_PAYMENT_DATA_WEEK  = 1024,
+    EMBER_ZCL_PUSH_HISTORICAL_PAYMENT_DATA_MONTH = 3072,
+    EMBER_ZCL_PUSH_HISTORICAL_PAYMENT_DATA_YEAR  = 3584,
+} EmberAfPushHistoricalPaymentData;
+
+// Enum for RegisterTier
+typedef enum
+{
+    EMBER_ZCL_REGISTER_TIER_NO_TIER_RELATED                              = 0,
+    EMBER_ZCL_REGISTER_TIER_CURRENT_TIER1_SUMMATION_DELIVERED_ATTRIBUTE  = 1,
+    EMBER_ZCL_REGISTER_TIER_CURRENT_TIER2_SUMMATION_DELIVERED_ATTRIBUTE  = 2,
+    EMBER_ZCL_REGISTER_TIER_CURRENT_TIER3_SUMMATION_DELIVERED_ATTRIBUTE  = 3,
+    EMBER_ZCL_REGISTER_TIER_CURRENT_TIER4_SUMMATION_DELIVERED_ATTRIBUTE  = 4,
+    EMBER_ZCL_REGISTER_TIER_CURRENT_TIER5_SUMMATION_DELIVERED_ATTRIBUTE  = 5,
+    EMBER_ZCL_REGISTER_TIER_CURRENT_TIER6_SUMMATION_DELIVERED_ATTRIBUTE  = 6,
+    EMBER_ZCL_REGISTER_TIER_CURRENT_TIER7_SUMMATION_DELIVERED_ATTRIBUTE  = 7,
+    EMBER_ZCL_REGISTER_TIER_CURRENT_TIER8_SUMMATION_DELIVERED_ATTRIBUTE  = 8,
+    EMBER_ZCL_REGISTER_TIER_CURRENT_TIER9_SUMMATION_DELIVERED_ATTRIBUTE  = 9,
+    EMBER_ZCL_REGISTER_TIER_CURRENT_TIER10_SUMMATION_DELIVERED_ATTRIBUTE = 10,
+    EMBER_ZCL_REGISTER_TIER_CURRENT_TIER11_SUMMATION_DELIVERED_ATTRIBUTE = 11,
+    EMBER_ZCL_REGISTER_TIER_CURRENT_TIER12_SUMMATION_DELIVERED_ATTRIBUTE = 12,
+    EMBER_ZCL_REGISTER_TIER_CURRENT_TIER13_SUMMATION_DELIVERED_ATTRIBUTE = 13,
+    EMBER_ZCL_REGISTER_TIER_CURRENT_TIER14_SUMMATION_DELIVERED_ATTRIBUTE = 14,
+    EMBER_ZCL_REGISTER_TIER_REFER_TO_EXTENDED_REGISTER_TIER_FIELD        = 15,
+    EMBER_ZCL_REGISTER_TIER_CURRENT_TIER15_SUMMATION_DELIVERED_ATTRIBUTE = 15,
+} EmberAfRegisterTier;
+
+// Enum for RelativeHumidityDisplay
+typedef enum
+{
+    EMBER_ZCL_RELATIVE_HUMIDITY_DISPLAY_NOT_DISPLAYED = 0,
+    EMBER_ZCL_RELATIVE_HUMIDITY_DISPLAY_DISPLAYED     = 1,
+} EmberAfRelativeHumidityDisplay;
+
+// Enum for RelativeHumidityMode
+typedef enum
+{
+    EMBER_ZCL_RELATIVE_HUMIDITY_MODE_MEASURE_LOCALLY          = 0,
+    EMBER_ZCL_RELATIVE_HUMIDITY_MODE_UPDATED_OVER_THE_NETWORK = 1,
+} EmberAfRelativeHumidityMode;
+
+// Enum for RemoteEnableFlags
+typedef enum
+{
+    EMBER_ZCL_REMOTE_ENABLE_FLAGS_DISABLED                          = 0,
+    EMBER_ZCL_REMOTE_ENABLE_FLAGS_TEMPORARILY_LOCKED_DISABLED       = 7,
+    EMBER_ZCL_REMOTE_ENABLE_FLAGS_ENABLED_REMOTE_CONTROL            = 15,
+    EMBER_ZCL_REMOTE_ENABLE_FLAGS_ENABLED_REMOTE_AND_ENERGY_CONTROL = 1,
+} EmberAfRemoteEnableFlags;
+
+// Enum for RepaymentDebtType
+typedef enum
+{
+    EMBER_ZCL_REPAYMENT_DEBT_TYPE_DEBT1     = 0,
+    EMBER_ZCL_REPAYMENT_DEBT_TYPE_DEBT2     = 1,
+    EMBER_ZCL_REPAYMENT_DEBT_TYPE_DEBT3     = 2,
+    EMBER_ZCL_REPAYMENT_DEBT_TYPE_ALL_DEBTS = 255,
+} EmberAfRepaymentDebtType;
+
+// Enum for ResultType
+typedef enum
+{
+    EMBER_ZCL_RESULT_TYPE_ACCEPTED                        = 0,
+    EMBER_ZCL_RESULT_TYPE_REJECTED_INVALID_TOP_UP         = 1,
+    EMBER_ZCL_RESULT_TYPE_REJECTED_DUPLICATE_TOP_UP       = 2,
+    EMBER_ZCL_RESULT_TYPE_REJECTED_ERROR                  = 3,
+    EMBER_ZCL_RESULT_TYPE_REJECTED_MAX_CREDIT_REACHED     = 4,
+    EMBER_ZCL_RESULT_TYPE_REJECTED_KEYPAD_LOCK            = 5,
+    EMBER_ZCL_RESULT_TYPE_REJECTED_TOP_UP_VALUE_TOO_LARGE = 6,
+    EMBER_ZCL_RESULT_TYPE_ACCEPTED_SUPPLY_ENABLED         = 16,
+    EMBER_ZCL_RESULT_TYPE_ACCEPTED_SUPPLY_DISABLED        = 17,
+    EMBER_ZCL_RESULT_TYPE_ACCEPTED_SUPPLY_ARMED           = 18,
+} EmberAfResultType;
+
+// Enum for SampleType
+typedef enum
+{
+    EMBER_ZCL_SAMPLE_TYPE_CONSUMPTION_DELIVERED = 0,
+} EmberAfSampleType;
+
+// Enum for SaturationMoveMode
+typedef enum
+{
+    EMBER_ZCL_SATURATION_MOVE_MODE_STOP = 0,
+    EMBER_ZCL_SATURATION_MOVE_MODE_UP   = 1,
+    EMBER_ZCL_SATURATION_MOVE_MODE_DOWN = 3,
+} EmberAfSaturationMoveMode;
+
+// Enum for SaturationStepMode
+typedef enum
+{
+    EMBER_ZCL_SATURATION_STEP_MODE_UP   = 1,
+    EMBER_ZCL_SATURATION_STEP_MODE_DOWN = 3,
+} EmberAfSaturationStepMode;
+
+// Enum for SensingLightSensorType
+typedef enum
+{
+    EMBER_ZCL_SENSING_LIGHT_SENSOR_TYPE_PHOTODIODE = 0,
+    EMBER_ZCL_SENSING_LIGHT_SENSOR_TYPE_CMOS       = 1,
+} EmberAfSensingLightSensorType;
+
+// Enum for SetpointAdjustMode
+typedef enum
+{
+    EMBER_ZCL_SETPOINT_ADJUST_MODE_HEAT_SETPOINT           = 0,
+    EMBER_ZCL_SETPOINT_ADJUST_MODE_COOL_SETPOINT           = 1,
+    EMBER_ZCL_SETPOINT_ADJUST_MODE_HEAT_AND_COOL_SETPOINTS = 2,
+} EmberAfSetpointAdjustMode;
+
+// Enum for SignatureType
+typedef enum
+{
+    EMBER_ZCL_SIGNATURE_TYPE_RESERVED = 0,
+    EMBER_ZCL_SIGNATURE_TYPE_ECDSA    = 1,
+} EmberAfSignatureType;
+
+// Enum for SnapshotConfirmation
+typedef enum
+{
+    EMBER_ZCL_SNAPSHOT_CONFIRMATION_ACCEPTED                     = 0,
+    EMBER_ZCL_SNAPSHOT_CONFIRMATION_SNAPSHOT_CAUSE_NOT_SUPPORTED = 1,
+} EmberAfSnapshotConfirmation;
+
+// Enum for SnapshotPayloadType
+typedef enum
+{
+    EMBER_ZCL_SNAPSHOT_PAYLOAD_TYPE_TOU_INFORMATION_SET_DELIVERED_REGISTERS            = 0,
+    EMBER_ZCL_SNAPSHOT_PAYLOAD_TYPE_TOU_INFORMATION_SET_RECEIVED_REGISTERS             = 1,
+    EMBER_ZCL_SNAPSHOT_PAYLOAD_TYPE_BLOCK_TIER_INFORMATION_SET_DELIVERED               = 2,
+    EMBER_ZCL_SNAPSHOT_PAYLOAD_TYPE_BLOCK_TIER_INFORMATION_SET_RECEIVED                = 3,
+    EMBER_ZCL_SNAPSHOT_PAYLOAD_TYPE_TOU_INFORMATION_SET_DELIVERED_REGISTERS_NO_BILLING = 4,
+    EMBER_ZCL_SNAPSHOT_PAYLOAD_TYPE_TOU_INFORMATION_SET_RECEIVED_REGISTER_NO_BILLINGS  = 5,
+    EMBER_ZCL_SNAPSHOT_PAYLOAD_TYPE_BLOCK_TIER_INFORMATION_SET_DELIVERED_NO_BILLING    = 6,
+    EMBER_ZCL_SNAPSHOT_PAYLOAD_TYPE_BLOCK_TIER_INFORMATION_SET_RECEIVED_NO_BILLING     = 7,
+    EMBER_ZCL_SNAPSHOT_PAYLOAD_TYPE_DATA_UNAVAILABLE                                   = 128,
+} EmberAfSnapshotPayloadType;
+
+// Enum for SnapshotScheduleConfirmation
+typedef enum
+{
+    EMBER_ZCL_SNAPSHOT_SCHEDULE_CONFIRMATION_ACCEPTED                                   = 0,
+    EMBER_ZCL_SNAPSHOT_SCHEDULE_CONFIRMATION_SNAPSHOT_TYPE_NOT_SUPPORTED                = 1,
+    EMBER_ZCL_SNAPSHOT_SCHEDULE_CONFIRMATION_SNAPSHOT_CAUSE_NOT_SUPPORTED               = 2,
+    EMBER_ZCL_SNAPSHOT_SCHEDULE_CONFIRMATION_SNAPSHOT_SCHEDULE_NOT_CURRENTLY_AVAILABLE  = 3,
+    EMBER_ZCL_SNAPSHOT_SCHEDULE_CONFIRMATION_SNAPSHOT_SCHEDULES_NOT_SUPPORTED_BY_DEVICE = 4,
+    EMBER_ZCL_SNAPSHOT_SCHEDULE_CONFIRMATION_INSUFFICIENT_SPACE_FOR_SNAPSHOT_SCHEDULE   = 5,
+} EmberAfSnapshotScheduleConfirmation;
+
+// Enum for SquawkLevel
+typedef enum
+{
+    EMBER_ZCL_SQUAWK_LEVEL_LOW_LEVEL       = 0,
+    EMBER_ZCL_SQUAWK_LEVEL_MEDIUM_LEVEL    = 1,
+    EMBER_ZCL_SQUAWK_LEVEL_HIGH_LEVEL      = 2,
+    EMBER_ZCL_SQUAWK_LEVEL_VERY_HIGH_LEVEL = 2,
+} EmberAfSquawkLevel;
+
+// Enum for SquawkMode
+typedef enum
+{
+    EMBER_ZCL_SQUAWK_MODE_SYSTEM_IS_ARMED    = 0,
+    EMBER_ZCL_SQUAWK_MODE_SYSTEM_IS_DISARMED = 1,
+} EmberAfSquawkMode;
+
+// Enum for SquawkStobe
+typedef enum
+{
+    EMBER_ZCL_SQUAWK_STOBE_NO_STROBE  = 0,
+    EMBER_ZCL_SQUAWK_STOBE_USE_STROBE = 1,
+} EmberAfSquawkStobe;
+
+// Enum for StartOfWeek
+typedef enum
+{
+    EMBER_ZCL_START_OF_WEEK_SUNDAY    = 0,
+    EMBER_ZCL_START_OF_WEEK_MONDAY    = 1,
+    EMBER_ZCL_START_OF_WEEK_TUESDAY   = 2,
+    EMBER_ZCL_START_OF_WEEK_WEDNESDAY = 3,
+    EMBER_ZCL_START_OF_WEEK_THURSDAY  = 4,
+    EMBER_ZCL_START_OF_WEEK_FRIDAY    = 5,
+    EMBER_ZCL_START_OF_WEEK_SATURDAY  = 6,
+} EmberAfStartOfWeek;
+
+// Enum for StartUpOnOffValue
+typedef enum
+{
+    EMBER_ZCL_START_UP_ON_OFF_VALUE_SET_TO_OFF      = 0,
+    EMBER_ZCL_START_UP_ON_OFF_VALUE_SET_TO_ON       = 1,
+    EMBER_ZCL_START_UP_ON_OFF_VALUE_SET_TO_TOGGLE   = 2,
+    EMBER_ZCL_START_UP_ON_OFF_VALUE_SET_TO_PREVIOUS = 255,
+} EmberAfStartUpOnOffValue;
+
+// Enum for StepMode
+typedef enum
+{
+    EMBER_ZCL_STEP_MODE_UP   = 0,
+    EMBER_ZCL_STEP_MODE_DOWN = 1,
+} EmberAfStepMode;
+
+// Enum for SupplyStatus
+typedef enum
+{
+    EMBER_ZCL_SUPPLY_STATUS_SUPPLY_OFF       = 0,
+    EMBER_ZCL_SUPPLY_STATUS_SUPPLY_OFF_ARMED = 1,
+    EMBER_ZCL_SUPPLY_STATUS_SUPPLY_ON        = 2,
+    EMBER_ZCL_SUPPLY_STATUS_SUPPLY_UNCHANGED = 3,
+} EmberAfSupplyStatus;
+
+// Enum for SwitchActions
+typedef enum
+{
+    EMBER_ZCL_SWITCH_ACTIONS_ON     = 0,
+    EMBER_ZCL_SWITCH_ACTIONS_OFF    = 1,
+    EMBER_ZCL_SWITCH_ACTIONS_TOGGLE = 2,
+} EmberAfSwitchActions;
+
+// Enum for SwitchType
+typedef enum
+{
+    EMBER_ZCL_SWITCH_TYPE_TOGGLE         = 0,
+    EMBER_ZCL_SWITCH_TYPE_MOMENTARY      = 1,
+    EMBER_ZCL_SWITCH_TYPE_MULTI_FUNCTION = 2,
+} EmberAfSwitchType;
+
+// Enum for TariffChargingScheme
+typedef enum
+{
+    EMBER_ZCL_TARIFF_CHARGING_SCHEME_TOU_TARIFF                                           = 0,
+    EMBER_ZCL_TARIFF_CHARGING_SCHEME_BLOCK_TARIFF                                         = 16,
+    EMBER_ZCL_TARIFF_CHARGING_SCHEME_BLOCK_TOU_TARIFF_WITH_COMMON_THRESHOLDS              = 32,
+    EMBER_ZCL_TARIFF_CHARGING_SCHEME_BLOCK_TOU_TARIFF_WITH_INDIVIDUAL_THRESHOLDS_PER_TIER = 48,
+} EmberAfTariffChargingScheme;
+
+// Enum for TariffResolutionPeriod
+typedef enum
+{
+    EMBER_ZCL_TARIFF_RESOLUTION_PERIOD_NOT_DEFINED  = 0,
+    EMBER_ZCL_TARIFF_RESOLUTION_PERIOD_BLOCK_PERIOD = 1,
+    EMBER_ZCL_TARIFF_RESOLUTION_PERIOD_ONE_DAY      = 2,
+} EmberAfTariffResolutionPeriod;
+
+// Enum for TariffType
+typedef enum
+{
+    EMBER_ZCL_TARIFF_TYPE_DELIVERED_TARIFF              = 0,
+    EMBER_ZCL_TARIFF_TYPE_RECEIVED_TARIFF               = 1,
+    EMBER_ZCL_TARIFF_TYPE_DELIVERED_AND_RECEIVED_TARIFF = 2,
+} EmberAfTariffType;
+
+// Enum for TemperatureDisplayMode
+typedef enum
+{
+    EMBER_ZCL_TEMPERATURE_DISPLAY_MODE_CELSIUS    = 0,
+    EMBER_ZCL_TEMPERATURE_DISPLAY_MODE_FAHRENHEIT = 1,
+} EmberAfTemperatureDisplayMode;
+
+// Enum for TemperatureSetpointHold
+typedef enum
+{
+    EMBER_ZCL_TEMPERATURE_SETPOINT_HOLD_SETPOINT_HOLD_OFF = 0,
+    EMBER_ZCL_TEMPERATURE_SETPOINT_HOLD_SETPOINT_HOLD_ON  = 1,
+} EmberAfTemperatureSetpointHold;
+
+// Enum for ThermostatControlSequence
+typedef enum
+{
+    EMBER_ZCL_THERMOSTAT_CONTROL_SEQUENCE_COOLING_ONLY                    = 0,
+    EMBER_ZCL_THERMOSTAT_CONTROL_SEQUENCE_COOLING_WITH_REHEAT             = 1,
+    EMBER_ZCL_THERMOSTAT_CONTROL_SEQUENCE_HEATING_ONLY                    = 2,
+    EMBER_ZCL_THERMOSTAT_CONTROL_SEQUENCE_HEATING_WITH_REHEAT             = 3,
+    EMBER_ZCL_THERMOSTAT_CONTROL_SEQUENCE_COOLING_AND_HEATING             = 4,
+    EMBER_ZCL_THERMOSTAT_CONTROL_SEQUENCE_COOLING_AND_HEATING_WITH_REHEAT = 5,
+} EmberAfThermostatControlSequence;
+
+// Enum for ThermostatRunningMode
+typedef enum
+{
+    EMBER_ZCL_THERMOSTAT_RUNNING_MODE_OFF  = 0,
+    EMBER_ZCL_THERMOSTAT_RUNNING_MODE_COOL = 3,
+    EMBER_ZCL_THERMOSTAT_RUNNING_MODE_HEAT = 4,
+} EmberAfThermostatRunningMode;
+
+// Enum for ThermostatSystemMode
+typedef enum
+{
+    EMBER_ZCL_THERMOSTAT_SYSTEM_MODE_OFF               = 0,
+    EMBER_ZCL_THERMOSTAT_SYSTEM_MODE_AUTO              = 1,
+    EMBER_ZCL_THERMOSTAT_SYSTEM_MODE_COOL              = 3,
+    EMBER_ZCL_THERMOSTAT_SYSTEM_MODE_HEAT              = 4,
+    EMBER_ZCL_THERMOSTAT_SYSTEM_MODE_EMERGENCY_HEATING = 5,
+    EMBER_ZCL_THERMOSTAT_SYSTEM_MODE_PRECOOLING        = 6,
+    EMBER_ZCL_THERMOSTAT_SYSTEM_MODE_FAN_ONLY          = 7,
+} EmberAfThermostatSystemMode;
+
+// Enum for TierBlockMode
+typedef enum
+{
+    EMBER_ZCL_TIER_BLOCK_MODE_ACTIVE_BLOCK                      = 0,
+    EMBER_ZCL_TIER_BLOCK_MODE_ACTIVE_BLOCK_PRICE_TIER           = 1,
+    EMBER_ZCL_TIER_BLOCK_MODE_ACTIVE_BLOCK_PRICE_TIER_THRESHOLD = 2,
+    EMBER_ZCL_TIER_BLOCK_MODE_NOT_USED                          = 255,
+} EmberAfTierBlockMode;
+
+// Enum for TimeEncoding
+typedef enum
+{
+    EMBER_ZCL_TIME_ENCODING_RELATIVE = 0,
+    EMBER_ZCL_TIME_ENCODING_ABSOLUTE = 64,
+} EmberAfTimeEncoding;
+
+// Enum for TunnelingProtocolId
+typedef enum
+{
+    EMBER_ZCL_TUNNELING_PROTOCOL_ID_DLMS_COSEM   = 0,
+    EMBER_ZCL_TUNNELING_PROTOCOL_ID_IEC_61107    = 1,
+    EMBER_ZCL_TUNNELING_PROTOCOL_ID_ANSI_C12     = 2,
+    EMBER_ZCL_TUNNELING_PROTOCOL_ID_M_BUS        = 3,
+    EMBER_ZCL_TUNNELING_PROTOCOL_ID_SML          = 4,
+    EMBER_ZCL_TUNNELING_PROTOCOL_ID_CLIMATE_TALK = 5,
+    EMBER_ZCL_TUNNELING_PROTOCOL_ID_GB_HRGP      = 6,
+    EMBER_ZCL_TUNNELING_PROTOCOL_ID_IP_V4        = 7,
+    EMBER_ZCL_TUNNELING_PROTOCOL_ID_IP_V6        = 8,
+    EMBER_ZCL_TUNNELING_PROTOCOL_ID_TEST         = 199,
+} EmberAfTunnelingProtocolId;
+
+// Enum for TunnelingTransferDataStatus
+typedef enum
+{
+    EMBER_ZCL_TUNNELING_TRANSFER_DATA_STATUS_NO_SUCH_TUNNEL = 0,
+    EMBER_ZCL_TUNNELING_TRANSFER_DATA_STATUS_WRONG_DEVICE   = 1,
+    EMBER_ZCL_TUNNELING_TRANSFER_DATA_STATUS_DATA_OVERFLOW  = 2,
+} EmberAfTunnelingTransferDataStatus;
+
+// Enum for TunnelingTunnelStatus
+typedef enum
+{
+    EMBER_ZCL_TUNNELING_TUNNEL_STATUS_SUCCESS                    = 0,
+    EMBER_ZCL_TUNNELING_TUNNEL_STATUS_BUSY                       = 1,
+    EMBER_ZCL_TUNNELING_TUNNEL_STATUS_NO_MORE_TUNNEL_IDS         = 2,
+    EMBER_ZCL_TUNNELING_TUNNEL_STATUS_PROTOCOL_NOT_SUPPORTED     = 3,
+    EMBER_ZCL_TUNNELING_TUNNEL_STATUS_FLOW_CONTROL_NOT_SUPPORTED = 4,
+} EmberAfTunnelingTunnelStatus;
+
+// Enum for WanStatus
+typedef enum
+{
+    EMBER_ZCL_WAN_STATUS_CONNECTION_TO_WAN_IS_NOT_AVAILABLE = 0,
+    EMBER_ZCL_WAN_STATUS_CONNECTION_TO_WAN_IS_AVAILABLE     = 1,
+} EmberAfWanStatus;
+
+// Enum for WarningEvent
+typedef enum
+{
+    EMBER_ZCL_WARNING_EVENT_WARNING1_OVERALL_POWER_ABOVE_AVAILABLE_POWER_LEVEL                                             = 0,
+    EMBER_ZCL_WARNING_EVENT_WARNING2_OVERALL_POWER_ABOVE_POWER_THRESHOLD_LEVEL                                             = 1,
+    EMBER_ZCL_WARNING_EVENT_WARNING3_OVERALL_POWER_BACK_BELOW_THE_AVAILABLE_POWER_LEVEL                                    = 2,
+    EMBER_ZCL_WARNING_EVENT_WARNING4_OVERALL_POWER_BACK_BELOW_THE_POWER_THRESHOLD_LEVEL                                    = 3,
+    EMBER_ZCL_WARNING_EVENT_WARNING5_OVERALL_POWER_WILL_BE_POTENTIALLY_ABOVE_AVAILABLE_POWER_LEVEL_IF_THE_APPLIANCE_STARTS = 4,
+} EmberAfWarningEvent;
+
+// Enum for WarningMode
+typedef enum
+{
+    EMBER_ZCL_WARNING_MODE_STOP            = 0,
+    EMBER_ZCL_WARNING_MODE_BURGLAR         = 1,
+    EMBER_ZCL_WARNING_MODE_FIRE            = 2,
+    EMBER_ZCL_WARNING_MODE_EMERGENCY       = 3,
+    EMBER_ZCL_WARNING_MODE_POLICE_PANIC    = 4,
+    EMBER_ZCL_WARNING_MODE_FIRE_PANIC      = 5,
+    EMBER_ZCL_WARNING_MODE_EMERGENCY_PANIC = 6,
+} EmberAfWarningMode;
+
+// Enum for WarningStobe
+typedef enum
+{
+    EMBER_ZCL_WARNING_STOBE_NO_STROBE  = 0,
+    EMBER_ZCL_WARNING_STOBE_USE_STROBE = 1,
+} EmberAfWarningStobe;
+
+// Enum for WwahIasZoneEnrollmentMode
+typedef enum
+{
+    EMBER_ZCL_WWAH_IAS_ZONE_ENROLLMENT_MODE_TRIP_TO_PAIR             = 0,
+    EMBER_ZCL_WWAH_IAS_ZONE_ENROLLMENT_MODE_AUTO_ENROLLMENT_RESPONSE = 1,
+    EMBER_ZCL_WWAH_IAS_ZONE_ENROLLMENT_MODE_REQUEST                  = 2,
+} EmberAfWwahIasZoneEnrollmentMode;
+
+// Enum for WwahPowerNotificationReason
+typedef enum
+{
+    EMBER_ZCL_WWAH_POWER_NOTIFICATION_REASON_UNKNOWN               = 0,
+    EMBER_ZCL_WWAH_POWER_NOTIFICATION_REASON_BATTERY               = 1,
+    EMBER_ZCL_WWAH_POWER_NOTIFICATION_REASON_BROWNOUT              = 2,
+    EMBER_ZCL_WWAH_POWER_NOTIFICATION_REASON_WATCHDOG              = 3,
+    EMBER_ZCL_WWAH_POWER_NOTIFICATION_REASON_RESET_PIN             = 4,
+    EMBER_ZCL_WWAH_POWER_NOTIFICATION_REASON_MEMORY_HARDWARE_FAULT = 5,
+    EMBER_ZCL_WWAH_POWER_NOTIFICATION_REASON_SOFWARE_EXCEPTION     = 6,
+    EMBER_ZCL_WWAH_POWER_NOTIFICATION_REASON_OTA_BOOTLOAD_SUCCESS  = 7,
+    EMBER_ZCL_WWAH_POWER_NOTIFICATION_REASON_SOFTWARE_RESET        = 8,
+    EMBER_ZCL_WWAH_POWER_NOTIFICATION_REASON_POWER_BUTTON          = 9,
+    EMBER_ZCL_WWAH_POWER_NOTIFICATION_REASON_TEMPERATURE           = 10,
+    EMBER_ZCL_WWAH_POWER_NOTIFICATION_REASON_BOOTLOAD_FAILURE      = 11,
+} EmberAfWwahPowerNotificationReason;
+
+// Enum for ZigbeeInformationLogicalType
+typedef enum
+{
+    EMBER_ZCL_ZIGBEE_INFORMATION_LOGICAL_TYPE_COORDINATOR = 0,
+    EMBER_ZCL_ZIGBEE_INFORMATION_LOGICAL_TYPE_ROUTER      = 1,
+    EMBER_ZCL_ZIGBEE_INFORMATION_LOGICAL_TYPE_END_DEVICE  = 2,
+} EmberAfZigbeeInformationLogicalType;
+
+// Enum for ZllStatus
+typedef enum
+{
+    EMBER_ZCL_ZLL_STATUS_SUCCESS = 0,
+    EMBER_ZCL_ZLL_STATUS_FAILURE = 1,
+} EmberAfZllStatus;
+
+#define EMBER_AF_ALARM_MASK_GENERAL_HW_FAULT (1)
+#define EMBER_AF_ALARM_MASK_GENERAL_HW_FAULT_OFFSET (0)
+#define EMBER_AF_ALARM_MASK_GENERAL_SW_FAULT (2)
+#define EMBER_AF_ALARM_MASK_GENERAL_SW_FAULT_OFFSET (1)
+#define EMBER_AF_ALERT_COUNT_NUMBER_OF_ALERTS (15)
+#define EMBER_AF_ALERT_COUNT_NUMBER_OF_ALERTS_OFFSET (0)
+#define EMBER_AF_ALERT_COUNT_TYPE_OF_ALERT (240)
+#define EMBER_AF_ALERT_COUNT_TYPE_OF_ALERT_OFFSET (4)
+#define EMBER_AF_ALERT_STRUCTURE_ALERT_ID (255)
+#define EMBER_AF_ALERT_STRUCTURE_ALERT_ID_OFFSET (0)
+#define EMBER_AF_ALERT_STRUCTURE_CATEGORY (3840)
+#define EMBER_AF_ALERT_STRUCTURE_CATEGORY_OFFSET (8)
+#define EMBER_AF_ALERT_STRUCTURE_PRESENCE_RECOVERY (12288)
+#define EMBER_AF_ALERT_STRUCTURE_PRESENCE_RECOVERY_OFFSET (12)
+#define EMBER_AF_ALTERNATE_COST_TRAILING_DIGIT_TRAILING_DIGIT (240)
+#define EMBER_AF_ALTERNATE_COST_TRAILING_DIGIT_TRAILING_DIGIT_OFFSET (4)
+#define EMBER_AF_AMI_CANCEL_CONTROL_TERMINATE_WITH_RANDOMIZATION (1)
+#define EMBER_AF_AMI_CANCEL_CONTROL_TERMINATE_WITH_RANDOMIZATION_OFFSET (0)
+#define EMBER_AF_AMI_COMMAND_OPTIONS_REQUEST_RX_ON_WHEN_IDLE (1)
+#define EMBER_AF_AMI_COMMAND_OPTIONS_REQUEST_RX_ON_WHEN_IDLE_OFFSET (0)
+#define EMBER_AF_AMI_DEVICE_CLASS_HVAC_COMPRESSOR_OR_FURNACE (1)
+#define EMBER_AF_AMI_DEVICE_CLASS_HVAC_COMPRESSOR_OR_FURNACE_OFFSET (0)
+#define EMBER_AF_AMI_DEVICE_CLASS_STRIP_HEAT_BASEBOARD_HEAT (2)
+#define EMBER_AF_AMI_DEVICE_CLASS_STRIP_HEAT_BASEBOARD_HEAT_OFFSET (1)
+#define EMBER_AF_AMI_DEVICE_CLASS_WATER_HEATER (4)
+#define EMBER_AF_AMI_DEVICE_CLASS_WATER_HEATER_OFFSET (2)
+#define EMBER_AF_AMI_DEVICE_CLASS_POOL_PUMP_SPA_JACUZZI (8)
+#define EMBER_AF_AMI_DEVICE_CLASS_POOL_PUMP_SPA_JACUZZI_OFFSET (3)
+#define EMBER_AF_AMI_DEVICE_CLASS_SMART_APPLIANCES (16)
+#define EMBER_AF_AMI_DEVICE_CLASS_SMART_APPLIANCES_OFFSET (4)
+#define EMBER_AF_AMI_DEVICE_CLASS_IRRIGATION_PUMP (32)
+#define EMBER_AF_AMI_DEVICE_CLASS_IRRIGATION_PUMP_OFFSET (5)
+#define EMBER_AF_AMI_DEVICE_CLASS_MANAGED_C_AND_I_LOADS (64)
+#define EMBER_AF_AMI_DEVICE_CLASS_MANAGED_C_AND_I_LOADS_OFFSET (6)
+#define EMBER_AF_AMI_DEVICE_CLASS_SIMPLE_MISC_LOADS (128)
+#define EMBER_AF_AMI_DEVICE_CLASS_SIMPLE_MISC_LOADS_OFFSET (7)
+#define EMBER_AF_AMI_DEVICE_CLASS_EXTERIOR_LIGHTING (256)
+#define EMBER_AF_AMI_DEVICE_CLASS_EXTERIOR_LIGHTING_OFFSET (8)
+#define EMBER_AF_AMI_DEVICE_CLASS_INTERIOR_LIGHTING (512)
+#define EMBER_AF_AMI_DEVICE_CLASS_INTERIOR_LIGHTING_OFFSET (9)
+#define EMBER_AF_AMI_DEVICE_CLASS_ELECTRIC_VEHICLE (1024)
+#define EMBER_AF_AMI_DEVICE_CLASS_ELECTRIC_VEHICLE_OFFSET (10)
+#define EMBER_AF_AMI_DEVICE_CLASS_GENERATION_SYSTEMS (2048)
+#define EMBER_AF_AMI_DEVICE_CLASS_GENERATION_SYSTEMS_OFFSET (11)
+#define EMBER_AF_AMI_EVENT_CONTROL_RANDOMIZED_START_TIME (1)
+#define EMBER_AF_AMI_EVENT_CONTROL_RANDOMIZED_START_TIME_OFFSET (0)
+#define EMBER_AF_AMI_EVENT_CONTROL_RANDOMIZED_END_TIME (2)
+#define EMBER_AF_AMI_EVENT_CONTROL_RANDOMIZED_END_TIME_OFFSET (1)
+#define EMBER_AF_AMI_METER_STATUS_CHECK_METER (1)
+#define EMBER_AF_AMI_METER_STATUS_CHECK_METER_OFFSET (0)
+#define EMBER_AF_AMI_METER_STATUS_LOW_BATTERY (2)
+#define EMBER_AF_AMI_METER_STATUS_LOW_BATTERY_OFFSET (1)
+#define EMBER_AF_AMI_METER_STATUS_TAMPER_DETECT (4)
+#define EMBER_AF_AMI_METER_STATUS_TAMPER_DETECT_OFFSET (2)
+#define EMBER_AF_AMI_METER_STATUS_POWER_FAILURE (8)
+#define EMBER_AF_AMI_METER_STATUS_POWER_FAILURE_OFFSET (3)
+#define EMBER_AF_AMI_METER_STATUS_POWER_QUALITY (16)
+#define EMBER_AF_AMI_METER_STATUS_POWER_QUALITY_OFFSET (4)
+#define EMBER_AF_AMI_METER_STATUS_LEAK_DETECT (32)
+#define EMBER_AF_AMI_METER_STATUS_LEAK_DETECT_OFFSET (5)
+#define EMBER_AF_AMI_METER_STATUS_SERVICE_DISCONNECT_OPEN (64)
+#define EMBER_AF_AMI_METER_STATUS_SERVICE_DISCONNECT_OPEN_OFFSET (6)
+#define EMBER_AF_AMI_METER_STATUS_RESERVED (128)
+#define EMBER_AF_AMI_METER_STATUS_RESERVED_OFFSET (7)
+#define EMBER_AF_AUXILIARY_LOAD_SWITCH_STATE_AUXILIARY_SWITCH1 (1)
+#define EMBER_AF_AUXILIARY_LOAD_SWITCH_STATE_AUXILIARY_SWITCH1_OFFSET (0)
+#define EMBER_AF_AUXILIARY_LOAD_SWITCH_STATE_AUXILIARY_SWITCH2 (2)
+#define EMBER_AF_AUXILIARY_LOAD_SWITCH_STATE_AUXILIARY_SWITCH2_OFFSET (1)
+#define EMBER_AF_AUXILIARY_LOAD_SWITCH_STATE_AUXILIARY_SWITCH3 (4)
+#define EMBER_AF_AUXILIARY_LOAD_SWITCH_STATE_AUXILIARY_SWITCH3_OFFSET (2)
+#define EMBER_AF_AUXILIARY_LOAD_SWITCH_STATE_AUXILIARY_SWITCH4 (8)
+#define EMBER_AF_AUXILIARY_LOAD_SWITCH_STATE_AUXILIARY_SWITCH4_OFFSET (3)
+#define EMBER_AF_AUXILIARY_LOAD_SWITCH_STATE_AUXILIARY_SWITCH5 (16)
+#define EMBER_AF_AUXILIARY_LOAD_SWITCH_STATE_AUXILIARY_SWITCH5_OFFSET (4)
+#define EMBER_AF_AUXILIARY_LOAD_SWITCH_STATE_AUXILIARY_SWITCH6 (32)
+#define EMBER_AF_AUXILIARY_LOAD_SWITCH_STATE_AUXILIARY_SWITCH6_OFFSET (5)
+#define EMBER_AF_AUXILIARY_LOAD_SWITCH_STATE_AUXILIARY_SWITCH7 (64)
+#define EMBER_AF_AUXILIARY_LOAD_SWITCH_STATE_AUXILIARY_SWITCH7_OFFSET (6)
+#define EMBER_AF_AUXILIARY_LOAD_SWITCH_STATE_AUXILIARY_SWITCH8 (128)
+#define EMBER_AF_AUXILIARY_LOAD_SWITCH_STATE_AUXILIARY_SWITCH8_OFFSET (7)
+#define EMBER_AF_BALLAST_STATUS_NON_OPERATIONAL (1)
+#define EMBER_AF_BALLAST_STATUS_NON_OPERATIONAL_OFFSET (0)
+#define EMBER_AF_BALLAST_STATUS_LAMP_NOT_IN_SOCKET (2)
+#define EMBER_AF_BALLAST_STATUS_LAMP_NOT_IN_SOCKET_OFFSET (1)
+#define EMBER_AF_BARRIER_CONTROL_CAPABILITIES_PARTIAL_BARRIER (1)
+#define EMBER_AF_BARRIER_CONTROL_CAPABILITIES_PARTIAL_BARRIER_OFFSET (0)
+#define EMBER_AF_BARRIER_CONTROL_SAFETY_STATUS_REMOTE_LOCKOUT (1)
+#define EMBER_AF_BARRIER_CONTROL_SAFETY_STATUS_REMOTE_LOCKOUT_OFFSET (0)
+#define EMBER_AF_BARRIER_CONTROL_SAFETY_STATUS_TEMPER_DETECTED (2)
+#define EMBER_AF_BARRIER_CONTROL_SAFETY_STATUS_TEMPER_DETECTED_OFFSET (1)
+#define EMBER_AF_BARRIER_CONTROL_SAFETY_STATUS_FAILED_COMMUNICATION (4)
+#define EMBER_AF_BARRIER_CONTROL_SAFETY_STATUS_FAILED_COMMUNICATION_OFFSET (2)
+#define EMBER_AF_BARRIER_CONTROL_SAFETY_STATUS_POSITION_FAILURE (8)
+#define EMBER_AF_BARRIER_CONTROL_SAFETY_STATUS_POSITION_FAILURE_OFFSET (3)
+#define EMBER_AF_BATTERY_ALARM_MASK_VOLTAGE_TOO_LOW (1)
+#define EMBER_AF_BATTERY_ALARM_MASK_VOLTAGE_TOO_LOW_OFFSET (0)
+#define EMBER_AF_BILL_TRAILING_DIGIT_TRAILING_DIGIT (240)
+#define EMBER_AF_BILL_TRAILING_DIGIT_TRAILING_DIGIT_OFFSET (4)
+#define EMBER_AF_BILLING_PERIOD_DURATION_DURATION (4194303)
+#define EMBER_AF_BILLING_PERIOD_DURATION_DURATION_OFFSET (0)
+#define EMBER_AF_BILLING_PERIOD_DURATION_UNITS (12582912)
+#define EMBER_AF_BILLING_PERIOD_DURATION_UNITS_OFFSET (22)
+#define EMBER_AF_BILLING_PERIOD_DURATION_TYPE_TIMEBASE (15)
+#define EMBER_AF_BILLING_PERIOD_DURATION_TYPE_TIMEBASE_OFFSET (0)
+#define EMBER_AF_BILLING_PERIOD_DURATION_TYPE_CONTROL (240)
+#define EMBER_AF_BILLING_PERIOD_DURATION_TYPE_CONTROL_OFFSET (4)
+#define EMBER_AF_BLOCK_PERIOD_CONTROL_PRICE_ACKNOWLEDGEMENT_REQUIREMENT (1)
+#define EMBER_AF_BLOCK_PERIOD_CONTROL_PRICE_ACKNOWLEDGEMENT_REQUIREMENT_OFFSET (0)
+#define EMBER_AF_BLOCK_PERIOD_CONTROL_REPEATING_BLOCK (2)
+#define EMBER_AF_BLOCK_PERIOD_CONTROL_REPEATING_BLOCK_OFFSET (1)
+#define EMBER_AF_BLOCK_PERIOD_DURATION_TYPE_TIMEBASE (15)
+#define EMBER_AF_BLOCK_PERIOD_DURATION_TYPE_TIMEBASE_OFFSET (0)
+#define EMBER_AF_BLOCK_PERIOD_DURATION_TYPE_CONTROL (240)
+#define EMBER_AF_BLOCK_PERIOD_DURATION_TYPE_CONTROL_OFFSET (4)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER1 (2)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER1_OFFSET (1)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER2 (4)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER2_OFFSET (2)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER3 (8)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER3_OFFSET (3)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER4 (16)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER4_OFFSET (4)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER5 (32)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER5_OFFSET (5)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER6 (64)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER6_OFFSET (6)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER7 (128)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER7_OFFSET (7)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER8 (256)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER8_OFFSET (8)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER9 (512)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER9_OFFSET (9)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER10 (1024)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER10_OFFSET (10)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER11 (2048)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER11_OFFSET (11)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER12 (4096)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER12_OFFSET (12)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER13 (8192)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER13_OFFSET (13)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER14 (16384)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER14_OFFSET (14)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER15 (32768)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER15_OFFSET (15)
+#define EMBER_AF_BLOCK_THRESHOLD_SUB_PAYLOAD_CONTROL_APPLY_TO_ALL_TOU_TIERS_OR_WHEN_BLOCK_ONLY_CHARGING (1)
+#define EMBER_AF_BLOCK_THRESHOLD_SUB_PAYLOAD_CONTROL_APPLY_TO_ALL_TOU_TIERS_OR_WHEN_BLOCK_ONLY_CHARGING_OFFSET (0)
+#define EMBER_AF_CO2_TRAILING_DIGIT_TRAILING_DIGIT (240)
+#define EMBER_AF_CO2_TRAILING_DIGIT_TRAILING_DIGIT_OFFSET (4)
+#define EMBER_AF_CALORIFIC_VALUE_TRAILING_DIGIT_TRAILING_DIGIT (240)
+#define EMBER_AF_CALORIFIC_VALUE_TRAILING_DIGIT_TRAILING_DIGIT_OFFSET (4)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL0 (1)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL0_OFFSET (0)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL0 (1)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL0_OFFSET (0)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL27 (1)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL27_OFFSET (0)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL35 (1)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL35_OFFSET (0)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL0 (1)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL0_OFFSET (0)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL1 (2)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL1_OFFSET (1)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL1 (2)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL1_OFFSET (1)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL28 (2)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL28_OFFSET (1)
+#define EMBER_AF_CHANNEL_MASK_853_CHANNEL36 (2)
+#define EMBER_AF_CHANNEL_MASK_853_CHANNEL36_OFFSET (1)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL1 (2)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL1_OFFSET (1)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL2 (4)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL2_OFFSET (2)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL2 (4)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL2_OFFSET (2)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL29 (4)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL29_OFFSET (2)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL37 (4)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL37_OFFSET (2)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL2 (4)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL2_OFFSET (2)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL3 (8)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL3_OFFSET (3)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL3 (8)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL3_OFFSET (3)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL30 (8)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL30_OFFSET (3)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL38 (8)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL38_OFFSET (3)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL3 (8)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL3_OFFSET (3)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL4 (16)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL4_OFFSET (4)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL4 (16)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL4_OFFSET (4)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL31 (16)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL31_OFFSET (4)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL39 (16)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL39_OFFSET (4)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL4 (16)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL4_OFFSET (4)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL5 (32)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL5_OFFSET (5)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL5 (32)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL5_OFFSET (5)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL32 (32)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL32_OFFSET (5)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL40 (32)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL40_OFFSET (5)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL5 (32)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL5_OFFSET (5)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL6 (64)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL6_OFFSET (6)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL6 (64)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL6_OFFSET (6)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL33 (64)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL33_OFFSET (6)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL41 (64)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL41_OFFSET (6)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL6 (64)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL6_OFFSET (6)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL7 (128)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL7_OFFSET (7)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL7 (128)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL7_OFFSET (7)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL34 (128)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL34_OFFSET (7)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL42 (128)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL42_OFFSET (7)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL7 (128)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL7_OFFSET (7)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL8 (256)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL8_OFFSET (8)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL8 (256)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL8_OFFSET (8)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL62 (256)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL62_OFFSET (8)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL43 (256)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL43_OFFSET (8)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL8 (256)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL8_OFFSET (8)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL9 (512)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL9_OFFSET (9)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL9 (512)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL9_OFFSET (9)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL44 (512)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL44_OFFSET (9)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL9 (512)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL9_OFFSET (9)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL10 (1024)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL10_OFFSET (10)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL10 (1024)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL10_OFFSET (10)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL45 (1024)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL45_OFFSET (10)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL10 (1024)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL10_OFFSET (10)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL11 (2048)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL11_OFFSET (11)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL11 (2048)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL11_OFFSET (11)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL46 (2048)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL46_OFFSET (11)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL11 (2048)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL11_OFFSET (11)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL12 (4096)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL12_OFFSET (12)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL12 (4096)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL12_OFFSET (12)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL47 (4096)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL47_OFFSET (12)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL12 (4096)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL12_OFFSET (12)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL13 (8192)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL13_OFFSET (13)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL13 (8192)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL13_OFFSET (13)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL48 (8192)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL48_OFFSET (13)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL13 (8192)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL13_OFFSET (13)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL14 (16384)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL14_OFFSET (14)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL14 (16384)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL14_OFFSET (14)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL49 (16384)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL49_OFFSET (14)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL14 (16384)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL14_OFFSET (14)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL15 (32768)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL15_OFFSET (15)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL15 (32768)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL15_OFFSET (15)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL50 (32768)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL50_OFFSET (15)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL15 (32768)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL15_OFFSET (15)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL16 (65536)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL16_OFFSET (16)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL16 (65536)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL16_OFFSET (16)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL51 (65536)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL51_OFFSET (16)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL16 (65536)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL16_OFFSET (16)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL17 (131072)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL17_OFFSET (17)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL17 (131072)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL17_OFFSET (17)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL52 (131072)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL52_OFFSET (17)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL17 (131072)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL17_OFFSET (17)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL18 (262144)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL18_OFFSET (18)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL18 (262144)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL18_OFFSET (18)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL53 (262144)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL53_OFFSET (18)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL18 (262144)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL18_OFFSET (18)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL19 (524288)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL19_OFFSET (19)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL19 (524288)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL19_OFFSET (19)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL54 (524288)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL54_OFFSET (19)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL19 (524288)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL19_OFFSET (19)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL20 (1048576)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL20_OFFSET (20)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL20 (1048576)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL20_OFFSET (20)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL55 (1048576)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL55_OFFSET (20)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL20 (1048576)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL20_OFFSET (20)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL21 (2097152)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL21_OFFSET (21)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL21 (2097152)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL21_OFFSET (21)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL56 (2097152)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL56_OFFSET (21)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL21 (2097152)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL21_OFFSET (21)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL22 (4194304)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL22_OFFSET (22)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL22 (4194304)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL22_OFFSET (22)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL57 (4194304)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL57_OFFSET (22)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL22 (4194304)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL22_OFFSET (22)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL23 (8388608)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL23_OFFSET (23)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL23 (8388608)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL23_OFFSET (23)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL58 (8388608)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL58_OFFSET (23)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL23 (8388608)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL23_OFFSET (23)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL24 (16777216)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL24_OFFSET (24)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL24 (16777216)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL24_OFFSET (24)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL59 (16777216)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL59_OFFSET (24)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL24 (16777216)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL24_OFFSET (24)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL25 (33554432)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL25_OFFSET (25)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL25 (33554432)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL25_OFFSET (25)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL60 (33554432)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL60_OFFSET (25)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL25 (33554432)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL25_OFFSET (25)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL26 (67108864)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL26_OFFSET (26)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL26 (67108864)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL26_OFFSET (26)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL61 (67108864)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL61_OFFSET (26)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL26 (67108864)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL26_OFFSET (26)
+#define EMBER_AF_CHANNEL_MASK_PAGE (4160749568)
+#define EMBER_AF_CHANNEL_MASK_PAGE_OFFSET (27)
+#define EMBER_AF_CLEARED_EVENTS_LOGS_ALL_LOGS_CLEARED (1)
+#define EMBER_AF_CLEARED_EVENTS_LOGS_ALL_LOGS_CLEARED_OFFSET (0)
+#define EMBER_AF_CLEARED_EVENTS_LOGS_TAMPER_LOG_CLEARED (2)
+#define EMBER_AF_CLEARED_EVENTS_LOGS_TAMPER_LOG_CLEARED_OFFSET (1)
+#define EMBER_AF_CLEARED_EVENTS_LOGS_FAULT_LOG_CLEARED (4)
+#define EMBER_AF_CLEARED_EVENTS_LOGS_FAULT_LOG_CLEARED_OFFSET (2)
+#define EMBER_AF_CLEARED_EVENTS_LOGS_GENERAL_EVENT_LOG_CLEARED (8)
+#define EMBER_AF_CLEARED_EVENTS_LOGS_GENERAL_EVENT_LOG_CLEARED_OFFSET (3)
+#define EMBER_AF_CLEARED_EVENTS_LOGS_SECURITY_EVENT_LOG_CLEARED (16)
+#define EMBER_AF_CLEARED_EVENTS_LOGS_SECURITY_EVENT_LOG_CLEARED_OFFSET (4)
+#define EMBER_AF_CLEARED_EVENTS_LOGS_NETWORK_EVENT_LOG_CLEARED (32)
+#define EMBER_AF_CLEARED_EVENTS_LOGS_NETWORK_EVENT_LOG_CLEARED_OFFSET (5)
+#define EMBER_AF_COLOR_CAPABILITIES_HUE_SATURATION_SUPPORTED (1)
+#define EMBER_AF_COLOR_CAPABILITIES_HUE_SATURATION_SUPPORTED_OFFSET (0)
+#define EMBER_AF_COLOR_CAPABILITIES_ENHANCED_HUE_SUPPORTED (2)
+#define EMBER_AF_COLOR_CAPABILITIES_ENHANCED_HUE_SUPPORTED_OFFSET (1)
+#define EMBER_AF_COLOR_CAPABILITIES_COLOR_LOOP_SUPPORTED (4)
+#define EMBER_AF_COLOR_CAPABILITIES_COLOR_LOOP_SUPPORTED_OFFSET (2)
+#define EMBER_AF_COLOR_CAPABILITIES_XY_ATTRIBUTES_SUPPORTED (8)
+#define EMBER_AF_COLOR_CAPABILITIES_XY_ATTRIBUTES_SUPPORTED_OFFSET (3)
+#define EMBER_AF_COLOR_CAPABILITIES_COLOR_TEMPERATURE_SUPPORTED (16)
+#define EMBER_AF_COLOR_CAPABILITIES_COLOR_TEMPERATURE_SUPPORTED_OFFSET (4)
+#define EMBER_AF_COLOR_LOOP_UPDATE_FLAGS_UPDATE_ACTION (1)
+#define EMBER_AF_COLOR_LOOP_UPDATE_FLAGS_UPDATE_ACTION_OFFSET (0)
+#define EMBER_AF_COLOR_LOOP_UPDATE_FLAGS_UPDATE_DIRECTION (2)
+#define EMBER_AF_COLOR_LOOP_UPDATE_FLAGS_UPDATE_DIRECTION_OFFSET (1)
+#define EMBER_AF_COLOR_LOOP_UPDATE_FLAGS_UPDATE_TIME (4)
+#define EMBER_AF_COLOR_LOOP_UPDATE_FLAGS_UPDATE_TIME_OFFSET (2)
+#define EMBER_AF_COLOR_LOOP_UPDATE_FLAGS_UPDATE_START_HUE (8)
+#define EMBER_AF_COLOR_LOOP_UPDATE_FLAGS_UPDATE_START_HUE_OFFSET (3)
+#define EMBER_AF_CONVERSION_FACTOR_TRAILING_DIGIT_TRAILING_DIGIT (240)
+#define EMBER_AF_CONVERSION_FACTOR_TRAILING_DIGIT_TRAILING_DIGIT_OFFSET (4)
+#define EMBER_AF_CREDIT_STATUS_CREDIT_OK (1)
+#define EMBER_AF_CREDIT_STATUS_CREDIT_OK_OFFSET (0)
+#define EMBER_AF_CREDIT_STATUS_LOW_CREDIT (2)
+#define EMBER_AF_CREDIT_STATUS_LOW_CREDIT_OFFSET (1)
+#define EMBER_AF_CREDIT_STATUS_EMERGENCY_CREDIT_ENABLED (4)
+#define EMBER_AF_CREDIT_STATUS_EMERGENCY_CREDIT_ENABLED_OFFSET (2)
+#define EMBER_AF_CREDIT_STATUS_EMERGENCY_CREDIT_AVAILABLE (8)
+#define EMBER_AF_CREDIT_STATUS_EMERGENCY_CREDIT_AVAILABLE_OFFSET (3)
+#define EMBER_AF_CREDIT_STATUS_EMERGENCY_CREDIT_SELECTED (16)
+#define EMBER_AF_CREDIT_STATUS_EMERGENCY_CREDIT_SELECTED_OFFSET (4)
+#define EMBER_AF_CREDIT_STATUS_EMERGENCY_CREDIT_IN_USE (32)
+#define EMBER_AF_CREDIT_STATUS_EMERGENCY_CREDIT_IN_USE_OFFSET (5)
+#define EMBER_AF_CREDIT_STATUS_CREDIT_EXHAUSTED (64)
+#define EMBER_AF_CREDIT_STATUS_CREDIT_EXHAUSTED_OFFSET (6)
+#define EMBER_AF_CURRENCY_CHANGE_CONTROL_CLEAR_BILLING_INFO (1)
+#define EMBER_AF_CURRENCY_CHANGE_CONTROL_CLEAR_BILLING_INFO_OFFSET (0)
+#define EMBER_AF_CURRENCY_CHANGE_CONTROL_CONVERT_BILLING_INFO_USING_NEW_CURRENCY (2)
+#define EMBER_AF_CURRENCY_CHANGE_CONTROL_CONVERT_BILLING_INFO_USING_NEW_CURRENCY_OFFSET (1)
+#define EMBER_AF_CURRENCY_CHANGE_CONTROL_CLEAR_OLD_CONSUMPTION_DATA (4)
+#define EMBER_AF_CURRENCY_CHANGE_CONTROL_CLEAR_OLD_CONSUMPTION_DATA_OFFSET (2)
+#define EMBER_AF_CURRENCY_CHANGE_CONTROL_CONVERT_OLD_CONSUMPTION_DATA_USING_NEW_CURRENCY (8)
+#define EMBER_AF_CURRENCY_CHANGE_CONTROL_CONVERT_OLD_CONSUMPTION_DATA_USING_NEW_CURRENCY_OFFSET (3)
+#define EMBER_AF_CURRENT_EVENT_STATUS_RANDOMIZED_START_TIME (1)
+#define EMBER_AF_CURRENT_EVENT_STATUS_RANDOMIZED_START_TIME_OFFSET (0)
+#define EMBER_AF_CURRENT_EVENT_STATUS_RANDOMIZED_DURATION (2)
+#define EMBER_AF_CURRENT_EVENT_STATUS_RANDOMIZED_DURATION_OFFSET (1)
+#define EMBER_AF_CURRENT_EVENT_STATUS_EXTENDED_BITS_PRESENT (4)
+#define EMBER_AF_CURRENT_EVENT_STATUS_EXTENDED_BITS_PRESENT_OFFSET (2)
+#define EMBER_AF_CURRENT_EVENT_STATUS_EVENT_ACTIVE (8)
+#define EMBER_AF_CURRENT_EVENT_STATUS_EVENT_ACTIVE_OFFSET (3)
+#define EMBER_AF_CURRENT_EVENT_STATUS_DEVICE_PARTICIPATING_IN_EVENT (16)
+#define EMBER_AF_CURRENT_EVENT_STATUS_DEVICE_PARTICIPATING_IN_EVENT_OFFSET (4)
+#define EMBER_AF_CURRENT_EVENT_STATUS_REDUCING_LOAD (32)
+#define EMBER_AF_CURRENT_EVENT_STATUS_REDUCING_LOAD_OFFSET (5)
+#define EMBER_AF_CURRENT_EVENT_STATUS_ON_AT_END_OF_EVENT (64)
+#define EMBER_AF_CURRENT_EVENT_STATUS_ON_AT_END_OF_EVENT_OFFSET (6)
+#define EMBER_AF_DAY_OF_WEEK_SUNDAY (1)
+#define EMBER_AF_DAY_OF_WEEK_SUNDAY_OFFSET (0)
+#define EMBER_AF_DAY_OF_WEEK_MONDAY (2)
+#define EMBER_AF_DAY_OF_WEEK_MONDAY_OFFSET (1)
+#define EMBER_AF_DAY_OF_WEEK_TUESDAY (4)
+#define EMBER_AF_DAY_OF_WEEK_TUESDAY_OFFSET (2)
+#define EMBER_AF_DAY_OF_WEEK_WEDNESDAY (8)
+#define EMBER_AF_DAY_OF_WEEK_WEDNESDAY_OFFSET (3)
+#define EMBER_AF_DAY_OF_WEEK_THURSDAY (16)
+#define EMBER_AF_DAY_OF_WEEK_THURSDAY_OFFSET (4)
+#define EMBER_AF_DAY_OF_WEEK_FRIDAY (32)
+#define EMBER_AF_DAY_OF_WEEK_FRIDAY_OFFSET (5)
+#define EMBER_AF_DAY_OF_WEEK_SATURDAY (64)
+#define EMBER_AF_DAY_OF_WEEK_SATURDAY_OFFSET (6)
+#define EMBER_AF_DAY_OF_WEEK_AWAY_OR_VACATION (128)
+#define EMBER_AF_DAY_OF_WEEK_AWAY_OR_VACATION_OFFSET (7)
+#define EMBER_AF_DEVICE_TEMP_ALARM_MASK_TOO_LOW (1)
+#define EMBER_AF_DEVICE_TEMP_ALARM_MASK_TOO_LOW_OFFSET (0)
+#define EMBER_AF_DEVICE_TEMP_ALARM_MASK_TOO_HIGH (2)
+#define EMBER_AF_DEVICE_TEMP_ALARM_MASK_TOO_HIGH_OFFSET (1)
+#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_SUNDAY (1)
+#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_SUNDAY_OFFSET (0)
+#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_MONDAY (2)
+#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_MONDAY_OFFSET (1)
+#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_TUESDAY (4)
+#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_TUESDAY_OFFSET (2)
+#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_WEDNESDAY (8)
+#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_WEDNESDAY_OFFSET (3)
+#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_THURSDAY (16)
+#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_THURSDAY_OFFSET (4)
+#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_FRIDAY (32)
+#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_FRIDAY_OFFSET (5)
+#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_SATURDAY (64)
+#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_SATURDAY_OFFSET (6)
+#define EMBER_AF_ENERGY_FORMATTING_NUMBER_OF_DIGITS_TO_THE_RIGHT_OF_THE_DECIMAL_POINT (7)
+#define EMBER_AF_ENERGY_FORMATTING_NUMBER_OF_DIGITS_TO_THE_RIGHT_OF_THE_DECIMAL_POINT_OFFSET (0)
+#define EMBER_AF_ENERGY_FORMATTING_NUMBER_OF_DIGITS_TO_THE_LEFT_OF_THE_DECIMAL_POINT (120)
+#define EMBER_AF_ENERGY_FORMATTING_NUMBER_OF_DIGITS_TO_THE_LEFT_OF_THE_DECIMAL_POINT_OFFSET (3)
+#define EMBER_AF_ENERGY_FORMATTING_SUPPRESS_LEADING_ZEROS (128)
+#define EMBER_AF_ENERGY_FORMATTING_SUPPRESS_LEADING_ZEROS_OFFSET (7)
+#define EMBER_AF_EVENT_ACTION_CONTROL_REPORT_EVENT_TO_HAN_DEVICES (1)
+#define EMBER_AF_EVENT_ACTION_CONTROL_REPORT_EVENT_TO_HAN_DEVICES_OFFSET (0)
+#define EMBER_AF_EVENT_ACTION_CONTROL_REPORT_EVENT_TO_WAN (2)
+#define EMBER_AF_EVENT_ACTION_CONTROL_REPORT_EVENT_TO_WAN_OFFSET (1)
+#define EMBER_AF_EVENT_CONFIGURATION_LOG_ACTION (7)
+#define EMBER_AF_EVENT_CONFIGURATION_LOG_ACTION_OFFSET (0)
+#define EMBER_AF_EVENT_CONFIGURATION_PUSH_EVENT_TO_WAN (8)
+#define EMBER_AF_EVENT_CONFIGURATION_PUSH_EVENT_TO_WAN_OFFSET (3)
+#define EMBER_AF_EVENT_CONFIGURATION_PUSH_EVENT_TO_HAN (16)
+#define EMBER_AF_EVENT_CONFIGURATION_PUSH_EVENT_TO_HAN_OFFSET (4)
+#define EMBER_AF_EVENT_CONFIGURATION_RAISE_ALARM_ZIG_BEE (32)
+#define EMBER_AF_EVENT_CONFIGURATION_RAISE_ALARM_ZIG_BEE_OFFSET (5)
+#define EMBER_AF_EVENT_CONFIGURATION_RAISE_ALARM_PHYSICAL (64)
+#define EMBER_AF_EVENT_CONFIGURATION_RAISE_ALARM_PHYSICAL_OFFSET (6)
+#define EMBER_AF_EVENT_CONTROL_LOG_ID_LOG_ID (15)
+#define EMBER_AF_EVENT_CONTROL_LOG_ID_LOG_ID_OFFSET (0)
+#define EMBER_AF_EVENT_CONTROL_LOG_ID_EVENT_CONTROL (240)
+#define EMBER_AF_EVENT_CONTROL_LOG_ID_EVENT_CONTROL_OFFSET (4)
+#define EMBER_AF_FRIENDLY_CREDIT_FRIENDLY_CREDIT_ENABLED (1)
+#define EMBER_AF_FRIENDLY_CREDIT_FRIENDLY_CREDIT_ENABLED_OFFSET (0)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_NEW_OTA_FIRMWARE (1)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_NEW_OTA_FIRMWARE_OFFSET (0)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_CBKE_UPDATE_REQUEST (2)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_CBKE_UPDATE_REQUEST_OFFSET (1)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_TIME_SYNC (4)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_TIME_SYNC_OFFSET (2)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_STAY_AWAKE_REQUEST_HAN (16)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_STAY_AWAKE_REQUEST_HAN_OFFSET (4)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_STAY_AWAKE_REQUEST_WAN (32)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_STAY_AWAKE_REQUEST_WAN_OFFSET (5)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_PUSH_HISTORICAL_METERING_DATA_ATTRIBUTE_SET (448)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_PUSH_HISTORICAL_METERING_DATA_ATTRIBUTE_SET_OFFSET (6)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_PUSH_HISTORICAL_PREPAYMENT_DATA_ATTRIBUTE_SET (3584)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_PUSH_HISTORICAL_PREPAYMENT_DATA_ATTRIBUTE_SET_OFFSET (9)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_PUSH_ALL_STATIC_DATA_BASIC_CLUSTER (4096)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_PUSH_ALL_STATIC_DATA_BASIC_CLUSTER_OFFSET (12)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_PUSH_ALL_STATIC_DATA_METERING_CLUSTER (8192)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_PUSH_ALL_STATIC_DATA_METERING_CLUSTER_OFFSET (13)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_PUSH_ALL_STATIC_DATA_PREPAYMENT_CLUSTER (16384)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_PUSH_ALL_STATIC_DATA_PREPAYMENT_CLUSTER_OFFSET (14)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_NETWORK_KEY_ACTIVE (32768)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_NETWORK_KEY_ACTIVE_OFFSET (15)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_DISPLAY_MESSAGE (65536)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_DISPLAY_MESSAGE_OFFSET (16)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_CANCEL_ALL_MESSAGES (131072)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_CANCEL_ALL_MESSAGES_OFFSET (17)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_CHANGE_SUPPLY (262144)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_CHANGE_SUPPLY_OFFSET (18)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_LOCAL_CHANGE_SUPPLY (524288)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_LOCAL_CHANGE_SUPPLY_OFFSET (19)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_SET_UNCONTROLLED_FLOW_THRESHOLD (1048576)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_SET_UNCONTROLLED_FLOW_THRESHOLD_OFFSET (20)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_TUNNEL_MESSAGE_PENDING (2097152)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_TUNNEL_MESSAGE_PENDING_OFFSET (21)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_GET_SNAPSHOT (4194304)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_GET_SNAPSHOT_OFFSET (22)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_GET_SAMPLED_DATA (8388608)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_GET_SAMPLED_DATA_OFFSET (23)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_NEW_SUB_GHZ_CHANNEL_MASKS_AVAILABLE (16777216)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_NEW_SUB_GHZ_CHANNEL_MASKS_AVAILABLE_OFFSET (24)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_ENERGY_SCAN_PENDING (33554432)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_ENERGY_SCAN_PENDING_OFFSET (25)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_CHANNEL_CHANGE_PENDING (67108864)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_CHANNEL_CHANGE_PENDING_OFFSET (26)
+#define EMBER_AF_GET_LOCATION_DATA_FLAGS_ABSOLUTE_ONLY (1)
+#define EMBER_AF_GET_LOCATION_DATA_FLAGS_ABSOLUTE_ONLY_OFFSET (0)
+#define EMBER_AF_GET_LOCATION_DATA_FLAGS_RECALCULATE (2)
+#define EMBER_AF_GET_LOCATION_DATA_FLAGS_RECALCULATE_OFFSET (1)
+#define EMBER_AF_GET_LOCATION_DATA_FLAGS_BROADCAST (4)
+#define EMBER_AF_GET_LOCATION_DATA_FLAGS_BROADCAST_OFFSET (2)
+#define EMBER_AF_GET_LOCATION_DATA_FLAGS_BROADCAST_RESPONSE (8)
+#define EMBER_AF_GET_LOCATION_DATA_FLAGS_BROADCAST_RESPONSE_OFFSET (3)
+#define EMBER_AF_GET_LOCATION_DATA_FLAGS_COMPACT_RESPONSE (16)
+#define EMBER_AF_GET_LOCATION_DATA_FLAGS_COMPACT_RESPONSE_OFFSET (4)
+#define EMBER_AF_GP_APPLICATION_INFORMATION_MANUFACTURE_ID_PRESENT (1)
+#define EMBER_AF_GP_APPLICATION_INFORMATION_MANUFACTURE_ID_PRESENT_OFFSET (0)
+#define EMBER_AF_GP_APPLICATION_INFORMATION_MODEL_ID_PRESENT (2)
+#define EMBER_AF_GP_APPLICATION_INFORMATION_MODEL_ID_PRESENT_OFFSET (1)
+#define EMBER_AF_GP_APPLICATION_INFORMATION_GPD_COMMANDS_PRESENT (4)
+#define EMBER_AF_GP_APPLICATION_INFORMATION_GPD_COMMANDS_PRESENT_OFFSET (2)
+#define EMBER_AF_GP_APPLICATION_INFORMATION_CLUSTER_LIST_PRESENT (8)
+#define EMBER_AF_GP_APPLICATION_INFORMATION_CLUSTER_LIST_PRESENT_OFFSET (3)
+#define EMBER_AF_GP_APPLICATION_INFORMATION_SWITCH_INFORMATION_PRESENT (16)
+#define EMBER_AF_GP_APPLICATION_INFORMATION_SWITCH_INFORMATION_PRESENT_OFFSET (4)
+#define EMBER_AF_GP_APPLICATION_INFORMATION_APPLICATION_DESCRIPTION_PRESENT (32)
+#define EMBER_AF_GP_APPLICATION_INFORMATION_APPLICATION_DESCRIPTION_PRESENT_OFFSET (5)
+#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_APPLICATION_ID (7)
+#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_APPLICATION_ID_OFFSET (0)
+#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_RX_AFTER_TX (8)
+#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_RX_AFTER_TX_OFFSET (3)
+#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_SECURITY_LEVEL (48)
+#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_SECURITY_LEVEL_OFFSET (4)
+#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_SECURITY_KEY_TYPE (448)
+#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_SECURITY_KEY_TYPE_OFFSET (6)
+#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_SECURITY_PROCESSING_FAILED (512)
+#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_SECURITY_PROCESSING_FAILED_OFFSET (9)
+#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_BIDIRECTIONAL_CAPABILITY (1024)
+#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_BIDIRECTIONAL_CAPABILITY_OFFSET (10)
+#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_PROXY_INFO_PRESENT (2048)
+#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_PROXY_INFO_PRESENT_OFFSET (11)
+#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_RESERVED (61440)
+#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_RESERVED_OFFSET (12)
+#define EMBER_AF_GP_GPD_CHANNEL_CONFIGURATION_CHANNEL_MASK (31)
+#define EMBER_AF_GP_GPD_CHANNEL_CONFIGURATION_CHANNEL_MASK_OFFSET (0)
+#define EMBER_AF_GP_GPD_CHANNEL_CONFIGURATION_CHANNEL_OPERATIONAL_CHANNEL (15)
+#define EMBER_AF_GP_GPD_CHANNEL_CONFIGURATION_CHANNEL_OPERATIONAL_CHANNEL_OFFSET (0)
+#define EMBER_AF_GP_GPD_CHANNEL_CONFIGURATION_CHANNEL_BASIC (16)
+#define EMBER_AF_GP_GPD_CHANNEL_CONFIGURATION_CHANNEL_BASIC_OFFSET (4)
+#define EMBER_AF_GP_GPD_CHANNEL_CONFIGURATION_CHANNEL_RESERVED (224)
+#define EMBER_AF_GP_GPD_CHANNEL_CONFIGURATION_CHANNEL_RESERVED_OFFSET (5)
+#define EMBER_AF_GP_GPD_CHANNEL_REQUEST_CHANNEL_TOGGLING_BEHAVIOUR_RX_CHANNEL_NEXT_ATTEMPT (15)
+#define EMBER_AF_GP_GPD_CHANNEL_REQUEST_CHANNEL_TOGGLING_BEHAVIOUR_RX_CHANNEL_NEXT_ATTEMPT_OFFSET (0)
+#define EMBER_AF_GP_GPD_CHANNEL_REQUEST_CHANNEL_TOGGLING_BEHAVIOUR_RX_CHANNEL_SECOND_NEXT_ATTEMPT (240)
+#define EMBER_AF_GP_GPD_CHANNEL_REQUEST_CHANNEL_TOGGLING_BEHAVIOUR_RX_CHANNEL_SECOND_NEXT_ATTEMPT_OFFSET (4)
+#define EMBER_AF_GP_GPD_COMMISSIONING_EXTENDED_OPTIONS_SECURITY_LEVEL_CAPABILITIES (3)
+#define EMBER_AF_GP_GPD_COMMISSIONING_EXTENDED_OPTIONS_SECURITY_LEVEL_CAPABILITIES_OFFSET (0)
+#define EMBER_AF_GP_GPD_COMMISSIONING_EXTENDED_OPTIONS_KEY_TYPE (28)
+#define EMBER_AF_GP_GPD_COMMISSIONING_EXTENDED_OPTIONS_KEY_TYPE_OFFSET (2)
+#define EMBER_AF_GP_GPD_COMMISSIONING_EXTENDED_OPTIONS_GPD_KEY_PRESENT (32)
+#define EMBER_AF_GP_GPD_COMMISSIONING_EXTENDED_OPTIONS_GPD_KEY_PRESENT_OFFSET (5)
+#define EMBER_AF_GP_GPD_COMMISSIONING_EXTENDED_OPTIONS_GPD_KEY_ENCRYPTION (64)
+#define EMBER_AF_GP_GPD_COMMISSIONING_EXTENDED_OPTIONS_GPD_KEY_ENCRYPTION_OFFSET (6)
+#define EMBER_AF_GP_GPD_COMMISSIONING_EXTENDED_OPTIONS_GPD_OUTGOING_COUNTER_PRESENT (128)
+#define EMBER_AF_GP_GPD_COMMISSIONING_EXTENDED_OPTIONS_GPD_OUTGOING_COUNTER_PRESENT_OFFSET (7)
+#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_MAC_SEQ_NUM_CAP (1)
+#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_MAC_SEQ_NUM_CAP_OFFSET (0)
+#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_RX_ON_CAP (2)
+#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_RX_ON_CAP_OFFSET (1)
+#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_APPLICATION_INFORMATION_PRESENT (4)
+#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_APPLICATION_INFORMATION_PRESENT_OFFSET (2)
+#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_RESERVED (8)
+#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_RESERVED_OFFSET (3)
+#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_PAN_ID_REQUEST (16)
+#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_PAN_ID_REQUEST_OFFSET (4)
+#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_GP_SECURITY_KEY_REQUEST (32)
+#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_GP_SECURITY_KEY_REQUEST_OFFSET (5)
+#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_FIXED_LOCATION (64)
+#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_FIXED_LOCATION_OFFSET (6)
+#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_EXTENDED_OPTIONS_FIELD (128)
+#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_EXTENDED_OPTIONS_FIELD_OFFSET (7)
+#define EMBER_AF_GP_GPD_COMMISSIONING_REPLY_OPTIONS_PAN_ID_PRESENT (1)
+#define EMBER_AF_GP_GPD_COMMISSIONING_REPLY_OPTIONS_PAN_ID_PRESENT_OFFSET (0)
+#define EMBER_AF_GP_GPD_COMMISSIONING_REPLY_OPTIONS_GPD_SECURITY_KEY_PRESENT (2)
+#define EMBER_AF_GP_GPD_COMMISSIONING_REPLY_OPTIONS_GPD_SECURITY_KEY_PRESENT_OFFSET (1)
+#define EMBER_AF_GP_GPD_COMMISSIONING_REPLY_OPTIONS_GPDKEY_ENCRYPTION (4)
+#define EMBER_AF_GP_GPD_COMMISSIONING_REPLY_OPTIONS_GPDKEY_ENCRYPTION_OFFSET (2)
+#define EMBER_AF_GP_GPD_COMMISSIONING_REPLY_OPTIONS_SECURITY_LEVEL (24)
+#define EMBER_AF_GP_GPD_COMMISSIONING_REPLY_OPTIONS_SECURITY_LEVEL_OFFSET (3)
+#define EMBER_AF_GP_GPD_COMMISSIONING_REPLY_OPTIONS_KEY_TYPE (224)
+#define EMBER_AF_GP_GPD_COMMISSIONING_REPLY_OPTIONS_KEY_TYPE_OFFSET (5)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_GP_FEATURE (1)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_GP_FEATURE_OFFSET (0)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_DIRECT_COMMUNICATION (2)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_DIRECT_COMMUNICATION_OFFSET (1)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_DERIVED_GROUPCAST_COMMUNICATION (4)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_DERIVED_GROUPCAST_COMMUNICATION_OFFSET (2)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_PRE_COMMISSIONED_GROUPCAST_COMMUNICATION (8)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_PRE_COMMISSIONED_GROUPCAST_COMMUNICATION_OFFSET (3)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_FULL_UNICAST_COMMUNICATION (16)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_FULL_UNICAST_COMMUNICATION_OFFSET (4)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_LIGHTWEIGHT_UNICAST_COMMUNICATION (32)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_LIGHTWEIGHT_UNICAST_COMMUNICATION_OFFSET (5)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_PROXIMITY_BIDIRECTIONAL_COMMUNICATION (64)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_PROXIMITY_BIDIRECTIONAL_COMMUNICATION_OFFSET (6)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_MULTIHOP_BIDIRECTIONAL_COMMUNICATION (128)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_MULTIHOP_BIDIRECTIONAL_COMMUNICATION_OFFSET (7)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_PROXY_TABLE_MAINTAINANCE (256)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_PROXY_TABLE_MAINTAINANCE_OFFSET (8)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_PROXIMITY_COMMUNICATION (512)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_PROXIMITY_COMMUNICATION_OFFSET (9)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_MULTIHOP_COMMUNICATION (1024)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_MULTIHOP_COMMUNICATION_OFFSET (10)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_CT_BASED_COMMISSIONING (2048)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_CT_BASED_COMMISSIONING_OFFSET (11)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_MAINTAINANCE_GPDF (4096)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_MAINTAINANCE_GPDF_OFFSET (12)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_GPD_SECURITY_LEVEL0_IN_OPERATION (8192)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_GPD_SECURITY_LEVEL0_IN_OPERATION_OFFSET (13)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_GPD_SECURITY_LEVEL1_IN_OPERATION (16384)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_GPD_SECURITY_LEVEL1_IN_OPERATION_OFFSET (14)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_GPD_SECURITY_LEVEL2_IN_OPERATION (32768)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_GPD_SECURITY_LEVEL2_IN_OPERATION_OFFSET (15)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_GPD_SECURITY_LEVEL3_IN_OPERATION (65536)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_GPD_SECURITY_LEVEL3_IN_OPERATION_OFFSET (16)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_SINK_TABLE_BASED_GROUPCAST_FORWARDING (131072)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_SINK_TABLE_BASED_GROUPCAST_FORWARDING_OFFSET (17)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_TRANSLATION_TABLE (262144)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_TRANSLATION_TABLE_OFFSET (18)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_GPD_IEEE_ADDRESS (524288)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_GPD_IEEE_ADDRESS_OFFSET (19)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_COMPACT_ATTRIBUTE_REPORTING (1048576)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_COMPACT_ATTRIBUTE_REPORTING_OFFSET (20)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_RESERVED (14680064)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_RESERVED_OFFSET (21)
+#define EMBER_AF_GP_NOTIFICATION_OPTION_APPLICATION_ID (7)
+#define EMBER_AF_GP_NOTIFICATION_OPTION_APPLICATION_ID_OFFSET (0)
+#define EMBER_AF_GP_NOTIFICATION_OPTION_ALSO_UNICAST (8)
+#define EMBER_AF_GP_NOTIFICATION_OPTION_ALSO_UNICAST_OFFSET (3)
+#define EMBER_AF_GP_NOTIFICATION_OPTION_ALSO_DERIVED_GROUP (16)
+#define EMBER_AF_GP_NOTIFICATION_OPTION_ALSO_DERIVED_GROUP_OFFSET (4)
+#define EMBER_AF_GP_NOTIFICATION_OPTION_ALSO_COMMISSIONED_GROUP (32)
+#define EMBER_AF_GP_NOTIFICATION_OPTION_ALSO_COMMISSIONED_GROUP_OFFSET (5)
+#define EMBER_AF_GP_NOTIFICATION_OPTION_SECURITY_LEVEL (192)
+#define EMBER_AF_GP_NOTIFICATION_OPTION_SECURITY_LEVEL_OFFSET (6)
+#define EMBER_AF_GP_NOTIFICATION_OPTION_SECURITY_KEY_TYPE (1792)
+#define EMBER_AF_GP_NOTIFICATION_OPTION_SECURITY_KEY_TYPE_OFFSET (8)
+#define EMBER_AF_GP_NOTIFICATION_OPTION_RX_AFTER_TX (2048)
+#define EMBER_AF_GP_NOTIFICATION_OPTION_RX_AFTER_TX_OFFSET (11)
+#define EMBER_AF_GP_NOTIFICATION_OPTION_GP_TX_QUEUE_FULL (4096)
+#define EMBER_AF_GP_NOTIFICATION_OPTION_GP_TX_QUEUE_FULL_OFFSET (12)
+#define EMBER_AF_GP_NOTIFICATION_OPTION_BIDIRECTIONAL_CAPABILITY (8192)
+#define EMBER_AF_GP_NOTIFICATION_OPTION_BIDIRECTIONAL_CAPABILITY_OFFSET (13)
+#define EMBER_AF_GP_NOTIFICATION_OPTION_PROXY_INFO_PRESENT (16384)
+#define EMBER_AF_GP_NOTIFICATION_OPTION_PROXY_INFO_PRESENT_OFFSET (14)
+#define EMBER_AF_GP_NOTIFICATION_OPTION_RESERVED (32768)
+#define EMBER_AF_GP_NOTIFICATION_OPTION_RESERVED_OFFSET (15)
+#define EMBER_AF_GP_NOTIFICATION_RESPONSE_OPTION_APPLICATION_ID (7)
+#define EMBER_AF_GP_NOTIFICATION_RESPONSE_OPTION_APPLICATION_ID_OFFSET (0)
+#define EMBER_AF_GP_NOTIFICATION_RESPONSE_OPTION_FIRST_TO_FORWARD (8)
+#define EMBER_AF_GP_NOTIFICATION_RESPONSE_OPTION_FIRST_TO_FORWARD_OFFSET (3)
+#define EMBER_AF_GP_NOTIFICATION_RESPONSE_OPTION_NO_PAIRING (16)
+#define EMBER_AF_GP_NOTIFICATION_RESPONSE_OPTION_NO_PAIRING_OFFSET (4)
+#define EMBER_AF_GP_NOTIFICATION_RESPONSE_OPTION_RESERVED (224)
+#define EMBER_AF_GP_NOTIFICATION_RESPONSE_OPTION_RESERVED_OFFSET (5)
+#define EMBER_AF_GP_PAIRING_CONFIGURATION_ACTIONS_ACTION (7)
+#define EMBER_AF_GP_PAIRING_CONFIGURATION_ACTIONS_ACTION_OFFSET (0)
+#define EMBER_AF_GP_PAIRING_CONFIGURATION_ACTIONS_SEND_GP_PAIRING (8)
+#define EMBER_AF_GP_PAIRING_CONFIGURATION_ACTIONS_SEND_GP_PAIRING_OFFSET (3)
+#define EMBER_AF_GP_PAIRING_CONFIGURATION_ACTIONS_RESERVED (240)
+#define EMBER_AF_GP_PAIRING_CONFIGURATION_ACTIONS_RESERVED_OFFSET (4)
+#define EMBER_AF_GP_PAIRING_CONFIGURATION_OPTION_APPLICATION_ID (7)
+#define EMBER_AF_GP_PAIRING_CONFIGURATION_OPTION_APPLICATION_ID_OFFSET (0)
+#define EMBER_AF_GP_PAIRING_CONFIGURATION_OPTION_COMMUNICATION_MODE (24)
+#define EMBER_AF_GP_PAIRING_CONFIGURATION_OPTION_COMMUNICATION_MODE_OFFSET (3)
+#define EMBER_AF_GP_PAIRING_CONFIGURATION_OPTION_SEQUENCE_NUMBER_CAPABILITIES (32)
+#define EMBER_AF_GP_PAIRING_CONFIGURATION_OPTION_SEQUENCE_NUMBER_CAPABILITIES_OFFSET (5)
+#define EMBER_AF_GP_PAIRING_CONFIGURATION_OPTION_RX_ON_CAPABILITY (64)
+#define EMBER_AF_GP_PAIRING_CONFIGURATION_OPTION_RX_ON_CAPABILITY_OFFSET (6)
+#define EMBER_AF_GP_PAIRING_CONFIGURATION_OPTION_FIXED_LOCATION (128)
+#define EMBER_AF_GP_PAIRING_CONFIGURATION_OPTION_FIXED_LOCATION_OFFSET (7)
+#define EMBER_AF_GP_PAIRING_CONFIGURATION_OPTION_ASSIGNED_ALIAS (256)
+#define EMBER_AF_GP_PAIRING_CONFIGURATION_OPTION_ASSIGNED_ALIAS_OFFSET (8)
+#define EMBER_AF_GP_PAIRING_CONFIGURATION_OPTION_SECURITY_USE (512)
+#define EMBER_AF_GP_PAIRING_CONFIGURATION_OPTION_SECURITY_USE_OFFSET (9)
+#define EMBER_AF_GP_PAIRING_CONFIGURATION_OPTION_APPLICATION_INFORMATION_PRESENT (1024)
+#define EMBER_AF_GP_PAIRING_CONFIGURATION_OPTION_APPLICATION_INFORMATION_PRESENT_OFFSET (10)
+#define EMBER_AF_GP_PAIRING_CONFIGURATION_OPTION_RESERVED (63488)
+#define EMBER_AF_GP_PAIRING_CONFIGURATION_OPTION_RESERVED_OFFSET (11)
+#define EMBER_AF_GP_PAIRING_OPTION_APPLICATION_ID (7)
+#define EMBER_AF_GP_PAIRING_OPTION_APPLICATION_ID_OFFSET (0)
+#define EMBER_AF_GP_PAIRING_OPTION_ADD_SINK (8)
+#define EMBER_AF_GP_PAIRING_OPTION_ADD_SINK_OFFSET (3)
+#define EMBER_AF_GP_PAIRING_OPTION_REMOVE_GPD (16)
+#define EMBER_AF_GP_PAIRING_OPTION_REMOVE_GPD_OFFSET (4)
+#define EMBER_AF_GP_PAIRING_OPTION_COMMUNICATION_MODE (96)
+#define EMBER_AF_GP_PAIRING_OPTION_COMMUNICATION_MODE_OFFSET (5)
+#define EMBER_AF_GP_PAIRING_OPTION_GPD_FIXED (128)
+#define EMBER_AF_GP_PAIRING_OPTION_GPD_FIXED_OFFSET (7)
+#define EMBER_AF_GP_PAIRING_OPTION_GPD_MAC_SEQUENCE_NUMBER_CAPABILITIES (256)
+#define EMBER_AF_GP_PAIRING_OPTION_GPD_MAC_SEQUENCE_NUMBER_CAPABILITIES_OFFSET (8)
+#define EMBER_AF_GP_PAIRING_OPTION_SECURITY_LEVEL (1536)
+#define EMBER_AF_GP_PAIRING_OPTION_SECURITY_LEVEL_OFFSET (9)
+#define EMBER_AF_GP_PAIRING_OPTION_SECURITY_KEY_TYPE (14336)
+#define EMBER_AF_GP_PAIRING_OPTION_SECURITY_KEY_TYPE_OFFSET (11)
+#define EMBER_AF_GP_PAIRING_OPTION_GPD_SECURITY_FRAME_COUNTER_PRESENT (16384)
+#define EMBER_AF_GP_PAIRING_OPTION_GPD_SECURITY_FRAME_COUNTER_PRESENT_OFFSET (14)
+#define EMBER_AF_GP_PAIRING_OPTION_GPD_SECURITY_KEY_PRESENT (32768)
+#define EMBER_AF_GP_PAIRING_OPTION_GPD_SECURITY_KEY_PRESENT_OFFSET (15)
+#define EMBER_AF_GP_PAIRING_OPTION_ASSIGNED_ALIAS_PRESENT (65536)
+#define EMBER_AF_GP_PAIRING_OPTION_ASSIGNED_ALIAS_PRESENT_OFFSET (16)
+#define EMBER_AF_GP_PAIRING_OPTION_GROUPCAST_RADIUS_PRESENT (131072)
+#define EMBER_AF_GP_PAIRING_OPTION_GROUPCAST_RADIUS_PRESENT_OFFSET (17)
+#define EMBER_AF_GP_PAIRING_OPTION_RESERVED (16515072)
+#define EMBER_AF_GP_PAIRING_OPTION_RESERVED_OFFSET (18)
+#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_APPLICATION_ID (7)
+#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_APPLICATION_ID_OFFSET (0)
+#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_REQUEST_UNICAST_SINKS (8)
+#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_REQUEST_UNICAST_SINKS_OFFSET (3)
+#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_REQUEST_DERIVED_GROUPCAST_SINKS (16)
+#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_REQUEST_DERIVED_GROUPCAST_SINKS_OFFSET (4)
+#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_REQUEST_COMMISSIONED_GROUPCAST_SINKS (32)
+#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_REQUEST_COMMISSIONED_GROUPCAST_SINKS_OFFSET (5)
+#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_REQUEST_GPD_SECURITY_FRAME_COUNTER (64)
+#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_REQUEST_GPD_SECURITY_FRAME_COUNTER_OFFSET (6)
+#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_REQUEST_GPD_SECURITY_KEY (128)
+#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_REQUEST_GPD_SECURITY_KEY_OFFSET (7)
+#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_RESERVED (65280)
+#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_RESERVED_OFFSET (8)
+#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_EXIT_MODE_ON_COMMISSIONING_WINDOW_EXPIRATION (2)
+#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_EXIT_MODE_ON_COMMISSIONING_WINDOW_EXPIRATION_OFFSET (1)
+#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_EXIT_MODE_ON_FIRST_PAIRING_SUCCESS (4)
+#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_EXIT_MODE_ON_FIRST_PAIRING_SUCCESS_OFFSET (2)
+#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_EXIT_MODE_ON_GP_PROXY_COMMISSIONING_MODE_EXIT (8)
+#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_EXIT_MODE_ON_GP_PROXY_COMMISSIONING_MODE_EXIT_OFFSET (3)
+#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_OPTION_ACTION (1)
+#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_OPTION_ACTION_OFFSET (0)
+#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_OPTION_COMMISSIONING_WINDOW_PRESENT (2)
+#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_OPTION_COMMISSIONING_WINDOW_PRESENT_OFFSET (1)
+#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_OPTION_EXIT_MODE (12)
+#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_OPTION_EXIT_MODE_OFFSET (2)
+#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_OPTION_CHANNEL_PRESENT (16)
+#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_OPTION_CHANNEL_PRESENT_OFFSET (4)
+#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_OPTION_UNICAST_COMMUNICATION (32)
+#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_OPTION_UNICAST_COMMUNICATION_OFFSET (5)
+#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_OPTION_RESERVED (192)
+#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_OPTION_RESERVED_OFFSET (6)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_APPLICATION_ID (7)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_APPLICATION_ID_OFFSET (0)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_ENTRY_ACTIVE (8)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_ENTRY_ACTIVE_OFFSET (3)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_ENTRY_VALID (16)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_ENTRY_VALID_OFFSET (4)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_SEQUENCE_NUMBER_CAP (32)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_SEQUENCE_NUMBER_CAP_OFFSET (5)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_LIGHTWEIGHT_UNICAST_GPS (64)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_LIGHTWEIGHT_UNICAST_GPS_OFFSET (6)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_DERIVED_GROUP_GPS (128)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_DERIVED_GROUP_GPS_OFFSET (7)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_COMMISIONED_GROUP_GPS (256)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_COMMISIONED_GROUP_GPS_OFFSET (8)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_FIRST_TO_FORWARD (512)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_FIRST_TO_FORWARD_OFFSET (9)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_IN_RANGE (1024)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_IN_RANGE_OFFSET (10)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_GPD_FIXED (2048)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_GPD_FIXED_OFFSET (11)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_HAS_ALL_UNICAST_ROUTES (4096)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_HAS_ALL_UNICAST_ROUTES_OFFSET (12)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_ASSIGNED_ALIAS (8192)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_ASSIGNED_ALIAS_OFFSET (13)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_SECURITY_USE (16384)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_SECURITY_USE_OFFSET (14)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_EXTENSION (32768)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_EXTENSION_OFFSET (15)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_FULL_UNICAST_GPS (65536)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_FULL_UNICAST_GPS_OFFSET (16)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_SECURITY_OPTIONS_SECURITY_LEVEL (3)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_SECURITY_OPTIONS_SECURITY_LEVEL_OFFSET (0)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_SECURITY_OPTIONS_SECURITY_KEY_TYPE (28)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_SECURITY_OPTIONS_SECURITY_KEY_TYPE_OFFSET (2)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_SECURITY_OPTIONS_RESERVED (224)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_SECURITY_OPTIONS_RESERVED_OFFSET (5)
+#define EMBER_AF_GP_PROXY_TABLE_REQUEST_OPTIONS_APPLICATION_ID (7)
+#define EMBER_AF_GP_PROXY_TABLE_REQUEST_OPTIONS_APPLICATION_ID_OFFSET (0)
+#define EMBER_AF_GP_PROXY_TABLE_REQUEST_OPTIONS_REQUEST_TYPE (24)
+#define EMBER_AF_GP_PROXY_TABLE_REQUEST_OPTIONS_REQUEST_TYPE_OFFSET (3)
+#define EMBER_AF_GP_PROXY_TABLE_REQUEST_OPTIONS_RESERVED (224)
+#define EMBER_AF_GP_PROXY_TABLE_REQUEST_OPTIONS_RESERVED_OFFSET (5)
+#define EMBER_AF_GP_RESPONSE_OPTION_APPLICATION_ID (7)
+#define EMBER_AF_GP_RESPONSE_OPTION_APPLICATION_ID_OFFSET (0)
+#define EMBER_AF_GP_RESPONSE_OPTION_TRANSMIT_ON_END_POINT_MATCH (8)
+#define EMBER_AF_GP_RESPONSE_OPTION_TRANSMIT_ON_END_POINT_MATCH_OFFSET (3)
+#define EMBER_AF_GP_RESPONSE_OPTION_RESERVED (240)
+#define EMBER_AF_GP_RESPONSE_OPTION_RESERVED_OFFSET (4)
+#define EMBER_AF_GP_RESPONSE_TEMP_MASTER_TX_CHANNEL_TRANSMIT_CHANNEL (15)
+#define EMBER_AF_GP_RESPONSE_TEMP_MASTER_TX_CHANNEL_TRANSMIT_CHANNEL_OFFSET (0)
+#define EMBER_AF_GP_RESPONSE_TEMP_MASTER_TX_CHANNEL_RESERVED (240)
+#define EMBER_AF_GP_RESPONSE_TEMP_MASTER_TX_CHANNEL_RESERVED_OFFSET (4)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_EXIT_MODE_ON_COMMISSIONING_WINDOW_EXPIRATION (1)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_EXIT_MODE_ON_COMMISSIONING_WINDOW_EXPIRATION_OFFSET (0)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_EXIT_MODE_ON_FIRST_PAIRING_SUCCESS (2)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_EXIT_MODE_ON_FIRST_PAIRING_SUCCESS_OFFSET (1)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_EXIT_MODE_ON_GP_PROXY_COMMISSIONING_MODE_EXIT (4)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_EXIT_MODE_ON_GP_PROXY_COMMISSIONING_MODE_EXIT_OFFSET (2)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_EXIT_MODE_RESERVED (248)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_EXIT_MODE_RESERVED_OFFSET (3)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_OPTIONS_ACTION (1)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_OPTIONS_ACTION_OFFSET (0)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_OPTIONS_INVOLVE_GPM_IN_SECURITY (2)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_OPTIONS_INVOLVE_GPM_IN_SECURITY_OFFSET (1)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_OPTIONS_INVOLVE_GPM_IN_PAIRING (4)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_OPTIONS_INVOLVE_GPM_IN_PAIRING_OFFSET (2)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_OPTIONS_INVOLVE_PROXIES (8)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_OPTIONS_INVOLVE_PROXIES_OFFSET (3)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_OPTIONS_RESERVED (240)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_OPTIONS_RESERVED_OFFSET (4)
+#define EMBER_AF_GP_SINK_TABLE_ENTRY_OPTIONS_APPLICATION_ID (7)
+#define EMBER_AF_GP_SINK_TABLE_ENTRY_OPTIONS_APPLICATION_ID_OFFSET (0)
+#define EMBER_AF_GP_SINK_TABLE_ENTRY_OPTIONS_COMMUNICATION_MODE (24)
+#define EMBER_AF_GP_SINK_TABLE_ENTRY_OPTIONS_COMMUNICATION_MODE_OFFSET (3)
+#define EMBER_AF_GP_SINK_TABLE_ENTRY_OPTIONS_SEQUENCE_NUM_CAPABILITIES (32)
+#define EMBER_AF_GP_SINK_TABLE_ENTRY_OPTIONS_SEQUENCE_NUM_CAPABILITIES_OFFSET (5)
+#define EMBER_AF_GP_SINK_TABLE_ENTRY_OPTIONS_RX_ON_CAPABILITY (64)
+#define EMBER_AF_GP_SINK_TABLE_ENTRY_OPTIONS_RX_ON_CAPABILITY_OFFSET (6)
+#define EMBER_AF_GP_SINK_TABLE_ENTRY_OPTIONS_FIXED_LOCATION (128)
+#define EMBER_AF_GP_SINK_TABLE_ENTRY_OPTIONS_FIXED_LOCATION_OFFSET (7)
+#define EMBER_AF_GP_SINK_TABLE_ENTRY_OPTIONS_ASSIGNED_ALIAS (256)
+#define EMBER_AF_GP_SINK_TABLE_ENTRY_OPTIONS_ASSIGNED_ALIAS_OFFSET (8)
+#define EMBER_AF_GP_SINK_TABLE_ENTRY_OPTIONS_SECURITY_USE (512)
+#define EMBER_AF_GP_SINK_TABLE_ENTRY_OPTIONS_SECURITY_USE_OFFSET (9)
+#define EMBER_AF_GP_SINK_TABLE_ENTRY_OPTIONS_RESERVED (64512)
+#define EMBER_AF_GP_SINK_TABLE_ENTRY_OPTIONS_RESERVED_OFFSET (10)
+#define EMBER_AF_GP_SINK_TABLE_ENTRY_SECURITY_OPTIONS_SECURITY_LEVEL (3)
+#define EMBER_AF_GP_SINK_TABLE_ENTRY_SECURITY_OPTIONS_SECURITY_LEVEL_OFFSET (0)
+#define EMBER_AF_GP_SINK_TABLE_ENTRY_SECURITY_OPTIONS_SECURITY_KEY_TYPE (28)
+#define EMBER_AF_GP_SINK_TABLE_ENTRY_SECURITY_OPTIONS_SECURITY_KEY_TYPE_OFFSET (2)
+#define EMBER_AF_GP_SINK_TABLE_ENTRY_SECURITY_OPTIONS_RESERVED (224)
+#define EMBER_AF_GP_SINK_TABLE_ENTRY_SECURITY_OPTIONS_RESERVED_OFFSET (5)
+#define EMBER_AF_GP_SINK_TABLE_REQUEST_OPTIONS_APPLICATION_ID (7)
+#define EMBER_AF_GP_SINK_TABLE_REQUEST_OPTIONS_APPLICATION_ID_OFFSET (0)
+#define EMBER_AF_GP_SINK_TABLE_REQUEST_OPTIONS_REQUEST_TYPE (24)
+#define EMBER_AF_GP_SINK_TABLE_REQUEST_OPTIONS_REQUEST_TYPE_OFFSET (3)
+#define EMBER_AF_GP_SINK_TABLE_REQUEST_OPTIONS_RESERVED (224)
+#define EMBER_AF_GP_SINK_TABLE_REQUEST_OPTIONS_RESERVED_OFFSET (5)
+#define EMBER_AF_GP_TRANSLATION_TABLE_RESPONSE_OPTION_APPLICATION_ID (7)
+#define EMBER_AF_GP_TRANSLATION_TABLE_RESPONSE_OPTION_APPLICATION_ID_OFFSET (0)
+#define EMBER_AF_GP_TRANSLATION_TABLE_RESPONSE_OPTION_ADDITIONAL_INFORMATION_BLOCK_PRESENT (8)
+#define EMBER_AF_GP_TRANSLATION_TABLE_RESPONSE_OPTION_ADDITIONAL_INFORMATION_BLOCK_PRESENT_OFFSET (3)
+#define EMBER_AF_GP_TRANSLATION_TABLE_RESPONSE_OPTION_RESERVED (240)
+#define EMBER_AF_GP_TRANSLATION_TABLE_RESPONSE_OPTION_RESERVED_OFFSET (4)
+#define EMBER_AF_GP_TRANSLATION_TABLE_SCAN_LEVEL_GPD_ID (1)
+#define EMBER_AF_GP_TRANSLATION_TABLE_SCAN_LEVEL_GPD_ID_OFFSET (0)
+#define EMBER_AF_GP_TRANSLATION_TABLE_SCAN_LEVEL_CMD_ID (2)
+#define EMBER_AF_GP_TRANSLATION_TABLE_SCAN_LEVEL_CMD_ID_OFFSET (1)
+#define EMBER_AF_GP_TRANSLATION_TABLE_SCAN_LEVEL_PAYLOAD (4)
+#define EMBER_AF_GP_TRANSLATION_TABLE_SCAN_LEVEL_PAYLOAD_OFFSET (2)
+#define EMBER_AF_GP_TRANSLATION_TABLE_SCAN_LEVEL_ZB_ENDPOINT (8)
+#define EMBER_AF_GP_TRANSLATION_TABLE_SCAN_LEVEL_ZB_ENDPOINT_OFFSET (3)
+#define EMBER_AF_GP_TRANSLATION_TABLE_SCAN_LEVEL_ADDITIONAL_INFO_BLOCK (16)
+#define EMBER_AF_GP_TRANSLATION_TABLE_SCAN_LEVEL_ADDITIONAL_INFO_BLOCK_OFFSET (4)
+#define EMBER_AF_GP_TRANSLATION_TABLE_UPDATE_OPTION_APPLICATION_ID (7)
+#define EMBER_AF_GP_TRANSLATION_TABLE_UPDATE_OPTION_APPLICATION_ID_OFFSET (0)
+#define EMBER_AF_GP_TRANSLATION_TABLE_UPDATE_OPTION_ACTION (24)
+#define EMBER_AF_GP_TRANSLATION_TABLE_UPDATE_OPTION_ACTION_OFFSET (3)
+#define EMBER_AF_GP_TRANSLATION_TABLE_UPDATE_OPTION_NUMBER_OF_TRANSLATIONS (224)
+#define EMBER_AF_GP_TRANSLATION_TABLE_UPDATE_OPTION_NUMBER_OF_TRANSLATIONS_OFFSET (5)
+#define EMBER_AF_GP_TRANSLATION_TABLE_UPDATE_OPTION_ADDITIONAL_INFORMATION_BLOCK_PRESENT (256)
+#define EMBER_AF_GP_TRANSLATION_TABLE_UPDATE_OPTION_ADDITIONAL_INFORMATION_BLOCK_PRESENT_OFFSET (8)
+#define EMBER_AF_GP_TRANSLATION_TABLE_UPDATE_OPTION_RESERVED (65024)
+#define EMBER_AF_GP_TRANSLATION_TABLE_UPDATE_OPTION_RESERVED_OFFSET (9)
+#define EMBER_AF_GP_TUNNELING_STOP_OPTION_APPLICATION_ID (7)
+#define EMBER_AF_GP_TUNNELING_STOP_OPTION_APPLICATION_ID_OFFSET (0)
+#define EMBER_AF_GP_TUNNELING_STOP_OPTION_ALSO_DERIVED_GROUP (8)
+#define EMBER_AF_GP_TUNNELING_STOP_OPTION_ALSO_DERIVED_GROUP_OFFSET (3)
+#define EMBER_AF_GP_TUNNELING_STOP_OPTION_ALSO_COMMISSIONED_GROUP (16)
+#define EMBER_AF_GP_TUNNELING_STOP_OPTION_ALSO_COMMISSIONED_GROUP_OFFSET (4)
+#define EMBER_AF_GP_TUNNELING_STOP_OPTION_RESERVED (224)
+#define EMBER_AF_GP_TUNNELING_STOP_OPTION_RESERVED_OFFSET (5)
+#define EMBER_AF_IAS_ZONE_STATUS_ALARM1 (1)
+#define EMBER_AF_IAS_ZONE_STATUS_ALARM1_OFFSET (0)
+#define EMBER_AF_IAS_ZONE_STATUS_ALARM2 (2)
+#define EMBER_AF_IAS_ZONE_STATUS_ALARM2_OFFSET (1)
+#define EMBER_AF_IAS_ZONE_STATUS_TAMPER (4)
+#define EMBER_AF_IAS_ZONE_STATUS_TAMPER_OFFSET (2)
+#define EMBER_AF_IAS_ZONE_STATUS_BATTERY (8)
+#define EMBER_AF_IAS_ZONE_STATUS_BATTERY_OFFSET (3)
+#define EMBER_AF_IAS_ZONE_STATUS_SUPERVISION_REPORTS (16)
+#define EMBER_AF_IAS_ZONE_STATUS_SUPERVISION_REPORTS_OFFSET (4)
+#define EMBER_AF_IAS_ZONE_STATUS_RESTORE_REPORTS (32)
+#define EMBER_AF_IAS_ZONE_STATUS_RESTORE_REPORTS_OFFSET (5)
+#define EMBER_AF_IAS_ZONE_STATUS_TROUBLE (64)
+#define EMBER_AF_IAS_ZONE_STATUS_TROUBLE_OFFSET (6)
+#define EMBER_AF_IAS_ZONE_STATUS_AC (128)
+#define EMBER_AF_IAS_ZONE_STATUS_AC_OFFSET (7)
+#define EMBER_AF_IAS_ZONE_STATUS_TEST (256)
+#define EMBER_AF_IAS_ZONE_STATUS_TEST_OFFSET (8)
+#define EMBER_AF_IAS_ZONE_STATUS_BATTERY_DEFECT (512)
+#define EMBER_AF_IAS_ZONE_STATUS_BATTERY_DEFECT_OFFSET (9)
+#define EMBER_AF_KEY_BITMASK_DEVELOPMENT (1)
+#define EMBER_AF_KEY_BITMASK_DEVELOPMENT_OFFSET (0)
+#define EMBER_AF_KEY_BITMASK_MASTER (16)
+#define EMBER_AF_KEY_BITMASK_MASTER_OFFSET (4)
+#define EMBER_AF_KEY_BITMASK_CERTIFICATION (32768)
+#define EMBER_AF_KEY_BITMASK_CERTIFICATION_OFFSET (15)
+#define EMBER_AF_LAMP_ALARM_MODE_LAMP_BURN_HOURS (1)
+#define EMBER_AF_LAMP_ALARM_MODE_LAMP_BURN_HOURS_OFFSET (0)
+#define EMBER_AF_LOAD_CONTROL_STATE_RELAY_OPEN_OR_CONSUMPTION_INTERUPTED (1)
+#define EMBER_AF_LOAD_CONTROL_STATE_RELAY_OPEN_OR_CONSUMPTION_INTERUPTED_OFFSET (0)
+#define EMBER_AF_LOAD_CONTROL_STATE_EVENT_IN_PROGRESS (2)
+#define EMBER_AF_LOAD_CONTROL_STATE_EVENT_IN_PROGRESS_OFFSET (1)
+#define EMBER_AF_LOAD_CONTROL_STATE_POWER_STABILIZING (4)
+#define EMBER_AF_LOAD_CONTROL_STATE_POWER_STABILIZING_OFFSET (2)
+#define EMBER_AF_LOAD_CONTROL_STATE_OTHER_LOAD_REDUCTION (8)
+#define EMBER_AF_LOAD_CONTROL_STATE_OTHER_LOAD_REDUCTION_OFFSET (3)
+#define EMBER_AF_LOAD_CONTROL_STATE_CURRENT_FLOW_OR_CONSUMING_COMMODITY (16)
+#define EMBER_AF_LOAD_CONTROL_STATE_CURRENT_FLOW_OR_CONSUMING_COMMODITY_OFFSET (4)
+#define EMBER_AF_LOAD_CONTROL_STATE_LOAD_CALL (32)
+#define EMBER_AF_LOAD_CONTROL_STATE_LOAD_CALL_OFFSET (5)
+#define EMBER_AF_LOCATION_TYPE_ABSOLUTE (1)
+#define EMBER_AF_LOCATION_TYPE_ABSOLUTE_OFFSET (0)
+#define EMBER_AF_LOCATION_TYPE_2_D (2)
+#define EMBER_AF_LOCATION_TYPE_2_D_OFFSET (1)
+#define EMBER_AF_LOCATION_TYPE_COORDINATE_SYSTEM (12)
+#define EMBER_AF_LOCATION_TYPE_COORDINATE_SYSTEM_OFFSET (2)
+#define EMBER_AF_MAINS_ALARM_MASK_VOLTAGE_TOO_LOW (1)
+#define EMBER_AF_MAINS_ALARM_MASK_VOLTAGE_TOO_LOW_OFFSET (0)
+#define EMBER_AF_MAINS_ALARM_MASK_VOLTAGE_TOO_HIGH (2)
+#define EMBER_AF_MAINS_ALARM_MASK_VOLTAGE_TOO_HIGH_OFFSET (1)
+#define EMBER_AF_MAINS_ALARM_MASK_MAINS_POWER_SUPPLY_LOST (4)
+#define EMBER_AF_MAINS_ALARM_MASK_MAINS_POWER_SUPPLY_LOST_OFFSET (2)
+#define EMBER_AF_MESSAGING_CONFIRMATION_CONTROL_NO_RETURNED (1)
+#define EMBER_AF_MESSAGING_CONFIRMATION_CONTROL_NO_RETURNED_OFFSET (0)
+#define EMBER_AF_MESSAGING_CONFIRMATION_CONTROL_YES_RETURNED (2)
+#define EMBER_AF_MESSAGING_CONFIRMATION_CONTROL_YES_RETURNED_OFFSET (1)
+#define EMBER_AF_MESSAGING_CONTROL_MASK_TRANS_MECHANISM (3)
+#define EMBER_AF_MESSAGING_CONTROL_MASK_TRANS_MECHANISM_OFFSET (0)
+#define EMBER_AF_MESSAGING_CONTROL_MASK_MESSAGE_URGENCY (12)
+#define EMBER_AF_MESSAGING_CONTROL_MASK_MESSAGE_URGENCY_OFFSET (2)
+#define EMBER_AF_MESSAGING_CONTROL_MASK_ENHANCED_CONFIRMATION_REQUEST (32)
+#define EMBER_AF_MESSAGING_CONTROL_MASK_ENHANCED_CONFIRMATION_REQUEST_OFFSET (5)
+#define EMBER_AF_MESSAGING_CONTROL_MASK_MESSAGE_CONFIRMATION (128)
+#define EMBER_AF_MESSAGING_CONTROL_MASK_MESSAGE_CONFIRMATION_OFFSET (7)
+#define EMBER_AF_MESSAGING_EXTENDED_CONTROL_MASK_MESSAGE_CONFIRMATION_STATUS (1)
+#define EMBER_AF_MESSAGING_EXTENDED_CONTROL_MASK_MESSAGE_CONFIRMATION_STATUS_OFFSET (0)
+#define EMBER_AF_METERING_EXTENDED_STATUS_METER_COVER_REMOVED (1)
+#define EMBER_AF_METERING_EXTENDED_STATUS_METER_COVER_REMOVED_OFFSET (0)
+#define EMBER_AF_METERING_EXTENDED_STATUS_STRONG_MAGNETIC_FIELD_DETECTED (2)
+#define EMBER_AF_METERING_EXTENDED_STATUS_STRONG_MAGNETIC_FIELD_DETECTED_OFFSET (1)
+#define EMBER_AF_METERING_EXTENDED_STATUS_BATTERY_FAILURE (4)
+#define EMBER_AF_METERING_EXTENDED_STATUS_BATTERY_FAILURE_OFFSET (2)
+#define EMBER_AF_METERING_EXTENDED_STATUS_PROGRAM_MEMORY_ERROR (8)
+#define EMBER_AF_METERING_EXTENDED_STATUS_PROGRAM_MEMORY_ERROR_OFFSET (3)
+#define EMBER_AF_METERING_EXTENDED_STATUS_RAM_ERROR (16)
+#define EMBER_AF_METERING_EXTENDED_STATUS_RAM_ERROR_OFFSET (4)
+#define EMBER_AF_METERING_EXTENDED_STATUS_NV_MEMORY_ERROR (32)
+#define EMBER_AF_METERING_EXTENDED_STATUS_NV_MEMORY_ERROR_OFFSET (5)
+#define EMBER_AF_METERING_EXTENDED_STATUS_MEASUREMENT_SYSTEM_ERROR (64)
+#define EMBER_AF_METERING_EXTENDED_STATUS_MEASUREMENT_SYSTEM_ERROR_OFFSET (6)
+#define EMBER_AF_METERING_EXTENDED_STATUS_WATCHDOG_ERROR (128)
+#define EMBER_AF_METERING_EXTENDED_STATUS_WATCHDOG_ERROR_OFFSET (7)
+#define EMBER_AF_METERING_EXTENDED_STATUS_SUPPLY_DISCONNECT_FAILURE (256)
+#define EMBER_AF_METERING_EXTENDED_STATUS_SUPPLY_DISCONNECT_FAILURE_OFFSET (8)
+#define EMBER_AF_METERING_EXTENDED_STATUS_SUPPLY_CONNECT_FAILURE (512)
+#define EMBER_AF_METERING_EXTENDED_STATUS_SUPPLY_CONNECT_FAILURE_OFFSET (9)
+#define EMBER_AF_METERING_EXTENDED_STATUS_MEASUREMENT_SW_CHANGED_TAMPERED (1024)
+#define EMBER_AF_METERING_EXTENDED_STATUS_MEASUREMENT_SW_CHANGED_TAMPERED_OFFSET (10)
+#define EMBER_AF_METERING_EXTENDED_STATUS_CLOCK_INVALID (2048)
+#define EMBER_AF_METERING_EXTENDED_STATUS_CLOCK_INVALID_OFFSET (11)
+#define EMBER_AF_METERING_EXTENDED_STATUS_TEMPERATURE_EXCEEDED (4096)
+#define EMBER_AF_METERING_EXTENDED_STATUS_TEMPERATURE_EXCEEDED_OFFSET (12)
+#define EMBER_AF_METERING_EXTENDED_STATUS_MOISTURE_DETECTED (8192)
+#define EMBER_AF_METERING_EXTENDED_STATUS_MOISTURE_DETECTED_OFFSET (13)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_TERMINAL_COVER_REMOVED (16777216)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_TERMINAL_COVER_REMOVED_OFFSET (24)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_INCORRECT_POLARITY (33554432)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_INCORRECT_POLARITY_OFFSET (25)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_CURRENT_WITH_NO_VOLTAGE (67108864)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_CURRENT_WITH_NO_VOLTAGE_OFFSET (26)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_LIMIT_THRESHOLD_EXCEEDED (134217728)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_LIMIT_THRESHOLD_EXCEEDED_OFFSET (27)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_UNDER_VOLTAGE (268435456)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_UNDER_VOLTAGE_OFFSET (28)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_OVER_VOLTAGE (536870912)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_OVER_VOLTAGE_OFFSET (29)
+#define EMBER_AF_METERING_EXTENDED_STATUS_GAS_METER_BATTERY_COVER_REMOVED (16777216)
+#define EMBER_AF_METERING_EXTENDED_STATUS_GAS_METER_BATTERY_COVER_REMOVED_OFFSET (24)
+#define EMBER_AF_METERING_EXTENDED_STATUS_GAS_METER_TILT_TAMPER (33554432)
+#define EMBER_AF_METERING_EXTENDED_STATUS_GAS_METER_TILT_TAMPER_OFFSET (25)
+#define EMBER_AF_METERING_EXTENDED_STATUS_GAS_METER_EXCESS_FLOW (67108864)
+#define EMBER_AF_METERING_EXTENDED_STATUS_GAS_METER_EXCESS_FLOW_OFFSET (26)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_SERVICE_DISCONNECTION_REASON_OFF_DUE_TO_OVER_POWER (1073741824)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_SERVICE_DISCONNECTION_REASON_OFF_DUE_TO_OVER_POWER_OFFSET (30)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_SERVICE_DISCONNECTION_REASON_OFF_DUE_TO_OVER_VOLTAGE (2147483648)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_SERVICE_DISCONNECTION_REASON_OFF_DUE_TO_OVER_VOLTAGE_OFFSET (31)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_SERVICE_DISCONNECTION_REASON_OFF_DUE_TO_REMOTE_LOAD_CONTROL (3221225472)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_SERVICE_DISCONNECTION_REASON_OFF_DUE_TO_REMOTE_LOAD_CONTROL_OFFSET (30)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_SERVICE_DISCONNECTION_REASON_OFF_BY_OTHER_REMOTE_COMMAND (4294967296)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_SERVICE_DISCONNECTION_REASON_OFF_BY_OTHER_REMOTE_COMMAND_OFFSET (32)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_SERVICE_DISCONNECTION_REASON_OFF_DUE_TO_OVERHEATING_SHORT_CIRCUIT      \
+    (5368709120)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_SERVICE_DISCONNECTION_REASON_OFF_DUE_TO_OVERHEATING_SHORT_CIRCUIT_OFFSET \
+    (30)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_SERVICE_DISCONNECTION_REASON_OFF_DUE_TO_OVERHEATING_OTHER (6442450944)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_SERVICE_DISCONNECTION_REASON_OFF_DUE_TO_OVERHEATING_OTHER_OFFSET (31)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_BI_DIRECTIONAL_OPERATION (17179869184)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_BI_DIRECTIONAL_OPERATION_OFFSET (34)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_ACTIVE_POWER_RECEIVED (34359738368)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_ACTIVE_POWER_RECEIVED_OFFSET (35)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_MODE_OF_OPERATION (68719476736)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_MODE_OF_OPERATION_OFFSET (36)
+#define EMBER_AF_METERING_STATUS_ELECTRICITY_CHECK_METER (1)
+#define EMBER_AF_METERING_STATUS_ELECTRICITY_CHECK_METER_OFFSET (0)
+#define EMBER_AF_METERING_STATUS_ELECTRICITY_LOW_BATTERY (2)
+#define EMBER_AF_METERING_STATUS_ELECTRICITY_LOW_BATTERY_OFFSET (1)
+#define EMBER_AF_METERING_STATUS_ELECTRICITY_TAMPER_DETECT (4)
+#define EMBER_AF_METERING_STATUS_ELECTRICITY_TAMPER_DETECT_OFFSET (2)
+#define EMBER_AF_METERING_STATUS_ELECTRICITY_POWER_FAILURE (8)
+#define EMBER_AF_METERING_STATUS_ELECTRICITY_POWER_FAILURE_OFFSET (3)
+#define EMBER_AF_METERING_STATUS_ELECTRICITY_POWER_QUALITY (16)
+#define EMBER_AF_METERING_STATUS_ELECTRICITY_POWER_QUALITY_OFFSET (4)
+#define EMBER_AF_METERING_STATUS_ELECTRICITY_LEAK_DETECT (32)
+#define EMBER_AF_METERING_STATUS_ELECTRICITY_LEAK_DETECT_OFFSET (5)
+#define EMBER_AF_METERING_STATUS_ELECTRICITY_SERVICE_DISCONNECT_OPEN (64)
+#define EMBER_AF_METERING_STATUS_ELECTRICITY_SERVICE_DISCONNECT_OPEN_OFFSET (6)
+#define EMBER_AF_METERING_STATUS_ELECTRICITY_RESERVED (128)
+#define EMBER_AF_METERING_STATUS_ELECTRICITY_RESERVED_OFFSET (7)
+#define EMBER_AF_METERING_STATUS_GAS_CHECK_METER (1)
+#define EMBER_AF_METERING_STATUS_GAS_CHECK_METER_OFFSET (0)
+#define EMBER_AF_METERING_STATUS_GAS_LOW_BATTERY (2)
+#define EMBER_AF_METERING_STATUS_GAS_LOW_BATTERY_OFFSET (1)
+#define EMBER_AF_METERING_STATUS_GAS_TAMPER_DETECT (4)
+#define EMBER_AF_METERING_STATUS_GAS_TAMPER_DETECT_OFFSET (2)
+#define EMBER_AF_METERING_STATUS_GAS_NOT_DEFINED (8)
+#define EMBER_AF_METERING_STATUS_GAS_NOT_DEFINED_OFFSET (3)
+#define EMBER_AF_METERING_STATUS_GAS_LOW_PRESSURE (16)
+#define EMBER_AF_METERING_STATUS_GAS_LOW_PRESSURE_OFFSET (4)
+#define EMBER_AF_METERING_STATUS_GAS_LEAK_DETECT (32)
+#define EMBER_AF_METERING_STATUS_GAS_LEAK_DETECT_OFFSET (5)
+#define EMBER_AF_METERING_STATUS_GAS_SERVICE_DISCONNECT (64)
+#define EMBER_AF_METERING_STATUS_GAS_SERVICE_DISCONNECT_OFFSET (6)
+#define EMBER_AF_METERING_STATUS_GAS_REVERSE_FLOW (128)
+#define EMBER_AF_METERING_STATUS_GAS_REVERSE_FLOW_OFFSET (7)
+#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_CHECK_METER (1)
+#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_CHECK_METER_OFFSET (0)
+#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_LOW_BATTERY (2)
+#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_LOW_BATTERY_OFFSET (1)
+#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_TAMPER_DETECT (4)
+#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_TAMPER_DETECT_OFFSET (2)
+#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_TEMPERATURE_SENSOR (8)
+#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_TEMPERATURE_SENSOR_OFFSET (3)
+#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_BURST_DETECT (16)
+#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_BURST_DETECT_OFFSET (4)
+#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_LEAK_DETECT (32)
+#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_LEAK_DETECT_OFFSET (5)
+#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_SERVICE_DISCONNECT (64)
+#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_SERVICE_DISCONNECT_OFFSET (6)
+#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_FLOW_SENSOR (128)
+#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_FLOW_SENSOR_OFFSET (7)
+#define EMBER_AF_METERING_STATUS_WATER_CHECK_METER (1)
+#define EMBER_AF_METERING_STATUS_WATER_CHECK_METER_OFFSET (0)
+#define EMBER_AF_METERING_STATUS_WATER_LOW_BATTERY (2)
+#define EMBER_AF_METERING_STATUS_WATER_LOW_BATTERY_OFFSET (1)
+#define EMBER_AF_METERING_STATUS_WATER_TAMPER_DETECT (4)
+#define EMBER_AF_METERING_STATUS_WATER_TAMPER_DETECT_OFFSET (2)
+#define EMBER_AF_METERING_STATUS_WATER_PIPE_EMPTY (8)
+#define EMBER_AF_METERING_STATUS_WATER_PIPE_EMPTY_OFFSET (3)
+#define EMBER_AF_METERING_STATUS_WATER_LOW_PRESSURE (16)
+#define EMBER_AF_METERING_STATUS_WATER_LOW_PRESSURE_OFFSET (4)
+#define EMBER_AF_METERING_STATUS_WATER_LEAK_DETECT (32)
+#define EMBER_AF_METERING_STATUS_WATER_LEAK_DETECT_OFFSET (5)
+#define EMBER_AF_METERING_STATUS_WATER_SERVICE_DISCONNECT (64)
+#define EMBER_AF_METERING_STATUS_WATER_SERVICE_DISCONNECT_OFFSET (6)
+#define EMBER_AF_METERING_STATUS_WATER_REVERSE_FLOW (128)
+#define EMBER_AF_METERING_STATUS_WATER_REVERSE_FLOW_OFFSET (7)
+#define EMBER_AF_MODE_FOR_SEQUENCE_HEAT_SETPOINT_FIELD_PRESENT (1)
+#define EMBER_AF_MODE_FOR_SEQUENCE_HEAT_SETPOINT_FIELD_PRESENT_OFFSET (0)
+#define EMBER_AF_MODE_FOR_SEQUENCE_COOL_SETPOINT_FIELD_PRESENT (2)
+#define EMBER_AF_MODE_FOR_SEQUENCE_COOL_SETPOINT_FIELD_PRESENT_OFFSET (1)
+#define EMBER_AF_NUMBER_OF_EVENTS_LOG_PAYLOAD_CONTROL_LOG_PAYLOAD_CONTROL (15)
+#define EMBER_AF_NUMBER_OF_EVENTS_LOG_PAYLOAD_CONTROL_LOG_PAYLOAD_CONTROL_OFFSET (0)
+#define EMBER_AF_NUMBER_OF_EVENTS_LOG_PAYLOAD_CONTROL_NUMBER_OF_EVENTS (240)
+#define EMBER_AF_NUMBER_OF_EVENTS_LOG_PAYLOAD_CONTROL_NUMBER_OF_EVENTS_OFFSET (4)
+#define EMBER_AF_OCCUPANCY_OCCUPIED (1)
+#define EMBER_AF_OCCUPANCY_OCCUPIED_OFFSET (0)
+#define EMBER_AF_OCCUPANCY_SENSOR_TYPE_BITMAP_PIR (1)
+#define EMBER_AF_OCCUPANCY_SENSOR_TYPE_BITMAP_PIR_OFFSET (0)
+#define EMBER_AF_OCCUPANCY_SENSOR_TYPE_BITMAP_ULTRASONIC (2)
+#define EMBER_AF_OCCUPANCY_SENSOR_TYPE_BITMAP_ULTRASONIC_OFFSET (1)
+#define EMBER_AF_OCCUPANCY_SENSOR_TYPE_BITMAP_PHYSICAL_CONTACT (4)
+#define EMBER_AF_OCCUPANCY_SENSOR_TYPE_BITMAP_PHYSICAL_CONTACT_OFFSET (2)
+#define EMBER_AF_ON_OFF_CONTROL_ACCEPT_ONLY_WHEN_ON (1)
+#define EMBER_AF_ON_OFF_CONTROL_ACCEPT_ONLY_WHEN_ON_OFFSET (0)
+#define EMBER_AF_ORIGINATOR_ID_SUPPLY_CONTROL_BITS_ACKNOWLEDGE_REQUIRED (1)
+#define EMBER_AF_ORIGINATOR_ID_SUPPLY_CONTROL_BITS_ACKNOWLEDGE_REQUIRED_OFFSET (0)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_DISCONNECTION_ENABLED (1)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_DISCONNECTION_ENABLED_OFFSET (0)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_PREPAYMENT_ENABLED (2)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_PREPAYMENT_ENABLED_OFFSET (1)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_CREDIT_MANAGEMENT_ENABLED (4)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_CREDIT_MANAGEMENT_ENABLED_OFFSET (2)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_CREDIT_DISPLAY_ENABLED (16)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_CREDIT_DISPLAY_ENABLED_OFFSET (4)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_ACCOUNT_BASE (64)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_ACCOUNT_BASE_OFFSET (6)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_CONTACTOR_FITTED (128)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_CONTACTOR_FITTED_OFFSET (7)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_STANDING_CHARGE_CONFIGURATION (256)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_STANDING_CHARGE_CONFIGURATION_OFFSET (8)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_EMERGENCY_STANDING_CHARGE_CONFIGURATION (512)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_EMERGENCY_STANDING_CHARGE_CONFIGURATION_OFFSET (9)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_DEBT_CONFIGURATION (1024)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_DEBT_CONFIGURATION_OFFSET (10)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_EMERGENCY_DEBT_CONFIGURATION (2048)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_EMERGENCY_DEBT_CONFIGURATION_OFFSET (11)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_GENERAL (1)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_GENERAL_OFFSET (0)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_CHANGE_OF_TARIFF_INFORMATION (8)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_CHANGE_OF_TARIFF_INFORMATION_OFFSET (3)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_CHANGE_OF_PRICE_MATRIX (16)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_CHANGE_OF_PRICE_MATRIX_OFFSET (4)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_MANUALLY_TRIGGERED_FROM_CLIENT (1024)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_MANUALLY_TRIGGERED_FROM_CLIENT_OFFSET (10)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_CHANGE_OF_TENANCY (4096)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_CHANGE_OF_TENANCY_OFFSET (12)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_CHANGE_OF_SUPPLIER (8192)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_CHANGE_OF_SUPPLIER_OFFSET (13)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_CHANGE_OF_METER_MODE (16384)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_CHANGE_OF_METER_MODE_OFFSET (14)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_TOP_UP_ADDITION (262144)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_TOP_UP_ADDITION_OFFSET (18)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_DEBT_CREDIT_ADDITION (524288)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_DEBT_CREDIT_ADDITION_OFFSET (19)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_LOW_CREDIT_WARNING (1)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_LOW_CREDIT_WARNING_OFFSET (0)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_TOP_UP_CODE_ERROR (2)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_TOP_UP_CODE_ERROR_OFFSET (1)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_TOP_UP_CODE_ALREADY_USED (4)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_TOP_UP_CODE_ALREADY_USED_OFFSET (2)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_TOP_UP_CODE_INVALID (8)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_TOP_UP_CODE_INVALID_OFFSET (3)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_FRIENDLY_CREDIT_IN_USE (16)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_FRIENDLY_CREDIT_IN_USE_OFFSET (4)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_FRIENDLY_CREDIT_PERIOD_END_WARNING (32)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_FRIENDLY_CREDIT_PERIOD_END_WARNING_OFFSET (5)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_EC_AVAILABLE (64)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_EC_AVAILABLE_OFFSET (6)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_UNAUTHORISED_ENERGY_USE (128)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_UNAUTHORISED_ENERGY_USE_OFFSET (7)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_DISCONNECTED_SUPPLY_DUE_TO_CREDIT (256)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_DISCONNECTED_SUPPLY_DUE_TO_CREDIT_OFFSET (8)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_DISCONNECTED_SUPPLY_DUE_TO_TAMPER (512)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_DISCONNECTED_SUPPLY_DUE_TO_TAMPER_OFFSET (9)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_DISCONNECTED_SUPPLY_DUE_TO_HES (1024)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_DISCONNECTED_SUPPLY_DUE_TO_HES_OFFSET (10)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_PHYSICAL_ATTACK (2048)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_PHYSICAL_ATTACK_OFFSET (11)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_ELECTRONIC_ATTACK (4096)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_ELECTRONIC_ATTACK_OFFSET (12)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_MANUFACTURE_ALARM_CODE_A (8192)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_MANUFACTURE_ALARM_CODE_A_OFFSET (13)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_MANUFACTURE_ALARM_CODE_B (16384)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_MANUFACTURE_ALARM_CODE_B_OFFSET (14)
+#define EMBER_AF_PRICE_CONTROL_MASK_PRICE_ACKNOWLEDGEMENT_REQUIRED (1)
+#define EMBER_AF_PRICE_CONTROL_MASK_PRICE_ACKNOWLEDGEMENT_REQUIRED_OFFSET (0)
+#define EMBER_AF_PRICE_CONTROL_MASK_TOTAL_TIERS_EXCEEDS15 (2)
+#define EMBER_AF_PRICE_CONTROL_MASK_TOTAL_TIERS_EXCEEDS15_OFFSET (1)
+#define EMBER_AF_PRICE_MATRIX_SUB_PAYLOAD_CONTROL_TOU_BASED (1)
+#define EMBER_AF_PRICE_MATRIX_SUB_PAYLOAD_CONTROL_TOU_BASED_OFFSET (0)
+#define EMBER_AF_PRICE_NUMBER_OF_PRICE_TIERS_AND_REGISTER_TIER_REGISTER_TIER (15)
+#define EMBER_AF_PRICE_NUMBER_OF_PRICE_TIERS_AND_REGISTER_TIER_REGISTER_TIER_OFFSET (0)
+#define EMBER_AF_PRICE_NUMBER_OF_PRICE_TIERS_AND_REGISTER_TIER_NUMBER_OF_PRICE_TIERS (240)
+#define EMBER_AF_PRICE_NUMBER_OF_PRICE_TIERS_AND_REGISTER_TIER_NUMBER_OF_PRICE_TIERS_OFFSET (4)
+#define EMBER_AF_PRICE_TRAILING_DIGIT_TRAILING_DIGIT (240)
+#define EMBER_AF_PRICE_TRAILING_DIGIT_TRAILING_DIGIT_OFFSET (4)
+#define EMBER_AF_PRICE_TRAILING_DIGIT_AND_PRICE_TIER_PRICE_TIER (15)
+#define EMBER_AF_PRICE_TRAILING_DIGIT_AND_PRICE_TIER_PRICE_TIER_OFFSET (0)
+#define EMBER_AF_PRICE_TRAILING_DIGIT_AND_PRICE_TIER_TRAILING_DIGIT (240)
+#define EMBER_AF_PRICE_TRAILING_DIGIT_AND_PRICE_TIER_TRAILING_DIGIT_OFFSET (4)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_PRE_SNAPSHOTS (1)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_PRE_SNAPSHOTS_OFFSET (0)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_POST_SNAPSHOTS (2)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_POST_SNAPSHOTS_OFFSET (1)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_RESET_CREDIT_REGISTER (4)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_RESET_CREDIT_REGISTER_OFFSET (2)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_RESET_DEBIT_REGISTER (8)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_RESET_DEBIT_REGISTER_OFFSET (3)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_RESET_BILLING_PERIOD (16)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_RESET_BILLING_PERIOD_OFFSET (4)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_TARIFF_PLAN (32)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_TARIFF_PLAN_OFFSET (5)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_STANDING_CHARGE (64)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_STANDING_CHARGE_OFFSET (6)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_BLOCK_HISTORICAL_LOAD_PROFILE_INFORMATION (128)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_BLOCK_HISTORICAL_LOAD_PROFILE_INFORMATION_OFFSET (7)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_HISTORICAL_LOAD_PROFILE_INFORMATION (256)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_HISTORICAL_LOAD_PROFILE_INFORMATION_OFFSET (8)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_IHD_DATA_CONSUMER (512)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_IHD_DATA_CONSUMER_OFFSET (9)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_IHD_DATA_SUPPLIER (1024)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_IHD_DATA_SUPPLIER_OFFSET (10)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_METER_CONNECTOR_STATE_ON_OFF_ARMED (6144)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_METER_CONNECTOR_STATE_ON_OFF_ARMED_OFFSET (11)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_TRANSACTION_LOG (8192)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_TRANSACTION_LOG_OFFSET (13)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_PREPAYMENT_LOG (16384)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_PREPAYMENT_LOG_OFFSET (14)
+#define EMBER_AF_PUMP_ALARM_MASK_SUPPLY_VOLTAGE_TOO_LOW (1)
+#define EMBER_AF_PUMP_ALARM_MASK_SUPPLY_VOLTAGE_TOO_LOW_OFFSET (0)
+#define EMBER_AF_PUMP_ALARM_MASK_SUPPLY_VOLTAGE_TOO_HIGH (2)
+#define EMBER_AF_PUMP_ALARM_MASK_SUPPLY_VOLTAGE_TOO_HIGH_OFFSET (1)
+#define EMBER_AF_PUMP_ALARM_MASK_POWER_MISSING_PHASE (4)
+#define EMBER_AF_PUMP_ALARM_MASK_POWER_MISSING_PHASE_OFFSET (2)
+#define EMBER_AF_PUMP_ALARM_MASK_SYSTEM_PRESSURE_TOO_LOW (8)
+#define EMBER_AF_PUMP_ALARM_MASK_SYSTEM_PRESSURE_TOO_LOW_OFFSET (3)
+#define EMBER_AF_PUMP_ALARM_MASK_SYSTEM_PRESSURE_TOO_HIGH (16)
+#define EMBER_AF_PUMP_ALARM_MASK_SYSTEM_PRESSURE_TOO_HIGH_OFFSET (4)
+#define EMBER_AF_PUMP_ALARM_MASK_DRY_RUNNING (32)
+#define EMBER_AF_PUMP_ALARM_MASK_DRY_RUNNING_OFFSET (5)
+#define EMBER_AF_PUMP_ALARM_MASK_MOTOR_TEMPERATURE_TOO_HIGH (64)
+#define EMBER_AF_PUMP_ALARM_MASK_MOTOR_TEMPERATURE_TOO_HIGH_OFFSET (6)
+#define EMBER_AF_PUMP_ALARM_MASK_PUMP_MOTOR_HAS_FATAL_FAILURE (128)
+#define EMBER_AF_PUMP_ALARM_MASK_PUMP_MOTOR_HAS_FATAL_FAILURE_OFFSET (7)
+#define EMBER_AF_PUMP_ALARM_MASK_ELECTRONIC_TEMPERATURE_TOO_HIGH (256)
+#define EMBER_AF_PUMP_ALARM_MASK_ELECTRONIC_TEMPERATURE_TOO_HIGH_OFFSET (8)
+#define EMBER_AF_PUMP_ALARM_MASK_PUMP_BLOCKED (512)
+#define EMBER_AF_PUMP_ALARM_MASK_PUMP_BLOCKED_OFFSET (9)
+#define EMBER_AF_PUMP_ALARM_MASK_SENSOR_FAILURE (1024)
+#define EMBER_AF_PUMP_ALARM_MASK_SENSOR_FAILURE_OFFSET (10)
+#define EMBER_AF_PUMP_ALARM_MASK_ELECTRONIC_NON_FATAL_FAILURE (2048)
+#define EMBER_AF_PUMP_ALARM_MASK_ELECTRONIC_NON_FATAL_FAILURE_OFFSET (11)
+#define EMBER_AF_PUMP_ALARM_MASK_ELECTRONIC_FATAL_FAILURE (4096)
+#define EMBER_AF_PUMP_ALARM_MASK_ELECTRONIC_FATAL_FAILURE_OFFSET (12)
+#define EMBER_AF_PUMP_ALARM_MASK_GENERAL_FAULT (8192)
+#define EMBER_AF_PUMP_ALARM_MASK_GENERAL_FAULT_OFFSET (13)
+#define EMBER_AF_PUMP_STATUS_DEVICE_FAULT (1)
+#define EMBER_AF_PUMP_STATUS_DEVICE_FAULT_OFFSET (0)
+#define EMBER_AF_PUMP_STATUS_SUPPLYFAULT (2)
+#define EMBER_AF_PUMP_STATUS_SUPPLYFAULT_OFFSET (1)
+#define EMBER_AF_PUMP_STATUS_SPEED_LOW (4)
+#define EMBER_AF_PUMP_STATUS_SPEED_LOW_OFFSET (2)
+#define EMBER_AF_PUMP_STATUS_SPEED_HIGH (8)
+#define EMBER_AF_PUMP_STATUS_SPEED_HIGH_OFFSET (3)
+#define EMBER_AF_PUMP_STATUS_LOCAL_OVERRIDE (16)
+#define EMBER_AF_PUMP_STATUS_LOCAL_OVERRIDE_OFFSET (4)
+#define EMBER_AF_PUMP_STATUS_RUNNING (32)
+#define EMBER_AF_PUMP_STATUS_RUNNING_OFFSET (5)
+#define EMBER_AF_PUMP_STATUS_REMOTE_PRESSURE (64)
+#define EMBER_AF_PUMP_STATUS_REMOTE_PRESSURE_OFFSET (6)
+#define EMBER_AF_PUMP_STATUS_REMOTE_FLOW (128)
+#define EMBER_AF_PUMP_STATUS_REMOTE_FLOW_OFFSET (7)
+#define EMBER_AF_PUMP_STATUS_REMOTE_TEMPERATURE (256)
+#define EMBER_AF_PUMP_STATUS_REMOTE_TEMPERATURE_OFFSET (8)
+#define EMBER_AF_REMOTE_ENABLE_FLAGS_AND_DEVICE_STATUS2_REMOTE_ENABLE_FLAGS (15)
+#define EMBER_AF_REMOTE_ENABLE_FLAGS_AND_DEVICE_STATUS2_REMOTE_ENABLE_FLAGS_OFFSET (0)
+#define EMBER_AF_REMOTE_ENABLE_FLAGS_AND_DEVICE_STATUS2_DEVICE_STATUS2_STRUCTURE (240)
+#define EMBER_AF_REMOTE_ENABLE_FLAGS_AND_DEVICE_STATUS2_DEVICE_STATUS2_STRUCTURE_OFFSET (4)
+#define EMBER_AF_RESET_OPTIONS_RESET_CURRENT (1)
+#define EMBER_AF_RESET_OPTIONS_RESET_CURRENT_OFFSET (0)
+#define EMBER_AF_RESET_OPTIONS_RESET_ALL (2)
+#define EMBER_AF_RESET_OPTIONS_RESET_ALL_OFFSET (1)
+#define EMBER_AF_RESET_OPTIONS_ERASE_INDEX (4)
+#define EMBER_AF_RESET_OPTIONS_ERASE_INDEX_OFFSET (2)
+#define EMBER_AF_RESTART_OPTIONS_START_MODE1 (1)
+#define EMBER_AF_RESTART_OPTIONS_START_MODE1_OFFSET (0)
+#define EMBER_AF_RESTART_OPTIONS_STARTUP_MODE2 (2)
+#define EMBER_AF_RESTART_OPTIONS_STARTUP_MODE2_OFFSET (1)
+#define EMBER_AF_RESTART_OPTIONS_STARTUP_MODE3 (4)
+#define EMBER_AF_RESTART_OPTIONS_STARTUP_MODE3_OFFSET (2)
+#define EMBER_AF_RESTART_OPTIONS_IMMEDIATE (8)
+#define EMBER_AF_RESTART_OPTIONS_IMMEDIATE_OFFSET (3)
+#define EMBER_AF_SCENES_COPY_MODE_COPY_ALL_SCENES (1)
+#define EMBER_AF_SCENES_COPY_MODE_COPY_ALL_SCENES_OFFSET (0)
+#define EMBER_AF_SHADE_CLOSURE_STATUS_OPERATIONAL (1)
+#define EMBER_AF_SHADE_CLOSURE_STATUS_OPERATIONAL_OFFSET (0)
+#define EMBER_AF_SHADE_CLOSURE_STATUS_ADJUSTING (2)
+#define EMBER_AF_SHADE_CLOSURE_STATUS_ADJUSTING_OFFSET (1)
+#define EMBER_AF_SHADE_CLOSURE_STATUS_OPENING (4)
+#define EMBER_AF_SHADE_CLOSURE_STATUS_OPENING_OFFSET (2)
+#define EMBER_AF_SHADE_CLOSURE_STATUS_MOTOR_OPENING (8)
+#define EMBER_AF_SHADE_CLOSURE_STATUS_MOTOR_OPENING_OFFSET (3)
+#define EMBER_AF_SNAPSHOT_CAUSE_GENERAL (1)
+#define EMBER_AF_SNAPSHOT_CAUSE_GENERAL_OFFSET (0)
+#define EMBER_AF_SNAPSHOT_CAUSE_END_OF_BILLING_PERIOD (2)
+#define EMBER_AF_SNAPSHOT_CAUSE_END_OF_BILLING_PERIOD_OFFSET (1)
+#define EMBER_AF_SNAPSHOT_CAUSE_END_OF_BLOCK_PERIOD (4)
+#define EMBER_AF_SNAPSHOT_CAUSE_END_OF_BLOCK_PERIOD_OFFSET (2)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_TARIFF_INFORMATION (8)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_TARIFF_INFORMATION_OFFSET (3)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_PRICE_MATRIX (16)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_PRICE_MATRIX_OFFSET (4)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_BLOCK_THRESHOLDS (32)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_BLOCK_THRESHOLDS_OFFSET (5)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_CV (64)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_CV_OFFSET (6)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_CF (128)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_CF_OFFSET (7)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_CALENDAR (256)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_CALENDAR_OFFSET (8)
+#define EMBER_AF_SNAPSHOT_CAUSE_CRITICAL_PEAK_PRICING (512)
+#define EMBER_AF_SNAPSHOT_CAUSE_CRITICAL_PEAK_PRICING_OFFSET (9)
+#define EMBER_AF_SNAPSHOT_CAUSE_MANUALLY_TRIGGERED_FROM_CLIENT (1024)
+#define EMBER_AF_SNAPSHOT_CAUSE_MANUALLY_TRIGGERED_FROM_CLIENT_OFFSET (10)
+#define EMBER_AF_SNAPSHOT_CAUSE_END_OF_RESOLVE_PERIOD (2048)
+#define EMBER_AF_SNAPSHOT_CAUSE_END_OF_RESOLVE_PERIOD_OFFSET (11)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_TENANCY (4096)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_TENANCY_OFFSET (12)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_SUPPLIER (8192)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_SUPPLIER_OFFSET (13)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_MODE (16384)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_MODE_OFFSET (14)
+#define EMBER_AF_SNAPSHOT_CAUSE_DEBT_PAYMENT (32768)
+#define EMBER_AF_SNAPSHOT_CAUSE_DEBT_PAYMENT_OFFSET (15)
+#define EMBER_AF_SNAPSHOT_CAUSE_SCHEDULED_SNAPSHOT (65536)
+#define EMBER_AF_SNAPSHOT_CAUSE_SCHEDULED_SNAPSHOT_OFFSET (16)
+#define EMBER_AF_SNAPSHOT_CAUSE_OTA_FIRMWARE_DOWNLOAD (131072)
+#define EMBER_AF_SNAPSHOT_CAUSE_OTA_FIRMWARE_DOWNLOAD_OFFSET (17)
+#define EMBER_AF_SQUAWK_INFO_MODE (240)
+#define EMBER_AF_SQUAWK_INFO_MODE_OFFSET (4)
+#define EMBER_AF_SQUAWK_INFO_STROBE (8)
+#define EMBER_AF_SQUAWK_INFO_STROBE_OFFSET (3)
+#define EMBER_AF_SQUAWK_INFO_LEVEL (3)
+#define EMBER_AF_SQUAWK_INFO_LEVEL_OFFSET (0)
+#define EMBER_AF_START_TIME_MINUTES (63)
+#define EMBER_AF_START_TIME_MINUTES_OFFSET (0)
+#define EMBER_AF_START_TIME_TIME_ENCODING (192)
+#define EMBER_AF_START_TIME_TIME_ENCODING_OFFSET (6)
+#define EMBER_AF_START_TIME_HOURS (65280)
+#define EMBER_AF_START_TIME_HOURS_OFFSET (8)
+#define EMBER_AF_SUPPLY_CONTROL_BITS_ACKNOWLEDGE_REQUIRED (1)
+#define EMBER_AF_SUPPLY_CONTROL_BITS_ACKNOWLEDGE_REQUIRED_OFFSET (0)
+#define EMBER_AF_TARIFF_TYPE_CHARGING_SCHEME_TARIFF_TYPE (15)
+#define EMBER_AF_TARIFF_TYPE_CHARGING_SCHEME_TARIFF_TYPE_OFFSET (0)
+#define EMBER_AF_TARIFF_TYPE_CHARGING_SCHEME_TARIFF_CHARGING_SCHEME (240)
+#define EMBER_AF_TARIFF_TYPE_CHARGING_SCHEME_TARIFF_CHARGING_SCHEME_OFFSET (4)
+#define EMBER_AF_THERMOSTAT_ALARM_MASK_INITIALIZATION_FAILURE (1)
+#define EMBER_AF_THERMOSTAT_ALARM_MASK_INITIALIZATION_FAILURE_OFFSET (0)
+#define EMBER_AF_THERMOSTAT_ALARM_MASK_HARDWARE_FAILURE (2)
+#define EMBER_AF_THERMOSTAT_ALARM_MASK_HARDWARE_FAILURE_OFFSET (1)
+#define EMBER_AF_THERMOSTAT_ALARM_MASK_SELFCALIBRATION_FAILURE (4)
+#define EMBER_AF_THERMOSTAT_ALARM_MASK_SELFCALIBRATION_FAILURE_OFFSET (2)
+#define EMBER_AF_THERMOSTAT_OCCUPANCY_OCCUPIED (1)
+#define EMBER_AF_THERMOSTAT_OCCUPANCY_OCCUPIED_OFFSET (0)
+#define EMBER_AF_THERMOSTAT_RUNNING_STATE_HEAT_STATE_ON (1)
+#define EMBER_AF_THERMOSTAT_RUNNING_STATE_HEAT_STATE_ON_OFFSET (0)
+#define EMBER_AF_THERMOSTAT_RUNNING_STATE_COOL_STATE_ON (2)
+#define EMBER_AF_THERMOSTAT_RUNNING_STATE_COOL_STATE_ON_OFFSET (1)
+#define EMBER_AF_THERMOSTAT_RUNNING_STATE_FAN_STATE_ON (4)
+#define EMBER_AF_THERMOSTAT_RUNNING_STATE_FAN_STATE_ON_OFFSET (2)
+#define EMBER_AF_THERMOSTAT_RUNNING_STATE_HEAT_SECOND_STAGE_STATE_ON (8)
+#define EMBER_AF_THERMOSTAT_RUNNING_STATE_HEAT_SECOND_STAGE_STATE_ON_OFFSET (3)
+#define EMBER_AF_THERMOSTAT_RUNNING_STATE_COOL_SECOND_STAGE_STATE_ON (16)
+#define EMBER_AF_THERMOSTAT_RUNNING_STATE_COOL_SECOND_STAGE_STATE_ON_OFFSET (4)
+#define EMBER_AF_THERMOSTAT_RUNNING_STATE_FAN_SECOND_STAGE_STATE_ON (32)
+#define EMBER_AF_THERMOSTAT_RUNNING_STATE_FAN_SECOND_STAGE_STATE_ON_OFFSET (5)
+#define EMBER_AF_THERMOSTAT_RUNNING_STATE_FAN_THIRD_STAGE_STATE_ON (64)
+#define EMBER_AF_THERMOSTAT_RUNNING_STATE_FAN_THIRD_STAGE_STATE_ON_OFFSET (6)
+#define EMBER_AF_THERMOSTAT_SENSING_LOCAL_TEMP_SENSED_REMOTELY (1)
+#define EMBER_AF_THERMOSTAT_SENSING_LOCAL_TEMP_SENSED_REMOTELY_OFFSET (0)
+#define EMBER_AF_THERMOSTAT_SENSING_OUTDOOR_TEMP_SENSED_REMOTELY (2)
+#define EMBER_AF_THERMOSTAT_SENSING_OUTDOOR_TEMP_SENSED_REMOTELY_OFFSET (1)
+#define EMBER_AF_THERMOSTAT_SENSING_OCCUPANCY_SENSED_REMOTELY (4)
+#define EMBER_AF_THERMOSTAT_SENSING_OCCUPANCY_SENSED_REMOTELY_OFFSET (2)
+#define EMBER_AF_TIME_STATUS_MASK_MASTER_CLOCK (1)
+#define EMBER_AF_TIME_STATUS_MASK_MASTER_CLOCK_OFFSET (0)
+#define EMBER_AF_TIME_STATUS_MASK_SYNCHRONIZED (2)
+#define EMBER_AF_TIME_STATUS_MASK_SYNCHRONIZED_OFFSET (1)
+#define EMBER_AF_TIME_STATUS_MASK_MASTER_ZONE_DST (4)
+#define EMBER_AF_TIME_STATUS_MASK_MASTER_ZONE_DST_OFFSET (2)
+#define EMBER_AF_TIME_STATUS_MASK_SUPERSEDING (8)
+#define EMBER_AF_TIME_STATUS_MASK_SUPERSEDING_OFFSET (3)
+#define EMBER_AF_WARNING_INFO_MODE (240)
+#define EMBER_AF_WARNING_INFO_MODE_OFFSET (4)
+#define EMBER_AF_WARNING_INFO_STROBE (12)
+#define EMBER_AF_WARNING_INFO_STROBE_OFFSET (2)
+#define EMBER_AF_WARNING_INFO_SIREN_LEVEL (3)
+#define EMBER_AF_WARNING_INFO_SIREN_LEVEL_OFFSET (0)
+#define EMBER_AF_ZIGBEE_INFORMATION_LOGICAL_TYPE (3)
+#define EMBER_AF_ZIGBEE_INFORMATION_LOGICAL_TYPE_OFFSET (0)
+#define EMBER_AF_ZIGBEE_INFORMATION_RX_ON_WHEN_IDLE (4)
+#define EMBER_AF_ZIGBEE_INFORMATION_RX_ON_WHEN_IDLE_OFFSET (2)
+#define EMBER_AF_ZLL_INFORMATION_FACTORY_NEW (1)
+#define EMBER_AF_ZLL_INFORMATION_FACTORY_NEW_OFFSET (0)
+#define EMBER_AF_ZLL_INFORMATION_ADDRESS_ASSIGNMENT (2)
+#define EMBER_AF_ZLL_INFORMATION_ADDRESS_ASSIGNMENT_OFFSET (1)
+#define EMBER_AF_ZLL_INFORMATION_TOUCH_LINK_INITIATOR (16)
+#define EMBER_AF_ZLL_INFORMATION_TOUCH_LINK_INITIATOR_OFFSET (4)
+#define EMBER_AF_ZLL_INFORMATION_TOUCH_LINK_PRIORITY_REQUEST (32)
+#define EMBER_AF_ZLL_INFORMATION_TOUCH_LINK_PRIORITY_REQUEST_OFFSET (5)
+#define EMBER_AF_ZLL_INFORMATION_PROFILE_INTEROP (128)
+#define EMBER_AF_ZLL_INFORMATION_PROFILE_INTEROP_OFFSET (7)
diff --git a/examples/chip-tool/gen/gen_config.h b/examples/chip-tool/gen/gen_config.h
new file mode 100644
index 0000000..7c77a36
--- /dev/null
+++ b/examples/chip-tool/gen/gen_config.h
@@ -0,0 +1,88 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+// Prevent multiple inclusion
+#pragma once
+
+// User options for plugin Binding Table Library
+#define EMBER_BINDING_TABLE_SIZE 10
+
+/**** Network Section ****/
+#define EMBER_SUPPORTED_NETWORKS (1)
+
+#define EMBER_APS_UNICAST_MESSAGE_COUNT 10
+
+/**** Cluster endpoint counts ****/
+#define EMBER_AF_BARRIER_CONTROL_CLUSTER_CLIENT_ENDPOINT_COUNT (1)
+#define EMBER_AF_BASIC_CLUSTER_CLIENT_ENDPOINT_COUNT (1)
+#define EMBER_AF_BINDING_CLUSTER_CLIENT_ENDPOINT_COUNT (1)
+#define EMBER_AF_COLOR_CONTROL_CLUSTER_CLIENT_ENDPOINT_COUNT (1)
+#define EMBER_AF_DOOR_LOCK_CLUSTER_CLIENT_ENDPOINT_COUNT (1)
+#define EMBER_AF_GROUPS_CLUSTER_CLIENT_ENDPOINT_COUNT (1)
+#define EMBER_AF_IDENTIFY_CLUSTER_CLIENT_ENDPOINT_COUNT (1)
+#define EMBER_AF_LEVEL_CONTROL_CLUSTER_CLIENT_ENDPOINT_COUNT (1)
+#define EMBER_AF_ON_OFF_CLUSTER_CLIENT_ENDPOINT_COUNT (1)
+#define EMBER_AF_SCENES_CLUSTER_CLIENT_ENDPOINT_COUNT (1)
+#define EMBER_AF_TEMP_MEASUREMENT_CLUSTER_CLIENT_ENDPOINT_COUNT (1)
+
+/**** Cluster Plugins ****/
+
+// Use this macro to check if the client side of the Barrier Control cluster is included
+#define ZCL_USING_BARRIER_CONTROL_CLUSTER_CLIENT
+#define EMBER_AF_PLUGIN_BARRIER_CONTROL_CLIENT
+
+// Use this macro to check if the client side of the Basic cluster is included
+#define ZCL_USING_BASIC_CLUSTER_CLIENT
+#define EMBER_AF_PLUGIN_BASIC_CLIENT
+
+// Use this macro to check if the client side of the Binding cluster is included
+#define ZCL_USING_BINDING_CLUSTER_CLIENT
+#define EMBER_AF_PLUGIN_BINDING_CLIENT
+
+// Use this macro to check if the client side of the Color Control cluster is included
+#define ZCL_USING_COLOR_CONTROL_CLUSTER_CLIENT
+#define EMBER_AF_PLUGIN_COLOR_CONTROL_CLIENT
+
+// Use this macro to check if the client side of the Door Lock cluster is included
+#define ZCL_USING_DOOR_LOCK_CLUSTER_CLIENT
+#define EMBER_AF_PLUGIN_DOOR_LOCK_CLIENT
+
+// Use this macro to check if the client side of the Groups cluster is included
+#define ZCL_USING_GROUPS_CLUSTER_CLIENT
+#define EMBER_AF_PLUGIN_GROUPS_CLIENT
+
+// Use this macro to check if the client side of the Identify cluster is included
+#define ZCL_USING_IDENTIFY_CLUSTER_CLIENT
+#define EMBER_AF_PLUGIN_IDENTIFY_CLIENT
+
+// Use this macro to check if the client side of the Level Control cluster is included
+#define ZCL_USING_LEVEL_CONTROL_CLUSTER_CLIENT
+#define EMBER_AF_PLUGIN_LEVEL_CONTROL_CLIENT
+
+// Use this macro to check if the client side of the On/off cluster is included
+#define ZCL_USING_ON_OFF_CLUSTER_CLIENT
+#define EMBER_AF_PLUGIN_ON_OFF_CLIENT
+
+// Use this macro to check if the client side of the Scenes cluster is included
+#define ZCL_USING_SCENES_CLUSTER_CLIENT
+#define EMBER_AF_PLUGIN_SCENES_CLIENT
+
+// Use this macro to check if the client side of the Temperature Measurement cluster is included
+#define ZCL_USING_TEMP_MEASUREMENT_CLUSTER_CLIENT
+#define EMBER_AF_PLUGIN_TEMPERATURE_MEASUREMENT_CLIENT
diff --git a/examples/chip-tool/gen/gen_tokens.h b/examples/chip-tool/gen/gen_tokens.h
new file mode 100644
index 0000000..860bf57
--- /dev/null
+++ b/examples/chip-tool/gen/gen_tokens.h
@@ -0,0 +1,45 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+// Prevent multiple inclusion
+#pragma once
+
+// This file contains the tokens for attributes stored in flash
+
+// Identifier tags for tokens
+
+// Types for the tokens
+#ifdef DEFINETYPES
+#endif // DEFINETYPES
+
+// Actual token definitions
+#ifdef DEFINETOKENS
+#endif // DEFINETOKENS
+
+// Macro snippet that loads all the attributes from tokens
+#define GENERATED_TOKEN_LOADER(endpoint)                                                                                           \
+    do                                                                                                                             \
+    {                                                                                                                              \
+    } while (false)
+
+// Macro snippet that saves the attribute to token
+#define GENERATED_TOKEN_SAVER                                                                                                      \
+    do                                                                                                                             \
+    {                                                                                                                              \
+    } while (false)
diff --git a/examples/chip-tool/gen/print-cluster.h b/examples/chip-tool/gen/print-cluster.h
new file mode 100644
index 0000000..4348de1
--- /dev/null
+++ b/examples/chip-tool/gen/print-cluster.h
@@ -0,0 +1,868 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+// Prevent multiple inclusion
+#pragma once
+
+// This is the mapping of IDs to cluster names assuming a format according
+// to the "EmberAfClusterName" defined in the ZCL header.
+// The names of clusters that are not present, are removed.
+
+#if defined(ZCL_USING_BASIC_CLUSTER_SERVER) || defined(ZCL_USING_BASIC_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_BASIC_CLUSTER { ZCL_BASIC_CLUSTER_ID, 0, "Basic" },
+#else
+#define CHIP_PRINTCLUSTER_BASIC_CLUSTER
+#endif
+
+#if defined(ZCL_USING_POWER_CONFIG_CLUSTER_SERVER) || defined(ZCL_USING_POWER_CONFIG_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_POWER_CONFIG_CLUSTER { ZCL_POWER_CONFIG_CLUSTER_ID, 1, "Power Configuration" },
+#else
+#define CHIP_PRINTCLUSTER_POWER_CONFIG_CLUSTER
+#endif
+
+#if defined(ZCL_USING_DEVICE_TEMP_CLUSTER_SERVER) || defined(ZCL_USING_DEVICE_TEMP_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_DEVICE_TEMP_CLUSTER { ZCL_DEVICE_TEMP_CLUSTER_ID, 2, "Device Temperature Configuration" },
+#else
+#define CHIP_PRINTCLUSTER_DEVICE_TEMP_CLUSTER
+#endif
+
+#if defined(ZCL_USING_IDENTIFY_CLUSTER_SERVER) || defined(ZCL_USING_IDENTIFY_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_IDENTIFY_CLUSTER { ZCL_IDENTIFY_CLUSTER_ID, 3, "Identify" },
+#else
+#define CHIP_PRINTCLUSTER_IDENTIFY_CLUSTER
+#endif
+
+#if defined(ZCL_USING_GROUPS_CLUSTER_SERVER) || defined(ZCL_USING_GROUPS_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_GROUPS_CLUSTER { ZCL_GROUPS_CLUSTER_ID, 4, "Groups" },
+#else
+#define CHIP_PRINTCLUSTER_GROUPS_CLUSTER
+#endif
+
+#if defined(ZCL_USING_SCENES_CLUSTER_SERVER) || defined(ZCL_USING_SCENES_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_SCENES_CLUSTER { ZCL_SCENES_CLUSTER_ID, 5, "Scenes" },
+#else
+#define CHIP_PRINTCLUSTER_SCENES_CLUSTER
+#endif
+
+#if defined(ZCL_USING_ON_OFF_CLUSTER_SERVER) || defined(ZCL_USING_ON_OFF_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_ON_OFF_CLUSTER { ZCL_ON_OFF_CLUSTER_ID, 6, "On/off" },
+#else
+#define CHIP_PRINTCLUSTER_ON_OFF_CLUSTER
+#endif
+
+#if defined(ZCL_USING_ON_OFF_SWITCH_CONFIG_CLUSTER_SERVER) || defined(ZCL_USING_ON_OFF_SWITCH_CONFIG_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_ON_OFF_SWITCH_CONFIG_CLUSTER { ZCL_ON_OFF_SWITCH_CONFIG_CLUSTER_ID, 7, "On/off Switch Configuration" },
+#else
+#define CHIP_PRINTCLUSTER_ON_OFF_SWITCH_CONFIG_CLUSTER
+#endif
+
+#if defined(ZCL_USING_LEVEL_CONTROL_CLUSTER_SERVER) || defined(ZCL_USING_LEVEL_CONTROL_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_LEVEL_CONTROL_CLUSTER { ZCL_LEVEL_CONTROL_CLUSTER_ID, 8, "Level Control" },
+#else
+#define CHIP_PRINTCLUSTER_LEVEL_CONTROL_CLUSTER
+#endif
+
+#if defined(ZCL_USING_ALARM_CLUSTER_SERVER) || defined(ZCL_USING_ALARM_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_ALARM_CLUSTER { ZCL_ALARM_CLUSTER_ID, 9, "Alarms" },
+#else
+#define CHIP_PRINTCLUSTER_ALARM_CLUSTER
+#endif
+
+#if defined(ZCL_USING_TIME_CLUSTER_SERVER) || defined(ZCL_USING_TIME_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_TIME_CLUSTER { ZCL_TIME_CLUSTER_ID, 10, "Time" },
+#else
+#define CHIP_PRINTCLUSTER_TIME_CLUSTER
+#endif
+
+#if defined(ZCL_USING_RSSI_LOCATION_CLUSTER_SERVER) || defined(ZCL_USING_RSSI_LOCATION_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_RSSI_LOCATION_CLUSTER { ZCL_RSSI_LOCATION_CLUSTER_ID, 11, "RSSI Location" },
+#else
+#define CHIP_PRINTCLUSTER_RSSI_LOCATION_CLUSTER
+#endif
+
+#if defined(ZCL_USING_BINARY_INPUT_BASIC_CLUSTER_SERVER) || defined(ZCL_USING_BINARY_INPUT_BASIC_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_BINARY_INPUT_BASIC_CLUSTER { ZCL_BINARY_INPUT_BASIC_CLUSTER_ID, 15, "Binary Input (Basic)" },
+#else
+#define CHIP_PRINTCLUSTER_BINARY_INPUT_BASIC_CLUSTER
+#endif
+
+#if defined(ZCL_USING_COMMISSIONING_CLUSTER_SERVER) || defined(ZCL_USING_COMMISSIONING_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_COMMISSIONING_CLUSTER { ZCL_COMMISSIONING_CLUSTER_ID, 21, "Commissioning" },
+#else
+#define CHIP_PRINTCLUSTER_COMMISSIONING_CLUSTER
+#endif
+
+#if defined(ZCL_USING_PARTITION_CLUSTER_SERVER) || defined(ZCL_USING_PARTITION_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_PARTITION_CLUSTER { ZCL_PARTITION_CLUSTER_ID, 22, "Partition" },
+#else
+#define CHIP_PRINTCLUSTER_PARTITION_CLUSTER
+#endif
+
+#if defined(ZCL_USING_OTA_BOOTLOAD_CLUSTER_SERVER) || defined(ZCL_USING_OTA_BOOTLOAD_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_OTA_BOOTLOAD_CLUSTER { ZCL_OTA_BOOTLOAD_CLUSTER_ID, 25, "Over the Air Bootloading" },
+#else
+#define CHIP_PRINTCLUSTER_OTA_BOOTLOAD_CLUSTER
+#endif
+
+#if defined(ZCL_USING_POWER_PROFILE_CLUSTER_SERVER) || defined(ZCL_USING_POWER_PROFILE_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_POWER_PROFILE_CLUSTER { ZCL_POWER_PROFILE_CLUSTER_ID, 26, "Power Profile" },
+#else
+#define CHIP_PRINTCLUSTER_POWER_PROFILE_CLUSTER
+#endif
+
+#if defined(ZCL_USING_APPLIANCE_CONTROL_CLUSTER_SERVER) || defined(ZCL_USING_APPLIANCE_CONTROL_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_APPLIANCE_CONTROL_CLUSTER { ZCL_APPLIANCE_CONTROL_CLUSTER_ID, 27, "Appliance Control" },
+#else
+#define CHIP_PRINTCLUSTER_APPLIANCE_CONTROL_CLUSTER
+#endif
+
+#if defined(ZCL_USING_POLL_CONTROL_CLUSTER_SERVER) || defined(ZCL_USING_POLL_CONTROL_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_POLL_CONTROL_CLUSTER { ZCL_POLL_CONTROL_CLUSTER_ID, 32, "Poll Control" },
+#else
+#define CHIP_PRINTCLUSTER_POLL_CONTROL_CLUSTER
+#endif
+
+#if defined(ZCL_USING_GREEN_POWER_CLUSTER_SERVER) || defined(ZCL_USING_GREEN_POWER_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_GREEN_POWER_CLUSTER { ZCL_GREEN_POWER_CLUSTER_ID, 33, "Green Power" },
+#else
+#define CHIP_PRINTCLUSTER_GREEN_POWER_CLUSTER
+#endif
+
+#if defined(ZCL_USING_KEEPALIVE_CLUSTER_SERVER) || defined(ZCL_USING_KEEPALIVE_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_KEEPALIVE_CLUSTER { ZCL_KEEPALIVE_CLUSTER_ID, 37, "Keep-Alive" },
+#else
+#define CHIP_PRINTCLUSTER_KEEPALIVE_CLUSTER
+#endif
+
+#if defined(ZCL_USING_SHADE_CONFIG_CLUSTER_SERVER) || defined(ZCL_USING_SHADE_CONFIG_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_SHADE_CONFIG_CLUSTER { ZCL_SHADE_CONFIG_CLUSTER_ID, 256, "Shade Configuration" },
+#else
+#define CHIP_PRINTCLUSTER_SHADE_CONFIG_CLUSTER
+#endif
+
+#if defined(ZCL_USING_DOOR_LOCK_CLUSTER_SERVER) || defined(ZCL_USING_DOOR_LOCK_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_DOOR_LOCK_CLUSTER { ZCL_DOOR_LOCK_CLUSTER_ID, 257, "Door Lock" },
+#else
+#define CHIP_PRINTCLUSTER_DOOR_LOCK_CLUSTER
+#endif
+
+#if defined(ZCL_USING_WINDOW_COVERING_CLUSTER_SERVER) || defined(ZCL_USING_WINDOW_COVERING_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_WINDOW_COVERING_CLUSTER { ZCL_WINDOW_COVERING_CLUSTER_ID, 258, "Window Covering" },
+#else
+#define CHIP_PRINTCLUSTER_WINDOW_COVERING_CLUSTER
+#endif
+
+#if defined(ZCL_USING_BARRIER_CONTROL_CLUSTER_SERVER) || defined(ZCL_USING_BARRIER_CONTROL_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_BARRIER_CONTROL_CLUSTER { ZCL_BARRIER_CONTROL_CLUSTER_ID, 259, "Barrier Control" },
+#else
+#define CHIP_PRINTCLUSTER_BARRIER_CONTROL_CLUSTER
+#endif
+
+#if defined(ZCL_USING_PUMP_CONFIG_CONTROL_CLUSTER_SERVER) || defined(ZCL_USING_PUMP_CONFIG_CONTROL_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_PUMP_CONFIG_CONTROL_CLUSTER { ZCL_PUMP_CONFIG_CONTROL_CLUSTER_ID, 512, "Pump Configuration and Control" },
+#else
+#define CHIP_PRINTCLUSTER_PUMP_CONFIG_CONTROL_CLUSTER
+#endif
+
+#if defined(ZCL_USING_THERMOSTAT_CLUSTER_SERVER) || defined(ZCL_USING_THERMOSTAT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_THERMOSTAT_CLUSTER { ZCL_THERMOSTAT_CLUSTER_ID, 513, "Thermostat" },
+#else
+#define CHIP_PRINTCLUSTER_THERMOSTAT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_FAN_CONTROL_CLUSTER_SERVER) || defined(ZCL_USING_FAN_CONTROL_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_FAN_CONTROL_CLUSTER { ZCL_FAN_CONTROL_CLUSTER_ID, 514, "Fan Control" },
+#else
+#define CHIP_PRINTCLUSTER_FAN_CONTROL_CLUSTER
+#endif
+
+#if defined(ZCL_USING_DEHUMID_CONTROL_CLUSTER_SERVER) || defined(ZCL_USING_DEHUMID_CONTROL_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_DEHUMID_CONTROL_CLUSTER { ZCL_DEHUMID_CONTROL_CLUSTER_ID, 515, "Dehumidification Control" },
+#else
+#define CHIP_PRINTCLUSTER_DEHUMID_CONTROL_CLUSTER
+#endif
+
+#if defined(ZCL_USING_THERMOSTAT_UI_CONFIG_CLUSTER_SERVER) || defined(ZCL_USING_THERMOSTAT_UI_CONFIG_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_THERMOSTAT_UI_CONFIG_CLUSTER                                                                             \
+    { ZCL_THERMOSTAT_UI_CONFIG_CLUSTER_ID, 516, "Thermostat User Interface Configuration" },
+#else
+#define CHIP_PRINTCLUSTER_THERMOSTAT_UI_CONFIG_CLUSTER
+#endif
+
+#if defined(ZCL_USING_COLOR_CONTROL_CLUSTER_SERVER) || defined(ZCL_USING_COLOR_CONTROL_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_COLOR_CONTROL_CLUSTER { ZCL_COLOR_CONTROL_CLUSTER_ID, 768, "Color Control" },
+#else
+#define CHIP_PRINTCLUSTER_COLOR_CONTROL_CLUSTER
+#endif
+
+#if defined(ZCL_USING_BALLAST_CONFIGURATION_CLUSTER_SERVER) || defined(ZCL_USING_BALLAST_CONFIGURATION_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_BALLAST_CONFIGURATION_CLUSTER { ZCL_BALLAST_CONFIGURATION_CLUSTER_ID, 769, "Ballast Configuration" },
+#else
+#define CHIP_PRINTCLUSTER_BALLAST_CONFIGURATION_CLUSTER
+#endif
+
+#if defined(ZCL_USING_ILLUM_MEASUREMENT_CLUSTER_SERVER) || defined(ZCL_USING_ILLUM_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_ILLUM_MEASUREMENT_CLUSTER { ZCL_ILLUM_MEASUREMENT_CLUSTER_ID, 1024, "Illuminance Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_ILLUM_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_ILLUM_LEVEL_SENSING_CLUSTER_SERVER) || defined(ZCL_USING_ILLUM_LEVEL_SENSING_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_ILLUM_LEVEL_SENSING_CLUSTER { ZCL_ILLUM_LEVEL_SENSING_CLUSTER_ID, 1025, "Illuminance Level Sensing" },
+#else
+#define CHIP_PRINTCLUSTER_ILLUM_LEVEL_SENSING_CLUSTER
+#endif
+
+#if defined(ZCL_USING_TEMP_MEASUREMENT_CLUSTER_SERVER) || defined(ZCL_USING_TEMP_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_TEMP_MEASUREMENT_CLUSTER { ZCL_TEMP_MEASUREMENT_CLUSTER_ID, 1026, "Temperature Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_TEMP_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_PRESSURE_MEASUREMENT_CLUSTER_SERVER) || defined(ZCL_USING_PRESSURE_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_PRESSURE_MEASUREMENT_CLUSTER { ZCL_PRESSURE_MEASUREMENT_CLUSTER_ID, 1027, "Pressure Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_PRESSURE_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_FLOW_MEASUREMENT_CLUSTER_SERVER) || defined(ZCL_USING_FLOW_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_FLOW_MEASUREMENT_CLUSTER { ZCL_FLOW_MEASUREMENT_CLUSTER_ID, 1028, "Flow Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_FLOW_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_RELATIVE_HUMIDITY_MEASUREMENT_CLUSTER_SERVER) ||                                                             \
+    defined(ZCL_USING_RELATIVE_HUMIDITY_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_RELATIVE_HUMIDITY_MEASUREMENT_CLUSTER                                                                    \
+    { ZCL_RELATIVE_HUMIDITY_MEASUREMENT_CLUSTER_ID, 1029, "Relative Humidity Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_RELATIVE_HUMIDITY_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_OCCUPANCY_SENSING_CLUSTER_SERVER) || defined(ZCL_USING_OCCUPANCY_SENSING_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_OCCUPANCY_SENSING_CLUSTER { ZCL_OCCUPANCY_SENSING_CLUSTER_ID, 1030, "Occupancy Sensing" },
+#else
+#define CHIP_PRINTCLUSTER_OCCUPANCY_SENSING_CLUSTER
+#endif
+
+#if defined(ZCL_USING_CARBON_MONOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                                 \
+    defined(ZCL_USING_CARBON_MONOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_CARBON_MONOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER                                                        \
+    { ZCL_CARBON_MONOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1036, "Carbon Monoxide Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_CARBON_MONOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_CARBON_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                                  \
+    defined(ZCL_USING_CARBON_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_CARBON_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER                                                         \
+    { ZCL_CARBON_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1037, "Carbon Dioxide Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_CARBON_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_ETHYLENE_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                                        \
+    defined(ZCL_USING_ETHYLENE_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_ETHYLENE_CONCENTRATION_MEASUREMENT_CLUSTER                                                               \
+    { ZCL_ETHYLENE_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1038, "Ethylene Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_ETHYLENE_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_ETHYLENE_OXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                                  \
+    defined(ZCL_USING_ETHYLENE_OXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_ETHYLENE_OXIDE_CONCENTRATION_MEASUREMENT_CLUSTER                                                         \
+    { ZCL_ETHYLENE_OXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1039, "Ethylene Oxide Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_ETHYLENE_OXIDE_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_HYDROGEN_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                                        \
+    defined(ZCL_USING_HYDROGEN_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_HYDROGEN_CONCENTRATION_MEASUREMENT_CLUSTER                                                               \
+    { ZCL_HYDROGEN_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1040, "Hydrogen Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_HYDROGEN_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_HYDROGEN_SULPHIDE_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                               \
+    defined(ZCL_USING_HYDROGEN_SULPHIDE_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_HYDROGEN_SULPHIDE_CONCENTRATION_MEASUREMENT_CLUSTER                                                      \
+    { ZCL_HYDROGEN_SULPHIDE_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1041, "Hydrogen Sulphide Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_HYDROGEN_SULPHIDE_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_NITRIC_OXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                                    \
+    defined(ZCL_USING_NITRIC_OXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_NITRIC_OXIDE_CONCENTRATION_MEASUREMENT_CLUSTER                                                           \
+    { ZCL_NITRIC_OXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1042, "Nitric Oxide Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_NITRIC_OXIDE_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_NITROGEN_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                                \
+    defined(ZCL_USING_NITROGEN_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_NITROGEN_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER                                                       \
+    { ZCL_NITROGEN_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1043, "Nitrogen Dioxide Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_NITROGEN_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_OXYGEN_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                                          \
+    defined(ZCL_USING_OXYGEN_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_OXYGEN_CONCENTRATION_MEASUREMENT_CLUSTER                                                                 \
+    { ZCL_OXYGEN_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1044, "Oxygen Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_OXYGEN_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_OZONE_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                                           \
+    defined(ZCL_USING_OZONE_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_OZONE_CONCENTRATION_MEASUREMENT_CLUSTER                                                                  \
+    { ZCL_OZONE_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1045, "Ozone Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_OZONE_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_SULFUR_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                                  \
+    defined(ZCL_USING_SULFUR_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_SULFUR_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER                                                         \
+    { ZCL_SULFUR_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1046, "Sulfur Dioxide Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_SULFUR_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_DISSOLVED_OXYGEN_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                                \
+    defined(ZCL_USING_DISSOLVED_OXYGEN_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_DISSOLVED_OXYGEN_CONCENTRATION_MEASUREMENT_CLUSTER                                                       \
+    { ZCL_DISSOLVED_OXYGEN_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1047, "Dissolved Oxygen Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_DISSOLVED_OXYGEN_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_BROMATE_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                                         \
+    defined(ZCL_USING_BROMATE_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_BROMATE_CONCENTRATION_MEASUREMENT_CLUSTER                                                                \
+    { ZCL_BROMATE_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1048, "Bromate Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_BROMATE_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_CHLORAMINES_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                                     \
+    defined(ZCL_USING_CHLORAMINES_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_CHLORAMINES_CONCENTRATION_MEASUREMENT_CLUSTER                                                            \
+    { ZCL_CHLORAMINES_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1049, "Chloramines Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_CHLORAMINES_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_CHLORINE_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                                        \
+    defined(ZCL_USING_CHLORINE_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_CHLORINE_CONCENTRATION_MEASUREMENT_CLUSTER                                                               \
+    { ZCL_CHLORINE_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1050, "Chlorine Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_CHLORINE_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_FECAL_COLIFORM_AND_E_COLI_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                       \
+    defined(ZCL_USING_FECAL_COLIFORM_AND_E_COLI_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_FECAL_COLIFORM_AND_E_COLI_CONCENTRATION_MEASUREMENT_CLUSTER                                              \
+    { ZCL_FECAL_COLIFORM_AND_E_COLI_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1051,                                                    \
+      "Fecal coliform and E. Coli Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_FECAL_COLIFORM_AND_E_COLI_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_FLUORIDE_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                                        \
+    defined(ZCL_USING_FLUORIDE_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_FLUORIDE_CONCENTRATION_MEASUREMENT_CLUSTER                                                               \
+    { ZCL_FLUORIDE_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1052, "Fluoride Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_FLUORIDE_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_HALOACETIC_ACIDS_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                                \
+    defined(ZCL_USING_HALOACETIC_ACIDS_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_HALOACETIC_ACIDS_CONCENTRATION_MEASUREMENT_CLUSTER                                                       \
+    { ZCL_HALOACETIC_ACIDS_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1053, "Haloacetic Acids Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_HALOACETIC_ACIDS_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_TOTAL_TRIHALOMETHANES_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                           \
+    defined(ZCL_USING_TOTAL_TRIHALOMETHANES_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_TOTAL_TRIHALOMETHANES_CONCENTRATION_MEASUREMENT_CLUSTER                                                  \
+    { ZCL_TOTAL_TRIHALOMETHANES_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1054, "Total Trihalomethanes Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_TOTAL_TRIHALOMETHANES_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_TOTAL_COLIFORM_BACTERIA_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                         \
+    defined(ZCL_USING_TOTAL_COLIFORM_BACTERIA_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_TOTAL_COLIFORM_BACTERIA_CONCENTRATION_MEASUREMENT_CLUSTER                                                \
+    { ZCL_TOTAL_COLIFORM_BACTERIA_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1055, "Total Coliform Bacteria Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_TOTAL_COLIFORM_BACTERIA_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_TURBIDITY_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                                       \
+    defined(ZCL_USING_TURBIDITY_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_TURBIDITY_CONCENTRATION_MEASUREMENT_CLUSTER                                                              \
+    { ZCL_TURBIDITY_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1056, "Turbidity Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_TURBIDITY_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_COPPER_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                                          \
+    defined(ZCL_USING_COPPER_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_COPPER_CONCENTRATION_MEASUREMENT_CLUSTER                                                                 \
+    { ZCL_COPPER_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1057, "Copper Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_COPPER_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_LEAD_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                                            \
+    defined(ZCL_USING_LEAD_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_LEAD_CONCENTRATION_MEASUREMENT_CLUSTER                                                                   \
+    { ZCL_LEAD_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1058, "Lead Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_LEAD_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_MANGANESE_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                                       \
+    defined(ZCL_USING_MANGANESE_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_MANGANESE_CONCENTRATION_MEASUREMENT_CLUSTER                                                              \
+    { ZCL_MANGANESE_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1059, "Manganese Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_MANGANESE_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_SULFATE_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                                         \
+    defined(ZCL_USING_SULFATE_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_SULFATE_CONCENTRATION_MEASUREMENT_CLUSTER                                                                \
+    { ZCL_SULFATE_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1060, "Sulfate Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_SULFATE_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_BROMODICHLOROMETHANE_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                            \
+    defined(ZCL_USING_BROMODICHLOROMETHANE_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_BROMODICHLOROMETHANE_CONCENTRATION_MEASUREMENT_CLUSTER                                                   \
+    { ZCL_BROMODICHLOROMETHANE_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1061, "Bromodichloromethane Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_BROMODICHLOROMETHANE_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_BROMOFORM_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                                       \
+    defined(ZCL_USING_BROMOFORM_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_BROMOFORM_CONCENTRATION_MEASUREMENT_CLUSTER                                                              \
+    { ZCL_BROMOFORM_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1062, "Bromoform Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_BROMOFORM_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_CHLORODIBROMOMETHANE_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                            \
+    defined(ZCL_USING_CHLORODIBROMOMETHANE_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_CHLORODIBROMOMETHANE_CONCENTRATION_MEASUREMENT_CLUSTER                                                   \
+    { ZCL_CHLORODIBROMOMETHANE_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1063, "Chlorodibromomethane Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_CHLORODIBROMOMETHANE_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_CHLOROFORM_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                                      \
+    defined(ZCL_USING_CHLOROFORM_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_CHLOROFORM_CONCENTRATION_MEASUREMENT_CLUSTER                                                             \
+    { ZCL_CHLOROFORM_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1064, "Chloroform Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_CHLOROFORM_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_SODIUM_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                                          \
+    defined(ZCL_USING_SODIUM_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_SODIUM_CONCENTRATION_MEASUREMENT_CLUSTER                                                                 \
+    { ZCL_SODIUM_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1065, "Sodium Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_SODIUM_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_IAS_ZONE_CLUSTER_SERVER) || defined(ZCL_USING_IAS_ZONE_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_IAS_ZONE_CLUSTER { ZCL_IAS_ZONE_CLUSTER_ID, 1280, "IAS Zone" },
+#else
+#define CHIP_PRINTCLUSTER_IAS_ZONE_CLUSTER
+#endif
+
+#if defined(ZCL_USING_IAS_ACE_CLUSTER_SERVER) || defined(ZCL_USING_IAS_ACE_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_IAS_ACE_CLUSTER { ZCL_IAS_ACE_CLUSTER_ID, 1281, "IAS ACE" },
+#else
+#define CHIP_PRINTCLUSTER_IAS_ACE_CLUSTER
+#endif
+
+#if defined(ZCL_USING_IAS_WD_CLUSTER_SERVER) || defined(ZCL_USING_IAS_WD_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_IAS_WD_CLUSTER { ZCL_IAS_WD_CLUSTER_ID, 1282, "IAS WD" },
+#else
+#define CHIP_PRINTCLUSTER_IAS_WD_CLUSTER
+#endif
+
+#if defined(ZCL_USING_GENERIC_TUNNEL_CLUSTER_SERVER) || defined(ZCL_USING_GENERIC_TUNNEL_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_GENERIC_TUNNEL_CLUSTER { ZCL_GENERIC_TUNNEL_CLUSTER_ID, 1536, "Generic Tunnel" },
+#else
+#define CHIP_PRINTCLUSTER_GENERIC_TUNNEL_CLUSTER
+#endif
+
+#if defined(ZCL_USING_BACNET_PROTOCOL_TUNNEL_CLUSTER_SERVER) || defined(ZCL_USING_BACNET_PROTOCOL_TUNNEL_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_BACNET_PROTOCOL_TUNNEL_CLUSTER { ZCL_BACNET_PROTOCOL_TUNNEL_CLUSTER_ID, 1537, "BACnet Protocol Tunnel" },
+#else
+#define CHIP_PRINTCLUSTER_BACNET_PROTOCOL_TUNNEL_CLUSTER
+#endif
+
+#if defined(ZCL_USING_11073_PROTOCOL_TUNNEL_CLUSTER_SERVER) || defined(ZCL_USING_11073_PROTOCOL_TUNNEL_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_11073_PROTOCOL_TUNNEL_CLUSTER { ZCL_11073_PROTOCOL_TUNNEL_CLUSTER_ID, 1556, "11073 Protocol Tunnel" },
+#else
+#define CHIP_PRINTCLUSTER_11073_PROTOCOL_TUNNEL_CLUSTER
+#endif
+
+#if defined(ZCL_USING_ISO7816_PROTOCOL_TUNNEL_CLUSTER_SERVER) || defined(ZCL_USING_ISO7816_PROTOCOL_TUNNEL_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_ISO7816_PROTOCOL_TUNNEL_CLUSTER                                                                          \
+    { ZCL_ISO7816_PROTOCOL_TUNNEL_CLUSTER_ID, 1557, "ISO 7816 Protocol Tunnel" },
+#else
+#define CHIP_PRINTCLUSTER_ISO7816_PROTOCOL_TUNNEL_CLUSTER
+#endif
+
+#if defined(ZCL_USING_PRICE_CLUSTER_SERVER) || defined(ZCL_USING_PRICE_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_PRICE_CLUSTER { ZCL_PRICE_CLUSTER_ID, 1792, "Price" },
+#else
+#define CHIP_PRINTCLUSTER_PRICE_CLUSTER
+#endif
+
+#if defined(ZCL_USING_DEMAND_RESPONSE_LOAD_CONTROL_CLUSTER_SERVER) || defined(ZCL_USING_DEMAND_RESPONSE_LOAD_CONTROL_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_DEMAND_RESPONSE_LOAD_CONTROL_CLUSTER                                                                     \
+    { ZCL_DEMAND_RESPONSE_LOAD_CONTROL_CLUSTER_ID, 1793, "Demand Response and Load Control" },
+#else
+#define CHIP_PRINTCLUSTER_DEMAND_RESPONSE_LOAD_CONTROL_CLUSTER
+#endif
+
+#if defined(ZCL_USING_SIMPLE_METERING_CLUSTER_SERVER) || defined(ZCL_USING_SIMPLE_METERING_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_SIMPLE_METERING_CLUSTER { ZCL_SIMPLE_METERING_CLUSTER_ID, 1794, "Simple Metering" },
+#else
+#define CHIP_PRINTCLUSTER_SIMPLE_METERING_CLUSTER
+#endif
+
+#if defined(ZCL_USING_MESSAGING_CLUSTER_SERVER) || defined(ZCL_USING_MESSAGING_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_MESSAGING_CLUSTER { ZCL_MESSAGING_CLUSTER_ID, 1795, "Messaging" },
+#else
+#define CHIP_PRINTCLUSTER_MESSAGING_CLUSTER
+#endif
+
+#if defined(ZCL_USING_TUNNELING_CLUSTER_SERVER) || defined(ZCL_USING_TUNNELING_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_TUNNELING_CLUSTER { ZCL_TUNNELING_CLUSTER_ID, 1796, "Tunneling" },
+#else
+#define CHIP_PRINTCLUSTER_TUNNELING_CLUSTER
+#endif
+
+#if defined(ZCL_USING_PREPAYMENT_CLUSTER_SERVER) || defined(ZCL_USING_PREPAYMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_PREPAYMENT_CLUSTER { ZCL_PREPAYMENT_CLUSTER_ID, 1797, "Prepayment" },
+#else
+#define CHIP_PRINTCLUSTER_PREPAYMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_ENERGY_MANAGEMENT_CLUSTER_SERVER) || defined(ZCL_USING_ENERGY_MANAGEMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_ENERGY_MANAGEMENT_CLUSTER { ZCL_ENERGY_MANAGEMENT_CLUSTER_ID, 1798, "Energy Management" },
+#else
+#define CHIP_PRINTCLUSTER_ENERGY_MANAGEMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_CALENDAR_CLUSTER_SERVER) || defined(ZCL_USING_CALENDAR_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_CALENDAR_CLUSTER { ZCL_CALENDAR_CLUSTER_ID, 1799, "Calendar" },
+#else
+#define CHIP_PRINTCLUSTER_CALENDAR_CLUSTER
+#endif
+
+#if defined(ZCL_USING_DEVICE_MANAGEMENT_CLUSTER_SERVER) || defined(ZCL_USING_DEVICE_MANAGEMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_DEVICE_MANAGEMENT_CLUSTER { ZCL_DEVICE_MANAGEMENT_CLUSTER_ID, 1800, "Device Management" },
+#else
+#define CHIP_PRINTCLUSTER_DEVICE_MANAGEMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_EVENTS_CLUSTER_SERVER) || defined(ZCL_USING_EVENTS_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_EVENTS_CLUSTER { ZCL_EVENTS_CLUSTER_ID, 1801, "Events" },
+#else
+#define CHIP_PRINTCLUSTER_EVENTS_CLUSTER
+#endif
+
+#if defined(ZCL_USING_MDU_PAIRING_CLUSTER_SERVER) || defined(ZCL_USING_MDU_PAIRING_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_MDU_PAIRING_CLUSTER { ZCL_MDU_PAIRING_CLUSTER_ID, 1802, "MDU Pairing" },
+#else
+#define CHIP_PRINTCLUSTER_MDU_PAIRING_CLUSTER
+#endif
+
+#if defined(ZCL_USING_SUB_GHZ_CLUSTER_SERVER) || defined(ZCL_USING_SUB_GHZ_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_SUB_GHZ_CLUSTER { ZCL_SUB_GHZ_CLUSTER_ID, 1803, "Sub-GHz" },
+#else
+#define CHIP_PRINTCLUSTER_SUB_GHZ_CLUSTER
+#endif
+
+#if defined(ZCL_USING_KEY_ESTABLISHMENT_CLUSTER_SERVER) || defined(ZCL_USING_KEY_ESTABLISHMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_KEY_ESTABLISHMENT_CLUSTER { ZCL_KEY_ESTABLISHMENT_CLUSTER_ID, 2048, "Key Establishment" },
+#else
+#define CHIP_PRINTCLUSTER_KEY_ESTABLISHMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_INFORMATION_CLUSTER_SERVER) || defined(ZCL_USING_INFORMATION_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_INFORMATION_CLUSTER { ZCL_INFORMATION_CLUSTER_ID, 2304, "Information" },
+#else
+#define CHIP_PRINTCLUSTER_INFORMATION_CLUSTER
+#endif
+
+#if defined(ZCL_USING_DATA_SHARING_CLUSTER_SERVER) || defined(ZCL_USING_DATA_SHARING_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_DATA_SHARING_CLUSTER { ZCL_DATA_SHARING_CLUSTER_ID, 2305, "Data Sharing" },
+#else
+#define CHIP_PRINTCLUSTER_DATA_SHARING_CLUSTER
+#endif
+
+#if defined(ZCL_USING_GAMING_CLUSTER_SERVER) || defined(ZCL_USING_GAMING_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_GAMING_CLUSTER { ZCL_GAMING_CLUSTER_ID, 2306, "Gaming" },
+#else
+#define CHIP_PRINTCLUSTER_GAMING_CLUSTER
+#endif
+
+#if defined(ZCL_USING_DATA_RATE_CONTROL_CLUSTER_SERVER) || defined(ZCL_USING_DATA_RATE_CONTROL_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_DATA_RATE_CONTROL_CLUSTER { ZCL_DATA_RATE_CONTROL_CLUSTER_ID, 2307, "Data Rate Control" },
+#else
+#define CHIP_PRINTCLUSTER_DATA_RATE_CONTROL_CLUSTER
+#endif
+
+#if defined(ZCL_USING_VOICE_OVER_ZIGBEE_CLUSTER_SERVER) || defined(ZCL_USING_VOICE_OVER_ZIGBEE_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_VOICE_OVER_ZIGBEE_CLUSTER { ZCL_VOICE_OVER_ZIGBEE_CLUSTER_ID, 2308, "Voice over ZigBee" },
+#else
+#define CHIP_PRINTCLUSTER_VOICE_OVER_ZIGBEE_CLUSTER
+#endif
+
+#if defined(ZCL_USING_CHATTING_CLUSTER_SERVER) || defined(ZCL_USING_CHATTING_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_CHATTING_CLUSTER { ZCL_CHATTING_CLUSTER_ID, 2309, "Chatting" },
+#else
+#define CHIP_PRINTCLUSTER_CHATTING_CLUSTER
+#endif
+
+#if defined(ZCL_USING_PAYMENT_CLUSTER_SERVER) || defined(ZCL_USING_PAYMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_PAYMENT_CLUSTER { ZCL_PAYMENT_CLUSTER_ID, 2561, "Payment" },
+#else
+#define CHIP_PRINTCLUSTER_PAYMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_BILLING_CLUSTER_SERVER) || defined(ZCL_USING_BILLING_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_BILLING_CLUSTER { ZCL_BILLING_CLUSTER_ID, 2562, "Billing" },
+#else
+#define CHIP_PRINTCLUSTER_BILLING_CLUSTER
+#endif
+
+#if defined(ZCL_USING_APPLIANCE_IDENTIFICATION_CLUSTER_SERVER) || defined(ZCL_USING_APPLIANCE_IDENTIFICATION_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_APPLIANCE_IDENTIFICATION_CLUSTER                                                                         \
+    { ZCL_APPLIANCE_IDENTIFICATION_CLUSTER_ID, 2816, "Appliance Identification" },
+#else
+#define CHIP_PRINTCLUSTER_APPLIANCE_IDENTIFICATION_CLUSTER
+#endif
+
+#if defined(ZCL_USING_METER_IDENTIFICATION_CLUSTER_SERVER) || defined(ZCL_USING_METER_IDENTIFICATION_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_METER_IDENTIFICATION_CLUSTER { ZCL_METER_IDENTIFICATION_CLUSTER_ID, 2817, "Meter Identification" },
+#else
+#define CHIP_PRINTCLUSTER_METER_IDENTIFICATION_CLUSTER
+#endif
+
+#if defined(ZCL_USING_APPLIANCE_EVENTS_AND_ALERT_CLUSTER_SERVER) || defined(ZCL_USING_APPLIANCE_EVENTS_AND_ALERT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_APPLIANCE_EVENTS_AND_ALERT_CLUSTER                                                                       \
+    { ZCL_APPLIANCE_EVENTS_AND_ALERT_CLUSTER_ID, 2818, "Appliance Events and Alert" },
+#else
+#define CHIP_PRINTCLUSTER_APPLIANCE_EVENTS_AND_ALERT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_APPLIANCE_STATISTICS_CLUSTER_SERVER) || defined(ZCL_USING_APPLIANCE_STATISTICS_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_APPLIANCE_STATISTICS_CLUSTER { ZCL_APPLIANCE_STATISTICS_CLUSTER_ID, 2819, "Appliance Statistics" },
+#else
+#define CHIP_PRINTCLUSTER_APPLIANCE_STATISTICS_CLUSTER
+#endif
+
+#if defined(ZCL_USING_ELECTRICAL_MEASUREMENT_CLUSTER_SERVER) || defined(ZCL_USING_ELECTRICAL_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_ELECTRICAL_MEASUREMENT_CLUSTER { ZCL_ELECTRICAL_MEASUREMENT_CLUSTER_ID, 2820, "Electrical Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_ELECTRICAL_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_DIAGNOSTICS_CLUSTER_SERVER) || defined(ZCL_USING_DIAGNOSTICS_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_DIAGNOSTICS_CLUSTER { ZCL_DIAGNOSTICS_CLUSTER_ID, 2821, "Diagnostics" },
+#else
+#define CHIP_PRINTCLUSTER_DIAGNOSTICS_CLUSTER
+#endif
+
+#if defined(ZCL_USING_ZLL_COMMISSIONING_CLUSTER_SERVER) || defined(ZCL_USING_ZLL_COMMISSIONING_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_ZLL_COMMISSIONING_CLUSTER { ZCL_ZLL_COMMISSIONING_CLUSTER_ID, 4096, "ZLL Commissioning" },
+#else
+#define CHIP_PRINTCLUSTER_ZLL_COMMISSIONING_CLUSTER
+#endif
+
+#if defined(ZCL_USING_BINDING_CLUSTER_SERVER) || defined(ZCL_USING_BINDING_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_BINDING_CLUSTER { ZCL_BINDING_CLUSTER_ID, 61440, "Binding" },
+#else
+#define CHIP_PRINTCLUSTER_BINDING_CLUSTER
+#endif
+
+#if defined(ZCL_USING_SAMPLE_MFG_SPECIFIC_CLUSTER_SERVER) || defined(ZCL_USING_SAMPLE_MFG_SPECIFIC_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_SAMPLE_MFG_SPECIFIC_CLUSTER { ZCL_SAMPLE_MFG_SPECIFIC_CLUSTER_ID, 64512, "Sample Mfg Specific Cluster" },
+#else
+#define CHIP_PRINTCLUSTER_SAMPLE_MFG_SPECIFIC_CLUSTER
+#endif
+
+#if defined(ZCL_USING_SAMPLE_MFG_SPECIFIC_CLUSTER_2_SERVER) || defined(ZCL_USING_SAMPLE_MFG_SPECIFIC_CLUSTER_2_CLIENT)
+#define CHIP_PRINTCLUSTER_SAMPLE_MFG_SPECIFIC_CLUSTER_2                                                                            \
+    { ZCL_SAMPLE_MFG_SPECIFIC_CLUSTER_2_ID, 64512, "Sample Mfg Specific Cluster 2" },
+#else
+#define CHIP_PRINTCLUSTER_SAMPLE_MFG_SPECIFIC_CLUSTER_2
+#endif
+
+#if defined(ZCL_USING_OTA_CONFIGURATION_CLUSTER_SERVER) || defined(ZCL_USING_OTA_CONFIGURATION_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_OTA_CONFIGURATION_CLUSTER { ZCL_OTA_CONFIGURATION_CLUSTER_ID, 64513, "Configuration Cluster" },
+#else
+#define CHIP_PRINTCLUSTER_OTA_CONFIGURATION_CLUSTER
+#endif
+
+#if defined(ZCL_USING_MFGLIB_CLUSTER_SERVER) || defined(ZCL_USING_MFGLIB_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_MFGLIB_CLUSTER { ZCL_MFGLIB_CLUSTER_ID, 64514, "MFGLIB Cluster" },
+#else
+#define CHIP_PRINTCLUSTER_MFGLIB_CLUSTER
+#endif
+
+#if defined(ZCL_USING_SL_WWAH_CLUSTER_SERVER) || defined(ZCL_USING_SL_WWAH_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_SL_WWAH_CLUSTER { ZCL_SL_WWAH_CLUSTER_ID, 64599, "SL Works With All Hubs" },
+#else
+#define CHIP_PRINTCLUSTER_SL_WWAH_CLUSTER
+#endif
+
+#define CLUSTER_IDS_TO_NAMES                                                                                                       \
+    CHIP_PRINTCLUSTER_BASIC_CLUSTER                                                                                                \
+    CHIP_PRINTCLUSTER_POWER_CONFIG_CLUSTER                                                                                         \
+    CHIP_PRINTCLUSTER_DEVICE_TEMP_CLUSTER                                                                                          \
+    CHIP_PRINTCLUSTER_IDENTIFY_CLUSTER                                                                                             \
+    CHIP_PRINTCLUSTER_GROUPS_CLUSTER                                                                                               \
+    CHIP_PRINTCLUSTER_SCENES_CLUSTER                                                                                               \
+    CHIP_PRINTCLUSTER_ON_OFF_CLUSTER                                                                                               \
+    CHIP_PRINTCLUSTER_ON_OFF_SWITCH_CONFIG_CLUSTER                                                                                 \
+    CHIP_PRINTCLUSTER_LEVEL_CONTROL_CLUSTER                                                                                        \
+    CHIP_PRINTCLUSTER_ALARM_CLUSTER                                                                                                \
+    CHIP_PRINTCLUSTER_TIME_CLUSTER                                                                                                 \
+    CHIP_PRINTCLUSTER_RSSI_LOCATION_CLUSTER                                                                                        \
+    CHIP_PRINTCLUSTER_BINARY_INPUT_BASIC_CLUSTER                                                                                   \
+    CHIP_PRINTCLUSTER_COMMISSIONING_CLUSTER                                                                                        \
+    CHIP_PRINTCLUSTER_PARTITION_CLUSTER                                                                                            \
+    CHIP_PRINTCLUSTER_OTA_BOOTLOAD_CLUSTER                                                                                         \
+    CHIP_PRINTCLUSTER_POWER_PROFILE_CLUSTER                                                                                        \
+    CHIP_PRINTCLUSTER_APPLIANCE_CONTROL_CLUSTER                                                                                    \
+    CHIP_PRINTCLUSTER_POLL_CONTROL_CLUSTER                                                                                         \
+    CHIP_PRINTCLUSTER_GREEN_POWER_CLUSTER                                                                                          \
+    CHIP_PRINTCLUSTER_KEEPALIVE_CLUSTER                                                                                            \
+    CHIP_PRINTCLUSTER_SHADE_CONFIG_CLUSTER                                                                                         \
+    CHIP_PRINTCLUSTER_DOOR_LOCK_CLUSTER                                                                                            \
+    CHIP_PRINTCLUSTER_WINDOW_COVERING_CLUSTER                                                                                      \
+    CHIP_PRINTCLUSTER_BARRIER_CONTROL_CLUSTER                                                                                      \
+    CHIP_PRINTCLUSTER_PUMP_CONFIG_CONTROL_CLUSTER                                                                                  \
+    CHIP_PRINTCLUSTER_THERMOSTAT_CLUSTER                                                                                           \
+    CHIP_PRINTCLUSTER_FAN_CONTROL_CLUSTER                                                                                          \
+    CHIP_PRINTCLUSTER_DEHUMID_CONTROL_CLUSTER                                                                                      \
+    CHIP_PRINTCLUSTER_THERMOSTAT_UI_CONFIG_CLUSTER                                                                                 \
+    CHIP_PRINTCLUSTER_COLOR_CONTROL_CLUSTER                                                                                        \
+    CHIP_PRINTCLUSTER_BALLAST_CONFIGURATION_CLUSTER                                                                                \
+    CHIP_PRINTCLUSTER_ILLUM_MEASUREMENT_CLUSTER                                                                                    \
+    CHIP_PRINTCLUSTER_ILLUM_LEVEL_SENSING_CLUSTER                                                                                  \
+    CHIP_PRINTCLUSTER_TEMP_MEASUREMENT_CLUSTER                                                                                     \
+    CHIP_PRINTCLUSTER_PRESSURE_MEASUREMENT_CLUSTER                                                                                 \
+    CHIP_PRINTCLUSTER_FLOW_MEASUREMENT_CLUSTER                                                                                     \
+    CHIP_PRINTCLUSTER_RELATIVE_HUMIDITY_MEASUREMENT_CLUSTER                                                                        \
+    CHIP_PRINTCLUSTER_OCCUPANCY_SENSING_CLUSTER                                                                                    \
+    CHIP_PRINTCLUSTER_CARBON_MONOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER                                                            \
+    CHIP_PRINTCLUSTER_CARBON_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER                                                             \
+    CHIP_PRINTCLUSTER_ETHYLENE_CONCENTRATION_MEASUREMENT_CLUSTER                                                                   \
+    CHIP_PRINTCLUSTER_ETHYLENE_OXIDE_CONCENTRATION_MEASUREMENT_CLUSTER                                                             \
+    CHIP_PRINTCLUSTER_HYDROGEN_CONCENTRATION_MEASUREMENT_CLUSTER                                                                   \
+    CHIP_PRINTCLUSTER_HYDROGEN_SULPHIDE_CONCENTRATION_MEASUREMENT_CLUSTER                                                          \
+    CHIP_PRINTCLUSTER_NITRIC_OXIDE_CONCENTRATION_MEASUREMENT_CLUSTER                                                               \
+    CHIP_PRINTCLUSTER_NITROGEN_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER                                                           \
+    CHIP_PRINTCLUSTER_OXYGEN_CONCENTRATION_MEASUREMENT_CLUSTER                                                                     \
+    CHIP_PRINTCLUSTER_OZONE_CONCENTRATION_MEASUREMENT_CLUSTER                                                                      \
+    CHIP_PRINTCLUSTER_SULFUR_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER                                                             \
+    CHIP_PRINTCLUSTER_DISSOLVED_OXYGEN_CONCENTRATION_MEASUREMENT_CLUSTER                                                           \
+    CHIP_PRINTCLUSTER_BROMATE_CONCENTRATION_MEASUREMENT_CLUSTER                                                                    \
+    CHIP_PRINTCLUSTER_CHLORAMINES_CONCENTRATION_MEASUREMENT_CLUSTER                                                                \
+    CHIP_PRINTCLUSTER_CHLORINE_CONCENTRATION_MEASUREMENT_CLUSTER                                                                   \
+    CHIP_PRINTCLUSTER_FECAL_COLIFORM_AND_E_COLI_CONCENTRATION_MEASUREMENT_CLUSTER                                                  \
+    CHIP_PRINTCLUSTER_FLUORIDE_CONCENTRATION_MEASUREMENT_CLUSTER                                                                   \
+    CHIP_PRINTCLUSTER_HALOACETIC_ACIDS_CONCENTRATION_MEASUREMENT_CLUSTER                                                           \
+    CHIP_PRINTCLUSTER_TOTAL_TRIHALOMETHANES_CONCENTRATION_MEASUREMENT_CLUSTER                                                      \
+    CHIP_PRINTCLUSTER_TOTAL_COLIFORM_BACTERIA_CONCENTRATION_MEASUREMENT_CLUSTER                                                    \
+    CHIP_PRINTCLUSTER_TURBIDITY_CONCENTRATION_MEASUREMENT_CLUSTER                                                                  \
+    CHIP_PRINTCLUSTER_COPPER_CONCENTRATION_MEASUREMENT_CLUSTER                                                                     \
+    CHIP_PRINTCLUSTER_LEAD_CONCENTRATION_MEASUREMENT_CLUSTER                                                                       \
+    CHIP_PRINTCLUSTER_MANGANESE_CONCENTRATION_MEASUREMENT_CLUSTER                                                                  \
+    CHIP_PRINTCLUSTER_SULFATE_CONCENTRATION_MEASUREMENT_CLUSTER                                                                    \
+    CHIP_PRINTCLUSTER_BROMODICHLOROMETHANE_CONCENTRATION_MEASUREMENT_CLUSTER                                                       \
+    CHIP_PRINTCLUSTER_BROMOFORM_CONCENTRATION_MEASUREMENT_CLUSTER                                                                  \
+    CHIP_PRINTCLUSTER_CHLORODIBROMOMETHANE_CONCENTRATION_MEASUREMENT_CLUSTER                                                       \
+    CHIP_PRINTCLUSTER_CHLOROFORM_CONCENTRATION_MEASUREMENT_CLUSTER                                                                 \
+    CHIP_PRINTCLUSTER_SODIUM_CONCENTRATION_MEASUREMENT_CLUSTER                                                                     \
+    CHIP_PRINTCLUSTER_IAS_ZONE_CLUSTER                                                                                             \
+    CHIP_PRINTCLUSTER_IAS_ACE_CLUSTER                                                                                              \
+    CHIP_PRINTCLUSTER_IAS_WD_CLUSTER                                                                                               \
+    CHIP_PRINTCLUSTER_GENERIC_TUNNEL_CLUSTER                                                                                       \
+    CHIP_PRINTCLUSTER_BACNET_PROTOCOL_TUNNEL_CLUSTER                                                                               \
+    CHIP_PRINTCLUSTER_11073_PROTOCOL_TUNNEL_CLUSTER                                                                                \
+    CHIP_PRINTCLUSTER_ISO7816_PROTOCOL_TUNNEL_CLUSTER                                                                              \
+    CHIP_PRINTCLUSTER_PRICE_CLUSTER                                                                                                \
+    CHIP_PRINTCLUSTER_DEMAND_RESPONSE_LOAD_CONTROL_CLUSTER                                                                         \
+    CHIP_PRINTCLUSTER_SIMPLE_METERING_CLUSTER                                                                                      \
+    CHIP_PRINTCLUSTER_MESSAGING_CLUSTER                                                                                            \
+    CHIP_PRINTCLUSTER_TUNNELING_CLUSTER                                                                                            \
+    CHIP_PRINTCLUSTER_PREPAYMENT_CLUSTER                                                                                           \
+    CHIP_PRINTCLUSTER_ENERGY_MANAGEMENT_CLUSTER                                                                                    \
+    CHIP_PRINTCLUSTER_CALENDAR_CLUSTER                                                                                             \
+    CHIP_PRINTCLUSTER_DEVICE_MANAGEMENT_CLUSTER                                                                                    \
+    CHIP_PRINTCLUSTER_EVENTS_CLUSTER                                                                                               \
+    CHIP_PRINTCLUSTER_MDU_PAIRING_CLUSTER                                                                                          \
+    CHIP_PRINTCLUSTER_SUB_GHZ_CLUSTER                                                                                              \
+    CHIP_PRINTCLUSTER_KEY_ESTABLISHMENT_CLUSTER                                                                                    \
+    CHIP_PRINTCLUSTER_INFORMATION_CLUSTER                                                                                          \
+    CHIP_PRINTCLUSTER_DATA_SHARING_CLUSTER                                                                                         \
+    CHIP_PRINTCLUSTER_GAMING_CLUSTER                                                                                               \
+    CHIP_PRINTCLUSTER_DATA_RATE_CONTROL_CLUSTER                                                                                    \
+    CHIP_PRINTCLUSTER_VOICE_OVER_ZIGBEE_CLUSTER                                                                                    \
+    CHIP_PRINTCLUSTER_CHATTING_CLUSTER                                                                                             \
+    CHIP_PRINTCLUSTER_PAYMENT_CLUSTER                                                                                              \
+    CHIP_PRINTCLUSTER_BILLING_CLUSTER                                                                                              \
+    CHIP_PRINTCLUSTER_APPLIANCE_IDENTIFICATION_CLUSTER                                                                             \
+    CHIP_PRINTCLUSTER_METER_IDENTIFICATION_CLUSTER                                                                                 \
+    CHIP_PRINTCLUSTER_APPLIANCE_EVENTS_AND_ALERT_CLUSTER                                                                           \
+    CHIP_PRINTCLUSTER_APPLIANCE_STATISTICS_CLUSTER                                                                                 \
+    CHIP_PRINTCLUSTER_ELECTRICAL_MEASUREMENT_CLUSTER                                                                               \
+    CHIP_PRINTCLUSTER_DIAGNOSTICS_CLUSTER                                                                                          \
+    CHIP_PRINTCLUSTER_ZLL_COMMISSIONING_CLUSTER                                                                                    \
+    CHIP_PRINTCLUSTER_BINDING_CLUSTER                                                                                              \
+    CHIP_PRINTCLUSTER_SAMPLE_MFG_SPECIFIC_CLUSTER                                                                                  \
+    CHIP_PRINTCLUSTER_SAMPLE_MFG_SPECIFIC_CLUSTER_2                                                                                \
+    CHIP_PRINTCLUSTER_OTA_CONFIGURATION_CLUSTER                                                                                    \
+    CHIP_PRINTCLUSTER_MFGLIB_CLUSTER                                                                                               \
+    CHIP_PRINTCLUSTER_SL_WWAH_CLUSTER
+
+#define MAX_CLUSTER_NAME_LENGTH 52
diff --git a/examples/chip-tool/main.cpp b/examples/chip-tool/main.cpp
index 5b7b3ae..00d7054 100644
--- a/examples/chip-tool/main.cpp
+++ b/examples/chip-tool/main.cpp
@@ -21,6 +21,7 @@
 #include "commands/clusters/Commands.h"
 #include "commands/pairing/Commands.h"
 #include "commands/payload/Commands.h"
+#include "commands/reporting/Commands.h"
 
 #include <transport/PASESession.h>
 
@@ -29,9 +30,12 @@
 // ================================================================================
 int main(int argc, char * argv[])
 {
+    InitDataModelHandler();
+
     Commands commands;
     registerCommandsPayload(commands);
     registerCommandsPairing(commands);
+    registerCommandsReporting(commands);
     registerClusters(commands);
 
     return commands.Run(chip::kTestControllerNodeId, chip::kTestDeviceNodeId, argc, argv);
diff --git a/examples/chip-tool/templates/commands.zapt b/examples/chip-tool/templates/commands.zapt
new file mode 100644
index 0000000..73bc60b
--- /dev/null
+++ b/examples/chip-tool/templates/commands.zapt
@@ -0,0 +1,297 @@
+{{> header}}
+
+#pragma once
+
+#include "ModelCommand.h"
+#include "gen/CHIPClientCallbacks.h"
+#include <controller/CHIPClusters.h>
+
+static void OnDefaultSuccessResponse(void * context)
+{
+    ChipLogProgress(chipTool, "Default Success Response");
+
+    ModelCommand * command = reinterpret_cast<ModelCommand *>(context);
+    command->SetCommandExitStatus(true);
+}
+
+static void OnDefaultFailureResponse(void * context, uint8_t status)
+{
+    ChipLogProgress(chipTool, "Default Failure Response: 0x%02x", status);
+
+    ModelCommand * command = reinterpret_cast<ModelCommand *>(context);
+    command->SetCommandExitStatus(false);
+}
+
+typedef void (*UnsupportedAttributeCallback)(void * context);
+static void OnUnsupportedAttributeResponse(void * context)
+{
+    ChipLogError(chipTool, "Unsupported attribute Response. This should never happen !");
+}
+
+static void OnBooleanAttributeResponse(void * context, bool value)
+{
+    ChipLogProgress(chipTool, "Boolean attribute Response: %d", value);
+
+    ModelCommand * command = reinterpret_cast<ModelCommand *>(context);
+    command->SetCommandExitStatus(true);
+}
+
+static void OnInt8uAttributeResponse(void * context, uint8_t value)
+{
+    ChipLogProgress(chipTool, "Int8u attribute Response: %" PRIu8, value);
+
+    ModelCommand * command = reinterpret_cast<ModelCommand *>(context);
+    command->SetCommandExitStatus(true);
+}
+
+static void OnInt16uAttributeResponse(void * context, uint16_t value)
+{
+    ChipLogProgress(chipTool, "Int16u attribute Response: %" PRIu16, value);
+
+    ModelCommand * command = reinterpret_cast<ModelCommand *>(context);
+    command->SetCommandExitStatus(true);
+}
+
+static void OnInt16sAttributeResponse(void * context, int16_t value)
+{
+    ChipLogProgress(chipTool, "Int16s attribute Response: %" PRId16, value);
+
+    ModelCommand * command = reinterpret_cast<ModelCommand *>(context);
+    command->SetCommandExitStatus(true);
+}
+
+{{#all_user_clusters}}
+{{#if (isClient side) }}
+{{#if (user_cluster_has_enabled_command name side)}}
+{{#all_user_cluster_commands}}
+{{#if (isStrEqual clusterName parent.name)}}
+{{#if (isCommandAvailable parent.side incoming outgoing commandSource name)}}
+static void On{{asCamelCased parent.name false}}Cluster{{asCamelCased name false}}(void * context{{#zcl_command_arguments}}{{#unless (isStrEqual label "status")}}, {{asUnderlyingZclType type}} {{asSymbol label}}{{/unless}}{{/zcl_command_arguments}})
+{
+    ChipLogProgress(chipTool, "{{asCamelCased parent.name false}}Cluster{{asCamelCased name false}}");
+
+    ModelCommand * command = reinterpret_cast<ModelCommand *>(context);
+    command->SetCommandExitStatus(true);
+}
+
+{{/if}}
+{{/if}}
+{{/all_user_cluster_commands}}
+{{/if}}
+{{/if}}
+{{/all_user_clusters}}
+
+{{> clusters_header}}
+
+{{#chip_clusters}}
+constexpr chip::ClusterId k{{asCamelCased name false}}ClusterId = {{asHex code 4}};
+{{/chip_clusters}}
+
+{{#chip_clusters}}
+{{> cluster_header}}
+
+{{#chip_server_cluster_commands}}
+/*
+ * Command {{asCamelCased name false}}
+ */
+class {{asCamelCased clusterName false}}{{asCamelCased name false}}: public ModelCommand
+{
+public:
+    {{asCamelCased clusterName false}}{{asCamelCased name false}}(): ModelCommand("{{asDelimitedCommand name}}")
+    {
+        {{#chip_server_cluster_command_arguments}}
+        {{#if (isString type)}}
+        AddArgument("{{asCamelCased label}}", &m{{asCamelCased label false}});
+        {{else}}
+        AddArgument("{{asCamelCased label}}", {{asTypeMinValue type}}, {{asTypeMaxValue type}}, &m{{asCamelCased label false}});
+        {{/if}}
+        {{/chip_server_cluster_command_arguments}}
+        ModelCommand::AddArguments();
+    }
+
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
+    {
+        ChipLogProgress(chipTool, "Sending cluster ({{asHex parent.code 4}}) command ({{asHex code 2}}) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::{{asCamelCased parent.name false}}Cluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.{{asCamelCased name false}}(onSuccessCallback->Cancel(), onFailureCallback->Cancel(){{#chip_server_cluster_command_arguments}}, m{{asCamelCased label false}}{{/chip_server_cluster_command_arguments}});
+    }
+
+private:
+    {{#if (hasSpecificResponse name)}}
+    chip::Callback::Callback<{{asCamelCased parent.name false}}Cluster{{asCamelCased name false}}ResponseCallback> * onSuccessCallback = new chip::Callback::Callback<{{asCamelCased parent.name false}}Cluster{{asCamelCased name false}}ResponseCallback>(On{{asCamelCased parent.name false}}Cluster{{asCamelCased name false}}Response, this);
+    {{else}}
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback = new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    {{/if}}
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback = new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    {{#chip_server_cluster_command_arguments}}
+    {{#if (isString type)}}
+    char * m{{asCamelCased label false}};
+    {{else}}
+    {{chipType}} m{{asCamelCased label false}};
+    {{/if}}
+    {{/chip_server_cluster_command_arguments}}
+};
+
+{{/chip_server_cluster_commands}}
+
+/*
+ * Discover Attributes
+ */
+class Discover{{asCamelCased name false}}Attributes: public ModelCommand
+{
+public:
+    Discover{{asCamelCased name false}}Attributes(): ModelCommand("discover")
+    {
+        ModelCommand::AddArguments();
+    }
+
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
+    {
+        ChipLogProgress(chipTool, "Sending cluster ({{asHex parent.code 4}}) command (0x0C) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::{{asCamelCased name false}}Cluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.DiscoverAttributes(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
+    }
+
+private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback = new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback = new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+};
+
+{{#chip_server_cluster_attributes}}
+/*
+ * Attribute {{asCamelCased name false}}
+ */
+class Read{{asCamelCased parent.name false}}{{asCamelCased name false}}: public ModelCommand
+{
+public:
+    Read{{asCamelCased parent.name false}}{{asCamelCased name false}}(): ModelCommand("read")
+    {
+        AddArgument("attr-name", "{{asDelimitedCommand (asCamelCased name)}}");
+        ModelCommand::AddArguments();
+    }
+
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
+    {
+        ChipLogProgress(chipTool, "Sending cluster ({{asHex parent.code 4}}) command (0x00) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::{{asCamelCased parent.name false}}Cluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.ReadAttribute{{asCamelCased name false}}(onSuccessCallback->Cancel(), onFailureCallback->Cancel());
+    }
+
+private:
+    chip::Callback::Callback<{{asCallbackAttributeType atomicTypeId}}AttributeCallback> * onSuccessCallback = new chip::Callback::Callback<{{asCallbackAttributeType atomicTypeId}}AttributeCallback>(On{{asCallbackAttributeType atomicTypeId}}AttributeResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback = new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+};
+
+{{#if (isWritableAttribute)}}
+class Write{{asCamelCased parent.name false}}{{asCamelCased name false}}: public ModelCommand
+{
+public:
+    Write{{asCamelCased parent.name false}}{{asCamelCased name false}}(): ModelCommand("write")
+    {
+        AddArgument("attr-name", "{{asDelimitedCommand (asCamelCased name)}}");
+        AddArgument("attr-value", {{asTypeMinValue type}}, {{asTypeMaxValue type}}, &mValue);
+        ModelCommand::AddArguments();
+    }
+
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
+    {
+        ChipLogProgress(chipTool, "Sending cluster ({{asHex parent.code 4}}) command (0x01) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::{{asCamelCased parent.name false}}Cluster cluster;
+        cluster.Associate(device, endpointId);
+        return cluster.WriteAttribute{{asCamelCased name false}}(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mValue);
+    }
+
+private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback = new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback = new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    {{chipType}} mValue;
+};
+
+{{/if}}
+{{#if (isReportableAttribute)}}
+class Report{{asCamelCased parent.name false}}{{asCamelCased name false}}: public ModelCommand
+{
+public:
+    Report{{asCamelCased parent.name false}}{{asCamelCased name false}}(): ModelCommand("report")
+    {
+        AddArgument("attr-name", "{{asDelimitedCommand (asCamelCased name)}}");
+        AddArgument("min-interval", 0, UINT16_MAX, &mMinInterval);
+        AddArgument("max-interval", 0, UINT16_MAX, &mMaxInterval);
+        {{#unless (isDiscreteType)}}
+        AddArgument("change", {{asTypeMinValue type}}, {{asTypeMaxValue type}}, &mChange);
+        {{/unless}}
+        ModelCommand::AddArguments();
+    }
+
+    CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
+    {
+        ChipLogProgress(chipTool, "Sending cluster ({{asHex parent.code 4}}) command (0x06) on endpoint %" PRIu16, endpointId);
+
+        chip::Controller::{{asCamelCased parent.name false}}Cluster cluster;
+        cluster.Associate(device, endpointId);
+
+        CHIP_ERROR err = cluster.ReportAttribute{{asCamelCased name false}}(onReportCallback->Cancel());
+        if (err != CHIP_NO_ERROR)
+        {
+            return err;
+        }
+
+        return cluster.ConfigureAttribute{{asCamelCased name false}}(onSuccessCallback->Cancel(), onFailureCallback->Cancel(), mMinInterval, mMaxInterval{{#unless (isDiscreteType)}}, mChange{{/unless}});
+    }
+
+private:
+    chip::Callback::Callback<DefaultSuccessCallback> * onSuccessCallback = new chip::Callback::Callback<DefaultSuccessCallback>(OnDefaultSuccessResponse, this);
+    chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback = new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
+    chip::Callback::Callback<{{asCallbackAttributeType atomicTypeId}}AttributeCallback> * onReportCallback = new chip::Callback::Callback<{{asCallbackAttributeType atomicTypeId}}AttributeCallback>(On{{asCallbackAttributeType atomicTypeId}}AttributeResponse, this);
+    uint16_t mMinInterval;
+    uint16_t mMaxInterval;
+    {{#unless (isDiscreteType)}}
+    {{chipType}} mChange;
+    {{/unless}}
+};
+
+{{/if}}
+{{/chip_server_cluster_attributes}}
+{{/chip_clusters}}
+
+/*----------------------------------------------------------------------------*\
+| Register all Clusters commands                                               |
+\*----------------------------------------------------------------------------*/
+{{#chip_clusters}}
+void registerCluster{{asCamelCased name false}}(Commands & commands)
+{
+    const char * clusterName = "{{asCamelCased name false}}";
+
+    commands_list clusterCommands = {
+        {{#chip_server_cluster_commands}}
+        make_unique<{{asCamelCased clusterName false}}{{asCamelCased name false}}>(),
+        {{/chip_server_cluster_commands}}
+        make_unique<Discover{{asCamelCased name false}}Attributes>(),
+        {{#chip_server_cluster_attributes}}
+        make_unique<Read{{asCamelCased parent.name false}}{{asCamelCased name false}}>(),
+        {{#if (isWritableAttribute)}}
+        make_unique<Write{{asCamelCased parent.name false}}{{asCamelCased name false}}>(),
+        {{/if}}
+        {{#if (isReportableAttribute)}}
+        make_unique<Report{{asCamelCased parent.name false}}{{asCamelCased name false}}>(),
+        {{/if}}
+        {{/chip_server_cluster_attributes}}
+    };
+
+    commands.Register(clusterName, clusterCommands);
+}
+{{/chip_clusters}}
+
+void registerClusters(Commands & commands)
+{
+{{#chip_clusters}}
+    registerCluster{{asCamelCased name false}}(commands);
+{{/chip_clusters}}
+}
diff --git a/examples/chip-tool/templates/helper.js b/examples/chip-tool/templates/helper.js
new file mode 100644
index 0000000..752a54a
--- /dev/null
+++ b/examples/chip-tool/templates/helper.js
@@ -0,0 +1,205 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// Import helpers from zap core
+const zapPath      = '../../../third_party/zap/repo/src-electron/';
+const queryImpexp  = require(zapPath + 'db/query-impexp.js')
+const templateUtil = require(zapPath + 'generator/template-util.js')
+const zclHelper    = require(zapPath + 'generator/helper-zcl.js')
+const zclQuery     = require(zapPath + 'db/query-zcl.js')
+const cHelper      = require(zapPath + 'generator/helper-c.js')
+
+const StringHelper    = require('../../../src/app/zap-templates/common/StringHelper.js');
+const ChipTypesHelper = require('../../../src/app/zap-templates/common/ChipTypesHelper.js');
+
+function hasSpecificResponse(commandName)
+{
+  // Retrieve the clusterName and the clusterSide. If any if not available, an error will be thrown.
+  const clusterName = this.parent.name;
+  const clusterSide = this.parent.side;
+  if (clusterName == undefined || clusterSide == undefined) {
+    const error = 'chip_server_cluster_commands: Could not find relevant parent cluster.';
+    console.log(error);
+    throw error;
+  }
+
+  function filterCommand(cmd)
+  {
+    return cmd.clusterName == clusterName && cmd.name == (commandName + "Response");
+  }
+
+  function fn(pkgId)
+  {
+    const db = this.global.db;
+    return queryImpexp.exportendPointTypeIds(db, this.global.sessionId)
+        .then(endpointTypes => zclQuery.exportClustersAndEndpointDetailsFromEndpointTypes(db, endpointTypes))
+        .then(endpointsAndClusters => zclQuery.exportCommandDetailsFromAllEndpointTypesAndClusters(db, endpointsAndClusters))
+        .then(endpointCommands => endpointCommands.filter(filterCommand).length)
+  }
+
+  const promise = templateUtil.ensureZclPackageId(this).then(fn.bind(this)).catch(err => console.log(err));
+  return templateUtil.templatePromise(this.global, promise);
+}
+
+function asCallbackAttributeType(attributeType)
+{
+  switch (parseInt(attributeType)) {
+  case 0x00: // nodata / No data
+  case 0x0A: // data24 / 24-bit data
+  case 0x0C: // data40 / 40-bit data
+  case 0x0D: // data48 / 48-bit data
+  case 0x0E: // data56 / 56-bit data
+  case 0x1A: // map24 / 24-bit bitmap
+  case 0x1C: // map40 / 40-bit bitmap
+  case 0x1D: // map48 / 48-bit bitmap
+  case 0x1E: // map56 / 56-bit bitmap
+  case 0x22: // uint24 / Unsigned 24-bit integer
+  case 0x24: // uint40 / Unsigned 40-bit integer
+  case 0x25: // uint48 / Unsigned 48-bit integer
+  case 0x26: // uint56 / Unsigned 56-bit integer
+  case 0x2A: // int24 / Signed 24-bit integer
+  case 0x2C: // int40 / Signed 40-bit integer
+  case 0x2D: // int48 / Signed 48-bit integer
+  case 0x2E: // int56 / Signed 56-bit integer
+  case 0x38: // semi / Semi-precision
+  case 0x39: // single / Single precision
+  case 0x3A: // double / Double precision
+  case 0x41: // octstr / Octet string
+  case 0x42: // string / Character string
+  case 0x43: // octstr16 / Long octet string
+  case 0x44: // string16 / Long character string
+  case 0x48: // array / Array
+  case 0x49: // struct / Structure
+  case 0x50: // set / Set
+  case 0x51: // bag / Bag
+  case 0xE0: // ToD / Time of day
+    return 'Unsupported';
+  case 0x08: // data8 / 8-bit data
+  case 0x18: // map8 / 8-bit bitmap
+  case 0x20: // uint8 / Unsigned  8-bit integer
+  case 0x30: // enum8 / 8-bit enumeration
+    return 'Int8u';
+  case 0x09: // data16 / 16-bit data
+  case 0x19: // map16 / 16-bit bitmap
+  case 0x21: // uint16 / Unsigned 16-bit integer
+  case 0x31: // enum16 / 16-bit enumeration
+  case 0xE8: // clusterId / Cluster ID
+  case 0xE9: // attribId / Attribute ID
+  case 0xEA: // bacOID / BACnet OID
+  case 0xF1: // key128 / 128-bit security key
+  case 0xFF: // unk / Unknown
+    return 'Int16u';
+  case 0x0B: // data32 / 32-bit data
+  case 0x1B: // map32 / 32-bit bitmap
+  case 0x23: // uint32 / Unsigned 32-bit integer
+  case 0xE1: // date / Date
+  case 0xE2: // UTC / UTCTime
+    return 'Int32u';
+  case 0x0F: // data64 / 64-bit data
+  case 0x1F: // map64 / 64-bit bitmap
+  case 0x27: // uint64 / Unsigned 64-bit integer
+  case 0xF0: // EUI64 / IEEE address
+    return 'Int64u';
+  case 0x10: // bool / Boolean
+    return 'Boolean';
+  case 0x28: // int8 / Signed 8-bit integer
+    return 'Int8s';
+  case 0x29: // int16 / Signed 16-bit integer
+    return 'Int16s';
+  case 0x2B: // int32 / Signed 32-bit integer
+    return 'Int32s';
+  case 0x2F: // int64 / Signed 64-bit integer
+    return 'Int64s';
+  default:
+    error = 'Unhandled attribute type ' + attributeType;
+    throw error;
+  }
+}
+
+function asDelimitedCommand(name)
+{
+  return name.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
+}
+
+function asTypeMinValue(type)
+{
+  function fn(pkgId)
+  {
+    const options = { 'hash' : {} };
+    this.isArray  = false;
+    return zclHelper.asUnderlyingZclType.call(this, type, options).then(zclType => {
+      const basicType = ChipTypesHelper.asBasicType(zclType);
+      switch (basicType) {
+      case 'int8_t':
+      case 'int16_t':
+      case 'int32_t':
+      case 'int64_t':
+        return 'INT' + parseInt(basicType.slice(3)) + '_MIN';
+      case 'uint8_t':
+      case 'uint16_t':
+      case 'uint32_t':
+      case 'uint64_t':
+        return '0';
+      default:
+        error = 'Unhandled underlying type ' + zclType + ' for original type ' + type;
+        throw error;
+      }
+    })
+  }
+
+  const promise = templateUtil.ensureZclPackageId(this).then(fn.bind(this)).catch(err => console.log(err));
+  return templateUtil.templatePromise(this.global, promise);
+}
+
+function asTypeMaxValue(type)
+{
+  function fn(pkgId)
+  {
+    const options = { 'hash' : {} };
+    return zclHelper.asUnderlyingZclType.call(this, type, options).then(zclType => {
+      const basicType = ChipTypesHelper.asBasicType(zclType);
+      switch (basicType) {
+      case 'int8_t':
+      case 'int16_t':
+      case 'int32_t':
+      case 'int64_t':
+        return 'INT' + parseInt(basicType.slice(3)) + '_MAX';
+      case 'uint8_t':
+      case 'uint16_t':
+      case 'uint32_t':
+      case 'uint64_t':
+        return 'UINT' + parseInt(basicType.slice(4)) + '_MAX';
+      default:
+        return 'err';
+        error = 'Unhandled underlying type ' + zclType + ' for original type ' + type;
+        throw error;
+      }
+    })
+  }
+
+  const promise = templateUtil.ensureZclPackageId(this).then(fn.bind(this)).catch(err => console.log(err));
+  return templateUtil.templatePromise(this.global, promise);
+}
+
+//
+// Module exports
+//
+exports.hasSpecificResponse     = hasSpecificResponse;
+exports.asCallbackAttributeType = asCallbackAttributeType;
+exports.asDelimitedCommand      = asDelimitedCommand;
+exports.asTypeMinValue          = asTypeMinValue;
+exports.asTypeMaxValue          = asTypeMaxValue;
diff --git a/examples/chip-tool/templates/reporting-commands.zapt b/examples/chip-tool/templates/reporting-commands.zapt
new file mode 100644
index 0000000..11cd1c4
--- /dev/null
+++ b/examples/chip-tool/templates/reporting-commands.zapt
@@ -0,0 +1,83 @@
+{{> header}}
+
+#pragma once
+
+#include "ReportingCommand.h"
+
+
+typedef void (*UnsupportedAttributeCallback)(void * context);
+
+class Listen : public ReportingCommand
+{
+public:
+    Listen() : ReportingCommand("listen")
+    {
+    }
+    
+    void AddReportCallbacks(uint8_t endpointId) override
+    {
+        chip::app::CHIPDeviceCallbacksMgr & callbacksMgr = chip::app::CHIPDeviceCallbacksMgr::GetInstance();
+{{#chip_clusters}}
+{{#chip_server_cluster_attributes}}
+{{#if (isReportableAttribute)}}
+        callbacksMgr.AddReportCallback(chip::kTestDeviceNodeId, endpointId, {{asHex parent.code 4}}, {{asHex attributeCode 4}}, onReport{{asCamelCased parent.name false}}{{asCamelCased name false}}Callback->Cancel());
+{{/if}}
+{{/chip_server_cluster_attributes}}
+{{/chip_clusters}}
+    }
+
+    static void OnDefaultSuccessResponse(void * context)
+    {
+        ChipLogProgress(chipTool, "Default Success Response");
+    }
+
+    static void OnDefaultFailureResponse(void * context, uint8_t status)
+    {
+        ChipLogProgress(chipTool, "Default Failure Response: 0x%02x", status);
+    }
+
+    static void OnUnsupportedAttributeResponse(void * context)
+    {
+        ChipLogError(chipTool, "Unsupported attribute Response. This should never happen !");
+    }
+
+    static void OnBooleanAttributeResponse(void * context, bool value)
+    {
+        ChipLogProgress(chipTool, "Boolean attribute Response: %d", value);
+    }
+
+    static void OnInt8uAttributeResponse(void * context, uint8_t value)
+    {
+        ChipLogProgress(chipTool, "Int8u attribute Response: %" PRIu8, value);
+    }
+
+    static void OnInt16uAttributeResponse(void * context, uint16_t value)
+    {
+        ChipLogProgress(chipTool, "Int16u attribute Response: %" PRIu16, value);
+    }
+
+    static void OnInt16sAttributeResponse(void * context, int16_t value)
+    {
+        ChipLogProgress(chipTool, "Int16s attribute Response: %" PRId16, value);
+    }
+
+private:
+{{#chip_clusters}}
+{{#chip_server_cluster_attributes}}
+{{#if (isReportableAttribute)}}
+    chip::Callback::Callback<{{asCallbackAttributeType atomicTypeId}}AttributeCallback> * onReport{{asCamelCased parent.name false}}{{asCamelCased name false}}Callback = new chip::Callback::Callback<{{asCallbackAttributeType atomicTypeId}}AttributeCallback>(On{{asCallbackAttributeType atomicTypeId}}AttributeResponse, this);
+{{/if}}
+{{/chip_server_cluster_attributes}}
+{{/chip_clusters}}
+};
+
+void registerCommandsReporting(Commands & commands)
+{
+    const char * clusterName = "Reporting";
+
+    commands_list clusterCommands = {
+        make_unique<Listen>(),
+    };
+
+    commands.Register(clusterName, clusterCommands);
+}
diff --git a/examples/chip-tool/templates/templates.json b/examples/chip-tool/templates/templates.json
new file mode 100644
index 0000000..92a2cc2
--- /dev/null
+++ b/examples/chip-tool/templates/templates.json
@@ -0,0 +1,37 @@
+{
+    "name": "CHIP Tool templates",
+    "version": "chip-v1",
+    "helpers": [
+        "../../../src/app/zap-templates/partials/helper.js",
+        "../../../src/app/zap-templates/common/StringHelper.js",
+        "../../../src/app/zap-templates/templates/chip/helper.js",
+        "helper.js"
+    ],
+    "override": "../../../src/app/zap-templates/common/override.js",
+    "partials": [
+        {
+            "name": "header",
+            "path": "../../../src/app/zap-templates/partials/header.zapt"
+        },
+        {
+            "name": "clusters_header",
+            "path": "../../../src/app/zap-templates/partials/clusters_header.zapt"
+        },
+        {
+            "name": "cluster_header",
+            "path": "../../../src/app/zap-templates/partials/cluster_header.zapt"
+        }
+    ],
+    "templates": [
+        {
+            "path": "commands.zapt",
+            "name": "Cluster Commands header",
+            "output": "examples/chip-tool/commands/clusters/Commands.h"
+        },
+        {
+            "path": "reporting-commands.zapt",
+            "name": "Reporting Commands header",
+            "output": "examples/chip-tool/commands/reporting/Commands.h"
+        }
+    ]
+}
diff --git a/examples/lighting-app/lighting-common/gen/CHIPClientCallbacks.cpp b/examples/lighting-app/lighting-common/gen/CHIPClientCallbacks.cpp
new file mode 100644
index 0000000..f5f88af
--- /dev/null
+++ b/examples/lighting-app/lighting-common/gen/CHIPClientCallbacks.cpp
@@ -0,0 +1,842 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+#include "gen/CHIPClientCallbacks.h"
+
+#include "gen/enums.h"
+#include <app/util/CHIPDeviceCallbacksMgr.h>
+#include <app/util/af-enums.h>
+#include <app/util/af.h>
+#include <app/util/basic-types.h>
+#include <core/CHIPEncoding.h>
+#include <support/SafeInt.h>
+#include <support/logging/CHIPLogging.h>
+
+using namespace ::chip;
+
+#define CHECK_MESSAGE_LENGTH(value)                                                                                                \
+    if (!chip::CanCastTo<uint16_t>(value))                                                                                         \
+    {                                                                                                                              \
+        ChipLogError(Zcl, "CHECK_MESSAGE_LENGTH expects a uint16_t value, got: %d", value);                                        \
+        if (onFailureCallback != nullptr)                                                                                          \
+        {                                                                                                                          \
+            Callback::Callback<DefaultFailureCallback> * cb =                                                                      \
+                Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);                                     \
+            cb->mCall(cb->mContext, static_cast<uint8_t>(EMBER_ZCL_STATUS_INVALID_VALUE));                                         \
+        }                                                                                                                          \
+        return true;                                                                                                               \
+    }                                                                                                                              \
+                                                                                                                                   \
+    if (messageLen < value)                                                                                                        \
+    {                                                                                                                              \
+        ChipLogError(Zcl, "Unexpected response length: %d", messageLen);                                                           \
+        if (onFailureCallback != nullptr)                                                                                          \
+        {                                                                                                                          \
+            Callback::Callback<DefaultFailureCallback> * cb =                                                                      \
+                Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);                                     \
+            cb->mCall(cb->mContext, static_cast<uint8_t>(EMBER_ZCL_STATUS_INVALID_VALUE));                                         \
+        }                                                                                                                          \
+        return true;                                                                                                               \
+    }                                                                                                                              \
+                                                                                                                                   \
+    messageLen = static_cast<uint16_t>(messageLen - static_cast<uint16_t>(value));
+
+#define GET_RESPONSE_CALLBACKS(name)                                                                                               \
+    Callback::Cancelable * onSuccessCallback = nullptr;                                                                            \
+    Callback::Cancelable * onFailureCallback = nullptr;                                                                            \
+    NodeId sourceId                          = emberAfCurrentCommand()->source;                                                    \
+    uint8_t sequenceNumber                   = emberAfCurrentCommand()->seqNum;                                                    \
+    CHIP_ERROR err = gCallbacks.GetResponseCallback(sourceId, sequenceNumber, &onSuccessCallback, &onFailureCallback);             \
+                                                                                                                                   \
+    if (CHIP_NO_ERROR != err)                                                                                                      \
+    {                                                                                                                              \
+        if (onSuccessCallback == nullptr)                                                                                          \
+        {                                                                                                                          \
+            ChipLogDetail(Zcl, "%s: Missing success callback", name);                                                              \
+        }                                                                                                                          \
+                                                                                                                                   \
+        if (onFailureCallback == nullptr)                                                                                          \
+        {                                                                                                                          \
+            ChipLogDetail(Zcl, "%s: Missing failure callback", name);                                                              \
+        }                                                                                                                          \
+                                                                                                                                   \
+        return true;                                                                                                               \
+    }
+
+#define GET_REPORT_CALLBACK(name)                                                                                                  \
+    Callback::Cancelable * onReportCallback = nullptr;                                                                             \
+    CHIP_ERROR err = gCallbacks.GetReportCallback(sourceId, endpointId, clusterId, attributeId, &onReportCallback);                \
+                                                                                                                                   \
+    if (CHIP_NO_ERROR != err)                                                                                                      \
+    {                                                                                                                              \
+        if (onReportCallback == nullptr)                                                                                           \
+        {                                                                                                                          \
+            ChipLogDetail(Zcl, "%s: Missing report callback", name);                                                               \
+        }                                                                                                                          \
+                                                                                                                                   \
+        return true;                                                                                                               \
+    }
+
+void LogStatus(uint8_t status)
+{
+    switch (status)
+    {
+    case EMBER_ZCL_STATUS_SUCCESS:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_SUCCESS (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_FAILURE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_FAILURE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_NOT_AUTHORIZED:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_NOT_AUTHORIZED (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_MALFORMED_COMMAND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_MALFORMED_COMMAND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNSUP_COMMAND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNSUP_CLUSTER_COMMAND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNSUP_GENERAL_COMMAND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNSUP_GENERAL_COMMAND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNSUP_MANUF_CLUSTER_COMMAND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNSUP_MANUF_CLUSTER_COMMAND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNSUP_MANUF_GENERAL_COMMAND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNSUP_MANUF_GENERAL_COMMAND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INVALID_FIELD:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INVALID_FIELD (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNSUPPORTED_ATTRIBUTE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNSUPPORTED_ATTRIBUTE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INVALID_VALUE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INVALID_VALUE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_READ_ONLY:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_READ_ONLY (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INSUFFICIENT_SPACE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INSUFFICIENT_SPACE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_DUPLICATE_EXISTS:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_DUPLICATE_EXISTS (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_NOT_FOUND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_NOT_FOUND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNREPORTABLE_ATTRIBUTE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNREPORTABLE_ATTRIBUTE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INVALID_DATA_TYPE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INVALID_DATA_TYPE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INVALID_SELECTOR:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INVALID_SELECTOR (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_WRITE_ONLY:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_WRITE_ONLY (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INCONSISTENT_STARTUP_STATE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INCONSISTENT_STARTUP_STATE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_DEFINED_OUT_OF_BAND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_DEFINED_OUT_Of_BAND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_ACTION_DENIED:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_ACTION_DENIED (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_TIMEOUT:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_TIMEOUT (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_ABORT:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_ABORT (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INVALID_IMAGE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INVALID_IMAGE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_WAIT_FOR_DATA:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_WAIT_FOR_DATA (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_NO_IMAGE_AVAILABLE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_NO_IMAGE_AVAILABLE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_REQUIRE_MORE_IMAGE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_REQUIRE_MORE_IMAGE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_HARDWARE_FAILURE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_HARDWARE_FAILURE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_SOFTWARE_FAILURE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_SOFTWARE_FAILURE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNSUPPORTED_CLUSTER:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNSUPPORTED_CLUSTER (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_LIMIT_REACHED:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_LIMIT_REACHED (0x%02x)", status);
+        break;
+    default:
+        ChipLogError(Zcl, "Unknow status: 0x%02x", status);
+        break;
+    }
+}
+
+// Singleton instance of the callbacks manager
+app::CHIPDeviceCallbacksMgr & gCallbacks = app::CHIPDeviceCallbacksMgr::GetInstance();
+
+bool emberAfDefaultResponseCallback(ClusterId clusterId, CommandId commandId, EmberAfStatus status)
+{
+    ChipLogProgress(Zcl, "DefaultResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+    ChipLogProgress(Zcl, "  CommandId: 0x%02x", commandId);
+    LogStatus(status);
+
+    GET_RESPONSE_CALLBACKS("emberAfDefaultResponseCallback");
+    if (status == EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultSuccessCallback> * cb =
+            Callback::Callback<DefaultSuccessCallback>::FromCancelable(onSuccessCallback);
+        cb->mCall(cb->mContext);
+    }
+    else
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, static_cast<uint8_t>(status));
+    }
+
+    return true;
+}
+
+bool emberAfReadAttributesResponseCallback(ClusterId clusterId, uint8_t * message, uint16_t messageLen)
+{
+    ChipLogProgress(Zcl, "ReadAttributesResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+
+    GET_RESPONSE_CALLBACKS("emberAfReadAttributesResponseCallback");
+
+    // struct readAttributeResponseRecord[]
+    while (messageLen)
+    {
+        CHECK_MESSAGE_LENGTH(2);
+        uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+        ChipLogProgress(Zcl, "  attributeId: 0x%04x", attributeId);
+
+        CHECK_MESSAGE_LENGTH(1);
+        uint8_t status = chip::Encoding::Read8(message); // zclStatus
+        LogStatus(status);
+
+        if (status == EMBER_ZCL_STATUS_SUCCESS)
+        {
+            CHECK_MESSAGE_LENGTH(1);
+            uint8_t attributeType = chip::Encoding::Read8(message);
+            ChipLogProgress(Zcl, "  attributeType: 0x%02x", attributeType);
+
+            switch (attributeType)
+            {
+            case 0x00: // nodata / No data
+            case 0x0A: // data24 / 24-bit data
+            case 0x0C: // data40 / 40-bit data
+            case 0x0D: // data48 / 48-bit data
+            case 0x0E: // data56 / 56-bit data
+            case 0x1A: // map24 / 24-bit bitmap
+            case 0x1C: // map40 / 40-bit bitmap
+            case 0x1D: // map48 / 48-bit bitmap
+            case 0x1E: // map56 / 56-bit bitmap
+            case 0x22: // uint24 / Unsigned 24-bit integer
+            case 0x24: // uint40 / Unsigned 40-bit integer
+            case 0x25: // uint48 / Unsigned 48-bit integer
+            case 0x26: // uint56 / Unsigned 56-bit integer
+            case 0x2A: // int24 / Signed 24-bit integer
+            case 0x2C: // int40 / Signed 40-bit integer
+            case 0x2D: // int48 / Signed 48-bit integer
+            case 0x2E: // int56 / Signed 56-bit integer
+            case 0x38: // semi / Semi-precision
+            case 0x39: // single / Single precision
+            case 0x3A: // double / Double precision
+            case 0x41: // octstr / Octet string
+            case 0x42: // string / Character string
+            case 0x43: // octstr16 / Long octet string
+            case 0x44: // string16 / Long character string
+            case 0x48: // array / Array
+            case 0x49: // struct / Structure
+            case 0x50: // set / Set
+            case 0x51: // bag / Bag
+            case 0xE0: // ToD / Time of day
+            {
+                ChipLogError(Zcl, "attributeType 0x%02x is not supported", attributeType);
+                Callback::Callback<DefaultFailureCallback> * cb =
+                    Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+                cb->mCall(cb->mContext, EMBER_ZCL_STATUS_INVALID_VALUE);
+                return true;
+            }
+
+            case 0x08: // data8 / 8-bit data
+            case 0x18: // map8 / 8-bit bitmap
+            case 0x20: // uint8 / Unsigned  8-bit integer
+            case 0x30: // enum8 / 8-bit enumeration
+            {
+                CHECK_MESSAGE_LENGTH(1);
+                uint8_t value = chip::Encoding::Read8(message);
+                ChipLogProgress(Zcl, "  value: 0x%02x", value);
+
+                Callback::Callback<Int8uAttributeCallback> * cb =
+                    Callback::Callback<Int8uAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x09: // data16 / 16-bit data
+            case 0x19: // map16 / 16-bit bitmap
+            case 0x21: // uint16 / Unsigned 16-bit integer
+            case 0x31: // enum16 / 16-bit enumeration
+            case 0xE8: // clusterId / Cluster ID
+            case 0xE9: // attribId / Attribute ID
+            case 0xEA: // bacOID / BACnet OID
+            case 0xF1: // key128 / 128-bit security key
+            case 0xFF: // unk / Unknown
+            {
+                CHECK_MESSAGE_LENGTH(2);
+                uint16_t value = chip::Encoding::LittleEndian::Read16(message);
+                ChipLogProgress(Zcl, "  value: 0x%04x", value);
+
+                Callback::Callback<Int16uAttributeCallback> * cb =
+                    Callback::Callback<Int16uAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x0B: // data32 / 32-bit data
+            case 0x1B: // map32 / 32-bit bitmap
+            case 0x23: // uint32 / Unsigned 32-bit integer
+            case 0xE1: // date / Date
+            case 0xE2: // UTC / UTCTime
+            {
+                CHECK_MESSAGE_LENGTH(4);
+                uint32_t value = chip::Encoding::LittleEndian::Read32(message);
+                ChipLogProgress(Zcl, "  value: 0x%08x", value);
+
+                Callback::Callback<Int32uAttributeCallback> * cb =
+                    Callback::Callback<Int32uAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x0F: // data64 / 64-bit data
+            case 0x1F: // map64 / 64-bit bitmap
+            case 0x27: // uint64 / Unsigned 64-bit integer
+            case 0xF0: // EUI64 / IEEE address
+            {
+                CHECK_MESSAGE_LENGTH(8);
+                uint64_t value = chip::Encoding::LittleEndian::Read64(message);
+                ChipLogProgress(Zcl, "  value: 0x%16x", value);
+
+                Callback::Callback<Int64uAttributeCallback> * cb =
+                    Callback::Callback<Int64uAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x10: // bool / Boolean
+            {
+                CHECK_MESSAGE_LENGTH(1);
+                uint8_t value = chip::Encoding::Read8(message);
+                ChipLogProgress(Zcl, "  value: %d", value);
+
+                Callback::Callback<BooleanAttributeCallback> * cb =
+                    Callback::Callback<BooleanAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x28: // int8 / Signed 8-bit integer
+            {
+                CHECK_MESSAGE_LENGTH(1);
+                int8_t value = chip::CastToSigned(chip::Encoding::Read8(message));
+                ChipLogProgress(Zcl, "  value: %" PRId8, value);
+
+                Callback::Callback<Int8sAttributeCallback> * cb =
+                    Callback::Callback<Int8sAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x29: // int16 / Signed 16-bit integer
+            {
+                CHECK_MESSAGE_LENGTH(2);
+                int16_t value = chip::CastToSigned(chip::Encoding::LittleEndian::Read16(message));
+                ChipLogProgress(Zcl, "  value: %" PRId16, value);
+
+                Callback::Callback<Int16sAttributeCallback> * cb =
+                    Callback::Callback<Int16sAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x2B: // int32 / Signed 32-bit integer
+            {
+                CHECK_MESSAGE_LENGTH(4);
+                int32_t value = chip::CastToSigned(chip::Encoding::LittleEndian::Read32(message));
+                ChipLogProgress(Zcl, "  value: %" PRId32, value);
+
+                Callback::Callback<Int32sAttributeCallback> * cb =
+                    Callback::Callback<Int32sAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x2F: // int64 / Signed 64-bit integer
+            {
+                CHECK_MESSAGE_LENGTH(8);
+                int64_t value = chip::CastToSigned(chip::Encoding::LittleEndian::Read64(message));
+                ChipLogProgress(Zcl, "  value: %" PRId64, value);
+
+                Callback::Callback<Int64sAttributeCallback> * cb =
+                    Callback::Callback<Int64sAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+            }
+        }
+        else
+        {
+            Callback::Callback<DefaultFailureCallback> * cb =
+                Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+            cb->mCall(cb->mContext, status);
+        }
+
+        // The current code is written matching the current API where there is a single attribute read
+        // per read command. So if multiple attributes are read at the same time, something is wrong
+        // somewhere.
+        if (messageLen)
+        {
+            ChipLogError(Zcl, "Multiple attributes read at the same time. Something went wrong.");
+            break;
+        }
+    }
+
+    return true;
+}
+
+bool emberAfWriteAttributesResponseCallback(ClusterId clusterId, uint8_t * message, uint16_t messageLen)
+{
+    ChipLogProgress(Zcl, "WriteAttributesResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+
+    GET_RESPONSE_CALLBACKS("emberAfWriteAttributesResponseCallback");
+
+    // struct writeAttributeResponseRecord[]
+    while (messageLen)
+    {
+        CHECK_MESSAGE_LENGTH(1);
+        uint8_t status = chip::Encoding::Read8(message); // zclStatus
+        LogStatus(status);
+
+        if (status == EMBER_ZCL_STATUS_SUCCESS)
+        {
+            Callback::Callback<DefaultSuccessCallback> * cb =
+                Callback::Callback<DefaultSuccessCallback>::FromCancelable(onSuccessCallback);
+            cb->mCall(cb->mContext);
+        }
+        else
+        {
+            CHECK_MESSAGE_LENGTH(2);
+            uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+            ChipLogProgress(Zcl, "  attributeId: 0x%04x", attributeId);
+
+            Callback::Callback<DefaultFailureCallback> * cb =
+                Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+            cb->mCall(cb->mContext, status);
+        }
+
+        // The current code is written matching the current API where there is a single attribute written
+        // per write command. So if multiple attributes are written at the same time, something is wrong
+        // somewhere.
+        if (messageLen)
+        {
+            ChipLogError(Zcl, "Multiple attributes written at the same time. Something went wrong.");
+            break;
+        }
+    }
+
+    return true;
+}
+
+bool emberAfConfigureReportingResponseCallback(ClusterId clusterId, uint8_t * message, uint16_t messageLen)
+{
+    ChipLogProgress(Zcl, "ConfigureReportingResponseCallback:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+
+    GET_RESPONSE_CALLBACKS("emberAfConfigureReportingResponseCallback");
+
+    // struct configureReportingResponseRecord[]
+    while (messageLen)
+    {
+        CHECK_MESSAGE_LENGTH(1);
+        uint8_t status = chip::Encoding::Read8(message); // zclStatus
+        LogStatus(status);
+
+        if (status == EMBER_ZCL_STATUS_SUCCESS)
+        {
+            Callback::Callback<DefaultSuccessCallback> * cb =
+                Callback::Callback<DefaultSuccessCallback>::FromCancelable(onSuccessCallback);
+            cb->mCall(cb->mContext);
+        }
+        else
+        {
+            CHECK_MESSAGE_LENGTH(1);
+            uint8_t direction = chip::Encoding::Read8(message); // reportingRole
+            ChipLogProgress(Zcl, "  direction: 0x%02x", direction);
+
+            CHECK_MESSAGE_LENGTH(2);
+            uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+            ChipLogProgress(Zcl, "  attributeId: 0x%04x", attributeId);
+
+            Callback::Callback<DefaultFailureCallback> * cb =
+                Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+            cb->mCall(cb->mContext, status);
+        }
+
+        // The current code is written matching the current API where there is a single attribute report
+        // per configure command. So if multiple attributes are configured at the same time, something is wrong
+        // somewhere.
+        if (messageLen)
+        {
+            ChipLogError(Zcl, "Multiple attributes reports configured at the same time. Something went wrong.");
+            break;
+        }
+    }
+
+    return true;
+}
+
+bool emberAfReadReportingConfigurationResponseCallback(chip::ClusterId clusterId, uint8_t * message, uint16_t messageLen)
+{
+    ChipLogProgress(Zcl, "ReadReportingConfigurationResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+
+    GET_RESPONSE_CALLBACKS("emberAfReadReportingConfigurationResponseCallback");
+
+    // struct readReportingConfigurationResponseRecord[]
+    while (messageLen)
+    {
+        CHECK_MESSAGE_LENGTH(1);
+        uint8_t direction = chip::Encoding::Read8(message); // reportingRole
+        ChipLogProgress(Zcl, "  direction: 0x%02x", direction);
+
+        CHECK_MESSAGE_LENGTH(2);
+        uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+        ChipLogProgress(Zcl, "  attributeId: 0x%04x", attributeId);
+
+        if (direction == EMBER_ZCL_REPORTING_DIRECTION_REPORTED)
+        {
+            CHECK_MESSAGE_LENGTH(1);
+            uint8_t attributeType = chip::Encoding::Read8(message); // zclType
+            ChipLogProgress(Zcl, "  attributeType: 0x%02x", attributeType);
+
+            CHECK_MESSAGE_LENGTH(2);
+            uint16_t minimumReportingInterval = chip::Encoding::LittleEndian::Read16(message); // uint16
+            ChipLogProgress(Zcl, "  minimumReportingInterval: %" PRIu16, minimumReportingInterval);
+
+            CHECK_MESSAGE_LENGTH(2);
+            uint16_t maximumReportingInterval = chip::Encoding::LittleEndian::Read16(message); // uint16
+            ChipLogProgress(Zcl, "  maximumReportingInterval: %" PRIu16, maximumReportingInterval);
+
+            // FIXME: unk is not supported yet.
+
+            Callback::Callback<ReadReportingConfigurationReportedCallback> * cb =
+                Callback::Callback<ReadReportingConfigurationReportedCallback>::FromCancelable(onSuccessCallback);
+            cb->mCall(cb->mContext, minimumReportingInterval, maximumReportingInterval);
+        }
+        else
+        {
+            CHECK_MESSAGE_LENGTH(2);
+            uint16_t timeout = chip::Encoding::LittleEndian::Read16(message); // uint16
+            ChipLogProgress(Zcl, "  timeout: %" PRIu16, timeout);
+
+            Callback::Callback<ReadReportingConfigurationReceivedCallback> * cb =
+                Callback::Callback<ReadReportingConfigurationReceivedCallback>::FromCancelable(onSuccessCallback);
+            cb->mCall(cb->mContext, timeout);
+        }
+    }
+
+    return true;
+}
+
+bool emberAfDiscoverAttributesResponseCallback(ClusterId clusterId, bool discoveryComplete, uint8_t * message, uint16_t messageLen,
+                                               bool extended)
+{
+    ChipLogProgress(Zcl, "DiscoverAttributesResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+    ChipLogProgress(Zcl, "  discoveryComplete: %d", discoveryComplete);
+    ChipLogProgress(Zcl, "  extended: %d", extended);
+
+    GET_RESPONSE_CALLBACKS("emberAfDiscoverAttributesCallback");
+
+    // struct discoverAttributesResponseRecord[]
+    while (messageLen)
+    {
+        CHECK_MESSAGE_LENGTH(2);
+        uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+        ChipLogProgress(Zcl, "  attributeId: 0x%04x", attributeId);
+
+        CHECK_MESSAGE_LENGTH(1);
+        uint8_t attributeType = chip::Encoding::Read8(message); // zclType
+        ChipLogProgress(Zcl, "  attributeType: 0x%02x", attributeType);
+    }
+
+    Callback::Callback<DefaultSuccessCallback> * cb = Callback::Callback<DefaultSuccessCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfDiscoverCommandsGeneratedResponseCallback(ClusterId clusterId, uint16_t manufacturerCode, bool discoveryComplete,
+                                                      CommandId * commandIds, uint16_t commandIdCount)
+{
+    ChipLogProgress(Zcl, "DiscoverCommandsGeneratedResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+    ChipLogProgress(Zcl, "  manufacturerCode: 0x%04x", manufacturerCode);
+    ChipLogProgress(Zcl, "  discoveryComplete: %d", discoveryComplete);
+    ChipLogProgress(Zcl, "  commandIdCount: %" PRIu16, commandIdCount);
+
+    for (uint16_t i = 0; i < commandIdCount; i++)
+    {
+        ChipLogProgress(Zcl, "  commandId: 0x%02x", commandIds++);
+    }
+
+    GET_RESPONSE_CALLBACKS("emberAfDiscoverCommandsGeneratedResponseCallback");
+    Callback::Callback<DefaultSuccessCallback> * cb = Callback::Callback<DefaultSuccessCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfDiscoverCommandsReceivedResponseCallback(ClusterId clusterId, uint16_t manufacturerCode, bool discoveryComplete,
+                                                     CommandId * commandIds, uint16_t commandIdCount)
+{
+    ChipLogProgress(Zcl, "DiscoverCommandsReceivedResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+    ChipLogProgress(Zcl, "  manufacturerCode: 0x%04x", manufacturerCode);
+    ChipLogProgress(Zcl, "  discoveryComplete: %d", discoveryComplete);
+    ChipLogProgress(Zcl, "  commandIdCount: %" PRIu16, commandIdCount);
+
+    for (uint16_t i = 0; i < commandIdCount; i++)
+    {
+        ChipLogProgress(Zcl, "  commandId: 0x%02x", commandIds++);
+    }
+
+    GET_RESPONSE_CALLBACKS("emberAfDiscoverCommandsGeneratedResponseCallback");
+    Callback::Callback<DefaultSuccessCallback> * cb = Callback::Callback<DefaultSuccessCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfReportAttributesCallback(ClusterId clusterId, uint8_t * message, uint16_t messageLen)
+{
+    ChipLogProgress(Zcl, "emberAfReportAttributeCallback:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+
+    NodeId sourceId = emberAfCurrentCommand()->source;
+    ChipLogProgress(Zcl, "  Source NodeId: %" PRIu64, sourceId);
+
+    EndpointId endpointId = emberAfCurrentCommand()->apsFrame->sourceEndpoint;
+    ChipLogProgress(Zcl, "  Source EndpointId: 0x%04x", endpointId);
+
+    // TODO onFailureCallback is just here because of the CHECK_MESSAGE_LENGTH macro. It needs to be removed.
+    Callback::Cancelable * onFailureCallback = nullptr;
+
+    while (messageLen)
+    {
+        CHECK_MESSAGE_LENGTH(2);
+        uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+        ChipLogProgress(Zcl, "  attributeId: 0x%04x", attributeId);
+
+        GET_REPORT_CALLBACK("emberAfReportAttributesCallback");
+
+        CHECK_MESSAGE_LENGTH(1);
+        uint8_t attributeType = chip::Encoding::Read8(message);
+        ChipLogProgress(Zcl, "  attributeType: 0x%02x", attributeType);
+
+        switch (attributeType)
+        {
+        case 0x00: // nodata / No data
+        case 0x0A: // data24 / 24-bit data
+        case 0x0C: // data40 / 40-bit data
+        case 0x0D: // data48 / 48-bit data
+        case 0x0E: // data56 / 56-bit data
+        case 0x1A: // map24 / 24-bit bitmap
+        case 0x1C: // map40 / 40-bit bitmap
+        case 0x1D: // map48 / 48-bit bitmap
+        case 0x1E: // map56 / 56-bit bitmap
+        case 0x22: // uint24 / Unsigned 24-bit integer
+        case 0x24: // uint40 / Unsigned 40-bit integer
+        case 0x25: // uint48 / Unsigned 48-bit integer
+        case 0x26: // uint56 / Unsigned 56-bit integer
+        case 0x2A: // int24 / Signed 24-bit integer
+        case 0x2C: // int40 / Signed 40-bit integer
+        case 0x2D: // int48 / Signed 48-bit integer
+        case 0x2E: // int56 / Signed 56-bit integer
+        case 0x38: // semi / Semi-precision
+        case 0x39: // single / Single precision
+        case 0x3A: // double / Double precision
+        case 0x41: // octstr / Octet string
+        case 0x42: // string / Character string
+        case 0x43: // octstr16 / Long octet string
+        case 0x44: // string16 / Long character string
+        case 0x48: // array / Array
+        case 0x49: // struct / Structure
+        case 0x50: // set / Set
+        case 0x51: // bag / Bag
+        case 0xE0: // ToD / Time of day
+        {
+            ChipLogError(Zcl, "attributeType 0x%02x is not supported", attributeType);
+            return true;
+        }
+
+        case 0x08: // data8 / 8-bit data
+        case 0x18: // map8 / 8-bit bitmap
+        case 0x20: // uint8 / Unsigned  8-bit integer
+        case 0x30: // enum8 / 8-bit enumeration
+        {
+            CHECK_MESSAGE_LENGTH(1);
+            uint8_t value = chip::Encoding::Read8(message);
+            ChipLogProgress(Zcl, "  value: 0x%02x", value);
+
+            Callback::Callback<Int8uAttributeCallback> * cb =
+                Callback::Callback<Int8uAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x09: // data16 / 16-bit data
+        case 0x19: // map16 / 16-bit bitmap
+        case 0x21: // uint16 / Unsigned 16-bit integer
+        case 0x31: // enum16 / 16-bit enumeration
+        case 0xE8: // clusterId / Cluster ID
+        case 0xE9: // attribId / Attribute ID
+        case 0xEA: // bacOID / BACnet OID
+        case 0xF1: // key128 / 128-bit security key
+        case 0xFF: // unk / Unknown
+        {
+            CHECK_MESSAGE_LENGTH(2);
+            uint16_t value = chip::Encoding::LittleEndian::Read16(message);
+            ChipLogProgress(Zcl, "  value: 0x%04x", value);
+
+            Callback::Callback<Int16uAttributeCallback> * cb =
+                Callback::Callback<Int16uAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x0B: // data32 / 32-bit data
+        case 0x1B: // map32 / 32-bit bitmap
+        case 0x23: // uint32 / Unsigned 32-bit integer
+        case 0xE1: // date / Date
+        case 0xE2: // UTC / UTCTime
+        {
+            CHECK_MESSAGE_LENGTH(4);
+            uint32_t value = chip::Encoding::LittleEndian::Read32(message);
+            ChipLogProgress(Zcl, "  value: 0x%08x", value);
+
+            Callback::Callback<Int32uAttributeCallback> * cb =
+                Callback::Callback<Int32uAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x0F: // data64 / 64-bit data
+        case 0x1F: // map64 / 64-bit bitmap
+        case 0x27: // uint64 / Unsigned 64-bit integer
+        case 0xF0: // EUI64 / IEEE address
+        {
+            CHECK_MESSAGE_LENGTH(8);
+            uint64_t value = chip::Encoding::LittleEndian::Read64(message);
+            ChipLogProgress(Zcl, "  value: 0x%16x", value);
+
+            Callback::Callback<Int64uAttributeCallback> * cb =
+                Callback::Callback<Int64uAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x10: // bool / Boolean
+        {
+            CHECK_MESSAGE_LENGTH(1);
+            uint8_t value = chip::Encoding::Read8(message);
+            ChipLogProgress(Zcl, "  value: %d", value);
+
+            Callback::Callback<BooleanAttributeCallback> * cb =
+                Callback::Callback<BooleanAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x28: // int8 / Signed 8-bit integer
+        {
+            CHECK_MESSAGE_LENGTH(1);
+            int8_t value = chip::CastToSigned(chip::Encoding::Read8(message));
+            ChipLogProgress(Zcl, "  value: %" PRId8, value);
+
+            Callback::Callback<Int8sAttributeCallback> * cb =
+                Callback::Callback<Int8sAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x29: // int16 / Signed 16-bit integer
+        {
+            CHECK_MESSAGE_LENGTH(2);
+            int16_t value = chip::CastToSigned(chip::Encoding::LittleEndian::Read16(message));
+            ChipLogProgress(Zcl, "  value: %" PRId16, value);
+
+            Callback::Callback<Int16sAttributeCallback> * cb =
+                Callback::Callback<Int16sAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x2B: // int32 / Signed 32-bit integer
+        {
+            CHECK_MESSAGE_LENGTH(4);
+            int32_t value = chip::CastToSigned(chip::Encoding::LittleEndian::Read32(message));
+            ChipLogProgress(Zcl, "  value: %" PRId32, value);
+
+            Callback::Callback<Int32sAttributeCallback> * cb =
+                Callback::Callback<Int32sAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x2F: // int64 / Signed 64-bit integer
+        {
+            CHECK_MESSAGE_LENGTH(8);
+            int64_t value = chip::CastToSigned(chip::Encoding::LittleEndian::Read64(message));
+            ChipLogProgress(Zcl, "  value: %" PRId64, value);
+
+            Callback::Callback<Int64sAttributeCallback> * cb =
+                Callback::Callback<Int64sAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+        }
+    }
+
+    return true;
+}
diff --git a/examples/lighting-app/lighting-common/gen/CHIPClientCallbacks.h b/examples/lighting-app/lighting-common/gen/CHIPClientCallbacks.h
new file mode 100644
index 0000000..14a3742
--- /dev/null
+++ b/examples/lighting-app/lighting-common/gen/CHIPClientCallbacks.h
@@ -0,0 +1,39 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+#pragma once
+
+#include <inttypes.h>
+
+// Global Response Callbacks
+typedef void (*DefaultSuccessCallback)(void * context);
+typedef void (*DefaultFailureCallback)(void * context, uint8_t status);
+typedef void (*BooleanAttributeCallback)(void * context, bool value);
+typedef void (*Int8uAttributeCallback)(void * context, uint8_t value);
+typedef void (*Int8sAttributeCallback)(void * context, int8_t value);
+typedef void (*Int16uAttributeCallback)(void * context, uint16_t value);
+typedef void (*Int16sAttributeCallback)(void * context, int16_t value);
+typedef void (*Int32uAttributeCallback)(void * context, uint32_t value);
+typedef void (*Int32sAttributeCallback)(void * context, int32_t value);
+typedef void (*Int64uAttributeCallback)(void * context, uint64_t value);
+typedef void (*Int64sAttributeCallback)(void * context, int64_t value);
+typedef void (*ReadReportingConfigurationReportedCallback)(void * context, uint16_t minInterval, uint16_t maxInterval);
+typedef void (*ReadReportingConfigurationReceivedCallback)(void * context, uint16_t timeout);
+
+// Cluster Specific Response Callbacks
diff --git a/examples/lighting-app/lighting-common/gen/CHIPClustersObjc.h b/examples/lighting-app/lighting-common/gen/CHIPClustersObjc.h
new file mode 100644
index 0000000..53292c5
--- /dev/null
+++ b/examples/lighting-app/lighting-common/gen/CHIPClustersObjc.h
@@ -0,0 +1,99 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+#ifndef CHIP_CLUSTERS_H
+#define CHIP_CLUSTERS_H
+
+#import <Foundation/Foundation.h>
+
+typedef void (^ResponseHandler)(NSError * _Nullable error, NSDictionary * _Nullable values);
+
+@class CHIPDevice;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CHIPLevelControl : NSObject
+
+- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
+- (BOOL)move:(uint8_t)moveMode
+                 rate:(uint8_t)rate
+           optionMask:(uint8_t)optionMask
+       optionOverride:(uint8_t)optionOverride
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)moveToLevel:(uint8_t)level
+       transitionTime:(uint16_t)transitionTime
+           optionMask:(uint8_t)optionMask
+       optionOverride:(uint8_t)optionOverride
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)moveToLevelWithOnOff:(uint8_t)level
+              transitionTime:(uint16_t)transitionTime
+           completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)moveWithOnOff:(uint8_t)moveMode rate:(uint8_t)rate completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)step:(uint8_t)stepMode
+             stepSize:(uint8_t)stepSize
+       transitionTime:(uint16_t)transitionTime
+           optionMask:(uint8_t)optionMask
+       optionOverride:(uint8_t)optionOverride
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)stepWithOnOff:(uint8_t)stepMode
+             stepSize:(uint8_t)stepSize
+       transitionTime:(uint16_t)transitionTime
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)stop:(uint8_t)optionMask optionOverride:(uint8_t)optionOverride completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)stopWithOnOff:(ResponseHandler)completionHandler;
+
+- (BOOL)readAttributeCurrentLevel:(ResponseHandler)completionHandler;
+- (BOOL)configureAttributeCurrentLevel:(uint16_t)minInterval
+                           maxInterval:(uint16_t)maxInterval
+                                change:(uint8_t)change
+                     completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)reportAttributeCurrentLevel:(ResponseHandler)reportHandler;
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler;
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CHIPOnOff : NSObject
+
+- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
+- (BOOL)off:(ResponseHandler)completionHandler;
+- (BOOL)on:(ResponseHandler)completionHandler;
+- (BOOL)toggle:(ResponseHandler)completionHandler;
+
+- (BOOL)readAttributeOnOff:(ResponseHandler)completionHandler;
+- (BOOL)configureAttributeOnOff:(uint16_t)minInterval
+                    maxInterval:(uint16_t)maxInterval
+              completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)reportAttributeOnOff:(ResponseHandler)reportHandler;
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler;
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif /* CHIP_CLUSTERS_H */
diff --git a/examples/lighting-app/lighting-common/gen/CHIPClustersObjc.mm b/examples/lighting-app/lighting-common/gen/CHIPClustersObjc.mm
new file mode 100644
index 0000000..d08044a
--- /dev/null
+++ b/examples/lighting-app/lighting-common/gen/CHIPClustersObjc.mm
@@ -0,0 +1,748 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+#import <Foundation/Foundation.h>
+
+#import "CHIPDevice.h"
+#import "CHIPDevice_Internal.h"
+#import "gen/CHIPClientCallbacks.h"
+#import "gen/CHIPClustersObjc.h"
+
+#include <controller/CHIPClusters.h>
+
+using namespace ::chip;
+
+class CHIPDefaultSuccessCallbackBridge : public Callback::Callback<DefaultSuccessCallback> {
+public:
+    CHIPDefaultSuccessCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DefaultSuccessCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDefaultSuccessCallbackBridge() {};
+
+    static void CallbackFn(void * context)
+    {
+        CHIPDefaultSuccessCallbackBridge * callback = reinterpret_cast<CHIPDefaultSuccessCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, nil);
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDefaultFailureCallbackBridge : public Callback::Callback<DefaultFailureCallback> {
+public:
+    CHIPDefaultFailureCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DefaultFailureCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDefaultFailureCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint8_t status)
+    {
+        CHIPDefaultFailureCallbackBridge * callback = reinterpret_cast<CHIPDefaultFailureCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                NSError * error = [NSError errorWithDomain:@"ZCL" code:status userInfo:@ { NSLocalizedDescriptionKey : @"" }];
+                callback->mHandler(error, nil);
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPUnsupportedAttributeCallbackBridge : public Callback::Callback<DefaultSuccessCallback> {
+public:
+    CHIPUnsupportedAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DefaultSuccessCallback>(CallbackFn, this)
+    {
+    }
+
+    ~CHIPUnsupportedAttributeCallbackBridge() {};
+
+    static void CallbackFn(void * context)
+    {
+        CHIPUnsupportedAttributeCallbackBridge * callback = reinterpret_cast<CHIPUnsupportedAttributeCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                NSError * error = [NSError errorWithDomain:@"ZCL"
+                                                      code:0
+                                                  userInfo:@ { NSLocalizedDescriptionKey : @"Unsuported attribute type" }];
+                callback->mHandler(error, nil);
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPBooleanAttributeCallbackBridge : public Callback::Callback<BooleanAttributeCallback> {
+public:
+    CHIPBooleanAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
+        : Callback::Callback<BooleanAttributeCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+        , mKeepAlive(keepAlive)
+    {
+    }
+
+    ~CHIPBooleanAttributeCallbackBridge() {};
+
+    static void CallbackFn(void * context, bool value)
+    {
+        CHIPBooleanAttributeCallbackBridge * callback = reinterpret_cast<CHIPBooleanAttributeCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ { @"value" : [NSNumber numberWithBool:value] });
+                if (!callback->mKeepAlive) {
+                    callback->Cancel();
+                    delete callback;
+                }
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+    bool mKeepAlive;
+};
+
+class CHIPInt8uAttributeCallbackBridge : public Callback::Callback<Int8uAttributeCallback> {
+public:
+    CHIPInt8uAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
+        : Callback::Callback<Int8uAttributeCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+        , mKeepAlive(keepAlive)
+    {
+    }
+
+    ~CHIPInt8uAttributeCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint8_t value)
+    {
+        CHIPInt8uAttributeCallbackBridge * callback = reinterpret_cast<CHIPInt8uAttributeCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ { @"value" : [NSNumber numberWithUnsignedChar:value] });
+                if (!callback->mKeepAlive) {
+                    callback->Cancel();
+                    delete callback;
+                }
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+    bool mKeepAlive;
+};
+
+class CHIPInt8sAttributeCallbackBridge : public Callback::Callback<Int8sAttributeCallback> {
+public:
+    CHIPInt8sAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
+        : Callback::Callback<Int8sAttributeCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+        , mKeepAlive(keepAlive)
+    {
+    }
+
+    ~CHIPInt8sAttributeCallbackBridge() {};
+
+    static void CallbackFn(void * context, int8_t value)
+    {
+        CHIPInt8sAttributeCallbackBridge * callback = reinterpret_cast<CHIPInt8sAttributeCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ { @"value" : [NSNumber numberWithChar:value] });
+                if (!callback->mKeepAlive) {
+                    callback->Cancel();
+                    delete callback;
+                }
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+    bool mKeepAlive;
+};
+
+class CHIPInt16uAttributeCallbackBridge : public Callback::Callback<Int16uAttributeCallback> {
+public:
+    CHIPInt16uAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
+        : Callback::Callback<Int16uAttributeCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+        , mKeepAlive(keepAlive)
+    {
+    }
+
+    ~CHIPInt16uAttributeCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint16_t value)
+    {
+        CHIPInt16uAttributeCallbackBridge * callback = reinterpret_cast<CHIPInt16uAttributeCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ { @"value" : [NSNumber numberWithUnsignedShort:value] });
+                if (!callback->mKeepAlive) {
+                    callback->Cancel();
+                    delete callback;
+                }
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+    bool mKeepAlive;
+};
+
+class CHIPInt16sAttributeCallbackBridge : public Callback::Callback<Int16sAttributeCallback> {
+public:
+    CHIPInt16sAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
+        : Callback::Callback<Int16sAttributeCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+        , mKeepAlive(keepAlive)
+    {
+    }
+
+    ~CHIPInt16sAttributeCallbackBridge() {};
+
+    static void CallbackFn(void * context, int16_t value)
+    {
+        CHIPInt16sAttributeCallbackBridge * callback = reinterpret_cast<CHIPInt16sAttributeCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ { @"value" : [NSNumber numberWithShort:value] });
+                if (!callback->mKeepAlive) {
+                    callback->Cancel();
+                    delete callback;
+                }
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+    bool mKeepAlive;
+};
+
+@interface CHIPLevelControl ()
+
+@property (readonly) Controller::LevelControlCluster cppCluster;
+@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
+@end
+
+@implementation CHIPLevelControl
+
+- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(EndpointId)endpoint queue:(dispatch_queue_t)queue
+{
+    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
+
+    if (err != CHIP_NO_ERROR) {
+        return nil;
+    }
+
+    if (self = [super init]) {
+        _callbackQueue = queue;
+    }
+
+    return self;
+}
+
+- (BOOL)move:(uint8_t)moveMode
+                 rate:(uint8_t)rate
+           optionMask:(uint8_t)optionMask
+       optionOverride:(uint8_t)optionOverride
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.Move(onSuccess->Cancel(), onFailure->Cancel(), moveMode, rate, optionMask, optionOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)moveToLevel:(uint8_t)level
+       transitionTime:(uint16_t)transitionTime
+           optionMask:(uint8_t)optionMask
+       optionOverride:(uint8_t)optionOverride
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err
+        = self.cppCluster.MoveToLevel(onSuccess->Cancel(), onFailure->Cancel(), level, transitionTime, optionMask, optionOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)moveToLevelWithOnOff:(uint8_t)level
+              transitionTime:(uint16_t)transitionTime
+           completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.MoveToLevelWithOnOff(onSuccess->Cancel(), onFailure->Cancel(), level, transitionTime);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)moveWithOnOff:(uint8_t)moveMode rate:(uint8_t)rate completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.MoveWithOnOff(onSuccess->Cancel(), onFailure->Cancel(), moveMode, rate);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)step:(uint8_t)stepMode
+             stepSize:(uint8_t)stepSize
+       transitionTime:(uint16_t)transitionTime
+           optionMask:(uint8_t)optionMask
+       optionOverride:(uint8_t)optionOverride
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.Step(
+        onSuccess->Cancel(), onFailure->Cancel(), stepMode, stepSize, transitionTime, optionMask, optionOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)stepWithOnOff:(uint8_t)stepMode
+             stepSize:(uint8_t)stepSize
+       transitionTime:(uint16_t)transitionTime
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.StepWithOnOff(onSuccess->Cancel(), onFailure->Cancel(), stepMode, stepSize, transitionTime);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)stop:(uint8_t)optionMask optionOverride:(uint8_t)optionOverride completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.Stop(onSuccess->Cancel(), onFailure->Cancel(), optionMask, optionOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)stopWithOnOff:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.StopWithOnOff(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeCurrentLevel:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeCurrentLevel(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)configureAttributeCurrentLevel:(uint16_t)minInterval
+                           maxInterval:(uint16_t)maxInterval
+                                change:(uint8_t)change
+                     completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ConfigureAttributeCurrentLevel(
+        onSuccess->Cancel(), onFailure->Cancel(), minInterval, maxInterval, change);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)reportAttributeCurrentLevel:(ResponseHandler)reportHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onReport = new CHIPInt8uAttributeCallbackBridge(reportHandler, _callbackQueue, true);
+    if (!onReport) {
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReportAttributeCurrentLevel(onReport->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onReport;
+        return NO;
+    }
+
+    return YES;
+}
+
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+@end
+
+@interface CHIPOnOff ()
+
+@property (readonly) Controller::OnOffCluster cppCluster;
+@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
+@end
+
+@implementation CHIPOnOff
+
+- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(EndpointId)endpoint queue:(dispatch_queue_t)queue
+{
+    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
+
+    if (err != CHIP_NO_ERROR) {
+        return nil;
+    }
+
+    if (self = [super init]) {
+        _callbackQueue = queue;
+    }
+
+    return self;
+}
+
+- (BOOL)off:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.Off(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)on:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.On(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)toggle:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.Toggle(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeOnOff:(ResponseHandler)completionHandler
+{
+    CHIPBooleanAttributeCallbackBridge * onSuccess = new CHIPBooleanAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeOnOff(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)configureAttributeOnOff:(uint16_t)minInterval
+                    maxInterval:(uint16_t)maxInterval
+              completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ConfigureAttributeOnOff(onSuccess->Cancel(), onFailure->Cancel(), minInterval, maxInterval);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)reportAttributeOnOff:(ResponseHandler)reportHandler
+{
+    CHIPBooleanAttributeCallbackBridge * onReport = new CHIPBooleanAttributeCallbackBridge(reportHandler, _callbackQueue, true);
+    if (!onReport) {
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReportAttributeOnOff(onReport->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onReport;
+        return NO;
+    }
+
+    return YES;
+}
+
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+@end
diff --git a/examples/lock-app/lock-common/gen/CHIPClientCallbacks.cpp b/examples/lock-app/lock-common/gen/CHIPClientCallbacks.cpp
new file mode 100644
index 0000000..f5f88af
--- /dev/null
+++ b/examples/lock-app/lock-common/gen/CHIPClientCallbacks.cpp
@@ -0,0 +1,842 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+#include "gen/CHIPClientCallbacks.h"
+
+#include "gen/enums.h"
+#include <app/util/CHIPDeviceCallbacksMgr.h>
+#include <app/util/af-enums.h>
+#include <app/util/af.h>
+#include <app/util/basic-types.h>
+#include <core/CHIPEncoding.h>
+#include <support/SafeInt.h>
+#include <support/logging/CHIPLogging.h>
+
+using namespace ::chip;
+
+#define CHECK_MESSAGE_LENGTH(value)                                                                                                \
+    if (!chip::CanCastTo<uint16_t>(value))                                                                                         \
+    {                                                                                                                              \
+        ChipLogError(Zcl, "CHECK_MESSAGE_LENGTH expects a uint16_t value, got: %d", value);                                        \
+        if (onFailureCallback != nullptr)                                                                                          \
+        {                                                                                                                          \
+            Callback::Callback<DefaultFailureCallback> * cb =                                                                      \
+                Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);                                     \
+            cb->mCall(cb->mContext, static_cast<uint8_t>(EMBER_ZCL_STATUS_INVALID_VALUE));                                         \
+        }                                                                                                                          \
+        return true;                                                                                                               \
+    }                                                                                                                              \
+                                                                                                                                   \
+    if (messageLen < value)                                                                                                        \
+    {                                                                                                                              \
+        ChipLogError(Zcl, "Unexpected response length: %d", messageLen);                                                           \
+        if (onFailureCallback != nullptr)                                                                                          \
+        {                                                                                                                          \
+            Callback::Callback<DefaultFailureCallback> * cb =                                                                      \
+                Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);                                     \
+            cb->mCall(cb->mContext, static_cast<uint8_t>(EMBER_ZCL_STATUS_INVALID_VALUE));                                         \
+        }                                                                                                                          \
+        return true;                                                                                                               \
+    }                                                                                                                              \
+                                                                                                                                   \
+    messageLen = static_cast<uint16_t>(messageLen - static_cast<uint16_t>(value));
+
+#define GET_RESPONSE_CALLBACKS(name)                                                                                               \
+    Callback::Cancelable * onSuccessCallback = nullptr;                                                                            \
+    Callback::Cancelable * onFailureCallback = nullptr;                                                                            \
+    NodeId sourceId                          = emberAfCurrentCommand()->source;                                                    \
+    uint8_t sequenceNumber                   = emberAfCurrentCommand()->seqNum;                                                    \
+    CHIP_ERROR err = gCallbacks.GetResponseCallback(sourceId, sequenceNumber, &onSuccessCallback, &onFailureCallback);             \
+                                                                                                                                   \
+    if (CHIP_NO_ERROR != err)                                                                                                      \
+    {                                                                                                                              \
+        if (onSuccessCallback == nullptr)                                                                                          \
+        {                                                                                                                          \
+            ChipLogDetail(Zcl, "%s: Missing success callback", name);                                                              \
+        }                                                                                                                          \
+                                                                                                                                   \
+        if (onFailureCallback == nullptr)                                                                                          \
+        {                                                                                                                          \
+            ChipLogDetail(Zcl, "%s: Missing failure callback", name);                                                              \
+        }                                                                                                                          \
+                                                                                                                                   \
+        return true;                                                                                                               \
+    }
+
+#define GET_REPORT_CALLBACK(name)                                                                                                  \
+    Callback::Cancelable * onReportCallback = nullptr;                                                                             \
+    CHIP_ERROR err = gCallbacks.GetReportCallback(sourceId, endpointId, clusterId, attributeId, &onReportCallback);                \
+                                                                                                                                   \
+    if (CHIP_NO_ERROR != err)                                                                                                      \
+    {                                                                                                                              \
+        if (onReportCallback == nullptr)                                                                                           \
+        {                                                                                                                          \
+            ChipLogDetail(Zcl, "%s: Missing report callback", name);                                                               \
+        }                                                                                                                          \
+                                                                                                                                   \
+        return true;                                                                                                               \
+    }
+
+void LogStatus(uint8_t status)
+{
+    switch (status)
+    {
+    case EMBER_ZCL_STATUS_SUCCESS:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_SUCCESS (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_FAILURE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_FAILURE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_NOT_AUTHORIZED:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_NOT_AUTHORIZED (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_MALFORMED_COMMAND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_MALFORMED_COMMAND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNSUP_COMMAND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNSUP_CLUSTER_COMMAND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNSUP_GENERAL_COMMAND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNSUP_GENERAL_COMMAND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNSUP_MANUF_CLUSTER_COMMAND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNSUP_MANUF_CLUSTER_COMMAND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNSUP_MANUF_GENERAL_COMMAND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNSUP_MANUF_GENERAL_COMMAND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INVALID_FIELD:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INVALID_FIELD (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNSUPPORTED_ATTRIBUTE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNSUPPORTED_ATTRIBUTE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INVALID_VALUE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INVALID_VALUE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_READ_ONLY:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_READ_ONLY (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INSUFFICIENT_SPACE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INSUFFICIENT_SPACE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_DUPLICATE_EXISTS:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_DUPLICATE_EXISTS (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_NOT_FOUND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_NOT_FOUND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNREPORTABLE_ATTRIBUTE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNREPORTABLE_ATTRIBUTE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INVALID_DATA_TYPE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INVALID_DATA_TYPE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INVALID_SELECTOR:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INVALID_SELECTOR (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_WRITE_ONLY:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_WRITE_ONLY (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INCONSISTENT_STARTUP_STATE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INCONSISTENT_STARTUP_STATE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_DEFINED_OUT_OF_BAND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_DEFINED_OUT_Of_BAND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_ACTION_DENIED:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_ACTION_DENIED (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_TIMEOUT:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_TIMEOUT (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_ABORT:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_ABORT (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INVALID_IMAGE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INVALID_IMAGE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_WAIT_FOR_DATA:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_WAIT_FOR_DATA (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_NO_IMAGE_AVAILABLE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_NO_IMAGE_AVAILABLE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_REQUIRE_MORE_IMAGE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_REQUIRE_MORE_IMAGE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_HARDWARE_FAILURE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_HARDWARE_FAILURE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_SOFTWARE_FAILURE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_SOFTWARE_FAILURE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNSUPPORTED_CLUSTER:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNSUPPORTED_CLUSTER (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_LIMIT_REACHED:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_LIMIT_REACHED (0x%02x)", status);
+        break;
+    default:
+        ChipLogError(Zcl, "Unknow status: 0x%02x", status);
+        break;
+    }
+}
+
+// Singleton instance of the callbacks manager
+app::CHIPDeviceCallbacksMgr & gCallbacks = app::CHIPDeviceCallbacksMgr::GetInstance();
+
+bool emberAfDefaultResponseCallback(ClusterId clusterId, CommandId commandId, EmberAfStatus status)
+{
+    ChipLogProgress(Zcl, "DefaultResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+    ChipLogProgress(Zcl, "  CommandId: 0x%02x", commandId);
+    LogStatus(status);
+
+    GET_RESPONSE_CALLBACKS("emberAfDefaultResponseCallback");
+    if (status == EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultSuccessCallback> * cb =
+            Callback::Callback<DefaultSuccessCallback>::FromCancelable(onSuccessCallback);
+        cb->mCall(cb->mContext);
+    }
+    else
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, static_cast<uint8_t>(status));
+    }
+
+    return true;
+}
+
+bool emberAfReadAttributesResponseCallback(ClusterId clusterId, uint8_t * message, uint16_t messageLen)
+{
+    ChipLogProgress(Zcl, "ReadAttributesResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+
+    GET_RESPONSE_CALLBACKS("emberAfReadAttributesResponseCallback");
+
+    // struct readAttributeResponseRecord[]
+    while (messageLen)
+    {
+        CHECK_MESSAGE_LENGTH(2);
+        uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+        ChipLogProgress(Zcl, "  attributeId: 0x%04x", attributeId);
+
+        CHECK_MESSAGE_LENGTH(1);
+        uint8_t status = chip::Encoding::Read8(message); // zclStatus
+        LogStatus(status);
+
+        if (status == EMBER_ZCL_STATUS_SUCCESS)
+        {
+            CHECK_MESSAGE_LENGTH(1);
+            uint8_t attributeType = chip::Encoding::Read8(message);
+            ChipLogProgress(Zcl, "  attributeType: 0x%02x", attributeType);
+
+            switch (attributeType)
+            {
+            case 0x00: // nodata / No data
+            case 0x0A: // data24 / 24-bit data
+            case 0x0C: // data40 / 40-bit data
+            case 0x0D: // data48 / 48-bit data
+            case 0x0E: // data56 / 56-bit data
+            case 0x1A: // map24 / 24-bit bitmap
+            case 0x1C: // map40 / 40-bit bitmap
+            case 0x1D: // map48 / 48-bit bitmap
+            case 0x1E: // map56 / 56-bit bitmap
+            case 0x22: // uint24 / Unsigned 24-bit integer
+            case 0x24: // uint40 / Unsigned 40-bit integer
+            case 0x25: // uint48 / Unsigned 48-bit integer
+            case 0x26: // uint56 / Unsigned 56-bit integer
+            case 0x2A: // int24 / Signed 24-bit integer
+            case 0x2C: // int40 / Signed 40-bit integer
+            case 0x2D: // int48 / Signed 48-bit integer
+            case 0x2E: // int56 / Signed 56-bit integer
+            case 0x38: // semi / Semi-precision
+            case 0x39: // single / Single precision
+            case 0x3A: // double / Double precision
+            case 0x41: // octstr / Octet string
+            case 0x42: // string / Character string
+            case 0x43: // octstr16 / Long octet string
+            case 0x44: // string16 / Long character string
+            case 0x48: // array / Array
+            case 0x49: // struct / Structure
+            case 0x50: // set / Set
+            case 0x51: // bag / Bag
+            case 0xE0: // ToD / Time of day
+            {
+                ChipLogError(Zcl, "attributeType 0x%02x is not supported", attributeType);
+                Callback::Callback<DefaultFailureCallback> * cb =
+                    Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+                cb->mCall(cb->mContext, EMBER_ZCL_STATUS_INVALID_VALUE);
+                return true;
+            }
+
+            case 0x08: // data8 / 8-bit data
+            case 0x18: // map8 / 8-bit bitmap
+            case 0x20: // uint8 / Unsigned  8-bit integer
+            case 0x30: // enum8 / 8-bit enumeration
+            {
+                CHECK_MESSAGE_LENGTH(1);
+                uint8_t value = chip::Encoding::Read8(message);
+                ChipLogProgress(Zcl, "  value: 0x%02x", value);
+
+                Callback::Callback<Int8uAttributeCallback> * cb =
+                    Callback::Callback<Int8uAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x09: // data16 / 16-bit data
+            case 0x19: // map16 / 16-bit bitmap
+            case 0x21: // uint16 / Unsigned 16-bit integer
+            case 0x31: // enum16 / 16-bit enumeration
+            case 0xE8: // clusterId / Cluster ID
+            case 0xE9: // attribId / Attribute ID
+            case 0xEA: // bacOID / BACnet OID
+            case 0xF1: // key128 / 128-bit security key
+            case 0xFF: // unk / Unknown
+            {
+                CHECK_MESSAGE_LENGTH(2);
+                uint16_t value = chip::Encoding::LittleEndian::Read16(message);
+                ChipLogProgress(Zcl, "  value: 0x%04x", value);
+
+                Callback::Callback<Int16uAttributeCallback> * cb =
+                    Callback::Callback<Int16uAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x0B: // data32 / 32-bit data
+            case 0x1B: // map32 / 32-bit bitmap
+            case 0x23: // uint32 / Unsigned 32-bit integer
+            case 0xE1: // date / Date
+            case 0xE2: // UTC / UTCTime
+            {
+                CHECK_MESSAGE_LENGTH(4);
+                uint32_t value = chip::Encoding::LittleEndian::Read32(message);
+                ChipLogProgress(Zcl, "  value: 0x%08x", value);
+
+                Callback::Callback<Int32uAttributeCallback> * cb =
+                    Callback::Callback<Int32uAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x0F: // data64 / 64-bit data
+            case 0x1F: // map64 / 64-bit bitmap
+            case 0x27: // uint64 / Unsigned 64-bit integer
+            case 0xF0: // EUI64 / IEEE address
+            {
+                CHECK_MESSAGE_LENGTH(8);
+                uint64_t value = chip::Encoding::LittleEndian::Read64(message);
+                ChipLogProgress(Zcl, "  value: 0x%16x", value);
+
+                Callback::Callback<Int64uAttributeCallback> * cb =
+                    Callback::Callback<Int64uAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x10: // bool / Boolean
+            {
+                CHECK_MESSAGE_LENGTH(1);
+                uint8_t value = chip::Encoding::Read8(message);
+                ChipLogProgress(Zcl, "  value: %d", value);
+
+                Callback::Callback<BooleanAttributeCallback> * cb =
+                    Callback::Callback<BooleanAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x28: // int8 / Signed 8-bit integer
+            {
+                CHECK_MESSAGE_LENGTH(1);
+                int8_t value = chip::CastToSigned(chip::Encoding::Read8(message));
+                ChipLogProgress(Zcl, "  value: %" PRId8, value);
+
+                Callback::Callback<Int8sAttributeCallback> * cb =
+                    Callback::Callback<Int8sAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x29: // int16 / Signed 16-bit integer
+            {
+                CHECK_MESSAGE_LENGTH(2);
+                int16_t value = chip::CastToSigned(chip::Encoding::LittleEndian::Read16(message));
+                ChipLogProgress(Zcl, "  value: %" PRId16, value);
+
+                Callback::Callback<Int16sAttributeCallback> * cb =
+                    Callback::Callback<Int16sAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x2B: // int32 / Signed 32-bit integer
+            {
+                CHECK_MESSAGE_LENGTH(4);
+                int32_t value = chip::CastToSigned(chip::Encoding::LittleEndian::Read32(message));
+                ChipLogProgress(Zcl, "  value: %" PRId32, value);
+
+                Callback::Callback<Int32sAttributeCallback> * cb =
+                    Callback::Callback<Int32sAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x2F: // int64 / Signed 64-bit integer
+            {
+                CHECK_MESSAGE_LENGTH(8);
+                int64_t value = chip::CastToSigned(chip::Encoding::LittleEndian::Read64(message));
+                ChipLogProgress(Zcl, "  value: %" PRId64, value);
+
+                Callback::Callback<Int64sAttributeCallback> * cb =
+                    Callback::Callback<Int64sAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+            }
+        }
+        else
+        {
+            Callback::Callback<DefaultFailureCallback> * cb =
+                Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+            cb->mCall(cb->mContext, status);
+        }
+
+        // The current code is written matching the current API where there is a single attribute read
+        // per read command. So if multiple attributes are read at the same time, something is wrong
+        // somewhere.
+        if (messageLen)
+        {
+            ChipLogError(Zcl, "Multiple attributes read at the same time. Something went wrong.");
+            break;
+        }
+    }
+
+    return true;
+}
+
+bool emberAfWriteAttributesResponseCallback(ClusterId clusterId, uint8_t * message, uint16_t messageLen)
+{
+    ChipLogProgress(Zcl, "WriteAttributesResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+
+    GET_RESPONSE_CALLBACKS("emberAfWriteAttributesResponseCallback");
+
+    // struct writeAttributeResponseRecord[]
+    while (messageLen)
+    {
+        CHECK_MESSAGE_LENGTH(1);
+        uint8_t status = chip::Encoding::Read8(message); // zclStatus
+        LogStatus(status);
+
+        if (status == EMBER_ZCL_STATUS_SUCCESS)
+        {
+            Callback::Callback<DefaultSuccessCallback> * cb =
+                Callback::Callback<DefaultSuccessCallback>::FromCancelable(onSuccessCallback);
+            cb->mCall(cb->mContext);
+        }
+        else
+        {
+            CHECK_MESSAGE_LENGTH(2);
+            uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+            ChipLogProgress(Zcl, "  attributeId: 0x%04x", attributeId);
+
+            Callback::Callback<DefaultFailureCallback> * cb =
+                Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+            cb->mCall(cb->mContext, status);
+        }
+
+        // The current code is written matching the current API where there is a single attribute written
+        // per write command. So if multiple attributes are written at the same time, something is wrong
+        // somewhere.
+        if (messageLen)
+        {
+            ChipLogError(Zcl, "Multiple attributes written at the same time. Something went wrong.");
+            break;
+        }
+    }
+
+    return true;
+}
+
+bool emberAfConfigureReportingResponseCallback(ClusterId clusterId, uint8_t * message, uint16_t messageLen)
+{
+    ChipLogProgress(Zcl, "ConfigureReportingResponseCallback:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+
+    GET_RESPONSE_CALLBACKS("emberAfConfigureReportingResponseCallback");
+
+    // struct configureReportingResponseRecord[]
+    while (messageLen)
+    {
+        CHECK_MESSAGE_LENGTH(1);
+        uint8_t status = chip::Encoding::Read8(message); // zclStatus
+        LogStatus(status);
+
+        if (status == EMBER_ZCL_STATUS_SUCCESS)
+        {
+            Callback::Callback<DefaultSuccessCallback> * cb =
+                Callback::Callback<DefaultSuccessCallback>::FromCancelable(onSuccessCallback);
+            cb->mCall(cb->mContext);
+        }
+        else
+        {
+            CHECK_MESSAGE_LENGTH(1);
+            uint8_t direction = chip::Encoding::Read8(message); // reportingRole
+            ChipLogProgress(Zcl, "  direction: 0x%02x", direction);
+
+            CHECK_MESSAGE_LENGTH(2);
+            uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+            ChipLogProgress(Zcl, "  attributeId: 0x%04x", attributeId);
+
+            Callback::Callback<DefaultFailureCallback> * cb =
+                Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+            cb->mCall(cb->mContext, status);
+        }
+
+        // The current code is written matching the current API where there is a single attribute report
+        // per configure command. So if multiple attributes are configured at the same time, something is wrong
+        // somewhere.
+        if (messageLen)
+        {
+            ChipLogError(Zcl, "Multiple attributes reports configured at the same time. Something went wrong.");
+            break;
+        }
+    }
+
+    return true;
+}
+
+bool emberAfReadReportingConfigurationResponseCallback(chip::ClusterId clusterId, uint8_t * message, uint16_t messageLen)
+{
+    ChipLogProgress(Zcl, "ReadReportingConfigurationResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+
+    GET_RESPONSE_CALLBACKS("emberAfReadReportingConfigurationResponseCallback");
+
+    // struct readReportingConfigurationResponseRecord[]
+    while (messageLen)
+    {
+        CHECK_MESSAGE_LENGTH(1);
+        uint8_t direction = chip::Encoding::Read8(message); // reportingRole
+        ChipLogProgress(Zcl, "  direction: 0x%02x", direction);
+
+        CHECK_MESSAGE_LENGTH(2);
+        uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+        ChipLogProgress(Zcl, "  attributeId: 0x%04x", attributeId);
+
+        if (direction == EMBER_ZCL_REPORTING_DIRECTION_REPORTED)
+        {
+            CHECK_MESSAGE_LENGTH(1);
+            uint8_t attributeType = chip::Encoding::Read8(message); // zclType
+            ChipLogProgress(Zcl, "  attributeType: 0x%02x", attributeType);
+
+            CHECK_MESSAGE_LENGTH(2);
+            uint16_t minimumReportingInterval = chip::Encoding::LittleEndian::Read16(message); // uint16
+            ChipLogProgress(Zcl, "  minimumReportingInterval: %" PRIu16, minimumReportingInterval);
+
+            CHECK_MESSAGE_LENGTH(2);
+            uint16_t maximumReportingInterval = chip::Encoding::LittleEndian::Read16(message); // uint16
+            ChipLogProgress(Zcl, "  maximumReportingInterval: %" PRIu16, maximumReportingInterval);
+
+            // FIXME: unk is not supported yet.
+
+            Callback::Callback<ReadReportingConfigurationReportedCallback> * cb =
+                Callback::Callback<ReadReportingConfigurationReportedCallback>::FromCancelable(onSuccessCallback);
+            cb->mCall(cb->mContext, minimumReportingInterval, maximumReportingInterval);
+        }
+        else
+        {
+            CHECK_MESSAGE_LENGTH(2);
+            uint16_t timeout = chip::Encoding::LittleEndian::Read16(message); // uint16
+            ChipLogProgress(Zcl, "  timeout: %" PRIu16, timeout);
+
+            Callback::Callback<ReadReportingConfigurationReceivedCallback> * cb =
+                Callback::Callback<ReadReportingConfigurationReceivedCallback>::FromCancelable(onSuccessCallback);
+            cb->mCall(cb->mContext, timeout);
+        }
+    }
+
+    return true;
+}
+
+bool emberAfDiscoverAttributesResponseCallback(ClusterId clusterId, bool discoveryComplete, uint8_t * message, uint16_t messageLen,
+                                               bool extended)
+{
+    ChipLogProgress(Zcl, "DiscoverAttributesResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+    ChipLogProgress(Zcl, "  discoveryComplete: %d", discoveryComplete);
+    ChipLogProgress(Zcl, "  extended: %d", extended);
+
+    GET_RESPONSE_CALLBACKS("emberAfDiscoverAttributesCallback");
+
+    // struct discoverAttributesResponseRecord[]
+    while (messageLen)
+    {
+        CHECK_MESSAGE_LENGTH(2);
+        uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+        ChipLogProgress(Zcl, "  attributeId: 0x%04x", attributeId);
+
+        CHECK_MESSAGE_LENGTH(1);
+        uint8_t attributeType = chip::Encoding::Read8(message); // zclType
+        ChipLogProgress(Zcl, "  attributeType: 0x%02x", attributeType);
+    }
+
+    Callback::Callback<DefaultSuccessCallback> * cb = Callback::Callback<DefaultSuccessCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfDiscoverCommandsGeneratedResponseCallback(ClusterId clusterId, uint16_t manufacturerCode, bool discoveryComplete,
+                                                      CommandId * commandIds, uint16_t commandIdCount)
+{
+    ChipLogProgress(Zcl, "DiscoverCommandsGeneratedResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+    ChipLogProgress(Zcl, "  manufacturerCode: 0x%04x", manufacturerCode);
+    ChipLogProgress(Zcl, "  discoveryComplete: %d", discoveryComplete);
+    ChipLogProgress(Zcl, "  commandIdCount: %" PRIu16, commandIdCount);
+
+    for (uint16_t i = 0; i < commandIdCount; i++)
+    {
+        ChipLogProgress(Zcl, "  commandId: 0x%02x", commandIds++);
+    }
+
+    GET_RESPONSE_CALLBACKS("emberAfDiscoverCommandsGeneratedResponseCallback");
+    Callback::Callback<DefaultSuccessCallback> * cb = Callback::Callback<DefaultSuccessCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfDiscoverCommandsReceivedResponseCallback(ClusterId clusterId, uint16_t manufacturerCode, bool discoveryComplete,
+                                                     CommandId * commandIds, uint16_t commandIdCount)
+{
+    ChipLogProgress(Zcl, "DiscoverCommandsReceivedResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+    ChipLogProgress(Zcl, "  manufacturerCode: 0x%04x", manufacturerCode);
+    ChipLogProgress(Zcl, "  discoveryComplete: %d", discoveryComplete);
+    ChipLogProgress(Zcl, "  commandIdCount: %" PRIu16, commandIdCount);
+
+    for (uint16_t i = 0; i < commandIdCount; i++)
+    {
+        ChipLogProgress(Zcl, "  commandId: 0x%02x", commandIds++);
+    }
+
+    GET_RESPONSE_CALLBACKS("emberAfDiscoverCommandsGeneratedResponseCallback");
+    Callback::Callback<DefaultSuccessCallback> * cb = Callback::Callback<DefaultSuccessCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfReportAttributesCallback(ClusterId clusterId, uint8_t * message, uint16_t messageLen)
+{
+    ChipLogProgress(Zcl, "emberAfReportAttributeCallback:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+
+    NodeId sourceId = emberAfCurrentCommand()->source;
+    ChipLogProgress(Zcl, "  Source NodeId: %" PRIu64, sourceId);
+
+    EndpointId endpointId = emberAfCurrentCommand()->apsFrame->sourceEndpoint;
+    ChipLogProgress(Zcl, "  Source EndpointId: 0x%04x", endpointId);
+
+    // TODO onFailureCallback is just here because of the CHECK_MESSAGE_LENGTH macro. It needs to be removed.
+    Callback::Cancelable * onFailureCallback = nullptr;
+
+    while (messageLen)
+    {
+        CHECK_MESSAGE_LENGTH(2);
+        uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+        ChipLogProgress(Zcl, "  attributeId: 0x%04x", attributeId);
+
+        GET_REPORT_CALLBACK("emberAfReportAttributesCallback");
+
+        CHECK_MESSAGE_LENGTH(1);
+        uint8_t attributeType = chip::Encoding::Read8(message);
+        ChipLogProgress(Zcl, "  attributeType: 0x%02x", attributeType);
+
+        switch (attributeType)
+        {
+        case 0x00: // nodata / No data
+        case 0x0A: // data24 / 24-bit data
+        case 0x0C: // data40 / 40-bit data
+        case 0x0D: // data48 / 48-bit data
+        case 0x0E: // data56 / 56-bit data
+        case 0x1A: // map24 / 24-bit bitmap
+        case 0x1C: // map40 / 40-bit bitmap
+        case 0x1D: // map48 / 48-bit bitmap
+        case 0x1E: // map56 / 56-bit bitmap
+        case 0x22: // uint24 / Unsigned 24-bit integer
+        case 0x24: // uint40 / Unsigned 40-bit integer
+        case 0x25: // uint48 / Unsigned 48-bit integer
+        case 0x26: // uint56 / Unsigned 56-bit integer
+        case 0x2A: // int24 / Signed 24-bit integer
+        case 0x2C: // int40 / Signed 40-bit integer
+        case 0x2D: // int48 / Signed 48-bit integer
+        case 0x2E: // int56 / Signed 56-bit integer
+        case 0x38: // semi / Semi-precision
+        case 0x39: // single / Single precision
+        case 0x3A: // double / Double precision
+        case 0x41: // octstr / Octet string
+        case 0x42: // string / Character string
+        case 0x43: // octstr16 / Long octet string
+        case 0x44: // string16 / Long character string
+        case 0x48: // array / Array
+        case 0x49: // struct / Structure
+        case 0x50: // set / Set
+        case 0x51: // bag / Bag
+        case 0xE0: // ToD / Time of day
+        {
+            ChipLogError(Zcl, "attributeType 0x%02x is not supported", attributeType);
+            return true;
+        }
+
+        case 0x08: // data8 / 8-bit data
+        case 0x18: // map8 / 8-bit bitmap
+        case 0x20: // uint8 / Unsigned  8-bit integer
+        case 0x30: // enum8 / 8-bit enumeration
+        {
+            CHECK_MESSAGE_LENGTH(1);
+            uint8_t value = chip::Encoding::Read8(message);
+            ChipLogProgress(Zcl, "  value: 0x%02x", value);
+
+            Callback::Callback<Int8uAttributeCallback> * cb =
+                Callback::Callback<Int8uAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x09: // data16 / 16-bit data
+        case 0x19: // map16 / 16-bit bitmap
+        case 0x21: // uint16 / Unsigned 16-bit integer
+        case 0x31: // enum16 / 16-bit enumeration
+        case 0xE8: // clusterId / Cluster ID
+        case 0xE9: // attribId / Attribute ID
+        case 0xEA: // bacOID / BACnet OID
+        case 0xF1: // key128 / 128-bit security key
+        case 0xFF: // unk / Unknown
+        {
+            CHECK_MESSAGE_LENGTH(2);
+            uint16_t value = chip::Encoding::LittleEndian::Read16(message);
+            ChipLogProgress(Zcl, "  value: 0x%04x", value);
+
+            Callback::Callback<Int16uAttributeCallback> * cb =
+                Callback::Callback<Int16uAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x0B: // data32 / 32-bit data
+        case 0x1B: // map32 / 32-bit bitmap
+        case 0x23: // uint32 / Unsigned 32-bit integer
+        case 0xE1: // date / Date
+        case 0xE2: // UTC / UTCTime
+        {
+            CHECK_MESSAGE_LENGTH(4);
+            uint32_t value = chip::Encoding::LittleEndian::Read32(message);
+            ChipLogProgress(Zcl, "  value: 0x%08x", value);
+
+            Callback::Callback<Int32uAttributeCallback> * cb =
+                Callback::Callback<Int32uAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x0F: // data64 / 64-bit data
+        case 0x1F: // map64 / 64-bit bitmap
+        case 0x27: // uint64 / Unsigned 64-bit integer
+        case 0xF0: // EUI64 / IEEE address
+        {
+            CHECK_MESSAGE_LENGTH(8);
+            uint64_t value = chip::Encoding::LittleEndian::Read64(message);
+            ChipLogProgress(Zcl, "  value: 0x%16x", value);
+
+            Callback::Callback<Int64uAttributeCallback> * cb =
+                Callback::Callback<Int64uAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x10: // bool / Boolean
+        {
+            CHECK_MESSAGE_LENGTH(1);
+            uint8_t value = chip::Encoding::Read8(message);
+            ChipLogProgress(Zcl, "  value: %d", value);
+
+            Callback::Callback<BooleanAttributeCallback> * cb =
+                Callback::Callback<BooleanAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x28: // int8 / Signed 8-bit integer
+        {
+            CHECK_MESSAGE_LENGTH(1);
+            int8_t value = chip::CastToSigned(chip::Encoding::Read8(message));
+            ChipLogProgress(Zcl, "  value: %" PRId8, value);
+
+            Callback::Callback<Int8sAttributeCallback> * cb =
+                Callback::Callback<Int8sAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x29: // int16 / Signed 16-bit integer
+        {
+            CHECK_MESSAGE_LENGTH(2);
+            int16_t value = chip::CastToSigned(chip::Encoding::LittleEndian::Read16(message));
+            ChipLogProgress(Zcl, "  value: %" PRId16, value);
+
+            Callback::Callback<Int16sAttributeCallback> * cb =
+                Callback::Callback<Int16sAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x2B: // int32 / Signed 32-bit integer
+        {
+            CHECK_MESSAGE_LENGTH(4);
+            int32_t value = chip::CastToSigned(chip::Encoding::LittleEndian::Read32(message));
+            ChipLogProgress(Zcl, "  value: %" PRId32, value);
+
+            Callback::Callback<Int32sAttributeCallback> * cb =
+                Callback::Callback<Int32sAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x2F: // int64 / Signed 64-bit integer
+        {
+            CHECK_MESSAGE_LENGTH(8);
+            int64_t value = chip::CastToSigned(chip::Encoding::LittleEndian::Read64(message));
+            ChipLogProgress(Zcl, "  value: %" PRId64, value);
+
+            Callback::Callback<Int64sAttributeCallback> * cb =
+                Callback::Callback<Int64sAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+        }
+    }
+
+    return true;
+}
diff --git a/examples/lock-app/lock-common/gen/CHIPClientCallbacks.h b/examples/lock-app/lock-common/gen/CHIPClientCallbacks.h
new file mode 100644
index 0000000..14a3742
--- /dev/null
+++ b/examples/lock-app/lock-common/gen/CHIPClientCallbacks.h
@@ -0,0 +1,39 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+#pragma once
+
+#include <inttypes.h>
+
+// Global Response Callbacks
+typedef void (*DefaultSuccessCallback)(void * context);
+typedef void (*DefaultFailureCallback)(void * context, uint8_t status);
+typedef void (*BooleanAttributeCallback)(void * context, bool value);
+typedef void (*Int8uAttributeCallback)(void * context, uint8_t value);
+typedef void (*Int8sAttributeCallback)(void * context, int8_t value);
+typedef void (*Int16uAttributeCallback)(void * context, uint16_t value);
+typedef void (*Int16sAttributeCallback)(void * context, int16_t value);
+typedef void (*Int32uAttributeCallback)(void * context, uint32_t value);
+typedef void (*Int32sAttributeCallback)(void * context, int32_t value);
+typedef void (*Int64uAttributeCallback)(void * context, uint64_t value);
+typedef void (*Int64sAttributeCallback)(void * context, int64_t value);
+typedef void (*ReadReportingConfigurationReportedCallback)(void * context, uint16_t minInterval, uint16_t maxInterval);
+typedef void (*ReadReportingConfigurationReceivedCallback)(void * context, uint16_t timeout);
+
+// Cluster Specific Response Callbacks
diff --git a/examples/lock-app/lock-common/gen/CHIPClustersObjc.h b/examples/lock-app/lock-common/gen/CHIPClustersObjc.h
new file mode 100644
index 0000000..65ebec5
--- /dev/null
+++ b/examples/lock-app/lock-common/gen/CHIPClustersObjc.h
@@ -0,0 +1,52 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+#ifndef CHIP_CLUSTERS_H
+#define CHIP_CLUSTERS_H
+
+#import <Foundation/Foundation.h>
+
+typedef void (^ResponseHandler)(NSError * _Nullable error, NSDictionary * _Nullable values);
+
+@class CHIPDevice;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CHIPOnOff : NSObject
+
+- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
+- (BOOL)off:(ResponseHandler)completionHandler;
+- (BOOL)on:(ResponseHandler)completionHandler;
+- (BOOL)toggle:(ResponseHandler)completionHandler;
+
+- (BOOL)readAttributeOnOff:(ResponseHandler)completionHandler;
+- (BOOL)configureAttributeOnOff:(uint16_t)minInterval
+                    maxInterval:(uint16_t)maxInterval
+              completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)reportAttributeOnOff:(ResponseHandler)reportHandler;
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler;
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif /* CHIP_CLUSTERS_H */
diff --git a/examples/lock-app/lock-common/gen/CHIPClustersObjc.mm b/examples/lock-app/lock-common/gen/CHIPClustersObjc.mm
new file mode 100644
index 0000000..d6806cc
--- /dev/null
+++ b/examples/lock-app/lock-common/gen/CHIPClustersObjc.mm
@@ -0,0 +1,448 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+#import <Foundation/Foundation.h>
+
+#import "CHIPDevice.h"
+#import "CHIPDevice_Internal.h"
+#import "gen/CHIPClientCallbacks.h"
+#import "gen/CHIPClustersObjc.h"
+
+#include <controller/CHIPClusters.h>
+
+using namespace ::chip;
+
+class CHIPDefaultSuccessCallbackBridge : public Callback::Callback<DefaultSuccessCallback> {
+public:
+    CHIPDefaultSuccessCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DefaultSuccessCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDefaultSuccessCallbackBridge() {};
+
+    static void CallbackFn(void * context)
+    {
+        CHIPDefaultSuccessCallbackBridge * callback = reinterpret_cast<CHIPDefaultSuccessCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, nil);
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDefaultFailureCallbackBridge : public Callback::Callback<DefaultFailureCallback> {
+public:
+    CHIPDefaultFailureCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DefaultFailureCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDefaultFailureCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint8_t status)
+    {
+        CHIPDefaultFailureCallbackBridge * callback = reinterpret_cast<CHIPDefaultFailureCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                NSError * error = [NSError errorWithDomain:@"ZCL" code:status userInfo:@ { NSLocalizedDescriptionKey : @"" }];
+                callback->mHandler(error, nil);
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPUnsupportedAttributeCallbackBridge : public Callback::Callback<DefaultSuccessCallback> {
+public:
+    CHIPUnsupportedAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DefaultSuccessCallback>(CallbackFn, this)
+    {
+    }
+
+    ~CHIPUnsupportedAttributeCallbackBridge() {};
+
+    static void CallbackFn(void * context)
+    {
+        CHIPUnsupportedAttributeCallbackBridge * callback = reinterpret_cast<CHIPUnsupportedAttributeCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                NSError * error = [NSError errorWithDomain:@"ZCL"
+                                                      code:0
+                                                  userInfo:@ { NSLocalizedDescriptionKey : @"Unsuported attribute type" }];
+                callback->mHandler(error, nil);
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPBooleanAttributeCallbackBridge : public Callback::Callback<BooleanAttributeCallback> {
+public:
+    CHIPBooleanAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
+        : Callback::Callback<BooleanAttributeCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+        , mKeepAlive(keepAlive)
+    {
+    }
+
+    ~CHIPBooleanAttributeCallbackBridge() {};
+
+    static void CallbackFn(void * context, bool value)
+    {
+        CHIPBooleanAttributeCallbackBridge * callback = reinterpret_cast<CHIPBooleanAttributeCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ { @"value" : [NSNumber numberWithBool:value] });
+                if (!callback->mKeepAlive) {
+                    callback->Cancel();
+                    delete callback;
+                }
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+    bool mKeepAlive;
+};
+
+class CHIPInt8uAttributeCallbackBridge : public Callback::Callback<Int8uAttributeCallback> {
+public:
+    CHIPInt8uAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
+        : Callback::Callback<Int8uAttributeCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+        , mKeepAlive(keepAlive)
+    {
+    }
+
+    ~CHIPInt8uAttributeCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint8_t value)
+    {
+        CHIPInt8uAttributeCallbackBridge * callback = reinterpret_cast<CHIPInt8uAttributeCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ { @"value" : [NSNumber numberWithUnsignedChar:value] });
+                if (!callback->mKeepAlive) {
+                    callback->Cancel();
+                    delete callback;
+                }
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+    bool mKeepAlive;
+};
+
+class CHIPInt8sAttributeCallbackBridge : public Callback::Callback<Int8sAttributeCallback> {
+public:
+    CHIPInt8sAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
+        : Callback::Callback<Int8sAttributeCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+        , mKeepAlive(keepAlive)
+    {
+    }
+
+    ~CHIPInt8sAttributeCallbackBridge() {};
+
+    static void CallbackFn(void * context, int8_t value)
+    {
+        CHIPInt8sAttributeCallbackBridge * callback = reinterpret_cast<CHIPInt8sAttributeCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ { @"value" : [NSNumber numberWithChar:value] });
+                if (!callback->mKeepAlive) {
+                    callback->Cancel();
+                    delete callback;
+                }
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+    bool mKeepAlive;
+};
+
+class CHIPInt16uAttributeCallbackBridge : public Callback::Callback<Int16uAttributeCallback> {
+public:
+    CHIPInt16uAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
+        : Callback::Callback<Int16uAttributeCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+        , mKeepAlive(keepAlive)
+    {
+    }
+
+    ~CHIPInt16uAttributeCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint16_t value)
+    {
+        CHIPInt16uAttributeCallbackBridge * callback = reinterpret_cast<CHIPInt16uAttributeCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ { @"value" : [NSNumber numberWithUnsignedShort:value] });
+                if (!callback->mKeepAlive) {
+                    callback->Cancel();
+                    delete callback;
+                }
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+    bool mKeepAlive;
+};
+
+class CHIPInt16sAttributeCallbackBridge : public Callback::Callback<Int16sAttributeCallback> {
+public:
+    CHIPInt16sAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
+        : Callback::Callback<Int16sAttributeCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+        , mKeepAlive(keepAlive)
+    {
+    }
+
+    ~CHIPInt16sAttributeCallbackBridge() {};
+
+    static void CallbackFn(void * context, int16_t value)
+    {
+        CHIPInt16sAttributeCallbackBridge * callback = reinterpret_cast<CHIPInt16sAttributeCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ { @"value" : [NSNumber numberWithShort:value] });
+                if (!callback->mKeepAlive) {
+                    callback->Cancel();
+                    delete callback;
+                }
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+    bool mKeepAlive;
+};
+
+@interface CHIPOnOff ()
+
+@property (readonly) Controller::OnOffCluster cppCluster;
+@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
+@end
+
+@implementation CHIPOnOff
+
+- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(EndpointId)endpoint queue:(dispatch_queue_t)queue
+{
+    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
+
+    if (err != CHIP_NO_ERROR) {
+        return nil;
+    }
+
+    if (self = [super init]) {
+        _callbackQueue = queue;
+    }
+
+    return self;
+}
+
+- (BOOL)off:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.Off(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)on:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.On(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)toggle:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.Toggle(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeOnOff:(ResponseHandler)completionHandler
+{
+    CHIPBooleanAttributeCallbackBridge * onSuccess = new CHIPBooleanAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeOnOff(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)configureAttributeOnOff:(uint16_t)minInterval
+                    maxInterval:(uint16_t)maxInterval
+              completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ConfigureAttributeOnOff(onSuccess->Cancel(), onFailure->Cancel(), minInterval, maxInterval);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)reportAttributeOnOff:(ResponseHandler)reportHandler
+{
+    CHIPBooleanAttributeCallbackBridge * onReport = new CHIPBooleanAttributeCallbackBridge(reportHandler, _callbackQueue, true);
+    if (!onReport) {
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReportAttributeOnOff(onReport->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onReport;
+        return NO;
+    }
+
+    return YES;
+}
+
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+@end
diff --git a/examples/temperature-measurement-app/esp32/main/gen/CHIPClientCallbacks.cpp b/examples/temperature-measurement-app/esp32/main/gen/CHIPClientCallbacks.cpp
new file mode 100644
index 0000000..f5f88af
--- /dev/null
+++ b/examples/temperature-measurement-app/esp32/main/gen/CHIPClientCallbacks.cpp
@@ -0,0 +1,842 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+#include "gen/CHIPClientCallbacks.h"
+
+#include "gen/enums.h"
+#include <app/util/CHIPDeviceCallbacksMgr.h>
+#include <app/util/af-enums.h>
+#include <app/util/af.h>
+#include <app/util/basic-types.h>
+#include <core/CHIPEncoding.h>
+#include <support/SafeInt.h>
+#include <support/logging/CHIPLogging.h>
+
+using namespace ::chip;
+
+#define CHECK_MESSAGE_LENGTH(value)                                                                                                \
+    if (!chip::CanCastTo<uint16_t>(value))                                                                                         \
+    {                                                                                                                              \
+        ChipLogError(Zcl, "CHECK_MESSAGE_LENGTH expects a uint16_t value, got: %d", value);                                        \
+        if (onFailureCallback != nullptr)                                                                                          \
+        {                                                                                                                          \
+            Callback::Callback<DefaultFailureCallback> * cb =                                                                      \
+                Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);                                     \
+            cb->mCall(cb->mContext, static_cast<uint8_t>(EMBER_ZCL_STATUS_INVALID_VALUE));                                         \
+        }                                                                                                                          \
+        return true;                                                                                                               \
+    }                                                                                                                              \
+                                                                                                                                   \
+    if (messageLen < value)                                                                                                        \
+    {                                                                                                                              \
+        ChipLogError(Zcl, "Unexpected response length: %d", messageLen);                                                           \
+        if (onFailureCallback != nullptr)                                                                                          \
+        {                                                                                                                          \
+            Callback::Callback<DefaultFailureCallback> * cb =                                                                      \
+                Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);                                     \
+            cb->mCall(cb->mContext, static_cast<uint8_t>(EMBER_ZCL_STATUS_INVALID_VALUE));                                         \
+        }                                                                                                                          \
+        return true;                                                                                                               \
+    }                                                                                                                              \
+                                                                                                                                   \
+    messageLen = static_cast<uint16_t>(messageLen - static_cast<uint16_t>(value));
+
+#define GET_RESPONSE_CALLBACKS(name)                                                                                               \
+    Callback::Cancelable * onSuccessCallback = nullptr;                                                                            \
+    Callback::Cancelable * onFailureCallback = nullptr;                                                                            \
+    NodeId sourceId                          = emberAfCurrentCommand()->source;                                                    \
+    uint8_t sequenceNumber                   = emberAfCurrentCommand()->seqNum;                                                    \
+    CHIP_ERROR err = gCallbacks.GetResponseCallback(sourceId, sequenceNumber, &onSuccessCallback, &onFailureCallback);             \
+                                                                                                                                   \
+    if (CHIP_NO_ERROR != err)                                                                                                      \
+    {                                                                                                                              \
+        if (onSuccessCallback == nullptr)                                                                                          \
+        {                                                                                                                          \
+            ChipLogDetail(Zcl, "%s: Missing success callback", name);                                                              \
+        }                                                                                                                          \
+                                                                                                                                   \
+        if (onFailureCallback == nullptr)                                                                                          \
+        {                                                                                                                          \
+            ChipLogDetail(Zcl, "%s: Missing failure callback", name);                                                              \
+        }                                                                                                                          \
+                                                                                                                                   \
+        return true;                                                                                                               \
+    }
+
+#define GET_REPORT_CALLBACK(name)                                                                                                  \
+    Callback::Cancelable * onReportCallback = nullptr;                                                                             \
+    CHIP_ERROR err = gCallbacks.GetReportCallback(sourceId, endpointId, clusterId, attributeId, &onReportCallback);                \
+                                                                                                                                   \
+    if (CHIP_NO_ERROR != err)                                                                                                      \
+    {                                                                                                                              \
+        if (onReportCallback == nullptr)                                                                                           \
+        {                                                                                                                          \
+            ChipLogDetail(Zcl, "%s: Missing report callback", name);                                                               \
+        }                                                                                                                          \
+                                                                                                                                   \
+        return true;                                                                                                               \
+    }
+
+void LogStatus(uint8_t status)
+{
+    switch (status)
+    {
+    case EMBER_ZCL_STATUS_SUCCESS:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_SUCCESS (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_FAILURE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_FAILURE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_NOT_AUTHORIZED:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_NOT_AUTHORIZED (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_MALFORMED_COMMAND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_MALFORMED_COMMAND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNSUP_COMMAND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNSUP_CLUSTER_COMMAND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNSUP_GENERAL_COMMAND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNSUP_GENERAL_COMMAND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNSUP_MANUF_CLUSTER_COMMAND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNSUP_MANUF_CLUSTER_COMMAND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNSUP_MANUF_GENERAL_COMMAND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNSUP_MANUF_GENERAL_COMMAND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INVALID_FIELD:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INVALID_FIELD (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNSUPPORTED_ATTRIBUTE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNSUPPORTED_ATTRIBUTE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INVALID_VALUE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INVALID_VALUE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_READ_ONLY:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_READ_ONLY (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INSUFFICIENT_SPACE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INSUFFICIENT_SPACE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_DUPLICATE_EXISTS:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_DUPLICATE_EXISTS (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_NOT_FOUND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_NOT_FOUND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNREPORTABLE_ATTRIBUTE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNREPORTABLE_ATTRIBUTE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INVALID_DATA_TYPE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INVALID_DATA_TYPE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INVALID_SELECTOR:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INVALID_SELECTOR (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_WRITE_ONLY:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_WRITE_ONLY (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INCONSISTENT_STARTUP_STATE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INCONSISTENT_STARTUP_STATE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_DEFINED_OUT_OF_BAND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_DEFINED_OUT_Of_BAND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_ACTION_DENIED:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_ACTION_DENIED (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_TIMEOUT:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_TIMEOUT (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_ABORT:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_ABORT (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INVALID_IMAGE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INVALID_IMAGE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_WAIT_FOR_DATA:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_WAIT_FOR_DATA (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_NO_IMAGE_AVAILABLE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_NO_IMAGE_AVAILABLE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_REQUIRE_MORE_IMAGE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_REQUIRE_MORE_IMAGE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_HARDWARE_FAILURE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_HARDWARE_FAILURE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_SOFTWARE_FAILURE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_SOFTWARE_FAILURE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNSUPPORTED_CLUSTER:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNSUPPORTED_CLUSTER (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_LIMIT_REACHED:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_LIMIT_REACHED (0x%02x)", status);
+        break;
+    default:
+        ChipLogError(Zcl, "Unknow status: 0x%02x", status);
+        break;
+    }
+}
+
+// Singleton instance of the callbacks manager
+app::CHIPDeviceCallbacksMgr & gCallbacks = app::CHIPDeviceCallbacksMgr::GetInstance();
+
+bool emberAfDefaultResponseCallback(ClusterId clusterId, CommandId commandId, EmberAfStatus status)
+{
+    ChipLogProgress(Zcl, "DefaultResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+    ChipLogProgress(Zcl, "  CommandId: 0x%02x", commandId);
+    LogStatus(status);
+
+    GET_RESPONSE_CALLBACKS("emberAfDefaultResponseCallback");
+    if (status == EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultSuccessCallback> * cb =
+            Callback::Callback<DefaultSuccessCallback>::FromCancelable(onSuccessCallback);
+        cb->mCall(cb->mContext);
+    }
+    else
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, static_cast<uint8_t>(status));
+    }
+
+    return true;
+}
+
+bool emberAfReadAttributesResponseCallback(ClusterId clusterId, uint8_t * message, uint16_t messageLen)
+{
+    ChipLogProgress(Zcl, "ReadAttributesResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+
+    GET_RESPONSE_CALLBACKS("emberAfReadAttributesResponseCallback");
+
+    // struct readAttributeResponseRecord[]
+    while (messageLen)
+    {
+        CHECK_MESSAGE_LENGTH(2);
+        uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+        ChipLogProgress(Zcl, "  attributeId: 0x%04x", attributeId);
+
+        CHECK_MESSAGE_LENGTH(1);
+        uint8_t status = chip::Encoding::Read8(message); // zclStatus
+        LogStatus(status);
+
+        if (status == EMBER_ZCL_STATUS_SUCCESS)
+        {
+            CHECK_MESSAGE_LENGTH(1);
+            uint8_t attributeType = chip::Encoding::Read8(message);
+            ChipLogProgress(Zcl, "  attributeType: 0x%02x", attributeType);
+
+            switch (attributeType)
+            {
+            case 0x00: // nodata / No data
+            case 0x0A: // data24 / 24-bit data
+            case 0x0C: // data40 / 40-bit data
+            case 0x0D: // data48 / 48-bit data
+            case 0x0E: // data56 / 56-bit data
+            case 0x1A: // map24 / 24-bit bitmap
+            case 0x1C: // map40 / 40-bit bitmap
+            case 0x1D: // map48 / 48-bit bitmap
+            case 0x1E: // map56 / 56-bit bitmap
+            case 0x22: // uint24 / Unsigned 24-bit integer
+            case 0x24: // uint40 / Unsigned 40-bit integer
+            case 0x25: // uint48 / Unsigned 48-bit integer
+            case 0x26: // uint56 / Unsigned 56-bit integer
+            case 0x2A: // int24 / Signed 24-bit integer
+            case 0x2C: // int40 / Signed 40-bit integer
+            case 0x2D: // int48 / Signed 48-bit integer
+            case 0x2E: // int56 / Signed 56-bit integer
+            case 0x38: // semi / Semi-precision
+            case 0x39: // single / Single precision
+            case 0x3A: // double / Double precision
+            case 0x41: // octstr / Octet string
+            case 0x42: // string / Character string
+            case 0x43: // octstr16 / Long octet string
+            case 0x44: // string16 / Long character string
+            case 0x48: // array / Array
+            case 0x49: // struct / Structure
+            case 0x50: // set / Set
+            case 0x51: // bag / Bag
+            case 0xE0: // ToD / Time of day
+            {
+                ChipLogError(Zcl, "attributeType 0x%02x is not supported", attributeType);
+                Callback::Callback<DefaultFailureCallback> * cb =
+                    Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+                cb->mCall(cb->mContext, EMBER_ZCL_STATUS_INVALID_VALUE);
+                return true;
+            }
+
+            case 0x08: // data8 / 8-bit data
+            case 0x18: // map8 / 8-bit bitmap
+            case 0x20: // uint8 / Unsigned  8-bit integer
+            case 0x30: // enum8 / 8-bit enumeration
+            {
+                CHECK_MESSAGE_LENGTH(1);
+                uint8_t value = chip::Encoding::Read8(message);
+                ChipLogProgress(Zcl, "  value: 0x%02x", value);
+
+                Callback::Callback<Int8uAttributeCallback> * cb =
+                    Callback::Callback<Int8uAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x09: // data16 / 16-bit data
+            case 0x19: // map16 / 16-bit bitmap
+            case 0x21: // uint16 / Unsigned 16-bit integer
+            case 0x31: // enum16 / 16-bit enumeration
+            case 0xE8: // clusterId / Cluster ID
+            case 0xE9: // attribId / Attribute ID
+            case 0xEA: // bacOID / BACnet OID
+            case 0xF1: // key128 / 128-bit security key
+            case 0xFF: // unk / Unknown
+            {
+                CHECK_MESSAGE_LENGTH(2);
+                uint16_t value = chip::Encoding::LittleEndian::Read16(message);
+                ChipLogProgress(Zcl, "  value: 0x%04x", value);
+
+                Callback::Callback<Int16uAttributeCallback> * cb =
+                    Callback::Callback<Int16uAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x0B: // data32 / 32-bit data
+            case 0x1B: // map32 / 32-bit bitmap
+            case 0x23: // uint32 / Unsigned 32-bit integer
+            case 0xE1: // date / Date
+            case 0xE2: // UTC / UTCTime
+            {
+                CHECK_MESSAGE_LENGTH(4);
+                uint32_t value = chip::Encoding::LittleEndian::Read32(message);
+                ChipLogProgress(Zcl, "  value: 0x%08x", value);
+
+                Callback::Callback<Int32uAttributeCallback> * cb =
+                    Callback::Callback<Int32uAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x0F: // data64 / 64-bit data
+            case 0x1F: // map64 / 64-bit bitmap
+            case 0x27: // uint64 / Unsigned 64-bit integer
+            case 0xF0: // EUI64 / IEEE address
+            {
+                CHECK_MESSAGE_LENGTH(8);
+                uint64_t value = chip::Encoding::LittleEndian::Read64(message);
+                ChipLogProgress(Zcl, "  value: 0x%16x", value);
+
+                Callback::Callback<Int64uAttributeCallback> * cb =
+                    Callback::Callback<Int64uAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x10: // bool / Boolean
+            {
+                CHECK_MESSAGE_LENGTH(1);
+                uint8_t value = chip::Encoding::Read8(message);
+                ChipLogProgress(Zcl, "  value: %d", value);
+
+                Callback::Callback<BooleanAttributeCallback> * cb =
+                    Callback::Callback<BooleanAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x28: // int8 / Signed 8-bit integer
+            {
+                CHECK_MESSAGE_LENGTH(1);
+                int8_t value = chip::CastToSigned(chip::Encoding::Read8(message));
+                ChipLogProgress(Zcl, "  value: %" PRId8, value);
+
+                Callback::Callback<Int8sAttributeCallback> * cb =
+                    Callback::Callback<Int8sAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x29: // int16 / Signed 16-bit integer
+            {
+                CHECK_MESSAGE_LENGTH(2);
+                int16_t value = chip::CastToSigned(chip::Encoding::LittleEndian::Read16(message));
+                ChipLogProgress(Zcl, "  value: %" PRId16, value);
+
+                Callback::Callback<Int16sAttributeCallback> * cb =
+                    Callback::Callback<Int16sAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x2B: // int32 / Signed 32-bit integer
+            {
+                CHECK_MESSAGE_LENGTH(4);
+                int32_t value = chip::CastToSigned(chip::Encoding::LittleEndian::Read32(message));
+                ChipLogProgress(Zcl, "  value: %" PRId32, value);
+
+                Callback::Callback<Int32sAttributeCallback> * cb =
+                    Callback::Callback<Int32sAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x2F: // int64 / Signed 64-bit integer
+            {
+                CHECK_MESSAGE_LENGTH(8);
+                int64_t value = chip::CastToSigned(chip::Encoding::LittleEndian::Read64(message));
+                ChipLogProgress(Zcl, "  value: %" PRId64, value);
+
+                Callback::Callback<Int64sAttributeCallback> * cb =
+                    Callback::Callback<Int64sAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+            }
+        }
+        else
+        {
+            Callback::Callback<DefaultFailureCallback> * cb =
+                Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+            cb->mCall(cb->mContext, status);
+        }
+
+        // The current code is written matching the current API where there is a single attribute read
+        // per read command. So if multiple attributes are read at the same time, something is wrong
+        // somewhere.
+        if (messageLen)
+        {
+            ChipLogError(Zcl, "Multiple attributes read at the same time. Something went wrong.");
+            break;
+        }
+    }
+
+    return true;
+}
+
+bool emberAfWriteAttributesResponseCallback(ClusterId clusterId, uint8_t * message, uint16_t messageLen)
+{
+    ChipLogProgress(Zcl, "WriteAttributesResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+
+    GET_RESPONSE_CALLBACKS("emberAfWriteAttributesResponseCallback");
+
+    // struct writeAttributeResponseRecord[]
+    while (messageLen)
+    {
+        CHECK_MESSAGE_LENGTH(1);
+        uint8_t status = chip::Encoding::Read8(message); // zclStatus
+        LogStatus(status);
+
+        if (status == EMBER_ZCL_STATUS_SUCCESS)
+        {
+            Callback::Callback<DefaultSuccessCallback> * cb =
+                Callback::Callback<DefaultSuccessCallback>::FromCancelable(onSuccessCallback);
+            cb->mCall(cb->mContext);
+        }
+        else
+        {
+            CHECK_MESSAGE_LENGTH(2);
+            uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+            ChipLogProgress(Zcl, "  attributeId: 0x%04x", attributeId);
+
+            Callback::Callback<DefaultFailureCallback> * cb =
+                Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+            cb->mCall(cb->mContext, status);
+        }
+
+        // The current code is written matching the current API where there is a single attribute written
+        // per write command. So if multiple attributes are written at the same time, something is wrong
+        // somewhere.
+        if (messageLen)
+        {
+            ChipLogError(Zcl, "Multiple attributes written at the same time. Something went wrong.");
+            break;
+        }
+    }
+
+    return true;
+}
+
+bool emberAfConfigureReportingResponseCallback(ClusterId clusterId, uint8_t * message, uint16_t messageLen)
+{
+    ChipLogProgress(Zcl, "ConfigureReportingResponseCallback:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+
+    GET_RESPONSE_CALLBACKS("emberAfConfigureReportingResponseCallback");
+
+    // struct configureReportingResponseRecord[]
+    while (messageLen)
+    {
+        CHECK_MESSAGE_LENGTH(1);
+        uint8_t status = chip::Encoding::Read8(message); // zclStatus
+        LogStatus(status);
+
+        if (status == EMBER_ZCL_STATUS_SUCCESS)
+        {
+            Callback::Callback<DefaultSuccessCallback> * cb =
+                Callback::Callback<DefaultSuccessCallback>::FromCancelable(onSuccessCallback);
+            cb->mCall(cb->mContext);
+        }
+        else
+        {
+            CHECK_MESSAGE_LENGTH(1);
+            uint8_t direction = chip::Encoding::Read8(message); // reportingRole
+            ChipLogProgress(Zcl, "  direction: 0x%02x", direction);
+
+            CHECK_MESSAGE_LENGTH(2);
+            uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+            ChipLogProgress(Zcl, "  attributeId: 0x%04x", attributeId);
+
+            Callback::Callback<DefaultFailureCallback> * cb =
+                Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+            cb->mCall(cb->mContext, status);
+        }
+
+        // The current code is written matching the current API where there is a single attribute report
+        // per configure command. So if multiple attributes are configured at the same time, something is wrong
+        // somewhere.
+        if (messageLen)
+        {
+            ChipLogError(Zcl, "Multiple attributes reports configured at the same time. Something went wrong.");
+            break;
+        }
+    }
+
+    return true;
+}
+
+bool emberAfReadReportingConfigurationResponseCallback(chip::ClusterId clusterId, uint8_t * message, uint16_t messageLen)
+{
+    ChipLogProgress(Zcl, "ReadReportingConfigurationResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+
+    GET_RESPONSE_CALLBACKS("emberAfReadReportingConfigurationResponseCallback");
+
+    // struct readReportingConfigurationResponseRecord[]
+    while (messageLen)
+    {
+        CHECK_MESSAGE_LENGTH(1);
+        uint8_t direction = chip::Encoding::Read8(message); // reportingRole
+        ChipLogProgress(Zcl, "  direction: 0x%02x", direction);
+
+        CHECK_MESSAGE_LENGTH(2);
+        uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+        ChipLogProgress(Zcl, "  attributeId: 0x%04x", attributeId);
+
+        if (direction == EMBER_ZCL_REPORTING_DIRECTION_REPORTED)
+        {
+            CHECK_MESSAGE_LENGTH(1);
+            uint8_t attributeType = chip::Encoding::Read8(message); // zclType
+            ChipLogProgress(Zcl, "  attributeType: 0x%02x", attributeType);
+
+            CHECK_MESSAGE_LENGTH(2);
+            uint16_t minimumReportingInterval = chip::Encoding::LittleEndian::Read16(message); // uint16
+            ChipLogProgress(Zcl, "  minimumReportingInterval: %" PRIu16, minimumReportingInterval);
+
+            CHECK_MESSAGE_LENGTH(2);
+            uint16_t maximumReportingInterval = chip::Encoding::LittleEndian::Read16(message); // uint16
+            ChipLogProgress(Zcl, "  maximumReportingInterval: %" PRIu16, maximumReportingInterval);
+
+            // FIXME: unk is not supported yet.
+
+            Callback::Callback<ReadReportingConfigurationReportedCallback> * cb =
+                Callback::Callback<ReadReportingConfigurationReportedCallback>::FromCancelable(onSuccessCallback);
+            cb->mCall(cb->mContext, minimumReportingInterval, maximumReportingInterval);
+        }
+        else
+        {
+            CHECK_MESSAGE_LENGTH(2);
+            uint16_t timeout = chip::Encoding::LittleEndian::Read16(message); // uint16
+            ChipLogProgress(Zcl, "  timeout: %" PRIu16, timeout);
+
+            Callback::Callback<ReadReportingConfigurationReceivedCallback> * cb =
+                Callback::Callback<ReadReportingConfigurationReceivedCallback>::FromCancelable(onSuccessCallback);
+            cb->mCall(cb->mContext, timeout);
+        }
+    }
+
+    return true;
+}
+
+bool emberAfDiscoverAttributesResponseCallback(ClusterId clusterId, bool discoveryComplete, uint8_t * message, uint16_t messageLen,
+                                               bool extended)
+{
+    ChipLogProgress(Zcl, "DiscoverAttributesResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+    ChipLogProgress(Zcl, "  discoveryComplete: %d", discoveryComplete);
+    ChipLogProgress(Zcl, "  extended: %d", extended);
+
+    GET_RESPONSE_CALLBACKS("emberAfDiscoverAttributesCallback");
+
+    // struct discoverAttributesResponseRecord[]
+    while (messageLen)
+    {
+        CHECK_MESSAGE_LENGTH(2);
+        uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+        ChipLogProgress(Zcl, "  attributeId: 0x%04x", attributeId);
+
+        CHECK_MESSAGE_LENGTH(1);
+        uint8_t attributeType = chip::Encoding::Read8(message); // zclType
+        ChipLogProgress(Zcl, "  attributeType: 0x%02x", attributeType);
+    }
+
+    Callback::Callback<DefaultSuccessCallback> * cb = Callback::Callback<DefaultSuccessCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfDiscoverCommandsGeneratedResponseCallback(ClusterId clusterId, uint16_t manufacturerCode, bool discoveryComplete,
+                                                      CommandId * commandIds, uint16_t commandIdCount)
+{
+    ChipLogProgress(Zcl, "DiscoverCommandsGeneratedResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+    ChipLogProgress(Zcl, "  manufacturerCode: 0x%04x", manufacturerCode);
+    ChipLogProgress(Zcl, "  discoveryComplete: %d", discoveryComplete);
+    ChipLogProgress(Zcl, "  commandIdCount: %" PRIu16, commandIdCount);
+
+    for (uint16_t i = 0; i < commandIdCount; i++)
+    {
+        ChipLogProgress(Zcl, "  commandId: 0x%02x", commandIds++);
+    }
+
+    GET_RESPONSE_CALLBACKS("emberAfDiscoverCommandsGeneratedResponseCallback");
+    Callback::Callback<DefaultSuccessCallback> * cb = Callback::Callback<DefaultSuccessCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfDiscoverCommandsReceivedResponseCallback(ClusterId clusterId, uint16_t manufacturerCode, bool discoveryComplete,
+                                                     CommandId * commandIds, uint16_t commandIdCount)
+{
+    ChipLogProgress(Zcl, "DiscoverCommandsReceivedResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+    ChipLogProgress(Zcl, "  manufacturerCode: 0x%04x", manufacturerCode);
+    ChipLogProgress(Zcl, "  discoveryComplete: %d", discoveryComplete);
+    ChipLogProgress(Zcl, "  commandIdCount: %" PRIu16, commandIdCount);
+
+    for (uint16_t i = 0; i < commandIdCount; i++)
+    {
+        ChipLogProgress(Zcl, "  commandId: 0x%02x", commandIds++);
+    }
+
+    GET_RESPONSE_CALLBACKS("emberAfDiscoverCommandsGeneratedResponseCallback");
+    Callback::Callback<DefaultSuccessCallback> * cb = Callback::Callback<DefaultSuccessCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfReportAttributesCallback(ClusterId clusterId, uint8_t * message, uint16_t messageLen)
+{
+    ChipLogProgress(Zcl, "emberAfReportAttributeCallback:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+
+    NodeId sourceId = emberAfCurrentCommand()->source;
+    ChipLogProgress(Zcl, "  Source NodeId: %" PRIu64, sourceId);
+
+    EndpointId endpointId = emberAfCurrentCommand()->apsFrame->sourceEndpoint;
+    ChipLogProgress(Zcl, "  Source EndpointId: 0x%04x", endpointId);
+
+    // TODO onFailureCallback is just here because of the CHECK_MESSAGE_LENGTH macro. It needs to be removed.
+    Callback::Cancelable * onFailureCallback = nullptr;
+
+    while (messageLen)
+    {
+        CHECK_MESSAGE_LENGTH(2);
+        uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+        ChipLogProgress(Zcl, "  attributeId: 0x%04x", attributeId);
+
+        GET_REPORT_CALLBACK("emberAfReportAttributesCallback");
+
+        CHECK_MESSAGE_LENGTH(1);
+        uint8_t attributeType = chip::Encoding::Read8(message);
+        ChipLogProgress(Zcl, "  attributeType: 0x%02x", attributeType);
+
+        switch (attributeType)
+        {
+        case 0x00: // nodata / No data
+        case 0x0A: // data24 / 24-bit data
+        case 0x0C: // data40 / 40-bit data
+        case 0x0D: // data48 / 48-bit data
+        case 0x0E: // data56 / 56-bit data
+        case 0x1A: // map24 / 24-bit bitmap
+        case 0x1C: // map40 / 40-bit bitmap
+        case 0x1D: // map48 / 48-bit bitmap
+        case 0x1E: // map56 / 56-bit bitmap
+        case 0x22: // uint24 / Unsigned 24-bit integer
+        case 0x24: // uint40 / Unsigned 40-bit integer
+        case 0x25: // uint48 / Unsigned 48-bit integer
+        case 0x26: // uint56 / Unsigned 56-bit integer
+        case 0x2A: // int24 / Signed 24-bit integer
+        case 0x2C: // int40 / Signed 40-bit integer
+        case 0x2D: // int48 / Signed 48-bit integer
+        case 0x2E: // int56 / Signed 56-bit integer
+        case 0x38: // semi / Semi-precision
+        case 0x39: // single / Single precision
+        case 0x3A: // double / Double precision
+        case 0x41: // octstr / Octet string
+        case 0x42: // string / Character string
+        case 0x43: // octstr16 / Long octet string
+        case 0x44: // string16 / Long character string
+        case 0x48: // array / Array
+        case 0x49: // struct / Structure
+        case 0x50: // set / Set
+        case 0x51: // bag / Bag
+        case 0xE0: // ToD / Time of day
+        {
+            ChipLogError(Zcl, "attributeType 0x%02x is not supported", attributeType);
+            return true;
+        }
+
+        case 0x08: // data8 / 8-bit data
+        case 0x18: // map8 / 8-bit bitmap
+        case 0x20: // uint8 / Unsigned  8-bit integer
+        case 0x30: // enum8 / 8-bit enumeration
+        {
+            CHECK_MESSAGE_LENGTH(1);
+            uint8_t value = chip::Encoding::Read8(message);
+            ChipLogProgress(Zcl, "  value: 0x%02x", value);
+
+            Callback::Callback<Int8uAttributeCallback> * cb =
+                Callback::Callback<Int8uAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x09: // data16 / 16-bit data
+        case 0x19: // map16 / 16-bit bitmap
+        case 0x21: // uint16 / Unsigned 16-bit integer
+        case 0x31: // enum16 / 16-bit enumeration
+        case 0xE8: // clusterId / Cluster ID
+        case 0xE9: // attribId / Attribute ID
+        case 0xEA: // bacOID / BACnet OID
+        case 0xF1: // key128 / 128-bit security key
+        case 0xFF: // unk / Unknown
+        {
+            CHECK_MESSAGE_LENGTH(2);
+            uint16_t value = chip::Encoding::LittleEndian::Read16(message);
+            ChipLogProgress(Zcl, "  value: 0x%04x", value);
+
+            Callback::Callback<Int16uAttributeCallback> * cb =
+                Callback::Callback<Int16uAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x0B: // data32 / 32-bit data
+        case 0x1B: // map32 / 32-bit bitmap
+        case 0x23: // uint32 / Unsigned 32-bit integer
+        case 0xE1: // date / Date
+        case 0xE2: // UTC / UTCTime
+        {
+            CHECK_MESSAGE_LENGTH(4);
+            uint32_t value = chip::Encoding::LittleEndian::Read32(message);
+            ChipLogProgress(Zcl, "  value: 0x%08x", value);
+
+            Callback::Callback<Int32uAttributeCallback> * cb =
+                Callback::Callback<Int32uAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x0F: // data64 / 64-bit data
+        case 0x1F: // map64 / 64-bit bitmap
+        case 0x27: // uint64 / Unsigned 64-bit integer
+        case 0xF0: // EUI64 / IEEE address
+        {
+            CHECK_MESSAGE_LENGTH(8);
+            uint64_t value = chip::Encoding::LittleEndian::Read64(message);
+            ChipLogProgress(Zcl, "  value: 0x%16x", value);
+
+            Callback::Callback<Int64uAttributeCallback> * cb =
+                Callback::Callback<Int64uAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x10: // bool / Boolean
+        {
+            CHECK_MESSAGE_LENGTH(1);
+            uint8_t value = chip::Encoding::Read8(message);
+            ChipLogProgress(Zcl, "  value: %d", value);
+
+            Callback::Callback<BooleanAttributeCallback> * cb =
+                Callback::Callback<BooleanAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x28: // int8 / Signed 8-bit integer
+        {
+            CHECK_MESSAGE_LENGTH(1);
+            int8_t value = chip::CastToSigned(chip::Encoding::Read8(message));
+            ChipLogProgress(Zcl, "  value: %" PRId8, value);
+
+            Callback::Callback<Int8sAttributeCallback> * cb =
+                Callback::Callback<Int8sAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x29: // int16 / Signed 16-bit integer
+        {
+            CHECK_MESSAGE_LENGTH(2);
+            int16_t value = chip::CastToSigned(chip::Encoding::LittleEndian::Read16(message));
+            ChipLogProgress(Zcl, "  value: %" PRId16, value);
+
+            Callback::Callback<Int16sAttributeCallback> * cb =
+                Callback::Callback<Int16sAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x2B: // int32 / Signed 32-bit integer
+        {
+            CHECK_MESSAGE_LENGTH(4);
+            int32_t value = chip::CastToSigned(chip::Encoding::LittleEndian::Read32(message));
+            ChipLogProgress(Zcl, "  value: %" PRId32, value);
+
+            Callback::Callback<Int32sAttributeCallback> * cb =
+                Callback::Callback<Int32sAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x2F: // int64 / Signed 64-bit integer
+        {
+            CHECK_MESSAGE_LENGTH(8);
+            int64_t value = chip::CastToSigned(chip::Encoding::LittleEndian::Read64(message));
+            ChipLogProgress(Zcl, "  value: %" PRId64, value);
+
+            Callback::Callback<Int64sAttributeCallback> * cb =
+                Callback::Callback<Int64sAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+        }
+    }
+
+    return true;
+}
diff --git a/examples/temperature-measurement-app/esp32/main/gen/CHIPClientCallbacks.h b/examples/temperature-measurement-app/esp32/main/gen/CHIPClientCallbacks.h
new file mode 100644
index 0000000..14a3742
--- /dev/null
+++ b/examples/temperature-measurement-app/esp32/main/gen/CHIPClientCallbacks.h
@@ -0,0 +1,39 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+#pragma once
+
+#include <inttypes.h>
+
+// Global Response Callbacks
+typedef void (*DefaultSuccessCallback)(void * context);
+typedef void (*DefaultFailureCallback)(void * context, uint8_t status);
+typedef void (*BooleanAttributeCallback)(void * context, bool value);
+typedef void (*Int8uAttributeCallback)(void * context, uint8_t value);
+typedef void (*Int8sAttributeCallback)(void * context, int8_t value);
+typedef void (*Int16uAttributeCallback)(void * context, uint16_t value);
+typedef void (*Int16sAttributeCallback)(void * context, int16_t value);
+typedef void (*Int32uAttributeCallback)(void * context, uint32_t value);
+typedef void (*Int32sAttributeCallback)(void * context, int32_t value);
+typedef void (*Int64uAttributeCallback)(void * context, uint64_t value);
+typedef void (*Int64sAttributeCallback)(void * context, int64_t value);
+typedef void (*ReadReportingConfigurationReportedCallback)(void * context, uint16_t minInterval, uint16_t maxInterval);
+typedef void (*ReadReportingConfigurationReceivedCallback)(void * context, uint16_t timeout);
+
+// Cluster Specific Response Callbacks
diff --git a/examples/temperature-measurement-app/esp32/main/gen/CHIPClustersObjc.h b/examples/temperature-measurement-app/esp32/main/gen/CHIPClustersObjc.h
new file mode 100644
index 0000000..2e03369
--- /dev/null
+++ b/examples/temperature-measurement-app/esp32/main/gen/CHIPClustersObjc.h
@@ -0,0 +1,70 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+#ifndef CHIP_CLUSTERS_H
+#define CHIP_CLUSTERS_H
+
+#import <Foundation/Foundation.h>
+
+typedef void (^ResponseHandler)(NSError * _Nullable error, NSDictionary * _Nullable values);
+
+@class CHIPDevice;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CHIPBasic : NSObject
+
+- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
+- (BOOL)resetToFactoryDefaults:(ResponseHandler)completionHandler;
+
+- (BOOL)readAttributeZclVersion:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePowerSource:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler;
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CHIPTemperatureMeasurement : NSObject
+
+- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
+
+- (BOOL)readAttributeMeasuredValue:(ResponseHandler)completionHandler;
+- (BOOL)configureAttributeMeasuredValue:(uint16_t)minInterval
+                            maxInterval:(uint16_t)maxInterval
+                                 change:(int16_t)change
+                      completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)reportAttributeMeasuredValue:(ResponseHandler)reportHandler;
+- (BOOL)readAttributeMinMeasuredValue:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeMaxMeasuredValue:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler;
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif /* CHIP_CLUSTERS_H */
diff --git a/examples/temperature-measurement-app/esp32/main/gen/CHIPClustersObjc.mm b/examples/temperature-measurement-app/esp32/main/gen/CHIPClustersObjc.mm
new file mode 100644
index 0000000..324192e
--- /dev/null
+++ b/examples/temperature-measurement-app/esp32/main/gen/CHIPClustersObjc.mm
@@ -0,0 +1,543 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+#import <Foundation/Foundation.h>
+
+#import "CHIPDevice.h"
+#import "CHIPDevice_Internal.h"
+#import "gen/CHIPClientCallbacks.h"
+#import "gen/CHIPClustersObjc.h"
+
+#include <controller/CHIPClusters.h>
+
+using namespace ::chip;
+
+class CHIPDefaultSuccessCallbackBridge : public Callback::Callback<DefaultSuccessCallback> {
+public:
+    CHIPDefaultSuccessCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DefaultSuccessCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDefaultSuccessCallbackBridge() {};
+
+    static void CallbackFn(void * context)
+    {
+        CHIPDefaultSuccessCallbackBridge * callback = reinterpret_cast<CHIPDefaultSuccessCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, nil);
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDefaultFailureCallbackBridge : public Callback::Callback<DefaultFailureCallback> {
+public:
+    CHIPDefaultFailureCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DefaultFailureCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDefaultFailureCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint8_t status)
+    {
+        CHIPDefaultFailureCallbackBridge * callback = reinterpret_cast<CHIPDefaultFailureCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                NSError * error = [NSError errorWithDomain:@"ZCL" code:status userInfo:@ { NSLocalizedDescriptionKey : @"" }];
+                callback->mHandler(error, nil);
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPUnsupportedAttributeCallbackBridge : public Callback::Callback<DefaultSuccessCallback> {
+public:
+    CHIPUnsupportedAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DefaultSuccessCallback>(CallbackFn, this)
+    {
+    }
+
+    ~CHIPUnsupportedAttributeCallbackBridge() {};
+
+    static void CallbackFn(void * context)
+    {
+        CHIPUnsupportedAttributeCallbackBridge * callback = reinterpret_cast<CHIPUnsupportedAttributeCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                NSError * error = [NSError errorWithDomain:@"ZCL"
+                                                      code:0
+                                                  userInfo:@ { NSLocalizedDescriptionKey : @"Unsuported attribute type" }];
+                callback->mHandler(error, nil);
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPBooleanAttributeCallbackBridge : public Callback::Callback<BooleanAttributeCallback> {
+public:
+    CHIPBooleanAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
+        : Callback::Callback<BooleanAttributeCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+        , mKeepAlive(keepAlive)
+    {
+    }
+
+    ~CHIPBooleanAttributeCallbackBridge() {};
+
+    static void CallbackFn(void * context, bool value)
+    {
+        CHIPBooleanAttributeCallbackBridge * callback = reinterpret_cast<CHIPBooleanAttributeCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ { @"value" : [NSNumber numberWithBool:value] });
+                if (!callback->mKeepAlive) {
+                    callback->Cancel();
+                    delete callback;
+                }
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+    bool mKeepAlive;
+};
+
+class CHIPInt8uAttributeCallbackBridge : public Callback::Callback<Int8uAttributeCallback> {
+public:
+    CHIPInt8uAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
+        : Callback::Callback<Int8uAttributeCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+        , mKeepAlive(keepAlive)
+    {
+    }
+
+    ~CHIPInt8uAttributeCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint8_t value)
+    {
+        CHIPInt8uAttributeCallbackBridge * callback = reinterpret_cast<CHIPInt8uAttributeCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ { @"value" : [NSNumber numberWithUnsignedChar:value] });
+                if (!callback->mKeepAlive) {
+                    callback->Cancel();
+                    delete callback;
+                }
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+    bool mKeepAlive;
+};
+
+class CHIPInt8sAttributeCallbackBridge : public Callback::Callback<Int8sAttributeCallback> {
+public:
+    CHIPInt8sAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
+        : Callback::Callback<Int8sAttributeCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+        , mKeepAlive(keepAlive)
+    {
+    }
+
+    ~CHIPInt8sAttributeCallbackBridge() {};
+
+    static void CallbackFn(void * context, int8_t value)
+    {
+        CHIPInt8sAttributeCallbackBridge * callback = reinterpret_cast<CHIPInt8sAttributeCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ { @"value" : [NSNumber numberWithChar:value] });
+                if (!callback->mKeepAlive) {
+                    callback->Cancel();
+                    delete callback;
+                }
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+    bool mKeepAlive;
+};
+
+class CHIPInt16uAttributeCallbackBridge : public Callback::Callback<Int16uAttributeCallback> {
+public:
+    CHIPInt16uAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
+        : Callback::Callback<Int16uAttributeCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+        , mKeepAlive(keepAlive)
+    {
+    }
+
+    ~CHIPInt16uAttributeCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint16_t value)
+    {
+        CHIPInt16uAttributeCallbackBridge * callback = reinterpret_cast<CHIPInt16uAttributeCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ { @"value" : [NSNumber numberWithUnsignedShort:value] });
+                if (!callback->mKeepAlive) {
+                    callback->Cancel();
+                    delete callback;
+                }
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+    bool mKeepAlive;
+};
+
+class CHIPInt16sAttributeCallbackBridge : public Callback::Callback<Int16sAttributeCallback> {
+public:
+    CHIPInt16sAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
+        : Callback::Callback<Int16sAttributeCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+        , mKeepAlive(keepAlive)
+    {
+    }
+
+    ~CHIPInt16sAttributeCallbackBridge() {};
+
+    static void CallbackFn(void * context, int16_t value)
+    {
+        CHIPInt16sAttributeCallbackBridge * callback = reinterpret_cast<CHIPInt16sAttributeCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ { @"value" : [NSNumber numberWithShort:value] });
+                if (!callback->mKeepAlive) {
+                    callback->Cancel();
+                    delete callback;
+                }
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+    bool mKeepAlive;
+};
+
+@interface CHIPBasic ()
+
+@property (readonly) Controller::BasicCluster cppCluster;
+@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
+@end
+
+@implementation CHIPBasic
+
+- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(EndpointId)endpoint queue:(dispatch_queue_t)queue
+{
+    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
+
+    if (err != CHIP_NO_ERROR) {
+        return nil;
+    }
+
+    if (self = [super init]) {
+        _callbackQueue = queue;
+    }
+
+    return self;
+}
+
+- (BOOL)resetToFactoryDefaults:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ResetToFactoryDefaults(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeZclVersion:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeZclVersion(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePowerSource:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePowerSource(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+@end
+
+@interface CHIPTemperatureMeasurement ()
+
+@property (readonly) Controller::TemperatureMeasurementCluster cppCluster;
+@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
+@end
+
+@implementation CHIPTemperatureMeasurement
+
+- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(EndpointId)endpoint queue:(dispatch_queue_t)queue
+{
+    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
+
+    if (err != CHIP_NO_ERROR) {
+        return nil;
+    }
+
+    if (self = [super init]) {
+        _callbackQueue = queue;
+    }
+
+    return self;
+}
+
+- (BOOL)readAttributeMeasuredValue:(ResponseHandler)completionHandler
+{
+    CHIPInt16sAttributeCallbackBridge * onSuccess = new CHIPInt16sAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeMeasuredValue(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)configureAttributeMeasuredValue:(uint16_t)minInterval
+                            maxInterval:(uint16_t)maxInterval
+                                 change:(int16_t)change
+                      completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ConfigureAttributeMeasuredValue(
+        onSuccess->Cancel(), onFailure->Cancel(), minInterval, maxInterval, change);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)reportAttributeMeasuredValue:(ResponseHandler)reportHandler
+{
+    CHIPInt16sAttributeCallbackBridge * onReport = new CHIPInt16sAttributeCallbackBridge(reportHandler, _callbackQueue, true);
+    if (!onReport) {
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReportAttributeMeasuredValue(onReport->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onReport;
+        return NO;
+    }
+
+    return YES;
+}
+
+- (BOOL)readAttributeMinMeasuredValue:(ResponseHandler)completionHandler
+{
+    CHIPInt16sAttributeCallbackBridge * onSuccess = new CHIPInt16sAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeMinMeasuredValue(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeMaxMeasuredValue:(ResponseHandler)completionHandler
+{
+    CHIPInt16sAttributeCallbackBridge * onSuccess = new CHIPInt16sAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeMaxMeasuredValue(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+@end
diff --git a/scripts/tools/zap_generate_chip_tool.sh b/scripts/tools/zap_generate_chip_tool.sh
new file mode 100755
index 0000000..7bb81ea
--- /dev/null
+++ b/scripts/tools/zap_generate_chip_tool.sh
@@ -0,0 +1,27 @@
+#!/usr/bin/env bash
+
+#
+#    Copyright (c) 2020 Project CHIP Authors
+#
+#    Licensed under the Apache License, Version 2.0 (the "License");
+#    you may not use this file except in compliance with the License.
+#    You may obtain a copy of the License at
+#
+#        http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS,
+#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#    See the License for the specific language governing permissions and
+#    limitations under the License.
+#
+
+ZAP_TEMPLATES=$PWD/src/app/zap-templates
+cd ./third_party/zap/repo/
+node ./src-script/zap-generate.js -z "$ZAP_TEMPLATES"/zcl/zcl.json -g ../../../examples/chip-tool/templates/templates.json -i ../../../examples/chip-tool/chip-tool.zap -o ../../../
+
+# Check if clang-format is available
+if command -v clang-format &>/dev/null; then
+    clang-format -i ../../../examples/chip-tool/commands/clusters/*
+    clang-format -i ../../../examples/chip-tool/commands/reporting/*
+fi
diff --git a/scripts/tools/zap_regen_all.py b/scripts/tools/zap_regen_all.py
index 62c2e15..ce8711c 100755
--- a/scripts/tools/zap_regen_all.py
+++ b/scripts/tools/zap_regen_all.py
@@ -33,5 +33,10 @@
 
 os.system("./scripts/tools/zap_generate_chip.sh")
 
+os.system("./scripts/tools/zap_generate_chip_tool.sh")
+
 for path in Path('./examples').rglob('*.zap'):
     os.system("./scripts/tools/zap_generate.sh " + str(path))
+
+for path in Path('./src/darwin').rglob('*.zap'):
+    os.system("./scripts/tools/zap_generate.sh " + str(path))
diff --git a/src/app/chip-zcl-zpro-codec-api.h b/src/app/chip-zcl-zpro-codec-api.h
index 81cdcee..55f92ec 100644
--- a/src/app/chip-zcl-zpro-codec-api.h
+++ b/src/app/chip-zcl-zpro-codec-api.h
@@ -60,50 +60,58 @@
  * @brief
  *    Encode an BarrierControlGoToPercent command for Barrier Control server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeBarrierControlClusterBarrierControlGoToPercentCommand(chip::EndpointId destinationEndpoint,
+chip::System::PacketBufferHandle encodeBarrierControlClusterBarrierControlGoToPercentCommand(uint8_t seqNum,
+                                                                                             chip::EndpointId destinationEndpoint,
                                                                                              uint8_t percentOpen);
 
 /**
  * @brief
  *    Encode an BarrierControlStop command for Barrier Control server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeBarrierControlClusterBarrierControlStopCommand(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeBarrierControlClusterBarrierControlStopCommand(uint8_t seqNum,
+                                                                                      chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Barrier Control server discover command into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeBarrierControlClusterDiscoverAttributes(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeBarrierControlClusterDiscoverAttributes(uint8_t seqNum,
+                                                                               chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Barrier Control server read command for the barrier moving state attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeBarrierControlClusterReadBarrierMovingStateAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeBarrierControlClusterReadBarrierMovingStateAttribute(uint8_t seqNum,
+                                                                                            chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Barrier Control server read command for the barrier safety status attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeBarrierControlClusterReadBarrierSafetyStatusAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeBarrierControlClusterReadBarrierSafetyStatusAttribute(uint8_t seqNum,
+                                                                                             chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Barrier Control server read command for the barrier capabilities attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeBarrierControlClusterReadBarrierCapabilitiesAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeBarrierControlClusterReadBarrierCapabilitiesAttribute(uint8_t seqNum,
+                                                                                             chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Barrier Control server read command for the barrier position attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeBarrierControlClusterReadBarrierPositionAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeBarrierControlClusterReadBarrierPositionAttribute(uint8_t seqNum,
+                                                                                         chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Barrier Control server read command for the cluster revision attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeBarrierControlClusterReadClusterRevisionAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeBarrierControlClusterReadClusterRevisionAttribute(uint8_t seqNum,
+                                                                                         chip::EndpointId destinationEndpoint);
 
 /*----------------------------------------------------------------------------*\
 | Cluster Basic                                                       | 0x0000 |
@@ -122,37 +130,39 @@
  * @brief
  *    Encode an MfgSpecificPing command for Basic server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeBasicClusterMfgSpecificPingCommand(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeBasicClusterMfgSpecificPingCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode an ResetToFactoryDefaults command for Basic server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeBasicClusterResetToFactoryDefaultsCommand(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeBasicClusterResetToFactoryDefaultsCommand(uint8_t seqNum,
+                                                                                 chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Basic server discover command into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeBasicClusterDiscoverAttributes(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeBasicClusterDiscoverAttributes(uint8_t seqNum, chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Basic server read command for the ZCL version attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeBasicClusterReadZclVersionAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeBasicClusterReadZclVersionAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Basic server read command for the power source attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeBasicClusterReadPowerSourceAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeBasicClusterReadPowerSourceAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Basic server read command for the cluster revision attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeBasicClusterReadClusterRevisionAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeBasicClusterReadClusterRevisionAttribute(uint8_t seqNum,
+                                                                                chip::EndpointId destinationEndpoint);
 
 /*----------------------------------------------------------------------------*\
 | Cluster Binding                                                     | 0xF000 |
@@ -169,29 +179,30 @@
  * @brief
  *    Encode an Bind command for Binding server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeBindingClusterBindCommand(chip::EndpointId destinationEndpoint, chip::NodeId nodeId,
-                                                                 chip::GroupId groupId, chip::EndpointId endpointId,
-                                                                 chip::ClusterId clusterId);
+chip::System::PacketBufferHandle encodeBindingClusterBindCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint,
+                                                                 chip::NodeId nodeId, chip::GroupId groupId,
+                                                                 chip::EndpointId endpointId, chip::ClusterId clusterId);
 
 /**
  * @brief
  *    Encode an Unbind command for Binding server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeBindingClusterUnbindCommand(chip::EndpointId destinationEndpoint, chip::NodeId nodeId,
-                                                                   chip::GroupId groupId, chip::EndpointId endpointId,
-                                                                   chip::ClusterId clusterId);
+chip::System::PacketBufferHandle encodeBindingClusterUnbindCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint,
+                                                                   chip::NodeId nodeId, chip::GroupId groupId,
+                                                                   chip::EndpointId endpointId, chip::ClusterId clusterId);
 
 /**
  * @brief
  *    Encode a Binding server discover command into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeBindingClusterDiscoverAttributes(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeBindingClusterDiscoverAttributes(uint8_t seqNum, chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Binding server read command for the cluster revision attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeBindingClusterReadClusterRevisionAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeBindingClusterReadClusterRevisionAttribute(uint8_t seqNum,
+                                                                                  chip::EndpointId destinationEndpoint);
 
 /*----------------------------------------------------------------------------*\
 | Cluster ColorControl                                                | 0x0300 |
@@ -270,33 +281,32 @@
  * @brief
  *    Encode an MoveColor command for Color Control server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterMoveColorCommand(chip::EndpointId destinationEndpoint, int16_t rateX,
-                                                                           int16_t rateY, uint8_t optionsMask,
+chip::System::PacketBufferHandle encodeColorControlClusterMoveColorCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint,
+                                                                           int16_t rateX, int16_t rateY, uint8_t optionsMask,
                                                                            uint8_t optionsOverride);
 
 /**
  * @brief
  *    Encode an MoveColorTemperature command for Color Control server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterMoveColorTemperatureCommand(chip::EndpointId destinationEndpoint,
-                                                                                      uint8_t moveMode, uint16_t rate,
-                                                                                      uint16_t colorTemperatureMinimum,
-                                                                                      uint16_t colorTemperatureMaximum,
-                                                                                      uint8_t optionsMask, uint8_t optionsOverride);
+chip::System::PacketBufferHandle encodeColorControlClusterMoveColorTemperatureCommand(
+    uint8_t seqNum, chip::EndpointId destinationEndpoint, uint8_t moveMode, uint16_t rate, uint16_t colorTemperatureMinimum,
+    uint16_t colorTemperatureMaximum, uint8_t optionsMask, uint8_t optionsOverride);
 
 /**
  * @brief
  *    Encode an MoveHue command for Color Control server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterMoveHueCommand(chip::EndpointId destinationEndpoint, uint8_t moveMode,
-                                                                         uint8_t rate, uint8_t optionsMask,
+chip::System::PacketBufferHandle encodeColorControlClusterMoveHueCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint,
+                                                                         uint8_t moveMode, uint8_t rate, uint8_t optionsMask,
                                                                          uint8_t optionsOverride);
 
 /**
  * @brief
  *    Encode an MoveSaturation command for Color Control server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterMoveSaturationCommand(chip::EndpointId destinationEndpoint,
+chip::System::PacketBufferHandle encodeColorControlClusterMoveSaturationCommand(uint8_t seqNum,
+                                                                                chip::EndpointId destinationEndpoint,
                                                                                 uint8_t moveMode, uint8_t rate, uint8_t optionsMask,
                                                                                 uint8_t optionsOverride);
 
@@ -304,24 +314,26 @@
  * @brief
  *    Encode an MoveToColor command for Color Control server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterMoveToColorCommand(chip::EndpointId destinationEndpoint, uint16_t colorX,
-                                                                             uint16_t colorY, uint16_t transitionTime,
-                                                                             uint8_t optionsMask, uint8_t optionsOverride);
+chip::System::PacketBufferHandle encodeColorControlClusterMoveToColorCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint,
+                                                                             uint16_t colorX, uint16_t colorY,
+                                                                             uint16_t transitionTime, uint8_t optionsMask,
+                                                                             uint8_t optionsOverride);
 
 /**
  * @brief
  *    Encode an MoveToColorTemperature command for Color Control server into buffer including the APS frame
  */
 chip::System::PacketBufferHandle
-encodeColorControlClusterMoveToColorTemperatureCommand(chip::EndpointId destinationEndpoint, uint16_t colorTemperature,
-                                                       uint16_t transitionTime, uint8_t optionsMask, uint8_t optionsOverride);
+encodeColorControlClusterMoveToColorTemperatureCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint,
+                                                       uint16_t colorTemperature, uint16_t transitionTime, uint8_t optionsMask,
+                                                       uint8_t optionsOverride);
 
 /**
  * @brief
  *    Encode an MoveToHue command for Color Control server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterMoveToHueCommand(chip::EndpointId destinationEndpoint, uint8_t hue,
-                                                                           uint8_t direction, uint16_t transitionTime,
+chip::System::PacketBufferHandle encodeColorControlClusterMoveToHueCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint,
+                                                                           uint8_t hue, uint8_t direction, uint16_t transitionTime,
                                                                            uint8_t optionsMask, uint8_t optionsOverride);
 
 /**
@@ -329,14 +341,16 @@
  *    Encode an MoveToHueAndSaturation command for Color Control server into buffer including the APS frame
  */
 chip::System::PacketBufferHandle
-encodeColorControlClusterMoveToHueAndSaturationCommand(chip::EndpointId destinationEndpoint, uint8_t hue, uint8_t saturation,
-                                                       uint16_t transitionTime, uint8_t optionsMask, uint8_t optionsOverride);
+encodeColorControlClusterMoveToHueAndSaturationCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint, uint8_t hue,
+                                                       uint8_t saturation, uint16_t transitionTime, uint8_t optionsMask,
+                                                       uint8_t optionsOverride);
 
 /**
  * @brief
  *    Encode an MoveToSaturation command for Color Control server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterMoveToSaturationCommand(chip::EndpointId destinationEndpoint,
+chip::System::PacketBufferHandle encodeColorControlClusterMoveToSaturationCommand(uint8_t seqNum,
+                                                                                  chip::EndpointId destinationEndpoint,
                                                                                   uint8_t saturation, uint16_t transitionTime,
                                                                                   uint8_t optionsMask, uint8_t optionsOverride);
 
@@ -344,8 +358,8 @@
  * @brief
  *    Encode an StepColor command for Color Control server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterStepColorCommand(chip::EndpointId destinationEndpoint, int16_t stepX,
-                                                                           int16_t stepY, uint16_t transitionTime,
+chip::System::PacketBufferHandle encodeColorControlClusterStepColorCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint,
+                                                                           int16_t stepX, int16_t stepY, uint16_t transitionTime,
                                                                            uint8_t optionsMask, uint8_t optionsOverride);
 
 /**
@@ -353,22 +367,23 @@
  *    Encode an StepColorTemperature command for Color Control server into buffer including the APS frame
  */
 chip::System::PacketBufferHandle encodeColorControlClusterStepColorTemperatureCommand(
-    chip::EndpointId destinationEndpoint, uint8_t stepMode, uint16_t stepSize, uint16_t transitionTime,
+    uint8_t seqNum, chip::EndpointId destinationEndpoint, uint8_t stepMode, uint16_t stepSize, uint16_t transitionTime,
     uint16_t colorTemperatureMinimum, uint16_t colorTemperatureMaximum, uint8_t optionsMask, uint8_t optionsOverride);
 
 /**
  * @brief
  *    Encode an StepHue command for Color Control server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterStepHueCommand(chip::EndpointId destinationEndpoint, uint8_t stepMode,
-                                                                         uint8_t stepSize, uint8_t transitionTime,
+chip::System::PacketBufferHandle encodeColorControlClusterStepHueCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint,
+                                                                         uint8_t stepMode, uint8_t stepSize, uint8_t transitionTime,
                                                                          uint8_t optionsMask, uint8_t optionsOverride);
 
 /**
  * @brief
  *    Encode an StepSaturation command for Color Control server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterStepSaturationCommand(chip::EndpointId destinationEndpoint,
+chip::System::PacketBufferHandle encodeColorControlClusterStepSaturationCommand(uint8_t seqNum,
+                                                                                chip::EndpointId destinationEndpoint,
                                                                                 uint8_t stepMode, uint8_t stepSize,
                                                                                 uint8_t transitionTime, uint8_t optionsMask,
                                                                                 uint8_t optionsOverride);
@@ -377,426 +392,484 @@
  * @brief
  *    Encode an StopMoveStep command for Color Control server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterStopMoveStepCommand(chip::EndpointId destinationEndpoint,
+chip::System::PacketBufferHandle encodeColorControlClusterStopMoveStepCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint,
                                                                               uint8_t optionsMask, uint8_t optionsOverride);
 
 /**
  * @brief
  *    Encode a Color Control server discover command into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterDiscoverAttributes(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeColorControlClusterDiscoverAttributes(uint8_t seqNum, chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Color Control server read command for the current hue attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReadCurrentHueAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeColorControlClusterReadCurrentHueAttribute(uint8_t seqNum,
+                                                                                  chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
- *    Encode a Color Control server report command for the current hue attribute into buffer including the APS frame
+ *    Encode a Color Control server configure report command for the current hue attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReportCurrentHueAttribute(chip::EndpointId destinationEndpoint,
-                                                                                    uint16_t minInterval, uint16_t maxInterval,
-                                                                                    uint8_t change);
+chip::System::PacketBufferHandle encodeColorControlClusterConfigureCurrentHueAttribute(uint8_t seqNum,
+                                                                                       chip::EndpointId destinationEndpoint,
+                                                                                       uint16_t minInterval, uint16_t maxInterval,
+                                                                                       uint8_t change);
 
 /**
  * @brief
  *    Encode a Color Control server read command for the current saturation attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReadCurrentSaturationAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeColorControlClusterReadCurrentSaturationAttribute(uint8_t seqNum,
+                                                                                         chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
- *    Encode a Color Control server report command for the current saturation attribute into buffer including the APS frame
+ *    Encode a Color Control server configure report command for the current saturation attribute into buffer including the APS
+ * frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReportCurrentSaturationAttribute(chip::EndpointId destinationEndpoint,
-                                                                                           uint16_t minInterval,
-                                                                                           uint16_t maxInterval, uint8_t change);
+chip::System::PacketBufferHandle encodeColorControlClusterConfigureCurrentSaturationAttribute(uint8_t seqNum,
+                                                                                              chip::EndpointId destinationEndpoint,
+                                                                                              uint16_t minInterval,
+                                                                                              uint16_t maxInterval, uint8_t change);
 
 /**
  * @brief
  *    Encode a Color Control server read command for the remaining time attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReadRemainingTimeAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeColorControlClusterReadRemainingTimeAttribute(uint8_t seqNum,
+                                                                                     chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Color Control server read command for the current x attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReadCurrentXAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeColorControlClusterReadCurrentXAttribute(uint8_t seqNum,
+                                                                                chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
- *    Encode a Color Control server report command for the current x attribute into buffer including the APS frame
+ *    Encode a Color Control server configure report command for the current x attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReportCurrentXAttribute(chip::EndpointId destinationEndpoint,
-                                                                                  uint16_t minInterval, uint16_t maxInterval,
-                                                                                  uint16_t change);
+chip::System::PacketBufferHandle encodeColorControlClusterConfigureCurrentXAttribute(uint8_t seqNum,
+                                                                                     chip::EndpointId destinationEndpoint,
+                                                                                     uint16_t minInterval, uint16_t maxInterval,
+                                                                                     uint16_t change);
 
 /**
  * @brief
  *    Encode a Color Control server read command for the current y attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReadCurrentYAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeColorControlClusterReadCurrentYAttribute(uint8_t seqNum,
+                                                                                chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
- *    Encode a Color Control server report command for the current y attribute into buffer including the APS frame
+ *    Encode a Color Control server configure report command for the current y attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReportCurrentYAttribute(chip::EndpointId destinationEndpoint,
-                                                                                  uint16_t minInterval, uint16_t maxInterval,
-                                                                                  uint16_t change);
+chip::System::PacketBufferHandle encodeColorControlClusterConfigureCurrentYAttribute(uint8_t seqNum,
+                                                                                     chip::EndpointId destinationEndpoint,
+                                                                                     uint16_t minInterval, uint16_t maxInterval,
+                                                                                     uint16_t change);
 
 /**
  * @brief
  *    Encode a Color Control server read command for the drift compensation attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReadDriftCompensationAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeColorControlClusterReadDriftCompensationAttribute(uint8_t seqNum,
+                                                                                         chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Color Control server read command for the compensation text attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReadCompensationTextAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeColorControlClusterReadCompensationTextAttribute(uint8_t seqNum,
+                                                                                        chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Color Control server read command for the color temperature attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReadColorTemperatureAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeColorControlClusterReadColorTemperatureAttribute(uint8_t seqNum,
+                                                                                        chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
- *    Encode a Color Control server report command for the color temperature attribute into buffer including the APS frame
+ *    Encode a Color Control server configure report command for the color temperature attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReportColorTemperatureAttribute(chip::EndpointId destinationEndpoint,
-                                                                                          uint16_t minInterval,
-                                                                                          uint16_t maxInterval, uint16_t change);
+chip::System::PacketBufferHandle encodeColorControlClusterConfigureColorTemperatureAttribute(uint8_t seqNum,
+                                                                                             chip::EndpointId destinationEndpoint,
+                                                                                             uint16_t minInterval,
+                                                                                             uint16_t maxInterval, uint16_t change);
 
 /**
  * @brief
  *    Encode a Color Control server read command for the color mode attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReadColorModeAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeColorControlClusterReadColorModeAttribute(uint8_t seqNum,
+                                                                                 chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Color Control server read command for the color control options attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReadColorControlOptionsAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeColorControlClusterReadColorControlOptionsAttribute(uint8_t seqNum,
+                                                                                           chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Color Control server write command for the color control options attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterWriteColorControlOptionsAttribute(chip::EndpointId destinationEndpoint,
+chip::System::PacketBufferHandle encodeColorControlClusterWriteColorControlOptionsAttribute(uint8_t seqNum,
+                                                                                            chip::EndpointId destinationEndpoint,
                                                                                             uint8_t colorControlOptions);
 
 /**
  * @brief
  *    Encode a Color Control server read command for the number of primaries attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReadNumberOfPrimariesAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeColorControlClusterReadNumberOfPrimariesAttribute(uint8_t seqNum,
+                                                                                         chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Color Control server read command for the primary 1 x attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReadPrimary1XAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeColorControlClusterReadPrimary1XAttribute(uint8_t seqNum,
+                                                                                 chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Color Control server read command for the primary 1 y attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReadPrimary1YAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeColorControlClusterReadPrimary1YAttribute(uint8_t seqNum,
+                                                                                 chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Color Control server read command for the primary 1 intensity attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReadPrimary1IntensityAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeColorControlClusterReadPrimary1IntensityAttribute(uint8_t seqNum,
+                                                                                         chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Color Control server read command for the primary 2 x attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReadPrimary2XAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeColorControlClusterReadPrimary2XAttribute(uint8_t seqNum,
+                                                                                 chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Color Control server read command for the primary 2 y attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReadPrimary2YAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeColorControlClusterReadPrimary2YAttribute(uint8_t seqNum,
+                                                                                 chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Color Control server read command for the primary 2 intensity attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReadPrimary2IntensityAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeColorControlClusterReadPrimary2IntensityAttribute(uint8_t seqNum,
+                                                                                         chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Color Control server read command for the primary 3 x attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReadPrimary3XAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeColorControlClusterReadPrimary3XAttribute(uint8_t seqNum,
+                                                                                 chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Color Control server read command for the primary 3 y attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReadPrimary3YAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeColorControlClusterReadPrimary3YAttribute(uint8_t seqNum,
+                                                                                 chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Color Control server read command for the primary 3 intensity attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReadPrimary3IntensityAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeColorControlClusterReadPrimary3IntensityAttribute(uint8_t seqNum,
+                                                                                         chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Color Control server read command for the primary 4 x attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReadPrimary4XAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeColorControlClusterReadPrimary4XAttribute(uint8_t seqNum,
+                                                                                 chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Color Control server read command for the primary 4 y attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReadPrimary4YAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeColorControlClusterReadPrimary4YAttribute(uint8_t seqNum,
+                                                                                 chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Color Control server read command for the primary 4 intensity attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReadPrimary4IntensityAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeColorControlClusterReadPrimary4IntensityAttribute(uint8_t seqNum,
+                                                                                         chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Color Control server read command for the primary 5 x attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReadPrimary5XAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeColorControlClusterReadPrimary5XAttribute(uint8_t seqNum,
+                                                                                 chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Color Control server read command for the primary 5 y attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReadPrimary5YAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeColorControlClusterReadPrimary5YAttribute(uint8_t seqNum,
+                                                                                 chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Color Control server read command for the primary 5 intensity attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReadPrimary5IntensityAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeColorControlClusterReadPrimary5IntensityAttribute(uint8_t seqNum,
+                                                                                         chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Color Control server read command for the primary 6 x attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReadPrimary6XAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeColorControlClusterReadPrimary6XAttribute(uint8_t seqNum,
+                                                                                 chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Color Control server read command for the primary 6 y attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReadPrimary6YAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeColorControlClusterReadPrimary6YAttribute(uint8_t seqNum,
+                                                                                 chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Color Control server read command for the primary 6 intensity attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReadPrimary6IntensityAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeColorControlClusterReadPrimary6IntensityAttribute(uint8_t seqNum,
+                                                                                         chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Color Control server read command for the white point x attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReadWhitePointXAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeColorControlClusterReadWhitePointXAttribute(uint8_t seqNum,
+                                                                                   chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Color Control server write command for the white point x attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterWriteWhitePointXAttribute(chip::EndpointId destinationEndpoint,
-                                                                                    uint16_t whitePointX);
+chip::System::PacketBufferHandle
+encodeColorControlClusterWriteWhitePointXAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint, uint16_t whitePointX);
 
 /**
  * @brief
  *    Encode a Color Control server read command for the white point y attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReadWhitePointYAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeColorControlClusterReadWhitePointYAttribute(uint8_t seqNum,
+                                                                                   chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Color Control server write command for the white point y attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterWriteWhitePointYAttribute(chip::EndpointId destinationEndpoint,
-                                                                                    uint16_t whitePointY);
+chip::System::PacketBufferHandle
+encodeColorControlClusterWriteWhitePointYAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint, uint16_t whitePointY);
 
 /**
  * @brief
  *    Encode a Color Control server read command for the color point r x attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReadColorPointRXAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeColorControlClusterReadColorPointRXAttribute(uint8_t seqNum,
+                                                                                    chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Color Control server write command for the color point r x attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterWriteColorPointRXAttribute(chip::EndpointId destinationEndpoint,
-                                                                                     uint16_t colorPointRX);
+chip::System::PacketBufferHandle
+encodeColorControlClusterWriteColorPointRXAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint, uint16_t colorPointRX);
 
 /**
  * @brief
  *    Encode a Color Control server read command for the color point r y attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReadColorPointRYAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeColorControlClusterReadColorPointRYAttribute(uint8_t seqNum,
+                                                                                    chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Color Control server write command for the color point r y attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterWriteColorPointRYAttribute(chip::EndpointId destinationEndpoint,
-                                                                                     uint16_t colorPointRY);
+chip::System::PacketBufferHandle
+encodeColorControlClusterWriteColorPointRYAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint, uint16_t colorPointRY);
 
 /**
  * @brief
  *    Encode a Color Control server read command for the color point r intensity attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReadColorPointRIntensityAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeColorControlClusterReadColorPointRIntensityAttribute(uint8_t seqNum,
+                                                                                            chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Color Control server write command for the color point r intensity attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterWriteColorPointRIntensityAttribute(chip::EndpointId destinationEndpoint,
+chip::System::PacketBufferHandle encodeColorControlClusterWriteColorPointRIntensityAttribute(uint8_t seqNum,
+                                                                                             chip::EndpointId destinationEndpoint,
                                                                                              uint8_t colorPointRIntensity);
 
 /**
  * @brief
  *    Encode a Color Control server read command for the color point g x attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReadColorPointGXAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeColorControlClusterReadColorPointGXAttribute(uint8_t seqNum,
+                                                                                    chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Color Control server write command for the color point g x attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterWriteColorPointGXAttribute(chip::EndpointId destinationEndpoint,
-                                                                                     uint16_t colorPointGX);
+chip::System::PacketBufferHandle
+encodeColorControlClusterWriteColorPointGXAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint, uint16_t colorPointGX);
 
 /**
  * @brief
  *    Encode a Color Control server read command for the color point g y attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReadColorPointGYAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeColorControlClusterReadColorPointGYAttribute(uint8_t seqNum,
+                                                                                    chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Color Control server write command for the color point g y attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterWriteColorPointGYAttribute(chip::EndpointId destinationEndpoint,
-                                                                                     uint16_t colorPointGY);
+chip::System::PacketBufferHandle
+encodeColorControlClusterWriteColorPointGYAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint, uint16_t colorPointGY);
 
 /**
  * @brief
  *    Encode a Color Control server read command for the color point g intensity attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReadColorPointGIntensityAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeColorControlClusterReadColorPointGIntensityAttribute(uint8_t seqNum,
+                                                                                            chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Color Control server write command for the color point g intensity attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterWriteColorPointGIntensityAttribute(chip::EndpointId destinationEndpoint,
+chip::System::PacketBufferHandle encodeColorControlClusterWriteColorPointGIntensityAttribute(uint8_t seqNum,
+                                                                                             chip::EndpointId destinationEndpoint,
                                                                                              uint8_t colorPointGIntensity);
 
 /**
  * @brief
  *    Encode a Color Control server read command for the color point b x attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReadColorPointBXAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeColorControlClusterReadColorPointBXAttribute(uint8_t seqNum,
+                                                                                    chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Color Control server write command for the color point b x attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterWriteColorPointBXAttribute(chip::EndpointId destinationEndpoint,
-                                                                                     uint16_t colorPointBX);
+chip::System::PacketBufferHandle
+encodeColorControlClusterWriteColorPointBXAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint, uint16_t colorPointBX);
 
 /**
  * @brief
  *    Encode a Color Control server read command for the color point b y attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReadColorPointBYAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeColorControlClusterReadColorPointBYAttribute(uint8_t seqNum,
+                                                                                    chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Color Control server write command for the color point b y attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterWriteColorPointBYAttribute(chip::EndpointId destinationEndpoint,
-                                                                                     uint16_t colorPointBY);
+chip::System::PacketBufferHandle
+encodeColorControlClusterWriteColorPointBYAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint, uint16_t colorPointBY);
 
 /**
  * @brief
  *    Encode a Color Control server read command for the color point b intensity attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReadColorPointBIntensityAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeColorControlClusterReadColorPointBIntensityAttribute(uint8_t seqNum,
+                                                                                            chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Color Control server write command for the color point b intensity attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterWriteColorPointBIntensityAttribute(chip::EndpointId destinationEndpoint,
+chip::System::PacketBufferHandle encodeColorControlClusterWriteColorPointBIntensityAttribute(uint8_t seqNum,
+                                                                                             chip::EndpointId destinationEndpoint,
                                                                                              uint8_t colorPointBIntensity);
 
 /**
  * @brief
  *    Encode a Color Control server read command for the enhanced current hue attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReadEnhancedCurrentHueAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeColorControlClusterReadEnhancedCurrentHueAttribute(uint8_t seqNum,
+                                                                                          chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Color Control server read command for the enhanced color mode attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReadEnhancedColorModeAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeColorControlClusterReadEnhancedColorModeAttribute(uint8_t seqNum,
+                                                                                         chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Color Control server read command for the color loop active attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReadColorLoopActiveAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeColorControlClusterReadColorLoopActiveAttribute(uint8_t seqNum,
+                                                                                       chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Color Control server read command for the color loop direction attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReadColorLoopDirectionAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeColorControlClusterReadColorLoopDirectionAttribute(uint8_t seqNum,
+                                                                                          chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Color Control server read command for the color loop time attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReadColorLoopTimeAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeColorControlClusterReadColorLoopTimeAttribute(uint8_t seqNum,
+                                                                                     chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Color Control server read command for the color capabilities attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReadColorCapabilitiesAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeColorControlClusterReadColorCapabilitiesAttribute(uint8_t seqNum,
+                                                                                         chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Color Control server read command for the color temp physical min attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReadColorTempPhysicalMinAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeColorControlClusterReadColorTempPhysicalMinAttribute(uint8_t seqNum,
+                                                                                            chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Color Control server read command for the color temp physical max attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReadColorTempPhysicalMaxAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeColorControlClusterReadColorTempPhysicalMaxAttribute(uint8_t seqNum,
+                                                                                            chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
@@ -804,7 +877,7 @@
  * APS frame
  */
 chip::System::PacketBufferHandle
-encodeColorControlClusterReadCoupleColorTempToLevelMinMiredsAttribute(chip::EndpointId destinationEndpoint);
+encodeColorControlClusterReadCoupleColorTempToLevelMinMiredsAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
@@ -812,7 +885,7 @@
  * frame
  */
 chip::System::PacketBufferHandle
-encodeColorControlClusterReadStartUpColorTemperatureMiredsAttribute(chip::EndpointId destinationEndpoint);
+encodeColorControlClusterReadStartUpColorTemperatureMiredsAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
@@ -820,14 +893,15 @@
  * frame
  */
 chip::System::PacketBufferHandle
-encodeColorControlClusterWriteStartUpColorTemperatureMiredsAttribute(chip::EndpointId destinationEndpoint,
+encodeColorControlClusterWriteStartUpColorTemperatureMiredsAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint,
                                                                      uint16_t startUpColorTemperatureMireds);
 
 /**
  * @brief
  *    Encode a Color Control server read command for the cluster revision attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeColorControlClusterReadClusterRevisionAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeColorControlClusterReadClusterRevisionAttribute(uint8_t seqNum,
+                                                                                       chip::EndpointId destinationEndpoint);
 
 /*----------------------------------------------------------------------------*\
 | Cluster DoorLock                                                    | 0x0101 |
@@ -868,143 +942,155 @@
  * @brief
  *    Encode an ClearAllPins command for Door Lock server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeDoorLockClusterClearAllPinsCommand(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeDoorLockClusterClearAllPinsCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode an ClearAllRfids command for Door Lock server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeDoorLockClusterClearAllRfidsCommand(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeDoorLockClusterClearAllRfidsCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode an ClearHolidaySchedule command for Door Lock server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeDoorLockClusterClearHolidayScheduleCommand(chip::EndpointId destinationEndpoint,
-                                                                                  uint8_t scheduleId);
+chip::System::PacketBufferHandle
+encodeDoorLockClusterClearHolidayScheduleCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint, uint8_t scheduleId);
 
 /**
  * @brief
  *    Encode an ClearPin command for Door Lock server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeDoorLockClusterClearPinCommand(chip::EndpointId destinationEndpoint, uint16_t userId);
+chip::System::PacketBufferHandle encodeDoorLockClusterClearPinCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint,
+                                                                      uint16_t userId);
 
 /**
  * @brief
  *    Encode an ClearRfid command for Door Lock server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeDoorLockClusterClearRfidCommand(chip::EndpointId destinationEndpoint, uint16_t userId);
+chip::System::PacketBufferHandle encodeDoorLockClusterClearRfidCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint,
+                                                                       uint16_t userId);
 
 /**
  * @brief
  *    Encode an ClearWeekdaySchedule command for Door Lock server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeDoorLockClusterClearWeekdayScheduleCommand(chip::EndpointId destinationEndpoint,
+chip::System::PacketBufferHandle encodeDoorLockClusterClearWeekdayScheduleCommand(uint8_t seqNum,
+                                                                                  chip::EndpointId destinationEndpoint,
                                                                                   uint8_t scheduleId, uint16_t userId);
 
 /**
  * @brief
  *    Encode an ClearYeardaySchedule command for Door Lock server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeDoorLockClusterClearYeardayScheduleCommand(chip::EndpointId destinationEndpoint,
+chip::System::PacketBufferHandle encodeDoorLockClusterClearYeardayScheduleCommand(uint8_t seqNum,
+                                                                                  chip::EndpointId destinationEndpoint,
                                                                                   uint8_t scheduleId, uint16_t userId);
 
 /**
  * @brief
  *    Encode an GetHolidaySchedule command for Door Lock server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeDoorLockClusterGetHolidayScheduleCommand(chip::EndpointId destinationEndpoint,
-                                                                                uint8_t scheduleId);
+chip::System::PacketBufferHandle
+encodeDoorLockClusterGetHolidayScheduleCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint, uint8_t scheduleId);
 
 /**
  * @brief
  *    Encode an GetLogRecord command for Door Lock server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeDoorLockClusterGetLogRecordCommand(chip::EndpointId destinationEndpoint, uint16_t logIndex);
+chip::System::PacketBufferHandle encodeDoorLockClusterGetLogRecordCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint,
+                                                                          uint16_t logIndex);
 
 /**
  * @brief
  *    Encode an GetPin command for Door Lock server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeDoorLockClusterGetPinCommand(chip::EndpointId destinationEndpoint, uint16_t userId);
+chip::System::PacketBufferHandle encodeDoorLockClusterGetPinCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint,
+                                                                    uint16_t userId);
 
 /**
  * @brief
  *    Encode an GetRfid command for Door Lock server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeDoorLockClusterGetRfidCommand(chip::EndpointId destinationEndpoint, uint16_t userId);
+chip::System::PacketBufferHandle encodeDoorLockClusterGetRfidCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint,
+                                                                     uint16_t userId);
 
 /**
  * @brief
  *    Encode an GetUserType command for Door Lock server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeDoorLockClusterGetUserTypeCommand(chip::EndpointId destinationEndpoint, uint16_t userId);
+chip::System::PacketBufferHandle encodeDoorLockClusterGetUserTypeCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint,
+                                                                         uint16_t userId);
 
 /**
  * @brief
  *    Encode an GetWeekdaySchedule command for Door Lock server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeDoorLockClusterGetWeekdayScheduleCommand(chip::EndpointId destinationEndpoint,
+chip::System::PacketBufferHandle encodeDoorLockClusterGetWeekdayScheduleCommand(uint8_t seqNum,
+                                                                                chip::EndpointId destinationEndpoint,
                                                                                 uint8_t scheduleId, uint16_t userId);
 
 /**
  * @brief
  *    Encode an GetYeardaySchedule command for Door Lock server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeDoorLockClusterGetYeardayScheduleCommand(chip::EndpointId destinationEndpoint,
+chip::System::PacketBufferHandle encodeDoorLockClusterGetYeardayScheduleCommand(uint8_t seqNum,
+                                                                                chip::EndpointId destinationEndpoint,
                                                                                 uint8_t scheduleId, uint16_t userId);
 
 /**
  * @brief
  *    Encode an LockDoor command for Door Lock server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeDoorLockClusterLockDoorCommand(chip::EndpointId destinationEndpoint, char * pin);
+chip::System::PacketBufferHandle encodeDoorLockClusterLockDoorCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint,
+                                                                      char * pin);
 
 /**
  * @brief
  *    Encode an SetHolidaySchedule command for Door Lock server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeDoorLockClusterSetHolidayScheduleCommand(chip::EndpointId destinationEndpoint,
-                                                                                uint8_t scheduleId, uint32_t localStartTime,
-                                                                                uint32_t localEndTime,
-                                                                                uint8_t operatingModeDuringHoliday);
+chip::System::PacketBufferHandle
+encodeDoorLockClusterSetHolidayScheduleCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint, uint8_t scheduleId,
+                                               uint32_t localStartTime, uint32_t localEndTime, uint8_t operatingModeDuringHoliday);
 
 /**
  * @brief
  *    Encode an SetPin command for Door Lock server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeDoorLockClusterSetPinCommand(chip::EndpointId destinationEndpoint, uint16_t userId,
-                                                                    uint8_t userStatus, uint8_t userType, char * pin);
+chip::System::PacketBufferHandle encodeDoorLockClusterSetPinCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint,
+                                                                    uint16_t userId, uint8_t userStatus, uint8_t userType,
+                                                                    char * pin);
 
 /**
  * @brief
  *    Encode an SetRfid command for Door Lock server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeDoorLockClusterSetRfidCommand(chip::EndpointId destinationEndpoint, uint16_t userId,
-                                                                     uint8_t userStatus, uint8_t userType, char * id);
+chip::System::PacketBufferHandle encodeDoorLockClusterSetRfidCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint,
+                                                                     uint16_t userId, uint8_t userStatus, uint8_t userType,
+                                                                     char * id);
 
 /**
  * @brief
  *    Encode an SetUserType command for Door Lock server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeDoorLockClusterSetUserTypeCommand(chip::EndpointId destinationEndpoint, uint16_t userId,
-                                                                         uint8_t userType);
+chip::System::PacketBufferHandle encodeDoorLockClusterSetUserTypeCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint,
+                                                                         uint16_t userId, uint8_t userType);
 
 /**
  * @brief
  *    Encode an SetWeekdaySchedule command for Door Lock server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeDoorLockClusterSetWeekdayScheduleCommand(chip::EndpointId destinationEndpoint,
-                                                                                uint8_t scheduleId, uint16_t userId,
-                                                                                uint8_t daysMask, uint8_t startHour,
-                                                                                uint8_t startMinute, uint8_t endHour,
-                                                                                uint8_t endMinute);
+chip::System::PacketBufferHandle
+encodeDoorLockClusterSetWeekdayScheduleCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint, uint8_t scheduleId,
+                                               uint16_t userId, uint8_t daysMask, uint8_t startHour, uint8_t startMinute,
+                                               uint8_t endHour, uint8_t endMinute);
 
 /**
  * @brief
  *    Encode an SetYeardaySchedule command for Door Lock server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeDoorLockClusterSetYeardayScheduleCommand(chip::EndpointId destinationEndpoint,
+chip::System::PacketBufferHandle encodeDoorLockClusterSetYeardayScheduleCommand(uint8_t seqNum,
+                                                                                chip::EndpointId destinationEndpoint,
                                                                                 uint8_t scheduleId, uint16_t userId,
                                                                                 uint32_t localStartTime, uint32_t localEndTime);
 
@@ -1012,51 +1098,55 @@
  * @brief
  *    Encode an UnlockDoor command for Door Lock server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeDoorLockClusterUnlockDoorCommand(chip::EndpointId destinationEndpoint, char * pin);
+chip::System::PacketBufferHandle encodeDoorLockClusterUnlockDoorCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint,
+                                                                        char * pin);
 
 /**
  * @brief
  *    Encode an UnlockWithTimeout command for Door Lock server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeDoorLockClusterUnlockWithTimeoutCommand(chip::EndpointId destinationEndpoint,
+chip::System::PacketBufferHandle encodeDoorLockClusterUnlockWithTimeoutCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint,
                                                                                uint16_t timeoutInSeconds, char * pin);
 
 /**
  * @brief
  *    Encode a Door Lock server discover command into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeDoorLockClusterDiscoverAttributes(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeDoorLockClusterDiscoverAttributes(uint8_t seqNum, chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Door Lock server read command for the lock state attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeDoorLockClusterReadLockStateAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeDoorLockClusterReadLockStateAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
- *    Encode a Door Lock server report command for the lock state attribute into buffer including the APS frame
+ *    Encode a Door Lock server configure report command for the lock state attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeDoorLockClusterReportLockStateAttribute(chip::EndpointId destinationEndpoint,
-                                                                               uint16_t minInterval, uint16_t maxInterval);
+chip::System::PacketBufferHandle encodeDoorLockClusterConfigureLockStateAttribute(uint8_t seqNum,
+                                                                                  chip::EndpointId destinationEndpoint,
+                                                                                  uint16_t minInterval, uint16_t maxInterval);
 
 /**
  * @brief
  *    Encode a Door Lock server read command for the lock type attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeDoorLockClusterReadLockTypeAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeDoorLockClusterReadLockTypeAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Door Lock server read command for the actuator enabled attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeDoorLockClusterReadActuatorEnabledAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeDoorLockClusterReadActuatorEnabledAttribute(uint8_t seqNum,
+                                                                                   chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Door Lock server read command for the cluster revision attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeDoorLockClusterReadClusterRevisionAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeDoorLockClusterReadClusterRevisionAttribute(uint8_t seqNum,
+                                                                                   chip::EndpointId destinationEndpoint);
 
 /*----------------------------------------------------------------------------*\
 | Cluster Groups                                                      | 0x0004 |
@@ -1078,58 +1168,62 @@
  * @brief
  *    Encode an AddGroup command for Groups server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeGroupsClusterAddGroupCommand(chip::EndpointId destinationEndpoint, uint16_t groupId,
-                                                                    char * groupName);
+chip::System::PacketBufferHandle encodeGroupsClusterAddGroupCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint,
+                                                                    uint16_t groupId, char * groupName);
 
 /**
  * @brief
  *    Encode an AddGroupIfIdentifying command for Groups server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeGroupsClusterAddGroupIfIdentifyingCommand(chip::EndpointId destinationEndpoint,
+chip::System::PacketBufferHandle encodeGroupsClusterAddGroupIfIdentifyingCommand(uint8_t seqNum,
+                                                                                 chip::EndpointId destinationEndpoint,
                                                                                  uint16_t groupId, char * groupName);
 
 /**
  * @brief
  *    Encode an GetGroupMembership command for Groups server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeGroupsClusterGetGroupMembershipCommand(chip::EndpointId destinationEndpoint,
+chip::System::PacketBufferHandle encodeGroupsClusterGetGroupMembershipCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint,
                                                                               uint8_t groupCount, uint16_t groupList);
 
 /**
  * @brief
  *    Encode an RemoveAllGroups command for Groups server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeGroupsClusterRemoveAllGroupsCommand(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeGroupsClusterRemoveAllGroupsCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode an RemoveGroup command for Groups server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeGroupsClusterRemoveGroupCommand(chip::EndpointId destinationEndpoint, uint16_t groupId);
+chip::System::PacketBufferHandle encodeGroupsClusterRemoveGroupCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint,
+                                                                       uint16_t groupId);
 
 /**
  * @brief
  *    Encode an ViewGroup command for Groups server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeGroupsClusterViewGroupCommand(chip::EndpointId destinationEndpoint, uint16_t groupId);
+chip::System::PacketBufferHandle encodeGroupsClusterViewGroupCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint,
+                                                                     uint16_t groupId);
 
 /**
  * @brief
  *    Encode a Groups server discover command into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeGroupsClusterDiscoverAttributes(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeGroupsClusterDiscoverAttributes(uint8_t seqNum, chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Groups server read command for the name support attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeGroupsClusterReadNameSupportAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeGroupsClusterReadNameSupportAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Groups server read command for the cluster revision attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeGroupsClusterReadClusterRevisionAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeGroupsClusterReadClusterRevisionAttribute(uint8_t seqNum,
+                                                                                 chip::EndpointId destinationEndpoint);
 
 /*----------------------------------------------------------------------------*\
 | Cluster IasZone                                                     | 0x0500 |
@@ -1149,50 +1243,52 @@
  * @brief
  *    Encode a IAS Zone server discover command into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeIasZoneClusterDiscoverAttributes(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeIasZoneClusterDiscoverAttributes(uint8_t seqNum, chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a IAS Zone server read command for the zone state attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeIasZoneClusterReadZoneStateAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeIasZoneClusterReadZoneStateAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a IAS Zone server read command for the zone type attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeIasZoneClusterReadZoneTypeAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeIasZoneClusterReadZoneTypeAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a IAS Zone server read command for the zone status attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeIasZoneClusterReadZoneStatusAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeIasZoneClusterReadZoneStatusAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a IAS Zone server read command for the IAS CIE address attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeIasZoneClusterReadIasCieAddressAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeIasZoneClusterReadIasCieAddressAttribute(uint8_t seqNum,
+                                                                                chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a IAS Zone server write command for the IAS CIE address attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeIasZoneClusterWriteIasCieAddressAttribute(chip::EndpointId destinationEndpoint,
-                                                                                 uint64_t iasCieAddress);
+chip::System::PacketBufferHandle
+encodeIasZoneClusterWriteIasCieAddressAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint, uint64_t iasCieAddress);
 
 /**
  * @brief
  *    Encode a IAS Zone server read command for the Zone ID attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeIasZoneClusterReadZoneIdAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeIasZoneClusterReadZoneIdAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a IAS Zone server read command for the cluster revision attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeIasZoneClusterReadClusterRevisionAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeIasZoneClusterReadClusterRevisionAttribute(uint8_t seqNum,
+                                                                                  chip::EndpointId destinationEndpoint);
 
 /*----------------------------------------------------------------------------*\
 | Cluster Identify                                                    | 0x0003 |
@@ -1210,38 +1306,41 @@
  * @brief
  *    Encode an Identify command for Identify server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeIdentifyClusterIdentifyCommand(chip::EndpointId destinationEndpoint, uint16_t identifyTime);
+chip::System::PacketBufferHandle encodeIdentifyClusterIdentifyCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint,
+                                                                      uint16_t identifyTime);
 
 /**
  * @brief
  *    Encode an IdentifyQuery command for Identify server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeIdentifyClusterIdentifyQueryCommand(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeIdentifyClusterIdentifyQueryCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Identify server discover command into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeIdentifyClusterDiscoverAttributes(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeIdentifyClusterDiscoverAttributes(uint8_t seqNum, chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Identify server read command for the identify time attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeIdentifyClusterReadIdentifyTimeAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeIdentifyClusterReadIdentifyTimeAttribute(uint8_t seqNum,
+                                                                                chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Identify server write command for the identify time attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeIdentifyClusterWriteIdentifyTimeAttribute(chip::EndpointId destinationEndpoint,
-                                                                                 uint16_t identifyTime);
+chip::System::PacketBufferHandle
+encodeIdentifyClusterWriteIdentifyTimeAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint, uint16_t identifyTime);
 
 /**
  * @brief
  *    Encode a Identify server read command for the cluster revision attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeIdentifyClusterReadClusterRevisionAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeIdentifyClusterReadClusterRevisionAttribute(uint8_t seqNum,
+                                                                                   chip::EndpointId destinationEndpoint);
 
 /*----------------------------------------------------------------------------*\
 | Cluster LevelControl                                                | 0x0008 |
@@ -1265,44 +1364,46 @@
  * @brief
  *    Encode an Move command for Level Control server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeLevelControlClusterMoveCommand(chip::EndpointId destinationEndpoint, uint8_t moveMode,
-                                                                      uint8_t rate, uint8_t optionMask, uint8_t optionOverride);
+chip::System::PacketBufferHandle encodeLevelControlClusterMoveCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint,
+                                                                      uint8_t moveMode, uint8_t rate, uint8_t optionMask,
+                                                                      uint8_t optionOverride);
 
 /**
  * @brief
  *    Encode an MoveToLevel command for Level Control server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeLevelControlClusterMoveToLevelCommand(chip::EndpointId destinationEndpoint, uint8_t level,
-                                                                             uint16_t transitionTime, uint8_t optionMask,
-                                                                             uint8_t optionOverride);
+chip::System::PacketBufferHandle encodeLevelControlClusterMoveToLevelCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint,
+                                                                             uint8_t level, uint16_t transitionTime,
+                                                                             uint8_t optionMask, uint8_t optionOverride);
 
 /**
  * @brief
  *    Encode an MoveToLevelWithOnOff command for Level Control server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeLevelControlClusterMoveToLevelWithOnOffCommand(chip::EndpointId destinationEndpoint,
+chip::System::PacketBufferHandle encodeLevelControlClusterMoveToLevelWithOnOffCommand(uint8_t seqNum,
+                                                                                      chip::EndpointId destinationEndpoint,
                                                                                       uint8_t level, uint16_t transitionTime);
 
 /**
  * @brief
  *    Encode an MoveWithOnOff command for Level Control server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeLevelControlClusterMoveWithOnOffCommand(chip::EndpointId destinationEndpoint,
+chip::System::PacketBufferHandle encodeLevelControlClusterMoveWithOnOffCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint,
                                                                                uint8_t moveMode, uint8_t rate);
 
 /**
  * @brief
  *    Encode an Step command for Level Control server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeLevelControlClusterStepCommand(chip::EndpointId destinationEndpoint, uint8_t stepMode,
-                                                                      uint8_t stepSize, uint16_t transitionTime, uint8_t optionMask,
-                                                                      uint8_t optionOverride);
+chip::System::PacketBufferHandle encodeLevelControlClusterStepCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint,
+                                                                      uint8_t stepMode, uint8_t stepSize, uint16_t transitionTime,
+                                                                      uint8_t optionMask, uint8_t optionOverride);
 
 /**
  * @brief
  *    Encode an StepWithOnOff command for Level Control server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeLevelControlClusterStepWithOnOffCommand(chip::EndpointId destinationEndpoint,
+chip::System::PacketBufferHandle encodeLevelControlClusterStepWithOnOffCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint,
                                                                                uint8_t stepMode, uint8_t stepSize,
                                                                                uint16_t transitionTime);
 
@@ -1310,40 +1411,44 @@
  * @brief
  *    Encode an Stop command for Level Control server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeLevelControlClusterStopCommand(chip::EndpointId destinationEndpoint, uint8_t optionMask,
-                                                                      uint8_t optionOverride);
+chip::System::PacketBufferHandle encodeLevelControlClusterStopCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint,
+                                                                      uint8_t optionMask, uint8_t optionOverride);
 
 /**
  * @brief
  *    Encode an StopWithOnOff command for Level Control server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeLevelControlClusterStopWithOnOffCommand(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeLevelControlClusterStopWithOnOffCommand(uint8_t seqNum,
+                                                                               chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Level Control server discover command into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeLevelControlClusterDiscoverAttributes(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeLevelControlClusterDiscoverAttributes(uint8_t seqNum, chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Level Control server read command for the current level attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeLevelControlClusterReadCurrentLevelAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeLevelControlClusterReadCurrentLevelAttribute(uint8_t seqNum,
+                                                                                    chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
- *    Encode a Level Control server report command for the current level attribute into buffer including the APS frame
+ *    Encode a Level Control server configure report command for the current level attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeLevelControlClusterReportCurrentLevelAttribute(chip::EndpointId destinationEndpoint,
-                                                                                      uint16_t minInterval, uint16_t maxInterval,
-                                                                                      uint8_t change);
+chip::System::PacketBufferHandle encodeLevelControlClusterConfigureCurrentLevelAttribute(uint8_t seqNum,
+                                                                                         chip::EndpointId destinationEndpoint,
+                                                                                         uint16_t minInterval, uint16_t maxInterval,
+                                                                                         uint8_t change);
 
 /**
  * @brief
  *    Encode a Level Control server read command for the cluster revision attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeLevelControlClusterReadClusterRevisionAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeLevelControlClusterReadClusterRevisionAttribute(uint8_t seqNum,
+                                                                                       chip::EndpointId destinationEndpoint);
 
 /*----------------------------------------------------------------------------*\
 | Cluster OnOff                                                       | 0x0006 |
@@ -1362,44 +1467,45 @@
  * @brief
  *    Encode an Off command for On/off server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeOnOffClusterOffCommand(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeOnOffClusterOffCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode an On command for On/off server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeOnOffClusterOnCommand(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeOnOffClusterOnCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode an Toggle command for On/off server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeOnOffClusterToggleCommand(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeOnOffClusterToggleCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a On/off server discover command into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeOnOffClusterDiscoverAttributes(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeOnOffClusterDiscoverAttributes(uint8_t seqNum, chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a On/off server read command for the on/off attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeOnOffClusterReadOnOffAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeOnOffClusterReadOnOffAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
- *    Encode a On/off server report command for the on/off attribute into buffer including the APS frame
+ *    Encode a On/off server configure report command for the on/off attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeOnOffClusterReportOnOffAttribute(chip::EndpointId destinationEndpoint, uint16_t minInterval,
-                                                                        uint16_t maxInterval);
+chip::System::PacketBufferHandle encodeOnOffClusterConfigureOnOffAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint,
+                                                                           uint16_t minInterval, uint16_t maxInterval);
 
 /**
  * @brief
  *    Encode a On/off server read command for the cluster revision attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeOnOffClusterReadClusterRevisionAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeOnOffClusterReadClusterRevisionAttribute(uint8_t seqNum,
+                                                                                chip::EndpointId destinationEndpoint);
 
 /*----------------------------------------------------------------------------*\
 | Cluster Scenes                                                      | 0x0005 |
@@ -1426,92 +1532,95 @@
  * @brief
  *    Encode an AddScene command for Scenes server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeScenesClusterAddSceneCommand(chip::EndpointId destinationEndpoint, uint16_t groupId,
-                                                                    uint8_t sceneId, uint16_t transitionTime, char * sceneName,
-                                                                    chip::ClusterId clusterId, uint8_t length, uint8_t value);
+chip::System::PacketBufferHandle encodeScenesClusterAddSceneCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint,
+                                                                    uint16_t groupId, uint8_t sceneId, uint16_t transitionTime,
+                                                                    char * sceneName, chip::ClusterId clusterId, uint8_t length,
+                                                                    uint8_t value);
 
 /**
  * @brief
  *    Encode an GetSceneMembership command for Scenes server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeScenesClusterGetSceneMembershipCommand(chip::EndpointId destinationEndpoint,
+chip::System::PacketBufferHandle encodeScenesClusterGetSceneMembershipCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint,
                                                                               uint16_t groupId);
 
 /**
  * @brief
  *    Encode an RecallScene command for Scenes server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeScenesClusterRecallSceneCommand(chip::EndpointId destinationEndpoint, uint16_t groupId,
-                                                                       uint8_t sceneId, uint16_t transitionTime);
+chip::System::PacketBufferHandle encodeScenesClusterRecallSceneCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint,
+                                                                       uint16_t groupId, uint8_t sceneId, uint16_t transitionTime);
 
 /**
  * @brief
  *    Encode an RemoveAllScenes command for Scenes server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeScenesClusterRemoveAllScenesCommand(chip::EndpointId destinationEndpoint, uint16_t groupId);
+chip::System::PacketBufferHandle encodeScenesClusterRemoveAllScenesCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint,
+                                                                           uint16_t groupId);
 
 /**
  * @brief
  *    Encode an RemoveScene command for Scenes server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeScenesClusterRemoveSceneCommand(chip::EndpointId destinationEndpoint, uint16_t groupId,
-                                                                       uint8_t sceneId);
+chip::System::PacketBufferHandle encodeScenesClusterRemoveSceneCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint,
+                                                                       uint16_t groupId, uint8_t sceneId);
 
 /**
  * @brief
  *    Encode an StoreScene command for Scenes server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeScenesClusterStoreSceneCommand(chip::EndpointId destinationEndpoint, uint16_t groupId,
-                                                                      uint8_t sceneId);
+chip::System::PacketBufferHandle encodeScenesClusterStoreSceneCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint,
+                                                                      uint16_t groupId, uint8_t sceneId);
 
 /**
  * @brief
  *    Encode an ViewScene command for Scenes server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeScenesClusterViewSceneCommand(chip::EndpointId destinationEndpoint, uint16_t groupId,
-                                                                     uint8_t sceneId);
+chip::System::PacketBufferHandle encodeScenesClusterViewSceneCommand(uint8_t seqNum, chip::EndpointId destinationEndpoint,
+                                                                     uint16_t groupId, uint8_t sceneId);
 
 /**
  * @brief
  *    Encode a Scenes server discover command into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeScenesClusterDiscoverAttributes(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeScenesClusterDiscoverAttributes(uint8_t seqNum, chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Scenes server read command for the scene count attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeScenesClusterReadSceneCountAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeScenesClusterReadSceneCountAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Scenes server read command for the current scene attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeScenesClusterReadCurrentSceneAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeScenesClusterReadCurrentSceneAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Scenes server read command for the current group attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeScenesClusterReadCurrentGroupAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeScenesClusterReadCurrentGroupAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Scenes server read command for the scene valid attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeScenesClusterReadSceneValidAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeScenesClusterReadSceneValidAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Scenes server read command for the name support attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeScenesClusterReadNameSupportAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeScenesClusterReadNameSupportAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Scenes server read command for the cluster revision attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeScenesClusterReadClusterRevisionAttribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeScenesClusterReadClusterRevisionAttribute(uint8_t seqNum,
+                                                                                 chip::EndpointId destinationEndpoint);
 
 /*----------------------------------------------------------------------------*\
 | Cluster TemperatureMeasurement                                      | 0x0402 |
@@ -1529,40 +1638,42 @@
  * @brief
  *    Encode a Temperature Measurement server discover command into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encodeTemperatureMeasurementClusterDiscoverAttributes(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encodeTemperatureMeasurementClusterDiscoverAttributes(uint8_t seqNum,
+                                                                                       chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Temperature Measurement server read command for the measured value attribute into buffer including the APS frame
  */
 chip::System::PacketBufferHandle
-encodeTemperatureMeasurementClusterReadMeasuredValueAttribute(chip::EndpointId destinationEndpoint);
+encodeTemperatureMeasurementClusterReadMeasuredValueAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
- *    Encode a Temperature Measurement server report command for the measured value attribute into buffer including the APS frame
+ *    Encode a Temperature Measurement server configure report command for the measured value attribute into buffer including the
+ * APS frame
  */
 chip::System::PacketBufferHandle
-encodeTemperatureMeasurementClusterReportMeasuredValueAttribute(chip::EndpointId destinationEndpoint, uint16_t minInterval,
-                                                                uint16_t maxInterval, int16_t change);
+encodeTemperatureMeasurementClusterConfigureMeasuredValueAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint,
+                                                                   uint16_t minInterval, uint16_t maxInterval, int16_t change);
 
 /**
  * @brief
  *    Encode a Temperature Measurement server read command for the min measured value attribute into buffer including the APS frame
  */
 chip::System::PacketBufferHandle
-encodeTemperatureMeasurementClusterReadMinMeasuredValueAttribute(chip::EndpointId destinationEndpoint);
+encodeTemperatureMeasurementClusterReadMinMeasuredValueAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Temperature Measurement server read command for the max measured value attribute into buffer including the APS frame
  */
 chip::System::PacketBufferHandle
-encodeTemperatureMeasurementClusterReadMaxMeasuredValueAttribute(chip::EndpointId destinationEndpoint);
+encodeTemperatureMeasurementClusterReadMaxMeasuredValueAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint);
 
 /**
  * @brief
  *    Encode a Temperature Measurement server read command for the cluster revision attribute into buffer including the APS frame
  */
 chip::System::PacketBufferHandle
-encodeTemperatureMeasurementClusterReadClusterRevisionAttribute(chip::EndpointId destinationEndpoint);
+encodeTemperatureMeasurementClusterReadClusterRevisionAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint);
diff --git a/src/app/encoder.cpp b/src/app/encoder.cpp
index c11aa1d..3f87205 100644
--- a/src/app/encoder.cpp
+++ b/src/app/encoder.cpp
@@ -247,9 +247,6 @@
 // Pick source endpoint as 1 for now
 constexpr EndpointId kSourceEndpoint = 1;
 
-// Transaction sequence number. Just pick something for now.
-constexpr uint8_t kSeqNum = 1;
-
 /*----------------------------------------------------------------------------*\
 | Cluster BarrierControl                                              | 0x0103 |
 |------------------------------------------------------------------------------|
@@ -268,80 +265,78 @@
 /*
  * Command BarrierControlGoToPercent
  */
-PacketBufferHandle encodeBarrierControlClusterBarrierControlGoToPercentCommand(EndpointId destinationEndpoint, uint8_t percentOpen)
+PacketBufferHandle encodeBarrierControlClusterBarrierControlGoToPercentCommand(uint8_t seqNum, EndpointId destinationEndpoint,
+                                                                               uint8_t percentOpen)
 {
     COMMAND_HEADER("BarrierControlGoToPercent", BARRIER_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlClusterSpecificCommand)
-        .Put8(kSeqNum)
-        .Put8(ZCL_BARRIER_CONTROL_GO_TO_PERCENT_COMMAND_ID)
-        .Put8(percentOpen);
+    buf.Put8(kFrameControlClusterSpecificCommand).Put8(seqNum).Put8(ZCL_BARRIER_CONTROL_GO_TO_PERCENT_COMMAND_ID).Put8(percentOpen);
     COMMAND_FOOTER();
 }
 
 /*
  * Command BarrierControlStop
  */
-PacketBufferHandle encodeBarrierControlClusterBarrierControlStopCommand(EndpointId destinationEndpoint)
+PacketBufferHandle encodeBarrierControlClusterBarrierControlStopCommand(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("BarrierControlStop", BARRIER_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlClusterSpecificCommand).Put8(kSeqNum).Put8(ZCL_BARRIER_CONTROL_STOP_COMMAND_ID);
+    buf.Put8(kFrameControlClusterSpecificCommand).Put8(seqNum).Put8(ZCL_BARRIER_CONTROL_STOP_COMMAND_ID);
     COMMAND_FOOTER();
 }
 
-PacketBufferHandle encodeBarrierControlClusterDiscoverAttributes(EndpointId destinationEndpoint)
+PacketBufferHandle encodeBarrierControlClusterDiscoverAttributes(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("DiscoverBarrierControlAttributes", BARRIER_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_DISCOVER_ATTRIBUTES_COMMAND_ID).Put16(0x0000).Put8(0xFF);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_DISCOVER_ATTRIBUTES_COMMAND_ID).Put16(0x0000).Put8(0xFF);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute BarrierMovingState
  */
-PacketBufferHandle encodeBarrierControlClusterReadBarrierMovingStateAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeBarrierControlClusterReadBarrierMovingStateAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadBarrierControlBarrierMovingState", BARRIER_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0001);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0001);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute BarrierSafetyStatus
  */
-PacketBufferHandle encodeBarrierControlClusterReadBarrierSafetyStatusAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeBarrierControlClusterReadBarrierSafetyStatusAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadBarrierControlBarrierSafetyStatus", BARRIER_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0002);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0002);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute BarrierCapabilities
  */
-PacketBufferHandle encodeBarrierControlClusterReadBarrierCapabilitiesAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeBarrierControlClusterReadBarrierCapabilitiesAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadBarrierControlBarrierCapabilities", BARRIER_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0003);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0003);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute BarrierPosition
  */
-PacketBufferHandle encodeBarrierControlClusterReadBarrierPositionAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeBarrierControlClusterReadBarrierPositionAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadBarrierControlBarrierPosition", BARRIER_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x000A);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x000A);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute ClusterRevision
  */
-PacketBufferHandle encodeBarrierControlClusterReadClusterRevisionAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeBarrierControlClusterReadClusterRevisionAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadBarrierControlClusterRevision", BARRIER_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0xFFFD);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0xFFFD);
     COMMAND_FOOTER();
 }
 
@@ -361,57 +356,57 @@
 /*
  * Command MfgSpecificPing
  */
-PacketBufferHandle encodeBasicClusterMfgSpecificPingCommand(EndpointId destinationEndpoint)
+PacketBufferHandle encodeBasicClusterMfgSpecificPingCommand(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("MfgSpecificPing", BASIC_CLUSTER_ID);
-    buf.Put8(kFrameControlClusterSpecificCommand | (1u << 2)).Put16(0x1002).Put8(kSeqNum).Put8(ZCL_MFG_SPECIFIC_PING_COMMAND_ID);
+    buf.Put8(kFrameControlClusterSpecificCommand | (1u << 2)).Put16(0x1002).Put8(seqNum).Put8(ZCL_MFG_SPECIFIC_PING_COMMAND_ID);
     COMMAND_FOOTER();
 }
 
 /*
  * Command ResetToFactoryDefaults
  */
-PacketBufferHandle encodeBasicClusterResetToFactoryDefaultsCommand(EndpointId destinationEndpoint)
+PacketBufferHandle encodeBasicClusterResetToFactoryDefaultsCommand(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ResetToFactoryDefaults", BASIC_CLUSTER_ID);
-    buf.Put8(kFrameControlClusterSpecificCommand).Put8(kSeqNum).Put8(ZCL_RESET_TO_FACTORY_DEFAULTS_COMMAND_ID);
+    buf.Put8(kFrameControlClusterSpecificCommand).Put8(seqNum).Put8(ZCL_RESET_TO_FACTORY_DEFAULTS_COMMAND_ID);
     COMMAND_FOOTER();
 }
 
-PacketBufferHandle encodeBasicClusterDiscoverAttributes(EndpointId destinationEndpoint)
+PacketBufferHandle encodeBasicClusterDiscoverAttributes(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("DiscoverBasicAttributes", BASIC_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_DISCOVER_ATTRIBUTES_COMMAND_ID).Put16(0x0000).Put8(0xFF);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_DISCOVER_ATTRIBUTES_COMMAND_ID).Put16(0x0000).Put8(0xFF);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute ZclVersion
  */
-PacketBufferHandle encodeBasicClusterReadZclVersionAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeBasicClusterReadZclVersionAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadBasicZclVersion", BASIC_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0000);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0000);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute PowerSource
  */
-PacketBufferHandle encodeBasicClusterReadPowerSourceAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeBasicClusterReadPowerSourceAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadBasicPowerSource", BASIC_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0007);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0007);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute ClusterRevision
  */
-PacketBufferHandle encodeBasicClusterReadClusterRevisionAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeBasicClusterReadClusterRevisionAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadBasicClusterRevision", BASIC_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0xFFFD);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0xFFFD);
     COMMAND_FOOTER();
 }
 
@@ -429,12 +424,12 @@
 /*
  * Command Bind
  */
-PacketBufferHandle encodeBindingClusterBindCommand(EndpointId destinationEndpoint, chip::NodeId nodeId, chip::GroupId groupId,
-                                                   chip::EndpointId endpointId, chip::ClusterId clusterId)
+PacketBufferHandle encodeBindingClusterBindCommand(uint8_t seqNum, EndpointId destinationEndpoint, chip::NodeId nodeId,
+                                                   chip::GroupId groupId, chip::EndpointId endpointId, chip::ClusterId clusterId)
 {
     COMMAND_HEADER("Bind", BINDING_CLUSTER_ID);
     buf.Put8(kFrameControlClusterSpecificCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_BIND_COMMAND_ID)
         .Put64(nodeId)
         .Put16(groupId)
@@ -446,12 +441,12 @@
 /*
  * Command Unbind
  */
-PacketBufferHandle encodeBindingClusterUnbindCommand(EndpointId destinationEndpoint, chip::NodeId nodeId, chip::GroupId groupId,
-                                                     chip::EndpointId endpointId, chip::ClusterId clusterId)
+PacketBufferHandle encodeBindingClusterUnbindCommand(uint8_t seqNum, EndpointId destinationEndpoint, chip::NodeId nodeId,
+                                                     chip::GroupId groupId, chip::EndpointId endpointId, chip::ClusterId clusterId)
 {
     COMMAND_HEADER("Unbind", BINDING_CLUSTER_ID);
     buf.Put8(kFrameControlClusterSpecificCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_UNBIND_COMMAND_ID)
         .Put64(nodeId)
         .Put16(groupId)
@@ -460,20 +455,20 @@
     COMMAND_FOOTER();
 }
 
-PacketBufferHandle encodeBindingClusterDiscoverAttributes(EndpointId destinationEndpoint)
+PacketBufferHandle encodeBindingClusterDiscoverAttributes(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("DiscoverBindingAttributes", BINDING_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_DISCOVER_ATTRIBUTES_COMMAND_ID).Put16(0x0000).Put8(0xFF);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_DISCOVER_ATTRIBUTES_COMMAND_ID).Put16(0x0000).Put8(0xFF);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute ClusterRevision
  */
-PacketBufferHandle encodeBindingClusterReadClusterRevisionAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeBindingClusterReadClusterRevisionAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadBindingClusterRevision", BINDING_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0xFFFD);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0xFFFD);
     COMMAND_FOOTER();
 }
 
@@ -553,12 +548,12 @@
 /*
  * Command MoveColor
  */
-PacketBufferHandle encodeColorControlClusterMoveColorCommand(EndpointId destinationEndpoint, int16_t rateX, int16_t rateY,
-                                                             uint8_t optionsMask, uint8_t optionsOverride)
+PacketBufferHandle encodeColorControlClusterMoveColorCommand(uint8_t seqNum, EndpointId destinationEndpoint, int16_t rateX,
+                                                             int16_t rateY, uint8_t optionsMask, uint8_t optionsOverride)
 {
     COMMAND_HEADER("MoveColor", COLOR_CONTROL_CLUSTER_ID);
     buf.Put8(kFrameControlClusterSpecificCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_MOVE_COLOR_COMMAND_ID)
         .Put16(static_cast<uint16_t>(rateX))
         .Put16(static_cast<uint16_t>(rateY))
@@ -570,14 +565,15 @@
 /*
  * Command MoveColorTemperature
  */
-PacketBufferHandle encodeColorControlClusterMoveColorTemperatureCommand(EndpointId destinationEndpoint, uint8_t moveMode,
-                                                                        uint16_t rate, uint16_t colorTemperatureMinimum,
+PacketBufferHandle encodeColorControlClusterMoveColorTemperatureCommand(uint8_t seqNum, EndpointId destinationEndpoint,
+                                                                        uint8_t moveMode, uint16_t rate,
+                                                                        uint16_t colorTemperatureMinimum,
                                                                         uint16_t colorTemperatureMaximum, uint8_t optionsMask,
                                                                         uint8_t optionsOverride)
 {
     COMMAND_HEADER("MoveColorTemperature", COLOR_CONTROL_CLUSTER_ID);
     buf.Put8(kFrameControlClusterSpecificCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_MOVE_COLOR_TEMPERATURE_COMMAND_ID)
         .Put8(moveMode)
         .Put16(rate)
@@ -591,12 +587,12 @@
 /*
  * Command MoveHue
  */
-PacketBufferHandle encodeColorControlClusterMoveHueCommand(EndpointId destinationEndpoint, uint8_t moveMode, uint8_t rate,
-                                                           uint8_t optionsMask, uint8_t optionsOverride)
+PacketBufferHandle encodeColorControlClusterMoveHueCommand(uint8_t seqNum, EndpointId destinationEndpoint, uint8_t moveMode,
+                                                           uint8_t rate, uint8_t optionsMask, uint8_t optionsOverride)
 {
     COMMAND_HEADER("MoveHue", COLOR_CONTROL_CLUSTER_ID);
     buf.Put8(kFrameControlClusterSpecificCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_MOVE_HUE_COMMAND_ID)
         .Put8(moveMode)
         .Put8(rate)
@@ -608,12 +604,12 @@
 /*
  * Command MoveSaturation
  */
-PacketBufferHandle encodeColorControlClusterMoveSaturationCommand(EndpointId destinationEndpoint, uint8_t moveMode, uint8_t rate,
-                                                                  uint8_t optionsMask, uint8_t optionsOverride)
+PacketBufferHandle encodeColorControlClusterMoveSaturationCommand(uint8_t seqNum, EndpointId destinationEndpoint, uint8_t moveMode,
+                                                                  uint8_t rate, uint8_t optionsMask, uint8_t optionsOverride)
 {
     COMMAND_HEADER("MoveSaturation", COLOR_CONTROL_CLUSTER_ID);
     buf.Put8(kFrameControlClusterSpecificCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_MOVE_SATURATION_COMMAND_ID)
         .Put8(moveMode)
         .Put8(rate)
@@ -625,13 +621,13 @@
 /*
  * Command MoveToColor
  */
-PacketBufferHandle encodeColorControlClusterMoveToColorCommand(EndpointId destinationEndpoint, uint16_t colorX, uint16_t colorY,
-                                                               uint16_t transitionTime, uint8_t optionsMask,
+PacketBufferHandle encodeColorControlClusterMoveToColorCommand(uint8_t seqNum, EndpointId destinationEndpoint, uint16_t colorX,
+                                                               uint16_t colorY, uint16_t transitionTime, uint8_t optionsMask,
                                                                uint8_t optionsOverride)
 {
     COMMAND_HEADER("MoveToColor", COLOR_CONTROL_CLUSTER_ID);
     buf.Put8(kFrameControlClusterSpecificCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_MOVE_TO_COLOR_COMMAND_ID)
         .Put16(colorX)
         .Put16(colorY)
@@ -644,13 +640,13 @@
 /*
  * Command MoveToColorTemperature
  */
-PacketBufferHandle encodeColorControlClusterMoveToColorTemperatureCommand(EndpointId destinationEndpoint, uint16_t colorTemperature,
-                                                                          uint16_t transitionTime, uint8_t optionsMask,
-                                                                          uint8_t optionsOverride)
+PacketBufferHandle encodeColorControlClusterMoveToColorTemperatureCommand(uint8_t seqNum, EndpointId destinationEndpoint,
+                                                                          uint16_t colorTemperature, uint16_t transitionTime,
+                                                                          uint8_t optionsMask, uint8_t optionsOverride)
 {
     COMMAND_HEADER("MoveToColorTemperature", COLOR_CONTROL_CLUSTER_ID);
     buf.Put8(kFrameControlClusterSpecificCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_MOVE_TO_COLOR_TEMPERATURE_COMMAND_ID)
         .Put16(colorTemperature)
         .Put16(transitionTime)
@@ -662,12 +658,13 @@
 /*
  * Command MoveToHue
  */
-PacketBufferHandle encodeColorControlClusterMoveToHueCommand(EndpointId destinationEndpoint, uint8_t hue, uint8_t direction,
-                                                             uint16_t transitionTime, uint8_t optionsMask, uint8_t optionsOverride)
+PacketBufferHandle encodeColorControlClusterMoveToHueCommand(uint8_t seqNum, EndpointId destinationEndpoint, uint8_t hue,
+                                                             uint8_t direction, uint16_t transitionTime, uint8_t optionsMask,
+                                                             uint8_t optionsOverride)
 {
     COMMAND_HEADER("MoveToHue", COLOR_CONTROL_CLUSTER_ID);
     buf.Put8(kFrameControlClusterSpecificCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_MOVE_TO_HUE_COMMAND_ID)
         .Put8(hue)
         .Put8(direction)
@@ -680,13 +677,13 @@
 /*
  * Command MoveToHueAndSaturation
  */
-PacketBufferHandle encodeColorControlClusterMoveToHueAndSaturationCommand(EndpointId destinationEndpoint, uint8_t hue,
-                                                                          uint8_t saturation, uint16_t transitionTime,
+PacketBufferHandle encodeColorControlClusterMoveToHueAndSaturationCommand(uint8_t seqNum, EndpointId destinationEndpoint,
+                                                                          uint8_t hue, uint8_t saturation, uint16_t transitionTime,
                                                                           uint8_t optionsMask, uint8_t optionsOverride)
 {
     COMMAND_HEADER("MoveToHueAndSaturation", COLOR_CONTROL_CLUSTER_ID);
     buf.Put8(kFrameControlClusterSpecificCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_MOVE_TO_HUE_AND_SATURATION_COMMAND_ID)
         .Put8(hue)
         .Put8(saturation)
@@ -699,13 +696,13 @@
 /*
  * Command MoveToSaturation
  */
-PacketBufferHandle encodeColorControlClusterMoveToSaturationCommand(EndpointId destinationEndpoint, uint8_t saturation,
-                                                                    uint16_t transitionTime, uint8_t optionsMask,
-                                                                    uint8_t optionsOverride)
+PacketBufferHandle encodeColorControlClusterMoveToSaturationCommand(uint8_t seqNum, EndpointId destinationEndpoint,
+                                                                    uint8_t saturation, uint16_t transitionTime,
+                                                                    uint8_t optionsMask, uint8_t optionsOverride)
 {
     COMMAND_HEADER("MoveToSaturation", COLOR_CONTROL_CLUSTER_ID);
     buf.Put8(kFrameControlClusterSpecificCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_MOVE_TO_SATURATION_COMMAND_ID)
         .Put8(saturation)
         .Put16(transitionTime)
@@ -717,12 +714,13 @@
 /*
  * Command StepColor
  */
-PacketBufferHandle encodeColorControlClusterStepColorCommand(EndpointId destinationEndpoint, int16_t stepX, int16_t stepY,
-                                                             uint16_t transitionTime, uint8_t optionsMask, uint8_t optionsOverride)
+PacketBufferHandle encodeColorControlClusterStepColorCommand(uint8_t seqNum, EndpointId destinationEndpoint, int16_t stepX,
+                                                             int16_t stepY, uint16_t transitionTime, uint8_t optionsMask,
+                                                             uint8_t optionsOverride)
 {
     COMMAND_HEADER("StepColor", COLOR_CONTROL_CLUSTER_ID);
     buf.Put8(kFrameControlClusterSpecificCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_STEP_COLOR_COMMAND_ID)
         .Put16(static_cast<uint16_t>(stepX))
         .Put16(static_cast<uint16_t>(stepY))
@@ -735,15 +733,15 @@
 /*
  * Command StepColorTemperature
  */
-PacketBufferHandle encodeColorControlClusterStepColorTemperatureCommand(EndpointId destinationEndpoint, uint8_t stepMode,
-                                                                        uint16_t stepSize, uint16_t transitionTime,
-                                                                        uint16_t colorTemperatureMinimum,
+PacketBufferHandle encodeColorControlClusterStepColorTemperatureCommand(uint8_t seqNum, EndpointId destinationEndpoint,
+                                                                        uint8_t stepMode, uint16_t stepSize,
+                                                                        uint16_t transitionTime, uint16_t colorTemperatureMinimum,
                                                                         uint16_t colorTemperatureMaximum, uint8_t optionsMask,
                                                                         uint8_t optionsOverride)
 {
     COMMAND_HEADER("StepColorTemperature", COLOR_CONTROL_CLUSTER_ID);
     buf.Put8(kFrameControlClusterSpecificCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_STEP_COLOR_TEMPERATURE_COMMAND_ID)
         .Put8(stepMode)
         .Put16(stepSize)
@@ -758,12 +756,13 @@
 /*
  * Command StepHue
  */
-PacketBufferHandle encodeColorControlClusterStepHueCommand(EndpointId destinationEndpoint, uint8_t stepMode, uint8_t stepSize,
-                                                           uint8_t transitionTime, uint8_t optionsMask, uint8_t optionsOverride)
+PacketBufferHandle encodeColorControlClusterStepHueCommand(uint8_t seqNum, EndpointId destinationEndpoint, uint8_t stepMode,
+                                                           uint8_t stepSize, uint8_t transitionTime, uint8_t optionsMask,
+                                                           uint8_t optionsOverride)
 {
     COMMAND_HEADER("StepHue", COLOR_CONTROL_CLUSTER_ID);
     buf.Put8(kFrameControlClusterSpecificCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_STEP_HUE_COMMAND_ID)
         .Put8(stepMode)
         .Put8(stepSize)
@@ -776,13 +775,13 @@
 /*
  * Command StepSaturation
  */
-PacketBufferHandle encodeColorControlClusterStepSaturationCommand(EndpointId destinationEndpoint, uint8_t stepMode,
+PacketBufferHandle encodeColorControlClusterStepSaturationCommand(uint8_t seqNum, EndpointId destinationEndpoint, uint8_t stepMode,
                                                                   uint8_t stepSize, uint8_t transitionTime, uint8_t optionsMask,
                                                                   uint8_t optionsOverride)
 {
     COMMAND_HEADER("StepSaturation", COLOR_CONTROL_CLUSTER_ID);
     buf.Put8(kFrameControlClusterSpecificCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_STEP_SATURATION_COMMAND_ID)
         .Put8(stepMode)
         .Put8(stepSize)
@@ -795,41 +794,41 @@
 /*
  * Command StopMoveStep
  */
-PacketBufferHandle encodeColorControlClusterStopMoveStepCommand(EndpointId destinationEndpoint, uint8_t optionsMask,
+PacketBufferHandle encodeColorControlClusterStopMoveStepCommand(uint8_t seqNum, EndpointId destinationEndpoint, uint8_t optionsMask,
                                                                 uint8_t optionsOverride)
 {
     COMMAND_HEADER("StopMoveStep", COLOR_CONTROL_CLUSTER_ID);
     buf.Put8(kFrameControlClusterSpecificCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_STOP_MOVE_STEP_COMMAND_ID)
         .Put8(optionsMask)
         .Put8(optionsOverride);
     COMMAND_FOOTER();
 }
 
-PacketBufferHandle encodeColorControlClusterDiscoverAttributes(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterDiscoverAttributes(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("DiscoverColorControlAttributes", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_DISCOVER_ATTRIBUTES_COMMAND_ID).Put16(0x0000).Put8(0xFF);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_DISCOVER_ATTRIBUTES_COMMAND_ID).Put16(0x0000).Put8(0xFF);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute CurrentHue
  */
-PacketBufferHandle encodeColorControlClusterReadCurrentHueAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadCurrentHueAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlCurrentHue", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0000);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0000);
     COMMAND_FOOTER();
 }
 
-PacketBufferHandle encodeColorControlClusterReportCurrentHueAttribute(EndpointId destinationEndpoint, uint16_t minInterval,
-                                                                      uint16_t maxInterval, uint8_t change)
+PacketBufferHandle encodeColorControlClusterConfigureCurrentHueAttribute(uint8_t seqNum, EndpointId destinationEndpoint,
+                                                                         uint16_t minInterval, uint16_t maxInterval, uint8_t change)
 {
     COMMAND_HEADER("ReportColorControlCurrentHue", COLOR_CONTROL_CLUSTER_ID);
     buf.Put8(kFrameControlGlobalCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_CONFIGURE_REPORTING_COMMAND_ID)
         .Put8(EMBER_ZCL_REPORTING_DIRECTION_REPORTED)
         .Put16(0x0000)
@@ -843,19 +842,20 @@
 /*
  * Attribute CurrentSaturation
  */
-PacketBufferHandle encodeColorControlClusterReadCurrentSaturationAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadCurrentSaturationAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlCurrentSaturation", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0001);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0001);
     COMMAND_FOOTER();
 }
 
-PacketBufferHandle encodeColorControlClusterReportCurrentSaturationAttribute(EndpointId destinationEndpoint, uint16_t minInterval,
-                                                                             uint16_t maxInterval, uint8_t change)
+PacketBufferHandle encodeColorControlClusterConfigureCurrentSaturationAttribute(uint8_t seqNum, EndpointId destinationEndpoint,
+                                                                                uint16_t minInterval, uint16_t maxInterval,
+                                                                                uint8_t change)
 {
     COMMAND_HEADER("ReportColorControlCurrentSaturation", COLOR_CONTROL_CLUSTER_ID);
     buf.Put8(kFrameControlGlobalCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_CONFIGURE_REPORTING_COMMAND_ID)
         .Put8(EMBER_ZCL_REPORTING_DIRECTION_REPORTED)
         .Put16(0x0001)
@@ -869,29 +869,29 @@
 /*
  * Attribute RemainingTime
  */
-PacketBufferHandle encodeColorControlClusterReadRemainingTimeAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadRemainingTimeAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlRemainingTime", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0002);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0002);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute CurrentX
  */
-PacketBufferHandle encodeColorControlClusterReadCurrentXAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadCurrentXAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlCurrentX", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0003);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0003);
     COMMAND_FOOTER();
 }
 
-PacketBufferHandle encodeColorControlClusterReportCurrentXAttribute(EndpointId destinationEndpoint, uint16_t minInterval,
-                                                                    uint16_t maxInterval, uint16_t change)
+PacketBufferHandle encodeColorControlClusterConfigureCurrentXAttribute(uint8_t seqNum, EndpointId destinationEndpoint,
+                                                                       uint16_t minInterval, uint16_t maxInterval, uint16_t change)
 {
     COMMAND_HEADER("ReportColorControlCurrentX", COLOR_CONTROL_CLUSTER_ID);
     buf.Put8(kFrameControlGlobalCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_CONFIGURE_REPORTING_COMMAND_ID)
         .Put8(EMBER_ZCL_REPORTING_DIRECTION_REPORTED)
         .Put16(0x0003)
@@ -905,19 +905,19 @@
 /*
  * Attribute CurrentY
  */
-PacketBufferHandle encodeColorControlClusterReadCurrentYAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadCurrentYAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlCurrentY", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0004);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0004);
     COMMAND_FOOTER();
 }
 
-PacketBufferHandle encodeColorControlClusterReportCurrentYAttribute(EndpointId destinationEndpoint, uint16_t minInterval,
-                                                                    uint16_t maxInterval, uint16_t change)
+PacketBufferHandle encodeColorControlClusterConfigureCurrentYAttribute(uint8_t seqNum, EndpointId destinationEndpoint,
+                                                                       uint16_t minInterval, uint16_t maxInterval, uint16_t change)
 {
     COMMAND_HEADER("ReportColorControlCurrentY", COLOR_CONTROL_CLUSTER_ID);
     buf.Put8(kFrameControlGlobalCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_CONFIGURE_REPORTING_COMMAND_ID)
         .Put8(EMBER_ZCL_REPORTING_DIRECTION_REPORTED)
         .Put16(0x0004)
@@ -931,39 +931,40 @@
 /*
  * Attribute DriftCompensation
  */
-PacketBufferHandle encodeColorControlClusterReadDriftCompensationAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadDriftCompensationAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlDriftCompensation", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0005);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0005);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute CompensationText
  */
-PacketBufferHandle encodeColorControlClusterReadCompensationTextAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadCompensationTextAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlCompensationText", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0006);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0006);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute ColorTemperature
  */
-PacketBufferHandle encodeColorControlClusterReadColorTemperatureAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadColorTemperatureAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlColorTemperature", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0007);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0007);
     COMMAND_FOOTER();
 }
 
-PacketBufferHandle encodeColorControlClusterReportColorTemperatureAttribute(EndpointId destinationEndpoint, uint16_t minInterval,
-                                                                            uint16_t maxInterval, uint16_t change)
+PacketBufferHandle encodeColorControlClusterConfigureColorTemperatureAttribute(uint8_t seqNum, EndpointId destinationEndpoint,
+                                                                               uint16_t minInterval, uint16_t maxInterval,
+                                                                               uint16_t change)
 {
     COMMAND_HEADER("ReportColorControlColorTemperature", COLOR_CONTROL_CLUSTER_ID);
     buf.Put8(kFrameControlGlobalCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_CONFIGURE_REPORTING_COMMAND_ID)
         .Put8(EMBER_ZCL_REPORTING_DIRECTION_REPORTED)
         .Put16(0x0007)
@@ -977,29 +978,29 @@
 /*
  * Attribute ColorMode
  */
-PacketBufferHandle encodeColorControlClusterReadColorModeAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadColorModeAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlColorMode", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0008);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0008);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute ColorControlOptions
  */
-PacketBufferHandle encodeColorControlClusterReadColorControlOptionsAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadColorControlOptionsAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlColorControlOptions", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x000F);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x000F);
     COMMAND_FOOTER();
 }
 
-PacketBufferHandle encodeColorControlClusterWriteColorControlOptionsAttribute(EndpointId destinationEndpoint,
+PacketBufferHandle encodeColorControlClusterWriteColorControlOptionsAttribute(uint8_t seqNum, EndpointId destinationEndpoint,
                                                                               uint8_t colorControlOptions)
 {
     COMMAND_HEADER("WriteColorControlColorControlOptions", COLOR_CONTROL_CLUSTER_ID);
     buf.Put8(kFrameControlGlobalCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_WRITE_ATTRIBUTES_COMMAND_ID)
         .Put16(0x000F)
         .Put8(24)
@@ -1010,208 +1011,209 @@
 /*
  * Attribute NumberOfPrimaries
  */
-PacketBufferHandle encodeColorControlClusterReadNumberOfPrimariesAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadNumberOfPrimariesAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlNumberOfPrimaries", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0010);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0010);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute Primary1X
  */
-PacketBufferHandle encodeColorControlClusterReadPrimary1XAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadPrimary1XAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlPrimary1X", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0011);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0011);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute Primary1Y
  */
-PacketBufferHandle encodeColorControlClusterReadPrimary1YAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadPrimary1YAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlPrimary1Y", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0012);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0012);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute Primary1Intensity
  */
-PacketBufferHandle encodeColorControlClusterReadPrimary1IntensityAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadPrimary1IntensityAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlPrimary1Intensity", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0013);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0013);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute Primary2X
  */
-PacketBufferHandle encodeColorControlClusterReadPrimary2XAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadPrimary2XAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlPrimary2X", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0015);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0015);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute Primary2Y
  */
-PacketBufferHandle encodeColorControlClusterReadPrimary2YAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadPrimary2YAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlPrimary2Y", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0016);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0016);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute Primary2Intensity
  */
-PacketBufferHandle encodeColorControlClusterReadPrimary2IntensityAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadPrimary2IntensityAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlPrimary2Intensity", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0017);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0017);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute Primary3X
  */
-PacketBufferHandle encodeColorControlClusterReadPrimary3XAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadPrimary3XAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlPrimary3X", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0019);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0019);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute Primary3Y
  */
-PacketBufferHandle encodeColorControlClusterReadPrimary3YAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadPrimary3YAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlPrimary3Y", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x001A);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x001A);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute Primary3Intensity
  */
-PacketBufferHandle encodeColorControlClusterReadPrimary3IntensityAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadPrimary3IntensityAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlPrimary3Intensity", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x001B);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x001B);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute Primary4X
  */
-PacketBufferHandle encodeColorControlClusterReadPrimary4XAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadPrimary4XAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlPrimary4X", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0020);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0020);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute Primary4Y
  */
-PacketBufferHandle encodeColorControlClusterReadPrimary4YAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadPrimary4YAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlPrimary4Y", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0021);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0021);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute Primary4Intensity
  */
-PacketBufferHandle encodeColorControlClusterReadPrimary4IntensityAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadPrimary4IntensityAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlPrimary4Intensity", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0022);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0022);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute Primary5X
  */
-PacketBufferHandle encodeColorControlClusterReadPrimary5XAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadPrimary5XAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlPrimary5X", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0024);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0024);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute Primary5Y
  */
-PacketBufferHandle encodeColorControlClusterReadPrimary5YAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadPrimary5YAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlPrimary5Y", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0025);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0025);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute Primary5Intensity
  */
-PacketBufferHandle encodeColorControlClusterReadPrimary5IntensityAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadPrimary5IntensityAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlPrimary5Intensity", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0026);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0026);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute Primary6X
  */
-PacketBufferHandle encodeColorControlClusterReadPrimary6XAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadPrimary6XAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlPrimary6X", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0028);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0028);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute Primary6Y
  */
-PacketBufferHandle encodeColorControlClusterReadPrimary6YAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadPrimary6YAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlPrimary6Y", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0029);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0029);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute Primary6Intensity
  */
-PacketBufferHandle encodeColorControlClusterReadPrimary6IntensityAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadPrimary6IntensityAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlPrimary6Intensity", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x002A);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x002A);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute WhitePointX
  */
-PacketBufferHandle encodeColorControlClusterReadWhitePointXAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadWhitePointXAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlWhitePointX", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0030);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0030);
     COMMAND_FOOTER();
 }
 
-PacketBufferHandle encodeColorControlClusterWriteWhitePointXAttribute(EndpointId destinationEndpoint, uint16_t whitePointX)
+PacketBufferHandle encodeColorControlClusterWriteWhitePointXAttribute(uint8_t seqNum, EndpointId destinationEndpoint,
+                                                                      uint16_t whitePointX)
 {
     COMMAND_HEADER("WriteColorControlWhitePointX", COLOR_CONTROL_CLUSTER_ID);
     buf.Put8(kFrameControlGlobalCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_WRITE_ATTRIBUTES_COMMAND_ID)
         .Put16(0x0030)
         .Put8(33)
@@ -1222,18 +1224,19 @@
 /*
  * Attribute WhitePointY
  */
-PacketBufferHandle encodeColorControlClusterReadWhitePointYAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadWhitePointYAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlWhitePointY", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0031);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0031);
     COMMAND_FOOTER();
 }
 
-PacketBufferHandle encodeColorControlClusterWriteWhitePointYAttribute(EndpointId destinationEndpoint, uint16_t whitePointY)
+PacketBufferHandle encodeColorControlClusterWriteWhitePointYAttribute(uint8_t seqNum, EndpointId destinationEndpoint,
+                                                                      uint16_t whitePointY)
 {
     COMMAND_HEADER("WriteColorControlWhitePointY", COLOR_CONTROL_CLUSTER_ID);
     buf.Put8(kFrameControlGlobalCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_WRITE_ATTRIBUTES_COMMAND_ID)
         .Put16(0x0031)
         .Put8(33)
@@ -1244,18 +1247,19 @@
 /*
  * Attribute ColorPointRX
  */
-PacketBufferHandle encodeColorControlClusterReadColorPointRXAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadColorPointRXAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlColorPointRX", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0032);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0032);
     COMMAND_FOOTER();
 }
 
-PacketBufferHandle encodeColorControlClusterWriteColorPointRXAttribute(EndpointId destinationEndpoint, uint16_t colorPointRX)
+PacketBufferHandle encodeColorControlClusterWriteColorPointRXAttribute(uint8_t seqNum, EndpointId destinationEndpoint,
+                                                                       uint16_t colorPointRX)
 {
     COMMAND_HEADER("WriteColorControlColorPointRX", COLOR_CONTROL_CLUSTER_ID);
     buf.Put8(kFrameControlGlobalCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_WRITE_ATTRIBUTES_COMMAND_ID)
         .Put16(0x0032)
         .Put8(33)
@@ -1266,18 +1270,19 @@
 /*
  * Attribute ColorPointRY
  */
-PacketBufferHandle encodeColorControlClusterReadColorPointRYAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadColorPointRYAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlColorPointRY", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0033);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0033);
     COMMAND_FOOTER();
 }
 
-PacketBufferHandle encodeColorControlClusterWriteColorPointRYAttribute(EndpointId destinationEndpoint, uint16_t colorPointRY)
+PacketBufferHandle encodeColorControlClusterWriteColorPointRYAttribute(uint8_t seqNum, EndpointId destinationEndpoint,
+                                                                       uint16_t colorPointRY)
 {
     COMMAND_HEADER("WriteColorControlColorPointRY", COLOR_CONTROL_CLUSTER_ID);
     buf.Put8(kFrameControlGlobalCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_WRITE_ATTRIBUTES_COMMAND_ID)
         .Put16(0x0033)
         .Put8(33)
@@ -1288,19 +1293,19 @@
 /*
  * Attribute ColorPointRIntensity
  */
-PacketBufferHandle encodeColorControlClusterReadColorPointRIntensityAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadColorPointRIntensityAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlColorPointRIntensity", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0034);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0034);
     COMMAND_FOOTER();
 }
 
-PacketBufferHandle encodeColorControlClusterWriteColorPointRIntensityAttribute(EndpointId destinationEndpoint,
+PacketBufferHandle encodeColorControlClusterWriteColorPointRIntensityAttribute(uint8_t seqNum, EndpointId destinationEndpoint,
                                                                                uint8_t colorPointRIntensity)
 {
     COMMAND_HEADER("WriteColorControlColorPointRIntensity", COLOR_CONTROL_CLUSTER_ID);
     buf.Put8(kFrameControlGlobalCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_WRITE_ATTRIBUTES_COMMAND_ID)
         .Put16(0x0034)
         .Put8(32)
@@ -1311,18 +1316,19 @@
 /*
  * Attribute ColorPointGX
  */
-PacketBufferHandle encodeColorControlClusterReadColorPointGXAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadColorPointGXAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlColorPointGX", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0036);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0036);
     COMMAND_FOOTER();
 }
 
-PacketBufferHandle encodeColorControlClusterWriteColorPointGXAttribute(EndpointId destinationEndpoint, uint16_t colorPointGX)
+PacketBufferHandle encodeColorControlClusterWriteColorPointGXAttribute(uint8_t seqNum, EndpointId destinationEndpoint,
+                                                                       uint16_t colorPointGX)
 {
     COMMAND_HEADER("WriteColorControlColorPointGX", COLOR_CONTROL_CLUSTER_ID);
     buf.Put8(kFrameControlGlobalCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_WRITE_ATTRIBUTES_COMMAND_ID)
         .Put16(0x0036)
         .Put8(33)
@@ -1333,18 +1339,19 @@
 /*
  * Attribute ColorPointGY
  */
-PacketBufferHandle encodeColorControlClusterReadColorPointGYAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadColorPointGYAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlColorPointGY", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0037);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0037);
     COMMAND_FOOTER();
 }
 
-PacketBufferHandle encodeColorControlClusterWriteColorPointGYAttribute(EndpointId destinationEndpoint, uint16_t colorPointGY)
+PacketBufferHandle encodeColorControlClusterWriteColorPointGYAttribute(uint8_t seqNum, EndpointId destinationEndpoint,
+                                                                       uint16_t colorPointGY)
 {
     COMMAND_HEADER("WriteColorControlColorPointGY", COLOR_CONTROL_CLUSTER_ID);
     buf.Put8(kFrameControlGlobalCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_WRITE_ATTRIBUTES_COMMAND_ID)
         .Put16(0x0037)
         .Put8(33)
@@ -1355,19 +1362,19 @@
 /*
  * Attribute ColorPointGIntensity
  */
-PacketBufferHandle encodeColorControlClusterReadColorPointGIntensityAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadColorPointGIntensityAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlColorPointGIntensity", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0038);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0038);
     COMMAND_FOOTER();
 }
 
-PacketBufferHandle encodeColorControlClusterWriteColorPointGIntensityAttribute(EndpointId destinationEndpoint,
+PacketBufferHandle encodeColorControlClusterWriteColorPointGIntensityAttribute(uint8_t seqNum, EndpointId destinationEndpoint,
                                                                                uint8_t colorPointGIntensity)
 {
     COMMAND_HEADER("WriteColorControlColorPointGIntensity", COLOR_CONTROL_CLUSTER_ID);
     buf.Put8(kFrameControlGlobalCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_WRITE_ATTRIBUTES_COMMAND_ID)
         .Put16(0x0038)
         .Put8(32)
@@ -1378,18 +1385,19 @@
 /*
  * Attribute ColorPointBX
  */
-PacketBufferHandle encodeColorControlClusterReadColorPointBXAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadColorPointBXAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlColorPointBX", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x003A);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x003A);
     COMMAND_FOOTER();
 }
 
-PacketBufferHandle encodeColorControlClusterWriteColorPointBXAttribute(EndpointId destinationEndpoint, uint16_t colorPointBX)
+PacketBufferHandle encodeColorControlClusterWriteColorPointBXAttribute(uint8_t seqNum, EndpointId destinationEndpoint,
+                                                                       uint16_t colorPointBX)
 {
     COMMAND_HEADER("WriteColorControlColorPointBX", COLOR_CONTROL_CLUSTER_ID);
     buf.Put8(kFrameControlGlobalCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_WRITE_ATTRIBUTES_COMMAND_ID)
         .Put16(0x003A)
         .Put8(33)
@@ -1400,18 +1408,19 @@
 /*
  * Attribute ColorPointBY
  */
-PacketBufferHandle encodeColorControlClusterReadColorPointBYAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadColorPointBYAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlColorPointBY", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x003B);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x003B);
     COMMAND_FOOTER();
 }
 
-PacketBufferHandle encodeColorControlClusterWriteColorPointBYAttribute(EndpointId destinationEndpoint, uint16_t colorPointBY)
+PacketBufferHandle encodeColorControlClusterWriteColorPointBYAttribute(uint8_t seqNum, EndpointId destinationEndpoint,
+                                                                       uint16_t colorPointBY)
 {
     COMMAND_HEADER("WriteColorControlColorPointBY", COLOR_CONTROL_CLUSTER_ID);
     buf.Put8(kFrameControlGlobalCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_WRITE_ATTRIBUTES_COMMAND_ID)
         .Put16(0x003B)
         .Put8(33)
@@ -1422,19 +1431,19 @@
 /*
  * Attribute ColorPointBIntensity
  */
-PacketBufferHandle encodeColorControlClusterReadColorPointBIntensityAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadColorPointBIntensityAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlColorPointBIntensity", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x003C);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x003C);
     COMMAND_FOOTER();
 }
 
-PacketBufferHandle encodeColorControlClusterWriteColorPointBIntensityAttribute(EndpointId destinationEndpoint,
+PacketBufferHandle encodeColorControlClusterWriteColorPointBIntensityAttribute(uint8_t seqNum, EndpointId destinationEndpoint,
                                                                                uint8_t colorPointBIntensity)
 {
     COMMAND_HEADER("WriteColorControlColorPointBIntensity", COLOR_CONTROL_CLUSTER_ID);
     buf.Put8(kFrameControlGlobalCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_WRITE_ATTRIBUTES_COMMAND_ID)
         .Put16(0x003C)
         .Put8(32)
@@ -1445,109 +1454,112 @@
 /*
  * Attribute EnhancedCurrentHue
  */
-PacketBufferHandle encodeColorControlClusterReadEnhancedCurrentHueAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadEnhancedCurrentHueAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlEnhancedCurrentHue", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x4000);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x4000);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute EnhancedColorMode
  */
-PacketBufferHandle encodeColorControlClusterReadEnhancedColorModeAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadEnhancedColorModeAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlEnhancedColorMode", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x4001);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x4001);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute ColorLoopActive
  */
-PacketBufferHandle encodeColorControlClusterReadColorLoopActiveAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadColorLoopActiveAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlColorLoopActive", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x4002);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x4002);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute ColorLoopDirection
  */
-PacketBufferHandle encodeColorControlClusterReadColorLoopDirectionAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadColorLoopDirectionAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlColorLoopDirection", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x4003);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x4003);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute ColorLoopTime
  */
-PacketBufferHandle encodeColorControlClusterReadColorLoopTimeAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadColorLoopTimeAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlColorLoopTime", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x4004);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x4004);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute ColorCapabilities
  */
-PacketBufferHandle encodeColorControlClusterReadColorCapabilitiesAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadColorCapabilitiesAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlColorCapabilities", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x400A);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x400A);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute ColorTempPhysicalMin
  */
-PacketBufferHandle encodeColorControlClusterReadColorTempPhysicalMinAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadColorTempPhysicalMinAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlColorTempPhysicalMin", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x400B);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x400B);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute ColorTempPhysicalMax
  */
-PacketBufferHandle encodeColorControlClusterReadColorTempPhysicalMaxAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadColorTempPhysicalMaxAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlColorTempPhysicalMax", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x400C);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x400C);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute CoupleColorTempToLevelMinMireds
  */
-PacketBufferHandle encodeColorControlClusterReadCoupleColorTempToLevelMinMiredsAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadCoupleColorTempToLevelMinMiredsAttribute(uint8_t seqNum,
+                                                                                         EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlCoupleColorTempToLevelMinMireds", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x400D);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x400D);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute StartUpColorTemperatureMireds
  */
-PacketBufferHandle encodeColorControlClusterReadStartUpColorTemperatureMiredsAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadStartUpColorTemperatureMiredsAttribute(uint8_t seqNum,
+                                                                                       EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlStartUpColorTemperatureMireds", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x4010);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x4010);
     COMMAND_FOOTER();
 }
 
-PacketBufferHandle encodeColorControlClusterWriteStartUpColorTemperatureMiredsAttribute(EndpointId destinationEndpoint,
+PacketBufferHandle encodeColorControlClusterWriteStartUpColorTemperatureMiredsAttribute(uint8_t seqNum,
+                                                                                        EndpointId destinationEndpoint,
                                                                                         uint16_t startUpColorTemperatureMireds)
 {
     COMMAND_HEADER("WriteColorControlStartUpColorTemperatureMireds", COLOR_CONTROL_CLUSTER_ID);
     buf.Put8(kFrameControlGlobalCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_WRITE_ATTRIBUTES_COMMAND_ID)
         .Put16(0x4010)
         .Put8(33)
@@ -1558,10 +1570,10 @@
 /*
  * Attribute ClusterRevision
  */
-PacketBufferHandle encodeColorControlClusterReadClusterRevisionAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeColorControlClusterReadClusterRevisionAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadColorControlClusterRevision", COLOR_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0xFFFD);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0xFFFD);
     COMMAND_FOOTER();
 }
 
@@ -1603,62 +1615,63 @@
 /*
  * Command ClearAllPins
  */
-PacketBufferHandle encodeDoorLockClusterClearAllPinsCommand(EndpointId destinationEndpoint)
+PacketBufferHandle encodeDoorLockClusterClearAllPinsCommand(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ClearAllPins", DOOR_LOCK_CLUSTER_ID);
-    buf.Put8(kFrameControlClusterSpecificCommand).Put8(kSeqNum).Put8(ZCL_CLEAR_ALL_PINS_COMMAND_ID);
+    buf.Put8(kFrameControlClusterSpecificCommand).Put8(seqNum).Put8(ZCL_CLEAR_ALL_PINS_COMMAND_ID);
     COMMAND_FOOTER();
 }
 
 /*
  * Command ClearAllRfids
  */
-PacketBufferHandle encodeDoorLockClusterClearAllRfidsCommand(EndpointId destinationEndpoint)
+PacketBufferHandle encodeDoorLockClusterClearAllRfidsCommand(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ClearAllRfids", DOOR_LOCK_CLUSTER_ID);
-    buf.Put8(kFrameControlClusterSpecificCommand).Put8(kSeqNum).Put8(ZCL_CLEAR_ALL_RFIDS_COMMAND_ID);
+    buf.Put8(kFrameControlClusterSpecificCommand).Put8(seqNum).Put8(ZCL_CLEAR_ALL_RFIDS_COMMAND_ID);
     COMMAND_FOOTER();
 }
 
 /*
  * Command ClearHolidaySchedule
  */
-PacketBufferHandle encodeDoorLockClusterClearHolidayScheduleCommand(EndpointId destinationEndpoint, uint8_t scheduleId)
+PacketBufferHandle encodeDoorLockClusterClearHolidayScheduleCommand(uint8_t seqNum, EndpointId destinationEndpoint,
+                                                                    uint8_t scheduleId)
 {
     COMMAND_HEADER("ClearHolidaySchedule", DOOR_LOCK_CLUSTER_ID);
-    buf.Put8(kFrameControlClusterSpecificCommand).Put8(kSeqNum).Put8(ZCL_CLEAR_HOLIDAY_SCHEDULE_COMMAND_ID).Put8(scheduleId);
+    buf.Put8(kFrameControlClusterSpecificCommand).Put8(seqNum).Put8(ZCL_CLEAR_HOLIDAY_SCHEDULE_COMMAND_ID).Put8(scheduleId);
     COMMAND_FOOTER();
 }
 
 /*
  * Command ClearPin
  */
-PacketBufferHandle encodeDoorLockClusterClearPinCommand(EndpointId destinationEndpoint, uint16_t userId)
+PacketBufferHandle encodeDoorLockClusterClearPinCommand(uint8_t seqNum, EndpointId destinationEndpoint, uint16_t userId)
 {
     COMMAND_HEADER("ClearPin", DOOR_LOCK_CLUSTER_ID);
-    buf.Put8(kFrameControlClusterSpecificCommand).Put8(kSeqNum).Put8(ZCL_CLEAR_PIN_COMMAND_ID).Put16(userId);
+    buf.Put8(kFrameControlClusterSpecificCommand).Put8(seqNum).Put8(ZCL_CLEAR_PIN_COMMAND_ID).Put16(userId);
     COMMAND_FOOTER();
 }
 
 /*
  * Command ClearRfid
  */
-PacketBufferHandle encodeDoorLockClusterClearRfidCommand(EndpointId destinationEndpoint, uint16_t userId)
+PacketBufferHandle encodeDoorLockClusterClearRfidCommand(uint8_t seqNum, EndpointId destinationEndpoint, uint16_t userId)
 {
     COMMAND_HEADER("ClearRfid", DOOR_LOCK_CLUSTER_ID);
-    buf.Put8(kFrameControlClusterSpecificCommand).Put8(kSeqNum).Put8(ZCL_CLEAR_RFID_COMMAND_ID).Put16(userId);
+    buf.Put8(kFrameControlClusterSpecificCommand).Put8(seqNum).Put8(ZCL_CLEAR_RFID_COMMAND_ID).Put16(userId);
     COMMAND_FOOTER();
 }
 
 /*
  * Command ClearWeekdaySchedule
  */
-PacketBufferHandle encodeDoorLockClusterClearWeekdayScheduleCommand(EndpointId destinationEndpoint, uint8_t scheduleId,
-                                                                    uint16_t userId)
+PacketBufferHandle encodeDoorLockClusterClearWeekdayScheduleCommand(uint8_t seqNum, EndpointId destinationEndpoint,
+                                                                    uint8_t scheduleId, uint16_t userId)
 {
     COMMAND_HEADER("ClearWeekdaySchedule", DOOR_LOCK_CLUSTER_ID);
     buf.Put8(kFrameControlClusterSpecificCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_CLEAR_WEEKDAY_SCHEDULE_COMMAND_ID)
         .Put8(scheduleId)
         .Put16(userId);
@@ -1668,12 +1681,12 @@
 /*
  * Command ClearYeardaySchedule
  */
-PacketBufferHandle encodeDoorLockClusterClearYeardayScheduleCommand(EndpointId destinationEndpoint, uint8_t scheduleId,
-                                                                    uint16_t userId)
+PacketBufferHandle encodeDoorLockClusterClearYeardayScheduleCommand(uint8_t seqNum, EndpointId destinationEndpoint,
+                                                                    uint8_t scheduleId, uint16_t userId)
 {
     COMMAND_HEADER("ClearYeardaySchedule", DOOR_LOCK_CLUSTER_ID);
     buf.Put8(kFrameControlClusterSpecificCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_CLEAR_YEARDAY_SCHEDULE_COMMAND_ID)
         .Put8(scheduleId)
         .Put16(userId);
@@ -1683,62 +1696,63 @@
 /*
  * Command GetHolidaySchedule
  */
-PacketBufferHandle encodeDoorLockClusterGetHolidayScheduleCommand(EndpointId destinationEndpoint, uint8_t scheduleId)
+PacketBufferHandle encodeDoorLockClusterGetHolidayScheduleCommand(uint8_t seqNum, EndpointId destinationEndpoint,
+                                                                  uint8_t scheduleId)
 {
     COMMAND_HEADER("GetHolidaySchedule", DOOR_LOCK_CLUSTER_ID);
-    buf.Put8(kFrameControlClusterSpecificCommand).Put8(kSeqNum).Put8(ZCL_GET_HOLIDAY_SCHEDULE_COMMAND_ID).Put8(scheduleId);
+    buf.Put8(kFrameControlClusterSpecificCommand).Put8(seqNum).Put8(ZCL_GET_HOLIDAY_SCHEDULE_COMMAND_ID).Put8(scheduleId);
     COMMAND_FOOTER();
 }
 
 /*
  * Command GetLogRecord
  */
-PacketBufferHandle encodeDoorLockClusterGetLogRecordCommand(EndpointId destinationEndpoint, uint16_t logIndex)
+PacketBufferHandle encodeDoorLockClusterGetLogRecordCommand(uint8_t seqNum, EndpointId destinationEndpoint, uint16_t logIndex)
 {
     COMMAND_HEADER("GetLogRecord", DOOR_LOCK_CLUSTER_ID);
-    buf.Put8(kFrameControlClusterSpecificCommand).Put8(kSeqNum).Put8(ZCL_GET_LOG_RECORD_COMMAND_ID).Put16(logIndex);
+    buf.Put8(kFrameControlClusterSpecificCommand).Put8(seqNum).Put8(ZCL_GET_LOG_RECORD_COMMAND_ID).Put16(logIndex);
     COMMAND_FOOTER();
 }
 
 /*
  * Command GetPin
  */
-PacketBufferHandle encodeDoorLockClusterGetPinCommand(EndpointId destinationEndpoint, uint16_t userId)
+PacketBufferHandle encodeDoorLockClusterGetPinCommand(uint8_t seqNum, EndpointId destinationEndpoint, uint16_t userId)
 {
     COMMAND_HEADER("GetPin", DOOR_LOCK_CLUSTER_ID);
-    buf.Put8(kFrameControlClusterSpecificCommand).Put8(kSeqNum).Put8(ZCL_GET_PIN_COMMAND_ID).Put16(userId);
+    buf.Put8(kFrameControlClusterSpecificCommand).Put8(seqNum).Put8(ZCL_GET_PIN_COMMAND_ID).Put16(userId);
     COMMAND_FOOTER();
 }
 
 /*
  * Command GetRfid
  */
-PacketBufferHandle encodeDoorLockClusterGetRfidCommand(EndpointId destinationEndpoint, uint16_t userId)
+PacketBufferHandle encodeDoorLockClusterGetRfidCommand(uint8_t seqNum, EndpointId destinationEndpoint, uint16_t userId)
 {
     COMMAND_HEADER("GetRfid", DOOR_LOCK_CLUSTER_ID);
-    buf.Put8(kFrameControlClusterSpecificCommand).Put8(kSeqNum).Put8(ZCL_GET_RFID_COMMAND_ID).Put16(userId);
+    buf.Put8(kFrameControlClusterSpecificCommand).Put8(seqNum).Put8(ZCL_GET_RFID_COMMAND_ID).Put16(userId);
     COMMAND_FOOTER();
 }
 
 /*
  * Command GetUserType
  */
-PacketBufferHandle encodeDoorLockClusterGetUserTypeCommand(EndpointId destinationEndpoint, uint16_t userId)
+PacketBufferHandle encodeDoorLockClusterGetUserTypeCommand(uint8_t seqNum, EndpointId destinationEndpoint, uint16_t userId)
 {
     COMMAND_HEADER("GetUserType", DOOR_LOCK_CLUSTER_ID);
-    buf.Put8(kFrameControlClusterSpecificCommand).Put8(kSeqNum).Put8(ZCL_GET_USER_TYPE_COMMAND_ID).Put16(userId);
+    buf.Put8(kFrameControlClusterSpecificCommand).Put8(seqNum).Put8(ZCL_GET_USER_TYPE_COMMAND_ID).Put16(userId);
     COMMAND_FOOTER();
 }
 
 /*
  * Command GetWeekdaySchedule
  */
-PacketBufferHandle encodeDoorLockClusterGetWeekdayScheduleCommand(EndpointId destinationEndpoint, uint8_t scheduleId,
-                                                                  uint16_t userId)
+PacketBufferHandle encodeDoorLockClusterGetWeekdayScheduleCommand(uint8_t seqNum, EndpointId destinationEndpoint,
+                                                                  uint8_t scheduleId, uint16_t userId)
 {
     COMMAND_HEADER("GetWeekdaySchedule", DOOR_LOCK_CLUSTER_ID);
     buf.Put8(kFrameControlClusterSpecificCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_GET_WEEKDAY_SCHEDULE_COMMAND_ID)
         .Put8(scheduleId)
         .Put16(userId);
@@ -1748,12 +1762,12 @@
 /*
  * Command GetYeardaySchedule
  */
-PacketBufferHandle encodeDoorLockClusterGetYeardayScheduleCommand(EndpointId destinationEndpoint, uint8_t scheduleId,
-                                                                  uint16_t userId)
+PacketBufferHandle encodeDoorLockClusterGetYeardayScheduleCommand(uint8_t seqNum, EndpointId destinationEndpoint,
+                                                                  uint8_t scheduleId, uint16_t userId)
 {
     COMMAND_HEADER("GetYeardaySchedule", DOOR_LOCK_CLUSTER_ID);
     buf.Put8(kFrameControlClusterSpecificCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_GET_YEARDAY_SCHEDULE_COMMAND_ID)
         .Put8(scheduleId)
         .Put16(userId);
@@ -1763,7 +1777,7 @@
 /*
  * Command LockDoor
  */
-PacketBufferHandle encodeDoorLockClusterLockDoorCommand(EndpointId destinationEndpoint, char * pin)
+PacketBufferHandle encodeDoorLockClusterLockDoorCommand(uint8_t seqNum, EndpointId destinationEndpoint, char * pin)
 {
     COMMAND_HEADER("LockDoor", DOOR_LOCK_CLUSTER_ID);
     size_t pinStrLen = strlen(pin);
@@ -1773,7 +1787,7 @@
         return PacketBufferHandle();
     }
     buf.Put8(kFrameControlClusterSpecificCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_LOCK_DOOR_COMMAND_ID)
         .Put(static_cast<uint8_t>(pinStrLen))
         .Put(pin);
@@ -1783,13 +1797,13 @@
 /*
  * Command SetHolidaySchedule
  */
-PacketBufferHandle encodeDoorLockClusterSetHolidayScheduleCommand(EndpointId destinationEndpoint, uint8_t scheduleId,
-                                                                  uint32_t localStartTime, uint32_t localEndTime,
-                                                                  uint8_t operatingModeDuringHoliday)
+PacketBufferHandle encodeDoorLockClusterSetHolidayScheduleCommand(uint8_t seqNum, EndpointId destinationEndpoint,
+                                                                  uint8_t scheduleId, uint32_t localStartTime,
+                                                                  uint32_t localEndTime, uint8_t operatingModeDuringHoliday)
 {
     COMMAND_HEADER("SetHolidaySchedule", DOOR_LOCK_CLUSTER_ID);
     buf.Put8(kFrameControlClusterSpecificCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_SET_HOLIDAY_SCHEDULE_COMMAND_ID)
         .Put8(scheduleId)
         .Put32(localStartTime)
@@ -1801,8 +1815,8 @@
 /*
  * Command SetPin
  */
-PacketBufferHandle encodeDoorLockClusterSetPinCommand(EndpointId destinationEndpoint, uint16_t userId, uint8_t userStatus,
-                                                      uint8_t userType, char * pin)
+PacketBufferHandle encodeDoorLockClusterSetPinCommand(uint8_t seqNum, EndpointId destinationEndpoint, uint16_t userId,
+                                                      uint8_t userStatus, uint8_t userType, char * pin)
 {
     COMMAND_HEADER("SetPin", DOOR_LOCK_CLUSTER_ID);
     size_t pinStrLen = strlen(pin);
@@ -1812,7 +1826,7 @@
         return PacketBufferHandle();
     }
     buf.Put8(kFrameControlClusterSpecificCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_SET_PIN_COMMAND_ID)
         .Put16(userId)
         .Put8(userStatus)
@@ -1825,8 +1839,8 @@
 /*
  * Command SetRfid
  */
-PacketBufferHandle encodeDoorLockClusterSetRfidCommand(EndpointId destinationEndpoint, uint16_t userId, uint8_t userStatus,
-                                                       uint8_t userType, char * id)
+PacketBufferHandle encodeDoorLockClusterSetRfidCommand(uint8_t seqNum, EndpointId destinationEndpoint, uint16_t userId,
+                                                       uint8_t userStatus, uint8_t userType, char * id)
 {
     COMMAND_HEADER("SetRfid", DOOR_LOCK_CLUSTER_ID);
     size_t idStrLen = strlen(id);
@@ -1836,7 +1850,7 @@
         return PacketBufferHandle();
     }
     buf.Put8(kFrameControlClusterSpecificCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_SET_RFID_COMMAND_ID)
         .Put16(userId)
         .Put8(userStatus)
@@ -1849,23 +1863,25 @@
 /*
  * Command SetUserType
  */
-PacketBufferHandle encodeDoorLockClusterSetUserTypeCommand(EndpointId destinationEndpoint, uint16_t userId, uint8_t userType)
+PacketBufferHandle encodeDoorLockClusterSetUserTypeCommand(uint8_t seqNum, EndpointId destinationEndpoint, uint16_t userId,
+                                                           uint8_t userType)
 {
     COMMAND_HEADER("SetUserType", DOOR_LOCK_CLUSTER_ID);
-    buf.Put8(kFrameControlClusterSpecificCommand).Put8(kSeqNum).Put8(ZCL_SET_USER_TYPE_COMMAND_ID).Put16(userId).Put8(userType);
+    buf.Put8(kFrameControlClusterSpecificCommand).Put8(seqNum).Put8(ZCL_SET_USER_TYPE_COMMAND_ID).Put16(userId).Put8(userType);
     COMMAND_FOOTER();
 }
 
 /*
  * Command SetWeekdaySchedule
  */
-PacketBufferHandle encodeDoorLockClusterSetWeekdayScheduleCommand(EndpointId destinationEndpoint, uint8_t scheduleId,
-                                                                  uint16_t userId, uint8_t daysMask, uint8_t startHour,
-                                                                  uint8_t startMinute, uint8_t endHour, uint8_t endMinute)
+PacketBufferHandle encodeDoorLockClusterSetWeekdayScheduleCommand(uint8_t seqNum, EndpointId destinationEndpoint,
+                                                                  uint8_t scheduleId, uint16_t userId, uint8_t daysMask,
+                                                                  uint8_t startHour, uint8_t startMinute, uint8_t endHour,
+                                                                  uint8_t endMinute)
 {
     COMMAND_HEADER("SetWeekdaySchedule", DOOR_LOCK_CLUSTER_ID);
     buf.Put8(kFrameControlClusterSpecificCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_SET_WEEKDAY_SCHEDULE_COMMAND_ID)
         .Put8(scheduleId)
         .Put16(userId)
@@ -1880,12 +1896,13 @@
 /*
  * Command SetYeardaySchedule
  */
-PacketBufferHandle encodeDoorLockClusterSetYeardayScheduleCommand(EndpointId destinationEndpoint, uint8_t scheduleId,
-                                                                  uint16_t userId, uint32_t localStartTime, uint32_t localEndTime)
+PacketBufferHandle encodeDoorLockClusterSetYeardayScheduleCommand(uint8_t seqNum, EndpointId destinationEndpoint,
+                                                                  uint8_t scheduleId, uint16_t userId, uint32_t localStartTime,
+                                                                  uint32_t localEndTime)
 {
     COMMAND_HEADER("SetYeardaySchedule", DOOR_LOCK_CLUSTER_ID);
     buf.Put8(kFrameControlClusterSpecificCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_SET_YEARDAY_SCHEDULE_COMMAND_ID)
         .Put8(scheduleId)
         .Put16(userId)
@@ -1897,7 +1914,7 @@
 /*
  * Command UnlockDoor
  */
-PacketBufferHandle encodeDoorLockClusterUnlockDoorCommand(EndpointId destinationEndpoint, char * pin)
+PacketBufferHandle encodeDoorLockClusterUnlockDoorCommand(uint8_t seqNum, EndpointId destinationEndpoint, char * pin)
 {
     COMMAND_HEADER("UnlockDoor", DOOR_LOCK_CLUSTER_ID);
     size_t pinStrLen = strlen(pin);
@@ -1907,7 +1924,7 @@
         return PacketBufferHandle();
     }
     buf.Put8(kFrameControlClusterSpecificCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_UNLOCK_DOOR_COMMAND_ID)
         .Put(static_cast<uint8_t>(pinStrLen))
         .Put(pin);
@@ -1917,8 +1934,8 @@
 /*
  * Command UnlockWithTimeout
  */
-PacketBufferHandle encodeDoorLockClusterUnlockWithTimeoutCommand(EndpointId destinationEndpoint, uint16_t timeoutInSeconds,
-                                                                 char * pin)
+PacketBufferHandle encodeDoorLockClusterUnlockWithTimeoutCommand(uint8_t seqNum, EndpointId destinationEndpoint,
+                                                                 uint16_t timeoutInSeconds, char * pin)
 {
     COMMAND_HEADER("UnlockWithTimeout", DOOR_LOCK_CLUSTER_ID);
     size_t pinStrLen = strlen(pin);
@@ -1928,7 +1945,7 @@
         return PacketBufferHandle();
     }
     buf.Put8(kFrameControlClusterSpecificCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_UNLOCK_WITH_TIMEOUT_COMMAND_ID)
         .Put16(timeoutInSeconds)
         .Put(static_cast<uint8_t>(pinStrLen))
@@ -1936,29 +1953,29 @@
     COMMAND_FOOTER();
 }
 
-PacketBufferHandle encodeDoorLockClusterDiscoverAttributes(EndpointId destinationEndpoint)
+PacketBufferHandle encodeDoorLockClusterDiscoverAttributes(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("DiscoverDoorLockAttributes", DOOR_LOCK_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_DISCOVER_ATTRIBUTES_COMMAND_ID).Put16(0x0000).Put8(0xFF);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_DISCOVER_ATTRIBUTES_COMMAND_ID).Put16(0x0000).Put8(0xFF);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute LockState
  */
-PacketBufferHandle encodeDoorLockClusterReadLockStateAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeDoorLockClusterReadLockStateAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadDoorLockLockState", DOOR_LOCK_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0000);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0000);
     COMMAND_FOOTER();
 }
 
-PacketBufferHandle encodeDoorLockClusterReportLockStateAttribute(EndpointId destinationEndpoint, uint16_t minInterval,
-                                                                 uint16_t maxInterval)
+PacketBufferHandle encodeDoorLockClusterConfigureLockStateAttribute(uint8_t seqNum, EndpointId destinationEndpoint,
+                                                                    uint16_t minInterval, uint16_t maxInterval)
 {
     COMMAND_HEADER("ReportDoorLockLockState", DOOR_LOCK_CLUSTER_ID);
     buf.Put8(kFrameControlGlobalCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_CONFIGURE_REPORTING_COMMAND_ID)
         .Put8(EMBER_ZCL_REPORTING_DIRECTION_REPORTED)
         .Put16(0x0000)
@@ -1971,30 +1988,30 @@
 /*
  * Attribute LockType
  */
-PacketBufferHandle encodeDoorLockClusterReadLockTypeAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeDoorLockClusterReadLockTypeAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadDoorLockLockType", DOOR_LOCK_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0001);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0001);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute ActuatorEnabled
  */
-PacketBufferHandle encodeDoorLockClusterReadActuatorEnabledAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeDoorLockClusterReadActuatorEnabledAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadDoorLockActuatorEnabled", DOOR_LOCK_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0002);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0002);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute ClusterRevision
  */
-PacketBufferHandle encodeDoorLockClusterReadClusterRevisionAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeDoorLockClusterReadClusterRevisionAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadDoorLockClusterRevision", DOOR_LOCK_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0xFFFD);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0xFFFD);
     COMMAND_FOOTER();
 }
 
@@ -2017,7 +2034,8 @@
 /*
  * Command AddGroup
  */
-PacketBufferHandle encodeGroupsClusterAddGroupCommand(EndpointId destinationEndpoint, uint16_t groupId, char * groupName)
+PacketBufferHandle encodeGroupsClusterAddGroupCommand(uint8_t seqNum, EndpointId destinationEndpoint, uint16_t groupId,
+                                                      char * groupName)
 {
     COMMAND_HEADER("AddGroup", GROUPS_CLUSTER_ID);
     size_t groupNameStrLen = strlen(groupName);
@@ -2027,7 +2045,7 @@
         return PacketBufferHandle();
     }
     buf.Put8(kFrameControlClusterSpecificCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_ADD_GROUP_COMMAND_ID)
         .Put16(groupId)
         .Put(static_cast<uint8_t>(groupNameStrLen))
@@ -2038,7 +2056,7 @@
 /*
  * Command AddGroupIfIdentifying
  */
-PacketBufferHandle encodeGroupsClusterAddGroupIfIdentifyingCommand(EndpointId destinationEndpoint, uint16_t groupId,
+PacketBufferHandle encodeGroupsClusterAddGroupIfIdentifyingCommand(uint8_t seqNum, EndpointId destinationEndpoint, uint16_t groupId,
                                                                    char * groupName)
 {
     COMMAND_HEADER("AddGroupIfIdentifying", GROUPS_CLUSTER_ID);
@@ -2049,7 +2067,7 @@
         return PacketBufferHandle();
     }
     buf.Put8(kFrameControlClusterSpecificCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_ADD_GROUP_IF_IDENTIFYING_COMMAND_ID)
         .Put16(groupId)
         .Put(static_cast<uint8_t>(groupNameStrLen))
@@ -2060,12 +2078,12 @@
 /*
  * Command GetGroupMembership
  */
-PacketBufferHandle encodeGroupsClusterGetGroupMembershipCommand(EndpointId destinationEndpoint, uint8_t groupCount,
+PacketBufferHandle encodeGroupsClusterGetGroupMembershipCommand(uint8_t seqNum, EndpointId destinationEndpoint, uint8_t groupCount,
                                                                 uint16_t groupList)
 {
     COMMAND_HEADER("GetGroupMembership", GROUPS_CLUSTER_ID);
     buf.Put8(kFrameControlClusterSpecificCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_GET_GROUP_MEMBERSHIP_COMMAND_ID)
         .Put8(groupCount)
         .Put16(groupList);
@@ -2075,57 +2093,57 @@
 /*
  * Command RemoveAllGroups
  */
-PacketBufferHandle encodeGroupsClusterRemoveAllGroupsCommand(EndpointId destinationEndpoint)
+PacketBufferHandle encodeGroupsClusterRemoveAllGroupsCommand(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("RemoveAllGroups", GROUPS_CLUSTER_ID);
-    buf.Put8(kFrameControlClusterSpecificCommand).Put8(kSeqNum).Put8(ZCL_REMOVE_ALL_GROUPS_COMMAND_ID);
+    buf.Put8(kFrameControlClusterSpecificCommand).Put8(seqNum).Put8(ZCL_REMOVE_ALL_GROUPS_COMMAND_ID);
     COMMAND_FOOTER();
 }
 
 /*
  * Command RemoveGroup
  */
-PacketBufferHandle encodeGroupsClusterRemoveGroupCommand(EndpointId destinationEndpoint, uint16_t groupId)
+PacketBufferHandle encodeGroupsClusterRemoveGroupCommand(uint8_t seqNum, EndpointId destinationEndpoint, uint16_t groupId)
 {
     COMMAND_HEADER("RemoveGroup", GROUPS_CLUSTER_ID);
-    buf.Put8(kFrameControlClusterSpecificCommand).Put8(kSeqNum).Put8(ZCL_REMOVE_GROUP_COMMAND_ID).Put16(groupId);
+    buf.Put8(kFrameControlClusterSpecificCommand).Put8(seqNum).Put8(ZCL_REMOVE_GROUP_COMMAND_ID).Put16(groupId);
     COMMAND_FOOTER();
 }
 
 /*
  * Command ViewGroup
  */
-PacketBufferHandle encodeGroupsClusterViewGroupCommand(EndpointId destinationEndpoint, uint16_t groupId)
+PacketBufferHandle encodeGroupsClusterViewGroupCommand(uint8_t seqNum, EndpointId destinationEndpoint, uint16_t groupId)
 {
     COMMAND_HEADER("ViewGroup", GROUPS_CLUSTER_ID);
-    buf.Put8(kFrameControlClusterSpecificCommand).Put8(kSeqNum).Put8(ZCL_VIEW_GROUP_COMMAND_ID).Put16(groupId);
+    buf.Put8(kFrameControlClusterSpecificCommand).Put8(seqNum).Put8(ZCL_VIEW_GROUP_COMMAND_ID).Put16(groupId);
     COMMAND_FOOTER();
 }
 
-PacketBufferHandle encodeGroupsClusterDiscoverAttributes(EndpointId destinationEndpoint)
+PacketBufferHandle encodeGroupsClusterDiscoverAttributes(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("DiscoverGroupsAttributes", GROUPS_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_DISCOVER_ATTRIBUTES_COMMAND_ID).Put16(0x0000).Put8(0xFF);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_DISCOVER_ATTRIBUTES_COMMAND_ID).Put16(0x0000).Put8(0xFF);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute NameSupport
  */
-PacketBufferHandle encodeGroupsClusterReadNameSupportAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeGroupsClusterReadNameSupportAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadGroupsNameSupport", GROUPS_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0000);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0000);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute ClusterRevision
  */
-PacketBufferHandle encodeGroupsClusterReadClusterRevisionAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeGroupsClusterReadClusterRevisionAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadGroupsClusterRevision", GROUPS_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0xFFFD);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0xFFFD);
     COMMAND_FOOTER();
 }
 
@@ -2143,58 +2161,59 @@
 | * ClusterRevision                                                   | 0xFFFD |
 \*----------------------------------------------------------------------------*/
 
-PacketBufferHandle encodeIasZoneClusterDiscoverAttributes(EndpointId destinationEndpoint)
+PacketBufferHandle encodeIasZoneClusterDiscoverAttributes(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("DiscoverIasZoneAttributes", IAS_ZONE_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_DISCOVER_ATTRIBUTES_COMMAND_ID).Put16(0x0000).Put8(0xFF);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_DISCOVER_ATTRIBUTES_COMMAND_ID).Put16(0x0000).Put8(0xFF);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute ZoneState
  */
-PacketBufferHandle encodeIasZoneClusterReadZoneStateAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeIasZoneClusterReadZoneStateAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadIasZoneZoneState", IAS_ZONE_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0000);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0000);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute ZoneType
  */
-PacketBufferHandle encodeIasZoneClusterReadZoneTypeAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeIasZoneClusterReadZoneTypeAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadIasZoneZoneType", IAS_ZONE_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0001);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0001);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute ZoneStatus
  */
-PacketBufferHandle encodeIasZoneClusterReadZoneStatusAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeIasZoneClusterReadZoneStatusAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadIasZoneZoneStatus", IAS_ZONE_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0002);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0002);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute IasCieAddress
  */
-PacketBufferHandle encodeIasZoneClusterReadIasCieAddressAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeIasZoneClusterReadIasCieAddressAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadIasZoneIasCieAddress", IAS_ZONE_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0010);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0010);
     COMMAND_FOOTER();
 }
 
-PacketBufferHandle encodeIasZoneClusterWriteIasCieAddressAttribute(EndpointId destinationEndpoint, uint64_t iasCieAddress)
+PacketBufferHandle encodeIasZoneClusterWriteIasCieAddressAttribute(uint8_t seqNum, EndpointId destinationEndpoint,
+                                                                   uint64_t iasCieAddress)
 {
     COMMAND_HEADER("WriteIasZoneIasCieAddress", IAS_ZONE_CLUSTER_ID);
     buf.Put8(kFrameControlGlobalCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_WRITE_ATTRIBUTES_COMMAND_ID)
         .Put16(0x0010)
         .Put8(240)
@@ -2205,20 +2224,20 @@
 /*
  * Attribute ZoneId
  */
-PacketBufferHandle encodeIasZoneClusterReadZoneIdAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeIasZoneClusterReadZoneIdAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadIasZoneZoneId", IAS_ZONE_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0011);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0011);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute ClusterRevision
  */
-PacketBufferHandle encodeIasZoneClusterReadClusterRevisionAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeIasZoneClusterReadClusterRevisionAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadIasZoneClusterRevision", IAS_ZONE_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0xFFFD);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0xFFFD);
     COMMAND_FOOTER();
 }
 
@@ -2237,45 +2256,46 @@
 /*
  * Command Identify
  */
-PacketBufferHandle encodeIdentifyClusterIdentifyCommand(EndpointId destinationEndpoint, uint16_t identifyTime)
+PacketBufferHandle encodeIdentifyClusterIdentifyCommand(uint8_t seqNum, EndpointId destinationEndpoint, uint16_t identifyTime)
 {
     COMMAND_HEADER("Identify", IDENTIFY_CLUSTER_ID);
-    buf.Put8(kFrameControlClusterSpecificCommand).Put8(kSeqNum).Put8(ZCL_IDENTIFY_COMMAND_ID).Put16(identifyTime);
+    buf.Put8(kFrameControlClusterSpecificCommand).Put8(seqNum).Put8(ZCL_IDENTIFY_COMMAND_ID).Put16(identifyTime);
     COMMAND_FOOTER();
 }
 
 /*
  * Command IdentifyQuery
  */
-PacketBufferHandle encodeIdentifyClusterIdentifyQueryCommand(EndpointId destinationEndpoint)
+PacketBufferHandle encodeIdentifyClusterIdentifyQueryCommand(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("IdentifyQuery", IDENTIFY_CLUSTER_ID);
-    buf.Put8(kFrameControlClusterSpecificCommand).Put8(kSeqNum).Put8(ZCL_IDENTIFY_QUERY_COMMAND_ID);
+    buf.Put8(kFrameControlClusterSpecificCommand).Put8(seqNum).Put8(ZCL_IDENTIFY_QUERY_COMMAND_ID);
     COMMAND_FOOTER();
 }
 
-PacketBufferHandle encodeIdentifyClusterDiscoverAttributes(EndpointId destinationEndpoint)
+PacketBufferHandle encodeIdentifyClusterDiscoverAttributes(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("DiscoverIdentifyAttributes", IDENTIFY_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_DISCOVER_ATTRIBUTES_COMMAND_ID).Put16(0x0000).Put8(0xFF);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_DISCOVER_ATTRIBUTES_COMMAND_ID).Put16(0x0000).Put8(0xFF);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute IdentifyTime
  */
-PacketBufferHandle encodeIdentifyClusterReadIdentifyTimeAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeIdentifyClusterReadIdentifyTimeAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadIdentifyIdentifyTime", IDENTIFY_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0000);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0000);
     COMMAND_FOOTER();
 }
 
-PacketBufferHandle encodeIdentifyClusterWriteIdentifyTimeAttribute(EndpointId destinationEndpoint, uint16_t identifyTime)
+PacketBufferHandle encodeIdentifyClusterWriteIdentifyTimeAttribute(uint8_t seqNum, EndpointId destinationEndpoint,
+                                                                   uint16_t identifyTime)
 {
     COMMAND_HEADER("WriteIdentifyIdentifyTime", IDENTIFY_CLUSTER_ID);
     buf.Put8(kFrameControlGlobalCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_WRITE_ATTRIBUTES_COMMAND_ID)
         .Put16(0x0000)
         .Put8(33)
@@ -2286,10 +2306,10 @@
 /*
  * Attribute ClusterRevision
  */
-PacketBufferHandle encodeIdentifyClusterReadClusterRevisionAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeIdentifyClusterReadClusterRevisionAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadIdentifyClusterRevision", IDENTIFY_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0xFFFD);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0xFFFD);
     COMMAND_FOOTER();
 }
 
@@ -2314,12 +2334,12 @@
 /*
  * Command Move
  */
-PacketBufferHandle encodeLevelControlClusterMoveCommand(EndpointId destinationEndpoint, uint8_t moveMode, uint8_t rate,
-                                                        uint8_t optionMask, uint8_t optionOverride)
+PacketBufferHandle encodeLevelControlClusterMoveCommand(uint8_t seqNum, EndpointId destinationEndpoint, uint8_t moveMode,
+                                                        uint8_t rate, uint8_t optionMask, uint8_t optionOverride)
 {
     COMMAND_HEADER("Move", LEVEL_CONTROL_CLUSTER_ID);
     buf.Put8(kFrameControlClusterSpecificCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_MOVE_COMMAND_ID)
         .Put8(moveMode)
         .Put8(rate)
@@ -2331,12 +2351,12 @@
 /*
  * Command MoveToLevel
  */
-PacketBufferHandle encodeLevelControlClusterMoveToLevelCommand(EndpointId destinationEndpoint, uint8_t level,
+PacketBufferHandle encodeLevelControlClusterMoveToLevelCommand(uint8_t seqNum, EndpointId destinationEndpoint, uint8_t level,
                                                                uint16_t transitionTime, uint8_t optionMask, uint8_t optionOverride)
 {
     COMMAND_HEADER("MoveToLevel", LEVEL_CONTROL_CLUSTER_ID);
     buf.Put8(kFrameControlClusterSpecificCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_MOVE_TO_LEVEL_COMMAND_ID)
         .Put8(level)
         .Put16(transitionTime)
@@ -2348,12 +2368,12 @@
 /*
  * Command MoveToLevelWithOnOff
  */
-PacketBufferHandle encodeLevelControlClusterMoveToLevelWithOnOffCommand(EndpointId destinationEndpoint, uint8_t level,
-                                                                        uint16_t transitionTime)
+PacketBufferHandle encodeLevelControlClusterMoveToLevelWithOnOffCommand(uint8_t seqNum, EndpointId destinationEndpoint,
+                                                                        uint8_t level, uint16_t transitionTime)
 {
     COMMAND_HEADER("MoveToLevelWithOnOff", LEVEL_CONTROL_CLUSTER_ID);
     buf.Put8(kFrameControlClusterSpecificCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_MOVE_TO_LEVEL_WITH_ON_OFF_COMMAND_ID)
         .Put8(level)
         .Put16(transitionTime);
@@ -2363,22 +2383,24 @@
 /*
  * Command MoveWithOnOff
  */
-PacketBufferHandle encodeLevelControlClusterMoveWithOnOffCommand(EndpointId destinationEndpoint, uint8_t moveMode, uint8_t rate)
+PacketBufferHandle encodeLevelControlClusterMoveWithOnOffCommand(uint8_t seqNum, EndpointId destinationEndpoint, uint8_t moveMode,
+                                                                 uint8_t rate)
 {
     COMMAND_HEADER("MoveWithOnOff", LEVEL_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlClusterSpecificCommand).Put8(kSeqNum).Put8(ZCL_MOVE_WITH_ON_OFF_COMMAND_ID).Put8(moveMode).Put8(rate);
+    buf.Put8(kFrameControlClusterSpecificCommand).Put8(seqNum).Put8(ZCL_MOVE_WITH_ON_OFF_COMMAND_ID).Put8(moveMode).Put8(rate);
     COMMAND_FOOTER();
 }
 
 /*
  * Command Step
  */
-PacketBufferHandle encodeLevelControlClusterStepCommand(EndpointId destinationEndpoint, uint8_t stepMode, uint8_t stepSize,
-                                                        uint16_t transitionTime, uint8_t optionMask, uint8_t optionOverride)
+PacketBufferHandle encodeLevelControlClusterStepCommand(uint8_t seqNum, EndpointId destinationEndpoint, uint8_t stepMode,
+                                                        uint8_t stepSize, uint16_t transitionTime, uint8_t optionMask,
+                                                        uint8_t optionOverride)
 {
     COMMAND_HEADER("Step", LEVEL_CONTROL_CLUSTER_ID);
     buf.Put8(kFrameControlClusterSpecificCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_STEP_COMMAND_ID)
         .Put8(stepMode)
         .Put8(stepSize)
@@ -2391,12 +2413,12 @@
 /*
  * Command StepWithOnOff
  */
-PacketBufferHandle encodeLevelControlClusterStepWithOnOffCommand(EndpointId destinationEndpoint, uint8_t stepMode, uint8_t stepSize,
-                                                                 uint16_t transitionTime)
+PacketBufferHandle encodeLevelControlClusterStepWithOnOffCommand(uint8_t seqNum, EndpointId destinationEndpoint, uint8_t stepMode,
+                                                                 uint8_t stepSize, uint16_t transitionTime)
 {
     COMMAND_HEADER("StepWithOnOff", LEVEL_CONTROL_CLUSTER_ID);
     buf.Put8(kFrameControlClusterSpecificCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_STEP_WITH_ON_OFF_COMMAND_ID)
         .Put8(stepMode)
         .Put8(stepSize)
@@ -2407,46 +2429,48 @@
 /*
  * Command Stop
  */
-PacketBufferHandle encodeLevelControlClusterStopCommand(EndpointId destinationEndpoint, uint8_t optionMask, uint8_t optionOverride)
+PacketBufferHandle encodeLevelControlClusterStopCommand(uint8_t seqNum, EndpointId destinationEndpoint, uint8_t optionMask,
+                                                        uint8_t optionOverride)
 {
     COMMAND_HEADER("Stop", LEVEL_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlClusterSpecificCommand).Put8(kSeqNum).Put8(ZCL_STOP_COMMAND_ID).Put8(optionMask).Put8(optionOverride);
+    buf.Put8(kFrameControlClusterSpecificCommand).Put8(seqNum).Put8(ZCL_STOP_COMMAND_ID).Put8(optionMask).Put8(optionOverride);
     COMMAND_FOOTER();
 }
 
 /*
  * Command StopWithOnOff
  */
-PacketBufferHandle encodeLevelControlClusterStopWithOnOffCommand(EndpointId destinationEndpoint)
+PacketBufferHandle encodeLevelControlClusterStopWithOnOffCommand(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("StopWithOnOff", LEVEL_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlClusterSpecificCommand).Put8(kSeqNum).Put8(ZCL_STOP_WITH_ON_OFF_COMMAND_ID);
+    buf.Put8(kFrameControlClusterSpecificCommand).Put8(seqNum).Put8(ZCL_STOP_WITH_ON_OFF_COMMAND_ID);
     COMMAND_FOOTER();
 }
 
-PacketBufferHandle encodeLevelControlClusterDiscoverAttributes(EndpointId destinationEndpoint)
+PacketBufferHandle encodeLevelControlClusterDiscoverAttributes(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("DiscoverLevelControlAttributes", LEVEL_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_DISCOVER_ATTRIBUTES_COMMAND_ID).Put16(0x0000).Put8(0xFF);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_DISCOVER_ATTRIBUTES_COMMAND_ID).Put16(0x0000).Put8(0xFF);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute CurrentLevel
  */
-PacketBufferHandle encodeLevelControlClusterReadCurrentLevelAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeLevelControlClusterReadCurrentLevelAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadLevelControlCurrentLevel", LEVEL_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0000);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0000);
     COMMAND_FOOTER();
 }
 
-PacketBufferHandle encodeLevelControlClusterReportCurrentLevelAttribute(EndpointId destinationEndpoint, uint16_t minInterval,
-                                                                        uint16_t maxInterval, uint8_t change)
+PacketBufferHandle encodeLevelControlClusterConfigureCurrentLevelAttribute(uint8_t seqNum, EndpointId destinationEndpoint,
+                                                                           uint16_t minInterval, uint16_t maxInterval,
+                                                                           uint8_t change)
 {
     COMMAND_HEADER("ReportLevelControlCurrentLevel", LEVEL_CONTROL_CLUSTER_ID);
     buf.Put8(kFrameControlGlobalCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_CONFIGURE_REPORTING_COMMAND_ID)
         .Put8(EMBER_ZCL_REPORTING_DIRECTION_REPORTED)
         .Put16(0x0000)
@@ -2460,10 +2484,10 @@
 /*
  * Attribute ClusterRevision
  */
-PacketBufferHandle encodeLevelControlClusterReadClusterRevisionAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeLevelControlClusterReadClusterRevisionAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadLevelControlClusterRevision", LEVEL_CONTROL_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0xFFFD);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0xFFFD);
     COMMAND_FOOTER();
 }
 
@@ -2483,56 +2507,56 @@
 /*
  * Command Off
  */
-PacketBufferHandle encodeOnOffClusterOffCommand(EndpointId destinationEndpoint)
+PacketBufferHandle encodeOnOffClusterOffCommand(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("Off", ON_OFF_CLUSTER_ID);
-    buf.Put8(kFrameControlClusterSpecificCommand).Put8(kSeqNum).Put8(ZCL_OFF_COMMAND_ID);
+    buf.Put8(kFrameControlClusterSpecificCommand).Put8(seqNum).Put8(ZCL_OFF_COMMAND_ID);
     COMMAND_FOOTER();
 }
 
 /*
  * Command On
  */
-PacketBufferHandle encodeOnOffClusterOnCommand(EndpointId destinationEndpoint)
+PacketBufferHandle encodeOnOffClusterOnCommand(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("On", ON_OFF_CLUSTER_ID);
-    buf.Put8(kFrameControlClusterSpecificCommand).Put8(kSeqNum).Put8(ZCL_ON_COMMAND_ID);
+    buf.Put8(kFrameControlClusterSpecificCommand).Put8(seqNum).Put8(ZCL_ON_COMMAND_ID);
     COMMAND_FOOTER();
 }
 
 /*
  * Command Toggle
  */
-PacketBufferHandle encodeOnOffClusterToggleCommand(EndpointId destinationEndpoint)
+PacketBufferHandle encodeOnOffClusterToggleCommand(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("Toggle", ON_OFF_CLUSTER_ID);
-    buf.Put8(kFrameControlClusterSpecificCommand).Put8(kSeqNum).Put8(ZCL_TOGGLE_COMMAND_ID);
+    buf.Put8(kFrameControlClusterSpecificCommand).Put8(seqNum).Put8(ZCL_TOGGLE_COMMAND_ID);
     COMMAND_FOOTER();
 }
 
-PacketBufferHandle encodeOnOffClusterDiscoverAttributes(EndpointId destinationEndpoint)
+PacketBufferHandle encodeOnOffClusterDiscoverAttributes(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("DiscoverOnOffAttributes", ON_OFF_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_DISCOVER_ATTRIBUTES_COMMAND_ID).Put16(0x0000).Put8(0xFF);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_DISCOVER_ATTRIBUTES_COMMAND_ID).Put16(0x0000).Put8(0xFF);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute OnOff
  */
-PacketBufferHandle encodeOnOffClusterReadOnOffAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeOnOffClusterReadOnOffAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadOnOffOnOff", ON_OFF_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0000);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0000);
     COMMAND_FOOTER();
 }
 
-PacketBufferHandle encodeOnOffClusterReportOnOffAttribute(EndpointId destinationEndpoint, uint16_t minInterval,
-                                                          uint16_t maxInterval)
+PacketBufferHandle encodeOnOffClusterConfigureOnOffAttribute(uint8_t seqNum, EndpointId destinationEndpoint, uint16_t minInterval,
+                                                             uint16_t maxInterval)
 {
     COMMAND_HEADER("ReportOnOffOnOff", ON_OFF_CLUSTER_ID);
     buf.Put8(kFrameControlGlobalCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_CONFIGURE_REPORTING_COMMAND_ID)
         .Put8(EMBER_ZCL_REPORTING_DIRECTION_REPORTED)
         .Put16(0x0000)
@@ -2545,10 +2569,10 @@
 /*
  * Attribute ClusterRevision
  */
-PacketBufferHandle encodeOnOffClusterReadClusterRevisionAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeOnOffClusterReadClusterRevisionAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadOnOffClusterRevision", ON_OFF_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0xFFFD);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0xFFFD);
     COMMAND_FOOTER();
 }
 
@@ -2576,9 +2600,9 @@
 /*
  * Command AddScene
  */
-PacketBufferHandle encodeScenesClusterAddSceneCommand(EndpointId destinationEndpoint, uint16_t groupId, uint8_t sceneId,
-                                                      uint16_t transitionTime, char * sceneName, chip::ClusterId clusterId,
-                                                      uint8_t length, uint8_t value)
+PacketBufferHandle encodeScenesClusterAddSceneCommand(uint8_t seqNum, EndpointId destinationEndpoint, uint16_t groupId,
+                                                      uint8_t sceneId, uint16_t transitionTime, char * sceneName,
+                                                      chip::ClusterId clusterId, uint8_t length, uint8_t value)
 {
     COMMAND_HEADER("AddScene", SCENES_CLUSTER_ID);
     size_t sceneNameStrLen = strlen(sceneName);
@@ -2588,7 +2612,7 @@
         return PacketBufferHandle();
     }
     buf.Put8(kFrameControlClusterSpecificCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_ADD_SCENE_COMMAND_ID)
         .Put16(groupId)
         .Put8(sceneId)
@@ -2604,22 +2628,22 @@
 /*
  * Command GetSceneMembership
  */
-PacketBufferHandle encodeScenesClusterGetSceneMembershipCommand(EndpointId destinationEndpoint, uint16_t groupId)
+PacketBufferHandle encodeScenesClusterGetSceneMembershipCommand(uint8_t seqNum, EndpointId destinationEndpoint, uint16_t groupId)
 {
     COMMAND_HEADER("GetSceneMembership", SCENES_CLUSTER_ID);
-    buf.Put8(kFrameControlClusterSpecificCommand).Put8(kSeqNum).Put8(ZCL_GET_SCENE_MEMBERSHIP_COMMAND_ID).Put16(groupId);
+    buf.Put8(kFrameControlClusterSpecificCommand).Put8(seqNum).Put8(ZCL_GET_SCENE_MEMBERSHIP_COMMAND_ID).Put16(groupId);
     COMMAND_FOOTER();
 }
 
 /*
  * Command RecallScene
  */
-PacketBufferHandle encodeScenesClusterRecallSceneCommand(EndpointId destinationEndpoint, uint16_t groupId, uint8_t sceneId,
-                                                         uint16_t transitionTime)
+PacketBufferHandle encodeScenesClusterRecallSceneCommand(uint8_t seqNum, EndpointId destinationEndpoint, uint16_t groupId,
+                                                         uint8_t sceneId, uint16_t transitionTime)
 {
     COMMAND_HEADER("RecallScene", SCENES_CLUSTER_ID);
     buf.Put8(kFrameControlClusterSpecificCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_RECALL_SCENE_COMMAND_ID)
         .Put16(groupId)
         .Put8(sceneId)
@@ -2630,107 +2654,110 @@
 /*
  * Command RemoveAllScenes
  */
-PacketBufferHandle encodeScenesClusterRemoveAllScenesCommand(EndpointId destinationEndpoint, uint16_t groupId)
+PacketBufferHandle encodeScenesClusterRemoveAllScenesCommand(uint8_t seqNum, EndpointId destinationEndpoint, uint16_t groupId)
 {
     COMMAND_HEADER("RemoveAllScenes", SCENES_CLUSTER_ID);
-    buf.Put8(kFrameControlClusterSpecificCommand).Put8(kSeqNum).Put8(ZCL_REMOVE_ALL_SCENES_COMMAND_ID).Put16(groupId);
+    buf.Put8(kFrameControlClusterSpecificCommand).Put8(seqNum).Put8(ZCL_REMOVE_ALL_SCENES_COMMAND_ID).Put16(groupId);
     COMMAND_FOOTER();
 }
 
 /*
  * Command RemoveScene
  */
-PacketBufferHandle encodeScenesClusterRemoveSceneCommand(EndpointId destinationEndpoint, uint16_t groupId, uint8_t sceneId)
+PacketBufferHandle encodeScenesClusterRemoveSceneCommand(uint8_t seqNum, EndpointId destinationEndpoint, uint16_t groupId,
+                                                         uint8_t sceneId)
 {
     COMMAND_HEADER("RemoveScene", SCENES_CLUSTER_ID);
-    buf.Put8(kFrameControlClusterSpecificCommand).Put8(kSeqNum).Put8(ZCL_REMOVE_SCENE_COMMAND_ID).Put16(groupId).Put8(sceneId);
+    buf.Put8(kFrameControlClusterSpecificCommand).Put8(seqNum).Put8(ZCL_REMOVE_SCENE_COMMAND_ID).Put16(groupId).Put8(sceneId);
     COMMAND_FOOTER();
 }
 
 /*
  * Command StoreScene
  */
-PacketBufferHandle encodeScenesClusterStoreSceneCommand(EndpointId destinationEndpoint, uint16_t groupId, uint8_t sceneId)
+PacketBufferHandle encodeScenesClusterStoreSceneCommand(uint8_t seqNum, EndpointId destinationEndpoint, uint16_t groupId,
+                                                        uint8_t sceneId)
 {
     COMMAND_HEADER("StoreScene", SCENES_CLUSTER_ID);
-    buf.Put8(kFrameControlClusterSpecificCommand).Put8(kSeqNum).Put8(ZCL_STORE_SCENE_COMMAND_ID).Put16(groupId).Put8(sceneId);
+    buf.Put8(kFrameControlClusterSpecificCommand).Put8(seqNum).Put8(ZCL_STORE_SCENE_COMMAND_ID).Put16(groupId).Put8(sceneId);
     COMMAND_FOOTER();
 }
 
 /*
  * Command ViewScene
  */
-PacketBufferHandle encodeScenesClusterViewSceneCommand(EndpointId destinationEndpoint, uint16_t groupId, uint8_t sceneId)
+PacketBufferHandle encodeScenesClusterViewSceneCommand(uint8_t seqNum, EndpointId destinationEndpoint, uint16_t groupId,
+                                                       uint8_t sceneId)
 {
     COMMAND_HEADER("ViewScene", SCENES_CLUSTER_ID);
-    buf.Put8(kFrameControlClusterSpecificCommand).Put8(kSeqNum).Put8(ZCL_VIEW_SCENE_COMMAND_ID).Put16(groupId).Put8(sceneId);
+    buf.Put8(kFrameControlClusterSpecificCommand).Put8(seqNum).Put8(ZCL_VIEW_SCENE_COMMAND_ID).Put16(groupId).Put8(sceneId);
     COMMAND_FOOTER();
 }
 
-PacketBufferHandle encodeScenesClusterDiscoverAttributes(EndpointId destinationEndpoint)
+PacketBufferHandle encodeScenesClusterDiscoverAttributes(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("DiscoverScenesAttributes", SCENES_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_DISCOVER_ATTRIBUTES_COMMAND_ID).Put16(0x0000).Put8(0xFF);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_DISCOVER_ATTRIBUTES_COMMAND_ID).Put16(0x0000).Put8(0xFF);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute SceneCount
  */
-PacketBufferHandle encodeScenesClusterReadSceneCountAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeScenesClusterReadSceneCountAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadScenesSceneCount", SCENES_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0000);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0000);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute CurrentScene
  */
-PacketBufferHandle encodeScenesClusterReadCurrentSceneAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeScenesClusterReadCurrentSceneAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadScenesCurrentScene", SCENES_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0001);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0001);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute CurrentGroup
  */
-PacketBufferHandle encodeScenesClusterReadCurrentGroupAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeScenesClusterReadCurrentGroupAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadScenesCurrentGroup", SCENES_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0002);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0002);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute SceneValid
  */
-PacketBufferHandle encodeScenesClusterReadSceneValidAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeScenesClusterReadSceneValidAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadScenesSceneValid", SCENES_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0003);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0003);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute NameSupport
  */
-PacketBufferHandle encodeScenesClusterReadNameSupportAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeScenesClusterReadNameSupportAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadScenesNameSupport", SCENES_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0004);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0004);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute ClusterRevision
  */
-PacketBufferHandle encodeScenesClusterReadClusterRevisionAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeScenesClusterReadClusterRevisionAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadScenesClusterRevision", SCENES_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0xFFFD);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0xFFFD);
     COMMAND_FOOTER();
 }
 
@@ -2746,30 +2773,31 @@
 | * ClusterRevision                                                   | 0xFFFD |
 \*----------------------------------------------------------------------------*/
 
-PacketBufferHandle encodeTemperatureMeasurementClusterDiscoverAttributes(EndpointId destinationEndpoint)
+PacketBufferHandle encodeTemperatureMeasurementClusterDiscoverAttributes(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("DiscoverTemperatureMeasurementAttributes", TEMP_MEASUREMENT_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_DISCOVER_ATTRIBUTES_COMMAND_ID).Put16(0x0000).Put8(0xFF);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_DISCOVER_ATTRIBUTES_COMMAND_ID).Put16(0x0000).Put8(0xFF);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute MeasuredValue
  */
-PacketBufferHandle encodeTemperatureMeasurementClusterReadMeasuredValueAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeTemperatureMeasurementClusterReadMeasuredValueAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadTemperatureMeasurementMeasuredValue", TEMP_MEASUREMENT_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0000);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0000);
     COMMAND_FOOTER();
 }
 
-PacketBufferHandle encodeTemperatureMeasurementClusterReportMeasuredValueAttribute(EndpointId destinationEndpoint,
-                                                                                   uint16_t minInterval, uint16_t maxInterval,
-                                                                                   int16_t change)
+PacketBufferHandle encodeTemperatureMeasurementClusterConfigureMeasuredValueAttribute(uint8_t seqNum,
+                                                                                      EndpointId destinationEndpoint,
+                                                                                      uint16_t minInterval, uint16_t maxInterval,
+                                                                                      int16_t change)
 {
     COMMAND_HEADER("ReportTemperatureMeasurementMeasuredValue", TEMP_MEASUREMENT_CLUSTER_ID);
     buf.Put8(kFrameControlGlobalCommand)
-        .Put8(kSeqNum)
+        .Put8(seqNum)
         .Put8(ZCL_CONFIGURE_REPORTING_COMMAND_ID)
         .Put8(EMBER_ZCL_REPORTING_DIRECTION_REPORTED)
         .Put16(0x0000)
@@ -2783,29 +2811,29 @@
 /*
  * Attribute MinMeasuredValue
  */
-PacketBufferHandle encodeTemperatureMeasurementClusterReadMinMeasuredValueAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeTemperatureMeasurementClusterReadMinMeasuredValueAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadTemperatureMeasurementMinMeasuredValue", TEMP_MEASUREMENT_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0001);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0001);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute MaxMeasuredValue
  */
-PacketBufferHandle encodeTemperatureMeasurementClusterReadMaxMeasuredValueAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeTemperatureMeasurementClusterReadMaxMeasuredValueAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadTemperatureMeasurementMaxMeasuredValue", TEMP_MEASUREMENT_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0002);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0002);
     COMMAND_FOOTER();
 }
 
 /*
  * Attribute ClusterRevision
  */
-PacketBufferHandle encodeTemperatureMeasurementClusterReadClusterRevisionAttribute(EndpointId destinationEndpoint)
+PacketBufferHandle encodeTemperatureMeasurementClusterReadClusterRevisionAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("ReadTemperatureMeasurementClusterRevision", TEMP_MEASUREMENT_CLUSTER_ID);
-    buf.Put8(kFrameControlGlobalCommand).Put8(kSeqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0xFFFD);
+    buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0xFFFD);
     COMMAND_FOOTER();
 }
diff --git a/src/app/server/DataModelHandler.cpp b/src/app/server/DataModelHandler.cpp
index 9aa9732..b3b60f8 100644
--- a/src/app/server/DataModelHandler.cpp
+++ b/src/app/server/DataModelHandler.cpp
@@ -22,8 +22,11 @@
 
 #include <app/server/DataModelHandler.h>
 
+#if __has_include("gen/endpoint_config.h")
+#define USE_ZAP_CONFIG 1
 #include <app/util/attribute-storage.h>
 #include <app/util/util.h>
+#endif
 #include <support/logging/CHIPLogging.h>
 
 #ifdef EMBER_AF_PLUGIN_REPORTING_SERVER
@@ -40,6 +43,8 @@
 
 void InitDataModelHandler()
 {
+#ifdef USE_ZAP_CONFIG
+    ChipLogProgress(Zcl, "Using ZAP configuration...");
     emberAfEndpointConfigure();
     emberAfInit();
 
@@ -57,10 +62,12 @@
 #ifdef EMBER_AF_PLUGIN_IAS_ZONE_SERVER
     emberAfPluginIasZoneServerStackStatusCallback(status);
 #endif
+#endif
 }
 
 void HandleDataModelMessage(NodeId nodeId, System::PacketBufferHandle buffer)
 {
+#ifdef USE_ZAP_CONFIG
     EmberApsFrame frame;
     bool ok = extractApsFrame(buffer->Start(), buffer->DataLength(), &frame) > 0;
     if (ok)
@@ -89,4 +96,5 @@
     {
         ChipLogDetail(Zcl, "Data model processing failure!");
     }
+#endif
 }
diff --git a/src/app/util/CHIPDeviceCallbacksMgr.cpp b/src/app/util/CHIPDeviceCallbacksMgr.cpp
new file mode 100644
index 0000000..9c1bc2b
--- /dev/null
+++ b/src/app/util/CHIPDeviceCallbacksMgr.cpp
@@ -0,0 +1,122 @@
+/*
+ *
+ *    Copyright (c) 2020 Project CHIP Authors
+ *    All rights reserved.
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+/**
+ * @file
+ *    This file contains implementations for the CallbacksMgr class. The object of this
+ *    class will be used by Controller applications to interact with ZCL messages.
+ *    This class provide mechanism to store callbacks for global message dispatching
+ *    across the ZCL stack.
+ */
+
+#include "CHIPDeviceCallbacksMgr.h"
+
+#include <core/CHIPCore.h>
+#include <inttypes.h>
+#include <support/ReturnMacros.h>
+
+namespace {
+struct ResponseCallbackInfo
+{
+    chip::NodeId nodeId;
+    uint8_t sequenceNumber;
+
+    bool operator==(ResponseCallbackInfo const & other) { return nodeId == other.nodeId && sequenceNumber == other.sequenceNumber; }
+};
+
+struct ReportCallbackInfo
+{
+    chip::NodeId nodeId;
+    chip::EndpointId endpointId;
+    chip::ClusterId clusterId;
+    chip::AttributeId attributeId;
+
+    bool operator==(ReportCallbackInfo const & other)
+    {
+        return nodeId == other.nodeId && endpointId == other.endpointId && clusterId == other.clusterId &&
+            attributeId == other.attributeId;
+    }
+};
+} // namespace
+
+namespace chip {
+namespace app {
+
+CHIP_ERROR CHIPDeviceCallbacksMgr::AddResponseCallback(NodeId nodeId, uint8_t sequenceNumber,
+                                                       Callback::Cancelable * onSuccessCallback,
+                                                       Callback::Cancelable * onFailureCallback)
+{
+    VerifyOrReturnError(onSuccessCallback != nullptr, CHIP_ERROR_INVALID_ARGUMENT);
+    VerifyOrReturnError(onFailureCallback != nullptr, CHIP_ERROR_INVALID_ARGUMENT);
+
+    ResponseCallbackInfo info = { nodeId, sequenceNumber };
+    memcpy(&onSuccessCallback->mInfoPtr, &info, sizeof(info));
+    memcpy(&onFailureCallback->mInfoPtr, &info, sizeof(info));
+
+    // If some callbacks have already been registered for the same ResponseCallbackInfo, it usually means that the response
+    // has not been received for a previous command with the same sequenceNumber. Cancel the previously registered callbacks.
+    CancelCallback(info, mResponsesSuccess);
+    CancelCallback(info, mResponsesFailure);
+
+    mResponsesSuccess.Enqueue(onSuccessCallback);
+    mResponsesFailure.Enqueue(onFailureCallback);
+    return CHIP_NO_ERROR;
+}
+
+CHIP_ERROR CHIPDeviceCallbacksMgr::GetResponseCallback(NodeId nodeId, uint8_t sequenceNumber,
+                                                       Callback::Cancelable ** onSuccessCallback,
+                                                       Callback::Cancelable ** onFailureCallback)
+{
+    ResponseCallbackInfo info = { nodeId, sequenceNumber };
+
+    ReturnErrorOnFailure(GetCallback(info, mResponsesSuccess, onSuccessCallback));
+    (*onSuccessCallback)->Cancel();
+
+    ReturnErrorOnFailure(GetCallback(info, mResponsesFailure, onFailureCallback));
+    (*onFailureCallback)->Cancel();
+
+    return CHIP_NO_ERROR;
+}
+
+CHIP_ERROR CHIPDeviceCallbacksMgr::AddReportCallback(NodeId nodeId, EndpointId endpointId, ClusterId clusterId,
+                                                     AttributeId attributeId, Callback::Cancelable * onReportCallback)
+{
+    VerifyOrReturnError(onReportCallback != nullptr, CHIP_ERROR_INVALID_ARGUMENT);
+
+    ReportCallbackInfo info = { nodeId, endpointId, clusterId, attributeId };
+    memmove(&onReportCallback->mInfoPtr, &info, sizeof(info));
+
+    // If a callback has already been registered for the same ReportCallbackInfo, let's cancel it.
+    CancelCallback(info, mReports);
+
+    mReports.Enqueue(onReportCallback);
+    return CHIP_NO_ERROR;
+}
+
+CHIP_ERROR CHIPDeviceCallbacksMgr::GetReportCallback(NodeId nodeId, EndpointId endpointId, ClusterId clusterId,
+                                                     AttributeId attributeId, Callback::Cancelable ** onReportCallback)
+{
+    ReportCallbackInfo info = { nodeId, endpointId, clusterId, attributeId };
+
+    ReturnErrorOnFailure(GetCallback(info, mReports, onReportCallback));
+
+    return CHIP_NO_ERROR;
+}
+
+} // namespace app
+} // namespace chip
diff --git a/src/app/util/CHIPDeviceCallbacksMgr.h b/src/app/util/CHIPDeviceCallbacksMgr.h
new file mode 100644
index 0000000..dfb9b67
--- /dev/null
+++ b/src/app/util/CHIPDeviceCallbacksMgr.h
@@ -0,0 +1,100 @@
+/*
+ *
+ *    Copyright (c) 2020 Project CHIP Authors
+ *    All rights reserved.
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+/**
+ * @file
+ *    This file contains definitions for the CallbacksMgr class. The object of this
+ *    class will be used by Controller applications to interact with ZCL messages.
+ *    This class provide mechanism to store callbacks for global message dispatching
+ *    across the ZCL stack.
+ */
+
+#pragma once
+
+#include "basic-types.h"
+#include <core/CHIPCallback.h>
+#include <core/CHIPError.h>
+#include <support/DLLUtil.h>
+
+namespace chip {
+namespace app {
+
+class DLL_EXPORT CHIPDeviceCallbacksMgr
+{
+public:
+    CHIPDeviceCallbacksMgr(const CHIPDeviceCallbacksMgr &)  = delete;
+    CHIPDeviceCallbacksMgr(const CHIPDeviceCallbacksMgr &&) = delete;
+    CHIPDeviceCallbacksMgr & operator=(const CHIPDeviceCallbacksMgr &) = delete;
+
+    static CHIPDeviceCallbacksMgr & GetInstance()
+    {
+        static CHIPDeviceCallbacksMgr instance;
+        return instance;
+    }
+
+    CHIP_ERROR AddResponseCallback(NodeId nodeId, uint8_t sequenceNumber, Callback::Cancelable * onSuccessCallback,
+                                   Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR GetResponseCallback(NodeId nodeId, uint8_t sequenceNumber, Callback::Cancelable ** onSuccessCallback,
+                                   Callback::Cancelable ** onFailureCallback);
+
+    CHIP_ERROR AddReportCallback(NodeId nodeId, EndpointId endpointId, ClusterId clusterId, AttributeId attributeId,
+                                 Callback::Cancelable * onReportCallback);
+    CHIP_ERROR GetReportCallback(NodeId nodeId, EndpointId endpointId, ClusterId clusterId, AttributeId attributeId,
+                                 Callback::Cancelable ** onReportCallback);
+
+private:
+    CHIPDeviceCallbacksMgr() {}
+
+    template <typename T>
+    CHIP_ERROR CancelCallback(T & info, Callback::CallbackDeque & queue)
+    {
+        Callback::Cancelable * ca = nullptr;
+        CHIP_ERROR err            = GetCallback(info, queue, &ca);
+        if (CHIP_NO_ERROR == err)
+        {
+            ca->Cancel();
+        }
+
+        return err;
+    }
+
+    template <typename T>
+    CHIP_ERROR GetCallback(T & info, Callback::CallbackDeque & queue, Callback::Cancelable ** callback)
+    {
+        Callback::Cancelable * ca = &queue;
+        while (ca != nullptr && ca->mNext != &queue)
+        {
+            if (*reinterpret_cast<T *>(&ca->mNext->mInfoPtr) == info)
+            {
+                *callback = ca->mNext;
+                return CHIP_NO_ERROR;
+            }
+
+            ca = ca->mNext;
+        }
+
+        return CHIP_ERROR_KEY_NOT_FOUND;
+    }
+
+    Callback::CallbackDeque mResponsesSuccess;
+    Callback::CallbackDeque mResponsesFailure;
+    Callback::CallbackDeque mReports;
+};
+
+} // namespace app
+} // namespace chip
diff --git a/src/app/zap-templates/app-templates.json b/src/app/zap-templates/app-templates.json
index ed6fe36..78f2924 100644
--- a/src/app/zap-templates/app-templates.json
+++ b/src/app/zap-templates/app-templates.json
@@ -1,7 +1,11 @@
 {
     "name": "CHIP Application templates",
     "version": "chip-v1",
-    "helpers": ["common/StringHelper.js", "templates/app/helper.js"],
+    "helpers": [
+        "common/StringHelper.js",
+        "templates/app/helper.js",
+        "templates/chip/helper.js"
+    ],
     "override": "common/override.js",
     "partials": [
         {
@@ -9,6 +13,14 @@
             "path": "partials/header.zapt"
         },
         {
+            "name": "clusters_header",
+            "path": "partials/clusters_header.zapt"
+        },
+        {
+            "name": "cluster_header",
+            "path": "partials/cluster_header.zapt"
+        },
+        {
             "name": "command_handler_cluster_commands",
             "path": "partials/command_handler_cluster_commands.zapt"
         }
@@ -98,6 +110,26 @@
             "path": "templates/app/print-cluster.zapt",
             "name": "ZCL print-cluster header",
             "output": "print-cluster.h"
+        },
+        {
+            "path": "templates/app/CHIPClientCallbacks.zapt",
+            "name": "CHIP Client Callbacks header",
+            "output": "CHIPClientCallbacks.h"
+        },
+        {
+            "path": "templates/app/CHIPClientCallbacks-src.zapt",
+            "name": "CHIP Client Callbacks",
+            "output": "CHIPClientCallbacks.cpp"
+        },
+        {
+            "path": "templates/chip/CHIPClustersObjc.zapt",
+            "name": "Objc ZCL API Header",
+            "output": "CHIPClustersObjc.h"
+        },
+        {
+            "path": "templates/chip/CHIPClustersObjc-src.zapt",
+            "name": "Objc ZCL API",
+            "output": "CHIPClustersObjc.mm"
         }
     ]
 }
diff --git a/src/app/zap-templates/chip-templates.json b/src/app/zap-templates/chip-templates.json
index bedcd28..812d1db 100644
--- a/src/app/zap-templates/chip-templates.json
+++ b/src/app/zap-templates/chip-templates.json
@@ -33,16 +33,6 @@
             "output": "src/controller/CHIPClusters.cpp"
         },
         {
-            "path": "templates/chip/CHIPClustersObjc.zapt",
-            "name": "Objc ZCL API Header",
-            "output": "/src/darwin/Framework/CHIP/CHIPClustersObjc.h"
-        },
-        {
-            "path": "templates/chip/CHIPClustersObjc-src.zapt",
-            "name": "Objc ZCL API",
-            "output": "/src/darwin/Framework/CHIP/CHIPClustersObjc.mm"
-        },
-        {
             "path": "templates/chip/chip-zcl-zpro-codec-api.zapt",
             "name": "CHIP ZCL API Header",
             "output": "src/app/chip-zcl-zpro-codec-api.h"
diff --git a/src/app/zap-templates/partials/clusters_header.zapt b/src/app/zap-templates/partials/clusters_header.zapt
index 3b56c38..0dfef70 100644
--- a/src/app/zap-templates/partials/clusters_header.zapt
+++ b/src/app/zap-templates/partials/clusters_header.zapt
@@ -1,7 +1,7 @@
 {{pad '/*' 78 '-'}}*\
 {{pad "| Cluster Name" 70 ' '}}{{pad "|   ID" 9 ' '}}|
 {{pad "|" 70 '-'}}{{pad "+" 9 '-'}}|
-{{#chip_server_clusters}}
+{{#chip_clusters}}
 {{pad (concat "| " (asCamelCased name false)) 70  " "}}{{pad (concat "| " (asHex code 4)) 9 ' '}}|
-{{/chip_server_clusters}}
+{{/chip_clusters}}
 {{pad '\*' 78 '-'}}*/
diff --git a/src/app/zap-templates/templates/app/CHIPClientCallbacks-src.zapt b/src/app/zap-templates/templates/app/CHIPClientCallbacks-src.zapt
new file mode 100644
index 0000000..d05e75a
--- /dev/null
+++ b/src/app/zap-templates/templates/app/CHIPClientCallbacks-src.zapt
@@ -0,0 +1,839 @@
+{{> header}}
+
+#include "gen/CHIPClientCallbacks.h"
+
+#include "gen/enums.h"
+#include <app/util/af.h>
+#include <app/util/af-enums.h>
+#include <app/util/basic-types.h>
+#include <app/util/CHIPDeviceCallbacksMgr.h>
+#include <core/CHIPEncoding.h>
+#include <support/SafeInt.h>
+#include <support/logging/CHIPLogging.h>
+
+using namespace ::chip;
+
+#define CHECK_MESSAGE_LENGTH(value)                                                                                                \
+    if (!chip::CanCastTo<uint16_t>(value))                                                                                         \
+    {                                                                                                                              \
+        ChipLogError(Zcl, "CHECK_MESSAGE_LENGTH expects a uint16_t value, got: %d", value);                                        \
+        if (onFailureCallback != nullptr)                                                                                          \
+        {                                                                                                                          \
+            Callback::Callback<DefaultFailureCallback> * cb =                                                                      \
+                Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);                                     \
+            cb->mCall(cb->mContext, static_cast<uint8_t>(EMBER_ZCL_STATUS_INVALID_VALUE));                                         \
+        }                                                                                                                          \
+        return true;                                                                                                               \
+    }                                                                                                                              \
+                                                                                                                                   \
+    if (messageLen < value)                                                                                                        \
+    {                                                                                                                              \
+        ChipLogError(Zcl, "Unexpected response length: %d", messageLen);                                                           \
+        if (onFailureCallback != nullptr)                                                                                          \
+        {                                                                                                                          \
+            Callback::Callback<DefaultFailureCallback> * cb =                                                                      \
+                Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);                                     \
+            cb->mCall(cb->mContext, static_cast<uint8_t>(EMBER_ZCL_STATUS_INVALID_VALUE));                                         \
+        }                                                                                                                          \
+        return true;                                                                                                               \
+    }                                                                                                                              \
+                                                                                                                                   \
+    messageLen = static_cast<uint16_t>(messageLen - static_cast<uint16_t>(value));
+
+#define GET_RESPONSE_CALLBACKS(name)                                                                                               \
+    Callback::Cancelable * onSuccessCallback = nullptr;                                                                            \
+    Callback::Cancelable * onFailureCallback = nullptr;                                                                            \
+    NodeId sourceId                          = emberAfCurrentCommand()->source;                                                    \
+    uint8_t sequenceNumber                   = emberAfCurrentCommand()->seqNum;                                                    \
+    CHIP_ERROR err = gCallbacks.GetResponseCallback(sourceId, sequenceNumber, &onSuccessCallback, &onFailureCallback);             \
+                                                                                                                                   \
+    if (CHIP_NO_ERROR != err)                                                                                                      \
+    {                                                                                                                              \
+        if (onSuccessCallback == nullptr)                                                                                          \
+        {                                                                                                                          \
+            ChipLogDetail(Zcl, "%s: Missing success callback", name);                                                              \
+        }                                                                                                                          \
+                                                                                                                                   \
+        if (onFailureCallback == nullptr)                                                                                          \
+        {                                                                                                                          \
+            ChipLogDetail(Zcl, "%s: Missing failure callback", name);                                                              \
+        }                                                                                                                          \
+                                                                                                                                   \
+        return true;                                                                                                               \
+    }
+
+#define GET_REPORT_CALLBACK(name)                                                                                                  \
+    Callback::Cancelable * onReportCallback = nullptr;                                                                             \
+    CHIP_ERROR err = gCallbacks.GetReportCallback(sourceId, endpointId, clusterId, attributeId, &onReportCallback);                \
+                                                                                                                                   \
+    if (CHIP_NO_ERROR != err)                                                                                                      \
+    {                                                                                                                              \
+        if (onReportCallback == nullptr)                                                                                           \
+        {                                                                                                                          \
+            ChipLogDetail(Zcl, "%s: Missing report callback", name);                                                               \
+        }                                                                                                                          \
+                                                                                                                                   \
+        return true;                                                                                                               \
+    }
+
+void LogStatus(uint8_t status)
+{
+    switch (status)
+    {
+    case EMBER_ZCL_STATUS_SUCCESS:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_SUCCESS (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_FAILURE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_FAILURE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_NOT_AUTHORIZED:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_NOT_AUTHORIZED (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_MALFORMED_COMMAND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_MALFORMED_COMMAND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNSUP_COMMAND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNSUP_CLUSTER_COMMAND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNSUP_GENERAL_COMMAND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNSUP_GENERAL_COMMAND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNSUP_MANUF_CLUSTER_COMMAND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNSUP_MANUF_CLUSTER_COMMAND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNSUP_MANUF_GENERAL_COMMAND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNSUP_MANUF_GENERAL_COMMAND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INVALID_FIELD:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INVALID_FIELD (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNSUPPORTED_ATTRIBUTE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNSUPPORTED_ATTRIBUTE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INVALID_VALUE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INVALID_VALUE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_READ_ONLY:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_READ_ONLY (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INSUFFICIENT_SPACE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INSUFFICIENT_SPACE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_DUPLICATE_EXISTS:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_DUPLICATE_EXISTS (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_NOT_FOUND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_NOT_FOUND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNREPORTABLE_ATTRIBUTE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNREPORTABLE_ATTRIBUTE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INVALID_DATA_TYPE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INVALID_DATA_TYPE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INVALID_SELECTOR:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INVALID_SELECTOR (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_WRITE_ONLY:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_WRITE_ONLY (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INCONSISTENT_STARTUP_STATE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INCONSISTENT_STARTUP_STATE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_DEFINED_OUT_OF_BAND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_DEFINED_OUT_Of_BAND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_ACTION_DENIED:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_ACTION_DENIED (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_TIMEOUT:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_TIMEOUT (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_ABORT:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_ABORT (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INVALID_IMAGE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INVALID_IMAGE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_WAIT_FOR_DATA:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_WAIT_FOR_DATA (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_NO_IMAGE_AVAILABLE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_NO_IMAGE_AVAILABLE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_REQUIRE_MORE_IMAGE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_REQUIRE_MORE_IMAGE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_HARDWARE_FAILURE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_HARDWARE_FAILURE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_SOFTWARE_FAILURE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_SOFTWARE_FAILURE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNSUPPORTED_CLUSTER:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNSUPPORTED_CLUSTER (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_LIMIT_REACHED:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_LIMIT_REACHED (0x%02x)", status);
+        break;
+    default:
+        ChipLogError(Zcl, "Unknow status: 0x%02x", status);
+        break;
+    }
+}
+
+// Singleton instance of the callbacks manager
+app::CHIPDeviceCallbacksMgr & gCallbacks = app::CHIPDeviceCallbacksMgr::GetInstance();
+
+bool emberAfDefaultResponseCallback(ClusterId clusterId, CommandId commandId, EmberAfStatus status)
+{
+    ChipLogProgress(Zcl, "DefaultResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+    ChipLogProgress(Zcl, "  CommandId: 0x%02x", commandId);
+    LogStatus(status);
+
+    GET_RESPONSE_CALLBACKS("emberAfDefaultResponseCallback");
+    if (status == EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultSuccessCallback> * cb = Callback::Callback<DefaultSuccessCallback>::FromCancelable(onSuccessCallback);
+        cb->mCall(cb->mContext);
+    }
+    else
+    {
+        Callback::Callback<DefaultFailureCallback> * cb = Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, static_cast<uint8_t>(status));
+    }
+
+    return true;
+}
+
+bool emberAfReadAttributesResponseCallback(ClusterId clusterId, uint8_t * message, uint16_t messageLen)
+{
+    ChipLogProgress(Zcl, "ReadAttributesResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+
+    GET_RESPONSE_CALLBACKS("emberAfReadAttributesResponseCallback");
+
+    // struct readAttributeResponseRecord[]
+    while (messageLen)
+    {
+        CHECK_MESSAGE_LENGTH(2);
+        uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+        ChipLogProgress(Zcl, "  attributeId: 0x%04x", attributeId);
+
+        CHECK_MESSAGE_LENGTH(1);
+        uint8_t status = chip::Encoding::Read8(message); // zclStatus
+        LogStatus(status);
+
+        if (status == EMBER_ZCL_STATUS_SUCCESS)
+        {
+            CHECK_MESSAGE_LENGTH(1);
+            uint8_t attributeType = chip::Encoding::Read8(message);
+            ChipLogProgress(Zcl, "  attributeType: 0x%02x", attributeType);
+
+            switch (attributeType)
+            {
+                case 0x00: // nodata / No data
+                case 0x0A: // data24 / 24-bit data
+                case 0x0C: // data40 / 40-bit data
+                case 0x0D: // data48 / 48-bit data
+                case 0x0E: // data56 / 56-bit data
+                case 0x1A: // map24 / 24-bit bitmap
+                case 0x1C: // map40 / 40-bit bitmap
+                case 0x1D: // map48 / 48-bit bitmap
+                case 0x1E: // map56 / 56-bit bitmap
+                case 0x22: // uint24 / Unsigned 24-bit integer
+                case 0x24: // uint40 / Unsigned 40-bit integer
+                case 0x25: // uint48 / Unsigned 48-bit integer
+                case 0x26: // uint56 / Unsigned 56-bit integer
+                case 0x2A: // int24 / Signed 24-bit integer
+                case 0x2C: // int40 / Signed 40-bit integer
+                case 0x2D: // int48 / Signed 48-bit integer
+                case 0x2E: // int56 / Signed 56-bit integer
+                case 0x38: // semi / Semi-precision
+                case 0x39: // single / Single precision
+                case 0x3A: // double / Double precision
+                case 0x41: // octstr / Octet string
+                case 0x42: // string / Character string
+                case 0x43: // octstr16 / Long octet string
+                case 0x44: // string16 / Long character string
+                case 0x48: // array / Array
+                case 0x49: // struct / Structure
+                case 0x50: // set / Set
+                case 0x51: // bag / Bag
+                case 0xE0: // ToD / Time of day
+                {
+                    ChipLogError(Zcl, "attributeType 0x%02x is not supported", attributeType);
+                    Callback::Callback<DefaultFailureCallback> * cb = Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+                    cb->mCall(cb->mContext, EMBER_ZCL_STATUS_INVALID_VALUE);
+                    return true;
+                }
+
+                case 0x08: // data8 / 8-bit data
+                case 0x18: // map8 / 8-bit bitmap
+                case 0x20: // uint8 / Unsigned  8-bit integer
+                case 0x30: // enum8 / 8-bit enumeration
+                {
+                    CHECK_MESSAGE_LENGTH(1);
+                    uint8_t value = chip::Encoding::Read8(message);
+                    ChipLogProgress(Zcl, "  value: 0x%02x", value);
+
+                    Callback::Callback<Int8uAttributeCallback> * cb = Callback::Callback<Int8uAttributeCallback>::FromCancelable(onSuccessCallback);
+                    cb->mCall(cb->mContext, value);
+                    break;
+                }
+
+                case 0x09: // data16 / 16-bit data
+                case 0x19: // map16 / 16-bit bitmap
+                case 0x21: // uint16 / Unsigned 16-bit integer
+                case 0x31: // enum16 / 16-bit enumeration
+                case 0xE8: // clusterId / Cluster ID
+                case 0xE9: // attribId / Attribute ID
+                case 0xEA: // bacOID / BACnet OID
+                case 0xF1: // key128 / 128-bit security key
+                case 0xFF: // unk / Unknown
+                {
+                    CHECK_MESSAGE_LENGTH(2);
+                    uint16_t value = chip::Encoding::LittleEndian::Read16(message);
+                    ChipLogProgress(Zcl, "  value: 0x%04x", value);
+
+                    Callback::Callback<Int16uAttributeCallback> * cb = Callback::Callback<Int16uAttributeCallback>::FromCancelable(onSuccessCallback);
+                    cb->mCall(cb->mContext, value);
+                    break;
+                }
+
+                case 0x0B: // data32 / 32-bit data
+                case 0x1B: // map32 / 32-bit bitmap
+                case 0x23: // uint32 / Unsigned 32-bit integer
+                case 0xE1: // date / Date
+                case 0xE2: // UTC / UTCTime
+                {
+                    CHECK_MESSAGE_LENGTH(4);
+                    uint32_t value = chip::Encoding::LittleEndian::Read32(message);
+                    ChipLogProgress(Zcl, "  value: 0x%08x", value);
+
+                    Callback::Callback<Int32uAttributeCallback> * cb = Callback::Callback<Int32uAttributeCallback>::FromCancelable(onSuccessCallback);
+                    cb->mCall(cb->mContext, value);
+                    break;
+                }
+
+                case 0x0F: // data64 / 64-bit data
+                case 0x1F: // map64 / 64-bit bitmap
+                case 0x27: // uint64 / Unsigned 64-bit integer
+                case 0xF0: // EUI64 / IEEE address
+                {
+                    CHECK_MESSAGE_LENGTH(8);
+                    uint64_t value = chip::Encoding::LittleEndian::Read64(message);
+                    ChipLogProgress(Zcl, "  value: 0x%16x", value);
+
+                    Callback::Callback<Int64uAttributeCallback> * cb = Callback::Callback<Int64uAttributeCallback>::FromCancelable(onSuccessCallback);
+                    cb->mCall(cb->mContext, value);
+                    break;
+                }
+
+                case 0x10: // bool / Boolean
+                {
+                    CHECK_MESSAGE_LENGTH(1);
+                    uint8_t value = chip::Encoding::Read8(message);
+                    ChipLogProgress(Zcl, "  value: %d", value);
+
+                    Callback::Callback<BooleanAttributeCallback> * cb = Callback::Callback<BooleanAttributeCallback>::FromCancelable(onSuccessCallback);
+                    cb->mCall(cb->mContext, value);
+                    break;
+                }
+
+                case 0x28: // int8 / Signed 8-bit integer
+                {
+                    CHECK_MESSAGE_LENGTH(1);
+                    int8_t value = chip::CastToSigned(chip::Encoding::Read8(message));
+                    ChipLogProgress(Zcl, "  value: %" PRId8, value);
+
+                    Callback::Callback<Int8sAttributeCallback> * cb = Callback::Callback<Int8sAttributeCallback>::FromCancelable(onSuccessCallback);
+                    cb->mCall(cb->mContext, value);
+                    break;
+                }
+
+                case 0x29: // int16 / Signed 16-bit integer
+                {
+                    CHECK_MESSAGE_LENGTH(2);
+                    int16_t value = chip::CastToSigned(chip::Encoding::LittleEndian::Read16(message));
+                    ChipLogProgress(Zcl, "  value: %" PRId16, value);
+
+                    Callback::Callback<Int16sAttributeCallback> * cb = Callback::Callback<Int16sAttributeCallback>::FromCancelable(onSuccessCallback);
+                    cb->mCall(cb->mContext, value);
+                    break;
+                }
+
+                case 0x2B: // int32 / Signed 32-bit integer
+                {
+                    CHECK_MESSAGE_LENGTH(4);
+                    int32_t value = chip::CastToSigned(chip::Encoding::LittleEndian::Read32(message));
+                    ChipLogProgress(Zcl, "  value: %" PRId32, value);
+
+                    Callback::Callback<Int32sAttributeCallback> * cb = Callback::Callback<Int32sAttributeCallback>::FromCancelable(onSuccessCallback);
+                    cb->mCall(cb->mContext, value);
+                    break;
+                }
+
+                case 0x2F: // int64 / Signed 64-bit integer
+                {
+                    CHECK_MESSAGE_LENGTH(8);
+                    int64_t value = chip::CastToSigned(chip::Encoding::LittleEndian::Read64(message));
+                    ChipLogProgress(Zcl, "  value: %" PRId64, value);
+
+                    Callback::Callback<Int64sAttributeCallback> * cb = Callback::Callback<Int64sAttributeCallback>::FromCancelable(onSuccessCallback);
+                    cb->mCall(cb->mContext, value);
+                    break;
+                }
+            }
+        }
+        else
+        {
+            Callback::Callback<DefaultFailureCallback> * cb = Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+            cb->mCall(cb->mContext, status);
+        }
+
+        // The current code is written matching the current API where there is a single attribute read 
+        // per read command. So if multiple attributes are read at the same time, something is wrong
+        // somewhere.
+        if (messageLen)
+        {
+            ChipLogError(Zcl, "Multiple attributes read at the same time. Something went wrong.");
+            break;
+        }
+    }
+
+    return true;
+}
+
+bool emberAfWriteAttributesResponseCallback(ClusterId clusterId, uint8_t * message, uint16_t messageLen)
+{
+    ChipLogProgress(Zcl, "WriteAttributesResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+
+    GET_RESPONSE_CALLBACKS("emberAfWriteAttributesResponseCallback");
+
+    // struct writeAttributeResponseRecord[]
+    while (messageLen)
+    {
+        CHECK_MESSAGE_LENGTH(1);
+        uint8_t status = chip::Encoding::Read8(message); // zclStatus
+        LogStatus(status);
+
+        if (status == EMBER_ZCL_STATUS_SUCCESS)
+        {
+            Callback::Callback<DefaultSuccessCallback> * cb = Callback::Callback<DefaultSuccessCallback>::FromCancelable(onSuccessCallback);
+            cb->mCall(cb->mContext);
+        }
+        else
+        {
+            CHECK_MESSAGE_LENGTH(2);
+            uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+            ChipLogProgress(Zcl, "  attributeId: 0x%04x", attributeId);
+
+            Callback::Callback<DefaultFailureCallback> * cb = Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+            cb->mCall(cb->mContext, status);
+        }
+
+        // The current code is written matching the current API where there is a single attribute written
+        // per write command. So if multiple attributes are written at the same time, something is wrong
+        // somewhere.
+        if (messageLen)
+        {
+            ChipLogError(Zcl, "Multiple attributes written at the same time. Something went wrong.");
+            break;
+        }
+    }
+
+    return true;
+}
+
+bool emberAfConfigureReportingResponseCallback(ClusterId clusterId, uint8_t * message, uint16_t messageLen)
+{
+    ChipLogProgress(Zcl, "ConfigureReportingResponseCallback:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+
+    GET_RESPONSE_CALLBACKS("emberAfConfigureReportingResponseCallback");
+
+    // struct configureReportingResponseRecord[]
+    while (messageLen)
+    {
+        CHECK_MESSAGE_LENGTH(1);
+        uint8_t status = chip::Encoding::Read8(message); // zclStatus
+        LogStatus(status);
+
+        if (status == EMBER_ZCL_STATUS_SUCCESS)
+        {
+            Callback::Callback<DefaultSuccessCallback> * cb = Callback::Callback<DefaultSuccessCallback>::FromCancelable(onSuccessCallback);
+            cb->mCall(cb->mContext);
+        }
+        else
+        {
+            CHECK_MESSAGE_LENGTH(1);
+            uint8_t direction = chip::Encoding::Read8(message); // reportingRole
+            ChipLogProgress(Zcl, "  direction: 0x%02x", direction);
+
+            CHECK_MESSAGE_LENGTH(2);
+            uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+            ChipLogProgress(Zcl, "  attributeId: 0x%04x", attributeId);
+
+            Callback::Callback<DefaultFailureCallback> * cb = Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+            cb->mCall(cb->mContext, status);
+        }
+
+        // The current code is written matching the current API where there is a single attribute report 
+        // per configure command. So if multiple attributes are configured at the same time, something is wrong
+        // somewhere.
+        if (messageLen)
+        {
+            ChipLogError(Zcl, "Multiple attributes reports configured at the same time. Something went wrong.");
+            break;
+        }
+    }
+
+    return true;
+}
+
+bool emberAfReadReportingConfigurationResponseCallback(chip::ClusterId clusterId, uint8_t * message, uint16_t messageLen)
+{
+    ChipLogProgress(Zcl, "ReadReportingConfigurationResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+
+    GET_RESPONSE_CALLBACKS("emberAfReadReportingConfigurationResponseCallback");
+
+    // struct readReportingConfigurationResponseRecord[]
+    while (messageLen)
+    {
+        CHECK_MESSAGE_LENGTH(1);
+        uint8_t direction = chip::Encoding::Read8(message); // reportingRole
+        ChipLogProgress(Zcl, "  direction: 0x%02x", direction);
+
+        CHECK_MESSAGE_LENGTH(2);
+        uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+        ChipLogProgress(Zcl, "  attributeId: 0x%04x", attributeId);
+
+        if (direction == EMBER_ZCL_REPORTING_DIRECTION_REPORTED)
+        {
+            CHECK_MESSAGE_LENGTH(1);
+            uint8_t attributeType = chip::Encoding::Read8(message); // zclType
+            ChipLogProgress(Zcl, "  attributeType: 0x%02x", attributeType);
+
+            CHECK_MESSAGE_LENGTH(2);
+            uint16_t minimumReportingInterval = chip::Encoding::LittleEndian::Read16(message); // uint16
+            ChipLogProgress(Zcl, "  minimumReportingInterval: %" PRIu16, minimumReportingInterval);
+
+            CHECK_MESSAGE_LENGTH(2);
+            uint16_t maximumReportingInterval = chip::Encoding::LittleEndian::Read16(message); // uint16
+            ChipLogProgress(Zcl, "  maximumReportingInterval: %" PRIu16, maximumReportingInterval);
+
+            // FIXME: unk is not supported yet.
+
+            Callback::Callback<ReadReportingConfigurationReportedCallback> * cb = Callback::Callback<ReadReportingConfigurationReportedCallback>::FromCancelable(onSuccessCallback);
+            cb->mCall(cb->mContext, minimumReportingInterval, maximumReportingInterval);
+        }
+        else
+        {
+            CHECK_MESSAGE_LENGTH(2);
+            uint16_t timeout = chip::Encoding::LittleEndian::Read16(message); // uint16
+            ChipLogProgress(Zcl, "  timeout: %" PRIu16, timeout);
+
+            Callback::Callback<ReadReportingConfigurationReceivedCallback> * cb = Callback::Callback<ReadReportingConfigurationReceivedCallback>::FromCancelable(onSuccessCallback);
+            cb->mCall(cb->mContext, timeout);
+        }
+    }
+
+    return true;
+}
+
+bool emberAfDiscoverAttributesResponseCallback(ClusterId clusterId, bool discoveryComplete, uint8_t * message, uint16_t messageLen,
+                                               bool extended)
+{
+    ChipLogProgress(Zcl, "DiscoverAttributesResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+    ChipLogProgress(Zcl, "  discoveryComplete: %d", discoveryComplete);
+    ChipLogProgress(Zcl, "  extended: %d", extended);
+
+    GET_RESPONSE_CALLBACKS("emberAfDiscoverAttributesCallback");
+
+    // struct discoverAttributesResponseRecord[]
+    while (messageLen)
+    {
+        CHECK_MESSAGE_LENGTH(2);
+        uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+        ChipLogProgress(Zcl, "  attributeId: 0x%04x", attributeId);
+
+        CHECK_MESSAGE_LENGTH(1);
+        uint8_t attributeType = chip::Encoding::Read8(message); // zclType
+        ChipLogProgress(Zcl, "  attributeType: 0x%02x", attributeType);
+    }
+
+    Callback::Callback<DefaultSuccessCallback> * cb = Callback::Callback<DefaultSuccessCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfDiscoverCommandsGeneratedResponseCallback(ClusterId clusterId, uint16_t manufacturerCode, bool discoveryComplete,
+                                                      CommandId * commandIds, uint16_t commandIdCount)
+{
+    ChipLogProgress(Zcl, "DiscoverCommandsGeneratedResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+    ChipLogProgress(Zcl, "  manufacturerCode: 0x%04x", manufacturerCode);
+    ChipLogProgress(Zcl, "  discoveryComplete: %d", discoveryComplete);
+    ChipLogProgress(Zcl, "  commandIdCount: %" PRIu16, commandIdCount);
+
+    for (uint16_t i = 0; i < commandIdCount; i++)
+    {
+        ChipLogProgress(Zcl, "  commandId: 0x%02x", commandIds++);
+    }
+
+    GET_RESPONSE_CALLBACKS("emberAfDiscoverCommandsGeneratedResponseCallback");
+    Callback::Callback<DefaultSuccessCallback> * cb = Callback::Callback<DefaultSuccessCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfDiscoverCommandsReceivedResponseCallback(ClusterId clusterId, uint16_t manufacturerCode, bool discoveryComplete,
+                                                     CommandId * commandIds, uint16_t commandIdCount)
+{
+    ChipLogProgress(Zcl, "DiscoverCommandsReceivedResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+    ChipLogProgress(Zcl, "  manufacturerCode: 0x%04x", manufacturerCode);
+    ChipLogProgress(Zcl, "  discoveryComplete: %d", discoveryComplete);
+    ChipLogProgress(Zcl, "  commandIdCount: %" PRIu16, commandIdCount);
+
+    for (uint16_t i = 0; i < commandIdCount; i++)
+    {
+        ChipLogProgress(Zcl, "  commandId: 0x%02x", commandIds++);
+    }
+
+    GET_RESPONSE_CALLBACKS("emberAfDiscoverCommandsGeneratedResponseCallback");
+    Callback::Callback<DefaultSuccessCallback> * cb = Callback::Callback<DefaultSuccessCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+{{#all_user_clusters}}
+{{#if (isClient side) }}
+{{#if (user_cluster_has_enabled_command name side)}}
+{{#all_user_cluster_commands}}
+{{#if (isStrEqual clusterName parent.name)}}
+{{#if (isCommandAvailable parent.side incoming outgoing commandSource name)}}
+bool emberAf{{asCamelCased parent.name false}}Cluster{{asCamelCased name false}}Callback({{#zcl_command_arguments}}{{asUnderlyingZclType type}} {{asSymbol label}}{{#unless (isLastElement index count)}}, {{/unless}}{{/zcl_command_arguments}})
+{
+    ChipLogProgress(Zcl, "{{asCamelCased name false}}:");
+    {{#zcl_command_arguments}}
+    {{#if (isStrEqual label "status")}}
+    LogStatus(status);
+    {{else}}
+    ChipLogProgress(Zcl, "  {{asSymbol label}}: {{asPrintFormat type}}", {{asSymbol label}});
+    {{/if}}
+    {{/zcl_command_arguments}}
+
+    GET_RESPONSE_CALLBACKS("{{asCamelCased parent.name false}}Cluster{{asCamelCased name false}}Callback");
+
+    {{#zcl_command_arguments}}
+    {{#if (isStrEqual label "status")}}
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb = Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+    {{/if}}
+    {{/zcl_command_arguments}}
+
+    Callback::Callback<{{asCamelCased parent.name false}}Cluster{{asCamelCased name false}}Callback> * cb = Callback::Callback<{{asCamelCased parent.name false}}Cluster{{asCamelCased name false}}Callback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext{{#zcl_command_arguments}}{{#unless (isStrEqual label "status")}}, {{asSymbol label}}{{/unless}}{{/zcl_command_arguments}});
+    return true;
+}
+
+{{/if}}
+{{/if}}
+{{/all_user_cluster_commands}}
+{{/if}}
+{{/if}}
+{{/all_user_clusters}}
+
+bool emberAfReportAttributesCallback(ClusterId clusterId, uint8_t * message, uint16_t messageLen)
+{
+    ChipLogProgress(Zcl, "emberAfReportAttributeCallback:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+
+    NodeId sourceId = emberAfCurrentCommand()->source;
+    ChipLogProgress(Zcl, "  Source NodeId: %" PRIu64, sourceId);
+
+    EndpointId endpointId = emberAfCurrentCommand()->apsFrame->sourceEndpoint;
+    ChipLogProgress(Zcl, "  Source EndpointId: 0x%04x", endpointId);
+
+    // TODO onFailureCallback is just here because of the CHECK_MESSAGE_LENGTH macro. It needs to be removed.
+    Callback::Cancelable * onFailureCallback = nullptr;
+
+    while (messageLen)
+    {
+        CHECK_MESSAGE_LENGTH(2);
+        uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+        ChipLogProgress(Zcl, "  attributeId: 0x%04x", attributeId);
+
+        GET_REPORT_CALLBACK("emberAfReportAttributesCallback");
+
+        CHECK_MESSAGE_LENGTH(1);
+        uint8_t attributeType = chip::Encoding::Read8(message);
+        ChipLogProgress(Zcl, "  attributeType: 0x%02x", attributeType);
+
+        switch (attributeType)
+        {
+            case 0x00: // nodata / No data
+            case 0x0A: // data24 / 24-bit data
+            case 0x0C: // data40 / 40-bit data
+            case 0x0D: // data48 / 48-bit data
+            case 0x0E: // data56 / 56-bit data
+            case 0x1A: // map24 / 24-bit bitmap
+            case 0x1C: // map40 / 40-bit bitmap
+            case 0x1D: // map48 / 48-bit bitmap
+            case 0x1E: // map56 / 56-bit bitmap
+            case 0x22: // uint24 / Unsigned 24-bit integer
+            case 0x24: // uint40 / Unsigned 40-bit integer
+            case 0x25: // uint48 / Unsigned 48-bit integer
+            case 0x26: // uint56 / Unsigned 56-bit integer
+            case 0x2A: // int24 / Signed 24-bit integer
+            case 0x2C: // int40 / Signed 40-bit integer
+            case 0x2D: // int48 / Signed 48-bit integer
+            case 0x2E: // int56 / Signed 56-bit integer
+            case 0x38: // semi / Semi-precision
+            case 0x39: // single / Single precision
+            case 0x3A: // double / Double precision
+            case 0x41: // octstr / Octet string
+            case 0x42: // string / Character string
+            case 0x43: // octstr16 / Long octet string
+            case 0x44: // string16 / Long character string
+            case 0x48: // array / Array
+            case 0x49: // struct / Structure
+            case 0x50: // set / Set
+            case 0x51: // bag / Bag
+            case 0xE0: // ToD / Time of day
+            {
+                ChipLogError(Zcl, "attributeType 0x%02x is not supported", attributeType);
+                return true;
+            }
+
+            case 0x08: // data8 / 8-bit data
+            case 0x18: // map8 / 8-bit bitmap
+            case 0x20: // uint8 / Unsigned  8-bit integer
+            case 0x30: // enum8 / 8-bit enumeration
+            {
+                CHECK_MESSAGE_LENGTH(1);
+                uint8_t value = chip::Encoding::Read8(message);
+                ChipLogProgress(Zcl, "  value: 0x%02x", value);
+
+                Callback::Callback<Int8uAttributeCallback> * cb = Callback::Callback<Int8uAttributeCallback>::FromCancelable(onReportCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x09: // data16 / 16-bit data
+            case 0x19: // map16 / 16-bit bitmap
+            case 0x21: // uint16 / Unsigned 16-bit integer
+            case 0x31: // enum16 / 16-bit enumeration
+            case 0xE8: // clusterId / Cluster ID
+            case 0xE9: // attribId / Attribute ID
+            case 0xEA: // bacOID / BACnet OID
+            case 0xF1: // key128 / 128-bit security key
+            case 0xFF: // unk / Unknown
+            {
+                CHECK_MESSAGE_LENGTH(2);
+                uint16_t value = chip::Encoding::LittleEndian::Read16(message);
+                ChipLogProgress(Zcl, "  value: 0x%04x", value);
+
+                Callback::Callback<Int16uAttributeCallback> * cb = Callback::Callback<Int16uAttributeCallback>::FromCancelable(onReportCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x0B: // data32 / 32-bit data
+            case 0x1B: // map32 / 32-bit bitmap
+            case 0x23: // uint32 / Unsigned 32-bit integer
+            case 0xE1: // date / Date
+            case 0xE2: // UTC / UTCTime
+            {
+                CHECK_MESSAGE_LENGTH(4);
+                uint32_t value = chip::Encoding::LittleEndian::Read32(message);
+                ChipLogProgress(Zcl, "  value: 0x%08x", value);
+
+                Callback::Callback<Int32uAttributeCallback> * cb = Callback::Callback<Int32uAttributeCallback>::FromCancelable(onReportCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x0F: // data64 / 64-bit data
+            case 0x1F: // map64 / 64-bit bitmap
+            case 0x27: // uint64 / Unsigned 64-bit integer
+            case 0xF0: // EUI64 / IEEE address
+            {
+                CHECK_MESSAGE_LENGTH(8);
+                uint64_t value = chip::Encoding::LittleEndian::Read64(message);
+                ChipLogProgress(Zcl, "  value: 0x%16x", value);
+
+                Callback::Callback<Int64uAttributeCallback> * cb = Callback::Callback<Int64uAttributeCallback>::FromCancelable(onReportCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x10: // bool / Boolean
+            {
+                CHECK_MESSAGE_LENGTH(1);
+                uint8_t value = chip::Encoding::Read8(message);
+                ChipLogProgress(Zcl, "  value: %d", value);
+
+                Callback::Callback<BooleanAttributeCallback> * cb = Callback::Callback<BooleanAttributeCallback>::FromCancelable(onReportCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x28: // int8 / Signed 8-bit integer
+            {
+                CHECK_MESSAGE_LENGTH(1);
+                int8_t value = chip::CastToSigned(chip::Encoding::Read8(message));
+                ChipLogProgress(Zcl, "  value: %" PRId8, value);
+
+                Callback::Callback<Int8sAttributeCallback> * cb = Callback::Callback<Int8sAttributeCallback>::FromCancelable(onReportCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x29: // int16 / Signed 16-bit integer
+            {
+                CHECK_MESSAGE_LENGTH(2);
+                int16_t value = chip::CastToSigned(chip::Encoding::LittleEndian::Read16(message));
+                ChipLogProgress(Zcl, "  value: %" PRId16, value);
+
+                Callback::Callback<Int16sAttributeCallback> * cb = Callback::Callback<Int16sAttributeCallback>::FromCancelable(onReportCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x2B: // int32 / Signed 32-bit integer
+            {
+                CHECK_MESSAGE_LENGTH(4);
+                int32_t value = chip::CastToSigned(chip::Encoding::LittleEndian::Read32(message));
+                ChipLogProgress(Zcl, "  value: %" PRId32, value);
+
+                Callback::Callback<Int32sAttributeCallback> * cb = Callback::Callback<Int32sAttributeCallback>::FromCancelable(onReportCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x2F: // int64 / Signed 64-bit integer
+            {
+                CHECK_MESSAGE_LENGTH(8);
+                int64_t value = chip::CastToSigned(chip::Encoding::LittleEndian::Read64(message));
+                ChipLogProgress(Zcl, "  value: %" PRId64, value);
+
+                Callback::Callback<Int64sAttributeCallback> * cb = Callback::Callback<Int64sAttributeCallback>::FromCancelable(onReportCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+        }
+    }
+
+    return true;
+}
diff --git a/src/app/zap-templates/templates/app/CHIPClientCallbacks.zapt b/src/app/zap-templates/templates/app/CHIPClientCallbacks.zapt
new file mode 100644
index 0000000..a0804d8
--- /dev/null
+++ b/src/app/zap-templates/templates/app/CHIPClientCallbacks.zapt
@@ -0,0 +1,35 @@
+{{> header}}
+
+#pragma once
+
+#include <inttypes.h>
+
+// Global Response Callbacks
+typedef void (*DefaultSuccessCallback)(void * context);
+typedef void (*DefaultFailureCallback)(void * context, uint8_t status);
+typedef void (*BooleanAttributeCallback)(void * context, bool value);
+typedef void (*Int8uAttributeCallback)(void * context, uint8_t value);
+typedef void (*Int8sAttributeCallback)(void * context, int8_t value);
+typedef void (*Int16uAttributeCallback)(void * context, uint16_t value);
+typedef void (*Int16sAttributeCallback)(void * context, int16_t value);
+typedef void (*Int32uAttributeCallback)(void * context, uint32_t value);
+typedef void (*Int32sAttributeCallback)(void * context, int32_t value);
+typedef void (*Int64uAttributeCallback)(void * context, uint64_t value);
+typedef void (*Int64sAttributeCallback)(void * context, int64_t value);
+typedef void (*ReadReportingConfigurationReportedCallback)(void* context, uint16_t minInterval, uint16_t maxInterval);
+typedef void (*ReadReportingConfigurationReceivedCallback)(void* context, uint16_t timeout);
+
+// Cluster Specific Response Callbacks
+{{#all_user_clusters}}
+{{#if (isClient side) }}
+{{#if (user_cluster_has_enabled_command name side)}}
+{{#all_user_cluster_commands}}
+{{#if (isStrEqual clusterName parent.name)}}
+{{#if (isCommandAvailable parent.side incoming outgoing commandSource name)}}
+typedef void (*{{asCamelCased parent.name false}}Cluster{{asCamelCased name false}}Callback)(void * context{{#zcl_command_arguments}}{{#unless (isStrEqual label "status")}}, {{asUnderlyingZclType type}} {{asSymbol label}}{{/unless}}{{/zcl_command_arguments}});
+{{/if}}
+{{/if}}
+{{/all_user_cluster_commands}}
+{{/if}}
+{{/if}}
+{{/all_user_clusters}}
diff --git a/src/app/zap-templates/templates/app/helper.js b/src/app/zap-templates/templates/app/helper.js
index 1361b26..1529e5a 100644
--- a/src/app/zap-templates/templates/app/helper.js
+++ b/src/app/zap-templates/templates/app/helper.js
@@ -314,13 +314,62 @@
 
 //  End of Endpoint-config specific helpers
 
+function asPrintFormat(type)
+{
+  if (StringHelper.isString(type)) {
+    return '%s';
+  }
+
+  function fn(pkgId)
+  {
+    const options = { 'hash' : {} };
+    return zclHelper.asUnderlyingZclType.call(this, type, options).then(zclType => {
+      const basicType = ChipTypesHelper.asBasicType(zclType);
+      switch (basicType) {
+      case 'int8_t':
+        return '%" PRId8 "';
+      case 'uint8_t':
+        return '%" PRIu8 "';
+      case 'int16_t':
+        return '%" PRId16 "';
+      case 'uint16_t':
+        return '%" PRIu16 "';
+      case 'int24_t':
+        return '%" PRId32 "';
+      case 'uint24_t':
+        return '%" PRIu32 "';
+      case 'int32_t':
+        return '%" PRId32 "';
+      case 'uint32_t':
+        return '%" PRIu32 "';
+      case 'int64_t':
+        return '%" PRId64 "';
+      case 'uint64_t':
+        return '%" PRIu64 "';
+      default:
+        return '%p';
+      }
+    })
+  }
+
+  const promise = templateUtil.ensureZclPackageId(this).then(fn.bind(this)).catch(err => console.log(err));
+  return templateUtil.templatePromise(this.global, promise)
+}
+
+function isFirstElement(index)
+{
+  return index == 0;
+}
+
 //
 // Module exports
 //
+exports.asPrintFormat                                 = asPrintFormat;
 exports.asReadType                                    = asReadType;
 exports.asReadTypeLength                              = asReadTypeLength;
 exports.asValueIfNotPresent                           = asValueIfNotPresent;
 exports.asChipUnderlyingType                          = asChipUnderlyingType;
+exports.isFirstElement                                = isFirstElement;
 exports.user_cluster_has_enabled_manufacturer_command = user_cluster_has_enabled_manufacturer_command;
 exports.chip_endpoint_generated_functions             = chip_endpoint_generated_functions
 exports.chip_endpoint_cluster_list                    = chip_endpoint_cluster_list
diff --git a/src/app/zap-templates/templates/chip/CHIPClusters-src.zapt b/src/app/zap-templates/templates/chip/CHIPClusters-src.zapt
index 0419788..c3698e8 100644
--- a/src/app/zap-templates/templates/chip/CHIPClusters-src.zapt
+++ b/src/app/zap-templates/templates/chip/CHIPClusters-src.zapt
@@ -15,7 +15,7 @@
 
 // {{asCamelCased name false}} Cluster Commands
 {{#chip_server_cluster_commands}}
-CHIP_ERROR {{asCamelCased clusterName false}}Cluster::{{asCamelCased name false}}(Callback::Callback<> * onCompletion{{#chip_server_cluster_command_arguments}}, {{chipType}} {{asCamelCased label}}{{/chip_server_cluster_command_arguments}})
+CHIP_ERROR {{asCamelCased clusterName false}}Cluster::{{asCamelCased name false}}(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback{{#chip_server_cluster_command_arguments}}, {{chipType}} {{asCamelCased label}}{{/chip_server_cluster_command_arguments}})
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -50,38 +50,48 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encode{{asCamelCased clusterName false}}Cluster{{asType name}}Command(mEndpoint{{#chip_server_cluster_command_arguments}}, {{asCamelCased label}}{{/chip_server_cluster_command_arguments}});
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encode{{asCamelCased clusterName false}}Cluster{{asType name}}Command(seqNum, mEndpoint{{#chip_server_cluster_command_arguments}}, {{asCamelCased label}}{{/chip_server_cluster_command_arguments}});
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
 {{/chip_server_cluster_commands}}
 // {{asCamelCased name false}} Cluster Attributes
-CHIP_ERROR {{asCamelCased name false}}Cluster::DiscoverAttributes(Callback::Callback<> * onCompletion)
+CHIP_ERROR {{asCamelCased name false}}Cluster::DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encode{{asCamelCased name false}}ClusterDiscoverAttributes(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encode{{asCamelCased name false}}ClusterDiscoverAttributes(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 {{#chip_server_cluster_attributes}}
-CHIP_ERROR {{asCamelCased parent.name false}}Cluster::ReadAttribute{{asCamelCased name false}}(Callback::Callback<> * onCompletion)
+CHIP_ERROR {{asCamelCased parent.name false}}Cluster::ReadAttribute{{asCamelCased name false}}(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encode{{asCamelCased parent.name false}}ClusterRead{{asCamelCased name false}}Attribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encode{{asCamelCased parent.name false}}ClusterRead{{asCamelCased name false}}Attribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
 {{#if (isWritableAttribute)}}
-CHIP_ERROR {{asCamelCased parent.name false}}Cluster::WriteAttribute{{asCamelCased name false}}(Callback::Callback<> * onCompletion, {{asUnderlyingZclType type}} value)
+CHIP_ERROR {{asCamelCased parent.name false}}Cluster::WriteAttribute{{asCamelCased name false}}(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, {{asUnderlyingZclType type}} value)
 {
-    System::PacketBufferHandle payload = encode{{asCamelCased parent.name false}}ClusterWrite{{asCamelCased name false}}Attribute(mEndpoint, value);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encode{{asCamelCased parent.name false}}ClusterWrite{{asCamelCased name false}}Attribute(seqNum, mEndpoint, value);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
 {{/if}}
 {{#if (isReportableAttribute)}}
-CHIP_ERROR {{asCamelCased parent.name false}}Cluster::ReportAttribute{{asCamelCased name false}}(Callback::Callback<> * onCompletion, Callback::Callback<> * onChange, uint16_t minInterval, uint16_t maxInterval{{#unless (isDiscreteType)}}, {{chipType}} change{{/unless}})
+CHIP_ERROR {{asCamelCased parent.name false}}Cluster::ConfigureAttribute{{asCamelCased name false}}(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint16_t minInterval, uint16_t maxInterval{{#unless (isDiscreteType)}}, {{chipType}} change{{/unless}})
 {
-    System::PacketBufferHandle payload = encode{{asCamelCased parent.name false}}ClusterReport{{asCamelCased name false}}Attribute(mEndpoint, minInterval, maxInterval{{#unless (isDiscreteType)}}, change{{/unless}});
-    return RequestAttributeReporting(std::move(payload), onCompletion, onChange);
+    uint8_t seqNum = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encode{{asCamelCased parent.name false}}ClusterConfigure{{asCamelCased name false}}Attribute(seqNum, mEndpoint, minInterval, maxInterval{{#unless (isDiscreteType)}}, change{{/unless}});
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
+}
+
+CHIP_ERROR {{asCamelCased parent.name false}}Cluster::ReportAttribute{{asCamelCased name false}}(Callback::Cancelable * onReportCallback)
+{
+    return RequestAttributeReporting({{asHex attributeCode 4}}, onReportCallback);
 }
 
 {{/if}}
diff --git a/src/app/zap-templates/templates/chip/CHIPClusters.zapt b/src/app/zap-templates/templates/chip/CHIPClusters.zapt
index a59a972..03f72ac 100644
--- a/src/app/zap-templates/templates/chip/CHIPClusters.zapt
+++ b/src/app/zap-templates/templates/chip/CHIPClusters.zapt
@@ -24,22 +24,23 @@
 
     // Cluster Commands
     {{/first}}
-    CHIP_ERROR {{asCamelCased name false}}(Callback::Callback<> * onCompletion{{#chip_server_cluster_command_arguments}}, {{chipType}} {{asCamelCased label}}{{/chip_server_cluster_command_arguments}});
+    CHIP_ERROR {{asCamelCased name false}}(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback{{#chip_server_cluster_command_arguments}}, {{chipType}} {{asCamelCased label}}{{/chip_server_cluster_command_arguments}});
     {{/chip_server_cluster_commands}}
 
     // Cluster Attributes
-    CHIP_ERROR DiscoverAttributes(Callback::Callback<> * onCompletion);
+    CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
     {{#chip_server_cluster_attributes}}
-    CHIP_ERROR ReadAttribute{{asCamelCased name false}}(Callback::Callback<> * onCompletion);
+    CHIP_ERROR ReadAttribute{{asCamelCased name false}}(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
     {{/chip_server_cluster_attributes}}
     {{#chip_server_cluster_attributes}}
     {{#if (isWritableAttribute)}}
-    CHIP_ERROR WriteAttribute{{asCamelCased name false}}(Callback::Callback<> * onCompletion, {{asUnderlyingZclType type}} value);
+    CHIP_ERROR WriteAttribute{{asCamelCased name false}}(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, {{asUnderlyingZclType type}} value);
     {{/if}}
     {{/chip_server_cluster_attributes}}
     {{#chip_server_cluster_attributes}}
     {{#if (isReportableAttribute)}}
-    CHIP_ERROR ReportAttribute{{asCamelCased name false}}(Callback::Callback<> * onCompletion, Callback::Callback<> * onChange, uint16_t minInterval, uint16_t maxInterval{{#unless (isDiscreteType)}}, {{chipType}} change{{/unless}});
+    CHIP_ERROR ConfigureAttribute{{asCamelCased name false}}(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint16_t minInterval, uint16_t maxInterval{{#unless (isDiscreteType)}}, {{chipType}} change{{/unless}});
+    CHIP_ERROR ReportAttribute{{asCamelCased name false}}(Callback::Cancelable * onReportCallback);
     {{/if}}
     {{/chip_server_cluster_attributes}}
     {{#chip_server_cluster_commands}}
diff --git a/src/app/zap-templates/templates/chip/CHIPClustersObjc-src.zapt b/src/app/zap-templates/templates/chip/CHIPClustersObjc-src.zapt
index b150786..e6c8f4d 100644
--- a/src/app/zap-templates/templates/chip/CHIPClustersObjc-src.zapt
+++ b/src/app/zap-templates/templates/chip/CHIPClustersObjc-src.zapt
@@ -2,24 +2,326 @@
 
 #import <Foundation/Foundation.h>
 
-#import "CHIPCallbackBridge.h"
 #import "CHIPDevice.h"
 #import "CHIPDevice_Internal.h"
-#import "CHIPClustersObjc.h"
+#import "gen/CHIPClustersObjc.h"
+#import "gen/CHIPClientCallbacks.h"
 
 #include <controller/CHIPClusters.h>
 
-{{#chip_server_clusters}}
+using namespace ::chip;
+
+class CHIPDefaultSuccessCallbackBridge : public Callback::Callback<DefaultSuccessCallback> {
+public:
+    CHIPDefaultSuccessCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DefaultSuccessCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDefaultSuccessCallbackBridge() {};
+
+    static void CallbackFn(void * context)
+    {
+        CHIPDefaultSuccessCallbackBridge * callback = reinterpret_cast<CHIPDefaultSuccessCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, nil);
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDefaultFailureCallbackBridge : public Callback::Callback<DefaultFailureCallback> {
+public:
+    CHIPDefaultFailureCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DefaultFailureCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDefaultFailureCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint8_t status)
+    {
+        CHIPDefaultFailureCallbackBridge * callback = reinterpret_cast<CHIPDefaultFailureCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                NSError* error = [NSError errorWithDomain:@"ZCL" code:status userInfo:@{NSLocalizedDescriptionKey:@""}];
+                callback->mHandler(error, nil);
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPUnsupportedAttributeCallbackBridge : public Callback::Callback<DefaultSuccessCallback> {
+public:
+    CHIPUnsupportedAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DefaultSuccessCallback>(CallbackFn, this)
+    {
+    }
+
+    ~CHIPUnsupportedAttributeCallbackBridge() {};
+
+    static void CallbackFn(void * context)
+    {
+        CHIPUnsupportedAttributeCallbackBridge * callback = reinterpret_cast<CHIPUnsupportedAttributeCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                NSError* error = [NSError errorWithDomain:@"ZCL" code:0 userInfo:@{NSLocalizedDescriptionKey:@"Unsuported attribute type"}];
+                callback->mHandler(error, nil);
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPBooleanAttributeCallbackBridge : public Callback::Callback<BooleanAttributeCallback> {
+public:
+    CHIPBooleanAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
+        : Callback::Callback<BooleanAttributeCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+        , mKeepAlive(keepAlive)
+    {
+    }
+
+    ~CHIPBooleanAttributeCallbackBridge() {};
+
+    static void CallbackFn(void * context, bool value)
+    {
+        CHIPBooleanAttributeCallbackBridge * callback = reinterpret_cast<CHIPBooleanAttributeCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @{ @"value": [NSNumber numberWithBool:value] });
+                if (!callback->mKeepAlive)
+                {
+                    callback->Cancel();
+                    delete callback;
+                }
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+    bool mKeepAlive;
+};
+
+class CHIPInt8uAttributeCallbackBridge : public Callback::Callback<Int8uAttributeCallback> {
+public:
+    CHIPInt8uAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
+        : Callback::Callback<Int8uAttributeCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+        , mKeepAlive(keepAlive)
+    {
+    }
+
+    ~CHIPInt8uAttributeCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint8_t value)
+    {
+        CHIPInt8uAttributeCallbackBridge * callback = reinterpret_cast<CHIPInt8uAttributeCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @{ @"value": [NSNumber numberWithUnsignedChar:value] });
+                if (!callback->mKeepAlive)
+                {
+                    callback->Cancel();
+                    delete callback;
+                }
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+    bool mKeepAlive;
+};
+
+class CHIPInt8sAttributeCallbackBridge : public Callback::Callback<Int8sAttributeCallback> {
+public:
+    CHIPInt8sAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
+        : Callback::Callback<Int8sAttributeCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+        , mKeepAlive(keepAlive)
+    {
+    }
+
+    ~CHIPInt8sAttributeCallbackBridge() {};
+
+    static void CallbackFn(void * context, int8_t value)
+    {
+        CHIPInt8sAttributeCallbackBridge * callback = reinterpret_cast<CHIPInt8sAttributeCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @{ @"value": [NSNumber numberWithChar:value] });
+                if (!callback->mKeepAlive)
+                {
+                    callback->Cancel();
+                    delete callback;
+                }
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+    bool mKeepAlive;
+};
+
+class CHIPInt16uAttributeCallbackBridge : public Callback::Callback<Int16uAttributeCallback> {
+public:
+    CHIPInt16uAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
+        : Callback::Callback<Int16uAttributeCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+        , mKeepAlive(keepAlive)
+    {
+    }
+
+    ~CHIPInt16uAttributeCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint16_t value)
+    {
+        CHIPInt16uAttributeCallbackBridge * callback = reinterpret_cast<CHIPInt16uAttributeCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @{ @"value": [NSNumber numberWithUnsignedShort:value] });
+                if (!callback->mKeepAlive)
+                {
+                    callback->Cancel();
+                    delete callback;
+                }
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+    bool mKeepAlive;
+};
+
+class CHIPInt16sAttributeCallbackBridge : public Callback::Callback<Int16sAttributeCallback> {
+public:
+    CHIPInt16sAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
+        : Callback::Callback<Int16sAttributeCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+        , mKeepAlive(keepAlive)
+    {
+    }
+
+    ~CHIPInt16sAttributeCallbackBridge() {};
+
+    static void CallbackFn(void * context, int16_t value)
+    {
+        CHIPInt16sAttributeCallbackBridge * callback = reinterpret_cast<CHIPInt16sAttributeCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @{ @"value": [NSNumber numberWithShort:value] });
+                if (!callback->mKeepAlive)
+                {
+                    callback->Cancel();
+                    delete callback;
+                }
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+    bool mKeepAlive;
+};
+
+{{#all_user_clusters}}
+{{#if (isClient side) }}
+{{#if (user_cluster_has_enabled_command name side)}}
+{{#all_user_cluster_commands}}
+{{#if (isStrEqual clusterName parent.name)}}
+{{#if (isCommandAvailable parent.side incoming outgoing commandSource name)}}
+class CHIP{{asCamelCased parent.name false}}Cluster{{asCamelCased name false}}CallbackBridge : public Callback::Callback<{{asCamelCased parent.name false}}Cluster{{asCamelCased name false}}Callback>
+{
+public:
+    CHIP{{asCamelCased parent.name false}}Cluster{{asCamelCased name false}}CallbackBridge(ResponseHandler handler, dispatch_queue_t queue): Callback::Callback<{{asCamelCased parent.name false}}Cluster{{asCamelCased name false}}Callback>(CallbackFn, this), mHandler(handler), mQueue(queue) {}
+
+    ~CHIP{{asCamelCased parent.name false}}Cluster{{asCamelCased name false}}CallbackBridge() {};
+
+    static void CallbackFn(void * context{{#zcl_command_arguments}}{{#unless (isStrEqual label "status")}}, {{asUnderlyingZclType type}} {{asSymbol label}}{{/unless}}{{/zcl_command_arguments}})
+    {
+        CHIP{{asCamelCased parent.name false}}Cluster{{asCamelCased name false}}CallbackBridge * callback = reinterpret_cast<CHIP{{asCamelCased parent.name false}}Cluster{{asCamelCased name false}}CallbackBridge *>(context);
+        if (callback && callback->mQueue)
+        {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @{
+                  {{#zcl_command_arguments}}
+                  {{#unless (isStrEqual label "status")}}
+                  {{#if isArray}}
+                  // {{asSymbol label}}: {{asUnderlyingZclType type}}
+                  // Conversion from this type to Objc is not properly implemented yet
+                  {{else if (isShortString type)}}
+                  @"{{asSymbol label}}": [NSString stringWithFormat:@"%s", {{asSymbol label}}],
+                  {{else}}
+                  @"{{asSymbol label}}": [NSNumber numberWith{{asObjectiveCNumberType label type}}:{{asSymbol label}}],
+                  {{/if}}
+                  {{/unless}}
+                  {{/zcl_command_arguments}}
+                });
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+{{/if}}
+{{/if}}
+{{/all_user_cluster_commands}}
+{{/if}}
+{{/if}}
+{{/all_user_clusters}}
+
+{{#chip_clusters}}
 
 @interface CHIP{{asCamelCased name false}} ()
 
-@property (readonly) chip::Controller::{{asCamelCased name false}}Cluster cppCluster;
+@property (readonly) Controller::{{asCamelCased name false}}Cluster cppCluster;
 @property (readonly, nonatomic) dispatch_queue_t callbackQueue;
 @end
 
 @implementation CHIP{{asCamelCased name false}}
 
-- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(chip::EndpointId)endpoint queue:(dispatch_queue_t)queue
+- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(EndpointId)endpoint queue:(dispatch_queue_t)queue
 {
     CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
 
@@ -30,21 +332,36 @@
     if (self = [super init]) {
         _callbackQueue = queue;
     }
+
     return self;
 }
 
 {{#chip_server_cluster_commands}}
-- (BOOL){{asCamelCased name}}:(CHIPDeviceCallback)onCompletion{{#chip_server_cluster_command_arguments}} {{asCamelCased label}}:({{chipType}}){{asCamelCased label}}{{/chip_server_cluster_command_arguments}}
+{{#if (zcl_command_arguments_count this.id)}}
+- (BOOL){{asCamelCased name}}:{{#chip_server_cluster_command_arguments}}{{#if (isFirstElement index)}}{{else}}{{asCamelCased label}}:{{/if}}({{asBasicType chipType}}){{asCamelCased label}} {{/chip_server_cluster_command_arguments}}completionHandler:(ResponseHandler)completionHandler
+{{else}}
+- (BOOL){{asCamelCased name}}:(ResponseHandler)completionHandler
+{{/if}}
 {
-  CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
+{{#if (hasSpecificResponse name)}}
+    CHIP{{asCamelCased parent.name false}}Cluster{{asCamelCased name false}}ResponseCallbackBridge * onSuccess = new CHIP{{asCamelCased parent.name false}}Cluster{{asCamelCased name false}}ResponseCallbackBridge(completionHandler, _callbackQueue);
+{{else}}
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+{{/if}}
+    if (!onSuccess) {
         return NO;
     }
 
-    CHIP_ERROR err = self.cppCluster.{{asCamelCased name false}}(callback{{#chip_server_cluster_command_arguments}}, {{asCamelCased label}}{{/chip_server_cluster_command_arguments}});
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.{{asCamelCased name false}}(onSuccess->Cancel(), onFailure->Cancel(){{#chip_server_cluster_command_arguments}}, {{asCamelCased label}}{{/chip_server_cluster_command_arguments}});
     if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
+        delete onSuccess;
+        delete onFailure;
         return NO;
     }
     return YES;
@@ -52,34 +369,46 @@
 {{/chip_server_cluster_commands}}
 
 {{#chip_server_cluster_attributes}}
-- (BOOL)readAttribute{{asCamelCased name false}}:(CHIPDeviceCallback)onCompletion
+- (BOOL)readAttribute{{asCamelCased name false}}:(ResponseHandler)completionHandler
 {
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
+    CHIP{{asCallbackAttributeType atomicTypeId}}AttributeCallbackBridge * onSuccess = new CHIP{{asCallbackAttributeType atomicTypeId}}AttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
         return NO;
     }
 
-    CHIP_ERROR err = self.cppCluster.ReadAttribute{{asCamelCased name false}}(callback);
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttribute{{asCamelCased name false}}(onSuccess->Cancel(), onFailure->Cancel());
     if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
+        delete onSuccess;
+        delete onFailure;
         return NO;
     }
     return YES;
 }
 
 {{#if (isWritableAttribute)}}
-- (BOOL)writeAttribute{{asCamelCased name false}}:(CHIPDeviceCallback)onCompletion value:({{asUnderlyingZclType type}})value
+- (BOOL)writeAttribute{{asCamelCased name false}}:({{asUnderlyingZclType type}})value completionHandler:(ResponseHandler)completionHandler
 {
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
         return NO;
     }
 
-    CHIP_ERROR err = self.cppCluster.WriteAttribute{{asCamelCased name false}}(callback, value);
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.WriteAttribute{{asCamelCased name false}}(onSuccess->Cancel(), onFailure->Cancel(), value);
     if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
+        delete onSuccess;
+        delete onFailure;
         return NO;
     }
     return YES;
@@ -87,32 +416,48 @@
 
 {{/if}}
 {{#if (isReportableAttribute)}}
-- (BOOL) reportAttribute{{asCamelCased name false}}:(CHIPDeviceCallback)onCompletion onChange:(CHIPDeviceCallback)onChange minInterval:(uint16_t)minInterval  maxInterval:(uint16_t)maxInterval{{#unless (isDiscreteType)}} change:({{chipType}})change{{/unless}}
+- (BOOL) configureAttribute{{asCamelCased name false}}:(uint16_t)minInterval  maxInterval:(uint16_t)maxInterval{{#unless (isDiscreteType)}} change:({{chipType}})change{{/unless}} completionHandler:(ResponseHandler)completionHandler
 {
-    CHIPCallbackBridge * completionCallback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!completionCallback) {
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
         return NO;
     }
 
-    CHIPCallbackBridge * changeCallback = new CHIPCallbackBridge(onChange, _callbackQueue);
-    if (!changeCallback) {
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
         return NO;
     }
 
-    CHIP_ERROR err = self.cppCluster.ReportAttribute{{asCamelCased name false}}(completionCallback, changeCallback, minInterval, maxInterval{{#unless (isDiscreteType)}}, change{{/unless}});
+
+    CHIP_ERROR err = self.cppCluster.ConfigureAttribute{{asCamelCased name false}}(onSuccess->Cancel(), onFailure->Cancel(), minInterval, maxInterval{{#unless (isDiscreteType)}}, change{{/unless}});
     if (err != CHIP_NO_ERROR) {
-        completionCallback->Cancel();
-        changeCallback->Cancel();
-        delete completionCallback;
-        delete changeCallback;
+        delete onSuccess;
+        delete onFailure;
         return NO;
     }
     return YES;
 }
 
+- (BOOL) reportAttribute{{asCamelCased name false}}:(ResponseHandler)reportHandler
+{
+    CHIP{{asCallbackAttributeType atomicTypeId}}AttributeCallbackBridge * onReport = new CHIP{{asCallbackAttributeType atomicTypeId}}AttributeCallbackBridge(reportHandler, _callbackQueue, true);
+    if (!onReport) {
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReportAttribute{{asCamelCased name false}}(onReport->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onReport;
+        return NO;
+    }
+
+    return YES;
+}
+
 {{/if}}
 {{/chip_server_cluster_attributes}}
 
 @end
 
-{{/chip_server_clusters}}
+{{/chip_clusters}}
diff --git a/src/app/zap-templates/templates/chip/CHIPClustersObjc.zapt b/src/app/zap-templates/templates/chip/CHIPClustersObjc.zapt
index 7bd3972..bc186c5a 100644
--- a/src/app/zap-templates/templates/chip/CHIPClustersObjc.zapt
+++ b/src/app/zap-templates/templates/chip/CHIPClustersObjc.zapt
@@ -3,12 +3,13 @@
 #ifndef CHIP_CLUSTERS_H
 #define CHIP_CLUSTERS_H
 
-#import <CHIP/CHIPDeviceCallback.h>
 #import <Foundation/Foundation.h>
 
+typedef void (^ResponseHandler)(NSError * _Nullable error, NSDictionary * _Nullable values);
+
 @class CHIPDevice;
 
-{{#chip_server_clusters}}
+{{#chip_clusters}}
 
 NS_ASSUME_NONNULL_BEGIN
 
@@ -16,16 +17,21 @@
 
 - (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
 {{#chip_server_cluster_commands}}
-- (BOOL){{asCamelCased name}}:(CHIPDeviceCallback)onCompletion{{#chip_server_cluster_command_arguments}} {{asCamelCased label}}:({{asBasicType chipType}}){{asCamelCased label}}{{/chip_server_cluster_command_arguments}};
+{{#if (zcl_command_arguments_count this.id)}}
+- (BOOL){{asCamelCased name}}:{{#chip_server_cluster_command_arguments}}{{#if (isFirstElement index)}}{{else}}{{asCamelCased label}}:{{/if}}({{asBasicType chipType}}){{asCamelCased label}} {{/chip_server_cluster_command_arguments}}completionHandler:(ResponseHandler)completionHandler;
+{{else}}
+- (BOOL){{asCamelCased name}}:(ResponseHandler)completionHandler;
+{{/if}}
 {{/chip_server_cluster_commands}}
 
 {{#chip_server_cluster_attributes}}
-- (BOOL)readAttribute{{asCamelCased name false}}:(CHIPDeviceCallback)onCompletion;
+- (BOOL)readAttribute{{asCamelCased name false}}:(ResponseHandler)completionHandler;
 {{#if (isWritableAttribute)}}
-- (BOOL)writeAttribute{{asCamelCased name false}}:(CHIPDeviceCallback)onCompletion value:({{asUnderlyingZclType type}})value;
+- (BOOL)writeAttribute{{asCamelCased name false}}:({{asUnderlyingZclType type}})value completionHandler:(ResponseHandler)completionHandler;
 {{/if}}
 {{#if (isReportableAttribute)}}
-- (BOOL) reportAttribute{{asCamelCased name false}}:(CHIPDeviceCallback)onCompletion onChange:(CHIPDeviceCallback)onChange minInterval:(uint16_t)minInterval  maxInterval:(uint16_t)maxInterval{{#unless (isDiscreteType)}} change:({{chipType}})change{{/unless}};
+- (BOOL) configureAttribute{{asCamelCased name false}}:(uint16_t)minInterval  maxInterval:(uint16_t)maxInterval{{#unless (isDiscreteType)}} change:({{chipType}})change{{/unless}} completionHandler:(ResponseHandler)completionHandler;
+- (BOOL) reportAttribute{{asCamelCased name false}}:(ResponseHandler)reportHandler;
 {{/if}}
 {{/chip_server_cluster_attributes}}
 
@@ -35,6 +41,6 @@
 @end
 
 NS_ASSUME_NONNULL_END
-{{/chip_server_clusters}}
+{{/chip_clusters}}
 
 #endif /* CHIP_CLUSTERS_H */
diff --git a/src/app/zap-templates/templates/chip/chip-zcl-zpro-codec-api.zapt b/src/app/zap-templates/templates/chip/chip-zcl-zpro-codec-api.zapt
index 8f349ef..1f43314 100644
--- a/src/app/zap-templates/templates/chip/chip-zcl-zpro-codec-api.zapt
+++ b/src/app/zap-templates/templates/chip/chip-zcl-zpro-codec-api.zapt
@@ -17,36 +17,36 @@
  * @brief
  *    Encode an {{asType name}} command for {{clusterName}} server into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encode{{asCamelCased clusterName false}}Cluster{{asType name}}Command(chip::EndpointId destinationEndpoint{{#chip_server_cluster_command_arguments}}, {{chipType}} {{asCamelCased label}}{{/chip_server_cluster_command_arguments}});
+chip::System::PacketBufferHandle encode{{asCamelCased clusterName false}}Cluster{{asType name}}Command(uint8_t seqNum, chip::EndpointId destinationEndpoint{{#chip_server_cluster_command_arguments}}, {{chipType}} {{asCamelCased label}}{{/chip_server_cluster_command_arguments}});
 
 {{/chip_server_cluster_commands}}
 /**
  * @brief
  *    Encode a {{name}} server discover command into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encode{{asCamelCased name false}}ClusterDiscoverAttributes(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encode{{asCamelCased name false}}ClusterDiscoverAttributes(uint8_t seqNum, chip::EndpointId destinationEndpoint);
 
 {{#chip_server_cluster_attributes}}
 /**
  * @brief
  *    Encode a {{parent.name}} server read command for the {{name}} attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encode{{asCamelCased parent.name false}}ClusterRead{{asCamelCased name false}}Attribute(chip::EndpointId destinationEndpoint);
+chip::System::PacketBufferHandle encode{{asCamelCased parent.name false}}ClusterRead{{asCamelCased name false}}Attribute(uint8_t seqNum, chip::EndpointId destinationEndpoint);
 
 {{#if (isWritableAttribute)}}
 /**
  * @brief
  *    Encode a {{parent.name}} server write command for the {{name}} attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encode{{asCamelCased parent.name false}}ClusterWrite{{asCamelCased name false}}Attribute(chip::EndpointId destinationEndpoint, {{asUnderlyingZclType type}} {{asCamelCased name}});
+chip::System::PacketBufferHandle encode{{asCamelCased parent.name false}}ClusterWrite{{asCamelCased name false}}Attribute(uint8_t seqNum, chip::EndpointId destinationEndpoint, {{asUnderlyingZclType type}} {{asCamelCased name}});
 
 {{/if}}
 {{#if (isReportableAttribute)}}
 /**
  * @brief
- *    Encode a {{parent.name}} server report command for the {{name}} attribute into buffer including the APS frame
+ *    Encode a {{parent.name}} server configure report command for the {{name}} attribute into buffer including the APS frame
  */
-chip::System::PacketBufferHandle encode{{asCamelCased parent.name false}}ClusterReport{{asCamelCased name false}}Attribute(chip::EndpointId destinationEndpoint, uint16_t minInterval, uint16_t maxInterval{{#unless (isDiscreteType)}}, {{chipType}} change{{/unless}});
+chip::System::PacketBufferHandle encode{{asCamelCased parent.name false}}ClusterConfigure{{asCamelCased name false}}Attribute(uint8_t seqNum, chip::EndpointId destinationEndpoint, uint16_t minInterval, uint16_t maxInterval{{#unless (isDiscreteType)}}, {{chipType}} change{{/unless}});
 
 {{/if}}
 {{/chip_server_cluster_attributes}}
diff --git a/src/app/zap-templates/templates/chip/encoder-src.zapt b/src/app/zap-templates/templates/chip/encoder-src.zapt
index 9aa0aa7..b4406aa 100644
--- a/src/app/zap-templates/templates/chip/encoder-src.zapt
+++ b/src/app/zap-templates/templates/chip/encoder-src.zapt
@@ -112,9 +112,6 @@
 // Pick source endpoint as 1 for now
 constexpr EndpointId kSourceEndpoint = 1;
 
-// Transaction sequence number. Just pick something for now.
-constexpr uint8_t kSeqNum = 1;
-
 {{#chip_server_clusters}}
 {{> cluster_header}}
 
@@ -122,7 +119,7 @@
 /*
  * Command {{asCamelCased name false}}
  */
-PacketBufferHandle encode{{asCamelCased clusterName false}}Cluster{{asType name}}Command(EndpointId destinationEndpoint{{#chip_server_cluster_command_arguments}}, {{chipType}} {{asCamelCased label}}{{/chip_server_cluster_command_arguments}})
+PacketBufferHandle encode{{asCamelCased clusterName false}}Cluster{{asType name}}Command(uint8_t seqNum, EndpointId destinationEndpoint{{#chip_server_cluster_command_arguments}}, {{chipType}} {{asCamelCased label}}{{/chip_server_cluster_command_arguments}})
 {
     COMMAND_HEADER("{{asType name}}", {{parent.define}}_ID);
     {{#chip_server_cluster_command_arguments}}
@@ -142,7 +139,7 @@
     {{else}}
         .Put8(kFrameControlClusterSpecificCommand)
     {{/if}}
-       .Put8(kSeqNum)
+       .Put8(seqNum)
        .Put8(ZCL_{{asDelimitedMacro name}}_COMMAND_ID)
     {{#chip_server_cluster_command_arguments}}
     {{#if (isString type)}}
@@ -159,11 +156,11 @@
 }
 
 {{/chip_server_cluster_commands}}
-PacketBufferHandle encode{{asCamelCased name false}}ClusterDiscoverAttributes(EndpointId destinationEndpoint)
+PacketBufferHandle encode{{asCamelCased name false}}ClusterDiscoverAttributes(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("Discover{{asCamelCased name false}}Attributes", {{define}}_ID);
     buf.Put8(kFrameControlGlobalCommand)
-       .Put8(kSeqNum)
+       .Put8(seqNum)
        .Put8(ZCL_DISCOVER_ATTRIBUTES_COMMAND_ID)
        .Put16(0x0000)
        .Put8(0xFF);
@@ -174,22 +171,22 @@
 /*
  * Attribute {{asCamelCased name false}}
  */
-PacketBufferHandle encode{{asCamelCased parent.name false}}ClusterRead{{asCamelCased name false}}Attribute(EndpointId destinationEndpoint)
+PacketBufferHandle encode{{asCamelCased parent.name false}}ClusterRead{{asCamelCased name false}}Attribute(uint8_t seqNum, EndpointId destinationEndpoint)
 {
     COMMAND_HEADER("Read{{asCamelCased parent.name false}}{{asCamelCased name false}}", {{parent.define}}_ID);
     buf.Put8(kFrameControlGlobalCommand)
-       .Put8(kSeqNum)
+       .Put8(seqNum)
        .Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID)
        .Put16({{asHex attributeCode 4}});
     COMMAND_FOOTER();
 }
 
 {{#if (isWritableAttribute)}}
-PacketBufferHandle encode{{asCamelCased parent.name false}}ClusterWrite{{asCamelCased name false}}Attribute(EndpointId destinationEndpoint, {{asUnderlyingZclType type}} {{asCamelCased name}})
+PacketBufferHandle encode{{asCamelCased parent.name false}}ClusterWrite{{asCamelCased name false}}Attribute(uint8_t seqNum, EndpointId destinationEndpoint, {{asUnderlyingZclType type}} {{asCamelCased name}})
 {
     COMMAND_HEADER("Write{{asCamelCased parent.name false}}{{asCamelCased name false}}", {{parent.define}}_ID);
     buf.Put8(kFrameControlGlobalCommand)
-       .Put8(kSeqNum)
+       .Put8(seqNum)
        .Put8(ZCL_WRITE_ATTRIBUTES_COMMAND_ID)
        .Put16({{asHex attributeCode 4}})
        .Put8({{atomicTypeId}})
@@ -199,11 +196,11 @@
 
 {{/if}}
 {{#if (isReportableAttribute)}}
-PacketBufferHandle encode{{asCamelCased parent.name false}}ClusterReport{{asCamelCased name false}}Attribute(EndpointId destinationEndpoint, uint16_t minInterval, uint16_t maxInterval{{#unless (isDiscreteType)}}, {{chipType}} change{{/unless}})
+PacketBufferHandle encode{{asCamelCased parent.name false}}ClusterConfigure{{asCamelCased name false}}Attribute(uint8_t seqNum, EndpointId destinationEndpoint, uint16_t minInterval, uint16_t maxInterval{{#unless (isDiscreteType)}}, {{chipType}} change{{/unless}})
 {
     COMMAND_HEADER("Report{{asCamelCased parent.name false}}{{asCamelCased name false}}", {{parent.define}}_ID);
     buf.Put8(kFrameControlGlobalCommand)
-       .Put8(kSeqNum)
+       .Put8(seqNum)
        .Put8(ZCL_CONFIGURE_REPORTING_COMMAND_ID)
        .Put8(EMBER_ZCL_REPORTING_DIRECTION_REPORTED)
        .Put16({{asHex attributeCode 4}})
diff --git a/src/app/zap-templates/templates/chip/helper.js b/src/app/zap-templates/templates/chip/helper.js
index f322e12..0a90d86 100644
--- a/src/app/zap-templates/templates/chip/helper.js
+++ b/src/app/zap-templates/templates/chip/helper.js
@@ -85,6 +85,16 @@
       .then(clusters => templateUtil.collectBlocks(clusters, options, this))
 }
 
+function chip_clusters(options)
+{
+  const db = this.global.db;
+
+  return queryImpexp.exportendPointTypeIds(db, this.global.sessionId)
+      .then(endpointTypes => { return zclQuery.exportAllClustersDetailsFromEndpointTypes(db, endpointTypes) })
+      .then(clusters => clusters.filter(cluster => cluster.enabled == 1))
+      .then(clusters => templateUtil.collectBlocks(clusters, options, this))
+}
+
 /**
  * Creates block iterator over the server side cluster command
  * for a given cluster.
@@ -266,7 +276,7 @@
   function fn(pkgId)
   {
     return getAttributes.call(this, pkgId, options).then(atts => {
-      atts = atts.filter(att => att.clusterCode == clusterCode && att.side == clusterSide);
+      atts = atts.filter(att => att.clusterCode == clusterCode && att.side == 'server');
       atts.forEach(att => {
         const sameAttributes = atts.filter(att2 => att.name == att2.name);
         let isWritable       = !!sameAttributes.find(att2 => att2.writable);
@@ -383,13 +393,153 @@
   }
 }
 
+function hasSpecificResponse(commandName)
+{
+  // Retrieve the clusterName and the clusterSide. If any if not available, an error will be thrown.
+  const clusterName = this.parent.name;
+  const clusterSide = this.parent.side;
+  if (clusterName == undefined || clusterSide == undefined) {
+    const error = 'chip_server_cluster_commands: Could not find relevant parent cluster.';
+    console.log(error);
+    throw error;
+  }
+
+  function filterCommand(cmd)
+  {
+    return cmd.clusterName == clusterName && cmd.name == (commandName + "Response");
+  }
+
+  function fn(pkgId)
+  {
+    const db = this.global.db;
+    return queryImpexp.exportendPointTypeIds(db, this.global.sessionId)
+        .then(endpointTypes => zclQuery.exportClustersAndEndpointDetailsFromEndpointTypes(db, endpointTypes))
+        .then(endpointsAndClusters => zclQuery.exportCommandDetailsFromAllEndpointTypesAndClusters(db, endpointsAndClusters))
+        .then(endpointCommands => endpointCommands.filter(filterCommand).length)
+  }
+
+  const promise = templateUtil.ensureZclPackageId(this).then(fn.bind(this)).catch(err => console.log(err));
+  return templateUtil.templatePromise(this.global, promise);
+}
+
+function asCallbackAttributeType(attributeType)
+{
+  switch (parseInt(attributeType)) {
+  case 0x00: // nodata / No data
+  case 0x0A: // data24 / 24-bit data
+  case 0x0C: // data40 / 40-bit data
+  case 0x0D: // data48 / 48-bit data
+  case 0x0E: // data56 / 56-bit data
+  case 0x1A: // map24 / 24-bit bitmap
+  case 0x1C: // map40 / 40-bit bitmap
+  case 0x1D: // map48 / 48-bit bitmap
+  case 0x1E: // map56 / 56-bit bitmap
+  case 0x22: // uint24 / Unsigned 24-bit integer
+  case 0x24: // uint40 / Unsigned 40-bit integer
+  case 0x25: // uint48 / Unsigned 48-bit integer
+  case 0x26: // uint56 / Unsigned 56-bit integer
+  case 0x2A: // int24 / Signed 24-bit integer
+  case 0x2C: // int40 / Signed 40-bit integer
+  case 0x2D: // int48 / Signed 48-bit integer
+  case 0x2E: // int56 / Signed 56-bit integer
+  case 0x38: // semi / Semi-precision
+  case 0x39: // single / Single precision
+  case 0x3A: // double / Double precision
+  case 0x41: // octstr / Octet string
+  case 0x42: // string / Character string
+  case 0x43: // octstr16 / Long octet string
+  case 0x44: // string16 / Long character string
+  case 0x48: // array / Array
+  case 0x49: // struct / Structure
+  case 0x50: // set / Set
+  case 0x51: // bag / Bag
+  case 0xE0: // ToD / Time of day
+    return 'Unsupported';
+  case 0x08: // data8 / 8-bit data
+  case 0x18: // map8 / 8-bit bitmap
+  case 0x20: // uint8 / Unsigned  8-bit integer
+  case 0x30: // enum8 / 8-bit enumeration
+    return 'Int8u';
+  case 0x09: // data16 / 16-bit data
+  case 0x19: // map16 / 16-bit bitmap
+  case 0x21: // uint16 / Unsigned 16-bit integer
+  case 0x31: // enum16 / 16-bit enumeration
+  case 0xE8: // clusterId / Cluster ID
+  case 0xE9: // attribId / Attribute ID
+  case 0xEA: // bacOID / BACnet OID
+  case 0xF1: // key128 / 128-bit security key
+  case 0xFF: // unk / Unknown
+    return 'Int16u';
+  case 0x0B: // data32 / 32-bit data
+  case 0x1B: // map32 / 32-bit bitmap
+  case 0x23: // uint32 / Unsigned 32-bit integer
+  case 0xE1: // date / Date
+  case 0xE2: // UTC / UTCTime
+    return 'Int32u';
+  case 0x0F: // data64 / 64-bit data
+  case 0x1F: // map64 / 64-bit bitmap
+  case 0x27: // uint64 / Unsigned 64-bit integer
+  case 0xF0: // EUI64 / IEEE address
+    return 'Int64u';
+  case 0x10: // bool / Boolean
+    return 'Boolean';
+  case 0x28: // int8 / Signed 8-bit integer
+    return 'Int8s';
+  case 0x29: // int16 / Signed 16-bit integer
+    return 'Int16s';
+  case 0x2B: // int32 / Signed 32-bit integer
+    return 'Int32s';
+  case 0x2F: // int64 / Signed 64-bit integer
+    return 'Int64s';
+  default:
+    error = 'Unhandled attribute type ' + attributeType;
+    throw error;
+  }
+}
+
+function asObjectiveCNumberType(label, type)
+{
+  function fn(pkgId)
+  {
+    const options = { 'hash' : {} };
+    return zclHelper.asUnderlyingZclType.call(this, type, options).then(zclType => {
+      switch (zclType) {
+      case 'uint8_t':
+        return 'UnsignedChar';
+      case 'uint16_t':
+        return 'UnsignedShort';
+      case 'uint32_t':
+        return 'UnsignedLong';
+      case 'uint64_t':
+        return 'UnsignedLongLong';
+      case 'int8_t':
+        return 'Char';
+      case 'int16_t':
+        return 'Short';
+      case 'int32_t':
+        return 'Long';
+      case 'int64_t':
+        return 'LongLong';
+      default:
+        error = label + ': Unhandled underlying type ' + zclType + ' for original type ' + type;
+        throw error;
+      }
+    })
+  }
+
+  const promise = templateUtil.ensureZclPackageId(this).then(fn.bind(this)).catch(err => console.log(err));
+  return templateUtil.templatePromise(this.global, promise)
+}
+
 //
 // Module exports
 //
+exports.chip_clusters                         = chip_clusters;
 exports.chip_server_clusters                  = chip_server_clusters;
 exports.chip_server_cluster_commands          = chip_server_cluster_commands;
 exports.chip_server_cluster_command_arguments = chip_server_cluster_command_arguments
 exports.asBasicType                           = ChipTypesHelper.asBasicType;
+exports.asObjectiveCNumberType                = asObjectiveCNumberType;
 exports.isSignedType                          = isSignedType;
 exports.isDiscreteType                        = isDiscreteType;
 exports.chip_server_cluster_attributes        = chip_server_cluster_attributes;
@@ -398,3 +548,5 @@
 exports.isManufacturerSpecificCommand         = isManufacturerSpecificCommand;
 exports.asPythonType                          = asPythonType;
 exports.asPythonCType                         = asPythonCType;
+exports.asCallbackAttributeType               = asCallbackAttributeType;
+exports.hasSpecificResponse                   = hasSpecificResponse;
diff --git a/src/app/zap-templates/templates/chip/python-ChipDeviceController-ClusterCommands.zapt b/src/app/zap-templates/templates/chip/python-ChipDeviceController-ClusterCommands.zapt
index 3ed188f..d129c83 100644
--- a/src/app/zap-templates/templates/chip/python-ChipDeviceController-ClusterCommands.zapt
+++ b/src/app/zap-templates/templates/chip/python-ChipDeviceController-ClusterCommands.zapt
@@ -23,7 +23,7 @@
     chip::Controller::{{asCamelCased clusterName false}}Cluster cluster{{asCamelCased clusterName false}};
     (void) ZCLgroupId;
     cluster{{asCamelCased clusterName false}}.Associate(device, ZCLendpointId);
-    return cluster{{asCamelCased clusterName false}}.{{asCamelCased name false}}(nullptr{{#chip_server_cluster_command_arguments}}, {{asCamelCased label}}{{/chip_server_cluster_command_arguments}});
+    return cluster{{asCamelCased clusterName false}}.{{asCamelCased name false}}(nullptr, nullptr{{#chip_server_cluster_command_arguments}}, {{asCamelCased label}}{{/chip_server_cluster_command_arguments}});
 }
 {{/chip_server_cluster_commands}}
 // End of Cluster {{asCamelCased name false}}
diff --git a/src/controller/BUILD.gn b/src/controller/BUILD.gn
index 53c7c9b..51ee738 100644
--- a/src/controller/BUILD.gn
+++ b/src/controller/BUILD.gn
@@ -19,6 +19,8 @@
   output_name = "libChipController"
 
   sources = [
+    "${chip_root}/src/app/server/DataModelHandler.cpp",
+    "${chip_root}/src/app/util/CHIPDeviceCallbacksMgr.cpp",
     "CHIPCluster.cpp",
     "CHIPCluster.h",
     "CHIPClusters.cpp",
diff --git a/src/controller/CHIPCluster.cpp b/src/controller/CHIPCluster.cpp
index 22ce8af..814dc4c 100644
--- a/src/controller/CHIPCluster.cpp
+++ b/src/controller/CHIPCluster.cpp
@@ -44,7 +44,8 @@
     mDevice = nullptr;
 }
 
-CHIP_ERROR ClusterBase::SendCommand(chip::System::PacketBufferHandle payload, Callback::Callback<> * responseHandler)
+CHIP_ERROR ClusterBase::SendCommand(uint8_t seqNum, chip::System::PacketBufferHandle payload,
+                                    Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback)
 {
     CHIP_ERROR err = CHIP_NO_ERROR;
 
@@ -54,9 +55,9 @@
     err = mDevice->SendMessage(std::move(payload));
     SuccessOrExit(err);
 
-    if (responseHandler != nullptr)
+    if (onSuccessCallback != nullptr || onFailureCallback != nullptr)
     {
-        mDevice->AddResponseHandler(mEndpoint, mClusterId, responseHandler);
+        mDevice->AddResponseHandler(seqNum, onSuccessCallback, onFailureCallback);
     }
 
 exit:
@@ -68,16 +69,12 @@
     return err;
 }
 
-CHIP_ERROR ClusterBase::RequestAttributeReporting(chip::System::PacketBufferHandle payload, Callback::Callback<> * responseHandler,
-                                                  Callback::Callback<> * reportHandler)
+CHIP_ERROR ClusterBase::RequestAttributeReporting(AttributeId attributeId, Callback::Cancelable * onReportCallback)
 {
     CHIP_ERROR err = CHIP_NO_ERROR;
 
-    err = SendCommand(std::move(payload), responseHandler);
-    SuccessOrExit(err);
-
-    VerifyOrExit(reportHandler != nullptr, err = CHIP_ERROR_INVALID_ARGUMENT);
-    mDevice->AddReportHandler(mEndpoint, mClusterId, reportHandler);
+    VerifyOrExit(onReportCallback != nullptr, err = CHIP_ERROR_INVALID_ARGUMENT);
+    mDevice->AddReportHandler(mEndpoint, mClusterId, attributeId, onReportCallback);
 
 exit:
     return err;
diff --git a/src/controller/CHIPCluster.h b/src/controller/CHIPCluster.h
index b3ab9f9..ed27f07 100644
--- a/src/controller/CHIPCluster.h
+++ b/src/controller/CHIPCluster.h
@@ -50,25 +50,26 @@
      *   Send the command, contained into the associate buffer, to the device. Add a callback
      *   handler, that'll be called when the response is received from the device.
      *
+     * @param[in] seqNum            The sequence number identifier of the command
      * @param[in] payload           The payload of the encoded command
-     * @param[in] responseHandler   The handler function that's called on receiving command response
+     * @param[in] successHandler    The handler function that's called on receiving command response success
+     * @param[in] failureHandler    The handler function that's called on receiving command response failure
      */
-    CHIP_ERROR SendCommand(chip::System::PacketBufferHandle payload, Callback::Callback<> * responseHandler);
+    CHIP_ERROR SendCommand(uint8_t seqNum, chip::System::PacketBufferHandle payload, Callback::Cancelable * successHandler,
+                           Callback::Cancelable * failureHandler);
 
     /**
      * @brief
      *   Request attribute reports from the device. Add a callback
      *   handler, that'll be called when the reports are received from the device.
      *
-     * @param[in] payload           The payload of the encoded command
-     * @param[in] responseHandler   The handler function that's called on receiving command response
+     * @param[in] attributeId       The report target attribute id
      * @param[in] reportHandler     The handler function that's called on receiving attribute reports
      *                              The reporting handler continues to be called as long as the callback
      *                              is active. The user can stop the reporting by cancelling the callback.
      *                              Reference: chip::Callback::Cancel()
      */
-    CHIP_ERROR RequestAttributeReporting(chip::System::PacketBufferHandle payload, Callback::Callback<> * responseHandler,
-                                         Callback::Callback<> * reportHandler);
+    CHIP_ERROR RequestAttributeReporting(AttributeId attributeId, Callback::Cancelable * reportHandler);
 
     const ClusterId mClusterId;
     Device * mDevice;
diff --git a/src/controller/CHIPClusters.cpp b/src/controller/CHIPClusters.cpp
index 0c37875..c3a34a2 100644
--- a/src/controller/CHIPClusters.cpp
+++ b/src/controller/CHIPClusters.cpp
@@ -29,7 +29,8 @@
 // TODO(#4503): Commands should take group id as an argument.
 
 // BarrierControl Cluster Commands
-CHIP_ERROR BarrierControlCluster::BarrierControlGoToPercent(Callback::Callback<> * onCompletion, uint8_t percentOpen)
+CHIP_ERROR BarrierControlCluster::BarrierControlGoToPercent(Callback::Cancelable * onSuccessCallback,
+                                                            Callback::Cancelable * onFailureCallback, uint8_t percentOpen)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -54,12 +55,15 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encodeBarrierControlClusterBarrierControlGoToPercentCommand(mEndpoint, percentOpen);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload =
+        encodeBarrierControlClusterBarrierControlGoToPercentCommand(seqNum, mEndpoint, percentOpen);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR BarrierControlCluster::BarrierControlStop(Callback::Callback<> * onCompletion)
+CHIP_ERROR BarrierControlCluster::BarrierControlStop(Callback::Cancelable * onSuccessCallback,
+                                                     Callback::Cancelable * onFailureCallback)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -82,49 +86,62 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encodeBarrierControlClusterBarrierControlStopCommand(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeBarrierControlClusterBarrierControlStopCommand(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
 // BarrierControl Cluster Attributes
-CHIP_ERROR BarrierControlCluster::DiscoverAttributes(Callback::Callback<> * onCompletion)
+CHIP_ERROR BarrierControlCluster::DiscoverAttributes(Callback::Cancelable * onSuccessCallback,
+                                                     Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeBarrierControlClusterDiscoverAttributes(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeBarrierControlClusterDiscoverAttributes(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
-CHIP_ERROR BarrierControlCluster::ReadAttributeBarrierMovingState(Callback::Callback<> * onCompletion)
+CHIP_ERROR BarrierControlCluster::ReadAttributeBarrierMovingState(Callback::Cancelable * onSuccessCallback,
+                                                                  Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeBarrierControlClusterReadBarrierMovingStateAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeBarrierControlClusterReadBarrierMovingStateAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR BarrierControlCluster::ReadAttributeBarrierSafetyStatus(Callback::Callback<> * onCompletion)
+CHIP_ERROR BarrierControlCluster::ReadAttributeBarrierSafetyStatus(Callback::Cancelable * onSuccessCallback,
+                                                                   Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeBarrierControlClusterReadBarrierSafetyStatusAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeBarrierControlClusterReadBarrierSafetyStatusAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR BarrierControlCluster::ReadAttributeBarrierCapabilities(Callback::Callback<> * onCompletion)
+CHIP_ERROR BarrierControlCluster::ReadAttributeBarrierCapabilities(Callback::Cancelable * onSuccessCallback,
+                                                                   Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeBarrierControlClusterReadBarrierCapabilitiesAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeBarrierControlClusterReadBarrierCapabilitiesAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR BarrierControlCluster::ReadAttributeBarrierPosition(Callback::Callback<> * onCompletion)
+CHIP_ERROR BarrierControlCluster::ReadAttributeBarrierPosition(Callback::Cancelable * onSuccessCallback,
+                                                               Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeBarrierControlClusterReadBarrierPositionAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeBarrierControlClusterReadBarrierPositionAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR BarrierControlCluster::ReadAttributeClusterRevision(Callback::Callback<> * onCompletion)
+CHIP_ERROR BarrierControlCluster::ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback,
+                                                               Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeBarrierControlClusterReadClusterRevisionAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeBarrierControlClusterReadClusterRevisionAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
 // Basic Cluster Commands
-CHIP_ERROR BasicCluster::MfgSpecificPing(Callback::Callback<> * onCompletion)
+CHIP_ERROR BasicCluster::MfgSpecificPing(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -147,12 +164,13 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encodeBasicClusterMfgSpecificPingCommand(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeBasicClusterMfgSpecificPingCommand(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR BasicCluster::ResetToFactoryDefaults(Callback::Callback<> * onCompletion)
+CHIP_ERROR BasicCluster::ResetToFactoryDefaults(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -175,38 +193,45 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encodeBasicClusterResetToFactoryDefaultsCommand(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeBasicClusterResetToFactoryDefaultsCommand(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
 // Basic Cluster Attributes
-CHIP_ERROR BasicCluster::DiscoverAttributes(Callback::Callback<> * onCompletion)
+CHIP_ERROR BasicCluster::DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeBasicClusterDiscoverAttributes(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeBasicClusterDiscoverAttributes(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
-CHIP_ERROR BasicCluster::ReadAttributeZclVersion(Callback::Callback<> * onCompletion)
+CHIP_ERROR BasicCluster::ReadAttributeZclVersion(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeBasicClusterReadZclVersionAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeBasicClusterReadZclVersionAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR BasicCluster::ReadAttributePowerSource(Callback::Callback<> * onCompletion)
+CHIP_ERROR BasicCluster::ReadAttributePowerSource(Callback::Cancelable * onSuccessCallback,
+                                                  Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeBasicClusterReadPowerSourceAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeBasicClusterReadPowerSourceAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR BasicCluster::ReadAttributeClusterRevision(Callback::Callback<> * onCompletion)
+CHIP_ERROR BasicCluster::ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback,
+                                                      Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeBasicClusterReadClusterRevisionAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeBasicClusterReadClusterRevisionAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
 // Binding Cluster Commands
-CHIP_ERROR BindingCluster::Bind(Callback::Callback<> * onCompletion, chip::NodeId nodeId, chip::GroupId groupId,
-                                chip::EndpointId endpointId, chip::ClusterId clusterId)
+CHIP_ERROR BindingCluster::Bind(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                chip::NodeId nodeId, chip::GroupId groupId, chip::EndpointId endpointId, chip::ClusterId clusterId)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -237,13 +262,15 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encodeBindingClusterBindCommand(mEndpoint, nodeId, groupId, endpointId, clusterId);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeBindingClusterBindCommand(seqNum, mEndpoint, nodeId, groupId, endpointId, clusterId);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR BindingCluster::Unbind(Callback::Callback<> * onCompletion, chip::NodeId nodeId, chip::GroupId groupId,
-                                  chip::EndpointId endpointId, chip::ClusterId clusterId)
+CHIP_ERROR BindingCluster::Unbind(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                  chip::NodeId nodeId, chip::GroupId groupId, chip::EndpointId endpointId,
+                                  chip::ClusterId clusterId)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -274,26 +301,31 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encodeBindingClusterUnbindCommand(mEndpoint, nodeId, groupId, endpointId, clusterId);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload =
+        encodeBindingClusterUnbindCommand(seqNum, mEndpoint, nodeId, groupId, endpointId, clusterId);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
 // Binding Cluster Attributes
-CHIP_ERROR BindingCluster::DiscoverAttributes(Callback::Callback<> * onCompletion)
+CHIP_ERROR BindingCluster::DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeBindingClusterDiscoverAttributes(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeBindingClusterDiscoverAttributes(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
-CHIP_ERROR BindingCluster::ReadAttributeClusterRevision(Callback::Callback<> * onCompletion)
+CHIP_ERROR BindingCluster::ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback,
+                                                        Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeBindingClusterReadClusterRevisionAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeBindingClusterReadClusterRevisionAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
 // ColorControl Cluster Commands
-CHIP_ERROR ColorControlCluster::MoveColor(Callback::Callback<> * onCompletion, int16_t rateX, int16_t rateY, uint8_t optionsMask,
-                                          uint8_t optionsOverride)
+CHIP_ERROR ColorControlCluster::MoveColor(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                          int16_t rateX, int16_t rateY, uint8_t optionsMask, uint8_t optionsOverride)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -324,13 +356,15 @@
 
     return mDevice->SendCommands();
 #else
+    uint8_t seqNum = mDevice->GetNextSequenceNumber();
     System::PacketBufferHandle payload =
-        encodeColorControlClusterMoveColorCommand(mEndpoint, rateX, rateY, optionsMask, optionsOverride);
-    return SendCommand(std::move(payload), onCompletion);
+        encodeColorControlClusterMoveColorCommand(seqNum, mEndpoint, rateX, rateY, optionsMask, optionsOverride);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR ColorControlCluster::MoveColorTemperature(Callback::Callback<> * onCompletion, uint8_t moveMode, uint16_t rate,
+CHIP_ERROR ColorControlCluster::MoveColorTemperature(Callback::Cancelable * onSuccessCallback,
+                                                     Callback::Cancelable * onFailureCallback, uint8_t moveMode, uint16_t rate,
                                                      uint16_t colorTemperatureMinimum, uint16_t colorTemperatureMaximum,
                                                      uint8_t optionsMask, uint8_t optionsOverride)
 {
@@ -367,14 +401,15 @@
 
     return mDevice->SendCommands();
 #else
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
     System::PacketBufferHandle payload = encodeColorControlClusterMoveColorTemperatureCommand(
-        mEndpoint, moveMode, rate, colorTemperatureMinimum, colorTemperatureMaximum, optionsMask, optionsOverride);
-    return SendCommand(std::move(payload), onCompletion);
+        seqNum, mEndpoint, moveMode, rate, colorTemperatureMinimum, colorTemperatureMaximum, optionsMask, optionsOverride);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR ColorControlCluster::MoveHue(Callback::Callback<> * onCompletion, uint8_t moveMode, uint8_t rate, uint8_t optionsMask,
-                                        uint8_t optionsOverride)
+CHIP_ERROR ColorControlCluster::MoveHue(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                        uint8_t moveMode, uint8_t rate, uint8_t optionsMask, uint8_t optionsOverride)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -405,14 +440,15 @@
 
     return mDevice->SendCommands();
 #else
+    uint8_t seqNum = mDevice->GetNextSequenceNumber();
     System::PacketBufferHandle payload =
-        encodeColorControlClusterMoveHueCommand(mEndpoint, moveMode, rate, optionsMask, optionsOverride);
-    return SendCommand(std::move(payload), onCompletion);
+        encodeColorControlClusterMoveHueCommand(seqNum, mEndpoint, moveMode, rate, optionsMask, optionsOverride);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR ColorControlCluster::MoveSaturation(Callback::Callback<> * onCompletion, uint8_t moveMode, uint8_t rate,
-                                               uint8_t optionsMask, uint8_t optionsOverride)
+CHIP_ERROR ColorControlCluster::MoveSaturation(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                               uint8_t moveMode, uint8_t rate, uint8_t optionsMask, uint8_t optionsOverride)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -443,14 +479,16 @@
 
     return mDevice->SendCommands();
 #else
+    uint8_t seqNum = mDevice->GetNextSequenceNumber();
     System::PacketBufferHandle payload =
-        encodeColorControlClusterMoveSaturationCommand(mEndpoint, moveMode, rate, optionsMask, optionsOverride);
-    return SendCommand(std::move(payload), onCompletion);
+        encodeColorControlClusterMoveSaturationCommand(seqNum, mEndpoint, moveMode, rate, optionsMask, optionsOverride);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR ColorControlCluster::MoveToColor(Callback::Callback<> * onCompletion, uint16_t colorX, uint16_t colorY,
-                                            uint16_t transitionTime, uint8_t optionsMask, uint8_t optionsOverride)
+CHIP_ERROR ColorControlCluster::MoveToColor(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                            uint16_t colorX, uint16_t colorY, uint16_t transitionTime, uint8_t optionsMask,
+                                            uint8_t optionsOverride)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -483,13 +521,15 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload =
-        encodeColorControlClusterMoveToColorCommand(mEndpoint, colorX, colorY, transitionTime, optionsMask, optionsOverride);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterMoveToColorCommand(seqNum, mEndpoint, colorX, colorY,
+                                                                                     transitionTime, optionsMask, optionsOverride);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR ColorControlCluster::MoveToColorTemperature(Callback::Callback<> * onCompletion, uint16_t colorTemperature,
+CHIP_ERROR ColorControlCluster::MoveToColorTemperature(Callback::Cancelable * onSuccessCallback,
+                                                       Callback::Cancelable * onFailureCallback, uint16_t colorTemperature,
                                                        uint16_t transitionTime, uint8_t optionsMask, uint8_t optionsOverride)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
@@ -521,14 +561,16 @@
 
     return mDevice->SendCommands();
 #else
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
     System::PacketBufferHandle payload = encodeColorControlClusterMoveToColorTemperatureCommand(
-        mEndpoint, colorTemperature, transitionTime, optionsMask, optionsOverride);
-    return SendCommand(std::move(payload), onCompletion);
+        seqNum, mEndpoint, colorTemperature, transitionTime, optionsMask, optionsOverride);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR ColorControlCluster::MoveToHue(Callback::Callback<> * onCompletion, uint8_t hue, uint8_t direction,
-                                          uint16_t transitionTime, uint8_t optionsMask, uint8_t optionsOverride)
+CHIP_ERROR ColorControlCluster::MoveToHue(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                          uint8_t hue, uint8_t direction, uint16_t transitionTime, uint8_t optionsMask,
+                                          uint8_t optionsOverride)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -561,13 +603,15 @@
 
     return mDevice->SendCommands();
 #else
+    uint8_t seqNum = mDevice->GetNextSequenceNumber();
     System::PacketBufferHandle payload =
-        encodeColorControlClusterMoveToHueCommand(mEndpoint, hue, direction, transitionTime, optionsMask, optionsOverride);
-    return SendCommand(std::move(payload), onCompletion);
+        encodeColorControlClusterMoveToHueCommand(seqNum, mEndpoint, hue, direction, transitionTime, optionsMask, optionsOverride);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR ColorControlCluster::MoveToHueAndSaturation(Callback::Callback<> * onCompletion, uint8_t hue, uint8_t saturation,
+CHIP_ERROR ColorControlCluster::MoveToHueAndSaturation(Callback::Cancelable * onSuccessCallback,
+                                                       Callback::Cancelable * onFailureCallback, uint8_t hue, uint8_t saturation,
                                                        uint16_t transitionTime, uint8_t optionsMask, uint8_t optionsOverride)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
@@ -601,14 +645,16 @@
 
     return mDevice->SendCommands();
 #else
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
     System::PacketBufferHandle payload = encodeColorControlClusterMoveToHueAndSaturationCommand(
-        mEndpoint, hue, saturation, transitionTime, optionsMask, optionsOverride);
-    return SendCommand(std::move(payload), onCompletion);
+        seqNum, mEndpoint, hue, saturation, transitionTime, optionsMask, optionsOverride);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR ColorControlCluster::MoveToSaturation(Callback::Callback<> * onCompletion, uint8_t saturation, uint16_t transitionTime,
-                                                 uint8_t optionsMask, uint8_t optionsOverride)
+CHIP_ERROR ColorControlCluster::MoveToSaturation(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                                 uint8_t saturation, uint16_t transitionTime, uint8_t optionsMask,
+                                                 uint8_t optionsOverride)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -639,14 +685,16 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload =
-        encodeColorControlClusterMoveToSaturationCommand(mEndpoint, saturation, transitionTime, optionsMask, optionsOverride);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterMoveToSaturationCommand(
+        seqNum, mEndpoint, saturation, transitionTime, optionsMask, optionsOverride);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR ColorControlCluster::StepColor(Callback::Callback<> * onCompletion, int16_t stepX, int16_t stepY,
-                                          uint16_t transitionTime, uint8_t optionsMask, uint8_t optionsOverride)
+CHIP_ERROR ColorControlCluster::StepColor(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                          int16_t stepX, int16_t stepY, uint16_t transitionTime, uint8_t optionsMask,
+                                          uint8_t optionsOverride)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -679,13 +727,15 @@
 
     return mDevice->SendCommands();
 #else
+    uint8_t seqNum = mDevice->GetNextSequenceNumber();
     System::PacketBufferHandle payload =
-        encodeColorControlClusterStepColorCommand(mEndpoint, stepX, stepY, transitionTime, optionsMask, optionsOverride);
-    return SendCommand(std::move(payload), onCompletion);
+        encodeColorControlClusterStepColorCommand(seqNum, mEndpoint, stepX, stepY, transitionTime, optionsMask, optionsOverride);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR ColorControlCluster::StepColorTemperature(Callback::Callback<> * onCompletion, uint8_t stepMode, uint16_t stepSize,
+CHIP_ERROR ColorControlCluster::StepColorTemperature(Callback::Cancelable * onSuccessCallback,
+                                                     Callback::Cancelable * onFailureCallback, uint8_t stepMode, uint16_t stepSize,
                                                      uint16_t transitionTime, uint16_t colorTemperatureMinimum,
                                                      uint16_t colorTemperatureMaximum, uint8_t optionsMask, uint8_t optionsOverride)
 {
@@ -724,15 +774,17 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload =
-        encodeColorControlClusterStepColorTemperatureCommand(mEndpoint, stepMode, stepSize, transitionTime, colorTemperatureMinimum,
-                                                             colorTemperatureMaximum, optionsMask, optionsOverride);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterStepColorTemperatureCommand(
+        seqNum, mEndpoint, stepMode, stepSize, transitionTime, colorTemperatureMinimum, colorTemperatureMaximum, optionsMask,
+        optionsOverride);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR ColorControlCluster::StepHue(Callback::Callback<> * onCompletion, uint8_t stepMode, uint8_t stepSize,
-                                        uint8_t transitionTime, uint8_t optionsMask, uint8_t optionsOverride)
+CHIP_ERROR ColorControlCluster::StepHue(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                        uint8_t stepMode, uint8_t stepSize, uint8_t transitionTime, uint8_t optionsMask,
+                                        uint8_t optionsOverride)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -765,14 +817,16 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload =
-        encodeColorControlClusterStepHueCommand(mEndpoint, stepMode, stepSize, transitionTime, optionsMask, optionsOverride);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterStepHueCommand(seqNum, mEndpoint, stepMode, stepSize,
+                                                                                 transitionTime, optionsMask, optionsOverride);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR ColorControlCluster::StepSaturation(Callback::Callback<> * onCompletion, uint8_t stepMode, uint8_t stepSize,
-                                               uint8_t transitionTime, uint8_t optionsMask, uint8_t optionsOverride)
+CHIP_ERROR ColorControlCluster::StepSaturation(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                               uint8_t stepMode, uint8_t stepSize, uint8_t transitionTime, uint8_t optionsMask,
+                                               uint8_t optionsOverride)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -805,13 +859,15 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload =
-        encodeColorControlClusterStepSaturationCommand(mEndpoint, stepMode, stepSize, transitionTime, optionsMask, optionsOverride);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterStepSaturationCommand(
+        seqNum, mEndpoint, stepMode, stepSize, transitionTime, optionsMask, optionsOverride);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR ColorControlCluster::StopMoveStep(Callback::Callback<> * onCompletion, uint8_t optionsMask, uint8_t optionsOverride)
+CHIP_ERROR ColorControlCluster::StopMoveStep(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                             uint8_t optionsMask, uint8_t optionsOverride)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -838,445 +894,612 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encodeColorControlClusterStopMoveStepCommand(mEndpoint, optionsMask, optionsOverride);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload =
+        encodeColorControlClusterStopMoveStepCommand(seqNum, mEndpoint, optionsMask, optionsOverride);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
 // ColorControl Cluster Attributes
-CHIP_ERROR ColorControlCluster::DiscoverAttributes(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::DiscoverAttributes(Callback::Cancelable * onSuccessCallback,
+                                                   Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterDiscoverAttributes(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterDiscoverAttributes(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
-CHIP_ERROR ColorControlCluster::ReadAttributeCurrentHue(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::ReadAttributeCurrentHue(Callback::Cancelable * onSuccessCallback,
+                                                        Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadCurrentHueAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadCurrentHueAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReportAttributeCurrentHue(Callback::Callback<> * onCompletion, Callback::Callback<> * onChange,
-                                                          uint16_t minInterval, uint16_t maxInterval, uint8_t change)
+CHIP_ERROR ColorControlCluster::ConfigureAttributeCurrentHue(Callback::Cancelable * onSuccessCallback,
+                                                             Callback::Cancelable * onFailureCallback, uint16_t minInterval,
+                                                             uint16_t maxInterval, uint8_t change)
 {
+    uint8_t seqNum = mDevice->GetNextSequenceNumber();
     System::PacketBufferHandle payload =
-        encodeColorControlClusterReportCurrentHueAttribute(mEndpoint, minInterval, maxInterval, change);
-    return RequestAttributeReporting(std::move(payload), onCompletion, onChange);
+        encodeColorControlClusterConfigureCurrentHueAttribute(seqNum, mEndpoint, minInterval, maxInterval, change);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReadAttributeCurrentSaturation(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::ReportAttributeCurrentHue(Callback::Cancelable * onReportCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadCurrentSaturationAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    return RequestAttributeReporting(0x0000, onReportCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReportAttributeCurrentSaturation(Callback::Callback<> * onCompletion,
-                                                                 Callback::Callback<> * onChange, uint16_t minInterval,
-                                                                 uint16_t maxInterval, uint8_t change)
+CHIP_ERROR ColorControlCluster::ReadAttributeCurrentSaturation(Callback::Cancelable * onSuccessCallback,
+                                                               Callback::Cancelable * onFailureCallback)
 {
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadCurrentSaturationAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
+}
+
+CHIP_ERROR ColorControlCluster::ConfigureAttributeCurrentSaturation(Callback::Cancelable * onSuccessCallback,
+                                                                    Callback::Cancelable * onFailureCallback, uint16_t minInterval,
+                                                                    uint16_t maxInterval, uint8_t change)
+{
+    uint8_t seqNum = mDevice->GetNextSequenceNumber();
     System::PacketBufferHandle payload =
-        encodeColorControlClusterReportCurrentSaturationAttribute(mEndpoint, minInterval, maxInterval, change);
-    return RequestAttributeReporting(std::move(payload), onCompletion, onChange);
+        encodeColorControlClusterConfigureCurrentSaturationAttribute(seqNum, mEndpoint, minInterval, maxInterval, change);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReadAttributeRemainingTime(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::ReportAttributeCurrentSaturation(Callback::Cancelable * onReportCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadRemainingTimeAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    return RequestAttributeReporting(0x0001, onReportCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReadAttributeCurrentX(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::ReadAttributeRemainingTime(Callback::Cancelable * onSuccessCallback,
+                                                           Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadCurrentXAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadRemainingTimeAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReportAttributeCurrentX(Callback::Callback<> * onCompletion, Callback::Callback<> * onChange,
-                                                        uint16_t minInterval, uint16_t maxInterval, uint16_t change)
+CHIP_ERROR ColorControlCluster::ReadAttributeCurrentX(Callback::Cancelable * onSuccessCallback,
+                                                      Callback::Cancelable * onFailureCallback)
 {
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadCurrentXAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
+}
+
+CHIP_ERROR ColorControlCluster::ConfigureAttributeCurrentX(Callback::Cancelable * onSuccessCallback,
+                                                           Callback::Cancelable * onFailureCallback, uint16_t minInterval,
+                                                           uint16_t maxInterval, uint16_t change)
+{
+    uint8_t seqNum = mDevice->GetNextSequenceNumber();
     System::PacketBufferHandle payload =
-        encodeColorControlClusterReportCurrentXAttribute(mEndpoint, minInterval, maxInterval, change);
-    return RequestAttributeReporting(std::move(payload), onCompletion, onChange);
+        encodeColorControlClusterConfigureCurrentXAttribute(seqNum, mEndpoint, minInterval, maxInterval, change);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReadAttributeCurrentY(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::ReportAttributeCurrentX(Callback::Cancelable * onReportCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadCurrentYAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    return RequestAttributeReporting(0x0003, onReportCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReportAttributeCurrentY(Callback::Callback<> * onCompletion, Callback::Callback<> * onChange,
-                                                        uint16_t minInterval, uint16_t maxInterval, uint16_t change)
+CHIP_ERROR ColorControlCluster::ReadAttributeCurrentY(Callback::Cancelable * onSuccessCallback,
+                                                      Callback::Cancelable * onFailureCallback)
 {
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadCurrentYAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
+}
+
+CHIP_ERROR ColorControlCluster::ConfigureAttributeCurrentY(Callback::Cancelable * onSuccessCallback,
+                                                           Callback::Cancelable * onFailureCallback, uint16_t minInterval,
+                                                           uint16_t maxInterval, uint16_t change)
+{
+    uint8_t seqNum = mDevice->GetNextSequenceNumber();
     System::PacketBufferHandle payload =
-        encodeColorControlClusterReportCurrentYAttribute(mEndpoint, minInterval, maxInterval, change);
-    return RequestAttributeReporting(std::move(payload), onCompletion, onChange);
+        encodeColorControlClusterConfigureCurrentYAttribute(seqNum, mEndpoint, minInterval, maxInterval, change);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReadAttributeDriftCompensation(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::ReportAttributeCurrentY(Callback::Cancelable * onReportCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadDriftCompensationAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    return RequestAttributeReporting(0x0004, onReportCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReadAttributeCompensationText(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::ReadAttributeDriftCompensation(Callback::Cancelable * onSuccessCallback,
+                                                               Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadCompensationTextAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadDriftCompensationAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReadAttributeColorTemperature(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::ReadAttributeCompensationText(Callback::Cancelable * onSuccessCallback,
+                                                              Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadColorTemperatureAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadCompensationTextAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReportAttributeColorTemperature(Callback::Callback<> * onCompletion,
-                                                                Callback::Callback<> * onChange, uint16_t minInterval,
-                                                                uint16_t maxInterval, uint16_t change)
+CHIP_ERROR ColorControlCluster::ReadAttributeColorTemperature(Callback::Cancelable * onSuccessCallback,
+                                                              Callback::Cancelable * onFailureCallback)
 {
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadColorTemperatureAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
+}
+
+CHIP_ERROR ColorControlCluster::ConfigureAttributeColorTemperature(Callback::Cancelable * onSuccessCallback,
+                                                                   Callback::Cancelable * onFailureCallback, uint16_t minInterval,
+                                                                   uint16_t maxInterval, uint16_t change)
+{
+    uint8_t seqNum = mDevice->GetNextSequenceNumber();
     System::PacketBufferHandle payload =
-        encodeColorControlClusterReportColorTemperatureAttribute(mEndpoint, minInterval, maxInterval, change);
-    return RequestAttributeReporting(std::move(payload), onCompletion, onChange);
+        encodeColorControlClusterConfigureColorTemperatureAttribute(seqNum, mEndpoint, minInterval, maxInterval, change);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReadAttributeColorMode(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::ReportAttributeColorTemperature(Callback::Cancelable * onReportCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadColorModeAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    return RequestAttributeReporting(0x0007, onReportCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReadAttributeColorControlOptions(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::ReadAttributeColorMode(Callback::Cancelable * onSuccessCallback,
+                                                       Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadColorControlOptionsAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadColorModeAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::WriteAttributeColorControlOptions(Callback::Callback<> * onCompletion, uint8_t value)
+CHIP_ERROR ColorControlCluster::ReadAttributeColorControlOptions(Callback::Cancelable * onSuccessCallback,
+                                                                 Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterWriteColorControlOptionsAttribute(mEndpoint, value);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadColorControlOptionsAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReadAttributeNumberOfPrimaries(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::WriteAttributeColorControlOptions(Callback::Cancelable * onSuccessCallback,
+                                                                  Callback::Cancelable * onFailureCallback, uint8_t value)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadNumberOfPrimariesAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterWriteColorControlOptionsAttribute(seqNum, mEndpoint, value);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReadAttributePrimary1X(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::ReadAttributeNumberOfPrimaries(Callback::Cancelable * onSuccessCallback,
+                                                               Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadPrimary1XAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadNumberOfPrimariesAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReadAttributePrimary1Y(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::ReadAttributePrimary1X(Callback::Cancelable * onSuccessCallback,
+                                                       Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadPrimary1YAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadPrimary1XAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReadAttributePrimary1Intensity(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::ReadAttributePrimary1Y(Callback::Cancelable * onSuccessCallback,
+                                                       Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadPrimary1IntensityAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadPrimary1YAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReadAttributePrimary2X(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::ReadAttributePrimary1Intensity(Callback::Cancelable * onSuccessCallback,
+                                                               Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadPrimary2XAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadPrimary1IntensityAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReadAttributePrimary2Y(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::ReadAttributePrimary2X(Callback::Cancelable * onSuccessCallback,
+                                                       Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadPrimary2YAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadPrimary2XAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReadAttributePrimary2Intensity(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::ReadAttributePrimary2Y(Callback::Cancelable * onSuccessCallback,
+                                                       Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadPrimary2IntensityAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadPrimary2YAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReadAttributePrimary3X(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::ReadAttributePrimary2Intensity(Callback::Cancelable * onSuccessCallback,
+                                                               Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadPrimary3XAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadPrimary2IntensityAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReadAttributePrimary3Y(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::ReadAttributePrimary3X(Callback::Cancelable * onSuccessCallback,
+                                                       Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadPrimary3YAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadPrimary3XAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReadAttributePrimary3Intensity(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::ReadAttributePrimary3Y(Callback::Cancelable * onSuccessCallback,
+                                                       Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadPrimary3IntensityAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadPrimary3YAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReadAttributePrimary4X(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::ReadAttributePrimary3Intensity(Callback::Cancelable * onSuccessCallback,
+                                                               Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadPrimary4XAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadPrimary3IntensityAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReadAttributePrimary4Y(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::ReadAttributePrimary4X(Callback::Cancelable * onSuccessCallback,
+                                                       Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadPrimary4YAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadPrimary4XAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReadAttributePrimary4Intensity(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::ReadAttributePrimary4Y(Callback::Cancelable * onSuccessCallback,
+                                                       Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadPrimary4IntensityAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadPrimary4YAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReadAttributePrimary5X(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::ReadAttributePrimary4Intensity(Callback::Cancelable * onSuccessCallback,
+                                                               Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadPrimary5XAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadPrimary4IntensityAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReadAttributePrimary5Y(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::ReadAttributePrimary5X(Callback::Cancelable * onSuccessCallback,
+                                                       Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadPrimary5YAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadPrimary5XAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReadAttributePrimary5Intensity(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::ReadAttributePrimary5Y(Callback::Cancelable * onSuccessCallback,
+                                                       Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadPrimary5IntensityAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadPrimary5YAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReadAttributePrimary6X(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::ReadAttributePrimary5Intensity(Callback::Cancelable * onSuccessCallback,
+                                                               Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadPrimary6XAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadPrimary5IntensityAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReadAttributePrimary6Y(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::ReadAttributePrimary6X(Callback::Cancelable * onSuccessCallback,
+                                                       Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadPrimary6YAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadPrimary6XAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReadAttributePrimary6Intensity(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::ReadAttributePrimary6Y(Callback::Cancelable * onSuccessCallback,
+                                                       Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadPrimary6IntensityAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadPrimary6YAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReadAttributeWhitePointX(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::ReadAttributePrimary6Intensity(Callback::Cancelable * onSuccessCallback,
+                                                               Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadWhitePointXAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadPrimary6IntensityAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::WriteAttributeWhitePointX(Callback::Callback<> * onCompletion, uint16_t value)
+CHIP_ERROR ColorControlCluster::ReadAttributeWhitePointX(Callback::Cancelable * onSuccessCallback,
+                                                         Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterWriteWhitePointXAttribute(mEndpoint, value);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadWhitePointXAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReadAttributeWhitePointY(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::WriteAttributeWhitePointX(Callback::Cancelable * onSuccessCallback,
+                                                          Callback::Cancelable * onFailureCallback, uint16_t value)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadWhitePointYAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterWriteWhitePointXAttribute(seqNum, mEndpoint, value);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::WriteAttributeWhitePointY(Callback::Callback<> * onCompletion, uint16_t value)
+CHIP_ERROR ColorControlCluster::ReadAttributeWhitePointY(Callback::Cancelable * onSuccessCallback,
+                                                         Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterWriteWhitePointYAttribute(mEndpoint, value);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadWhitePointYAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReadAttributeColorPointRX(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::WriteAttributeWhitePointY(Callback::Cancelable * onSuccessCallback,
+                                                          Callback::Cancelable * onFailureCallback, uint16_t value)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadColorPointRXAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterWriteWhitePointYAttribute(seqNum, mEndpoint, value);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::WriteAttributeColorPointRX(Callback::Callback<> * onCompletion, uint16_t value)
+CHIP_ERROR ColorControlCluster::ReadAttributeColorPointRX(Callback::Cancelable * onSuccessCallback,
+                                                          Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterWriteColorPointRXAttribute(mEndpoint, value);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadColorPointRXAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReadAttributeColorPointRY(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::WriteAttributeColorPointRX(Callback::Cancelable * onSuccessCallback,
+                                                           Callback::Cancelable * onFailureCallback, uint16_t value)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadColorPointRYAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterWriteColorPointRXAttribute(seqNum, mEndpoint, value);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::WriteAttributeColorPointRY(Callback::Callback<> * onCompletion, uint16_t value)
+CHIP_ERROR ColorControlCluster::ReadAttributeColorPointRY(Callback::Cancelable * onSuccessCallback,
+                                                          Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterWriteColorPointRYAttribute(mEndpoint, value);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadColorPointRYAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReadAttributeColorPointRIntensity(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::WriteAttributeColorPointRY(Callback::Cancelable * onSuccessCallback,
+                                                           Callback::Cancelable * onFailureCallback, uint16_t value)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadColorPointRIntensityAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterWriteColorPointRYAttribute(seqNum, mEndpoint, value);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::WriteAttributeColorPointRIntensity(Callback::Callback<> * onCompletion, uint8_t value)
+CHIP_ERROR ColorControlCluster::ReadAttributeColorPointRIntensity(Callback::Cancelable * onSuccessCallback,
+                                                                  Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterWriteColorPointRIntensityAttribute(mEndpoint, value);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadColorPointRIntensityAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReadAttributeColorPointGX(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::WriteAttributeColorPointRIntensity(Callback::Cancelable * onSuccessCallback,
+                                                                   Callback::Cancelable * onFailureCallback, uint8_t value)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadColorPointGXAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterWriteColorPointRIntensityAttribute(seqNum, mEndpoint, value);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::WriteAttributeColorPointGX(Callback::Callback<> * onCompletion, uint16_t value)
+CHIP_ERROR ColorControlCluster::ReadAttributeColorPointGX(Callback::Cancelable * onSuccessCallback,
+                                                          Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterWriteColorPointGXAttribute(mEndpoint, value);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadColorPointGXAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReadAttributeColorPointGY(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::WriteAttributeColorPointGX(Callback::Cancelable * onSuccessCallback,
+                                                           Callback::Cancelable * onFailureCallback, uint16_t value)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadColorPointGYAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterWriteColorPointGXAttribute(seqNum, mEndpoint, value);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::WriteAttributeColorPointGY(Callback::Callback<> * onCompletion, uint16_t value)
+CHIP_ERROR ColorControlCluster::ReadAttributeColorPointGY(Callback::Cancelable * onSuccessCallback,
+                                                          Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterWriteColorPointGYAttribute(mEndpoint, value);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadColorPointGYAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReadAttributeColorPointGIntensity(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::WriteAttributeColorPointGY(Callback::Cancelable * onSuccessCallback,
+                                                           Callback::Cancelable * onFailureCallback, uint16_t value)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadColorPointGIntensityAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterWriteColorPointGYAttribute(seqNum, mEndpoint, value);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::WriteAttributeColorPointGIntensity(Callback::Callback<> * onCompletion, uint8_t value)
+CHIP_ERROR ColorControlCluster::ReadAttributeColorPointGIntensity(Callback::Cancelable * onSuccessCallback,
+                                                                  Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterWriteColorPointGIntensityAttribute(mEndpoint, value);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadColorPointGIntensityAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReadAttributeColorPointBX(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::WriteAttributeColorPointGIntensity(Callback::Cancelable * onSuccessCallback,
+                                                                   Callback::Cancelable * onFailureCallback, uint8_t value)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadColorPointBXAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterWriteColorPointGIntensityAttribute(seqNum, mEndpoint, value);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::WriteAttributeColorPointBX(Callback::Callback<> * onCompletion, uint16_t value)
+CHIP_ERROR ColorControlCluster::ReadAttributeColorPointBX(Callback::Cancelable * onSuccessCallback,
+                                                          Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterWriteColorPointBXAttribute(mEndpoint, value);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadColorPointBXAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReadAttributeColorPointBY(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::WriteAttributeColorPointBX(Callback::Cancelable * onSuccessCallback,
+                                                           Callback::Cancelable * onFailureCallback, uint16_t value)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadColorPointBYAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterWriteColorPointBXAttribute(seqNum, mEndpoint, value);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::WriteAttributeColorPointBY(Callback::Callback<> * onCompletion, uint16_t value)
+CHIP_ERROR ColorControlCluster::ReadAttributeColorPointBY(Callback::Cancelable * onSuccessCallback,
+                                                          Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterWriteColorPointBYAttribute(mEndpoint, value);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadColorPointBYAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReadAttributeColorPointBIntensity(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::WriteAttributeColorPointBY(Callback::Cancelable * onSuccessCallback,
+                                                           Callback::Cancelable * onFailureCallback, uint16_t value)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadColorPointBIntensityAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterWriteColorPointBYAttribute(seqNum, mEndpoint, value);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::WriteAttributeColorPointBIntensity(Callback::Callback<> * onCompletion, uint8_t value)
+CHIP_ERROR ColorControlCluster::ReadAttributeColorPointBIntensity(Callback::Cancelable * onSuccessCallback,
+                                                                  Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterWriteColorPointBIntensityAttribute(mEndpoint, value);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadColorPointBIntensityAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReadAttributeEnhancedCurrentHue(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::WriteAttributeColorPointBIntensity(Callback::Cancelable * onSuccessCallback,
+                                                                   Callback::Cancelable * onFailureCallback, uint8_t value)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadEnhancedCurrentHueAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterWriteColorPointBIntensityAttribute(seqNum, mEndpoint, value);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReadAttributeEnhancedColorMode(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::ReadAttributeEnhancedCurrentHue(Callback::Cancelable * onSuccessCallback,
+                                                                Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadEnhancedColorModeAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadEnhancedCurrentHueAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReadAttributeColorLoopActive(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::ReadAttributeEnhancedColorMode(Callback::Cancelable * onSuccessCallback,
+                                                               Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadColorLoopActiveAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadEnhancedColorModeAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReadAttributeColorLoopDirection(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::ReadAttributeColorLoopActive(Callback::Cancelable * onSuccessCallback,
+                                                             Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadColorLoopDirectionAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadColorLoopActiveAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReadAttributeColorLoopTime(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::ReadAttributeColorLoopDirection(Callback::Cancelable * onSuccessCallback,
+                                                                Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadColorLoopTimeAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadColorLoopDirectionAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReadAttributeColorCapabilities(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::ReadAttributeColorLoopTime(Callback::Cancelable * onSuccessCallback,
+                                                           Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadColorCapabilitiesAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadColorLoopTimeAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReadAttributeColorTempPhysicalMin(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::ReadAttributeColorCapabilities(Callback::Cancelable * onSuccessCallback,
+                                                               Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadColorTempPhysicalMinAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadColorCapabilitiesAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReadAttributeColorTempPhysicalMax(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::ReadAttributeColorTempPhysicalMin(Callback::Cancelable * onSuccessCallback,
+                                                                  Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadColorTempPhysicalMaxAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadColorTempPhysicalMinAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReadAttributeCoupleColorTempToLevelMinMireds(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::ReadAttributeColorTempPhysicalMax(Callback::Cancelable * onSuccessCallback,
+                                                                  Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadCoupleColorTempToLevelMinMiredsAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadColorTempPhysicalMaxAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReadAttributeStartUpColorTemperatureMireds(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::ReadAttributeCoupleColorTempToLevelMinMireds(Callback::Cancelable * onSuccessCallback,
+                                                                             Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadStartUpColorTemperatureMiredsAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadCoupleColorTempToLevelMinMiredsAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::WriteAttributeStartUpColorTemperatureMireds(Callback::Callback<> * onCompletion, uint16_t value)
+CHIP_ERROR ColorControlCluster::ReadAttributeStartUpColorTemperatureMireds(Callback::Cancelable * onSuccessCallback,
+                                                                           Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterWriteStartUpColorTemperatureMiredsAttribute(mEndpoint, value);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadStartUpColorTemperatureMiredsAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ColorControlCluster::ReadAttributeClusterRevision(Callback::Callback<> * onCompletion)
+CHIP_ERROR ColorControlCluster::WriteAttributeStartUpColorTemperatureMireds(Callback::Cancelable * onSuccessCallback,
+                                                                            Callback::Cancelable * onFailureCallback,
+                                                                            uint16_t value)
 {
-    System::PacketBufferHandle payload = encodeColorControlClusterReadClusterRevisionAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload =
+        encodeColorControlClusterWriteStartUpColorTemperatureMiredsAttribute(seqNum, mEndpoint, value);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
+}
+
+CHIP_ERROR ColorControlCluster::ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback,
+                                                             Callback::Cancelable * onFailureCallback)
+{
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeColorControlClusterReadClusterRevisionAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
 // DoorLock Cluster Commands
-CHIP_ERROR DoorLockCluster::ClearAllPins(Callback::Callback<> * onCompletion)
+CHIP_ERROR DoorLockCluster::ClearAllPins(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -1299,12 +1522,13 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encodeDoorLockClusterClearAllPinsCommand(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeDoorLockClusterClearAllPinsCommand(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR DoorLockCluster::ClearAllRfids(Callback::Callback<> * onCompletion)
+CHIP_ERROR DoorLockCluster::ClearAllRfids(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -1327,12 +1551,14 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encodeDoorLockClusterClearAllRfidsCommand(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeDoorLockClusterClearAllRfidsCommand(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR DoorLockCluster::ClearHolidaySchedule(Callback::Callback<> * onCompletion, uint8_t scheduleId)
+CHIP_ERROR DoorLockCluster::ClearHolidaySchedule(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                                 uint8_t scheduleId)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -1357,12 +1583,14 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encodeDoorLockClusterClearHolidayScheduleCommand(mEndpoint, scheduleId);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeDoorLockClusterClearHolidayScheduleCommand(seqNum, mEndpoint, scheduleId);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR DoorLockCluster::ClearPin(Callback::Callback<> * onCompletion, uint16_t userId)
+CHIP_ERROR DoorLockCluster::ClearPin(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                     uint16_t userId)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -1387,12 +1615,14 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encodeDoorLockClusterClearPinCommand(mEndpoint, userId);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeDoorLockClusterClearPinCommand(seqNum, mEndpoint, userId);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR DoorLockCluster::ClearRfid(Callback::Callback<> * onCompletion, uint16_t userId)
+CHIP_ERROR DoorLockCluster::ClearRfid(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                      uint16_t userId)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -1417,12 +1647,14 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encodeDoorLockClusterClearRfidCommand(mEndpoint, userId);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeDoorLockClusterClearRfidCommand(seqNum, mEndpoint, userId);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR DoorLockCluster::ClearWeekdaySchedule(Callback::Callback<> * onCompletion, uint8_t scheduleId, uint16_t userId)
+CHIP_ERROR DoorLockCluster::ClearWeekdaySchedule(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                                 uint8_t scheduleId, uint16_t userId)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -1449,12 +1681,14 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encodeDoorLockClusterClearWeekdayScheduleCommand(mEndpoint, scheduleId, userId);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeDoorLockClusterClearWeekdayScheduleCommand(seqNum, mEndpoint, scheduleId, userId);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR DoorLockCluster::ClearYeardaySchedule(Callback::Callback<> * onCompletion, uint8_t scheduleId, uint16_t userId)
+CHIP_ERROR DoorLockCluster::ClearYeardaySchedule(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                                 uint8_t scheduleId, uint16_t userId)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -1481,12 +1715,14 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encodeDoorLockClusterClearYeardayScheduleCommand(mEndpoint, scheduleId, userId);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeDoorLockClusterClearYeardayScheduleCommand(seqNum, mEndpoint, scheduleId, userId);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR DoorLockCluster::GetHolidaySchedule(Callback::Callback<> * onCompletion, uint8_t scheduleId)
+CHIP_ERROR DoorLockCluster::GetHolidaySchedule(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                               uint8_t scheduleId)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -1511,12 +1747,14 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encodeDoorLockClusterGetHolidayScheduleCommand(mEndpoint, scheduleId);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeDoorLockClusterGetHolidayScheduleCommand(seqNum, mEndpoint, scheduleId);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR DoorLockCluster::GetLogRecord(Callback::Callback<> * onCompletion, uint16_t logIndex)
+CHIP_ERROR DoorLockCluster::GetLogRecord(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                         uint16_t logIndex)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -1541,12 +1779,14 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encodeDoorLockClusterGetLogRecordCommand(mEndpoint, logIndex);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeDoorLockClusterGetLogRecordCommand(seqNum, mEndpoint, logIndex);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR DoorLockCluster::GetPin(Callback::Callback<> * onCompletion, uint16_t userId)
+CHIP_ERROR DoorLockCluster::GetPin(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                   uint16_t userId)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -1571,12 +1811,14 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encodeDoorLockClusterGetPinCommand(mEndpoint, userId);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeDoorLockClusterGetPinCommand(seqNum, mEndpoint, userId);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR DoorLockCluster::GetRfid(Callback::Callback<> * onCompletion, uint16_t userId)
+CHIP_ERROR DoorLockCluster::GetRfid(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                    uint16_t userId)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -1601,12 +1843,14 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encodeDoorLockClusterGetRfidCommand(mEndpoint, userId);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeDoorLockClusterGetRfidCommand(seqNum, mEndpoint, userId);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR DoorLockCluster::GetUserType(Callback::Callback<> * onCompletion, uint16_t userId)
+CHIP_ERROR DoorLockCluster::GetUserType(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                        uint16_t userId)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -1631,12 +1875,14 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encodeDoorLockClusterGetUserTypeCommand(mEndpoint, userId);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeDoorLockClusterGetUserTypeCommand(seqNum, mEndpoint, userId);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR DoorLockCluster::GetWeekdaySchedule(Callback::Callback<> * onCompletion, uint8_t scheduleId, uint16_t userId)
+CHIP_ERROR DoorLockCluster::GetWeekdaySchedule(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                               uint8_t scheduleId, uint16_t userId)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -1663,12 +1909,14 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encodeDoorLockClusterGetWeekdayScheduleCommand(mEndpoint, scheduleId, userId);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeDoorLockClusterGetWeekdayScheduleCommand(seqNum, mEndpoint, scheduleId, userId);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR DoorLockCluster::GetYeardaySchedule(Callback::Callback<> * onCompletion, uint8_t scheduleId, uint16_t userId)
+CHIP_ERROR DoorLockCluster::GetYeardaySchedule(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                               uint8_t scheduleId, uint16_t userId)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -1695,12 +1943,13 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encodeDoorLockClusterGetYeardayScheduleCommand(mEndpoint, scheduleId, userId);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeDoorLockClusterGetYeardayScheduleCommand(seqNum, mEndpoint, scheduleId, userId);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR DoorLockCluster::LockDoor(Callback::Callback<> * onCompletion, char * pin)
+CHIP_ERROR DoorLockCluster::LockDoor(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, char * pin)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -1725,13 +1974,15 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encodeDoorLockClusterLockDoorCommand(mEndpoint, pin);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeDoorLockClusterLockDoorCommand(seqNum, mEndpoint, pin);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR DoorLockCluster::SetHolidaySchedule(Callback::Callback<> * onCompletion, uint8_t scheduleId, uint32_t localStartTime,
-                                               uint32_t localEndTime, uint8_t operatingModeDuringHoliday)
+CHIP_ERROR DoorLockCluster::SetHolidaySchedule(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                               uint8_t scheduleId, uint32_t localStartTime, uint32_t localEndTime,
+                                               uint8_t operatingModeDuringHoliday)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -1762,14 +2013,15 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encodeDoorLockClusterSetHolidayScheduleCommand(mEndpoint, scheduleId, localStartTime,
-                                                                                        localEndTime, operatingModeDuringHoliday);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeDoorLockClusterSetHolidayScheduleCommand(
+        seqNum, mEndpoint, scheduleId, localStartTime, localEndTime, operatingModeDuringHoliday);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR DoorLockCluster::SetPin(Callback::Callback<> * onCompletion, uint16_t userId, uint8_t userStatus, uint8_t userType,
-                                   char * pin)
+CHIP_ERROR DoorLockCluster::SetPin(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                   uint16_t userId, uint8_t userStatus, uint8_t userType, char * pin)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -1800,13 +2052,14 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encodeDoorLockClusterSetPinCommand(mEndpoint, userId, userStatus, userType, pin);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeDoorLockClusterSetPinCommand(seqNum, mEndpoint, userId, userStatus, userType, pin);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR DoorLockCluster::SetRfid(Callback::Callback<> * onCompletion, uint16_t userId, uint8_t userStatus, uint8_t userType,
-                                    char * id)
+CHIP_ERROR DoorLockCluster::SetRfid(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                    uint16_t userId, uint8_t userStatus, uint8_t userType, char * id)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -1837,12 +2090,14 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encodeDoorLockClusterSetRfidCommand(mEndpoint, userId, userStatus, userType, id);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeDoorLockClusterSetRfidCommand(seqNum, mEndpoint, userId, userStatus, userType, id);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR DoorLockCluster::SetUserType(Callback::Callback<> * onCompletion, uint16_t userId, uint8_t userType)
+CHIP_ERROR DoorLockCluster::SetUserType(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                        uint16_t userId, uint8_t userType)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -1869,14 +2124,15 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encodeDoorLockClusterSetUserTypeCommand(mEndpoint, userId, userType);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeDoorLockClusterSetUserTypeCommand(seqNum, mEndpoint, userId, userType);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR DoorLockCluster::SetWeekdaySchedule(Callback::Callback<> * onCompletion, uint8_t scheduleId, uint16_t userId,
-                                               uint8_t daysMask, uint8_t startHour, uint8_t startMinute, uint8_t endHour,
-                                               uint8_t endMinute)
+CHIP_ERROR DoorLockCluster::SetWeekdaySchedule(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                               uint8_t scheduleId, uint16_t userId, uint8_t daysMask, uint8_t startHour,
+                                               uint8_t startMinute, uint8_t endHour, uint8_t endMinute)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -1913,14 +2169,15 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encodeDoorLockClusterSetWeekdayScheduleCommand(mEndpoint, scheduleId, userId, daysMask,
-                                                                                        startHour, startMinute, endHour, endMinute);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeDoorLockClusterSetWeekdayScheduleCommand(
+        seqNum, mEndpoint, scheduleId, userId, daysMask, startHour, startMinute, endHour, endMinute);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR DoorLockCluster::SetYeardaySchedule(Callback::Callback<> * onCompletion, uint8_t scheduleId, uint16_t userId,
-                                               uint32_t localStartTime, uint32_t localEndTime)
+CHIP_ERROR DoorLockCluster::SetYeardaySchedule(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                               uint8_t scheduleId, uint16_t userId, uint32_t localStartTime, uint32_t localEndTime)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -1951,13 +2208,15 @@
 
     return mDevice->SendCommands();
 #else
+    uint8_t seqNum = mDevice->GetNextSequenceNumber();
     System::PacketBufferHandle payload =
-        encodeDoorLockClusterSetYeardayScheduleCommand(mEndpoint, scheduleId, userId, localStartTime, localEndTime);
-    return SendCommand(std::move(payload), onCompletion);
+        encodeDoorLockClusterSetYeardayScheduleCommand(seqNum, mEndpoint, scheduleId, userId, localStartTime, localEndTime);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR DoorLockCluster::UnlockDoor(Callback::Callback<> * onCompletion, char * pin)
+CHIP_ERROR DoorLockCluster::UnlockDoor(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                       char * pin)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -1982,12 +2241,14 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encodeDoorLockClusterUnlockDoorCommand(mEndpoint, pin);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeDoorLockClusterUnlockDoorCommand(seqNum, mEndpoint, pin);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR DoorLockCluster::UnlockWithTimeout(Callback::Callback<> * onCompletion, uint16_t timeoutInSeconds, char * pin)
+CHIP_ERROR DoorLockCluster::UnlockWithTimeout(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                              uint16_t timeoutInSeconds, char * pin)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -2014,50 +2275,69 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encodeDoorLockClusterUnlockWithTimeoutCommand(mEndpoint, timeoutInSeconds, pin);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeDoorLockClusterUnlockWithTimeoutCommand(seqNum, mEndpoint, timeoutInSeconds, pin);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
 // DoorLock Cluster Attributes
-CHIP_ERROR DoorLockCluster::DiscoverAttributes(Callback::Callback<> * onCompletion)
+CHIP_ERROR DoorLockCluster::DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeDoorLockClusterDiscoverAttributes(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeDoorLockClusterDiscoverAttributes(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
-CHIP_ERROR DoorLockCluster::ReadAttributeLockState(Callback::Callback<> * onCompletion)
+CHIP_ERROR DoorLockCluster::ReadAttributeLockState(Callback::Cancelable * onSuccessCallback,
+                                                   Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeDoorLockClusterReadLockStateAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeDoorLockClusterReadLockStateAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR DoorLockCluster::ReportAttributeLockState(Callback::Callback<> * onCompletion, Callback::Callback<> * onChange,
-                                                     uint16_t minInterval, uint16_t maxInterval)
+CHIP_ERROR DoorLockCluster::ConfigureAttributeLockState(Callback::Cancelable * onSuccessCallback,
+                                                        Callback::Cancelable * onFailureCallback, uint16_t minInterval,
+                                                        uint16_t maxInterval)
 {
-    System::PacketBufferHandle payload = encodeDoorLockClusterReportLockStateAttribute(mEndpoint, minInterval, maxInterval);
-    return RequestAttributeReporting(std::move(payload), onCompletion, onChange);
+    uint8_t seqNum = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload =
+        encodeDoorLockClusterConfigureLockStateAttribute(seqNum, mEndpoint, minInterval, maxInterval);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR DoorLockCluster::ReadAttributeLockType(Callback::Callback<> * onCompletion)
+CHIP_ERROR DoorLockCluster::ReportAttributeLockState(Callback::Cancelable * onReportCallback)
 {
-    System::PacketBufferHandle payload = encodeDoorLockClusterReadLockTypeAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    return RequestAttributeReporting(0x0000, onReportCallback);
 }
 
-CHIP_ERROR DoorLockCluster::ReadAttributeActuatorEnabled(Callback::Callback<> * onCompletion)
+CHIP_ERROR DoorLockCluster::ReadAttributeLockType(Callback::Cancelable * onSuccessCallback,
+                                                  Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeDoorLockClusterReadActuatorEnabledAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeDoorLockClusterReadLockTypeAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR DoorLockCluster::ReadAttributeClusterRevision(Callback::Callback<> * onCompletion)
+CHIP_ERROR DoorLockCluster::ReadAttributeActuatorEnabled(Callback::Cancelable * onSuccessCallback,
+                                                         Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeDoorLockClusterReadClusterRevisionAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeDoorLockClusterReadActuatorEnabledAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
+}
+
+CHIP_ERROR DoorLockCluster::ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback,
+                                                         Callback::Cancelable * onFailureCallback)
+{
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeDoorLockClusterReadClusterRevisionAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
 // Groups Cluster Commands
-CHIP_ERROR GroupsCluster::AddGroup(Callback::Callback<> * onCompletion, uint16_t groupId, char * groupName)
+CHIP_ERROR GroupsCluster::AddGroup(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                   uint16_t groupId, char * groupName)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -2084,12 +2364,14 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encodeGroupsClusterAddGroupCommand(mEndpoint, groupId, groupName);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeGroupsClusterAddGroupCommand(seqNum, mEndpoint, groupId, groupName);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR GroupsCluster::AddGroupIfIdentifying(Callback::Callback<> * onCompletion, uint16_t groupId, char * groupName)
+CHIP_ERROR GroupsCluster::AddGroupIfIdentifying(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                                uint16_t groupId, char * groupName)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -2116,12 +2398,14 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encodeGroupsClusterAddGroupIfIdentifyingCommand(mEndpoint, groupId, groupName);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeGroupsClusterAddGroupIfIdentifyingCommand(seqNum, mEndpoint, groupId, groupName);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR GroupsCluster::GetGroupMembership(Callback::Callback<> * onCompletion, uint8_t groupCount, uint16_t groupList)
+CHIP_ERROR GroupsCluster::GetGroupMembership(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                             uint8_t groupCount, uint16_t groupList)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -2148,12 +2432,13 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encodeGroupsClusterGetGroupMembershipCommand(mEndpoint, groupCount, groupList);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeGroupsClusterGetGroupMembershipCommand(seqNum, mEndpoint, groupCount, groupList);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR GroupsCluster::RemoveAllGroups(Callback::Callback<> * onCompletion)
+CHIP_ERROR GroupsCluster::RemoveAllGroups(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -2176,12 +2461,14 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encodeGroupsClusterRemoveAllGroupsCommand(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeGroupsClusterRemoveAllGroupsCommand(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR GroupsCluster::RemoveGroup(Callback::Callback<> * onCompletion, uint16_t groupId)
+CHIP_ERROR GroupsCluster::RemoveGroup(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                      uint16_t groupId)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -2206,12 +2493,14 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encodeGroupsClusterRemoveGroupCommand(mEndpoint, groupId);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeGroupsClusterRemoveGroupCommand(seqNum, mEndpoint, groupId);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR GroupsCluster::ViewGroup(Callback::Callback<> * onCompletion, uint16_t groupId)
+CHIP_ERROR GroupsCluster::ViewGroup(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                    uint16_t groupId)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -2236,80 +2525,100 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encodeGroupsClusterViewGroupCommand(mEndpoint, groupId);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeGroupsClusterViewGroupCommand(seqNum, mEndpoint, groupId);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
 // Groups Cluster Attributes
-CHIP_ERROR GroupsCluster::DiscoverAttributes(Callback::Callback<> * onCompletion)
+CHIP_ERROR GroupsCluster::DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeGroupsClusterDiscoverAttributes(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeGroupsClusterDiscoverAttributes(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
-CHIP_ERROR GroupsCluster::ReadAttributeNameSupport(Callback::Callback<> * onCompletion)
+CHIP_ERROR GroupsCluster::ReadAttributeNameSupport(Callback::Cancelable * onSuccessCallback,
+                                                   Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeGroupsClusterReadNameSupportAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeGroupsClusterReadNameSupportAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR GroupsCluster::ReadAttributeClusterRevision(Callback::Callback<> * onCompletion)
+CHIP_ERROR GroupsCluster::ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback,
+                                                       Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeGroupsClusterReadClusterRevisionAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeGroupsClusterReadClusterRevisionAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
 // IasZone Cluster Commands
 // IasZone Cluster Attributes
-CHIP_ERROR IasZoneCluster::DiscoverAttributes(Callback::Callback<> * onCompletion)
+CHIP_ERROR IasZoneCluster::DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeIasZoneClusterDiscoverAttributes(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeIasZoneClusterDiscoverAttributes(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
-CHIP_ERROR IasZoneCluster::ReadAttributeZoneState(Callback::Callback<> * onCompletion)
+CHIP_ERROR IasZoneCluster::ReadAttributeZoneState(Callback::Cancelable * onSuccessCallback,
+                                                  Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeIasZoneClusterReadZoneStateAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeIasZoneClusterReadZoneStateAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR IasZoneCluster::ReadAttributeZoneType(Callback::Callback<> * onCompletion)
+CHIP_ERROR IasZoneCluster::ReadAttributeZoneType(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeIasZoneClusterReadZoneTypeAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeIasZoneClusterReadZoneTypeAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR IasZoneCluster::ReadAttributeZoneStatus(Callback::Callback<> * onCompletion)
+CHIP_ERROR IasZoneCluster::ReadAttributeZoneStatus(Callback::Cancelable * onSuccessCallback,
+                                                   Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeIasZoneClusterReadZoneStatusAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeIasZoneClusterReadZoneStatusAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR IasZoneCluster::ReadAttributeIasCieAddress(Callback::Callback<> * onCompletion)
+CHIP_ERROR IasZoneCluster::ReadAttributeIasCieAddress(Callback::Cancelable * onSuccessCallback,
+                                                      Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeIasZoneClusterReadIasCieAddressAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeIasZoneClusterReadIasCieAddressAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR IasZoneCluster::WriteAttributeIasCieAddress(Callback::Callback<> * onCompletion, uint64_t value)
+CHIP_ERROR IasZoneCluster::WriteAttributeIasCieAddress(Callback::Cancelable * onSuccessCallback,
+                                                       Callback::Cancelable * onFailureCallback, uint64_t value)
 {
-    System::PacketBufferHandle payload = encodeIasZoneClusterWriteIasCieAddressAttribute(mEndpoint, value);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeIasZoneClusterWriteIasCieAddressAttribute(seqNum, mEndpoint, value);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR IasZoneCluster::ReadAttributeZoneId(Callback::Callback<> * onCompletion)
+CHIP_ERROR IasZoneCluster::ReadAttributeZoneId(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeIasZoneClusterReadZoneIdAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeIasZoneClusterReadZoneIdAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR IasZoneCluster::ReadAttributeClusterRevision(Callback::Callback<> * onCompletion)
+CHIP_ERROR IasZoneCluster::ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback,
+                                                        Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeIasZoneClusterReadClusterRevisionAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeIasZoneClusterReadClusterRevisionAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
 // Identify Cluster Commands
-CHIP_ERROR IdentifyCluster::Identify(Callback::Callback<> * onCompletion, uint16_t identifyTime)
+CHIP_ERROR IdentifyCluster::Identify(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                     uint16_t identifyTime)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -2334,12 +2643,13 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encodeIdentifyClusterIdentifyCommand(mEndpoint, identifyTime);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeIdentifyClusterIdentifyCommand(seqNum, mEndpoint, identifyTime);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR IdentifyCluster::IdentifyQuery(Callback::Callback<> * onCompletion)
+CHIP_ERROR IdentifyCluster::IdentifyQuery(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -2362,38 +2672,46 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encodeIdentifyClusterIdentifyQueryCommand(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeIdentifyClusterIdentifyQueryCommand(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
 // Identify Cluster Attributes
-CHIP_ERROR IdentifyCluster::DiscoverAttributes(Callback::Callback<> * onCompletion)
+CHIP_ERROR IdentifyCluster::DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeIdentifyClusterDiscoverAttributes(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeIdentifyClusterDiscoverAttributes(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
-CHIP_ERROR IdentifyCluster::ReadAttributeIdentifyTime(Callback::Callback<> * onCompletion)
+CHIP_ERROR IdentifyCluster::ReadAttributeIdentifyTime(Callback::Cancelable * onSuccessCallback,
+                                                      Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeIdentifyClusterReadIdentifyTimeAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeIdentifyClusterReadIdentifyTimeAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR IdentifyCluster::WriteAttributeIdentifyTime(Callback::Callback<> * onCompletion, uint16_t value)
+CHIP_ERROR IdentifyCluster::WriteAttributeIdentifyTime(Callback::Cancelable * onSuccessCallback,
+                                                       Callback::Cancelable * onFailureCallback, uint16_t value)
 {
-    System::PacketBufferHandle payload = encodeIdentifyClusterWriteIdentifyTimeAttribute(mEndpoint, value);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeIdentifyClusterWriteIdentifyTimeAttribute(seqNum, mEndpoint, value);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR IdentifyCluster::ReadAttributeClusterRevision(Callback::Callback<> * onCompletion)
+CHIP_ERROR IdentifyCluster::ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback,
+                                                         Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeIdentifyClusterReadClusterRevisionAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeIdentifyClusterReadClusterRevisionAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
 // LevelControl Cluster Commands
-CHIP_ERROR LevelControlCluster::Move(Callback::Callback<> * onCompletion, uint8_t moveMode, uint8_t rate, uint8_t optionMask,
-                                     uint8_t optionOverride)
+CHIP_ERROR LevelControlCluster::Move(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                     uint8_t moveMode, uint8_t rate, uint8_t optionMask, uint8_t optionOverride)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -2424,14 +2742,15 @@
 
     return mDevice->SendCommands();
 #else
+    uint8_t seqNum = mDevice->GetNextSequenceNumber();
     System::PacketBufferHandle payload =
-        encodeLevelControlClusterMoveCommand(mEndpoint, moveMode, rate, optionMask, optionOverride);
-    return SendCommand(std::move(payload), onCompletion);
+        encodeLevelControlClusterMoveCommand(seqNum, mEndpoint, moveMode, rate, optionMask, optionOverride);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR LevelControlCluster::MoveToLevel(Callback::Callback<> * onCompletion, uint8_t level, uint16_t transitionTime,
-                                            uint8_t optionMask, uint8_t optionOverride)
+CHIP_ERROR LevelControlCluster::MoveToLevel(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                            uint8_t level, uint16_t transitionTime, uint8_t optionMask, uint8_t optionOverride)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -2462,13 +2781,16 @@
 
     return mDevice->SendCommands();
 #else
+    uint8_t seqNum = mDevice->GetNextSequenceNumber();
     System::PacketBufferHandle payload =
-        encodeLevelControlClusterMoveToLevelCommand(mEndpoint, level, transitionTime, optionMask, optionOverride);
-    return SendCommand(std::move(payload), onCompletion);
+        encodeLevelControlClusterMoveToLevelCommand(seqNum, mEndpoint, level, transitionTime, optionMask, optionOverride);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR LevelControlCluster::MoveToLevelWithOnOff(Callback::Callback<> * onCompletion, uint8_t level, uint16_t transitionTime)
+CHIP_ERROR LevelControlCluster::MoveToLevelWithOnOff(Callback::Cancelable * onSuccessCallback,
+                                                     Callback::Cancelable * onFailureCallback, uint8_t level,
+                                                     uint16_t transitionTime)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -2495,12 +2817,15 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encodeLevelControlClusterMoveToLevelWithOnOffCommand(mEndpoint, level, transitionTime);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload =
+        encodeLevelControlClusterMoveToLevelWithOnOffCommand(seqNum, mEndpoint, level, transitionTime);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR LevelControlCluster::MoveWithOnOff(Callback::Callback<> * onCompletion, uint8_t moveMode, uint8_t rate)
+CHIP_ERROR LevelControlCluster::MoveWithOnOff(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                              uint8_t moveMode, uint8_t rate)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -2527,13 +2852,15 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encodeLevelControlClusterMoveWithOnOffCommand(mEndpoint, moveMode, rate);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeLevelControlClusterMoveWithOnOffCommand(seqNum, mEndpoint, moveMode, rate);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR LevelControlCluster::Step(Callback::Callback<> * onCompletion, uint8_t stepMode, uint8_t stepSize,
-                                     uint16_t transitionTime, uint8_t optionMask, uint8_t optionOverride)
+CHIP_ERROR LevelControlCluster::Step(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                     uint8_t stepMode, uint8_t stepSize, uint16_t transitionTime, uint8_t optionMask,
+                                     uint8_t optionOverride)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -2566,14 +2893,15 @@
 
     return mDevice->SendCommands();
 #else
+    uint8_t seqNum = mDevice->GetNextSequenceNumber();
     System::PacketBufferHandle payload =
-        encodeLevelControlClusterStepCommand(mEndpoint, stepMode, stepSize, transitionTime, optionMask, optionOverride);
-    return SendCommand(std::move(payload), onCompletion);
+        encodeLevelControlClusterStepCommand(seqNum, mEndpoint, stepMode, stepSize, transitionTime, optionMask, optionOverride);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR LevelControlCluster::StepWithOnOff(Callback::Callback<> * onCompletion, uint8_t stepMode, uint8_t stepSize,
-                                              uint16_t transitionTime)
+CHIP_ERROR LevelControlCluster::StepWithOnOff(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                              uint8_t stepMode, uint8_t stepSize, uint16_t transitionTime)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -2602,13 +2930,15 @@
 
     return mDevice->SendCommands();
 #else
+    uint8_t seqNum = mDevice->GetNextSequenceNumber();
     System::PacketBufferHandle payload =
-        encodeLevelControlClusterStepWithOnOffCommand(mEndpoint, stepMode, stepSize, transitionTime);
-    return SendCommand(std::move(payload), onCompletion);
+        encodeLevelControlClusterStepWithOnOffCommand(seqNum, mEndpoint, stepMode, stepSize, transitionTime);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR LevelControlCluster::Stop(Callback::Callback<> * onCompletion, uint8_t optionMask, uint8_t optionOverride)
+CHIP_ERROR LevelControlCluster::Stop(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                     uint8_t optionMask, uint8_t optionOverride)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -2635,12 +2965,13 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encodeLevelControlClusterStopCommand(mEndpoint, optionMask, optionOverride);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeLevelControlClusterStopCommand(seqNum, mEndpoint, optionMask, optionOverride);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR LevelControlCluster::StopWithOnOff(Callback::Callback<> * onCompletion)
+CHIP_ERROR LevelControlCluster::StopWithOnOff(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -2663,39 +2994,53 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encodeLevelControlClusterStopWithOnOffCommand(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeLevelControlClusterStopWithOnOffCommand(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
 // LevelControl Cluster Attributes
-CHIP_ERROR LevelControlCluster::DiscoverAttributes(Callback::Callback<> * onCompletion)
+CHIP_ERROR LevelControlCluster::DiscoverAttributes(Callback::Cancelable * onSuccessCallback,
+                                                   Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeLevelControlClusterDiscoverAttributes(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeLevelControlClusterDiscoverAttributes(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
-CHIP_ERROR LevelControlCluster::ReadAttributeCurrentLevel(Callback::Callback<> * onCompletion)
+CHIP_ERROR LevelControlCluster::ReadAttributeCurrentLevel(Callback::Cancelable * onSuccessCallback,
+                                                          Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeLevelControlClusterReadCurrentLevelAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeLevelControlClusterReadCurrentLevelAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR LevelControlCluster::ReportAttributeCurrentLevel(Callback::Callback<> * onCompletion, Callback::Callback<> * onChange,
-                                                            uint16_t minInterval, uint16_t maxInterval, uint8_t change)
+CHIP_ERROR LevelControlCluster::ConfigureAttributeCurrentLevel(Callback::Cancelable * onSuccessCallback,
+                                                               Callback::Cancelable * onFailureCallback, uint16_t minInterval,
+                                                               uint16_t maxInterval, uint8_t change)
 {
+    uint8_t seqNum = mDevice->GetNextSequenceNumber();
     System::PacketBufferHandle payload =
-        encodeLevelControlClusterReportCurrentLevelAttribute(mEndpoint, minInterval, maxInterval, change);
-    return RequestAttributeReporting(std::move(payload), onCompletion, onChange);
+        encodeLevelControlClusterConfigureCurrentLevelAttribute(seqNum, mEndpoint, minInterval, maxInterval, change);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR LevelControlCluster::ReadAttributeClusterRevision(Callback::Callback<> * onCompletion)
+CHIP_ERROR LevelControlCluster::ReportAttributeCurrentLevel(Callback::Cancelable * onReportCallback)
 {
-    System::PacketBufferHandle payload = encodeLevelControlClusterReadClusterRevisionAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    return RequestAttributeReporting(0x0000, onReportCallback);
+}
+
+CHIP_ERROR LevelControlCluster::ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback,
+                                                             Callback::Cancelable * onFailureCallback)
+{
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeLevelControlClusterReadClusterRevisionAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
 // OnOff Cluster Commands
-CHIP_ERROR OnOffCluster::Off(Callback::Callback<> * onCompletion)
+CHIP_ERROR OnOffCluster::Off(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -2718,12 +3063,13 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encodeOnOffClusterOffCommand(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeOnOffClusterOffCommand(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR OnOffCluster::On(Callback::Callback<> * onCompletion)
+CHIP_ERROR OnOffCluster::On(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -2746,12 +3092,13 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encodeOnOffClusterOnCommand(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeOnOffClusterOnCommand(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR OnOffCluster::Toggle(Callback::Callback<> * onCompletion)
+CHIP_ERROR OnOffCluster::Toggle(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -2774,39 +3121,51 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encodeOnOffClusterToggleCommand(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeOnOffClusterToggleCommand(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
 // OnOff Cluster Attributes
-CHIP_ERROR OnOffCluster::DiscoverAttributes(Callback::Callback<> * onCompletion)
+CHIP_ERROR OnOffCluster::DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeOnOffClusterDiscoverAttributes(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeOnOffClusterDiscoverAttributes(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
-CHIP_ERROR OnOffCluster::ReadAttributeOnOff(Callback::Callback<> * onCompletion)
+CHIP_ERROR OnOffCluster::ReadAttributeOnOff(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeOnOffClusterReadOnOffAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeOnOffClusterReadOnOffAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR OnOffCluster::ReportAttributeOnOff(Callback::Callback<> * onCompletion, Callback::Callback<> * onChange,
-                                              uint16_t minInterval, uint16_t maxInterval)
+CHIP_ERROR OnOffCluster::ConfigureAttributeOnOff(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                                 uint16_t minInterval, uint16_t maxInterval)
 {
-    System::PacketBufferHandle payload = encodeOnOffClusterReportOnOffAttribute(mEndpoint, minInterval, maxInterval);
-    return RequestAttributeReporting(std::move(payload), onCompletion, onChange);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeOnOffClusterConfigureOnOffAttribute(seqNum, mEndpoint, minInterval, maxInterval);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR OnOffCluster::ReadAttributeClusterRevision(Callback::Callback<> * onCompletion)
+CHIP_ERROR OnOffCluster::ReportAttributeOnOff(Callback::Cancelable * onReportCallback)
 {
-    System::PacketBufferHandle payload = encodeOnOffClusterReadClusterRevisionAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    return RequestAttributeReporting(0x0000, onReportCallback);
+}
+
+CHIP_ERROR OnOffCluster::ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback,
+                                                      Callback::Cancelable * onFailureCallback)
+{
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeOnOffClusterReadClusterRevisionAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
 // Scenes Cluster Commands
-CHIP_ERROR ScenesCluster::AddScene(Callback::Callback<> * onCompletion, uint16_t groupId, uint8_t sceneId, uint16_t transitionTime,
-                                   char * sceneName, chip::ClusterId clusterId, uint8_t length, uint8_t value)
+CHIP_ERROR ScenesCluster::AddScene(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                   uint16_t groupId, uint8_t sceneId, uint16_t transitionTime, char * sceneName,
+                                   chip::ClusterId clusterId, uint8_t length, uint8_t value)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -2843,13 +3202,15 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload =
-        encodeScenesClusterAddSceneCommand(mEndpoint, groupId, sceneId, transitionTime, sceneName, clusterId, length, value);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeScenesClusterAddSceneCommand(seqNum, mEndpoint, groupId, sceneId, transitionTime,
+                                                                            sceneName, clusterId, length, value);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR ScenesCluster::GetSceneMembership(Callback::Callback<> * onCompletion, uint16_t groupId)
+CHIP_ERROR ScenesCluster::GetSceneMembership(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                             uint16_t groupId)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -2874,13 +3235,14 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encodeScenesClusterGetSceneMembershipCommand(mEndpoint, groupId);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeScenesClusterGetSceneMembershipCommand(seqNum, mEndpoint, groupId);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR ScenesCluster::RecallScene(Callback::Callback<> * onCompletion, uint16_t groupId, uint8_t sceneId,
-                                      uint16_t transitionTime)
+CHIP_ERROR ScenesCluster::RecallScene(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                      uint16_t groupId, uint8_t sceneId, uint16_t transitionTime)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -2909,12 +3271,14 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encodeScenesClusterRecallSceneCommand(mEndpoint, groupId, sceneId, transitionTime);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeScenesClusterRecallSceneCommand(seqNum, mEndpoint, groupId, sceneId, transitionTime);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR ScenesCluster::RemoveAllScenes(Callback::Callback<> * onCompletion, uint16_t groupId)
+CHIP_ERROR ScenesCluster::RemoveAllScenes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                          uint16_t groupId)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -2939,12 +3303,14 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encodeScenesClusterRemoveAllScenesCommand(mEndpoint, groupId);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeScenesClusterRemoveAllScenesCommand(seqNum, mEndpoint, groupId);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR ScenesCluster::RemoveScene(Callback::Callback<> * onCompletion, uint16_t groupId, uint8_t sceneId)
+CHIP_ERROR ScenesCluster::RemoveScene(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                      uint16_t groupId, uint8_t sceneId)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -2971,12 +3337,14 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encodeScenesClusterRemoveSceneCommand(mEndpoint, groupId, sceneId);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeScenesClusterRemoveSceneCommand(seqNum, mEndpoint, groupId, sceneId);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR ScenesCluster::StoreScene(Callback::Callback<> * onCompletion, uint16_t groupId, uint8_t sceneId)
+CHIP_ERROR ScenesCluster::StoreScene(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                     uint16_t groupId, uint8_t sceneId)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -3003,12 +3371,14 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encodeScenesClusterStoreSceneCommand(mEndpoint, groupId, sceneId);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeScenesClusterStoreSceneCommand(seqNum, mEndpoint, groupId, sceneId);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
-CHIP_ERROR ScenesCluster::ViewScene(Callback::Callback<> * onCompletion, uint16_t groupId, uint8_t sceneId)
+CHIP_ERROR ScenesCluster::ViewScene(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                    uint16_t groupId, uint8_t sceneId)
 {
 #ifdef CHIP_APP_USE_INTERACTION_MODEL
     VerifyOrReturnError(mDevice != nullptr, CHIP_ERROR_INCORRECT_STATE);
@@ -3035,91 +3405,122 @@
 
     return mDevice->SendCommands();
 #else
-    System::PacketBufferHandle payload = encodeScenesClusterViewSceneCommand(mEndpoint, groupId, sceneId);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeScenesClusterViewSceneCommand(seqNum, mEndpoint, groupId, sceneId);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 #endif
 }
 
 // Scenes Cluster Attributes
-CHIP_ERROR ScenesCluster::DiscoverAttributes(Callback::Callback<> * onCompletion)
+CHIP_ERROR ScenesCluster::DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeScenesClusterDiscoverAttributes(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeScenesClusterDiscoverAttributes(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
-CHIP_ERROR ScenesCluster::ReadAttributeSceneCount(Callback::Callback<> * onCompletion)
+CHIP_ERROR ScenesCluster::ReadAttributeSceneCount(Callback::Cancelable * onSuccessCallback,
+                                                  Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeScenesClusterReadSceneCountAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeScenesClusterReadSceneCountAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ScenesCluster::ReadAttributeCurrentScene(Callback::Callback<> * onCompletion)
+CHIP_ERROR ScenesCluster::ReadAttributeCurrentScene(Callback::Cancelable * onSuccessCallback,
+                                                    Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeScenesClusterReadCurrentSceneAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeScenesClusterReadCurrentSceneAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ScenesCluster::ReadAttributeCurrentGroup(Callback::Callback<> * onCompletion)
+CHIP_ERROR ScenesCluster::ReadAttributeCurrentGroup(Callback::Cancelable * onSuccessCallback,
+                                                    Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeScenesClusterReadCurrentGroupAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeScenesClusterReadCurrentGroupAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ScenesCluster::ReadAttributeSceneValid(Callback::Callback<> * onCompletion)
+CHIP_ERROR ScenesCluster::ReadAttributeSceneValid(Callback::Cancelable * onSuccessCallback,
+                                                  Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeScenesClusterReadSceneValidAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeScenesClusterReadSceneValidAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ScenesCluster::ReadAttributeNameSupport(Callback::Callback<> * onCompletion)
+CHIP_ERROR ScenesCluster::ReadAttributeNameSupport(Callback::Cancelable * onSuccessCallback,
+                                                   Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeScenesClusterReadNameSupportAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeScenesClusterReadNameSupportAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR ScenesCluster::ReadAttributeClusterRevision(Callback::Callback<> * onCompletion)
+CHIP_ERROR ScenesCluster::ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback,
+                                                       Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeScenesClusterReadClusterRevisionAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeScenesClusterReadClusterRevisionAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
 // TemperatureMeasurement Cluster Commands
 // TemperatureMeasurement Cluster Attributes
-CHIP_ERROR TemperatureMeasurementCluster::DiscoverAttributes(Callback::Callback<> * onCompletion)
+CHIP_ERROR TemperatureMeasurementCluster::DiscoverAttributes(Callback::Cancelable * onSuccessCallback,
+                                                             Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeTemperatureMeasurementClusterDiscoverAttributes(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeTemperatureMeasurementClusterDiscoverAttributes(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
-CHIP_ERROR TemperatureMeasurementCluster::ReadAttributeMeasuredValue(Callback::Callback<> * onCompletion)
+CHIP_ERROR TemperatureMeasurementCluster::ReadAttributeMeasuredValue(Callback::Cancelable * onSuccessCallback,
+                                                                     Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeTemperatureMeasurementClusterReadMeasuredValueAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeTemperatureMeasurementClusterReadMeasuredValueAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR TemperatureMeasurementCluster::ReportAttributeMeasuredValue(Callback::Callback<> * onCompletion,
-                                                                       Callback::Callback<> * onChange, uint16_t minInterval,
-                                                                       uint16_t maxInterval, int16_t change)
+CHIP_ERROR TemperatureMeasurementCluster::ConfigureAttributeMeasuredValue(Callback::Cancelable * onSuccessCallback,
+                                                                          Callback::Cancelable * onFailureCallback,
+                                                                          uint16_t minInterval, uint16_t maxInterval,
+                                                                          int16_t change)
 {
+    uint8_t seqNum = mDevice->GetNextSequenceNumber();
     System::PacketBufferHandle payload =
-        encodeTemperatureMeasurementClusterReportMeasuredValueAttribute(mEndpoint, minInterval, maxInterval, change);
-    return RequestAttributeReporting(std::move(payload), onCompletion, onChange);
+        encodeTemperatureMeasurementClusterConfigureMeasuredValueAttribute(seqNum, mEndpoint, minInterval, maxInterval, change);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR TemperatureMeasurementCluster::ReadAttributeMinMeasuredValue(Callback::Callback<> * onCompletion)
+CHIP_ERROR TemperatureMeasurementCluster::ReportAttributeMeasuredValue(Callback::Cancelable * onReportCallback)
 {
-    System::PacketBufferHandle payload = encodeTemperatureMeasurementClusterReadMinMeasuredValueAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    return RequestAttributeReporting(0x0000, onReportCallback);
 }
 
-CHIP_ERROR TemperatureMeasurementCluster::ReadAttributeMaxMeasuredValue(Callback::Callback<> * onCompletion)
+CHIP_ERROR TemperatureMeasurementCluster::ReadAttributeMinMeasuredValue(Callback::Cancelable * onSuccessCallback,
+                                                                        Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeTemperatureMeasurementClusterReadMaxMeasuredValueAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeTemperatureMeasurementClusterReadMinMeasuredValueAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
-CHIP_ERROR TemperatureMeasurementCluster::ReadAttributeClusterRevision(Callback::Callback<> * onCompletion)
+CHIP_ERROR TemperatureMeasurementCluster::ReadAttributeMaxMeasuredValue(Callback::Cancelable * onSuccessCallback,
+                                                                        Callback::Cancelable * onFailureCallback)
 {
-    System::PacketBufferHandle payload = encodeTemperatureMeasurementClusterReadClusterRevisionAttribute(mEndpoint);
-    return SendCommand(std::move(payload), onCompletion);
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeTemperatureMeasurementClusterReadMaxMeasuredValueAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
+}
+
+CHIP_ERROR TemperatureMeasurementCluster::ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback,
+                                                                       Callback::Cancelable * onFailureCallback)
+{
+    uint8_t seqNum                     = mDevice->GetNextSequenceNumber();
+    System::PacketBufferHandle payload = encodeTemperatureMeasurementClusterReadClusterRevisionAttribute(seqNum, mEndpoint);
+    return SendCommand(seqNum, std::move(payload), onSuccessCallback, onFailureCallback);
 }
 
 } // namespace Controller
diff --git a/src/controller/CHIPClusters.h b/src/controller/CHIPClusters.h
index 1be0a65..6669335 100644
--- a/src/controller/CHIPClusters.h
+++ b/src/controller/CHIPClusters.h
@@ -46,16 +46,17 @@
     ~BarrierControlCluster() {}
 
     // Cluster Commands
-    CHIP_ERROR BarrierControlGoToPercent(Callback::Callback<> * onCompletion, uint8_t percentOpen);
-    CHIP_ERROR BarrierControlStop(Callback::Callback<> * onCompletion);
+    CHIP_ERROR BarrierControlGoToPercent(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                         uint8_t percentOpen);
+    CHIP_ERROR BarrierControlStop(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
 
     // Cluster Attributes
-    CHIP_ERROR DiscoverAttributes(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeBarrierMovingState(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeBarrierSafetyStatus(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeBarrierCapabilities(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeBarrierPosition(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeClusterRevision(Callback::Callback<> * onCompletion);
+    CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeBarrierMovingState(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeBarrierSafetyStatus(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeBarrierCapabilities(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeBarrierPosition(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
 
 private:
     static constexpr CommandId kBarrierControlGoToPercentCommandId = 0x00;
@@ -69,14 +70,14 @@
     ~BasicCluster() {}
 
     // Cluster Commands
-    CHIP_ERROR MfgSpecificPing(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ResetToFactoryDefaults(Callback::Callback<> * onCompletion);
+    CHIP_ERROR MfgSpecificPing(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ResetToFactoryDefaults(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
 
     // Cluster Attributes
-    CHIP_ERROR DiscoverAttributes(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeZclVersion(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributePowerSource(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeClusterRevision(Callback::Callback<> * onCompletion);
+    CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeZclVersion(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributePowerSource(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
 
 private:
     static constexpr CommandId kMfgSpecificPingCommandId        = 0x00;
@@ -90,14 +91,14 @@
     ~BindingCluster() {}
 
     // Cluster Commands
-    CHIP_ERROR Bind(Callback::Callback<> * onCompletion, chip::NodeId nodeId, chip::GroupId groupId, chip::EndpointId endpointId,
-                    chip::ClusterId clusterId);
-    CHIP_ERROR Unbind(Callback::Callback<> * onCompletion, chip::NodeId nodeId, chip::GroupId groupId, chip::EndpointId endpointId,
-                      chip::ClusterId clusterId);
+    CHIP_ERROR Bind(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, chip::NodeId nodeId,
+                    chip::GroupId groupId, chip::EndpointId endpointId, chip::ClusterId clusterId);
+    CHIP_ERROR Unbind(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, chip::NodeId nodeId,
+                      chip::GroupId groupId, chip::EndpointId endpointId, chip::ClusterId clusterId);
 
     // Cluster Attributes
-    CHIP_ERROR DiscoverAttributes(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeClusterRevision(Callback::Callback<> * onCompletion);
+    CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
 
 private:
     static constexpr CommandId kBindCommandId   = 0x00;
@@ -111,112 +112,142 @@
     ~ColorControlCluster() {}
 
     // Cluster Commands
-    CHIP_ERROR MoveColor(Callback::Callback<> * onCompletion, int16_t rateX, int16_t rateY, uint8_t optionsMask,
-                         uint8_t optionsOverride);
-    CHIP_ERROR MoveColorTemperature(Callback::Callback<> * onCompletion, uint8_t moveMode, uint16_t rate,
-                                    uint16_t colorTemperatureMinimum, uint16_t colorTemperatureMaximum, uint8_t optionsMask,
-                                    uint8_t optionsOverride);
-    CHIP_ERROR MoveHue(Callback::Callback<> * onCompletion, uint8_t moveMode, uint8_t rate, uint8_t optionsMask,
-                       uint8_t optionsOverride);
-    CHIP_ERROR MoveSaturation(Callback::Callback<> * onCompletion, uint8_t moveMode, uint8_t rate, uint8_t optionsMask,
-                              uint8_t optionsOverride);
-    CHIP_ERROR MoveToColor(Callback::Callback<> * onCompletion, uint16_t colorX, uint16_t colorY, uint16_t transitionTime,
-                           uint8_t optionsMask, uint8_t optionsOverride);
-    CHIP_ERROR MoveToColorTemperature(Callback::Callback<> * onCompletion, uint16_t colorTemperature, uint16_t transitionTime,
-                                      uint8_t optionsMask, uint8_t optionsOverride);
-    CHIP_ERROR MoveToHue(Callback::Callback<> * onCompletion, uint8_t hue, uint8_t direction, uint16_t transitionTime,
-                         uint8_t optionsMask, uint8_t optionsOverride);
-    CHIP_ERROR MoveToHueAndSaturation(Callback::Callback<> * onCompletion, uint8_t hue, uint8_t saturation, uint16_t transitionTime,
-                                      uint8_t optionsMask, uint8_t optionsOverride);
-    CHIP_ERROR MoveToSaturation(Callback::Callback<> * onCompletion, uint8_t saturation, uint16_t transitionTime,
-                                uint8_t optionsMask, uint8_t optionsOverride);
-    CHIP_ERROR StepColor(Callback::Callback<> * onCompletion, int16_t stepX, int16_t stepY, uint16_t transitionTime,
-                         uint8_t optionsMask, uint8_t optionsOverride);
-    CHIP_ERROR StepColorTemperature(Callback::Callback<> * onCompletion, uint8_t stepMode, uint16_t stepSize,
-                                    uint16_t transitionTime, uint16_t colorTemperatureMinimum, uint16_t colorTemperatureMaximum,
-                                    uint8_t optionsMask, uint8_t optionsOverride);
-    CHIP_ERROR StepHue(Callback::Callback<> * onCompletion, uint8_t stepMode, uint8_t stepSize, uint8_t transitionTime,
-                       uint8_t optionsMask, uint8_t optionsOverride);
-    CHIP_ERROR StepSaturation(Callback::Callback<> * onCompletion, uint8_t stepMode, uint8_t stepSize, uint8_t transitionTime,
-                              uint8_t optionsMask, uint8_t optionsOverride);
-    CHIP_ERROR StopMoveStep(Callback::Callback<> * onCompletion, uint8_t optionsMask, uint8_t optionsOverride);
+    CHIP_ERROR MoveColor(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, int16_t rateX,
+                         int16_t rateY, uint8_t optionsMask, uint8_t optionsOverride);
+    CHIP_ERROR MoveColorTemperature(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                    uint8_t moveMode, uint16_t rate, uint16_t colorTemperatureMinimum,
+                                    uint16_t colorTemperatureMaximum, uint8_t optionsMask, uint8_t optionsOverride);
+    CHIP_ERROR MoveHue(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint8_t moveMode,
+                       uint8_t rate, uint8_t optionsMask, uint8_t optionsOverride);
+    CHIP_ERROR MoveSaturation(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint8_t moveMode,
+                              uint8_t rate, uint8_t optionsMask, uint8_t optionsOverride);
+    CHIP_ERROR MoveToColor(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint16_t colorX,
+                           uint16_t colorY, uint16_t transitionTime, uint8_t optionsMask, uint8_t optionsOverride);
+    CHIP_ERROR MoveToColorTemperature(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                      uint16_t colorTemperature, uint16_t transitionTime, uint8_t optionsMask,
+                                      uint8_t optionsOverride);
+    CHIP_ERROR MoveToHue(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint8_t hue,
+                         uint8_t direction, uint16_t transitionTime, uint8_t optionsMask, uint8_t optionsOverride);
+    CHIP_ERROR MoveToHueAndSaturation(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                      uint8_t hue, uint8_t saturation, uint16_t transitionTime, uint8_t optionsMask,
+                                      uint8_t optionsOverride);
+    CHIP_ERROR MoveToSaturation(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                uint8_t saturation, uint16_t transitionTime, uint8_t optionsMask, uint8_t optionsOverride);
+    CHIP_ERROR StepColor(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, int16_t stepX,
+                         int16_t stepY, uint16_t transitionTime, uint8_t optionsMask, uint8_t optionsOverride);
+    CHIP_ERROR StepColorTemperature(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                    uint8_t stepMode, uint16_t stepSize, uint16_t transitionTime, uint16_t colorTemperatureMinimum,
+                                    uint16_t colorTemperatureMaximum, uint8_t optionsMask, uint8_t optionsOverride);
+    CHIP_ERROR StepHue(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint8_t stepMode,
+                       uint8_t stepSize, uint8_t transitionTime, uint8_t optionsMask, uint8_t optionsOverride);
+    CHIP_ERROR StepSaturation(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint8_t stepMode,
+                              uint8_t stepSize, uint8_t transitionTime, uint8_t optionsMask, uint8_t optionsOverride);
+    CHIP_ERROR StopMoveStep(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint8_t optionsMask,
+                            uint8_t optionsOverride);
 
     // Cluster Attributes
-    CHIP_ERROR DiscoverAttributes(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeCurrentHue(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeCurrentSaturation(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeRemainingTime(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeCurrentX(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeCurrentY(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeDriftCompensation(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeCompensationText(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeColorTemperature(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeColorMode(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeColorControlOptions(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeNumberOfPrimaries(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributePrimary1X(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributePrimary1Y(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributePrimary1Intensity(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributePrimary2X(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributePrimary2Y(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributePrimary2Intensity(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributePrimary3X(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributePrimary3Y(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributePrimary3Intensity(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributePrimary4X(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributePrimary4Y(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributePrimary4Intensity(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributePrimary5X(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributePrimary5Y(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributePrimary5Intensity(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributePrimary6X(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributePrimary6Y(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributePrimary6Intensity(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeWhitePointX(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeWhitePointY(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeColorPointRX(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeColorPointRY(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeColorPointRIntensity(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeColorPointGX(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeColorPointGY(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeColorPointGIntensity(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeColorPointBX(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeColorPointBY(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeColorPointBIntensity(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeEnhancedCurrentHue(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeEnhancedColorMode(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeColorLoopActive(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeColorLoopDirection(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeColorLoopTime(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeColorCapabilities(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeColorTempPhysicalMin(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeColorTempPhysicalMax(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeCoupleColorTempToLevelMinMireds(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeStartUpColorTemperatureMireds(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeClusterRevision(Callback::Callback<> * onCompletion);
-    CHIP_ERROR WriteAttributeColorControlOptions(Callback::Callback<> * onCompletion, uint8_t value);
-    CHIP_ERROR WriteAttributeWhitePointX(Callback::Callback<> * onCompletion, uint16_t value);
-    CHIP_ERROR WriteAttributeWhitePointY(Callback::Callback<> * onCompletion, uint16_t value);
-    CHIP_ERROR WriteAttributeColorPointRX(Callback::Callback<> * onCompletion, uint16_t value);
-    CHIP_ERROR WriteAttributeColorPointRY(Callback::Callback<> * onCompletion, uint16_t value);
-    CHIP_ERROR WriteAttributeColorPointRIntensity(Callback::Callback<> * onCompletion, uint8_t value);
-    CHIP_ERROR WriteAttributeColorPointGX(Callback::Callback<> * onCompletion, uint16_t value);
-    CHIP_ERROR WriteAttributeColorPointGY(Callback::Callback<> * onCompletion, uint16_t value);
-    CHIP_ERROR WriteAttributeColorPointGIntensity(Callback::Callback<> * onCompletion, uint8_t value);
-    CHIP_ERROR WriteAttributeColorPointBX(Callback::Callback<> * onCompletion, uint16_t value);
-    CHIP_ERROR WriteAttributeColorPointBY(Callback::Callback<> * onCompletion, uint16_t value);
-    CHIP_ERROR WriteAttributeColorPointBIntensity(Callback::Callback<> * onCompletion, uint8_t value);
-    CHIP_ERROR WriteAttributeStartUpColorTemperatureMireds(Callback::Callback<> * onCompletion, uint16_t value);
-    CHIP_ERROR ReportAttributeCurrentHue(Callback::Callback<> * onCompletion, Callback::Callback<> * onChange, uint16_t minInterval,
-                                         uint16_t maxInterval, uint8_t change);
-    CHIP_ERROR ReportAttributeCurrentSaturation(Callback::Callback<> * onCompletion, Callback::Callback<> * onChange,
-                                                uint16_t minInterval, uint16_t maxInterval, uint8_t change);
-    CHIP_ERROR ReportAttributeCurrentX(Callback::Callback<> * onCompletion, Callback::Callback<> * onChange, uint16_t minInterval,
-                                       uint16_t maxInterval, uint16_t change);
-    CHIP_ERROR ReportAttributeCurrentY(Callback::Callback<> * onCompletion, Callback::Callback<> * onChange, uint16_t minInterval,
-                                       uint16_t maxInterval, uint16_t change);
-    CHIP_ERROR ReportAttributeColorTemperature(Callback::Callback<> * onCompletion, Callback::Callback<> * onChange,
-                                               uint16_t minInterval, uint16_t maxInterval, uint16_t change);
+    CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeCurrentHue(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeCurrentSaturation(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeRemainingTime(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeCurrentX(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeCurrentY(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeDriftCompensation(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeCompensationText(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeColorTemperature(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeColorMode(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeColorControlOptions(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeNumberOfPrimaries(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributePrimary1X(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributePrimary1Y(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributePrimary1Intensity(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributePrimary2X(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributePrimary2Y(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributePrimary2Intensity(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributePrimary3X(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributePrimary3Y(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributePrimary3Intensity(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributePrimary4X(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributePrimary4Y(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributePrimary4Intensity(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributePrimary5X(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributePrimary5Y(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributePrimary5Intensity(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributePrimary6X(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributePrimary6Y(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributePrimary6Intensity(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeWhitePointX(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeWhitePointY(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeColorPointRX(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeColorPointRY(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeColorPointRIntensity(Callback::Cancelable * onSuccessCallback,
+                                                 Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeColorPointGX(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeColorPointGY(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeColorPointGIntensity(Callback::Cancelable * onSuccessCallback,
+                                                 Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeColorPointBX(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeColorPointBY(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeColorPointBIntensity(Callback::Cancelable * onSuccessCallback,
+                                                 Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeEnhancedCurrentHue(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeEnhancedColorMode(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeColorLoopActive(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeColorLoopDirection(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeColorLoopTime(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeColorCapabilities(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeColorTempPhysicalMin(Callback::Cancelable * onSuccessCallback,
+                                                 Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeColorTempPhysicalMax(Callback::Cancelable * onSuccessCallback,
+                                                 Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeCoupleColorTempToLevelMinMireds(Callback::Cancelable * onSuccessCallback,
+                                                            Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeStartUpColorTemperatureMireds(Callback::Cancelable * onSuccessCallback,
+                                                          Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR WriteAttributeColorControlOptions(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                                 uint8_t value);
+    CHIP_ERROR WriteAttributeWhitePointX(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                         uint16_t value);
+    CHIP_ERROR WriteAttributeWhitePointY(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                         uint16_t value);
+    CHIP_ERROR WriteAttributeColorPointRX(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                          uint16_t value);
+    CHIP_ERROR WriteAttributeColorPointRY(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                          uint16_t value);
+    CHIP_ERROR WriteAttributeColorPointRIntensity(Callback::Cancelable * onSuccessCallback,
+                                                  Callback::Cancelable * onFailureCallback, uint8_t value);
+    CHIP_ERROR WriteAttributeColorPointGX(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                          uint16_t value);
+    CHIP_ERROR WriteAttributeColorPointGY(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                          uint16_t value);
+    CHIP_ERROR WriteAttributeColorPointGIntensity(Callback::Cancelable * onSuccessCallback,
+                                                  Callback::Cancelable * onFailureCallback, uint8_t value);
+    CHIP_ERROR WriteAttributeColorPointBX(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                          uint16_t value);
+    CHIP_ERROR WriteAttributeColorPointBY(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                          uint16_t value);
+    CHIP_ERROR WriteAttributeColorPointBIntensity(Callback::Cancelable * onSuccessCallback,
+                                                  Callback::Cancelable * onFailureCallback, uint8_t value);
+    CHIP_ERROR WriteAttributeStartUpColorTemperatureMireds(Callback::Cancelable * onSuccessCallback,
+                                                           Callback::Cancelable * onFailureCallback, uint16_t value);
+    CHIP_ERROR ConfigureAttributeCurrentHue(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                            uint16_t minInterval, uint16_t maxInterval, uint8_t change);
+    CHIP_ERROR ReportAttributeCurrentHue(Callback::Cancelable * onReportCallback);
+    CHIP_ERROR ConfigureAttributeCurrentSaturation(Callback::Cancelable * onSuccessCallback,
+                                                   Callback::Cancelable * onFailureCallback, uint16_t minInterval,
+                                                   uint16_t maxInterval, uint8_t change);
+    CHIP_ERROR ReportAttributeCurrentSaturation(Callback::Cancelable * onReportCallback);
+    CHIP_ERROR ConfigureAttributeCurrentX(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                          uint16_t minInterval, uint16_t maxInterval, uint16_t change);
+    CHIP_ERROR ReportAttributeCurrentX(Callback::Cancelable * onReportCallback);
+    CHIP_ERROR ConfigureAttributeCurrentY(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                          uint16_t minInterval, uint16_t maxInterval, uint16_t change);
+    CHIP_ERROR ReportAttributeCurrentY(Callback::Cancelable * onReportCallback);
+    CHIP_ERROR ConfigureAttributeColorTemperature(Callback::Cancelable * onSuccessCallback,
+                                                  Callback::Cancelable * onFailureCallback, uint16_t minInterval,
+                                                  uint16_t maxInterval, uint16_t change);
+    CHIP_ERROR ReportAttributeColorTemperature(Callback::Cancelable * onReportCallback);
 
 private:
     static constexpr CommandId kMoveColorCommandId              = 0x08;
@@ -242,41 +273,54 @@
     ~DoorLockCluster() {}
 
     // Cluster Commands
-    CHIP_ERROR ClearAllPins(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ClearAllRfids(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ClearHolidaySchedule(Callback::Callback<> * onCompletion, uint8_t scheduleId);
-    CHIP_ERROR ClearPin(Callback::Callback<> * onCompletion, uint16_t userId);
-    CHIP_ERROR ClearRfid(Callback::Callback<> * onCompletion, uint16_t userId);
-    CHIP_ERROR ClearWeekdaySchedule(Callback::Callback<> * onCompletion, uint8_t scheduleId, uint16_t userId);
-    CHIP_ERROR ClearYeardaySchedule(Callback::Callback<> * onCompletion, uint8_t scheduleId, uint16_t userId);
-    CHIP_ERROR GetHolidaySchedule(Callback::Callback<> * onCompletion, uint8_t scheduleId);
-    CHIP_ERROR GetLogRecord(Callback::Callback<> * onCompletion, uint16_t logIndex);
-    CHIP_ERROR GetPin(Callback::Callback<> * onCompletion, uint16_t userId);
-    CHIP_ERROR GetRfid(Callback::Callback<> * onCompletion, uint16_t userId);
-    CHIP_ERROR GetUserType(Callback::Callback<> * onCompletion, uint16_t userId);
-    CHIP_ERROR GetWeekdaySchedule(Callback::Callback<> * onCompletion, uint8_t scheduleId, uint16_t userId);
-    CHIP_ERROR GetYeardaySchedule(Callback::Callback<> * onCompletion, uint8_t scheduleId, uint16_t userId);
-    CHIP_ERROR LockDoor(Callback::Callback<> * onCompletion, char * pin);
-    CHIP_ERROR SetHolidaySchedule(Callback::Callback<> * onCompletion, uint8_t scheduleId, uint32_t localStartTime,
-                                  uint32_t localEndTime, uint8_t operatingModeDuringHoliday);
-    CHIP_ERROR SetPin(Callback::Callback<> * onCompletion, uint16_t userId, uint8_t userStatus, uint8_t userType, char * pin);
-    CHIP_ERROR SetRfid(Callback::Callback<> * onCompletion, uint16_t userId, uint8_t userStatus, uint8_t userType, char * id);
-    CHIP_ERROR SetUserType(Callback::Callback<> * onCompletion, uint16_t userId, uint8_t userType);
-    CHIP_ERROR SetWeekdaySchedule(Callback::Callback<> * onCompletion, uint8_t scheduleId, uint16_t userId, uint8_t daysMask,
-                                  uint8_t startHour, uint8_t startMinute, uint8_t endHour, uint8_t endMinute);
-    CHIP_ERROR SetYeardaySchedule(Callback::Callback<> * onCompletion, uint8_t scheduleId, uint16_t userId, uint32_t localStartTime,
-                                  uint32_t localEndTime);
-    CHIP_ERROR UnlockDoor(Callback::Callback<> * onCompletion, char * pin);
-    CHIP_ERROR UnlockWithTimeout(Callback::Callback<> * onCompletion, uint16_t timeoutInSeconds, char * pin);
+    CHIP_ERROR ClearAllPins(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ClearAllRfids(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ClearHolidaySchedule(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                    uint8_t scheduleId);
+    CHIP_ERROR ClearPin(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint16_t userId);
+    CHIP_ERROR ClearRfid(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint16_t userId);
+    CHIP_ERROR ClearWeekdaySchedule(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                    uint8_t scheduleId, uint16_t userId);
+    CHIP_ERROR ClearYeardaySchedule(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                    uint8_t scheduleId, uint16_t userId);
+    CHIP_ERROR GetHolidaySchedule(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                  uint8_t scheduleId);
+    CHIP_ERROR GetLogRecord(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint16_t logIndex);
+    CHIP_ERROR GetPin(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint16_t userId);
+    CHIP_ERROR GetRfid(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint16_t userId);
+    CHIP_ERROR GetUserType(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint16_t userId);
+    CHIP_ERROR GetWeekdaySchedule(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                  uint8_t scheduleId, uint16_t userId);
+    CHIP_ERROR GetYeardaySchedule(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                  uint8_t scheduleId, uint16_t userId);
+    CHIP_ERROR LockDoor(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, char * pin);
+    CHIP_ERROR SetHolidaySchedule(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                  uint8_t scheduleId, uint32_t localStartTime, uint32_t localEndTime,
+                                  uint8_t operatingModeDuringHoliday);
+    CHIP_ERROR SetPin(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint16_t userId,
+                      uint8_t userStatus, uint8_t userType, char * pin);
+    CHIP_ERROR SetRfid(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint16_t userId,
+                       uint8_t userStatus, uint8_t userType, char * id);
+    CHIP_ERROR SetUserType(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint16_t userId,
+                           uint8_t userType);
+    CHIP_ERROR SetWeekdaySchedule(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                  uint8_t scheduleId, uint16_t userId, uint8_t daysMask, uint8_t startHour, uint8_t startMinute,
+                                  uint8_t endHour, uint8_t endMinute);
+    CHIP_ERROR SetYeardaySchedule(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                  uint8_t scheduleId, uint16_t userId, uint32_t localStartTime, uint32_t localEndTime);
+    CHIP_ERROR UnlockDoor(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, char * pin);
+    CHIP_ERROR UnlockWithTimeout(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                 uint16_t timeoutInSeconds, char * pin);
 
     // Cluster Attributes
-    CHIP_ERROR DiscoverAttributes(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeLockState(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeLockType(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeActuatorEnabled(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeClusterRevision(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReportAttributeLockState(Callback::Callback<> * onCompletion, Callback::Callback<> * onChange, uint16_t minInterval,
-                                        uint16_t maxInterval);
+    CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeLockState(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeLockType(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeActuatorEnabled(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ConfigureAttributeLockState(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                           uint16_t minInterval, uint16_t maxInterval);
+    CHIP_ERROR ReportAttributeLockState(Callback::Cancelable * onReportCallback);
 
 private:
     static constexpr CommandId kClearAllPinsCommandId         = 0x08;
@@ -311,17 +355,20 @@
     ~GroupsCluster() {}
 
     // Cluster Commands
-    CHIP_ERROR AddGroup(Callback::Callback<> * onCompletion, uint16_t groupId, char * groupName);
-    CHIP_ERROR AddGroupIfIdentifying(Callback::Callback<> * onCompletion, uint16_t groupId, char * groupName);
-    CHIP_ERROR GetGroupMembership(Callback::Callback<> * onCompletion, uint8_t groupCount, uint16_t groupList);
-    CHIP_ERROR RemoveAllGroups(Callback::Callback<> * onCompletion);
-    CHIP_ERROR RemoveGroup(Callback::Callback<> * onCompletion, uint16_t groupId);
-    CHIP_ERROR ViewGroup(Callback::Callback<> * onCompletion, uint16_t groupId);
+    CHIP_ERROR AddGroup(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint16_t groupId,
+                        char * groupName);
+    CHIP_ERROR AddGroupIfIdentifying(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                     uint16_t groupId, char * groupName);
+    CHIP_ERROR GetGroupMembership(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                  uint8_t groupCount, uint16_t groupList);
+    CHIP_ERROR RemoveAllGroups(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR RemoveGroup(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint16_t groupId);
+    CHIP_ERROR ViewGroup(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint16_t groupId);
 
     // Cluster Attributes
-    CHIP_ERROR DiscoverAttributes(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeNameSupport(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeClusterRevision(Callback::Callback<> * onCompletion);
+    CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeNameSupport(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
 
 private:
     static constexpr CommandId kAddGroupCommandId              = 0x00;
@@ -339,14 +386,15 @@
     ~IasZoneCluster() {}
 
     // Cluster Attributes
-    CHIP_ERROR DiscoverAttributes(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeZoneState(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeZoneType(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeZoneStatus(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeIasCieAddress(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeZoneId(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeClusterRevision(Callback::Callback<> * onCompletion);
-    CHIP_ERROR WriteAttributeIasCieAddress(Callback::Callback<> * onCompletion, uint64_t value);
+    CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeZoneState(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeZoneType(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeZoneStatus(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeIasCieAddress(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeZoneId(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR WriteAttributeIasCieAddress(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                           uint64_t value);
 };
 
 class DLL_EXPORT IdentifyCluster : public ClusterBase
@@ -356,14 +404,15 @@
     ~IdentifyCluster() {}
 
     // Cluster Commands
-    CHIP_ERROR Identify(Callback::Callback<> * onCompletion, uint16_t identifyTime);
-    CHIP_ERROR IdentifyQuery(Callback::Callback<> * onCompletion);
+    CHIP_ERROR Identify(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint16_t identifyTime);
+    CHIP_ERROR IdentifyQuery(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
 
     // Cluster Attributes
-    CHIP_ERROR DiscoverAttributes(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeIdentifyTime(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeClusterRevision(Callback::Callback<> * onCompletion);
-    CHIP_ERROR WriteAttributeIdentifyTime(Callback::Callback<> * onCompletion, uint16_t value);
+    CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeIdentifyTime(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR WriteAttributeIdentifyTime(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                          uint16_t value);
 
 private:
     static constexpr CommandId kIdentifyCommandId      = 0x00;
@@ -377,24 +426,29 @@
     ~LevelControlCluster() {}
 
     // Cluster Commands
-    CHIP_ERROR Move(Callback::Callback<> * onCompletion, uint8_t moveMode, uint8_t rate, uint8_t optionMask,
+    CHIP_ERROR Move(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint8_t moveMode,
+                    uint8_t rate, uint8_t optionMask, uint8_t optionOverride);
+    CHIP_ERROR MoveToLevel(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint8_t level,
+                           uint16_t transitionTime, uint8_t optionMask, uint8_t optionOverride);
+    CHIP_ERROR MoveToLevelWithOnOff(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                    uint8_t level, uint16_t transitionTime);
+    CHIP_ERROR MoveWithOnOff(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint8_t moveMode,
+                             uint8_t rate);
+    CHIP_ERROR Step(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint8_t stepMode,
+                    uint8_t stepSize, uint16_t transitionTime, uint8_t optionMask, uint8_t optionOverride);
+    CHIP_ERROR StepWithOnOff(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint8_t stepMode,
+                             uint8_t stepSize, uint16_t transitionTime);
+    CHIP_ERROR Stop(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint8_t optionMask,
                     uint8_t optionOverride);
-    CHIP_ERROR MoveToLevel(Callback::Callback<> * onCompletion, uint8_t level, uint16_t transitionTime, uint8_t optionMask,
-                           uint8_t optionOverride);
-    CHIP_ERROR MoveToLevelWithOnOff(Callback::Callback<> * onCompletion, uint8_t level, uint16_t transitionTime);
-    CHIP_ERROR MoveWithOnOff(Callback::Callback<> * onCompletion, uint8_t moveMode, uint8_t rate);
-    CHIP_ERROR Step(Callback::Callback<> * onCompletion, uint8_t stepMode, uint8_t stepSize, uint16_t transitionTime,
-                    uint8_t optionMask, uint8_t optionOverride);
-    CHIP_ERROR StepWithOnOff(Callback::Callback<> * onCompletion, uint8_t stepMode, uint8_t stepSize, uint16_t transitionTime);
-    CHIP_ERROR Stop(Callback::Callback<> * onCompletion, uint8_t optionMask, uint8_t optionOverride);
-    CHIP_ERROR StopWithOnOff(Callback::Callback<> * onCompletion);
+    CHIP_ERROR StopWithOnOff(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
 
     // Cluster Attributes
-    CHIP_ERROR DiscoverAttributes(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeCurrentLevel(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeClusterRevision(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReportAttributeCurrentLevel(Callback::Callback<> * onCompletion, Callback::Callback<> * onChange,
-                                           uint16_t minInterval, uint16_t maxInterval, uint8_t change);
+    CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeCurrentLevel(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ConfigureAttributeCurrentLevel(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                              uint16_t minInterval, uint16_t maxInterval, uint8_t change);
+    CHIP_ERROR ReportAttributeCurrentLevel(Callback::Cancelable * onReportCallback);
 
 private:
     static constexpr CommandId kMoveCommandId                 = 0x01;
@@ -414,16 +468,17 @@
     ~OnOffCluster() {}
 
     // Cluster Commands
-    CHIP_ERROR Off(Callback::Callback<> * onCompletion);
-    CHIP_ERROR On(Callback::Callback<> * onCompletion);
-    CHIP_ERROR Toggle(Callback::Callback<> * onCompletion);
+    CHIP_ERROR Off(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR On(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR Toggle(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
 
     // Cluster Attributes
-    CHIP_ERROR DiscoverAttributes(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeOnOff(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeClusterRevision(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReportAttributeOnOff(Callback::Callback<> * onCompletion, Callback::Callback<> * onChange, uint16_t minInterval,
-                                    uint16_t maxInterval);
+    CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeOnOff(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ConfigureAttributeOnOff(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                       uint16_t minInterval, uint16_t maxInterval);
+    CHIP_ERROR ReportAttributeOnOff(Callback::Cancelable * onReportCallback);
 
 private:
     static constexpr CommandId kOffCommandId    = 0x00;
@@ -438,23 +493,30 @@
     ~ScenesCluster() {}
 
     // Cluster Commands
-    CHIP_ERROR AddScene(Callback::Callback<> * onCompletion, uint16_t groupId, uint8_t sceneId, uint16_t transitionTime,
-                        char * sceneName, chip::ClusterId clusterId, uint8_t length, uint8_t value);
-    CHIP_ERROR GetSceneMembership(Callback::Callback<> * onCompletion, uint16_t groupId);
-    CHIP_ERROR RecallScene(Callback::Callback<> * onCompletion, uint16_t groupId, uint8_t sceneId, uint16_t transitionTime);
-    CHIP_ERROR RemoveAllScenes(Callback::Callback<> * onCompletion, uint16_t groupId);
-    CHIP_ERROR RemoveScene(Callback::Callback<> * onCompletion, uint16_t groupId, uint8_t sceneId);
-    CHIP_ERROR StoreScene(Callback::Callback<> * onCompletion, uint16_t groupId, uint8_t sceneId);
-    CHIP_ERROR ViewScene(Callback::Callback<> * onCompletion, uint16_t groupId, uint8_t sceneId);
+    CHIP_ERROR AddScene(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint16_t groupId,
+                        uint8_t sceneId, uint16_t transitionTime, char * sceneName, chip::ClusterId clusterId, uint8_t length,
+                        uint8_t value);
+    CHIP_ERROR GetSceneMembership(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                  uint16_t groupId);
+    CHIP_ERROR RecallScene(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint16_t groupId,
+                           uint8_t sceneId, uint16_t transitionTime);
+    CHIP_ERROR RemoveAllScenes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                               uint16_t groupId);
+    CHIP_ERROR RemoveScene(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint16_t groupId,
+                           uint8_t sceneId);
+    CHIP_ERROR StoreScene(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint16_t groupId,
+                          uint8_t sceneId);
+    CHIP_ERROR ViewScene(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint16_t groupId,
+                         uint8_t sceneId);
 
     // Cluster Attributes
-    CHIP_ERROR DiscoverAttributes(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeSceneCount(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeCurrentScene(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeCurrentGroup(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeSceneValid(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeNameSupport(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeClusterRevision(Callback::Callback<> * onCompletion);
+    CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeSceneCount(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeCurrentScene(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeCurrentGroup(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeSceneValid(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeNameSupport(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
 
 private:
     static constexpr CommandId kAddSceneCommandId           = 0x00;
@@ -473,13 +535,14 @@
     ~TemperatureMeasurementCluster() {}
 
     // Cluster Attributes
-    CHIP_ERROR DiscoverAttributes(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeMeasuredValue(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeMinMeasuredValue(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeMaxMeasuredValue(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReadAttributeClusterRevision(Callback::Callback<> * onCompletion);
-    CHIP_ERROR ReportAttributeMeasuredValue(Callback::Callback<> * onCompletion, Callback::Callback<> * onChange,
-                                            uint16_t minInterval, uint16_t maxInterval, int16_t change);
+    CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeMeasuredValue(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeMinMeasuredValue(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeMaxMeasuredValue(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    CHIP_ERROR ConfigureAttributeMeasuredValue(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
+                                               uint16_t minInterval, uint16_t maxInterval, int16_t change);
+    CHIP_ERROR ReportAttributeMeasuredValue(Callback::Cancelable * onReportCallback);
 };
 
 } // namespace Controller
diff --git a/src/controller/CHIPDevice.cpp b/src/controller/CHIPDevice.cpp
index 619d659..d476d38 100644
--- a/src/controller/CHIPDevice.cpp
+++ b/src/controller/CHIPDevice.cpp
@@ -36,6 +36,7 @@
 #endif // CHIP_SYSTEM_CONFIG_USE_LWIP
 
 #include <app/CommandSender.h>
+#include <app/server/DataModelHandler.h>
 #include <core/CHIPCore.h>
 #include <core/CHIPEncoding.h>
 #include <core/CHIPSafeCasts.h>
@@ -231,42 +232,9 @@
         {
             mStatusDelegate->OnMessage(std::move(msgBuf));
         }
-
-        // TODO: The following callback processing will need further work
-        //       1. The response needs to be parsed as per cluster definition. The response callback
-        //          should carry the parsed response values.
-        //       2. The reports callbacks should also be called with the parsed reports.
-        //       3. The callbacks would be tracked using exchange context. On receiving the
-        //          message, the exchange context in the message should be matched against
-        //          the registered callbacks.
-        // GitHub issue: https://github.com/project-chip/connectedhomeip/issues/3910
-        Cancelable * ca = mResponses.mNext;
-        while (ca != &mResponses)
+        else
         {
-            Callback::Callback<> * cb = Callback::Callback<>::FromCancelable(ca);
-            // Let's advance to the next cancelable, as the current one will get removed
-            // from the list (and once removed, its next will point to itself)
-            ca = ca->mNext;
-            if (cb != nullptr)
-            {
-                ChipLogProgress(Controller, "Dispatching response callback %p", cb);
-                cb->Cancel();
-                cb->mCall(cb->mContext);
-            }
-        }
-
-        ca = mReports.mNext;
-        while (ca != &mReports)
-        {
-            Callback::Callback<> * cb = Callback::Callback<>::FromCancelable(ca);
-            // Let's advance to the next cancelable, as the current one might get removed
-            // from the list in the callback (and if removed, its next will point to itself)
-            ca = ca->mNext;
-            if (cb != nullptr)
-            {
-                ChipLogProgress(Controller, "Dispatching report callback %p", cb);
-                cb->mCall(cb->mContext);
-            }
+            HandleDataModelMessage(mDeviceId, std::move(msgBuf));
         }
     }
 }
@@ -318,28 +286,15 @@
     return true;
 }
 
-void Device::AddResponseHandler(EndpointId endpoint, ClusterId cluster, Callback::Callback<> * onResponse)
+void Device::AddResponseHandler(uint8_t seqNum, Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback)
 {
-    CallbackInfo info                 = { endpoint, cluster };
-    Callback::Cancelable * cancelable = onResponse->Cancel();
-
-    static_assert(sizeof(info) <= sizeof(cancelable->mInfoScalar), "Size of CallbackInfo should be <= size of mInfoScalar");
-
-    cancelable->mInfoScalar = 0;
-    memmove(&cancelable->mInfoScalar, &info, sizeof(info));
-    mResponses.Enqueue(cancelable);
+    mCallbacksMgr.AddResponseCallback(mDeviceId, seqNum, onSuccessCallback, onFailureCallback);
 }
 
-void Device::AddReportHandler(EndpointId endpoint, ClusterId cluster, Callback::Callback<> * onReport)
+void Device::AddReportHandler(EndpointId endpoint, ClusterId cluster, AttributeId attribute,
+                              Callback::Cancelable * onReportCallback)
 {
-    CallbackInfo info                 = { endpoint, cluster };
-    Callback::Cancelable * cancelable = onReport->Cancel();
-
-    static_assert(sizeof(info) <= sizeof(cancelable->mInfoScalar), "Size of CallbackInfo should be <= size of mInfoScalar");
-
-    cancelable->mInfoScalar = 0;
-    memmove(&cancelable->mInfoScalar, &info, sizeof(info));
-    mReports.Enqueue(cancelable);
+    mCallbacksMgr.AddReportCallback(mDeviceId, endpoint, cluster, attribute, onReportCallback);
 }
 
 } // namespace Controller
diff --git a/src/controller/CHIPDevice.h b/src/controller/CHIPDevice.h
index cab2653..df435ee 100644
--- a/src/controller/CHIPDevice.h
+++ b/src/controller/CHIPDevice.h
@@ -28,6 +28,7 @@
 
 #include <app/CommandSender.h>
 #include <app/InteractionModelEngine.h>
+#include <app/util/CHIPDeviceCallbacksMgr.h>
 #include <app/util/basic-types.h>
 #include <core/CHIPCallback.h>
 #include <core/CHIPCore.h>
@@ -251,8 +252,9 @@
 
     PASESessionSerializable & GetPairing() { return mPairing; }
 
-    void AddResponseHandler(EndpointId endpoint, ClusterId cluster, Callback::Callback<> * onResponse);
-    void AddReportHandler(EndpointId endpoint, ClusterId cluster, Callback::Callback<> * onReport);
+    uint8_t GetNextSequenceNumber() { return mSequenceNumber++; };
+    void AddResponseHandler(uint8_t seqNum, Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
+    void AddReportHandler(EndpointId endpoint, ClusterId cluster, AttributeId attribute, Callback::Cancelable * onReportCallback);
 
 private:
     enum class ConnectionState
@@ -262,12 +264,6 @@
         SecureConnected,
     };
 
-    struct CallbackInfo
-    {
-        EndpointId endpoint;
-        ClusterId cluster;
-    };
-
     enum class ResetTransport
     {
         kYes,
@@ -302,13 +298,9 @@
 
     SecureSessionHandle mSecureSession = {};
 
-    /* Track all outstanding response callbacks for this device. The callbacks are
-       registered when a command is sent to the device, to get notified with the results. */
-    Callback::CallbackDeque mResponses;
+    uint8_t mSequenceNumber = 0;
 
-    /* Track all outstanding callbacks for attribute reports from this device. The callbacks are
-       registered when the user requests attribute reporting for device attributes. */
-    Callback::CallbackDeque mReports;
+    app::CHIPDeviceCallbacksMgr & mCallbacksMgr = app::CHIPDeviceCallbacksMgr::GetInstance();
 
     /**
      * @brief
diff --git a/src/controller/CHIPDeviceController.cpp b/src/controller/CHIPDeviceController.cpp
index 6136c47..22165a2 100644
--- a/src/controller/CHIPDeviceController.cpp
+++ b/src/controller/CHIPDeviceController.cpp
@@ -40,6 +40,7 @@
 #endif
 
 #include <app/InteractionModelEngine.h>
+#include <app/server/DataModelHandler.h>
 #include <core/CHIPCore.h>
 #include <core/CHIPEncoding.h>
 #include <core/CHIPSafeCasts.h>
@@ -159,6 +160,8 @@
     mSessionManager->SetDelegate(this);
 #endif
 
+    InitDataModelHandler();
+
     mState         = State::Initialized;
     mLocalDeviceId = localDeviceId;
 
diff --git a/src/controller/java/CHIPDeviceController-JNI.cpp b/src/controller/java/CHIPDeviceController-JNI.cpp
index 671029d..159c902 100644
--- a/src/controller/java/CHIPDeviceController-JNI.cpp
+++ b/src/controller/java/CHIPDeviceController-JNI.cpp
@@ -432,16 +432,16 @@
         switch (commandID)
         {
         case 0:
-            buffer = encodeOnOffClusterOffCommand(endpoint);
+            buffer = encodeOnOffClusterOffCommand(0, endpoint);
             break;
         case 1:
-            buffer = encodeOnOffClusterOnCommand(endpoint);
+            buffer = encodeOnOffClusterOnCommand(0, endpoint);
             break;
         case 2:
-            buffer = encodeOnOffClusterToggleCommand(endpoint);
+            buffer = encodeOnOffClusterToggleCommand(0, endpoint);
             break;
         case 3:
-            buffer = encodeLevelControlClusterMoveToLevelCommand(endpoint, (uint8_t)(aValue & 0xff), 0xFFFF, 0, 0);
+            buffer = encodeLevelControlClusterMoveToLevelCommand(0, endpoint, (uint8_t)(aValue & 0xff), 0xFFFF, 0, 0);
             break;
         default:
             ChipLogError(Controller, "Unknown command: %d", commandID);
diff --git a/src/controller/python/ChipDeviceController-ClusterCommands.cpp b/src/controller/python/ChipDeviceController-ClusterCommands.cpp
index efa246d..7369455 100644
--- a/src/controller/python/ChipDeviceController-ClusterCommands.cpp
+++ b/src/controller/python/ChipDeviceController-ClusterCommands.cpp
@@ -40,7 +40,7 @@
     chip::Controller::BarrierControlCluster clusterBarrierControl;
     (void) ZCLgroupId;
     clusterBarrierControl.Associate(device, ZCLendpointId);
-    return clusterBarrierControl.BarrierControlGoToPercent(nullptr, percentOpen);
+    return clusterBarrierControl.BarrierControlGoToPercent(nullptr, nullptr, percentOpen);
 }
 CHIP_ERROR chip_ime_AppendCommand_BarrierControl_BarrierControlStop(chip::Controller::Device * device,
                                                                     chip::EndpointId ZCLendpointId, chip::GroupId ZCLgroupId)
@@ -49,7 +49,7 @@
     chip::Controller::BarrierControlCluster clusterBarrierControl;
     (void) ZCLgroupId;
     clusterBarrierControl.Associate(device, ZCLendpointId);
-    return clusterBarrierControl.BarrierControlStop(nullptr);
+    return clusterBarrierControl.BarrierControlStop(nullptr, nullptr);
 }
 // End of Cluster BarrierControl
 
@@ -61,7 +61,7 @@
     chip::Controller::BasicCluster clusterBasic;
     (void) ZCLgroupId;
     clusterBasic.Associate(device, ZCLendpointId);
-    return clusterBasic.MfgSpecificPing(nullptr);
+    return clusterBasic.MfgSpecificPing(nullptr, nullptr);
 }
 CHIP_ERROR chip_ime_AppendCommand_Basic_ResetToFactoryDefaults(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                                chip::GroupId ZCLgroupId)
@@ -70,7 +70,7 @@
     chip::Controller::BasicCluster clusterBasic;
     (void) ZCLgroupId;
     clusterBasic.Associate(device, ZCLendpointId);
-    return clusterBasic.ResetToFactoryDefaults(nullptr);
+    return clusterBasic.ResetToFactoryDefaults(nullptr, nullptr);
 }
 // End of Cluster Basic
 
@@ -83,7 +83,7 @@
     chip::Controller::BindingCluster clusterBinding;
     (void) ZCLgroupId;
     clusterBinding.Associate(device, ZCLendpointId);
-    return clusterBinding.Bind(nullptr, nodeId, groupId, endpointId, clusterId);
+    return clusterBinding.Bind(nullptr, nullptr, nodeId, groupId, endpointId, clusterId);
 }
 CHIP_ERROR chip_ime_AppendCommand_Binding_Unbind(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                  chip::GroupId ZCLgroupId, chip::NodeId nodeId, chip::GroupId groupId,
@@ -93,7 +93,7 @@
     chip::Controller::BindingCluster clusterBinding;
     (void) ZCLgroupId;
     clusterBinding.Associate(device, ZCLendpointId);
-    return clusterBinding.Unbind(nullptr, nodeId, groupId, endpointId, clusterId);
+    return clusterBinding.Unbind(nullptr, nullptr, nodeId, groupId, endpointId, clusterId);
 }
 // End of Cluster Binding
 
@@ -106,7 +106,7 @@
     chip::Controller::ColorControlCluster clusterColorControl;
     (void) ZCLgroupId;
     clusterColorControl.Associate(device, ZCLendpointId);
-    return clusterColorControl.MoveColor(nullptr, rateX, rateY, optionsMask, optionsOverride);
+    return clusterColorControl.MoveColor(nullptr, nullptr, rateX, rateY, optionsMask, optionsOverride);
 }
 CHIP_ERROR chip_ime_AppendCommand_ColorControl_MoveColorTemperature(
     chip::Controller::Device * device, chip::EndpointId ZCLendpointId, chip::GroupId ZCLgroupId, uint8_t moveMode, uint16_t rate,
@@ -116,8 +116,8 @@
     chip::Controller::ColorControlCluster clusterColorControl;
     (void) ZCLgroupId;
     clusterColorControl.Associate(device, ZCLendpointId);
-    return clusterColorControl.MoveColorTemperature(nullptr, moveMode, rate, colorTemperatureMinimum, colorTemperatureMaximum,
-                                                    optionsMask, optionsOverride);
+    return clusterColorControl.MoveColorTemperature(nullptr, nullptr, moveMode, rate, colorTemperatureMinimum,
+                                                    colorTemperatureMaximum, optionsMask, optionsOverride);
 }
 CHIP_ERROR chip_ime_AppendCommand_ColorControl_MoveHue(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                        chip::GroupId ZCLgroupId, uint8_t moveMode, uint8_t rate,
@@ -127,7 +127,7 @@
     chip::Controller::ColorControlCluster clusterColorControl;
     (void) ZCLgroupId;
     clusterColorControl.Associate(device, ZCLendpointId);
-    return clusterColorControl.MoveHue(nullptr, moveMode, rate, optionsMask, optionsOverride);
+    return clusterColorControl.MoveHue(nullptr, nullptr, moveMode, rate, optionsMask, optionsOverride);
 }
 CHIP_ERROR chip_ime_AppendCommand_ColorControl_MoveSaturation(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                               chip::GroupId ZCLgroupId, uint8_t moveMode, uint8_t rate,
@@ -137,7 +137,7 @@
     chip::Controller::ColorControlCluster clusterColorControl;
     (void) ZCLgroupId;
     clusterColorControl.Associate(device, ZCLendpointId);
-    return clusterColorControl.MoveSaturation(nullptr, moveMode, rate, optionsMask, optionsOverride);
+    return clusterColorControl.MoveSaturation(nullptr, nullptr, moveMode, rate, optionsMask, optionsOverride);
 }
 CHIP_ERROR chip_ime_AppendCommand_ColorControl_MoveToColor(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                            chip::GroupId ZCLgroupId, uint16_t colorX, uint16_t colorY,
@@ -147,7 +147,7 @@
     chip::Controller::ColorControlCluster clusterColorControl;
     (void) ZCLgroupId;
     clusterColorControl.Associate(device, ZCLendpointId);
-    return clusterColorControl.MoveToColor(nullptr, colorX, colorY, transitionTime, optionsMask, optionsOverride);
+    return clusterColorControl.MoveToColor(nullptr, nullptr, colorX, colorY, transitionTime, optionsMask, optionsOverride);
 }
 CHIP_ERROR chip_ime_AppendCommand_ColorControl_MoveToColorTemperature(chip::Controller::Device * device,
                                                                       chip::EndpointId ZCLendpointId, chip::GroupId ZCLgroupId,
@@ -158,7 +158,8 @@
     chip::Controller::ColorControlCluster clusterColorControl;
     (void) ZCLgroupId;
     clusterColorControl.Associate(device, ZCLendpointId);
-    return clusterColorControl.MoveToColorTemperature(nullptr, colorTemperature, transitionTime, optionsMask, optionsOverride);
+    return clusterColorControl.MoveToColorTemperature(nullptr, nullptr, colorTemperature, transitionTime, optionsMask,
+                                                      optionsOverride);
 }
 CHIP_ERROR chip_ime_AppendCommand_ColorControl_MoveToHue(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                          chip::GroupId ZCLgroupId, uint8_t hue, uint8_t direction,
@@ -168,7 +169,7 @@
     chip::Controller::ColorControlCluster clusterColorControl;
     (void) ZCLgroupId;
     clusterColorControl.Associate(device, ZCLendpointId);
-    return clusterColorControl.MoveToHue(nullptr, hue, direction, transitionTime, optionsMask, optionsOverride);
+    return clusterColorControl.MoveToHue(nullptr, nullptr, hue, direction, transitionTime, optionsMask, optionsOverride);
 }
 CHIP_ERROR chip_ime_AppendCommand_ColorControl_MoveToHueAndSaturation(chip::Controller::Device * device,
                                                                       chip::EndpointId ZCLendpointId, chip::GroupId ZCLgroupId,
@@ -179,7 +180,8 @@
     chip::Controller::ColorControlCluster clusterColorControl;
     (void) ZCLgroupId;
     clusterColorControl.Associate(device, ZCLendpointId);
-    return clusterColorControl.MoveToHueAndSaturation(nullptr, hue, saturation, transitionTime, optionsMask, optionsOverride);
+    return clusterColorControl.MoveToHueAndSaturation(nullptr, nullptr, hue, saturation, transitionTime, optionsMask,
+                                                      optionsOverride);
 }
 CHIP_ERROR chip_ime_AppendCommand_ColorControl_MoveToSaturation(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                                 chip::GroupId ZCLgroupId, uint8_t saturation,
@@ -190,7 +192,7 @@
     chip::Controller::ColorControlCluster clusterColorControl;
     (void) ZCLgroupId;
     clusterColorControl.Associate(device, ZCLendpointId);
-    return clusterColorControl.MoveToSaturation(nullptr, saturation, transitionTime, optionsMask, optionsOverride);
+    return clusterColorControl.MoveToSaturation(nullptr, nullptr, saturation, transitionTime, optionsMask, optionsOverride);
 }
 CHIP_ERROR chip_ime_AppendCommand_ColorControl_StepColor(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                          chip::GroupId ZCLgroupId, int16_t stepX, int16_t stepY,
@@ -200,7 +202,7 @@
     chip::Controller::ColorControlCluster clusterColorControl;
     (void) ZCLgroupId;
     clusterColorControl.Associate(device, ZCLendpointId);
-    return clusterColorControl.StepColor(nullptr, stepX, stepY, transitionTime, optionsMask, optionsOverride);
+    return clusterColorControl.StepColor(nullptr, nullptr, stepX, stepY, transitionTime, optionsMask, optionsOverride);
 }
 CHIP_ERROR chip_ime_AppendCommand_ColorControl_StepColorTemperature(chip::Controller::Device * device,
                                                                     chip::EndpointId ZCLendpointId, chip::GroupId ZCLgroupId,
@@ -213,7 +215,7 @@
     chip::Controller::ColorControlCluster clusterColorControl;
     (void) ZCLgroupId;
     clusterColorControl.Associate(device, ZCLendpointId);
-    return clusterColorControl.StepColorTemperature(nullptr, stepMode, stepSize, transitionTime, colorTemperatureMinimum,
+    return clusterColorControl.StepColorTemperature(nullptr, nullptr, stepMode, stepSize, transitionTime, colorTemperatureMinimum,
                                                     colorTemperatureMaximum, optionsMask, optionsOverride);
 }
 CHIP_ERROR chip_ime_AppendCommand_ColorControl_StepHue(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
@@ -224,7 +226,7 @@
     chip::Controller::ColorControlCluster clusterColorControl;
     (void) ZCLgroupId;
     clusterColorControl.Associate(device, ZCLendpointId);
-    return clusterColorControl.StepHue(nullptr, stepMode, stepSize, transitionTime, optionsMask, optionsOverride);
+    return clusterColorControl.StepHue(nullptr, nullptr, stepMode, stepSize, transitionTime, optionsMask, optionsOverride);
 }
 CHIP_ERROR chip_ime_AppendCommand_ColorControl_StepSaturation(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                               chip::GroupId ZCLgroupId, uint8_t stepMode, uint8_t stepSize,
@@ -234,7 +236,7 @@
     chip::Controller::ColorControlCluster clusterColorControl;
     (void) ZCLgroupId;
     clusterColorControl.Associate(device, ZCLendpointId);
-    return clusterColorControl.StepSaturation(nullptr, stepMode, stepSize, transitionTime, optionsMask, optionsOverride);
+    return clusterColorControl.StepSaturation(nullptr, nullptr, stepMode, stepSize, transitionTime, optionsMask, optionsOverride);
 }
 CHIP_ERROR chip_ime_AppendCommand_ColorControl_StopMoveStep(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                             chip::GroupId ZCLgroupId, uint8_t optionsMask, uint8_t optionsOverride)
@@ -243,7 +245,7 @@
     chip::Controller::ColorControlCluster clusterColorControl;
     (void) ZCLgroupId;
     clusterColorControl.Associate(device, ZCLendpointId);
-    return clusterColorControl.StopMoveStep(nullptr, optionsMask, optionsOverride);
+    return clusterColorControl.StopMoveStep(nullptr, nullptr, optionsMask, optionsOverride);
 }
 // End of Cluster ColorControl
 
@@ -255,7 +257,7 @@
     chip::Controller::DoorLockCluster clusterDoorLock;
     (void) ZCLgroupId;
     clusterDoorLock.Associate(device, ZCLendpointId);
-    return clusterDoorLock.ClearAllPins(nullptr);
+    return clusterDoorLock.ClearAllPins(nullptr, nullptr);
 }
 CHIP_ERROR chip_ime_AppendCommand_DoorLock_ClearAllRfids(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                          chip::GroupId ZCLgroupId)
@@ -264,7 +266,7 @@
     chip::Controller::DoorLockCluster clusterDoorLock;
     (void) ZCLgroupId;
     clusterDoorLock.Associate(device, ZCLendpointId);
-    return clusterDoorLock.ClearAllRfids(nullptr);
+    return clusterDoorLock.ClearAllRfids(nullptr, nullptr);
 }
 CHIP_ERROR chip_ime_AppendCommand_DoorLock_ClearHolidaySchedule(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                                 chip::GroupId ZCLgroupId, uint8_t scheduleId)
@@ -273,7 +275,7 @@
     chip::Controller::DoorLockCluster clusterDoorLock;
     (void) ZCLgroupId;
     clusterDoorLock.Associate(device, ZCLendpointId);
-    return clusterDoorLock.ClearHolidaySchedule(nullptr, scheduleId);
+    return clusterDoorLock.ClearHolidaySchedule(nullptr, nullptr, scheduleId);
 }
 CHIP_ERROR chip_ime_AppendCommand_DoorLock_ClearPin(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                     chip::GroupId ZCLgroupId, uint16_t userId)
@@ -282,7 +284,7 @@
     chip::Controller::DoorLockCluster clusterDoorLock;
     (void) ZCLgroupId;
     clusterDoorLock.Associate(device, ZCLendpointId);
-    return clusterDoorLock.ClearPin(nullptr, userId);
+    return clusterDoorLock.ClearPin(nullptr, nullptr, userId);
 }
 CHIP_ERROR chip_ime_AppendCommand_DoorLock_ClearRfid(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                      chip::GroupId ZCLgroupId, uint16_t userId)
@@ -291,7 +293,7 @@
     chip::Controller::DoorLockCluster clusterDoorLock;
     (void) ZCLgroupId;
     clusterDoorLock.Associate(device, ZCLendpointId);
-    return clusterDoorLock.ClearRfid(nullptr, userId);
+    return clusterDoorLock.ClearRfid(nullptr, nullptr, userId);
 }
 CHIP_ERROR chip_ime_AppendCommand_DoorLock_ClearWeekdaySchedule(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                                 chip::GroupId ZCLgroupId, uint8_t scheduleId, uint16_t userId)
@@ -300,7 +302,7 @@
     chip::Controller::DoorLockCluster clusterDoorLock;
     (void) ZCLgroupId;
     clusterDoorLock.Associate(device, ZCLendpointId);
-    return clusterDoorLock.ClearWeekdaySchedule(nullptr, scheduleId, userId);
+    return clusterDoorLock.ClearWeekdaySchedule(nullptr, nullptr, scheduleId, userId);
 }
 CHIP_ERROR chip_ime_AppendCommand_DoorLock_ClearYeardaySchedule(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                                 chip::GroupId ZCLgroupId, uint8_t scheduleId, uint16_t userId)
@@ -309,7 +311,7 @@
     chip::Controller::DoorLockCluster clusterDoorLock;
     (void) ZCLgroupId;
     clusterDoorLock.Associate(device, ZCLendpointId);
-    return clusterDoorLock.ClearYeardaySchedule(nullptr, scheduleId, userId);
+    return clusterDoorLock.ClearYeardaySchedule(nullptr, nullptr, scheduleId, userId);
 }
 CHIP_ERROR chip_ime_AppendCommand_DoorLock_GetHolidaySchedule(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                               chip::GroupId ZCLgroupId, uint8_t scheduleId)
@@ -318,7 +320,7 @@
     chip::Controller::DoorLockCluster clusterDoorLock;
     (void) ZCLgroupId;
     clusterDoorLock.Associate(device, ZCLendpointId);
-    return clusterDoorLock.GetHolidaySchedule(nullptr, scheduleId);
+    return clusterDoorLock.GetHolidaySchedule(nullptr, nullptr, scheduleId);
 }
 CHIP_ERROR chip_ime_AppendCommand_DoorLock_GetLogRecord(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                         chip::GroupId ZCLgroupId, uint16_t logIndex)
@@ -327,7 +329,7 @@
     chip::Controller::DoorLockCluster clusterDoorLock;
     (void) ZCLgroupId;
     clusterDoorLock.Associate(device, ZCLendpointId);
-    return clusterDoorLock.GetLogRecord(nullptr, logIndex);
+    return clusterDoorLock.GetLogRecord(nullptr, nullptr, logIndex);
 }
 CHIP_ERROR chip_ime_AppendCommand_DoorLock_GetPin(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                   chip::GroupId ZCLgroupId, uint16_t userId)
@@ -336,7 +338,7 @@
     chip::Controller::DoorLockCluster clusterDoorLock;
     (void) ZCLgroupId;
     clusterDoorLock.Associate(device, ZCLendpointId);
-    return clusterDoorLock.GetPin(nullptr, userId);
+    return clusterDoorLock.GetPin(nullptr, nullptr, userId);
 }
 CHIP_ERROR chip_ime_AppendCommand_DoorLock_GetRfid(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                    chip::GroupId ZCLgroupId, uint16_t userId)
@@ -345,7 +347,7 @@
     chip::Controller::DoorLockCluster clusterDoorLock;
     (void) ZCLgroupId;
     clusterDoorLock.Associate(device, ZCLendpointId);
-    return clusterDoorLock.GetRfid(nullptr, userId);
+    return clusterDoorLock.GetRfid(nullptr, nullptr, userId);
 }
 CHIP_ERROR chip_ime_AppendCommand_DoorLock_GetUserType(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                        chip::GroupId ZCLgroupId, uint16_t userId)
@@ -354,7 +356,7 @@
     chip::Controller::DoorLockCluster clusterDoorLock;
     (void) ZCLgroupId;
     clusterDoorLock.Associate(device, ZCLendpointId);
-    return clusterDoorLock.GetUserType(nullptr, userId);
+    return clusterDoorLock.GetUserType(nullptr, nullptr, userId);
 }
 CHIP_ERROR chip_ime_AppendCommand_DoorLock_GetWeekdaySchedule(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                               chip::GroupId ZCLgroupId, uint8_t scheduleId, uint16_t userId)
@@ -363,7 +365,7 @@
     chip::Controller::DoorLockCluster clusterDoorLock;
     (void) ZCLgroupId;
     clusterDoorLock.Associate(device, ZCLendpointId);
-    return clusterDoorLock.GetWeekdaySchedule(nullptr, scheduleId, userId);
+    return clusterDoorLock.GetWeekdaySchedule(nullptr, nullptr, scheduleId, userId);
 }
 CHIP_ERROR chip_ime_AppendCommand_DoorLock_GetYeardaySchedule(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                               chip::GroupId ZCLgroupId, uint8_t scheduleId, uint16_t userId)
@@ -372,7 +374,7 @@
     chip::Controller::DoorLockCluster clusterDoorLock;
     (void) ZCLgroupId;
     clusterDoorLock.Associate(device, ZCLendpointId);
-    return clusterDoorLock.GetYeardaySchedule(nullptr, scheduleId, userId);
+    return clusterDoorLock.GetYeardaySchedule(nullptr, nullptr, scheduleId, userId);
 }
 CHIP_ERROR chip_ime_AppendCommand_DoorLock_LockDoor(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                     chip::GroupId ZCLgroupId, char * pin)
@@ -381,7 +383,7 @@
     chip::Controller::DoorLockCluster clusterDoorLock;
     (void) ZCLgroupId;
     clusterDoorLock.Associate(device, ZCLendpointId);
-    return clusterDoorLock.LockDoor(nullptr, pin);
+    return clusterDoorLock.LockDoor(nullptr, nullptr, pin);
 }
 CHIP_ERROR chip_ime_AppendCommand_DoorLock_SetHolidaySchedule(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                               chip::GroupId ZCLgroupId, uint8_t scheduleId, uint32_t localStartTime,
@@ -391,7 +393,8 @@
     chip::Controller::DoorLockCluster clusterDoorLock;
     (void) ZCLgroupId;
     clusterDoorLock.Associate(device, ZCLendpointId);
-    return clusterDoorLock.SetHolidaySchedule(nullptr, scheduleId, localStartTime, localEndTime, operatingModeDuringHoliday);
+    return clusterDoorLock.SetHolidaySchedule(nullptr, nullptr, scheduleId, localStartTime, localEndTime,
+                                              operatingModeDuringHoliday);
 }
 CHIP_ERROR chip_ime_AppendCommand_DoorLock_SetPin(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                   chip::GroupId ZCLgroupId, uint16_t userId, uint8_t userStatus, uint8_t userType,
@@ -401,7 +404,7 @@
     chip::Controller::DoorLockCluster clusterDoorLock;
     (void) ZCLgroupId;
     clusterDoorLock.Associate(device, ZCLendpointId);
-    return clusterDoorLock.SetPin(nullptr, userId, userStatus, userType, pin);
+    return clusterDoorLock.SetPin(nullptr, nullptr, userId, userStatus, userType, pin);
 }
 CHIP_ERROR chip_ime_AppendCommand_DoorLock_SetRfid(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                    chip::GroupId ZCLgroupId, uint16_t userId, uint8_t userStatus, uint8_t userType,
@@ -411,7 +414,7 @@
     chip::Controller::DoorLockCluster clusterDoorLock;
     (void) ZCLgroupId;
     clusterDoorLock.Associate(device, ZCLendpointId);
-    return clusterDoorLock.SetRfid(nullptr, userId, userStatus, userType, id);
+    return clusterDoorLock.SetRfid(nullptr, nullptr, userId, userStatus, userType, id);
 }
 CHIP_ERROR chip_ime_AppendCommand_DoorLock_SetUserType(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                        chip::GroupId ZCLgroupId, uint16_t userId, uint8_t userType)
@@ -420,7 +423,7 @@
     chip::Controller::DoorLockCluster clusterDoorLock;
     (void) ZCLgroupId;
     clusterDoorLock.Associate(device, ZCLendpointId);
-    return clusterDoorLock.SetUserType(nullptr, userId, userType);
+    return clusterDoorLock.SetUserType(nullptr, nullptr, userId, userType);
 }
 CHIP_ERROR chip_ime_AppendCommand_DoorLock_SetWeekdaySchedule(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                               chip::GroupId ZCLgroupId, uint8_t scheduleId, uint16_t userId,
@@ -431,7 +434,8 @@
     chip::Controller::DoorLockCluster clusterDoorLock;
     (void) ZCLgroupId;
     clusterDoorLock.Associate(device, ZCLendpointId);
-    return clusterDoorLock.SetWeekdaySchedule(nullptr, scheduleId, userId, daysMask, startHour, startMinute, endHour, endMinute);
+    return clusterDoorLock.SetWeekdaySchedule(nullptr, nullptr, scheduleId, userId, daysMask, startHour, startMinute, endHour,
+                                              endMinute);
 }
 CHIP_ERROR chip_ime_AppendCommand_DoorLock_SetYeardaySchedule(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                               chip::GroupId ZCLgroupId, uint8_t scheduleId, uint16_t userId,
@@ -441,7 +445,7 @@
     chip::Controller::DoorLockCluster clusterDoorLock;
     (void) ZCLgroupId;
     clusterDoorLock.Associate(device, ZCLendpointId);
-    return clusterDoorLock.SetYeardaySchedule(nullptr, scheduleId, userId, localStartTime, localEndTime);
+    return clusterDoorLock.SetYeardaySchedule(nullptr, nullptr, scheduleId, userId, localStartTime, localEndTime);
 }
 CHIP_ERROR chip_ime_AppendCommand_DoorLock_UnlockDoor(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                       chip::GroupId ZCLgroupId, char * pin)
@@ -450,7 +454,7 @@
     chip::Controller::DoorLockCluster clusterDoorLock;
     (void) ZCLgroupId;
     clusterDoorLock.Associate(device, ZCLendpointId);
-    return clusterDoorLock.UnlockDoor(nullptr, pin);
+    return clusterDoorLock.UnlockDoor(nullptr, nullptr, pin);
 }
 CHIP_ERROR chip_ime_AppendCommand_DoorLock_UnlockWithTimeout(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                              chip::GroupId ZCLgroupId, uint16_t timeoutInSeconds, char * pin)
@@ -459,7 +463,7 @@
     chip::Controller::DoorLockCluster clusterDoorLock;
     (void) ZCLgroupId;
     clusterDoorLock.Associate(device, ZCLendpointId);
-    return clusterDoorLock.UnlockWithTimeout(nullptr, timeoutInSeconds, pin);
+    return clusterDoorLock.UnlockWithTimeout(nullptr, nullptr, timeoutInSeconds, pin);
 }
 // End of Cluster DoorLock
 
@@ -471,7 +475,7 @@
     chip::Controller::GroupsCluster clusterGroups;
     (void) ZCLgroupId;
     clusterGroups.Associate(device, ZCLendpointId);
-    return clusterGroups.AddGroup(nullptr, groupId, groupName);
+    return clusterGroups.AddGroup(nullptr, nullptr, groupId, groupName);
 }
 CHIP_ERROR chip_ime_AppendCommand_Groups_AddGroupIfIdentifying(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                                chip::GroupId ZCLgroupId, uint16_t groupId, char * groupName)
@@ -480,7 +484,7 @@
     chip::Controller::GroupsCluster clusterGroups;
     (void) ZCLgroupId;
     clusterGroups.Associate(device, ZCLendpointId);
-    return clusterGroups.AddGroupIfIdentifying(nullptr, groupId, groupName);
+    return clusterGroups.AddGroupIfIdentifying(nullptr, nullptr, groupId, groupName);
 }
 CHIP_ERROR chip_ime_AppendCommand_Groups_GetGroupMembership(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                             chip::GroupId ZCLgroupId, uint8_t groupCount, uint16_t groupList)
@@ -489,7 +493,7 @@
     chip::Controller::GroupsCluster clusterGroups;
     (void) ZCLgroupId;
     clusterGroups.Associate(device, ZCLendpointId);
-    return clusterGroups.GetGroupMembership(nullptr, groupCount, groupList);
+    return clusterGroups.GetGroupMembership(nullptr, nullptr, groupCount, groupList);
 }
 CHIP_ERROR chip_ime_AppendCommand_Groups_RemoveAllGroups(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                          chip::GroupId ZCLgroupId)
@@ -498,7 +502,7 @@
     chip::Controller::GroupsCluster clusterGroups;
     (void) ZCLgroupId;
     clusterGroups.Associate(device, ZCLendpointId);
-    return clusterGroups.RemoveAllGroups(nullptr);
+    return clusterGroups.RemoveAllGroups(nullptr, nullptr);
 }
 CHIP_ERROR chip_ime_AppendCommand_Groups_RemoveGroup(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                      chip::GroupId ZCLgroupId, uint16_t groupId)
@@ -507,7 +511,7 @@
     chip::Controller::GroupsCluster clusterGroups;
     (void) ZCLgroupId;
     clusterGroups.Associate(device, ZCLendpointId);
-    return clusterGroups.RemoveGroup(nullptr, groupId);
+    return clusterGroups.RemoveGroup(nullptr, nullptr, groupId);
 }
 CHIP_ERROR chip_ime_AppendCommand_Groups_ViewGroup(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                    chip::GroupId ZCLgroupId, uint16_t groupId)
@@ -516,7 +520,7 @@
     chip::Controller::GroupsCluster clusterGroups;
     (void) ZCLgroupId;
     clusterGroups.Associate(device, ZCLendpointId);
-    return clusterGroups.ViewGroup(nullptr, groupId);
+    return clusterGroups.ViewGroup(nullptr, nullptr, groupId);
 }
 // End of Cluster Groups
 
@@ -531,7 +535,7 @@
     chip::Controller::IdentifyCluster clusterIdentify;
     (void) ZCLgroupId;
     clusterIdentify.Associate(device, ZCLendpointId);
-    return clusterIdentify.Identify(nullptr, identifyTime);
+    return clusterIdentify.Identify(nullptr, nullptr, identifyTime);
 }
 CHIP_ERROR chip_ime_AppendCommand_Identify_IdentifyQuery(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                          chip::GroupId ZCLgroupId)
@@ -540,7 +544,7 @@
     chip::Controller::IdentifyCluster clusterIdentify;
     (void) ZCLgroupId;
     clusterIdentify.Associate(device, ZCLendpointId);
-    return clusterIdentify.IdentifyQuery(nullptr);
+    return clusterIdentify.IdentifyQuery(nullptr, nullptr);
 }
 // End of Cluster Identify
 
@@ -553,7 +557,7 @@
     chip::Controller::LevelControlCluster clusterLevelControl;
     (void) ZCLgroupId;
     clusterLevelControl.Associate(device, ZCLendpointId);
-    return clusterLevelControl.Move(nullptr, moveMode, rate, optionMask, optionOverride);
+    return clusterLevelControl.Move(nullptr, nullptr, moveMode, rate, optionMask, optionOverride);
 }
 CHIP_ERROR chip_ime_AppendCommand_LevelControl_MoveToLevel(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                            chip::GroupId ZCLgroupId, uint8_t level, uint16_t transitionTime,
@@ -563,7 +567,7 @@
     chip::Controller::LevelControlCluster clusterLevelControl;
     (void) ZCLgroupId;
     clusterLevelControl.Associate(device, ZCLendpointId);
-    return clusterLevelControl.MoveToLevel(nullptr, level, transitionTime, optionMask, optionOverride);
+    return clusterLevelControl.MoveToLevel(nullptr, nullptr, level, transitionTime, optionMask, optionOverride);
 }
 CHIP_ERROR chip_ime_AppendCommand_LevelControl_MoveToLevelWithOnOff(chip::Controller::Device * device,
                                                                     chip::EndpointId ZCLendpointId, chip::GroupId ZCLgroupId,
@@ -573,7 +577,7 @@
     chip::Controller::LevelControlCluster clusterLevelControl;
     (void) ZCLgroupId;
     clusterLevelControl.Associate(device, ZCLendpointId);
-    return clusterLevelControl.MoveToLevelWithOnOff(nullptr, level, transitionTime);
+    return clusterLevelControl.MoveToLevelWithOnOff(nullptr, nullptr, level, transitionTime);
 }
 CHIP_ERROR chip_ime_AppendCommand_LevelControl_MoveWithOnOff(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                              chip::GroupId ZCLgroupId, uint8_t moveMode, uint8_t rate)
@@ -582,7 +586,7 @@
     chip::Controller::LevelControlCluster clusterLevelControl;
     (void) ZCLgroupId;
     clusterLevelControl.Associate(device, ZCLendpointId);
-    return clusterLevelControl.MoveWithOnOff(nullptr, moveMode, rate);
+    return clusterLevelControl.MoveWithOnOff(nullptr, nullptr, moveMode, rate);
 }
 CHIP_ERROR chip_ime_AppendCommand_LevelControl_Step(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                     chip::GroupId ZCLgroupId, uint8_t stepMode, uint8_t stepSize,
@@ -592,7 +596,7 @@
     chip::Controller::LevelControlCluster clusterLevelControl;
     (void) ZCLgroupId;
     clusterLevelControl.Associate(device, ZCLendpointId);
-    return clusterLevelControl.Step(nullptr, stepMode, stepSize, transitionTime, optionMask, optionOverride);
+    return clusterLevelControl.Step(nullptr, nullptr, stepMode, stepSize, transitionTime, optionMask, optionOverride);
 }
 CHIP_ERROR chip_ime_AppendCommand_LevelControl_StepWithOnOff(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                              chip::GroupId ZCLgroupId, uint8_t stepMode, uint8_t stepSize,
@@ -602,7 +606,7 @@
     chip::Controller::LevelControlCluster clusterLevelControl;
     (void) ZCLgroupId;
     clusterLevelControl.Associate(device, ZCLendpointId);
-    return clusterLevelControl.StepWithOnOff(nullptr, stepMode, stepSize, transitionTime);
+    return clusterLevelControl.StepWithOnOff(nullptr, nullptr, stepMode, stepSize, transitionTime);
 }
 CHIP_ERROR chip_ime_AppendCommand_LevelControl_Stop(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                     chip::GroupId ZCLgroupId, uint8_t optionMask, uint8_t optionOverride)
@@ -611,7 +615,7 @@
     chip::Controller::LevelControlCluster clusterLevelControl;
     (void) ZCLgroupId;
     clusterLevelControl.Associate(device, ZCLendpointId);
-    return clusterLevelControl.Stop(nullptr, optionMask, optionOverride);
+    return clusterLevelControl.Stop(nullptr, nullptr, optionMask, optionOverride);
 }
 CHIP_ERROR chip_ime_AppendCommand_LevelControl_StopWithOnOff(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                              chip::GroupId ZCLgroupId)
@@ -620,7 +624,7 @@
     chip::Controller::LevelControlCluster clusterLevelControl;
     (void) ZCLgroupId;
     clusterLevelControl.Associate(device, ZCLendpointId);
-    return clusterLevelControl.StopWithOnOff(nullptr);
+    return clusterLevelControl.StopWithOnOff(nullptr, nullptr);
 }
 // End of Cluster LevelControl
 
@@ -632,7 +636,7 @@
     chip::Controller::OnOffCluster clusterOnOff;
     (void) ZCLgroupId;
     clusterOnOff.Associate(device, ZCLendpointId);
-    return clusterOnOff.Off(nullptr);
+    return clusterOnOff.Off(nullptr, nullptr);
 }
 CHIP_ERROR chip_ime_AppendCommand_OnOff_On(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                            chip::GroupId ZCLgroupId)
@@ -641,7 +645,7 @@
     chip::Controller::OnOffCluster clusterOnOff;
     (void) ZCLgroupId;
     clusterOnOff.Associate(device, ZCLendpointId);
-    return clusterOnOff.On(nullptr);
+    return clusterOnOff.On(nullptr, nullptr);
 }
 CHIP_ERROR chip_ime_AppendCommand_OnOff_Toggle(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                chip::GroupId ZCLgroupId)
@@ -650,7 +654,7 @@
     chip::Controller::OnOffCluster clusterOnOff;
     (void) ZCLgroupId;
     clusterOnOff.Associate(device, ZCLendpointId);
-    return clusterOnOff.Toggle(nullptr);
+    return clusterOnOff.Toggle(nullptr, nullptr);
 }
 // End of Cluster OnOff
 
@@ -664,7 +668,7 @@
     chip::Controller::ScenesCluster clusterScenes;
     (void) ZCLgroupId;
     clusterScenes.Associate(device, ZCLendpointId);
-    return clusterScenes.AddScene(nullptr, groupId, sceneId, transitionTime, sceneName, clusterId, length, value);
+    return clusterScenes.AddScene(nullptr, nullptr, groupId, sceneId, transitionTime, sceneName, clusterId, length, value);
 }
 CHIP_ERROR chip_ime_AppendCommand_Scenes_GetSceneMembership(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                             chip::GroupId ZCLgroupId, uint16_t groupId)
@@ -673,7 +677,7 @@
     chip::Controller::ScenesCluster clusterScenes;
     (void) ZCLgroupId;
     clusterScenes.Associate(device, ZCLendpointId);
-    return clusterScenes.GetSceneMembership(nullptr, groupId);
+    return clusterScenes.GetSceneMembership(nullptr, nullptr, groupId);
 }
 CHIP_ERROR chip_ime_AppendCommand_Scenes_RecallScene(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                      chip::GroupId ZCLgroupId, uint16_t groupId, uint8_t sceneId,
@@ -683,7 +687,7 @@
     chip::Controller::ScenesCluster clusterScenes;
     (void) ZCLgroupId;
     clusterScenes.Associate(device, ZCLendpointId);
-    return clusterScenes.RecallScene(nullptr, groupId, sceneId, transitionTime);
+    return clusterScenes.RecallScene(nullptr, nullptr, groupId, sceneId, transitionTime);
 }
 CHIP_ERROR chip_ime_AppendCommand_Scenes_RemoveAllScenes(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                          chip::GroupId ZCLgroupId, uint16_t groupId)
@@ -692,7 +696,7 @@
     chip::Controller::ScenesCluster clusterScenes;
     (void) ZCLgroupId;
     clusterScenes.Associate(device, ZCLendpointId);
-    return clusterScenes.RemoveAllScenes(nullptr, groupId);
+    return clusterScenes.RemoveAllScenes(nullptr, nullptr, groupId);
 }
 CHIP_ERROR chip_ime_AppendCommand_Scenes_RemoveScene(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                      chip::GroupId ZCLgroupId, uint16_t groupId, uint8_t sceneId)
@@ -701,7 +705,7 @@
     chip::Controller::ScenesCluster clusterScenes;
     (void) ZCLgroupId;
     clusterScenes.Associate(device, ZCLendpointId);
-    return clusterScenes.RemoveScene(nullptr, groupId, sceneId);
+    return clusterScenes.RemoveScene(nullptr, nullptr, groupId, sceneId);
 }
 CHIP_ERROR chip_ime_AppendCommand_Scenes_StoreScene(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                     chip::GroupId ZCLgroupId, uint16_t groupId, uint8_t sceneId)
@@ -710,7 +714,7 @@
     chip::Controller::ScenesCluster clusterScenes;
     (void) ZCLgroupId;
     clusterScenes.Associate(device, ZCLendpointId);
-    return clusterScenes.StoreScene(nullptr, groupId, sceneId);
+    return clusterScenes.StoreScene(nullptr, nullptr, groupId, sceneId);
 }
 CHIP_ERROR chip_ime_AppendCommand_Scenes_ViewScene(chip::Controller::Device * device, chip::EndpointId ZCLendpointId,
                                                    chip::GroupId ZCLgroupId, uint16_t groupId, uint8_t sceneId)
@@ -719,7 +723,7 @@
     chip::Controller::ScenesCluster clusterScenes;
     (void) ZCLgroupId;
     clusterScenes.Associate(device, ZCLendpointId);
-    return clusterScenes.ViewScene(nullptr, groupId, sceneId);
+    return clusterScenes.ViewScene(nullptr, nullptr, groupId, sceneId);
 }
 // End of Cluster Scenes
 
diff --git a/src/darwin/CHIPTool/CHIPTool/Framework Helpers/DefaultsUtils.h b/src/darwin/CHIPTool/CHIPTool/Framework Helpers/DefaultsUtils.h
index 1cfa594..63e4a5d 100644
--- a/src/darwin/CHIPTool/CHIPTool/Framework Helpers/DefaultsUtils.h
+++ b/src/darwin/CHIPTool/CHIPTool/Framework Helpers/DefaultsUtils.h
@@ -27,6 +27,7 @@
 void CHIPRemoveDomainValueForKey(NSString * domain, NSString * key);
 uint64_t CHIPGetNextAvailableDeviceID(void);
 void CHIPSetNextAvailableDeviceID(uint64_t id);
+CHIPDevice * GetPairedDevice(void);
 
 @interface CHIPToolPersistentStorageDelegate : NSObject <CHIPPersistentStorageDelegate>
 
diff --git a/src/darwin/CHIPTool/CHIPTool/Framework Helpers/DefaultsUtils.m b/src/darwin/CHIPTool/CHIPTool/Framework Helpers/DefaultsUtils.m
index 9081616..cc65266 100644
--- a/src/darwin/CHIPTool/CHIPTool/Framework Helpers/DefaultsUtils.m
+++ b/src/darwin/CHIPTool/CHIPTool/Framework Helpers/DefaultsUtils.m
@@ -62,6 +62,26 @@
     CHIPSetDomainValueForKey(kCHIPToolDefaultsDomain, kCHIPNextAvailableDeviceIDKey, [NSNumber numberWithUnsignedLongLong:id]);
 }
 
+CHIPDevice * GetPairedDevice(void)
+{
+    CHIPToolPersistentStorageDelegate * storage = [[CHIPToolPersistentStorageDelegate alloc] init];
+    dispatch_queue_t callbackQueue = dispatch_queue_create("com.chip.persistentstorage.callback", DISPATCH_QUEUE_SERIAL);
+
+    CHIPDeviceController * controller = [CHIPDeviceController sharedController];
+    [controller setPersistentStorageDelegate:storage queue:callbackQueue];
+
+    CHIPDevice * device = nil;
+    uint64_t deviceId = CHIPGetNextAvailableDeviceID();
+    if (deviceId > 1) {
+        // Let's use the last device that was paired
+        deviceId--;
+        NSError * error;
+        device = [controller getPairedDevice:deviceId error:&error];
+    }
+
+    return device;
+}
+
 @implementation CHIPToolPersistentStorageDelegate
 
 // MARK: CHIPPersistentStorageDelegate
diff --git a/src/darwin/CHIPTool/CHIPTool/View Controllers/Bindings/BindingsViewController.m b/src/darwin/CHIPTool/CHIPTool/View Controllers/Bindings/BindingsViewController.m
index 8d28b70..d08cd75 100644
--- a/src/darwin/CHIPTool/CHIPTool/View Controllers/Bindings/BindingsViewController.m
+++ b/src/darwin/CHIPTool/CHIPTool/View Controllers/Bindings/BindingsViewController.m
@@ -17,12 +17,15 @@
 
 #import "BindingsViewController.h"
 #import "CHIPUIViewUtils.h"
+#import "DefaultsUtils.h"
 
 @interface BindingsViewController ()
 @property (nonatomic, strong) UITextField * nodeIDTextField;
 @property (nonatomic, strong) UITextField * groupIDTextField;
 @property (nonatomic, strong) UITextField * endpointIDTextField;
 @property (nonatomic, strong) UITextField * clusterIDTextField;
+
+@property (nonatomic, strong) CHIPBinding * cluster;
 @end
 
 @implementation BindingsViewController
@@ -34,6 +37,8 @@
 
     UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];
     [self.view addGestureRecognizer:tap];
+
+    self.cluster = [[CHIPBinding alloc] initWithDevice:GetPairedDevice() endpoint:1 queue:dispatch_get_main_queue()];
 }
 
 - (void)dismissKeyboard
@@ -111,13 +116,15 @@
 
     [stackView addArrangedSubview:stackViewButtons];
     [stackViewButtons.trailingAnchor constraintEqualToAnchor:stackView.trailingAnchor].active = YES;
+
+    [self _clearTextFields];
 }
 
 - (void)_clearTextFields
 {
-    _nodeIDTextField.text = @"";
-    _endpointIDTextField.text = @"";
-    _groupIDTextField.text = @"";
+    _nodeIDTextField.text = [NSString stringWithFormat:@"%d", 112233];
+    _endpointIDTextField.text = @"1";
+    _groupIDTextField.text = @"0";
     _clusterIDTextField.text = @"";
 }
 
@@ -125,14 +132,38 @@
 
 - (IBAction)bind:(id)sender
 {
-    [self _clearTextFields];
-    // TODO: Call binding API
+    int nodeId = [_nodeIDTextField.text intValue];
+    int endpointId = [_endpointIDTextField.text intValue];
+    int groupId = [_groupIDTextField.text intValue];
+    int clusterId = [_clusterIDTextField.text intValue];
+
+    [self.cluster bind:nodeId
+                  groupId:groupId
+               endpointId:endpointId
+                clusterId:clusterId
+        completionHandler:^(NSError * _Nullable error, NSDictionary * _Nullable values) {
+            NSString * resultString
+                = (error == nil) ? @"Bind command: success!" : [NSString stringWithFormat:@"An error occured: 0x%02lx", error.code];
+            NSLog(resultString, nil);
+        }];
 }
 
 - (IBAction)unbind:(id)sender
 {
-    [self _clearTextFields];
-    // TODO: Call unbinding API
+    int nodeId = [_nodeIDTextField.text intValue];
+    int endpointId = [_endpointIDTextField.text intValue];
+    int groupId = [_groupIDTextField.text intValue];
+    int clusterId = [_clusterIDTextField.text intValue];
+
+    [self.cluster unbind:nodeId
+                  groupId:groupId
+               endpointId:endpointId
+                clusterId:clusterId
+        completionHandler:^(NSError * _Nullable error, NSDictionary * _Nullable values) {
+            NSString * resultString = (error == nil) ? @"Unbind command: success!"
+                                                     : [NSString stringWithFormat:@"An error occured: 0x%02lx", error.code];
+            NSLog(resultString, nil);
+        }];
 }
 
 @end
diff --git a/src/darwin/CHIPTool/CHIPTool/View Controllers/Echo client/EchoViewController.h b/src/darwin/CHIPTool/CHIPTool/View Controllers/Echo client/EchoViewController.h
index b163e66..8984019 100644
--- a/src/darwin/CHIPTool/CHIPTool/View Controllers/Echo client/EchoViewController.h
+++ b/src/darwin/CHIPTool/CHIPTool/View Controllers/Echo client/EchoViewController.h
@@ -20,7 +20,7 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@interface EchoViewController : UIViewController <CHIPDeviceControllerDelegate>
+@interface EchoViewController : UIViewController
 @end
 
 NS_ASSUME_NONNULL_END
diff --git a/src/darwin/CHIPTool/CHIPTool/View Controllers/Echo client/EchoViewController.m b/src/darwin/CHIPTool/CHIPTool/View Controllers/Echo client/EchoViewController.m
index c4e6db3..c91d591 100644
--- a/src/darwin/CHIPTool/CHIPTool/View Controllers/Echo client/EchoViewController.m
+++ b/src/darwin/CHIPTool/CHIPTool/View Controllers/Echo client/EchoViewController.m
@@ -20,8 +20,6 @@
 #import "CHIPUIViewUtils.h"
 #import "DefaultsUtils.h"
 
-#define RESULT_DISPLAY_DURATION 5.0 * NSEC_PER_SEC
-
 @interface EchoViewController ()
 
 @property (strong, nonatomic) UITextField * messageTextField;
@@ -30,10 +28,7 @@
 @property (nonatomic, strong) UILabel * resultLabel;
 @property (nonatomic, strong) UIStackView * stackView;
 
-@property (readwrite) CHIPDeviceController * chipController;
-@property (readwrite) CHIPDevice * chipDevice;
-
-@property (readonly) CHIPToolPersistentStorageDelegate * persistentStorage;
+@property (readwrite) CHIPBasic * cluster;
 
 @end
 
@@ -46,25 +41,11 @@
     [super viewDidLoad];
     [self setupUIElements];
 
-    _persistentStorage = [[CHIPToolPersistentStorageDelegate alloc] init];
-
     // listen for taps to dismiss the keyboard
     UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];
     [self.view addGestureRecognizer:tap];
 
-    // initialize the device controller
-    dispatch_queue_t callbackQueue = dispatch_queue_create("com.zigbee.chip.echovc.callback", DISPATCH_QUEUE_SERIAL);
-    self.chipController = [CHIPDeviceController sharedController];
-    [self.chipController setDelegate:self queue:callbackQueue];
-    [self.chipController setPersistentStorageDelegate:_persistentStorage queue:callbackQueue];
-
-    uint64_t deviceID = CHIPGetNextAvailableDeviceID();
-    if (deviceID > 1) {
-        // Let's use the last device that was paired
-        deviceID--;
-        NSError * error;
-        self.chipDevice = [self.chipController getPairedDevice:deviceID error:&error];
-    }
+    self.cluster = [[CHIPBasic alloc] initWithDevice:GetPairedDevice() endpoint:1 queue:dispatch_get_main_queue()];
 }
 
 - (void)dismissKeyboard
@@ -129,55 +110,22 @@
 
 - (IBAction)sendMessage:(id)sender
 {
+    if (!self.cluster) {
+        [self updateResult:@"Something went wrong. Cluster is not initialized."];
+    }
+
     NSString * msg = [self.messageTextField text];
     if (msg.length == 0) {
         msg = [self.messageTextField placeholder];
     }
 
-    // send message
-    if ([self.chipDevice isActive]) {
-        NSError * error;
-        BOOL didSend = [self.chipDevice sendMessage:[msg dataUsingEncoding:NSUTF8StringEncoding] error:&error];
-        if (!didSend) {
-            NSString * errorString = [@"Error: " stringByAppendingString:error.localizedDescription];
-            [self updateResult:errorString];
-        } else {
-            [self updateResult:@"Message Sent"];
-        }
-    } else {
-        [self updateResult:@"Controller not connected"];
-    }
-}
+    [self updateResult:@"MfgSpecificPing command sent..."];
 
-// MARK: CHIPDeviceControllerDelegate
-- (void)deviceControllerOnConnected
-{
-    NSLog(@"Status: Device connected");
-}
-
-- (void)deviceControllerOnError:(nonnull NSError *)error
-{
-    NSLog(@"Status: Device Controller error %@", [error description]);
-    if (error) {
-        NSString * stringError = [@"Error: " stringByAppendingString:error.description];
-        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 5.0), dispatch_get_main_queue(), ^{
-            [self updateResult:stringError];
-        });
-    }
-}
-
-- (void)deviceControllerOnMessage:(nonnull NSData *)message
-{
-    NSString * stringMessage;
-    if ([CHIPDevice isDataModelCommand:message] == YES) {
-        stringMessage = [CHIPDevice commandToString:message];
-    } else {
-        stringMessage = [[NSString alloc] initWithData:message encoding:NSUTF8StringEncoding];
-    }
-    NSString * resultMessage = [@"Echo Response: " stringByAppendingFormat:@"%@", stringMessage];
-    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 5.0), dispatch_get_main_queue(), ^{
-        [self updateResult:resultMessage];
-    });
+    [self.cluster mfgSpecificPing:^(NSError * error, NSDictionary * values) {
+        NSString * resultString = (error == nil) ? @"MfgSpecificPing command: success!"
+                                                 : [NSString stringWithFormat:@"An error occured: 0x%02lx", error.code];
+        [self updateResult:resultString];
+    }];
 }
 
 @end
diff --git a/src/darwin/CHIPTool/CHIPTool/View Controllers/OnOffCluster/OnOffViewController.h b/src/darwin/CHIPTool/CHIPTool/View Controllers/OnOffCluster/OnOffViewController.h
index 8519c13..d03d468 100644
--- a/src/darwin/CHIPTool/CHIPTool/View Controllers/OnOffCluster/OnOffViewController.h
+++ b/src/darwin/CHIPTool/CHIPTool/View Controllers/OnOffCluster/OnOffViewController.h
@@ -20,9 +20,7 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@interface OnOffViewController
-    : UIViewController <CHIPDeviceControllerDelegate, UIPickerViewDelegate, UIPickerViewDataSource, UITextFieldDelegate>
-
+@interface OnOffViewController : UIViewController <UIPickerViewDelegate, UIPickerViewDataSource, UITextFieldDelegate>
 @end
 
 NS_ASSUME_NONNULL_END
diff --git a/src/darwin/CHIPTool/CHIPTool/View Controllers/OnOffCluster/OnOffViewController.m b/src/darwin/CHIPTool/CHIPTool/View Controllers/OnOffCluster/OnOffViewController.m
index a86b3b8..b11ce4a 100644
--- a/src/darwin/CHIPTool/CHIPTool/View Controllers/OnOffCluster/OnOffViewController.m
+++ b/src/darwin/CHIPTool/CHIPTool/View Controllers/OnOffCluster/OnOffViewController.m
@@ -25,17 +25,12 @@
 @interface OnOffViewController ()
 @property (nonatomic, strong) UITextField * numLightsTextField;
 
-@property (readwrite) NSArray<CHIPOnOff *> * onOffClusters;
-@property (readwrite) CHIPOnOff * onOffEndpoint2;
-
 @property (nonatomic, strong) UILabel * resultLabel;
 @property (nonatomic, strong) UILabel * titleLabel;
 @property (nonatomic, strong) UIStackView * stackView;
 
-@property (readwrite) CHIPDeviceController * chipController;
 @property (readwrite) CHIPDevice * chipDevice;
 
-@property (readonly) CHIPToolPersistentStorageDelegate * persistentStorage;
 @end
 
 @implementation OnOffViewController {
@@ -52,8 +47,9 @@
     UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];
     [self.view addGestureRecognizer:tap];
 
-    [self initializeChipController];
     [self setupUIElements];
+
+    self.chipDevice = GetPairedDevice();
 }
 
 - (void)dismissKeyboard
@@ -90,7 +86,6 @@
     [stackView.trailingAnchor constraintEqualToAnchor:self.view.trailingAnchor constant:-30].active = YES;
 
     // Num lights to show
-    [self setupNumberOfLightClustersFromDefaults];
     UILabel * numLightsLabel = [UILabel new];
     numLightsLabel.text = @"# of light endpoints:";
     _numLightsTextField = [UITextField new];
@@ -122,7 +117,7 @@
     [numLightsView.trailingAnchor constraintEqualToAnchor:stackView.trailingAnchor].active = true;
 
     // Create buttons
-    [self addButtons:[_onOffClusters count] toStackView:stackView];
+    [self addButtons:[self numLightClustersToShow] toStackView:stackView];
 
     // Result message
     _resultLabel = [UILabel new];
@@ -212,25 +207,6 @@
 
 // MARK: Cluster Setup
 
-- (void)initializeChipController
-{
-    _persistentStorage = [[CHIPToolPersistentStorageDelegate alloc] init];
-
-    // initialize the device controller
-    _callbackQueue = dispatch_queue_create("com.zigbee.chip.onoffvc.callback", DISPATCH_QUEUE_SERIAL);
-    self.chipController = [CHIPDeviceController sharedController];
-    [self.chipController setDelegate:self queue:_callbackQueue];
-    [self.chipController setPersistentStorageDelegate:_persistentStorage queue:_callbackQueue];
-
-    uint64_t deviceID = CHIPGetNextAvailableDeviceID();
-    if (deviceID > 1) {
-        // Let's use the last device that was paired
-        deviceID--;
-        NSError * error;
-        self.chipDevice = [self.chipController getPairedDevice:deviceID error:&error];
-    }
-}
-
 - (int)numLightClustersToShow
 {
     NSString * numClusters = CHIPGetDomainValueForKey(kCHIPToolDefaultsDomain, kCHIPNumLightOnOffCluster);
@@ -242,105 +218,48 @@
     return numberOfLights;
 }
 
-- (void)setupNumberOfLightClustersFromDefaults
-{
-    [self setupNumberOfLightClusters:[self numLightClustersToShow]];
-}
-
-- (void)setupNumberOfLightClusters:(int)numLights
-{
-    NSMutableArray<CHIPOnOff *> * clusters = [NSMutableArray new];
-    for (int i = 0; i < numLights; i++) {
-        CHIPOnOff * cluster = [[CHIPOnOff alloc] initWithDevice:self.chipDevice endpoint:(i + 1) queue:_callbackQueue];
-        [clusters addObject:cluster];
-    }
-    _onOffClusters = clusters;
-}
-
 // MARK: UIButton actions
 
 - (IBAction)onButtonTapped:(id)sender
 {
-    CHIPDeviceCallback completionHandler = ^(NSError * error) {
-        NSLog(@"Status: On command completed with error %@", [error description]);
-    };
-
     UIButton * button = (UIButton *) sender;
-    NSInteger lightNumber = button.tag;
-    NSLog(@"Light %@ on button pressed.", @(lightNumber));
+    NSInteger endpoint = button.tag;
+    [self updateResult:[NSString stringWithFormat:@"On command sent on endpoint %@", @(endpoint)]];
 
-    if (lightNumber <= [_onOffClusters count]) {
-        CHIPOnOff * onOff = [_onOffClusters objectAtIndex:(lightNumber - 1)];
-        [onOff on:completionHandler];
-    } else {
-        NSLog(@"No cluster initated at endpoint %@.", @(lightNumber));
-    }
+    CHIPOnOff * onOff = [[CHIPOnOff alloc] initWithDevice:self.chipDevice endpoint:endpoint queue:dispatch_get_main_queue()];
+    [onOff on:^(NSError * error, NSDictionary * values) {
+        NSString * resultString
+            = (error != nil) ? [NSString stringWithFormat:@"An error occured: 0x%02lx", error.code] : @"On command success";
+        [self updateResult:resultString];
+    }];
 }
 
 - (IBAction)offButtonTapped:(id)sender
 {
-    CHIPDeviceCallback completionHandler = ^(NSError * error) {
-        NSLog(@"Status: Off command completed with error %@", [error description]);
-    };
-
     UIButton * button = (UIButton *) sender;
-    NSInteger lightNumber = button.tag;
-    NSLog(@"Light %@ off button pressed.", @(lightNumber));
+    NSInteger endpoint = button.tag;
+    [self updateResult:[NSString stringWithFormat:@"Off command sent on endpoint %@", @(endpoint)]];
 
-    if (lightNumber <= [_onOffClusters count]) {
-        CHIPOnOff * onOff = [_onOffClusters objectAtIndex:(lightNumber - 1)];
-        [onOff off:completionHandler];
-    } else {
-        NSLog(@"No cluster initated at endpoint %@.", @(lightNumber));
-    }
+    CHIPOnOff * onOff = [[CHIPOnOff alloc] initWithDevice:self.chipDevice endpoint:endpoint queue:dispatch_get_main_queue()];
+    [onOff off:^(NSError * error, NSDictionary * values) {
+        NSString * resultString
+            = (error != nil) ? [NSString stringWithFormat:@"An error occured: 0x%02lx", error.code] : @"Off command success";
+        [self updateResult:resultString];
+    }];
 }
 
 - (IBAction)toggleButtonTapped:(id)sender
 {
-    CHIPDeviceCallback completionHandler = ^(NSError * error) {
-        NSLog(@"Status: Toggle command completed with error %@", [error description]);
-    };
-
     UIButton * button = (UIButton *) sender;
-    NSInteger lightNumber = button.tag;
-    NSLog(@"Light %@ toggle button pressed.", @(lightNumber));
+    NSInteger endpoint = button.tag;
+    [self updateResult:[NSString stringWithFormat:@"Toggle command sent on endpoint %@", @(endpoint)]];
 
-    if (lightNumber <= [_onOffClusters count]) {
-        CHIPOnOff * onOff = [_onOffClusters objectAtIndex:(lightNumber - 1)];
-        [onOff toggle:completionHandler];
-    } else {
-        NSLog(@"No cluster initated at endpoint %@.", @(lightNumber));
-    }
+    CHIPOnOff * onOff = [[CHIPOnOff alloc] initWithDevice:self.chipDevice endpoint:endpoint queue:dispatch_get_main_queue()];
+    [onOff toggle:^(NSError * error, NSDictionary * values) {
+        NSString * resultString
+            = (error != nil) ? [NSString stringWithFormat:@"An error occured: 0x%02lx", error.code] : @"Toggle command success";
+        [self updateResult:resultString];
+    }];
 }
 
-// MARK: CHIPDeviceControllerDelegate
-- (void)deviceControllerOnConnected
-{
-    NSLog(@"Status: Device connected");
-}
-
-- (void)deviceControllerOnError:(nonnull NSError *)error
-{
-    NSLog(@"Status: Device Controller error %@", [error description]);
-    if (error) {
-        NSString * stringError = [@"Error: " stringByAppendingString:error.description];
-        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 5.0), dispatch_get_main_queue(), ^{
-            [self updateResult:stringError];
-        });
-    }
-}
-
-- (void)deviceControllerOnMessage:(nonnull NSData *)message
-{
-    NSString * stringMessage;
-    if ([CHIPDevice isDataModelCommand:message] == YES) {
-        stringMessage = [CHIPDevice commandToString:message];
-    } else {
-        stringMessage = [[NSString alloc] initWithData:message encoding:NSUTF8StringEncoding];
-    }
-    NSString * resultMessage = [@"Echo Response: " stringByAppendingFormat:@"%@", stringMessage];
-    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 5.0), dispatch_get_main_queue(), ^{
-        [self updateResult:resultMessage];
-    });
-}
 @end
diff --git a/src/darwin/CHIPTool/CHIPTool/View Controllers/QRCode/QRCodeViewController.h b/src/darwin/CHIPTool/CHIPTool/View Controllers/QRCode/QRCodeViewController.h
index d014313..74115a6 100644
--- a/src/darwin/CHIPTool/CHIPTool/View Controllers/QRCode/QRCodeViewController.h
+++ b/src/darwin/CHIPTool/CHIPTool/View Controllers/QRCode/QRCodeViewController.h
@@ -20,7 +20,7 @@
 #import <CoreNFC/CoreNFC.h>
 #import <UIKit/UIKit.h>
 
-@interface QRCodeViewController : UIViewController <AVCaptureMetadataOutputObjectsDelegate, CHIPDeviceControllerDelegate,
-                                      CHIPDevicePairingDelegate, NFCNDEFReaderSessionDelegate>
+@interface QRCodeViewController
+    : UIViewController <AVCaptureMetadataOutputObjectsDelegate, CHIPDevicePairingDelegate, NFCNDEFReaderSessionDelegate>
 
 @end
diff --git a/src/darwin/CHIPTool/CHIPTool/View Controllers/QRCode/QRCodeViewController.m b/src/darwin/CHIPTool/CHIPTool/View Controllers/QRCode/QRCodeViewController.m
index 04f1d46..4d375ce 100644
--- a/src/darwin/CHIPTool/CHIPTool/View Controllers/QRCode/QRCodeViewController.m
+++ b/src/darwin/CHIPTool/CHIPTool/View Controllers/QRCode/QRCodeViewController.m
@@ -293,7 +293,6 @@
 
     dispatch_queue_t callbackQueue = dispatch_queue_create("com.zigbee.chip.qrcodevc.callback", DISPATCH_QUEUE_SERIAL);
     self.chipController = [CHIPDeviceController sharedController];
-    [self.chipController setDelegate:self queue:callbackQueue];
     [self.chipController setPairingDelegate:self queue:callbackQueue];
     [self.chipController setPersistentStorageDelegate:_persistentStorage queue:callbackQueue];
 
@@ -355,21 +354,6 @@
     _session = nil;
 }
 
-// MARK: CHIPDeviceControllerDelegate
-- (void)deviceControllerOnConnected
-{
-    NSLog(@"Status: Device connected");
-}
-
-- (void)deviceControllerOnError:(nonnull NSError *)error
-{
-    NSLog(@"Status: Device Controller error %@", [error description]);
-}
-
-- (void)deviceControllerOnMessage:(nonnull NSData *)message
-{
-}
-
 // MARK: CHIPDevicePairingDelegate
 - (void)onNetworkCredentialsRequested:(SendNetworkCredentials)handler
 {
diff --git a/src/darwin/CHIPTool/CHIPTool/View Controllers/Temperature Sensor/TemperatureSensorViewController.h b/src/darwin/CHIPTool/CHIPTool/View Controllers/Temperature Sensor/TemperatureSensorViewController.h
index 7e8f090..49c4699 100644
--- a/src/darwin/CHIPTool/CHIPTool/View Controllers/Temperature Sensor/TemperatureSensorViewController.h
+++ b/src/darwin/CHIPTool/CHIPTool/View Controllers/Temperature Sensor/TemperatureSensorViewController.h
@@ -11,7 +11,7 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@interface TemperatureSensorViewController : UIViewController <CHIPDeviceControllerDelegate>
+@interface TemperatureSensorViewController : UIViewController
 
 @end
 
diff --git a/src/darwin/CHIPTool/CHIPTool/View Controllers/Temperature Sensor/TemperatureSensorViewController.m b/src/darwin/CHIPTool/CHIPTool/View Controllers/Temperature Sensor/TemperatureSensorViewController.m
index e005814..d8b4125 100644
--- a/src/darwin/CHIPTool/CHIPTool/View Controllers/Temperature Sensor/TemperatureSensorViewController.m
+++ b/src/darwin/CHIPTool/CHIPTool/View Controllers/Temperature Sensor/TemperatureSensorViewController.m
@@ -9,7 +9,6 @@
 #import "TemperatureSensorViewController.h"
 #import "CHIPUIViewUtils.h"
 #import "DefaultsUtils.h"
-#import <CHIP/CHIP.h>
 
 @interface TemperatureSensorViewController ()
 @property (nonatomic, strong) UILabel * temperatureLabel;
@@ -18,10 +17,7 @@
 @property (nonatomic, strong) UITextField * deltaInFahrenheitTextField;
 @property (nonatomic, strong) UIButton * sendReportingSetup;
 
-@property (nonatomic, strong) CHIPTemperatureMeasurement * chipTempMeasurement;
-@property (readwrite) CHIPDevice * chipDevice;
-@property (readwrite) CHIPDeviceController * chipController;
-
+@property (nonatomic, strong) CHIPTemperatureMeasurement * cluster;
 @end
 
 @implementation TemperatureSensorViewController
@@ -36,22 +32,7 @@
     UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];
     [self.view addGestureRecognizer:tap];
 
-    // initialize the device controller
-    dispatch_queue_t callbackQueue = dispatch_queue_create("com.zigbee.chip.tempsensorvc.callback", DISPATCH_QUEUE_SERIAL);
-    self.chipController = [CHIPDeviceController sharedController];
-    [self.chipController setDelegate:self queue:callbackQueue];
-
-    uint64_t deviceID = CHIPGetNextAvailableDeviceID();
-    if (deviceID > 1) {
-        // Let's use the last device that was paired
-        deviceID--;
-        NSError * error;
-        self.chipDevice = [self.chipController getPairedDevice:deviceID error:&error];
-        self.chipTempMeasurement = [[CHIPTemperatureMeasurement alloc] initWithDevice:self.chipDevice
-                                                                             endpoint:1
-                                                                                queue:callbackQueue];
-    }
-
+    self.cluster = [[CHIPTemperatureMeasurement alloc] initWithDevice:GetPairedDevice() endpoint:1 queue:dispatch_get_main_queue()];
     [self readCurrentTemperature];
 }
 
@@ -183,51 +164,39 @@
 
 - (void)readCurrentTemperature
 {
-    CHIPDeviceCallback completionHandler = ^(NSError * error) {
-        NSLog(@"Status: Read temperature request completed with error %@", [error description]);
-    };
-
-    [self.chipTempMeasurement readAttributeMeasuredValue:completionHandler];
+    [self.cluster readAttributeMeasuredValue:^(NSError * _Nullable error, NSDictionary * _Nullable values) {
+        if (error != nil)
+            return;
+        NSNumber * value = values[@"value"];
+        [self updateTempInUI:value.shortValue];
+    }];
 }
 
 - (void)reportFromUserEnteredSettings
 {
-    CHIPDeviceCallback onCompletionCallback = ^(NSError * error) {
-        NSLog(@"Status: update reportAttributeMeasuredValue completed with error %@", [error description]);
-    };
-
-    CHIPDeviceCallback onChangeCallback = ^(NSError * error) {
-        NSLog(@"Status: Temp value changed with error %@", [error description]);
-    };
-    int minIntervalSeconds = [_minIntervalInSecondsTextField.text intValue] * 1000;
-    int maxIntervalSeconds = [_maxIntervalInSecondsTextField.text intValue] * 1000;
+    int minIntervalSeconds = [_minIntervalInSecondsTextField.text intValue];
+    int maxIntervalSeconds = [_maxIntervalInSecondsTextField.text intValue];
     int deltaInFahrenheit = [_deltaInFahrenheitTextField.text intValue];
 
     NSLog(@"Sending temp reporting values: min %@ max %@ value %@", @(minIntervalSeconds), @(maxIntervalSeconds),
         @(deltaInFahrenheit));
 
-    [self.chipTempMeasurement reportAttributeMeasuredValue:onCompletionCallback
-                                                  onChange:onChangeCallback
-                                               minInterval:minIntervalSeconds
-                                               maxInterval:maxIntervalSeconds
-                                                    change:deltaInFahrenheit];
-}
+    [self.cluster
+        configureAttributeMeasuredValue:minIntervalSeconds
+                            maxInterval:maxIntervalSeconds
+                                 change:deltaInFahrenheit
+                      completionHandler:^(NSError * error, NSDictionary * values) {
+                          if (error == nil)
+                              return;
+                          NSLog(@"Status: update reportAttributeMeasuredValue completed with error %@", [error description]);
+                      }];
 
-// MARK: CHIPDeviceControllerDelegate
-- (void)deviceControllerOnConnected
-{
-    NSLog(@"Status: Device connected");
-}
-
-- (void)deviceControllerOnError:(nonnull NSError *)error
-{
-    NSLog(@"Status: Device Controller error %@", [error description]);
-}
-
-- (void)deviceControllerOnMessage:(nonnull NSData *)message
-{
-    NSLog(@"Status: Received a message.");
-    // TODO: Use callback APIs to show read response
+    [self.cluster reportAttributeMeasuredValue:^(NSError * error, NSDictionary * values) {
+        if (error != nil)
+            return;
+        NSNumber * value = values[@"value"];
+        [self updateTempInUI:value.shortValue];
+    }];
 }
 
 @end
diff --git a/src/darwin/Framework/CHIP.xcodeproj/project.pbxproj b/src/darwin/Framework/CHIP.xcodeproj/project.pbxproj
index 7e6b0ce..9c48a0a 100644
--- a/src/darwin/Framework/CHIP.xcodeproj/project.pbxproj
+++ b/src/darwin/Framework/CHIP.xcodeproj/project.pbxproj
@@ -7,17 +7,30 @@
 	objects = {
 
 /* Begin PBXBuildFile section */
-		1EF8B75425782A9E009AA59C /* CHIPClustersObjc.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EF8B75325782A9E009AA59C /* CHIPClustersObjc.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 		1EF8B75625782AAC009AA59C /* CHIPClustersObjc.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1EF8B75525782AAC009AA59C /* CHIPClustersObjc.mm */; };
+		1EC4CE3A25CC263E00D7304F /* reporting.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1EC4CE3825CC263E00D7304F /* reporting.cpp */; };
+		1EC4CE3B25CC263E00D7304F /* reporting-default-configuration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1EC4CE3925CC263E00D7304F /* reporting-default-configuration.cpp */; };
+		1EC4CE3D25CC265200D7304F /* DataModelHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1EC4CE3C25CC265200D7304F /* DataModelHandler.cpp */; };
+		1EC4CE4B25CC267700D7304F /* binding-table.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1EC4CE3E25CC267600D7304F /* binding-table.cpp */; };
+		1EC4CE4C25CC267700D7304F /* ember-print.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1EC4CE3F25CC267600D7304F /* ember-print.cpp */; };
+		1EC4CE4D25CC267700D7304F /* process-global-message.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1EC4CE4025CC267600D7304F /* process-global-message.cpp */; };
+		1EC4CE4E25CC267700D7304F /* attribute-size.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1EC4CE4125CC267600D7304F /* attribute-size.cpp */; };
+		1EC4CE4F25CC267700D7304F /* process-cluster-message.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1EC4CE4225CC267600D7304F /* process-cluster-message.cpp */; };
+		1EC4CE5025CC267700D7304F /* client-api.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1EC4CE4325CC267600D7304F /* client-api.cpp */; };
+		1EC4CE5125CC267700D7304F /* message.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1EC4CE4425CC267600D7304F /* message.cpp */; };
+		1EC4CE5325CC267700D7304F /* chip-message-send.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1EC4CE4625CC267600D7304F /* chip-message-send.cpp */; };
+		1EC4CE5425CC267700D7304F /* util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1EC4CE4725CC267600D7304F /* util.cpp */; };
+		1EC4CE5525CC267700D7304F /* attribute-table.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1EC4CE4825CC267600D7304F /* attribute-table.cpp */; };
+		1EC4CE5625CC267700D7304F /* af-main-common.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1EC4CE4925CC267700D7304F /* af-main-common.cpp */; };
+		1EC4CE5725CC267700D7304F /* attribute-storage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1EC4CE4A25CC267700D7304F /* attribute-storage.cpp */; };
+		1EC4CE5D25CC26E900D7304F /* CHIPClustersObjc.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1EC4CE5925CC26E900D7304F /* CHIPClustersObjc.mm */; };
+		1EC4CE5E25CC26E900D7304F /* call-command-handler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1EC4CE5A25CC26E900D7304F /* call-command-handler.cpp */; };
+		1EC4CE5F25CC26E900D7304F /* callback-stub.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1EC4CE5B25CC26E900D7304F /* callback-stub.cpp */; };
+		1EC4CE6025CC26E900D7304F /* CHIPClientCallbacks.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1EC4CE5C25CC26E900D7304F /* CHIPClientCallbacks.cpp */; };
+		1EC4CE6225CC271B00D7304F /* af-event.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1EC4CE6125CC271B00D7304F /* af-event.cpp */; };
+		1EC4CE6425CC276600D7304F /* CHIPClustersObjc.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EC4CE6325CC276600D7304F /* CHIPClustersObjc.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		2C222AD0255C620600E446B9 /* CHIPDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C222ACE255C620600E446B9 /* CHIPDevice.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		2C222AD1255C620600E446B9 /* CHIPDevice.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2C222ACF255C620600E446B9 /* CHIPDevice.mm */; };
-		2C222ADB255C74D100E446B9 /* CHIPDeviceStatusDelegateBridge.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2C222AD8255C74D100E446B9 /* CHIPDeviceStatusDelegateBridge.mm */; };
-		2C222ADC255C74D100E446B9 /* CHIPDeviceStatusDelegateBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C222AD9255C74D100E446B9 /* CHIPDeviceStatusDelegateBridge.h */; };
-		2C222ADD255C74D100E446B9 /* CHIPDeviceStatusDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C222ADA255C74D100E446B9 /* CHIPDeviceStatusDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		2C222ADF255C811800E446B9 /* CHIPDevice_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C222ADE255C811800E446B9 /* CHIPDevice_Internal.h */; };
-		2C222AED25634E5300E446B9 /* CHIPDeviceCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C222AEC25634E5300E446B9 /* CHIPDeviceCallback.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		2C222AF025646BB100E446B9 /* CHIPCallbackBridge.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2C222AEE25646BB100E446B9 /* CHIPCallbackBridge.mm */; };
-		2C222AF125646BB100E446B9 /* CHIPCallbackBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C222AEF25646BB100E446B9 /* CHIPCallbackBridge.h */; };
 		2C4DF09E248B2C60009307CB /* libmbedtls.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2C4DF09D248B2C60009307CB /* libmbedtls.a */; settings = {ATTRIBUTES = (Required, ); }; };
 		2C8C8FC0253E0C2100797F05 /* CHIPPersistentStorageDelegateBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C8C8FBD253E0C2100797F05 /* CHIPPersistentStorageDelegateBridge.h */; };
 		2C8C8FC1253E0C2100797F05 /* CHIPPersistentStorageDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C8C8FBE253E0C2100797F05 /* CHIPPersistentStorageDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -53,17 +66,30 @@
 /* End PBXContainerItemProxy section */
 
 /* Begin PBXFileReference section */
-		1EF8B75325782A9E009AA59C /* CHIPClustersObjc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CHIPClustersObjc.h; sourceTree = "<group>"; };
- 		1EF8B75525782AAC009AA59C /* CHIPClustersObjc.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = CHIPClustersObjc.mm; sourceTree = "<group>"; };
+		1EC4CE3825CC263E00D7304F /* reporting.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = reporting.cpp; path = ../../../app/reporting/reporting.cpp; sourceTree = "<group>"; };
+		1EC4CE3925CC263E00D7304F /* reporting-default-configuration.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "reporting-default-configuration.cpp"; path = "../../../app/reporting/reporting-default-configuration.cpp"; sourceTree = "<group>"; };
+		1EC4CE3C25CC265200D7304F /* DataModelHandler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DataModelHandler.cpp; path = ../../../app/server/DataModelHandler.cpp; sourceTree = "<group>"; };
+		1EC4CE3E25CC267600D7304F /* binding-table.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "binding-table.cpp"; path = "../../../app/util/binding-table.cpp"; sourceTree = "<group>"; };
+		1EC4CE3F25CC267600D7304F /* ember-print.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "ember-print.cpp"; path = "../../../app/util/ember-print.cpp"; sourceTree = "<group>"; };
+		1EC4CE4025CC267600D7304F /* process-global-message.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "process-global-message.cpp"; path = "../../../app/util/process-global-message.cpp"; sourceTree = "<group>"; };
+		1EC4CE4125CC267600D7304F /* attribute-size.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "attribute-size.cpp"; path = "../../../app/util/attribute-size.cpp"; sourceTree = "<group>"; };
+		1EC4CE4225CC267600D7304F /* process-cluster-message.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "process-cluster-message.cpp"; path = "../../../app/util/process-cluster-message.cpp"; sourceTree = "<group>"; };
+		1EC4CE4325CC267600D7304F /* client-api.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "client-api.cpp"; path = "../../../app/util/client-api.cpp"; sourceTree = "<group>"; };
+		1EC4CE4425CC267600D7304F /* message.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = message.cpp; path = ../../../app/util/message.cpp; sourceTree = "<group>"; };
+		1EC4CE4625CC267600D7304F /* chip-message-send.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "chip-message-send.cpp"; path = "../../../app/util/chip-message-send.cpp"; sourceTree = "<group>"; };
+		1EC4CE4725CC267600D7304F /* util.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = util.cpp; path = ../../../app/util/util.cpp; sourceTree = "<group>"; };
+		1EC4CE4825CC267600D7304F /* attribute-table.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "attribute-table.cpp"; path = "../../../app/util/attribute-table.cpp"; sourceTree = "<group>"; };
+		1EC4CE4925CC267700D7304F /* af-main-common.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "af-main-common.cpp"; path = "../../../app/util/af-main-common.cpp"; sourceTree = "<group>"; };
+		1EC4CE4A25CC267700D7304F /* attribute-storage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "attribute-storage.cpp"; path = "../../../app/util/attribute-storage.cpp"; sourceTree = "<group>"; };
+		1EC4CE5925CC26E900D7304F /* CHIPClustersObjc.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = CHIPClustersObjc.mm; path = gen/CHIPClustersObjc.mm; sourceTree = "<group>"; };
+		1EC4CE5A25CC26E900D7304F /* call-command-handler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "call-command-handler.cpp"; path = "gen/call-command-handler.cpp"; sourceTree = "<group>"; };
+		1EC4CE5B25CC26E900D7304F /* callback-stub.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "callback-stub.cpp"; path = "gen/callback-stub.cpp"; sourceTree = "<group>"; };
+		1EC4CE5C25CC26E900D7304F /* CHIPClientCallbacks.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CHIPClientCallbacks.cpp; path = gen/CHIPClientCallbacks.cpp; sourceTree = "<group>"; };
+		1EC4CE6125CC271B00D7304F /* af-event.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "af-event.cpp"; path = "../../../app/util/af-event.cpp"; sourceTree = "<group>"; };
+		1EC4CE6325CC276600D7304F /* CHIPClustersObjc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CHIPClustersObjc.h; path = gen/CHIPClustersObjc.h; sourceTree = "<group>"; };
 		2C222ACE255C620600E446B9 /* CHIPDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CHIPDevice.h; sourceTree = "<group>"; };
 		2C222ACF255C620600E446B9 /* CHIPDevice.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = CHIPDevice.mm; sourceTree = "<group>"; };
-		2C222AD8255C74D100E446B9 /* CHIPDeviceStatusDelegateBridge.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = CHIPDeviceStatusDelegateBridge.mm; sourceTree = "<group>"; };
-		2C222AD9255C74D100E446B9 /* CHIPDeviceStatusDelegateBridge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CHIPDeviceStatusDelegateBridge.h; sourceTree = "<group>"; };
-		2C222ADA255C74D100E446B9 /* CHIPDeviceStatusDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CHIPDeviceStatusDelegate.h; sourceTree = "<group>"; };
 		2C222ADE255C811800E446B9 /* CHIPDevice_Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CHIPDevice_Internal.h; sourceTree = "<group>"; };
-		2C222AEC25634E5300E446B9 /* CHIPDeviceCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CHIPDeviceCallback.h; sourceTree = "<group>"; };
-		2C222AEE25646BB100E446B9 /* CHIPCallbackBridge.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = CHIPCallbackBridge.mm; sourceTree = "<group>"; };
-		2C222AEF25646BB100E446B9 /* CHIPCallbackBridge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CHIPCallbackBridge.h; sourceTree = "<group>"; };
 		2C4DF09D248B2C60009307CB /* libmbedtls.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libmbedtls.a; path = lib/libmbedtls.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		2C8C8FBD253E0C2100797F05 /* CHIPPersistentStorageDelegateBridge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CHIPPersistentStorageDelegateBridge.h; sourceTree = "<group>"; };
 		2C8C8FBE253E0C2100797F05 /* CHIPPersistentStorageDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CHIPPersistentStorageDelegate.h; sourceTree = "<group>"; };
@@ -113,6 +139,42 @@
 /* End PBXFrameworksBuildPhase section */
 
 /* Begin PBXGroup section */
+		1EC4CE3525CC259700D7304F /* CHIPApp */ = {
+			isa = PBXGroup;
+			children = (
+				1EC4CE6125CC271B00D7304F /* af-event.cpp */,
+				1EC4CE4925CC267700D7304F /* af-main-common.cpp */,
+				1EC4CE4125CC267600D7304F /* attribute-size.cpp */,
+				1EC4CE4A25CC267700D7304F /* attribute-storage.cpp */,
+				1EC4CE4825CC267600D7304F /* attribute-table.cpp */,
+				1EC4CE3E25CC267600D7304F /* binding-table.cpp */,
+				1EC4CE4625CC267600D7304F /* chip-message-send.cpp */,
+				1EC4CE4325CC267600D7304F /* client-api.cpp */,
+				1EC4CE3F25CC267600D7304F /* ember-print.cpp */,
+				1EC4CE4425CC267600D7304F /* message.cpp */,
+				1EC4CE4225CC267600D7304F /* process-cluster-message.cpp */,
+				1EC4CE4025CC267600D7304F /* process-global-message.cpp */,
+				1EC4CE4725CC267600D7304F /* util.cpp */,
+				1EC4CE3C25CC265200D7304F /* DataModelHandler.cpp */,
+				1EC4CE3925CC263E00D7304F /* reporting-default-configuration.cpp */,
+				1EC4CE3825CC263E00D7304F /* reporting.cpp */,
+			);
+			name = CHIPApp;
+			path = CHIP;
+			sourceTree = SOURCE_ROOT;
+		};
+		1EC4CE5825CC26AB00D7304F /* CHIPGeneratedFiles */ = {
+			isa = PBXGroup;
+			children = (
+				1EC4CE6325CC276600D7304F /* CHIPClustersObjc.h */,
+				1EC4CE5A25CC26E900D7304F /* call-command-handler.cpp */,
+				1EC4CE5B25CC26E900D7304F /* callback-stub.cpp */,
+				1EC4CE5C25CC26E900D7304F /* CHIPClientCallbacks.cpp */,
+				1EC4CE5925CC26E900D7304F /* CHIPClustersObjc.mm */,
+			);
+			name = CHIPGeneratedFiles;
+			sourceTree = "<group>";
+		};
 		B20252832459E34F00F97062 = {
 			isa = PBXGroup;
 			children = (
@@ -136,15 +198,9 @@
 		B202528F2459E34F00F97062 /* CHIP */ = {
 			isa = PBXGroup;
 			children = (
-				1EF8B75525782AAC009AA59C /* CHIPClustersObjc.mm */,
- 				1EF8B75325782A9E009AA59C /* CHIPClustersObjc.h */,
-				2C222AEF25646BB100E446B9 /* CHIPCallbackBridge.h */,
-				2C222AEE25646BB100E446B9 /* CHIPCallbackBridge.mm */,
-				2C222AEC25634E5300E446B9 /* CHIPDeviceCallback.h */,
+				1EC4CE5825CC26AB00D7304F /* CHIPGeneratedFiles */,
+				1EC4CE3525CC259700D7304F /* CHIPApp */,
 				2C222ADE255C811800E446B9 /* CHIPDevice_Internal.h */,
-				2C222ADA255C74D100E446B9 /* CHIPDeviceStatusDelegate.h */,
-				2C222AD9255C74D100E446B9 /* CHIPDeviceStatusDelegateBridge.h */,
-				2C222AD8255C74D100E446B9 /* CHIPDeviceStatusDelegateBridge.mm */,
 				2C222ACE255C620600E446B9 /* CHIPDevice.h */,
 				2C222ACF255C620600E446B9 /* CHIPDevice.mm */,
 				2C8C8FBE253E0C2100797F05 /* CHIPPersistentStorageDelegate.h */,
@@ -201,15 +257,11 @@
 				991DC0842475F45400C13860 /* CHIPDeviceController.h in Headers */,
 				B2E0D7B2245B0B5C003C5B48 /* CHIPManualSetupPayloadParser.h in Headers */,
 				B2E0D7B1245B0B5C003C5B48 /* CHIP.h in Headers */,
-				2C222ADC255C74D100E446B9 /* CHIPDeviceStatusDelegateBridge.h in Headers */,
 				B2E0D7B8245B0B5C003C5B48 /* CHIPSetupPayload.h in Headers */,
-				2C222ADD255C74D100E446B9 /* CHIPDeviceStatusDelegate.h in Headers */,
-				2C222AED25634E5300E446B9 /* CHIPDeviceCallback.h in Headers */,
 				2C8C8FC1253E0C2100797F05 /* CHIPPersistentStorageDelegate.h in Headers */,
 				B2E0D7B5245B0B5C003C5B48 /* CHIPQRCodeSetupPayloadParser.h in Headers */,
-				2C222AF125646BB100E446B9 /* CHIPCallbackBridge.h in Headers */,
+				1EC4CE6425CC276600D7304F /* CHIPClustersObjc.h in Headers */,
 				2C8C8FC0253E0C2100797F05 /* CHIPPersistentStorageDelegateBridge.h in Headers */,
-				1EF8B75425782A9E009AA59C /* CHIPClustersObjc.h in Headers */,
 				2C222ADF255C811800E446B9 /* CHIPDevice_Internal.h in Headers */,
 				991DC08B247704DC00C13860 /* CHIPLogging.h in Headers */,
 				B2E0D7B4245B0B5C003C5B48 /* CHIPError.h in Headers */,
@@ -337,16 +389,33 @@
 			buildActionMask = 2147483647;
 			files = (
 				2C8C8FC2253E0C2100797F05 /* CHIPPersistentStorageDelegateBridge.mm in Sources */,
+				1EC4CE5025CC267700D7304F /* client-api.cpp in Sources */,
 				2CB7163C252E8A7C0026E2BB /* CHIPDevicePairingDelegateBridge.mm in Sources */,
+				1EC4CE5625CC267700D7304F /* af-main-common.cpp in Sources */,
+				1EC4CE5425CC267700D7304F /* util.cpp in Sources */,
 				2C222AD1255C620600E446B9 /* CHIPDevice.mm in Sources */,
+				1EC4CE4C25CC267700D7304F /* ember-print.cpp in Sources */,
 				991DC0892475F47D00C13860 /* CHIPDeviceController.mm in Sources */,
-				2C222AF025646BB100E446B9 /* CHIPCallbackBridge.mm in Sources */,
-				1EF8B75625782AAC009AA59C /* CHIPClustersObjc.mm in Sources */,
+				1EC4CE3A25CC263E00D7304F /* reporting.cpp in Sources */,
+				1EC4CE5325CC267700D7304F /* chip-message-send.cpp in Sources */,
 				B2E0D7B7245B0B5C003C5B48 /* CHIPQRCodeSetupPayloadParser.mm in Sources */,
+				1EC4CE5F25CC26E900D7304F /* callback-stub.cpp in Sources */,
+				1EC4CE4B25CC267700D7304F /* binding-table.cpp in Sources */,
+				1EC4CE6225CC271B00D7304F /* af-event.cpp in Sources */,
+				1EC4CE4E25CC267700D7304F /* attribute-size.cpp in Sources */,
+				1EC4CE4D25CC267700D7304F /* process-global-message.cpp in Sources */,
+				1EC4CE5125CC267700D7304F /* message.cpp in Sources */,
+				1EC4CE5D25CC26E900D7304F /* CHIPClustersObjc.mm in Sources */,
 				B2E0D7B3245B0B5C003C5B48 /* CHIPError.mm in Sources */,
-				2C222ADB255C74D100E446B9 /* CHIPDeviceStatusDelegateBridge.mm in Sources */,
+				1EC4CE5E25CC26E900D7304F /* call-command-handler.cpp in Sources */,
+				1EC4CE3B25CC263E00D7304F /* reporting-default-configuration.cpp in Sources */,
+				1EC4CE4F25CC267700D7304F /* process-cluster-message.cpp in Sources */,
+				1EC4CE3D25CC265200D7304F /* DataModelHandler.cpp in Sources */,
+				1EC4CE5725CC267700D7304F /* attribute-storage.cpp in Sources */,
+				1EC4CE5525CC267700D7304F /* attribute-table.cpp in Sources */,
 				B2E0D7B9245B0B5C003C5B48 /* CHIPSetupPayload.mm in Sources */,
 				B2E0D7B6245B0B5C003C5B48 /* CHIPManualSetupPayloadParser.mm in Sources */,
+				1EC4CE6025CC26E900D7304F /* CHIPClientCallbacks.cpp in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -464,6 +533,9 @@
 					"$(CHIP_ROOT)/src/app",
 					"$(CHIP_ROOT)/config/ios",
 					"$(CHIP_ROOT)/third_party/nlassert/repo/include",
+					"$(CHIP_ROOT)/src/darwin/Framework/CHIP/",
+					"$(CHIP_ROOT)/src/app/util",
+					"$(CHIP_ROOT)/third_party/nlio/repo/include",
 				);
 				INFOPLIST_FILE = CHIP/Info.plist;
 				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
@@ -590,6 +662,7 @@
 					"$(CHIP_ROOT)/src/app",
 					"$(CHIP_ROOT)/config/ios",
 					"$(CHIP_ROOT)/third_party/nlassert/repo/include",
+					.,
 				);
 				INFOPLIST_FILE = CHIP/Info.plist;
 				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
diff --git a/src/darwin/Framework/CHIP/CHIP.h b/src/darwin/Framework/CHIP/CHIP.h
index 3a8126a..25b9e37 100644
--- a/src/darwin/Framework/CHIP/CHIP.h
+++ b/src/darwin/Framework/CHIP/CHIP.h
@@ -18,7 +18,6 @@
 // pull together CHIP headers
 #import <CHIP/CHIPClustersObjc.h>
 #import <CHIP/CHIPDevice.h>
-#import <CHIP/CHIPDeviceCallback.h>
 #import <CHIP/CHIPDeviceController.h>
 #import <CHIP/CHIPDevicePairingDelegate.h>
 #import <CHIP/CHIPError.h>
diff --git a/src/darwin/Framework/CHIP/CHIPCallbackBridge.h b/src/darwin/Framework/CHIP/CHIPCallbackBridge.h
deleted file mode 100644
index 1b1f1a4..0000000
--- a/src/darwin/Framework/CHIP/CHIPCallbackBridge.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- *
- *    Copyright (c) 2020 Project CHIP Authors
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-#import "CHIPDeviceCallback.h"
-#import "CHIPError.h"
-
-#include <controller/CHIPDevice.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-class CHIPCallbackBridge : public chip::Callback::Callback<>
-{
-public:
-    CHIPCallbackBridge(CHIPDeviceCallback handler, dispatch_queue_t queue);
-    ~CHIPCallbackBridge();
-
-    static void CallbackFn(void * context);
-
-private:
-    CHIPDeviceCallback mHandler;
-    dispatch_queue_t mQueue;
-};
-
-NS_ASSUME_NONNULL_END
diff --git a/src/darwin/Framework/CHIP/CHIPCallbackBridge.mm b/src/darwin/Framework/CHIP/CHIPCallbackBridge.mm
deleted file mode 100644
index f78c697..0000000
--- a/src/darwin/Framework/CHIP/CHIPCallbackBridge.mm
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- *
- *    Copyright (c) 2020 Project CHIP Authors
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-
-#import "CHIPCallbackBridge.h"
-#import "CHIPError.h"
-#import <Foundation/Foundation.h>
-
-CHIPCallbackBridge::CHIPCallbackBridge(CHIPDeviceCallback handler, dispatch_queue_t queue)
-    : Callback::Callback<>(CallbackFn, this)
-    , mHandler(handler)
-    , mQueue(queue)
-{
-}
-
-CHIPCallbackBridge::~CHIPCallbackBridge() {}
-
-void CHIPCallbackBridge::CallbackFn(void * context)
-{
-    CHIPCallbackBridge * callback = reinterpret_cast<CHIPCallbackBridge *>(context);
-    if (callback && callback->mQueue) {
-        dispatch_async(callback->mQueue, ^{
-            callback->mHandler([CHIPError errorForCHIPErrorCode:CHIP_NO_ERROR]);
-            callback->Cancel();
-            delete callback;
-        });
-    }
-}
diff --git a/src/darwin/Framework/CHIP/CHIPClustersObjc.h b/src/darwin/Framework/CHIP/CHIPClustersObjc.h
deleted file mode 100644
index 75ad6a6..0000000
--- a/src/darwin/Framework/CHIP/CHIPClustersObjc.h
+++ /dev/null
@@ -1,531 +0,0 @@
-/*
- *
- *    Copyright (c) 2021 Project CHIP Authors
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-
-// THIS FILE IS GENERATED BY ZAP
-
-#ifndef CHIP_CLUSTERS_H
-#define CHIP_CLUSTERS_H
-
-#import <CHIP/CHIPDeviceCallback.h>
-#import <Foundation/Foundation.h>
-
-@class CHIPDevice;
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface CHIPBarrierControl : NSObject
-
-- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
-- (BOOL)barrierControlGoToPercent:(CHIPDeviceCallback)onCompletion percentOpen:(uint8_t)percentOpen;
-- (BOOL)barrierControlStop:(CHIPDeviceCallback)onCompletion;
-
-- (BOOL)readAttributeBarrierMovingState:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributeBarrierSafetyStatus:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributeBarrierCapabilities:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributeBarrierPosition:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributeClusterRevision:(CHIPDeviceCallback)onCompletion;
-
-- (instancetype)init NS_UNAVAILABLE;
-+ (instancetype)new NS_UNAVAILABLE;
-
-@end
-
-NS_ASSUME_NONNULL_END
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface CHIPBasic : NSObject
-
-- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
-- (BOOL)mfgSpecificPing:(CHIPDeviceCallback)onCompletion;
-- (BOOL)resetToFactoryDefaults:(CHIPDeviceCallback)onCompletion;
-
-- (BOOL)readAttributeZclVersion:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributePowerSource:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributeClusterRevision:(CHIPDeviceCallback)onCompletion;
-
-- (instancetype)init NS_UNAVAILABLE;
-+ (instancetype)new NS_UNAVAILABLE;
-
-@end
-
-NS_ASSUME_NONNULL_END
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface CHIPBinding : NSObject
-
-- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
-- (BOOL)bind:(CHIPDeviceCallback)onCompletion
-        nodeId:(uint64_t)nodeId
-       groupId:(uint16_t)groupId
-    endpointId:(uint8_t)endpointId
-     clusterId:(uint16_t)clusterId;
-- (BOOL)unbind:(CHIPDeviceCallback)onCompletion
-        nodeId:(uint64_t)nodeId
-       groupId:(uint16_t)groupId
-    endpointId:(uint8_t)endpointId
-     clusterId:(uint16_t)clusterId;
-
-- (BOOL)readAttributeClusterRevision:(CHIPDeviceCallback)onCompletion;
-
-- (instancetype)init NS_UNAVAILABLE;
-+ (instancetype)new NS_UNAVAILABLE;
-
-@end
-
-NS_ASSUME_NONNULL_END
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface CHIPColorControl : NSObject
-
-- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
-- (BOOL)moveColor:(CHIPDeviceCallback)onCompletion
-              rateX:(int16_t)rateX
-              rateY:(int16_t)rateY
-        optionsMask:(uint8_t)optionsMask
-    optionsOverride:(uint8_t)optionsOverride;
-- (BOOL)moveColorTemperature:(CHIPDeviceCallback)onCompletion
-                    moveMode:(uint8_t)moveMode
-                        rate:(uint16_t)rate
-     colorTemperatureMinimum:(uint16_t)colorTemperatureMinimum
-     colorTemperatureMaximum:(uint16_t)colorTemperatureMaximum
-                 optionsMask:(uint8_t)optionsMask
-             optionsOverride:(uint8_t)optionsOverride;
-- (BOOL)moveHue:(CHIPDeviceCallback)onCompletion
-           moveMode:(uint8_t)moveMode
-               rate:(uint8_t)rate
-        optionsMask:(uint8_t)optionsMask
-    optionsOverride:(uint8_t)optionsOverride;
-- (BOOL)moveSaturation:(CHIPDeviceCallback)onCompletion
-              moveMode:(uint8_t)moveMode
-                  rate:(uint8_t)rate
-           optionsMask:(uint8_t)optionsMask
-       optionsOverride:(uint8_t)optionsOverride;
-- (BOOL)moveToColor:(CHIPDeviceCallback)onCompletion
-             colorX:(uint16_t)colorX
-             colorY:(uint16_t)colorY
-     transitionTime:(uint16_t)transitionTime
-        optionsMask:(uint8_t)optionsMask
-    optionsOverride:(uint8_t)optionsOverride;
-- (BOOL)moveToColorTemperature:(CHIPDeviceCallback)onCompletion
-              colorTemperature:(uint16_t)colorTemperature
-                transitionTime:(uint16_t)transitionTime
-                   optionsMask:(uint8_t)optionsMask
-               optionsOverride:(uint8_t)optionsOverride;
-- (BOOL)moveToHue:(CHIPDeviceCallback)onCompletion
-                hue:(uint8_t)hue
-          direction:(uint8_t)direction
-     transitionTime:(uint16_t)transitionTime
-        optionsMask:(uint8_t)optionsMask
-    optionsOverride:(uint8_t)optionsOverride;
-- (BOOL)moveToHueAndSaturation:(CHIPDeviceCallback)onCompletion
-                           hue:(uint8_t)hue
-                    saturation:(uint8_t)saturation
-                transitionTime:(uint16_t)transitionTime
-                   optionsMask:(uint8_t)optionsMask
-               optionsOverride:(uint8_t)optionsOverride;
-- (BOOL)moveToSaturation:(CHIPDeviceCallback)onCompletion
-              saturation:(uint8_t)saturation
-          transitionTime:(uint16_t)transitionTime
-             optionsMask:(uint8_t)optionsMask
-         optionsOverride:(uint8_t)optionsOverride;
-- (BOOL)stepColor:(CHIPDeviceCallback)onCompletion
-              stepX:(int16_t)stepX
-              stepY:(int16_t)stepY
-     transitionTime:(uint16_t)transitionTime
-        optionsMask:(uint8_t)optionsMask
-    optionsOverride:(uint8_t)optionsOverride;
-- (BOOL)stepColorTemperature:(CHIPDeviceCallback)onCompletion
-                    stepMode:(uint8_t)stepMode
-                    stepSize:(uint16_t)stepSize
-              transitionTime:(uint16_t)transitionTime
-     colorTemperatureMinimum:(uint16_t)colorTemperatureMinimum
-     colorTemperatureMaximum:(uint16_t)colorTemperatureMaximum
-                 optionsMask:(uint8_t)optionsMask
-             optionsOverride:(uint8_t)optionsOverride;
-- (BOOL)stepHue:(CHIPDeviceCallback)onCompletion
-           stepMode:(uint8_t)stepMode
-           stepSize:(uint8_t)stepSize
-     transitionTime:(uint8_t)transitionTime
-        optionsMask:(uint8_t)optionsMask
-    optionsOverride:(uint8_t)optionsOverride;
-- (BOOL)stepSaturation:(CHIPDeviceCallback)onCompletion
-              stepMode:(uint8_t)stepMode
-              stepSize:(uint8_t)stepSize
-        transitionTime:(uint8_t)transitionTime
-           optionsMask:(uint8_t)optionsMask
-       optionsOverride:(uint8_t)optionsOverride;
-- (BOOL)stopMoveStep:(CHIPDeviceCallback)onCompletion optionsMask:(uint8_t)optionsMask optionsOverride:(uint8_t)optionsOverride;
-
-- (BOOL)readAttributeCurrentHue:(CHIPDeviceCallback)onCompletion;
-- (BOOL)reportAttributeCurrentHue:(CHIPDeviceCallback)onCompletion
-                         onChange:(CHIPDeviceCallback)onChange
-                      minInterval:(uint16_t)minInterval
-                      maxInterval:(uint16_t)maxInterval
-                           change:(uint8_t)change;
-- (BOOL)readAttributeCurrentSaturation:(CHIPDeviceCallback)onCompletion;
-- (BOOL)reportAttributeCurrentSaturation:(CHIPDeviceCallback)onCompletion
-                                onChange:(CHIPDeviceCallback)onChange
-                             minInterval:(uint16_t)minInterval
-                             maxInterval:(uint16_t)maxInterval
-                                  change:(uint8_t)change;
-- (BOOL)readAttributeRemainingTime:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributeCurrentX:(CHIPDeviceCallback)onCompletion;
-- (BOOL)reportAttributeCurrentX:(CHIPDeviceCallback)onCompletion
-                       onChange:(CHIPDeviceCallback)onChange
-                    minInterval:(uint16_t)minInterval
-                    maxInterval:(uint16_t)maxInterval
-                         change:(uint16_t)change;
-- (BOOL)readAttributeCurrentY:(CHIPDeviceCallback)onCompletion;
-- (BOOL)reportAttributeCurrentY:(CHIPDeviceCallback)onCompletion
-                       onChange:(CHIPDeviceCallback)onChange
-                    minInterval:(uint16_t)minInterval
-                    maxInterval:(uint16_t)maxInterval
-                         change:(uint16_t)change;
-- (BOOL)readAttributeDriftCompensation:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributeCompensationText:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributeColorTemperature:(CHIPDeviceCallback)onCompletion;
-- (BOOL)reportAttributeColorTemperature:(CHIPDeviceCallback)onCompletion
-                               onChange:(CHIPDeviceCallback)onChange
-                            minInterval:(uint16_t)minInterval
-                            maxInterval:(uint16_t)maxInterval
-                                 change:(uint16_t)change;
-- (BOOL)readAttributeColorMode:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributeColorControlOptions:(CHIPDeviceCallback)onCompletion;
-- (BOOL)writeAttributeColorControlOptions:(CHIPDeviceCallback)onCompletion value:(uint8_t)value;
-- (BOOL)readAttributeNumberOfPrimaries:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributePrimary1X:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributePrimary1Y:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributePrimary1Intensity:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributePrimary2X:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributePrimary2Y:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributePrimary2Intensity:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributePrimary3X:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributePrimary3Y:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributePrimary3Intensity:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributePrimary4X:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributePrimary4Y:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributePrimary4Intensity:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributePrimary5X:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributePrimary5Y:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributePrimary5Intensity:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributePrimary6X:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributePrimary6Y:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributePrimary6Intensity:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributeWhitePointX:(CHIPDeviceCallback)onCompletion;
-- (BOOL)writeAttributeWhitePointX:(CHIPDeviceCallback)onCompletion value:(uint16_t)value;
-- (BOOL)readAttributeWhitePointY:(CHIPDeviceCallback)onCompletion;
-- (BOOL)writeAttributeWhitePointY:(CHIPDeviceCallback)onCompletion value:(uint16_t)value;
-- (BOOL)readAttributeColorPointRX:(CHIPDeviceCallback)onCompletion;
-- (BOOL)writeAttributeColorPointRX:(CHIPDeviceCallback)onCompletion value:(uint16_t)value;
-- (BOOL)readAttributeColorPointRY:(CHIPDeviceCallback)onCompletion;
-- (BOOL)writeAttributeColorPointRY:(CHIPDeviceCallback)onCompletion value:(uint16_t)value;
-- (BOOL)readAttributeColorPointRIntensity:(CHIPDeviceCallback)onCompletion;
-- (BOOL)writeAttributeColorPointRIntensity:(CHIPDeviceCallback)onCompletion value:(uint8_t)value;
-- (BOOL)readAttributeColorPointGX:(CHIPDeviceCallback)onCompletion;
-- (BOOL)writeAttributeColorPointGX:(CHIPDeviceCallback)onCompletion value:(uint16_t)value;
-- (BOOL)readAttributeColorPointGY:(CHIPDeviceCallback)onCompletion;
-- (BOOL)writeAttributeColorPointGY:(CHIPDeviceCallback)onCompletion value:(uint16_t)value;
-- (BOOL)readAttributeColorPointGIntensity:(CHIPDeviceCallback)onCompletion;
-- (BOOL)writeAttributeColorPointGIntensity:(CHIPDeviceCallback)onCompletion value:(uint8_t)value;
-- (BOOL)readAttributeColorPointBX:(CHIPDeviceCallback)onCompletion;
-- (BOOL)writeAttributeColorPointBX:(CHIPDeviceCallback)onCompletion value:(uint16_t)value;
-- (BOOL)readAttributeColorPointBY:(CHIPDeviceCallback)onCompletion;
-- (BOOL)writeAttributeColorPointBY:(CHIPDeviceCallback)onCompletion value:(uint16_t)value;
-- (BOOL)readAttributeColorPointBIntensity:(CHIPDeviceCallback)onCompletion;
-- (BOOL)writeAttributeColorPointBIntensity:(CHIPDeviceCallback)onCompletion value:(uint8_t)value;
-- (BOOL)readAttributeEnhancedCurrentHue:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributeEnhancedColorMode:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributeColorLoopActive:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributeColorLoopDirection:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributeColorLoopTime:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributeColorCapabilities:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributeColorTempPhysicalMin:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributeColorTempPhysicalMax:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributeCoupleColorTempToLevelMinMireds:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributeStartUpColorTemperatureMireds:(CHIPDeviceCallback)onCompletion;
-- (BOOL)writeAttributeStartUpColorTemperatureMireds:(CHIPDeviceCallback)onCompletion value:(uint16_t)value;
-- (BOOL)readAttributeClusterRevision:(CHIPDeviceCallback)onCompletion;
-
-- (instancetype)init NS_UNAVAILABLE;
-+ (instancetype)new NS_UNAVAILABLE;
-
-@end
-
-NS_ASSUME_NONNULL_END
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface CHIPDoorLock : NSObject
-
-- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
-- (BOOL)clearAllPins:(CHIPDeviceCallback)onCompletion;
-- (BOOL)clearAllRfids:(CHIPDeviceCallback)onCompletion;
-- (BOOL)clearHolidaySchedule:(CHIPDeviceCallback)onCompletion scheduleId:(uint8_t)scheduleId;
-- (BOOL)clearPin:(CHIPDeviceCallback)onCompletion userId:(uint16_t)userId;
-- (BOOL)clearRfid:(CHIPDeviceCallback)onCompletion userId:(uint16_t)userId;
-- (BOOL)clearWeekdaySchedule:(CHIPDeviceCallback)onCompletion scheduleId:(uint8_t)scheduleId userId:(uint16_t)userId;
-- (BOOL)clearYeardaySchedule:(CHIPDeviceCallback)onCompletion scheduleId:(uint8_t)scheduleId userId:(uint16_t)userId;
-- (BOOL)getHolidaySchedule:(CHIPDeviceCallback)onCompletion scheduleId:(uint8_t)scheduleId;
-- (BOOL)getLogRecord:(CHIPDeviceCallback)onCompletion logIndex:(uint16_t)logIndex;
-- (BOOL)getPin:(CHIPDeviceCallback)onCompletion userId:(uint16_t)userId;
-- (BOOL)getRfid:(CHIPDeviceCallback)onCompletion userId:(uint16_t)userId;
-- (BOOL)getUserType:(CHIPDeviceCallback)onCompletion userId:(uint16_t)userId;
-- (BOOL)getWeekdaySchedule:(CHIPDeviceCallback)onCompletion scheduleId:(uint8_t)scheduleId userId:(uint16_t)userId;
-- (BOOL)getYeardaySchedule:(CHIPDeviceCallback)onCompletion scheduleId:(uint8_t)scheduleId userId:(uint16_t)userId;
-- (BOOL)lockDoor:(CHIPDeviceCallback)onCompletion pin:(char *)pin;
-- (BOOL)setHolidaySchedule:(CHIPDeviceCallback)onCompletion
-                    scheduleId:(uint8_t)scheduleId
-                localStartTime:(uint32_t)localStartTime
-                  localEndTime:(uint32_t)localEndTime
-    operatingModeDuringHoliday:(uint8_t)operatingModeDuringHoliday;
-- (BOOL)setPin:(CHIPDeviceCallback)onCompletion
-        userId:(uint16_t)userId
-    userStatus:(uint8_t)userStatus
-      userType:(uint8_t)userType
-           pin:(char *)pin;
-- (BOOL)setRfid:(CHIPDeviceCallback)onCompletion
-         userId:(uint16_t)userId
-     userStatus:(uint8_t)userStatus
-       userType:(uint8_t)userType
-             id:(char *)id;
-- (BOOL)setUserType:(CHIPDeviceCallback)onCompletion userId:(uint16_t)userId userType:(uint8_t)userType;
-- (BOOL)setWeekdaySchedule:(CHIPDeviceCallback)onCompletion
-                scheduleId:(uint8_t)scheduleId
-                    userId:(uint16_t)userId
-                  daysMask:(uint8_t)daysMask
-                 startHour:(uint8_t)startHour
-               startMinute:(uint8_t)startMinute
-                   endHour:(uint8_t)endHour
-                 endMinute:(uint8_t)endMinute;
-- (BOOL)setYeardaySchedule:(CHIPDeviceCallback)onCompletion
-                scheduleId:(uint8_t)scheduleId
-                    userId:(uint16_t)userId
-            localStartTime:(uint32_t)localStartTime
-              localEndTime:(uint32_t)localEndTime;
-- (BOOL)unlockDoor:(CHIPDeviceCallback)onCompletion pin:(char *)pin;
-- (BOOL)unlockWithTimeout:(CHIPDeviceCallback)onCompletion timeoutInSeconds:(uint16_t)timeoutInSeconds pin:(char *)pin;
-
-- (BOOL)readAttributeLockState:(CHIPDeviceCallback)onCompletion;
-- (BOOL)reportAttributeLockState:(CHIPDeviceCallback)onCompletion
-                        onChange:(CHIPDeviceCallback)onChange
-                     minInterval:(uint16_t)minInterval
-                     maxInterval:(uint16_t)maxInterval;
-- (BOOL)readAttributeLockType:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributeActuatorEnabled:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributeClusterRevision:(CHIPDeviceCallback)onCompletion;
-
-- (instancetype)init NS_UNAVAILABLE;
-+ (instancetype)new NS_UNAVAILABLE;
-
-@end
-
-NS_ASSUME_NONNULL_END
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface CHIPGroups : NSObject
-
-- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
-- (BOOL)addGroup:(CHIPDeviceCallback)onCompletion groupId:(uint16_t)groupId groupName:(char *)groupName;
-- (BOOL)addGroupIfIdentifying:(CHIPDeviceCallback)onCompletion groupId:(uint16_t)groupId groupName:(char *)groupName;
-- (BOOL)getGroupMembership:(CHIPDeviceCallback)onCompletion groupCount:(uint8_t)groupCount groupList:(uint16_t)groupList;
-- (BOOL)removeAllGroups:(CHIPDeviceCallback)onCompletion;
-- (BOOL)removeGroup:(CHIPDeviceCallback)onCompletion groupId:(uint16_t)groupId;
-- (BOOL)viewGroup:(CHIPDeviceCallback)onCompletion groupId:(uint16_t)groupId;
-
-- (BOOL)readAttributeNameSupport:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributeClusterRevision:(CHIPDeviceCallback)onCompletion;
-
-- (instancetype)init NS_UNAVAILABLE;
-+ (instancetype)new NS_UNAVAILABLE;
-
-@end
-
-NS_ASSUME_NONNULL_END
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface CHIPIasZone : NSObject
-
-- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
-
-- (BOOL)readAttributeZoneState:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributeZoneType:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributeZoneStatus:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributeIasCieAddress:(CHIPDeviceCallback)onCompletion;
-- (BOOL)writeAttributeIasCieAddress:(CHIPDeviceCallback)onCompletion value:(uint64_t)value;
-- (BOOL)readAttributeZoneId:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributeClusterRevision:(CHIPDeviceCallback)onCompletion;
-
-- (instancetype)init NS_UNAVAILABLE;
-+ (instancetype)new NS_UNAVAILABLE;
-
-@end
-
-NS_ASSUME_NONNULL_END
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface CHIPIdentify : NSObject
-
-- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
-- (BOOL)identify:(CHIPDeviceCallback)onCompletion identifyTime:(uint16_t)identifyTime;
-- (BOOL)identifyQuery:(CHIPDeviceCallback)onCompletion;
-
-- (BOOL)readAttributeIdentifyTime:(CHIPDeviceCallback)onCompletion;
-- (BOOL)writeAttributeIdentifyTime:(CHIPDeviceCallback)onCompletion value:(uint16_t)value;
-- (BOOL)readAttributeClusterRevision:(CHIPDeviceCallback)onCompletion;
-
-- (instancetype)init NS_UNAVAILABLE;
-+ (instancetype)new NS_UNAVAILABLE;
-
-@end
-
-NS_ASSUME_NONNULL_END
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface CHIPLevelControl : NSObject
-
-- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
-- (BOOL)move:(CHIPDeviceCallback)onCompletion
-          moveMode:(uint8_t)moveMode
-              rate:(uint8_t)rate
-        optionMask:(uint8_t)optionMask
-    optionOverride:(uint8_t)optionOverride;
-- (BOOL)moveToLevel:(CHIPDeviceCallback)onCompletion
-              level:(uint8_t)level
-     transitionTime:(uint16_t)transitionTime
-         optionMask:(uint8_t)optionMask
-     optionOverride:(uint8_t)optionOverride;
-- (BOOL)moveToLevelWithOnOff:(CHIPDeviceCallback)onCompletion level:(uint8_t)level transitionTime:(uint16_t)transitionTime;
-- (BOOL)moveWithOnOff:(CHIPDeviceCallback)onCompletion moveMode:(uint8_t)moveMode rate:(uint8_t)rate;
-- (BOOL)step:(CHIPDeviceCallback)onCompletion
-          stepMode:(uint8_t)stepMode
-          stepSize:(uint8_t)stepSize
-    transitionTime:(uint16_t)transitionTime
-        optionMask:(uint8_t)optionMask
-    optionOverride:(uint8_t)optionOverride;
-- (BOOL)stepWithOnOff:(CHIPDeviceCallback)onCompletion
-             stepMode:(uint8_t)stepMode
-             stepSize:(uint8_t)stepSize
-       transitionTime:(uint16_t)transitionTime;
-- (BOOL)stop:(CHIPDeviceCallback)onCompletion optionMask:(uint8_t)optionMask optionOverride:(uint8_t)optionOverride;
-- (BOOL)stopWithOnOff:(CHIPDeviceCallback)onCompletion;
-
-- (BOOL)readAttributeCurrentLevel:(CHIPDeviceCallback)onCompletion;
-- (BOOL)reportAttributeCurrentLevel:(CHIPDeviceCallback)onCompletion
-                           onChange:(CHIPDeviceCallback)onChange
-                        minInterval:(uint16_t)minInterval
-                        maxInterval:(uint16_t)maxInterval
-                             change:(uint8_t)change;
-- (BOOL)readAttributeClusterRevision:(CHIPDeviceCallback)onCompletion;
-
-- (instancetype)init NS_UNAVAILABLE;
-+ (instancetype)new NS_UNAVAILABLE;
-
-@end
-
-NS_ASSUME_NONNULL_END
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface CHIPOnOff : NSObject
-
-- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
-- (BOOL)off:(CHIPDeviceCallback)onCompletion;
-- (BOOL)on:(CHIPDeviceCallback)onCompletion;
-- (BOOL)toggle:(CHIPDeviceCallback)onCompletion;
-
-- (BOOL)readAttributeOnOff:(CHIPDeviceCallback)onCompletion;
-- (BOOL)reportAttributeOnOff:(CHIPDeviceCallback)onCompletion
-                    onChange:(CHIPDeviceCallback)onChange
-                 minInterval:(uint16_t)minInterval
-                 maxInterval:(uint16_t)maxInterval;
-- (BOOL)readAttributeClusterRevision:(CHIPDeviceCallback)onCompletion;
-
-- (instancetype)init NS_UNAVAILABLE;
-+ (instancetype)new NS_UNAVAILABLE;
-
-@end
-
-NS_ASSUME_NONNULL_END
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface CHIPScenes : NSObject
-
-- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
-- (BOOL)addScene:(CHIPDeviceCallback)onCompletion
-           groupId:(uint16_t)groupId
-           sceneId:(uint8_t)sceneId
-    transitionTime:(uint16_t)transitionTime
-         sceneName:(char *)sceneName
-         clusterId:(uint16_t)clusterId
-            length:(uint8_t)length
-             value:(uint8_t)value;
-- (BOOL)getSceneMembership:(CHIPDeviceCallback)onCompletion groupId:(uint16_t)groupId;
-- (BOOL)recallScene:(CHIPDeviceCallback)onCompletion
-            groupId:(uint16_t)groupId
-            sceneId:(uint8_t)sceneId
-     transitionTime:(uint16_t)transitionTime;
-- (BOOL)removeAllScenes:(CHIPDeviceCallback)onCompletion groupId:(uint16_t)groupId;
-- (BOOL)removeScene:(CHIPDeviceCallback)onCompletion groupId:(uint16_t)groupId sceneId:(uint8_t)sceneId;
-- (BOOL)storeScene:(CHIPDeviceCallback)onCompletion groupId:(uint16_t)groupId sceneId:(uint8_t)sceneId;
-- (BOOL)viewScene:(CHIPDeviceCallback)onCompletion groupId:(uint16_t)groupId sceneId:(uint8_t)sceneId;
-
-- (BOOL)readAttributeSceneCount:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributeCurrentScene:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributeCurrentGroup:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributeSceneValid:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributeNameSupport:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributeClusterRevision:(CHIPDeviceCallback)onCompletion;
-
-- (instancetype)init NS_UNAVAILABLE;
-+ (instancetype)new NS_UNAVAILABLE;
-
-@end
-
-NS_ASSUME_NONNULL_END
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface CHIPTemperatureMeasurement : NSObject
-
-- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
-
-- (BOOL)readAttributeMeasuredValue:(CHIPDeviceCallback)onCompletion;
-- (BOOL)reportAttributeMeasuredValue:(CHIPDeviceCallback)onCompletion
-                            onChange:(CHIPDeviceCallback)onChange
-                         minInterval:(uint16_t)minInterval
-                         maxInterval:(uint16_t)maxInterval
-                              change:(int16_t)change;
-- (BOOL)readAttributeMinMeasuredValue:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributeMaxMeasuredValue:(CHIPDeviceCallback)onCompletion;
-- (BOOL)readAttributeClusterRevision:(CHIPDeviceCallback)onCompletion;
-
-- (instancetype)init NS_UNAVAILABLE;
-+ (instancetype)new NS_UNAVAILABLE;
-
-@end
-
-NS_ASSUME_NONNULL_END
-
-#endif /* CHIP_CLUSTERS_H */
diff --git a/src/darwin/Framework/CHIP/CHIPClustersObjc.mm b/src/darwin/Framework/CHIP/CHIPClustersObjc.mm
deleted file mode 100644
index bfd56f0..0000000
--- a/src/darwin/Framework/CHIP/CHIPClustersObjc.mm
+++ /dev/null
@@ -1,3380 +0,0 @@
-/*
- *
- *    Copyright (c) 2021 Project CHIP Authors
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-
-// THIS FILE IS GENERATED BY ZAP
-
-#import <Foundation/Foundation.h>
-
-#import "CHIPCallbackBridge.h"
-#import "CHIPClustersObjc.h"
-#import "CHIPDevice.h"
-#import "CHIPDevice_Internal.h"
-
-#include <controller/CHIPClusters.h>
-
-@interface CHIPBarrierControl ()
-
-@property (readonly) chip::Controller::BarrierControlCluster cppCluster;
-@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
-@end
-
-@implementation CHIPBarrierControl
-
-- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(chip::EndpointId)endpoint queue:(dispatch_queue_t)queue
-{
-    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
-
-    if (err != CHIP_NO_ERROR) {
-        return nil;
-    }
-
-    if (self = [super init]) {
-        _callbackQueue = queue;
-    }
-    return self;
-}
-
-- (BOOL)barrierControlGoToPercent:(CHIPDeviceCallback)onCompletion percentOpen:(uint8_t)percentOpen
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.BarrierControlGoToPercent(callback, percentOpen);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)barrierControlStop:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.BarrierControlStop(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeBarrierMovingState:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeBarrierMovingState(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeBarrierSafetyStatus:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeBarrierSafetyStatus(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeBarrierCapabilities:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeBarrierCapabilities(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeBarrierPosition:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeBarrierPosition(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeClusterRevision:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-@end
-
-@interface CHIPBasic ()
-
-@property (readonly) chip::Controller::BasicCluster cppCluster;
-@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
-@end
-
-@implementation CHIPBasic
-
-- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(chip::EndpointId)endpoint queue:(dispatch_queue_t)queue
-{
-    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
-
-    if (err != CHIP_NO_ERROR) {
-        return nil;
-    }
-
-    if (self = [super init]) {
-        _callbackQueue = queue;
-    }
-    return self;
-}
-
-- (BOOL)mfgSpecificPing:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.MfgSpecificPing(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)resetToFactoryDefaults:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ResetToFactoryDefaults(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeZclVersion:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeZclVersion(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributePowerSource:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributePowerSource(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeClusterRevision:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-@end
-
-@interface CHIPBinding ()
-
-@property (readonly) chip::Controller::BindingCluster cppCluster;
-@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
-@end
-
-@implementation CHIPBinding
-
-- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(chip::EndpointId)endpoint queue:(dispatch_queue_t)queue
-{
-    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
-
-    if (err != CHIP_NO_ERROR) {
-        return nil;
-    }
-
-    if (self = [super init]) {
-        _callbackQueue = queue;
-    }
-    return self;
-}
-
-- (BOOL)bind:(CHIPDeviceCallback)onCompletion
-        nodeId:(chip::NodeId)nodeId
-       groupId:(chip::GroupId)groupId
-    endpointId:(chip::EndpointId)endpointId
-     clusterId:(chip::ClusterId)clusterId
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.Bind(callback, nodeId, groupId, endpointId, clusterId);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)unbind:(CHIPDeviceCallback)onCompletion
-        nodeId:(chip::NodeId)nodeId
-       groupId:(chip::GroupId)groupId
-    endpointId:(chip::EndpointId)endpointId
-     clusterId:(chip::ClusterId)clusterId
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.Unbind(callback, nodeId, groupId, endpointId, clusterId);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeClusterRevision:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-@end
-
-@interface CHIPColorControl ()
-
-@property (readonly) chip::Controller::ColorControlCluster cppCluster;
-@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
-@end
-
-@implementation CHIPColorControl
-
-- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(chip::EndpointId)endpoint queue:(dispatch_queue_t)queue
-{
-    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
-
-    if (err != CHIP_NO_ERROR) {
-        return nil;
-    }
-
-    if (self = [super init]) {
-        _callbackQueue = queue;
-    }
-    return self;
-}
-
-- (BOOL)moveColor:(CHIPDeviceCallback)onCompletion
-              rateX:(int16_t)rateX
-              rateY:(int16_t)rateY
-        optionsMask:(uint8_t)optionsMask
-    optionsOverride:(uint8_t)optionsOverride
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.MoveColor(callback, rateX, rateY, optionsMask, optionsOverride);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)moveColorTemperature:(CHIPDeviceCallback)onCompletion
-                    moveMode:(uint8_t)moveMode
-                        rate:(uint16_t)rate
-     colorTemperatureMinimum:(uint16_t)colorTemperatureMinimum
-     colorTemperatureMaximum:(uint16_t)colorTemperatureMaximum
-                 optionsMask:(uint8_t)optionsMask
-             optionsOverride:(uint8_t)optionsOverride
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.MoveColorTemperature(
-        callback, moveMode, rate, colorTemperatureMinimum, colorTemperatureMaximum, optionsMask, optionsOverride);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)moveHue:(CHIPDeviceCallback)onCompletion
-           moveMode:(uint8_t)moveMode
-               rate:(uint8_t)rate
-        optionsMask:(uint8_t)optionsMask
-    optionsOverride:(uint8_t)optionsOverride
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.MoveHue(callback, moveMode, rate, optionsMask, optionsOverride);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)moveSaturation:(CHIPDeviceCallback)onCompletion
-              moveMode:(uint8_t)moveMode
-                  rate:(uint8_t)rate
-           optionsMask:(uint8_t)optionsMask
-       optionsOverride:(uint8_t)optionsOverride
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.MoveSaturation(callback, moveMode, rate, optionsMask, optionsOverride);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)moveToColor:(CHIPDeviceCallback)onCompletion
-             colorX:(uint16_t)colorX
-             colorY:(uint16_t)colorY
-     transitionTime:(uint16_t)transitionTime
-        optionsMask:(uint8_t)optionsMask
-    optionsOverride:(uint8_t)optionsOverride
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.MoveToColor(callback, colorX, colorY, transitionTime, optionsMask, optionsOverride);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)moveToColorTemperature:(CHIPDeviceCallback)onCompletion
-              colorTemperature:(uint16_t)colorTemperature
-                transitionTime:(uint16_t)transitionTime
-                   optionsMask:(uint8_t)optionsMask
-               optionsOverride:(uint8_t)optionsOverride
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err
-        = self.cppCluster.MoveToColorTemperature(callback, colorTemperature, transitionTime, optionsMask, optionsOverride);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)moveToHue:(CHIPDeviceCallback)onCompletion
-                hue:(uint8_t)hue
-          direction:(uint8_t)direction
-     transitionTime:(uint16_t)transitionTime
-        optionsMask:(uint8_t)optionsMask
-    optionsOverride:(uint8_t)optionsOverride
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.MoveToHue(callback, hue, direction, transitionTime, optionsMask, optionsOverride);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)moveToHueAndSaturation:(CHIPDeviceCallback)onCompletion
-                           hue:(uint8_t)hue
-                    saturation:(uint8_t)saturation
-                transitionTime:(uint16_t)transitionTime
-                   optionsMask:(uint8_t)optionsMask
-               optionsOverride:(uint8_t)optionsOverride
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err
-        = self.cppCluster.MoveToHueAndSaturation(callback, hue, saturation, transitionTime, optionsMask, optionsOverride);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)moveToSaturation:(CHIPDeviceCallback)onCompletion
-              saturation:(uint8_t)saturation
-          transitionTime:(uint16_t)transitionTime
-             optionsMask:(uint8_t)optionsMask
-         optionsOverride:(uint8_t)optionsOverride
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.MoveToSaturation(callback, saturation, transitionTime, optionsMask, optionsOverride);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)stepColor:(CHIPDeviceCallback)onCompletion
-              stepX:(int16_t)stepX
-              stepY:(int16_t)stepY
-     transitionTime:(uint16_t)transitionTime
-        optionsMask:(uint8_t)optionsMask
-    optionsOverride:(uint8_t)optionsOverride
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.StepColor(callback, stepX, stepY, transitionTime, optionsMask, optionsOverride);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)stepColorTemperature:(CHIPDeviceCallback)onCompletion
-                    stepMode:(uint8_t)stepMode
-                    stepSize:(uint16_t)stepSize
-              transitionTime:(uint16_t)transitionTime
-     colorTemperatureMinimum:(uint16_t)colorTemperatureMinimum
-     colorTemperatureMaximum:(uint16_t)colorTemperatureMaximum
-                 optionsMask:(uint8_t)optionsMask
-             optionsOverride:(uint8_t)optionsOverride
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.StepColorTemperature(callback, stepMode, stepSize, transitionTime, colorTemperatureMinimum,
-        colorTemperatureMaximum, optionsMask, optionsOverride);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)stepHue:(CHIPDeviceCallback)onCompletion
-           stepMode:(uint8_t)stepMode
-           stepSize:(uint8_t)stepSize
-     transitionTime:(uint8_t)transitionTime
-        optionsMask:(uint8_t)optionsMask
-    optionsOverride:(uint8_t)optionsOverride
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.StepHue(callback, stepMode, stepSize, transitionTime, optionsMask, optionsOverride);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)stepSaturation:(CHIPDeviceCallback)onCompletion
-              stepMode:(uint8_t)stepMode
-              stepSize:(uint8_t)stepSize
-        transitionTime:(uint8_t)transitionTime
-           optionsMask:(uint8_t)optionsMask
-       optionsOverride:(uint8_t)optionsOverride
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.StepSaturation(callback, stepMode, stepSize, transitionTime, optionsMask, optionsOverride);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)stopMoveStep:(CHIPDeviceCallback)onCompletion optionsMask:(uint8_t)optionsMask optionsOverride:(uint8_t)optionsOverride
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.StopMoveStep(callback, optionsMask, optionsOverride);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeCurrentHue:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeCurrentHue(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)reportAttributeCurrentHue:(CHIPDeviceCallback)onCompletion
-                         onChange:(CHIPDeviceCallback)onChange
-                      minInterval:(uint16_t)minInterval
-                      maxInterval:(uint16_t)maxInterval
-                           change:(uint8_t)change
-{
-    CHIPCallbackBridge * completionCallback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!completionCallback) {
-        return NO;
-    }
-
-    CHIPCallbackBridge * changeCallback = new CHIPCallbackBridge(onChange, _callbackQueue);
-    if (!changeCallback) {
-        return NO;
-    }
-
-    CHIP_ERROR err
-        = self.cppCluster.ReportAttributeCurrentHue(completionCallback, changeCallback, minInterval, maxInterval, change);
-    if (err != CHIP_NO_ERROR) {
-        completionCallback->Cancel();
-        changeCallback->Cancel();
-        delete completionCallback;
-        delete changeCallback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeCurrentSaturation:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeCurrentSaturation(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)reportAttributeCurrentSaturation:(CHIPDeviceCallback)onCompletion
-                                onChange:(CHIPDeviceCallback)onChange
-                             minInterval:(uint16_t)minInterval
-                             maxInterval:(uint16_t)maxInterval
-                                  change:(uint8_t)change
-{
-    CHIPCallbackBridge * completionCallback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!completionCallback) {
-        return NO;
-    }
-
-    CHIPCallbackBridge * changeCallback = new CHIPCallbackBridge(onChange, _callbackQueue);
-    if (!changeCallback) {
-        return NO;
-    }
-
-    CHIP_ERROR err
-        = self.cppCluster.ReportAttributeCurrentSaturation(completionCallback, changeCallback, minInterval, maxInterval, change);
-    if (err != CHIP_NO_ERROR) {
-        completionCallback->Cancel();
-        changeCallback->Cancel();
-        delete completionCallback;
-        delete changeCallback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeRemainingTime:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeRemainingTime(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeCurrentX:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeCurrentX(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)reportAttributeCurrentX:(CHIPDeviceCallback)onCompletion
-                       onChange:(CHIPDeviceCallback)onChange
-                    minInterval:(uint16_t)minInterval
-                    maxInterval:(uint16_t)maxInterval
-                         change:(uint16_t)change
-{
-    CHIPCallbackBridge * completionCallback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!completionCallback) {
-        return NO;
-    }
-
-    CHIPCallbackBridge * changeCallback = new CHIPCallbackBridge(onChange, _callbackQueue);
-    if (!changeCallback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReportAttributeCurrentX(completionCallback, changeCallback, minInterval, maxInterval, change);
-    if (err != CHIP_NO_ERROR) {
-        completionCallback->Cancel();
-        changeCallback->Cancel();
-        delete completionCallback;
-        delete changeCallback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeCurrentY:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeCurrentY(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)reportAttributeCurrentY:(CHIPDeviceCallback)onCompletion
-                       onChange:(CHIPDeviceCallback)onChange
-                    minInterval:(uint16_t)minInterval
-                    maxInterval:(uint16_t)maxInterval
-                         change:(uint16_t)change
-{
-    CHIPCallbackBridge * completionCallback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!completionCallback) {
-        return NO;
-    }
-
-    CHIPCallbackBridge * changeCallback = new CHIPCallbackBridge(onChange, _callbackQueue);
-    if (!changeCallback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReportAttributeCurrentY(completionCallback, changeCallback, minInterval, maxInterval, change);
-    if (err != CHIP_NO_ERROR) {
-        completionCallback->Cancel();
-        changeCallback->Cancel();
-        delete completionCallback;
-        delete changeCallback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeDriftCompensation:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeDriftCompensation(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeCompensationText:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeCompensationText(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeColorTemperature:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeColorTemperature(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)reportAttributeColorTemperature:(CHIPDeviceCallback)onCompletion
-                               onChange:(CHIPDeviceCallback)onChange
-                            minInterval:(uint16_t)minInterval
-                            maxInterval:(uint16_t)maxInterval
-                                 change:(uint16_t)change
-{
-    CHIPCallbackBridge * completionCallback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!completionCallback) {
-        return NO;
-    }
-
-    CHIPCallbackBridge * changeCallback = new CHIPCallbackBridge(onChange, _callbackQueue);
-    if (!changeCallback) {
-        return NO;
-    }
-
-    CHIP_ERROR err
-        = self.cppCluster.ReportAttributeColorTemperature(completionCallback, changeCallback, minInterval, maxInterval, change);
-    if (err != CHIP_NO_ERROR) {
-        completionCallback->Cancel();
-        changeCallback->Cancel();
-        delete completionCallback;
-        delete changeCallback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeColorMode:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeColorMode(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeColorControlOptions:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeColorControlOptions(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)writeAttributeColorControlOptions:(CHIPDeviceCallback)onCompletion value:(uint8_t)value
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.WriteAttributeColorControlOptions(callback, value);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeNumberOfPrimaries:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeNumberOfPrimaries(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributePrimary1X:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary1X(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributePrimary1Y:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary1Y(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributePrimary1Intensity:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary1Intensity(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributePrimary2X:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary2X(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributePrimary2Y:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary2Y(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributePrimary2Intensity:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary2Intensity(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributePrimary3X:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary3X(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributePrimary3Y:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary3Y(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributePrimary3Intensity:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary3Intensity(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributePrimary4X:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary4X(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributePrimary4Y:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary4Y(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributePrimary4Intensity:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary4Intensity(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributePrimary5X:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary5X(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributePrimary5Y:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary5Y(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributePrimary5Intensity:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary5Intensity(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributePrimary6X:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary6X(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributePrimary6Y:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary6Y(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributePrimary6Intensity:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary6Intensity(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeWhitePointX:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeWhitePointX(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)writeAttributeWhitePointX:(CHIPDeviceCallback)onCompletion value:(uint16_t)value
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.WriteAttributeWhitePointX(callback, value);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeWhitePointY:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeWhitePointY(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)writeAttributeWhitePointY:(CHIPDeviceCallback)onCompletion value:(uint16_t)value
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.WriteAttributeWhitePointY(callback, value);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeColorPointRX:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeColorPointRX(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)writeAttributeColorPointRX:(CHIPDeviceCallback)onCompletion value:(uint16_t)value
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.WriteAttributeColorPointRX(callback, value);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeColorPointRY:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeColorPointRY(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)writeAttributeColorPointRY:(CHIPDeviceCallback)onCompletion value:(uint16_t)value
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.WriteAttributeColorPointRY(callback, value);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeColorPointRIntensity:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeColorPointRIntensity(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)writeAttributeColorPointRIntensity:(CHIPDeviceCallback)onCompletion value:(uint8_t)value
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.WriteAttributeColorPointRIntensity(callback, value);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeColorPointGX:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeColorPointGX(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)writeAttributeColorPointGX:(CHIPDeviceCallback)onCompletion value:(uint16_t)value
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.WriteAttributeColorPointGX(callback, value);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeColorPointGY:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeColorPointGY(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)writeAttributeColorPointGY:(CHIPDeviceCallback)onCompletion value:(uint16_t)value
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.WriteAttributeColorPointGY(callback, value);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeColorPointGIntensity:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeColorPointGIntensity(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)writeAttributeColorPointGIntensity:(CHIPDeviceCallback)onCompletion value:(uint8_t)value
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.WriteAttributeColorPointGIntensity(callback, value);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeColorPointBX:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeColorPointBX(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)writeAttributeColorPointBX:(CHIPDeviceCallback)onCompletion value:(uint16_t)value
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.WriteAttributeColorPointBX(callback, value);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeColorPointBY:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeColorPointBY(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)writeAttributeColorPointBY:(CHIPDeviceCallback)onCompletion value:(uint16_t)value
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.WriteAttributeColorPointBY(callback, value);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeColorPointBIntensity:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeColorPointBIntensity(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)writeAttributeColorPointBIntensity:(CHIPDeviceCallback)onCompletion value:(uint8_t)value
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.WriteAttributeColorPointBIntensity(callback, value);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeEnhancedCurrentHue:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeEnhancedCurrentHue(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeEnhancedColorMode:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeEnhancedColorMode(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeColorLoopActive:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeColorLoopActive(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeColorLoopDirection:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeColorLoopDirection(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeColorLoopTime:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeColorLoopTime(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeColorCapabilities:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeColorCapabilities(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeColorTempPhysicalMin:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeColorTempPhysicalMin(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeColorTempPhysicalMax:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeColorTempPhysicalMax(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeCoupleColorTempToLevelMinMireds:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeCoupleColorTempToLevelMinMireds(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeStartUpColorTemperatureMireds:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeStartUpColorTemperatureMireds(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)writeAttributeStartUpColorTemperatureMireds:(CHIPDeviceCallback)onCompletion value:(uint16_t)value
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.WriteAttributeStartUpColorTemperatureMireds(callback, value);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeClusterRevision:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-@end
-
-@interface CHIPDoorLock ()
-
-@property (readonly) chip::Controller::DoorLockCluster cppCluster;
-@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
-@end
-
-@implementation CHIPDoorLock
-
-- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(chip::EndpointId)endpoint queue:(dispatch_queue_t)queue
-{
-    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
-
-    if (err != CHIP_NO_ERROR) {
-        return nil;
-    }
-
-    if (self = [super init]) {
-        _callbackQueue = queue;
-    }
-    return self;
-}
-
-- (BOOL)clearAllPins:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ClearAllPins(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)clearAllRfids:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ClearAllRfids(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)clearHolidaySchedule:(CHIPDeviceCallback)onCompletion scheduleId:(uint8_t)scheduleId
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ClearHolidaySchedule(callback, scheduleId);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)clearPin:(CHIPDeviceCallback)onCompletion userId:(uint16_t)userId
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ClearPin(callback, userId);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)clearRfid:(CHIPDeviceCallback)onCompletion userId:(uint16_t)userId
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ClearRfid(callback, userId);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)clearWeekdaySchedule:(CHIPDeviceCallback)onCompletion scheduleId:(uint8_t)scheduleId userId:(uint16_t)userId
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ClearWeekdaySchedule(callback, scheduleId, userId);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)clearYeardaySchedule:(CHIPDeviceCallback)onCompletion scheduleId:(uint8_t)scheduleId userId:(uint16_t)userId
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ClearYeardaySchedule(callback, scheduleId, userId);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)getHolidaySchedule:(CHIPDeviceCallback)onCompletion scheduleId:(uint8_t)scheduleId
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.GetHolidaySchedule(callback, scheduleId);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)getLogRecord:(CHIPDeviceCallback)onCompletion logIndex:(uint16_t)logIndex
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.GetLogRecord(callback, logIndex);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)getPin:(CHIPDeviceCallback)onCompletion userId:(uint16_t)userId
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.GetPin(callback, userId);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)getRfid:(CHIPDeviceCallback)onCompletion userId:(uint16_t)userId
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.GetRfid(callback, userId);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)getUserType:(CHIPDeviceCallback)onCompletion userId:(uint16_t)userId
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.GetUserType(callback, userId);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)getWeekdaySchedule:(CHIPDeviceCallback)onCompletion scheduleId:(uint8_t)scheduleId userId:(uint16_t)userId
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.GetWeekdaySchedule(callback, scheduleId, userId);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)getYeardaySchedule:(CHIPDeviceCallback)onCompletion scheduleId:(uint8_t)scheduleId userId:(uint16_t)userId
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.GetYeardaySchedule(callback, scheduleId, userId);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)lockDoor:(CHIPDeviceCallback)onCompletion pin:(char *)pin
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.LockDoor(callback, pin);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)setHolidaySchedule:(CHIPDeviceCallback)onCompletion
-                    scheduleId:(uint8_t)scheduleId
-                localStartTime:(uint32_t)localStartTime
-                  localEndTime:(uint32_t)localEndTime
-    operatingModeDuringHoliday:(uint8_t)operatingModeDuringHoliday
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err
-        = self.cppCluster.SetHolidaySchedule(callback, scheduleId, localStartTime, localEndTime, operatingModeDuringHoliday);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)setPin:(CHIPDeviceCallback)onCompletion
-        userId:(uint16_t)userId
-    userStatus:(uint8_t)userStatus
-      userType:(uint8_t)userType
-           pin:(char *)pin
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.SetPin(callback, userId, userStatus, userType, pin);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)setRfid:(CHIPDeviceCallback)onCompletion
-         userId:(uint16_t)userId
-     userStatus:(uint8_t)userStatus
-       userType:(uint8_t)userType
-             id:(char *)id
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.SetRfid(callback, userId, userStatus, userType, id);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)setUserType:(CHIPDeviceCallback)onCompletion userId:(uint16_t)userId userType:(uint8_t)userType
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.SetUserType(callback, userId, userType);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)setWeekdaySchedule:(CHIPDeviceCallback)onCompletion
-                scheduleId:(uint8_t)scheduleId
-                    userId:(uint16_t)userId
-                  daysMask:(uint8_t)daysMask
-                 startHour:(uint8_t)startHour
-               startMinute:(uint8_t)startMinute
-                   endHour:(uint8_t)endHour
-                 endMinute:(uint8_t)endMinute
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err
-        = self.cppCluster.SetWeekdaySchedule(callback, scheduleId, userId, daysMask, startHour, startMinute, endHour, endMinute);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)setYeardaySchedule:(CHIPDeviceCallback)onCompletion
-                scheduleId:(uint8_t)scheduleId
-                    userId:(uint16_t)userId
-            localStartTime:(uint32_t)localStartTime
-              localEndTime:(uint32_t)localEndTime
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.SetYeardaySchedule(callback, scheduleId, userId, localStartTime, localEndTime);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)unlockDoor:(CHIPDeviceCallback)onCompletion pin:(char *)pin
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.UnlockDoor(callback, pin);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)unlockWithTimeout:(CHIPDeviceCallback)onCompletion timeoutInSeconds:(uint16_t)timeoutInSeconds pin:(char *)pin
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.UnlockWithTimeout(callback, timeoutInSeconds, pin);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeLockState:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeLockState(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)reportAttributeLockState:(CHIPDeviceCallback)onCompletion
-                        onChange:(CHIPDeviceCallback)onChange
-                     minInterval:(uint16_t)minInterval
-                     maxInterval:(uint16_t)maxInterval
-{
-    CHIPCallbackBridge * completionCallback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!completionCallback) {
-        return NO;
-    }
-
-    CHIPCallbackBridge * changeCallback = new CHIPCallbackBridge(onChange, _callbackQueue);
-    if (!changeCallback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReportAttributeLockState(completionCallback, changeCallback, minInterval, maxInterval);
-    if (err != CHIP_NO_ERROR) {
-        completionCallback->Cancel();
-        changeCallback->Cancel();
-        delete completionCallback;
-        delete changeCallback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeLockType:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeLockType(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeActuatorEnabled:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeActuatorEnabled(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeClusterRevision:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-@end
-
-@interface CHIPGroups ()
-
-@property (readonly) chip::Controller::GroupsCluster cppCluster;
-@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
-@end
-
-@implementation CHIPGroups
-
-- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(chip::EndpointId)endpoint queue:(dispatch_queue_t)queue
-{
-    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
-
-    if (err != CHIP_NO_ERROR) {
-        return nil;
-    }
-
-    if (self = [super init]) {
-        _callbackQueue = queue;
-    }
-    return self;
-}
-
-- (BOOL)addGroup:(CHIPDeviceCallback)onCompletion groupId:(uint16_t)groupId groupName:(char *)groupName
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.AddGroup(callback, groupId, groupName);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)addGroupIfIdentifying:(CHIPDeviceCallback)onCompletion groupId:(uint16_t)groupId groupName:(char *)groupName
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.AddGroupIfIdentifying(callback, groupId, groupName);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)getGroupMembership:(CHIPDeviceCallback)onCompletion groupCount:(uint8_t)groupCount groupList:(uint16_t)groupList
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.GetGroupMembership(callback, groupCount, groupList);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)removeAllGroups:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.RemoveAllGroups(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)removeGroup:(CHIPDeviceCallback)onCompletion groupId:(uint16_t)groupId
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.RemoveGroup(callback, groupId);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)viewGroup:(CHIPDeviceCallback)onCompletion groupId:(uint16_t)groupId
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ViewGroup(callback, groupId);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeNameSupport:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeNameSupport(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeClusterRevision:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-@end
-
-@interface CHIPIasZone ()
-
-@property (readonly) chip::Controller::IasZoneCluster cppCluster;
-@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
-@end
-
-@implementation CHIPIasZone
-
-- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(chip::EndpointId)endpoint queue:(dispatch_queue_t)queue
-{
-    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
-
-    if (err != CHIP_NO_ERROR) {
-        return nil;
-    }
-
-    if (self = [super init]) {
-        _callbackQueue = queue;
-    }
-    return self;
-}
-
-- (BOOL)readAttributeZoneState:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeZoneState(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeZoneType:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeZoneType(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeZoneStatus:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeZoneStatus(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeIasCieAddress:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeIasCieAddress(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)writeAttributeIasCieAddress:(CHIPDeviceCallback)onCompletion value:(uint64_t)value
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.WriteAttributeIasCieAddress(callback, value);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeZoneId:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeZoneId(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeClusterRevision:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-@end
-
-@interface CHIPIdentify ()
-
-@property (readonly) chip::Controller::IdentifyCluster cppCluster;
-@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
-@end
-
-@implementation CHIPIdentify
-
-- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(chip::EndpointId)endpoint queue:(dispatch_queue_t)queue
-{
-    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
-
-    if (err != CHIP_NO_ERROR) {
-        return nil;
-    }
-
-    if (self = [super init]) {
-        _callbackQueue = queue;
-    }
-    return self;
-}
-
-- (BOOL)identify:(CHIPDeviceCallback)onCompletion identifyTime:(uint16_t)identifyTime
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.Identify(callback, identifyTime);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)identifyQuery:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.IdentifyQuery(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeIdentifyTime:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeIdentifyTime(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)writeAttributeIdentifyTime:(CHIPDeviceCallback)onCompletion value:(uint16_t)value
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.WriteAttributeIdentifyTime(callback, value);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeClusterRevision:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-@end
-
-@interface CHIPLevelControl ()
-
-@property (readonly) chip::Controller::LevelControlCluster cppCluster;
-@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
-@end
-
-@implementation CHIPLevelControl
-
-- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(chip::EndpointId)endpoint queue:(dispatch_queue_t)queue
-{
-    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
-
-    if (err != CHIP_NO_ERROR) {
-        return nil;
-    }
-
-    if (self = [super init]) {
-        _callbackQueue = queue;
-    }
-    return self;
-}
-
-- (BOOL)move:(CHIPDeviceCallback)onCompletion
-          moveMode:(uint8_t)moveMode
-              rate:(uint8_t)rate
-        optionMask:(uint8_t)optionMask
-    optionOverride:(uint8_t)optionOverride
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.Move(callback, moveMode, rate, optionMask, optionOverride);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)moveToLevel:(CHIPDeviceCallback)onCompletion
-              level:(uint8_t)level
-     transitionTime:(uint16_t)transitionTime
-         optionMask:(uint8_t)optionMask
-     optionOverride:(uint8_t)optionOverride
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.MoveToLevel(callback, level, transitionTime, optionMask, optionOverride);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)moveToLevelWithOnOff:(CHIPDeviceCallback)onCompletion level:(uint8_t)level transitionTime:(uint16_t)transitionTime
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.MoveToLevelWithOnOff(callback, level, transitionTime);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)moveWithOnOff:(CHIPDeviceCallback)onCompletion moveMode:(uint8_t)moveMode rate:(uint8_t)rate
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.MoveWithOnOff(callback, moveMode, rate);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)step:(CHIPDeviceCallback)onCompletion
-          stepMode:(uint8_t)stepMode
-          stepSize:(uint8_t)stepSize
-    transitionTime:(uint16_t)transitionTime
-        optionMask:(uint8_t)optionMask
-    optionOverride:(uint8_t)optionOverride
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.Step(callback, stepMode, stepSize, transitionTime, optionMask, optionOverride);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)stepWithOnOff:(CHIPDeviceCallback)onCompletion
-             stepMode:(uint8_t)stepMode
-             stepSize:(uint8_t)stepSize
-       transitionTime:(uint16_t)transitionTime
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.StepWithOnOff(callback, stepMode, stepSize, transitionTime);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)stop:(CHIPDeviceCallback)onCompletion optionMask:(uint8_t)optionMask optionOverride:(uint8_t)optionOverride
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.Stop(callback, optionMask, optionOverride);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)stopWithOnOff:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.StopWithOnOff(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeCurrentLevel:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeCurrentLevel(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)reportAttributeCurrentLevel:(CHIPDeviceCallback)onCompletion
-                           onChange:(CHIPDeviceCallback)onChange
-                        minInterval:(uint16_t)minInterval
-                        maxInterval:(uint16_t)maxInterval
-                             change:(uint8_t)change
-{
-    CHIPCallbackBridge * completionCallback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!completionCallback) {
-        return NO;
-    }
-
-    CHIPCallbackBridge * changeCallback = new CHIPCallbackBridge(onChange, _callbackQueue);
-    if (!changeCallback) {
-        return NO;
-    }
-
-    CHIP_ERROR err
-        = self.cppCluster.ReportAttributeCurrentLevel(completionCallback, changeCallback, minInterval, maxInterval, change);
-    if (err != CHIP_NO_ERROR) {
-        completionCallback->Cancel();
-        changeCallback->Cancel();
-        delete completionCallback;
-        delete changeCallback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeClusterRevision:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-@end
-
-@interface CHIPOnOff ()
-
-@property (readonly) chip::Controller::OnOffCluster cppCluster;
-@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
-@end
-
-@implementation CHIPOnOff
-
-- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(chip::EndpointId)endpoint queue:(dispatch_queue_t)queue
-{
-    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
-
-    if (err != CHIP_NO_ERROR) {
-        return nil;
-    }
-
-    if (self = [super init]) {
-        _callbackQueue = queue;
-    }
-    return self;
-}
-
-- (BOOL)off:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.Off(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)on:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.On(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)toggle:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.Toggle(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeOnOff:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeOnOff(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)reportAttributeOnOff:(CHIPDeviceCallback)onCompletion
-                    onChange:(CHIPDeviceCallback)onChange
-                 minInterval:(uint16_t)minInterval
-                 maxInterval:(uint16_t)maxInterval
-{
-    CHIPCallbackBridge * completionCallback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!completionCallback) {
-        return NO;
-    }
-
-    CHIPCallbackBridge * changeCallback = new CHIPCallbackBridge(onChange, _callbackQueue);
-    if (!changeCallback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReportAttributeOnOff(completionCallback, changeCallback, minInterval, maxInterval);
-    if (err != CHIP_NO_ERROR) {
-        completionCallback->Cancel();
-        changeCallback->Cancel();
-        delete completionCallback;
-        delete changeCallback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeClusterRevision:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-@end
-
-@interface CHIPScenes ()
-
-@property (readonly) chip::Controller::ScenesCluster cppCluster;
-@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
-@end
-
-@implementation CHIPScenes
-
-- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(chip::EndpointId)endpoint queue:(dispatch_queue_t)queue
-{
-    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
-
-    if (err != CHIP_NO_ERROR) {
-        return nil;
-    }
-
-    if (self = [super init]) {
-        _callbackQueue = queue;
-    }
-    return self;
-}
-
-- (BOOL)addScene:(CHIPDeviceCallback)onCompletion
-           groupId:(uint16_t)groupId
-           sceneId:(uint8_t)sceneId
-    transitionTime:(uint16_t)transitionTime
-         sceneName:(char *)sceneName
-         clusterId:(chip::ClusterId)clusterId
-            length:(uint8_t)length
-             value:(uint8_t)value
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.AddScene(callback, groupId, sceneId, transitionTime, sceneName, clusterId, length, value);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)getSceneMembership:(CHIPDeviceCallback)onCompletion groupId:(uint16_t)groupId
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.GetSceneMembership(callback, groupId);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)recallScene:(CHIPDeviceCallback)onCompletion
-            groupId:(uint16_t)groupId
-            sceneId:(uint8_t)sceneId
-     transitionTime:(uint16_t)transitionTime
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.RecallScene(callback, groupId, sceneId, transitionTime);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)removeAllScenes:(CHIPDeviceCallback)onCompletion groupId:(uint16_t)groupId
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.RemoveAllScenes(callback, groupId);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)removeScene:(CHIPDeviceCallback)onCompletion groupId:(uint16_t)groupId sceneId:(uint8_t)sceneId
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.RemoveScene(callback, groupId, sceneId);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)storeScene:(CHIPDeviceCallback)onCompletion groupId:(uint16_t)groupId sceneId:(uint8_t)sceneId
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.StoreScene(callback, groupId, sceneId);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-- (BOOL)viewScene:(CHIPDeviceCallback)onCompletion groupId:(uint16_t)groupId sceneId:(uint8_t)sceneId
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ViewScene(callback, groupId, sceneId);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeSceneCount:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeSceneCount(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeCurrentScene:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeCurrentScene(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeCurrentGroup:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeCurrentGroup(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeSceneValid:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeSceneValid(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeNameSupport:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeNameSupport(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeClusterRevision:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-@end
-
-@interface CHIPTemperatureMeasurement ()
-
-@property (readonly) chip::Controller::TemperatureMeasurementCluster cppCluster;
-@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
-@end
-
-@implementation CHIPTemperatureMeasurement
-
-- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(chip::EndpointId)endpoint queue:(dispatch_queue_t)queue
-{
-    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
-
-    if (err != CHIP_NO_ERROR) {
-        return nil;
-    }
-
-    if (self = [super init]) {
-        _callbackQueue = queue;
-    }
-    return self;
-}
-
-- (BOOL)readAttributeMeasuredValue:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeMeasuredValue(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)reportAttributeMeasuredValue:(CHIPDeviceCallback)onCompletion
-                            onChange:(CHIPDeviceCallback)onChange
-                         minInterval:(uint16_t)minInterval
-                         maxInterval:(uint16_t)maxInterval
-                              change:(int16_t)change
-{
-    CHIPCallbackBridge * completionCallback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!completionCallback) {
-        return NO;
-    }
-
-    CHIPCallbackBridge * changeCallback = new CHIPCallbackBridge(onChange, _callbackQueue);
-    if (!changeCallback) {
-        return NO;
-    }
-
-    CHIP_ERROR err
-        = self.cppCluster.ReportAttributeMeasuredValue(completionCallback, changeCallback, minInterval, maxInterval, change);
-    if (err != CHIP_NO_ERROR) {
-        completionCallback->Cancel();
-        changeCallback->Cancel();
-        delete completionCallback;
-        delete changeCallback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeMinMeasuredValue:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeMinMeasuredValue(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeMaxMeasuredValue:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeMaxMeasuredValue(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-- (BOOL)readAttributeClusterRevision:(CHIPDeviceCallback)onCompletion
-{
-    CHIPCallbackBridge * callback = new CHIPCallbackBridge(onCompletion, _callbackQueue);
-    if (!callback) {
-        return NO;
-    }
-
-    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(callback);
-    if (err != CHIP_NO_ERROR) {
-        callback->Cancel();
-        delete callback;
-        return NO;
-    }
-    return YES;
-}
-
-@end
diff --git a/src/darwin/Framework/CHIP/CHIPDevice.h b/src/darwin/Framework/CHIP/CHIPDevice.h
index e959fbd..7cf77a8 100644
--- a/src/darwin/Framework/CHIP/CHIPDevice.h
+++ b/src/darwin/Framework/CHIP/CHIPDevice.h
@@ -20,28 +20,12 @@
 
 #import <Foundation/Foundation.h>
 
-#import <CHIP/CHIPError.h>
-
 NS_ASSUME_NONNULL_BEGIN
 
 @interface CHIPDevice : NSObject
 
-- (BOOL)sendMessage:(NSData *)message error:(NSError * __autoreleasing *)error;
-- (BOOL)sendIdentifyCommandWithDuration:(NSTimeInterval)duration;
-- (BOOL)disconnect:(NSError * __autoreleasing *)error;
 - (BOOL)isActive;
 
-/**
- * Test whether a given message is likely to be a data model command.
- */
-+ (BOOL)isDataModelCommand:(NSData * _Nonnull)message;
-
-/**
- * Given a data model command, convert it to some sort of human-readable
- * string that describes what it is, as far as we can tell.
- */
-+ (NSString *)commandToString:(NSData * _Nonnull)command;
-
 - (instancetype)init NS_UNAVAILABLE;
 + (instancetype)new NS_UNAVAILABLE;
 
diff --git a/src/darwin/Framework/CHIP/CHIPDevice.mm b/src/darwin/Framework/CHIP/CHIPDevice.mm
index fc72110..8c6b1be 100644
--- a/src/darwin/Framework/CHIP/CHIPDevice.mm
+++ b/src/darwin/Framework/CHIP/CHIPDevice.mm
@@ -15,17 +15,7 @@
  *    limitations under the License.
  */
 
-#import <Foundation/Foundation.h>
-
-#include <app/chip-zcl-zpro-codec.h>
-#include <controller/CHIPDevice.h>
-
-#import "CHIPDevice.h"
 #import "CHIPDevice_Internal.h"
-#import "CHIPError.h"
-#import "CHIPLogging.h"
-
-#include <system/SystemPacketBuffer.h>
 
 @interface CHIPDevice ()
 
@@ -57,70 +47,6 @@
     return _cppDevice;
 }
 
-- (BOOL)sendMessage:(NSData *)message error:(NSError * __autoreleasing *)error
-{
-    CHIP_ERROR err = CHIP_NO_ERROR;
-
-    [self.lock lock];
-    size_t messageLen = [message length];
-    const void * messageChars = [message bytes];
-
-    chip::System::PacketBufferHandle buffer = chip::System::PacketBufferHandle::NewWithData(messageChars, messageLen);
-    if (buffer.IsNull()) {
-        err = CHIP_ERROR_NO_MEMORY;
-    } else {
-        err = self.cppDevice->SendMessage(std::move(buffer));
-    }
-    [self.lock unlock];
-
-    if (err != CHIP_NO_ERROR) {
-        CHIP_LOG_ERROR("Error(%d): %@, send failed", err, [CHIPError errorForCHIPErrorCode:err]);
-        if (error) {
-            *error = [CHIPError errorForCHIPErrorCode:err];
-        }
-        return NO;
-    }
-
-    return YES;
-}
-
-- (BOOL)sendCHIPCommand:(chip::System::PacketBufferHandle (^)())encodeCommandBlock
-{
-    CHIP_ERROR err = CHIP_NO_ERROR;
-
-    [self.lock lock];
-    chip::System::PacketBufferHandle buffer = encodeCommandBlock();
-    if (buffer.IsNull()) {
-        err = CHIP_ERROR_NO_MEMORY;
-    } else {
-        err = self.cppDevice->SendMessage(std::move(buffer));
-    }
-    [self.lock unlock];
-    if (err != CHIP_NO_ERROR) {
-        CHIP_LOG_ERROR("Error(%d): %@, send failed", err, [CHIPError errorForCHIPErrorCode:err]);
-        return NO;
-    }
-
-    return YES;
-}
-
-- (BOOL)sendIdentifyCommandWithDuration:(NSTimeInterval)duration
-{
-    if (duration > UINT16_MAX) {
-        duration = UINT16_MAX;
-    }
-
-    return [self sendCHIPCommand:^chip::System::PacketBufferHandle() {
-        // Hardcode endpoint to 1 for now
-        return encodeIdentifyClusterIdentifyCommand(1, duration);
-    }];
-}
-
-- (BOOL)disconnect:(NSError * __autoreleasing *)error
-{
-    return YES;
-}
-
 - (BOOL)isActive
 {
     bool isActive = false;
@@ -131,73 +57,4 @@
 
     return isActive ? YES : NO;
 }
-
-+ (BOOL)isDataModelCommand:(NSData * _Nonnull)message
-{
-    if (message.length == 0) {
-        return NO;
-    }
-
-    UInt8 * bytes = (UInt8 *) message.bytes;
-    return bytes[0] < 0x04 ? YES : NO;
-}
-
-+ (NSString *)commandToString:(NSData * _Nonnull)response
-{
-    if ([CHIPDevice isDataModelCommand:response] == NO) {
-        return @"Response is not a CHIP command";
-    }
-
-    uint8_t * bytes = (uint8_t *) response.bytes;
-
-    EmberApsFrame frame;
-    if (extractApsFrame(bytes, (uint32_t) response.length, &frame) == 0) {
-        return @"Response is not an APS frame";
-    }
-
-    uint8_t * message;
-    uint16_t messageLen = extractMessage(bytes, response.length, &message);
-    if (messageLen != 5) {
-        // Not a Default Response command for sure.
-        return @"Unexpected response length";
-    }
-
-    if (message[0] != 8) {
-        // Unexpected control byte
-        return [NSString stringWithFormat:@"Control byte value '0x%02x' is not expected", message[0]];
-    }
-
-    // message[1] is the sequence counter; just ignore it for now.
-
-    if (message[2] != 0x0b) {
-        // Not a Default Response command id
-        return [NSString stringWithFormat:@"Command id '0x%02x' is not the Default Response command id (0x0b)", message[2]];
-    }
-
-    if (frame.clusterId != 0x06) {
-        // Not On/Off cluster
-        return [NSString stringWithFormat:@"Cluster id '0x%02x' is not the on/off cluster id (0x06)", frame.clusterId];
-    }
-
-    NSString * command;
-    if (message[3] == 0) {
-        command = @"off";
-    } else if (message[3] == 1) {
-        command = @"on";
-    } else if (message[3] == 2) {
-        command = @"toggle";
-    } else {
-        return [NSString stringWithFormat:@"Command '0x%02x' is unknown", message[3]];
-    }
-
-    NSString * status;
-    if (message[4] == 0) {
-        status = @"succeeded";
-    } else {
-        status = @"failed";
-    }
-
-    return [NSString stringWithFormat:@"Sending '%@' command %@", command, status];
-}
-
 @end
diff --git a/src/darwin/Framework/CHIP/CHIPDeviceController.h b/src/darwin/Framework/CHIP/CHIPDeviceController.h
index 04a2ee5..9dba5f5 100644
--- a/src/darwin/Framework/CHIP/CHIPDeviceController.h
+++ b/src/darwin/Framework/CHIP/CHIPDeviceController.h
@@ -18,29 +18,16 @@
 #ifndef CHIP_DEVICE_CONTROLLER_H
 #define CHIP_DEVICE_CONTROLLER_H
 
-#import <CHIP/CHIPDeviceStatusDelegate.h>
 #import <Foundation/Foundation.h>
 
 @class CHIPDevice;
 
 NS_ASSUME_NONNULL_BEGIN
 
-typedef void (^ControllerOnConnectedBlock)(void);
-typedef void (^ControllerOnMessageBlock)(NSData * message);
-typedef void (^ControllerOnErrorBlock)(NSError * error);
-
-@protocol CHIPDeviceControllerDelegate;
 @protocol CHIPDevicePairingDelegate;
 @protocol CHIPPersistentStorageDelegate;
 
-@interface AddressInfo : NSObject
-
-@property (readonly, copy) NSString * ip;
-- (instancetype)initWithIP:(NSString *)ip;
-
-@end
-
-@interface CHIPDeviceController : NSObject <CHIPDeviceStatusDelegate>
+@interface CHIPDeviceController : NSObject
 
 - (BOOL)pairDevice:(uint64_t)deviceID
      discriminator:(uint16_t)discriminator
@@ -51,8 +38,6 @@
 
 - (CHIPDevice *)getPairedDevice:(uint64_t)deviceID error:(NSError * __autoreleasing *)error;
 
-- (BOOL)disconnect:(NSError * __autoreleasing *)error;
-
 - (instancetype)init NS_UNAVAILABLE;
 + (instancetype)new NS_UNAVAILABLE;
 
@@ -62,15 +47,6 @@
 + (CHIPDeviceController *)sharedController;
 
 /**
- * Set the Delegate for the Device Controller as well as the Queue on which the Delegate callbacks will be triggered
- *
- * @param[in] delegate The delegate the Device Controller should use
- *
- * @param[in] queue The queue on which the Device Controller will deliver callbacks
- */
-- (void)setDelegate:(id<CHIPDeviceControllerDelegate>)delegate queue:(dispatch_queue_t)queue;
-
-/**
  * Set the Delegate for the Device Pairing  as well as the Queue on which the Delegate callbacks will be triggered
  *
  * @param[in] delegate The delegate the pairing process should use
@@ -90,35 +66,6 @@
 
 @end
 
-/**
- * The protocol definition for the CHIPDeviceControllerDelegate
- *
- * All delegate methods will be called on the supplied Delegate Queue.
- */
-@protocol CHIPDeviceControllerDelegate <NSObject>
-
-/**
- * Notify the delegate when a connection request succeeds
- *
- */
-- (void)deviceControllerOnConnected;
-
-/**
- * Notify the delegate that a message was received
- *
- * @param[in] message The received message
- */
-- (void)deviceControllerOnMessage:(NSData *)message;
-
-/**
- * Notify the Delegate that an error occurred
- *
- * @param[in] error The error that occurred
- */
-- (void)deviceControllerOnError:(NSError *)error;
-
-@end
-
 NS_ASSUME_NONNULL_END
 
 #endif /* CHIP_DEVICE_CONTROLLER_H */
diff --git a/src/darwin/Framework/CHIP/CHIPDeviceController.mm b/src/darwin/Framework/CHIP/CHIPDeviceController.mm
index ae41cae..8ebafde 100644
--- a/src/darwin/Framework/CHIP/CHIPDeviceController.mm
+++ b/src/darwin/Framework/CHIP/CHIPDeviceController.mm
@@ -14,37 +14,31 @@
  *    See the License for the specific language governing permissions and
  *    limitations under the License.
  */
-
-#import <Foundation/Foundation.h>
-
-#include <app/chip-zcl-zpro-codec.h>
-
 #import "CHIPDeviceController.h"
+
 #import "CHIPDevicePairingDelegateBridge.h"
-#import "CHIPDeviceStatusDelegateBridge.h"
 #import "CHIPDevice_Internal.h"
 #import "CHIPError.h"
 #import "CHIPLogging.h"
 #import "CHIPPersistentStorageDelegateBridge.h"
 
 #include <controller/CHIPDeviceController.h>
-#include <inet/IPAddress.h>
 #include <support/CHIPMem.h>
-#include <system/SystemPacketBuffer.h>
 
 static const char * const CHIP_SELECT_QUEUE = "com.zigbee.chip.select";
 
 constexpr chip::NodeId kLocalDeviceId = chip::kTestControllerNodeId;
 
-@implementation AddressInfo
-- (instancetype)initWithIP:(NSString *)ip
-{
-    if (self = [super init]) {
-        _ip = ip;
-    }
-    return self;
-}
-@end
+static NSString * const kErrorMemoryInit = @"Init Memory failure";
+static NSString * const kErrorCommissionerCreate = @"Init failure while creating a commissioner";
+static NSString * const kErrorCommissionerInit = @"Init failure while initializing a commissioner";
+static NSString * const kErrorPairingInit = @"Init failure while creating a pairing delegate";
+static NSString * const kErrorPersistentStorageInit = @"Init failure while creating a persistent storage delegate";
+static NSString * const kErrorNetworkDispatchQueueInit = @"Init failure while initializing a dispatch queue for the network events";
+static NSString * const kErrorPairDevice = @"Failure while pairing the device";
+static NSString * const kErrorUnpairDevice = @"Failure while unpairing the device";
+static NSString * const kErrorStopPairing = @"Failure while trying to stop the pairing process";
+static NSString * const kErrorGetPairedDevice = @"Failure while trying to retrieve a paired device";
 
 @interface CHIPDeviceController ()
 
@@ -53,19 +47,9 @@
 // queue used to call select on the system and inet layer fds., remove this with NW Framework.
 // primarily used to not block the work queue
 @property (atomic, readonly) dispatch_queue_t chipSelectQueue;
-/**
- *  The Controller delegate.
- *  Note: Getter is not thread safe.
- */
-@property (readonly, weak, nonatomic) id<CHIPDeviceControllerDelegate> delegate;
 
-/**
- * The delegate queue where delegate callbacks will run
- */
-@property (readonly, nonatomic) dispatch_queue_t delegateQueue;
-@property (readonly) chip::Controller::DeviceCommissioner * cppController;
+@property (readonly) chip::Controller::DeviceCommissioner * cppCommissioner;
 @property (readonly) CHIPDevicePairingDelegateBridge * pairingDelegateBridge;
-@property (readonly) CHIPDeviceStatusDelegateBridge * deviceStatusDelegateBridge;
 @property (readonly) CHIPPersistentStorageDelegateBridge * persistentStorageDelegateBridge;
 
 @end
@@ -86,184 +70,97 @@
 - (instancetype)init
 {
     if (self = [super init]) {
+        CHIP_ERROR errorCode = CHIP_NO_ERROR;
 
         _lock = [[NSRecursiveLock alloc] init];
 
-        _chipSelectQueue = dispatch_queue_create(CHIP_SELECT_QUEUE, DISPATCH_QUEUE_SERIAL);
-        if (!_chipSelectQueue) {
+        errorCode = chip::Platform::MemoryInit();
+        if ([self checkForInitError:(CHIP_NO_ERROR == errorCode) logMsg:kErrorMemoryInit]) {
             return nil;
         }
 
-        if (CHIP_NO_ERROR != chip::Platform::MemoryInit()) {
-            CHIP_LOG_ERROR("Error: Failed in memory init");
-            return nil;
-        }
-
-        _deviceStatusDelegateBridge = new CHIPDeviceStatusDelegateBridge();
-        if (!_deviceStatusDelegateBridge) {
-            CHIP_LOG_ERROR("Error: couldn't create device status delegate bridge");
-            return nil;
-        }
-        dispatch_queue_t callbackQueue = dispatch_queue_create("com.zigbee.chip.controller.callback", DISPATCH_QUEUE_SERIAL);
-        _deviceStatusDelegateBridge->setDelegate(self, callbackQueue);
-
-        _cppController = new chip::Controller::DeviceCommissioner();
-        if (!_cppController) {
-            CHIP_LOG_ERROR("Error: couldn't create c++ controller");
+        _cppCommissioner = new chip::Controller::DeviceCommissioner();
+        if ([self checkForInitError:(_cppCommissioner) logMsg:kErrorCommissionerCreate]) {
             return nil;
         }
 
         _pairingDelegateBridge = new CHIPDevicePairingDelegateBridge();
-        if (!_pairingDelegateBridge) {
-            CHIP_LOG_ERROR("Error: couldn't create pairing delegate");
-            delete _cppController;
-            _cppController = NULL;
+        if ([self checkForInitError:(_pairingDelegateBridge) logMsg:kErrorPairingInit]) {
             return nil;
         }
 
         _persistentStorageDelegateBridge = new CHIPPersistentStorageDelegateBridge();
-        if (!_persistentStorageDelegateBridge) {
-            CHIP_LOG_ERROR("Error: couldn't create persistent storage delegate");
-            delete _cppController;
-            _cppController = NULL;
-            delete _pairingDelegateBridge;
-            _pairingDelegateBridge = NULL;
+        if ([self checkForInitError:(_persistentStorageDelegateBridge) logMsg:kErrorPersistentStorageInit]) {
             return nil;
         }
 
-        if (CHIP_NO_ERROR != _cppController->Init(kLocalDeviceId, _persistentStorageDelegateBridge, _pairingDelegateBridge)) {
-            CHIP_LOG_ERROR("Error: couldn't initialize c++ controller");
-            delete _cppController;
-            _cppController = NULL;
-            delete _pairingDelegateBridge;
-            _pairingDelegateBridge = NULL;
-            delete _persistentStorageDelegateBridge;
-            _persistentStorageDelegateBridge = NULL;
+        errorCode = _cppCommissioner->Init(kLocalDeviceId, _persistentStorageDelegateBridge, _pairingDelegateBridge);
+        if ([self checkForInitError:(CHIP_NO_ERROR == errorCode) logMsg:kErrorCommissionerInit]) {
+            return nil;
+        }
+
+        _chipSelectQueue = dispatch_queue_create(CHIP_SELECT_QUEUE, DISPATCH_QUEUE_SERIAL);
+        if ([self checkForInitError:(_chipSelectQueue) logMsg:kErrorNetworkDispatchQueueInit]) {
             return nil;
         }
 
         // Start the IO pump
         dispatch_async(_chipSelectQueue, ^() {
-            self.cppController->ServiceEvents();
+            self.cppCommissioner->ServiceEvents();
         });
     }
     return self;
 }
 
-// MARK: CHIPDeviceStatusDelegate
-- (void)onMessageReceived:(NSData *)message
-{
-    CHIP_LOG_METHOD_ENTRY();
-
-    id<CHIPDeviceControllerDelegate> strongDelegate = [self delegate];
-    if (strongDelegate && [self delegateQueue]) {
-        dispatch_async(self.delegateQueue, ^{
-            [strongDelegate deviceControllerOnMessage:message];
-        });
-    }
-}
-
 - (BOOL)pairDevice:(uint64_t)deviceID
      discriminator:(uint16_t)discriminator
       setupPINCode:(uint32_t)setupPINCode
              error:(NSError * __autoreleasing *)error
 {
-    CHIP_ERROR err = CHIP_NO_ERROR;
-
     [self.lock lock];
-
     chip::RendezvousParameters params = chip::RendezvousParameters().SetSetupPINCode(setupPINCode).SetDiscriminator(discriminator);
-    err = self.cppController->PairDevice(deviceID, params);
+    CHIP_ERROR err = self.cppCommissioner->PairDevice(deviceID, params);
     [self.lock unlock];
 
-    if (err != CHIP_NO_ERROR) {
-        CHIP_LOG_ERROR("Error(%d): %@, failed in pairing the device", err, [CHIPError errorForCHIPErrorCode:err]);
-        if (error) {
-            *error = [CHIPError errorForCHIPErrorCode:err];
-        }
-        return NO;
-    }
-
-    return YES;
+    return ![self checkForError:err logMsg:kErrorPairDevice error:error];
 }
 
 - (BOOL)unpairDevice:(uint64_t)deviceID error:(NSError * __autoreleasing *)error
 {
-    CHIP_ERROR err = CHIP_NO_ERROR;
+    CHIP_ERROR errorCode = CHIP_NO_ERROR;
 
     [self.lock lock];
-
-    err = self.cppController->UnpairDevice(deviceID);
+    errorCode = self.cppCommissioner->UnpairDevice(deviceID);
     [self.lock unlock];
 
-    if (err != CHIP_NO_ERROR) {
-        CHIP_LOG_ERROR("Error(%d): %@, failed in unpairing the device", err, [CHIPError errorForCHIPErrorCode:err]);
-        if (error) {
-            *error = [CHIPError errorForCHIPErrorCode:err];
-        }
-        return NO;
-    }
-
-    return YES;
+    return ![self checkForError:errorCode logMsg:kErrorUnpairDevice error:error];
 }
 
 - (BOOL)stopDevicePairing:(uint64_t)deviceID error:(NSError * __autoreleasing *)error
 {
-    CHIP_ERROR err = CHIP_NO_ERROR;
+    CHIP_ERROR errorCode = CHIP_NO_ERROR;
 
     [self.lock lock];
-    err = self.cppController->StopPairing(deviceID);
+    errorCode = self.cppCommissioner->StopPairing(deviceID);
     [self.lock unlock];
 
-    if (err != CHIP_NO_ERROR) {
-        CHIP_LOG_ERROR("Error(%d): %@, failed in stopping the pairing process", err, [CHIPError errorForCHIPErrorCode:err]);
-        if (error) {
-            *error = [CHIPError errorForCHIPErrorCode:err];
-        }
-        return NO;
-    }
-
-    return YES;
+    return ![self checkForError:errorCode logMsg:kErrorStopPairing error:error];
 }
 
 - (CHIPDevice *)getPairedDevice:(uint64_t)deviceID error:(NSError * __autoreleasing *)error
 {
-    CHIP_ERROR err = CHIP_NO_ERROR;
-    chip::Controller::Device * cppDevice = nil;
+    CHIP_ERROR errorCode = CHIP_NO_ERROR;
+    chip::Controller::Device * device = nil;
 
     [self.lock lock];
-    err = self.cppController->GetDevice(deviceID, &cppDevice);
+    errorCode = self.cppCommissioner->GetDevice(deviceID, &device);
     [self.lock unlock];
 
-    if (err != CHIP_NO_ERROR || !cppDevice) {
-        CHIP_LOG_ERROR("Error(%d): %@, failed in getting device instance", err, [CHIPError errorForCHIPErrorCode:err]);
-        if (error) {
-            *error = [CHIPError errorForCHIPErrorCode:err];
-        }
+    if ([self checkForError:errorCode logMsg:kErrorGetPairedDevice error:error]) {
         return nil;
     }
 
-    cppDevice->SetDelegate(_deviceStatusDelegateBridge);
-
-    return [[CHIPDevice alloc] initWithDevice:cppDevice];
-}
-
-- (BOOL)disconnect:(NSError * __autoreleasing *)error
-{
-    return YES;
-}
-
-- (void)setDelegate:(id<CHIPDeviceControllerDelegate>)delegate queue:(dispatch_queue_t)queue
-{
-    [self.lock lock];
-    if (delegate && queue) {
-        self->_delegate = delegate;
-        self->_delegateQueue = queue;
-    } else {
-        self->_delegate = nil;
-        self->_delegateQueue = NULL;
-    }
-    [self.lock unlock];
+    return [[CHIPDevice alloc] initWithDevice:device];
 }
 
 - (void)setPairingDelegate:(id<CHIPDevicePairingDelegate>)delegate queue:(dispatch_queue_t)queue
@@ -280,4 +177,44 @@
     [self.lock unlock];
 }
 
+- (BOOL)checkForInitError:(BOOL)condition logMsg:(NSString *)logMsg
+{
+    if (condition) {
+        return NO;
+    }
+
+    CHIP_LOG_ERROR("Error: %@", logMsg);
+
+    if (_cppCommissioner) {
+        delete _cppCommissioner;
+        _cppCommissioner = NULL;
+    }
+
+    if (_pairingDelegateBridge) {
+        delete _pairingDelegateBridge;
+        _pairingDelegateBridge = NULL;
+    }
+
+    if (_persistentStorageDelegateBridge) {
+        delete _persistentStorageDelegateBridge;
+        _persistentStorageDelegateBridge = NULL;
+    }
+
+    return YES;
+}
+
+- (BOOL)checkForError:(CHIP_ERROR)errorCode logMsg:(NSString *)logMsg error:(NSError * __autoreleasing *)error
+{
+    if (CHIP_NO_ERROR == errorCode) {
+        return NO;
+    }
+
+    CHIP_LOG_ERROR("Error(%d): %@, %@", errorCode, [CHIPError errorForCHIPErrorCode:errorCode], logMsg);
+    if (error) {
+        *error = [CHIPError errorForCHIPErrorCode:errorCode];
+    }
+
+    return YES;
+}
+
 @end
diff --git a/src/darwin/Framework/CHIP/CHIPDevicePairingDelegateBridge.h b/src/darwin/Framework/CHIP/CHIPDevicePairingDelegateBridge.h
index 884c17b..aebf818 100644
--- a/src/darwin/Framework/CHIP/CHIPDevicePairingDelegateBridge.h
+++ b/src/darwin/Framework/CHIP/CHIPDevicePairingDelegateBridge.h
@@ -16,7 +16,6 @@
  */
 
 #import "CHIPDevicePairingDelegate.h"
-#import <Foundation/Foundation.h>
 
 #include <controller/CHIPDeviceController.h>
 
diff --git a/src/darwin/Framework/CHIP/CHIPDevicePairingDelegateBridge.mm b/src/darwin/Framework/CHIP/CHIPDevicePairingDelegateBridge.mm
index c44c889..6a3d85b 100644
--- a/src/darwin/Framework/CHIP/CHIPDevicePairingDelegateBridge.mm
+++ b/src/darwin/Framework/CHIP/CHIPDevicePairingDelegateBridge.mm
@@ -17,7 +17,6 @@
 
 #import "CHIPDevicePairingDelegateBridge.h"
 #import "CHIPError.h"
-#import <Foundation/Foundation.h>
 
 CHIPDevicePairingDelegateBridge::CHIPDevicePairingDelegateBridge(void)
     : mDelegate(nil)
diff --git a/src/darwin/Framework/CHIP/CHIPDeviceStatusDelegate.h b/src/darwin/Framework/CHIP/CHIPDeviceStatusDelegate.h
deleted file mode 100644
index efa618b..0000000
--- a/src/darwin/Framework/CHIP/CHIPDeviceStatusDelegate.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- *
- *    Copyright (c) 2020 Project CHIP Authors
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-/**
- * The protocol definition for the CHIPDevicePairingDelegate
- *
- * All delegate methods will be called on the supplied Delegate Queue.
- */
-@protocol CHIPDeviceStatusDelegate <NSObject>
-@required
-/**
- * Notify the delegate when a message is received from the device
- *
- */
-- (void)onMessageReceived:(NSData *)message;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/src/darwin/Framework/CHIP/CHIPDeviceStatusDelegateBridge.h b/src/darwin/Framework/CHIP/CHIPDeviceStatusDelegateBridge.h
deleted file mode 100644
index c15cc93..0000000
--- a/src/darwin/Framework/CHIP/CHIPDeviceStatusDelegateBridge.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- *
- *    Copyright (c) 2020 Project CHIP Authors
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-
-#import "CHIPDeviceStatusDelegate.h"
-#import <Foundation/Foundation.h>
-
-#include <controller/CHIPDevice.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-class CHIPDeviceStatusDelegateBridge : public chip::Controller::DeviceStatusDelegate
-{
-public:
-    CHIPDeviceStatusDelegateBridge();
-    ~CHIPDeviceStatusDelegateBridge();
-
-    void setDelegate(id<CHIPDeviceStatusDelegate> delegate, dispatch_queue_t queue);
-
-    void OnMessage(chip::System::PacketBufferHandle message) override;
-
-    void OnStatusChange() override;
-
-private:
-    id<CHIPDeviceStatusDelegate> mDelegate;
-    dispatch_queue_t mQueue;
-};
-
-NS_ASSUME_NONNULL_END
diff --git a/src/darwin/Framework/CHIP/CHIPDeviceStatusDelegateBridge.mm b/src/darwin/Framework/CHIP/CHIPDeviceStatusDelegateBridge.mm
deleted file mode 100644
index fb020fb..0000000
--- a/src/darwin/Framework/CHIP/CHIPDeviceStatusDelegateBridge.mm
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- *
- *    Copyright (c) 2020 Project CHIP Authors
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-
-#import "CHIPDeviceStatusDelegateBridge.h"
-#import <Foundation/Foundation.h>
-
-CHIPDeviceStatusDelegateBridge::CHIPDeviceStatusDelegateBridge(void)
-    : mDelegate(nil)
-{
-}
-
-CHIPDeviceStatusDelegateBridge::~CHIPDeviceStatusDelegateBridge() {}
-
-void CHIPDeviceStatusDelegateBridge::setDelegate(id<CHIPDeviceStatusDelegate> delegate, dispatch_queue_t queue)
-{
-    if (delegate && queue) {
-        mDelegate = delegate;
-        mQueue = queue;
-    } else {
-        mDelegate = nil;
-        mQueue = nil;
-    }
-}
-
-void CHIPDeviceStatusDelegateBridge::OnMessage(chip::System::PacketBufferHandle message)
-{
-    NSLog(@"DeviceStatusDelegate received message from the device");
-
-    size_t data_len = message->DataLength();
-    // convert to NSData
-    NSMutableData * dataBuffer = [[NSMutableData alloc] initWithBytes:message->Start() length:data_len];
-    message.FreeHead();
-
-    while (!message.IsNull()) {
-        data_len = message->DataLength();
-        [dataBuffer appendBytes:message->Start() length:data_len];
-        message.FreeHead();
-    }
-
-    id<CHIPDeviceStatusDelegate> strongDelegate = mDelegate;
-    if (strongDelegate && mQueue) {
-        dispatch_async(mQueue, ^{
-            [strongDelegate onMessageReceived:dataBuffer];
-        });
-    }
-}
-
-void CHIPDeviceStatusDelegateBridge::OnStatusChange() { NSLog(@"CHIPDeviceStatusDelegateBridge device status changed"); }
diff --git a/src/darwin/Framework/CHIP/CHIPPersistentStorageDelegateBridge.h b/src/darwin/Framework/CHIP/CHIPPersistentStorageDelegateBridge.h
index 3468ecf..ff2fec0a 100644
--- a/src/darwin/Framework/CHIP/CHIPPersistentStorageDelegateBridge.h
+++ b/src/darwin/Framework/CHIP/CHIPPersistentStorageDelegateBridge.h
@@ -16,8 +16,8 @@
  */
 
 #import "CHIPPersistentStorageDelegate.h"
-#import <Foundation/Foundation.h>
 
+#import "CHIPError.h"
 #include <controller/CHIPPersistentStorageDelegate.h>
 
 NS_ASSUME_NONNULL_BEGIN
diff --git a/src/darwin/Framework/CHIP/CHIPPersistentStorageDelegateBridge.mm b/src/darwin/Framework/CHIP/CHIPPersistentStorageDelegateBridge.mm
index 294cc53..51ec2fa 100644
--- a/src/darwin/Framework/CHIP/CHIPPersistentStorageDelegateBridge.mm
+++ b/src/darwin/Framework/CHIP/CHIPPersistentStorageDelegateBridge.mm
@@ -16,8 +16,6 @@
  */
 
 #import "CHIPPersistentStorageDelegateBridge.h"
-#import "CHIPError.h"
-#import <Foundation/Foundation.h>
 
 CHIPPersistentStorageDelegateBridge::CHIPPersistentStorageDelegateBridge(void)
     : mDelegate(nil)
diff --git a/src/darwin/Framework/CHIP/chip-tool.zap b/src/darwin/Framework/CHIP/chip-tool.zap
new file mode 100644
index 0000000..55f4d7e
--- /dev/null
+++ b/src/darwin/Framework/CHIP/chip-tool.zap
@@ -0,0 +1,3087 @@
+{
+  "writeTime": "Wed Feb 03 2021 16:25:50 GMT+0100 (Central European Standard Time)",
+  "featureLevel": 6,
+  "creator": "zap",
+  "keyValuePairs": [
+    {
+      "key": "commandDiscovery",
+      "value": "1"
+    },
+    {
+      "key": "defaultResponsePolicy",
+      "value": "always"
+    },
+    {
+      "key": "manufacturerCodes",
+      "value": "0x1002"
+    }
+  ],
+  "package": [
+    {
+      "pathRelativity": "relativeToZap",
+      "path": "../../../src/app/zap-templates/zcl/zcl.json",
+      "version": "ZCL Test Data",
+      "type": "zcl-properties"
+    },
+    {
+      "pathRelativity": "relativeToZap",
+      "path": "../../../src/app/zap-templates/app-templates.json",
+      "version": "chip-v1",
+      "type": "gen-templates-json"
+    }
+  ],
+  "endpointTypes": [
+    {
+      "name": "Anonymous Endpoint Type",
+      "deviceTypeName": "CHIP-All-Clusters-Server",
+      "deviceTypeCode": 0,
+      "deviceTypeProfileId": 259,
+      "clusters": [
+        {
+          "name": "Basic",
+          "code": 0,
+          "mfgCode": null,
+          "define": "BASIC_CLUSTER",
+          "side": "client",
+          "enabled": 1,
+          "commands": [
+            {
+              "name": "ResetToFactoryDefaults",
+              "code": 0,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "MfgSpecificPing",
+              "code": 0,
+              "mfgCode": "0x1002",
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            }
+          ],
+          "attributes": [
+            {
+              "name": "cluster revision",
+              "code": 65533,
+              "mfgCode": null,
+              "side": "client",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "3",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            }
+          ]
+        },
+        {
+          "name": "Basic",
+          "code": 0,
+          "mfgCode": null,
+          "define": "BASIC_CLUSTER",
+          "side": "server",
+          "enabled": 0,
+          "commands": [],
+          "attributes": [
+            {
+              "name": "cluster revision",
+              "code": 65533,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "3",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "ZCL version",
+              "code": 0,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x08",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "power source",
+              "code": 7,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            }
+          ]
+        },
+        {
+          "name": "Identify",
+          "code": 3,
+          "mfgCode": null,
+          "define": "IDENTIFY_CLUSTER",
+          "side": "client",
+          "enabled": 1,
+          "commands": [
+            {
+              "name": "Identify",
+              "code": 0,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "IdentifyQuery",
+              "code": 1,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            }
+          ],
+          "attributes": [
+            {
+              "name": "cluster revision",
+              "code": 65533,
+              "mfgCode": null,
+              "side": "client",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "2",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            }
+          ]
+        },
+        {
+          "name": "Identify",
+          "code": 3,
+          "mfgCode": null,
+          "define": "IDENTIFY_CLUSTER",
+          "side": "server",
+          "enabled": 0,
+          "attributes": [
+            {
+              "name": "cluster revision",
+              "code": 65533,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "2",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "identify time",
+              "code": 0,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x0000",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            }
+          ],
+          "commands": [
+            {
+              "name": "IdentifyQueryResponse",
+              "code": 0,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            }
+          ]
+        },
+        {
+          "name": "Groups",
+          "code": 4,
+          "mfgCode": null,
+          "define": "GROUPS_CLUSTER",
+          "side": "client",
+          "enabled": 1,
+          "commands": [
+            {
+              "name": "AddGroup",
+              "code": 0,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "ViewGroup",
+              "code": 1,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "GetGroupMembership",
+              "code": 2,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "RemoveGroup",
+              "code": 3,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "RemoveAllGroups",
+              "code": 4,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "AddGroupIfIdentifying",
+              "code": 5,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            }
+          ],
+          "attributes": [
+            {
+              "name": "cluster revision",
+              "code": 65533,
+              "mfgCode": null,
+              "side": "client",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "3",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            }
+          ]
+        },
+        {
+          "name": "Groups",
+          "code": 4,
+          "mfgCode": null,
+          "define": "GROUPS_CLUSTER",
+          "side": "server",
+          "enabled": 0,
+          "commands": [
+            {
+              "name": "AddGroupResponse",
+              "code": 0,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "ViewGroupResponse",
+              "code": 1,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "GetGroupMembershipResponse",
+              "code": 2,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "RemoveGroupResponse",
+              "code": 3,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            }
+          ],
+          "attributes": [
+            {
+              "name": "cluster revision",
+              "code": 65533,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "3",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "name support",
+              "code": 0,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            }
+          ]
+        },
+        {
+          "name": "Scenes",
+          "code": 5,
+          "mfgCode": null,
+          "define": "SCENES_CLUSTER",
+          "side": "client",
+          "enabled": 1,
+          "commands": [
+            {
+              "name": "AddScene",
+              "code": 0,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "ViewScene",
+              "code": 1,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "RemoveScene",
+              "code": 2,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "RemoveAllScenes",
+              "code": 3,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "StoreScene",
+              "code": 4,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "RecallScene",
+              "code": 5,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "GetSceneMembership",
+              "code": 6,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            }
+          ],
+          "attributes": [
+            {
+              "name": "cluster revision",
+              "code": 65533,
+              "mfgCode": null,
+              "side": "client",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "3",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            }
+          ]
+        },
+        {
+          "name": "Scenes",
+          "code": 5,
+          "mfgCode": null,
+          "define": "SCENES_CLUSTER",
+          "side": "server",
+          "enabled": 0,
+          "commands": [
+            {
+              "name": "AddSceneResponse",
+              "code": 0,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "ViewSceneResponse",
+              "code": 1,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "RemoveSceneResponse",
+              "code": 2,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "RemoveAllScenesResponse",
+              "code": 3,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "StoreSceneResponse",
+              "code": 4,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "GetSceneMembershipResponse",
+              "code": 6,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            }
+          ],
+          "attributes": [
+            {
+              "name": "cluster revision",
+              "code": 65533,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "3",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "scene count",
+              "code": 0,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "current scene",
+              "code": 1,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "current group",
+              "code": 2,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x0000",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "scene valid",
+              "code": 3,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "name support",
+              "code": 4,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            }
+          ]
+        },
+        {
+          "name": "On/off",
+          "code": 6,
+          "mfgCode": null,
+          "define": "ON_OFF_CLUSTER",
+          "side": "client",
+          "enabled": 1,
+          "commands": [
+            {
+              "name": "Off",
+              "code": 0,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "On",
+              "code": 1,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "Toggle",
+              "code": 2,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            }
+          ],
+          "attributes": [
+            {
+              "name": "cluster revision",
+              "code": 65533,
+              "mfgCode": null,
+              "side": "client",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "2",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            }
+          ]
+        },
+        {
+          "name": "On/off",
+          "code": 6,
+          "mfgCode": null,
+          "define": "ON_OFF_CLUSTER",
+          "side": "server",
+          "enabled": 0,
+          "commands": [],
+          "attributes": [
+            {
+              "name": "cluster revision",
+              "code": 65533,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "2",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "on/off",
+              "code": 0,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            }
+          ]
+        },
+        {
+          "name": "Level Control",
+          "code": 8,
+          "mfgCode": null,
+          "define": "LEVEL_CONTROL_CLUSTER",
+          "side": "client",
+          "enabled": 1,
+          "commands": [
+            {
+              "name": "MoveToLevel",
+              "code": 0,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "Move",
+              "code": 1,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "Step",
+              "code": 2,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "Stop",
+              "code": 3,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "MoveToLevelWithOnOff",
+              "code": 4,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "MoveWithOnOff",
+              "code": 5,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "StepWithOnOff",
+              "code": 6,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "StopWithOnOff",
+              "code": 7,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            }
+          ],
+          "attributes": [
+            {
+              "name": "cluster revision",
+              "code": 65533,
+              "mfgCode": null,
+              "side": "client",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "3",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            }
+          ]
+        },
+        {
+          "name": "Level Control",
+          "code": 8,
+          "mfgCode": null,
+          "define": "LEVEL_CONTROL_CLUSTER",
+          "side": "server",
+          "enabled": 0,
+          "commands": [],
+          "attributes": [
+            {
+              "name": "cluster revision",
+              "code": 65533,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "3",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "current level",
+              "code": 0,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            }
+          ]
+        },
+        {
+          "name": "Door Lock",
+          "code": 257,
+          "mfgCode": null,
+          "define": "DOOR_LOCK_CLUSTER",
+          "side": "client",
+          "enabled": 1,
+          "commands": [
+            {
+              "name": "LockDoor",
+              "code": 0,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "UnlockDoor",
+              "code": 1,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "UnlockWithTimeout",
+              "code": 3,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "GetLogRecord",
+              "code": 4,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "SetPin",
+              "code": 5,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "GetPin",
+              "code": 6,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "ClearPin",
+              "code": 7,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "ClearAllPins",
+              "code": 8,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "SetWeekdaySchedule",
+              "code": 11,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "GetWeekdaySchedule",
+              "code": 12,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "ClearWeekdaySchedule",
+              "code": 13,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "SetYeardaySchedule",
+              "code": 14,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "GetYeardaySchedule",
+              "code": 15,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "ClearYeardaySchedule",
+              "code": 16,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "SetHolidaySchedule",
+              "code": 17,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "GetHolidaySchedule",
+              "code": 18,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "ClearHolidaySchedule",
+              "code": 19,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "SetUserType",
+              "code": 20,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "GetUserType",
+              "code": 21,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "SetRfid",
+              "code": 22,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "GetRfid",
+              "code": 23,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "ClearRfid",
+              "code": 24,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "ClearAllRfids",
+              "code": 25,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            }
+          ],
+          "attributes": [
+            {
+              "name": "cluster revision",
+              "code": 65533,
+              "mfgCode": null,
+              "side": "client",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "3",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            }
+          ]
+        },
+        {
+          "name": "Door Lock",
+          "code": 257,
+          "mfgCode": null,
+          "define": "DOOR_LOCK_CLUSTER",
+          "side": "server",
+          "enabled": 0,
+          "commands": [
+            {
+              "name": "LockDoorResponse",
+              "code": 0,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "UnlockDoorResponse",
+              "code": 1,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "UnlockWithTimeoutResponse",
+              "code": 3,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "GetLogRecordResponse",
+              "code": 4,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "SetPinResponse",
+              "code": 5,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "GetPinResponse",
+              "code": 6,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "ClearPinResponse",
+              "code": 7,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "ClearAllPinsResponse",
+              "code": 8,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "SetUserStatusResponse",
+              "code": 9,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 0,
+              "outgoing": 0
+            },
+            {
+              "name": "GetUserStatusResponse",
+              "code": 10,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 0,
+              "outgoing": 0
+            },
+            {
+              "name": "SetWeekdayScheduleResponse",
+              "code": 11,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "GetWeekdayScheduleResponse",
+              "code": 12,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "ClearWeekdayScheduleResponse",
+              "code": 13,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "SetYeardayScheduleResponse",
+              "code": 14,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "GetYeardayScheduleResponse",
+              "code": 15,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "ClearYeardayScheduleResponse",
+              "code": 16,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "SetHolidayScheduleResponse",
+              "code": 17,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "GetHolidayScheduleResponse",
+              "code": 18,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "ClearHolidayScheduleResponse",
+              "code": 19,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "SetUserTypeResponse",
+              "code": 20,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "GetUserTypeResponse",
+              "code": 21,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "SetRfidResponse",
+              "code": 22,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "GetRfidResponse",
+              "code": 23,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "ClearRfidResponse",
+              "code": 24,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "ClearAllRfidsResponse",
+              "code": 25,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            }
+          ],
+          "attributes": [
+            {
+              "name": "cluster revision",
+              "code": 65533,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "3",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "lock state",
+              "code": 0,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "lock type",
+              "code": 1,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "actuator enabled",
+              "code": 2,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "door state",
+              "code": 3,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "enable logging",
+              "code": 32,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "language",
+              "code": 33,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "led settings",
+              "code": 34,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "auto relock time",
+              "code": 35,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "sound volume",
+              "code": 36,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "operating mode",
+              "code": 37,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "default configuration register",
+              "code": 39,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "enable local programming",
+              "code": 40,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x01",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "enable one touch locking",
+              "code": 41,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "enable inside status led",
+              "code": 42,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "enable privacy mode button",
+              "code": 43,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "wrong code entry limit",
+              "code": 48,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "user code temporary disable time",
+              "code": 49,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "send pin over the air",
+              "code": 50,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "require pin for rf operation",
+              "code": 51,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "zigbee security level",
+              "code": 52,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "alarm mask",
+              "code": 64,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x0000",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "keypad operation event mask",
+              "code": 65,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x0000",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "RF operation event mask",
+              "code": 66,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x0000",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "manual operation event mask",
+              "code": 67,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x0000",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "rfid operation event mask",
+              "code": 68,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x0000",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "keypad programming event mask",
+              "code": 69,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x0000",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "rf programming event mask",
+              "code": 70,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x0000",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "rfid programming event mask",
+              "code": 71,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x0000",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            }
+          ]
+        },
+        {
+          "name": "Barrier Control",
+          "code": 259,
+          "mfgCode": null,
+          "define": "BARRIER_CONTROL_CLUSTER",
+          "side": "client",
+          "enabled": 1,
+          "commands": [
+            {
+              "name": "BarrierControlGoToPercent",
+              "code": 0,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "BarrierControlStop",
+              "code": 1,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            }
+          ],
+          "attributes": [
+            {
+              "name": "cluster revision",
+              "code": 65533,
+              "mfgCode": null,
+              "side": "client",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x0001",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            }
+          ]
+        },
+        {
+          "name": "Barrier Control",
+          "code": 259,
+          "mfgCode": null,
+          "define": "BARRIER_CONTROL_CLUSTER",
+          "side": "server",
+          "enabled": 0,
+          "commands": [],
+          "attributes": [
+            {
+              "name": "cluster revision",
+              "code": 65533,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x0001",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "barrier moving state",
+              "code": 1,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "barrier safety status",
+              "code": 2,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "barrier capabilities",
+              "code": 3,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "barrier position",
+              "code": 10,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            }
+          ]
+        },
+        {
+          "name": "Color Control",
+          "code": 768,
+          "mfgCode": null,
+          "define": "COLOR_CONTROL_CLUSTER",
+          "side": "client",
+          "enabled": 1,
+          "commands": [
+            {
+              "name": "MoveToHue",
+              "code": 0,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "MoveHue",
+              "code": 1,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "StepHue",
+              "code": 2,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "MoveToSaturation",
+              "code": 3,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "MoveSaturation",
+              "code": 4,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "StepSaturation",
+              "code": 5,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "MoveToHueAndSaturation",
+              "code": 6,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "MoveToColor",
+              "code": 7,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "MoveColor",
+              "code": 8,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "StepColor",
+              "code": 9,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "MoveToColorTemperature",
+              "code": 10,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "StopMoveStep",
+              "code": 71,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "MoveColorTemperature",
+              "code": 75,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "StepColorTemperature",
+              "code": 76,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            }
+          ],
+          "attributes": [
+            {
+              "name": "cluster revision",
+              "code": 65533,
+              "mfgCode": null,
+              "side": "client",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "3",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            }
+          ]
+        },
+        {
+          "name": "Color Control",
+          "code": 768,
+          "mfgCode": null,
+          "define": "COLOR_CONTROL_CLUSTER",
+          "side": "server",
+          "enabled": 0,
+          "commands": [],
+          "attributes": [
+            {
+              "name": "cluster revision",
+              "code": 65533,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "3",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "current hue",
+              "code": 0,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "current saturation",
+              "code": 1,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "remaining time",
+              "code": 2,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x0000",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "current x",
+              "code": 3,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x616B",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "current y",
+              "code": 4,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x607D",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "drift compensation",
+              "code": 5,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "compensation text",
+              "code": 6,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "color temperature",
+              "code": 7,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00FA",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "color mode",
+              "code": 8,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x01",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "color control options",
+              "code": 15,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "number of primaries",
+              "code": 16,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "primary 1 x",
+              "code": 17,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "primary 1 y",
+              "code": 18,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "primary 1 intensity",
+              "code": 19,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "primary 2 x",
+              "code": 21,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "primary 2 y",
+              "code": 22,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "primary 2 intensity",
+              "code": 23,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "primary 3 x",
+              "code": 25,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "primary 3 y",
+              "code": 26,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "primary 3 intensity",
+              "code": 27,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "primary 4 x",
+              "code": 32,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "primary 4 y",
+              "code": 33,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "primary 4 intensity",
+              "code": 34,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "primary 5 x",
+              "code": 36,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "primary 5 y",
+              "code": 37,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "primary 5 intensity",
+              "code": 38,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "primary 6 x",
+              "code": 40,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "primary 6 y",
+              "code": 41,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "primary 6 intensity",
+              "code": 42,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "white point x",
+              "code": 48,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "white point y",
+              "code": 49,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "color point r x",
+              "code": 50,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "color point r y",
+              "code": 51,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "color point r intensity",
+              "code": 52,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "color point g x",
+              "code": 54,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "color point g y",
+              "code": 55,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "color point g intensity",
+              "code": 56,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "color point b x",
+              "code": 58,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "color point b y",
+              "code": 59,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "color point b intensity",
+              "code": 60,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "couple color temp to level min-mireds",
+              "code": 16397,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "start up color temperature mireds",
+              "code": 16400,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "enhanced current hue",
+              "code": 16384,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x0000",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "enhanced color mode",
+              "code": 16385,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x01",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "color loop active",
+              "code": 16386,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "color loop direction",
+              "code": 16387,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "color loop time",
+              "code": 16388,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x0019",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "color capabilities",
+              "code": 16394,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x0000",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "color temp physical min",
+              "code": 16395,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x0000",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "color temp physical max",
+              "code": 16396,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0xFEFF",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            }
+          ]
+        },
+        {
+          "name": "Temperature Measurement",
+          "code": 1026,
+          "mfgCode": null,
+          "define": "TEMP_MEASUREMENT_CLUSTER",
+          "side": "client",
+          "enabled": 1,
+          "commands": [],
+          "attributes": [
+            {
+              "name": "cluster revision",
+              "code": 65533,
+              "mfgCode": null,
+              "side": "client",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "3",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            }
+          ]
+        },
+        {
+          "name": "Temperature Measurement",
+          "code": 1026,
+          "mfgCode": null,
+          "define": "TEMP_MEASUREMENT_CLUSTER",
+          "side": "server",
+          "enabled": 0,
+          "commands": [],
+          "attributes": [
+            {
+              "name": "cluster revision",
+              "code": 65533,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "3",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "measured value",
+              "code": 0,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x8000",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "min measured value",
+              "code": 1,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x8000",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "max measured value",
+              "code": 2,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x8000",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "tolerance",
+              "code": 3,
+              "mfgCode": null,
+              "side": "server",
+              "included": 0,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 1,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            }
+          ]
+        },
+        {
+          "name": "IAS Zone",
+          "code": 1280,
+          "mfgCode": null,
+          "define": "IAS_ZONE_CLUSTER",
+          "side": "client",
+          "enabled": 0,
+          "commands": [
+            {
+              "name": "ZoneEnrollResponse",
+              "code": 0,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            }
+          ],
+          "attributes": [
+            {
+              "name": "cluster revision",
+              "code": 65533,
+              "mfgCode": null,
+              "side": "client",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "2",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            }
+          ]
+        },
+        {
+          "name": "IAS Zone",
+          "code": 1280,
+          "mfgCode": null,
+          "define": "IAS_ZONE_CLUSTER",
+          "side": "server",
+          "enabled": 0,
+          "commands": [
+            {
+              "name": "ZoneStatusChangeNotification",
+              "code": 0,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "ZoneEnrollRequest",
+              "code": 1,
+              "mfgCode": null,
+              "source": "server",
+              "incoming": 1,
+              "outgoing": 1
+            }
+          ],
+          "attributes": [
+            {
+              "name": "cluster revision",
+              "code": 65533,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "2",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "zone state",
+              "code": 0,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x00",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "zone type",
+              "code": 1,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "zone status",
+              "code": 2,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x0000",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "IAS CIE address",
+              "code": 16,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            },
+            {
+              "name": "Zone ID",
+              "code": 17,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0xff",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            }
+          ]
+        },
+        {
+          "name": "Binding",
+          "code": 61440,
+          "mfgCode": null,
+          "define": "BINDING_CLUSTER",
+          "side": "client",
+          "enabled": 1,
+          "commands": [
+            {
+              "name": "Bind",
+              "code": 0,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            },
+            {
+              "name": "Unbind",
+              "code": 1,
+              "mfgCode": null,
+              "source": "client",
+              "incoming": 1,
+              "outgoing": 1
+            }
+          ],
+          "attributes": [
+            {
+              "name": "cluster revision",
+              "code": 65533,
+              "mfgCode": null,
+              "side": "client",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x0001",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            }
+          ]
+        },
+        {
+          "name": "Binding",
+          "code": 61440,
+          "mfgCode": null,
+          "define": "BINDING_CLUSTER",
+          "side": "server",
+          "enabled": 0,
+          "commands": [],
+          "attributes": [
+            {
+              "name": "cluster revision",
+              "code": 65533,
+              "mfgCode": null,
+              "side": "server",
+              "included": 1,
+              "storageOption": "RAM",
+              "singleton": 0,
+              "bounded": 0,
+              "defaultValue": "0x0001",
+              "reportable": 0,
+              "minInterval": 0,
+              "maxInterval": 65344,
+              "reportableChange": 0
+            }
+          ]
+        }
+      ]
+    }
+  ],
+  "endpoints": [
+    {
+      "endpointTypeName": "Anonymous Endpoint Type",
+      "endpointTypeIndex": 0,
+      "endpointTypeRef": 1,
+      "profileId": "0x0103",
+      "endpointId": 1,
+      "networkId": 0
+    }
+  ]
+}
\ No newline at end of file
diff --git a/src/darwin/Framework/CHIP/gen/CHIPClientCallbacks.cpp b/src/darwin/Framework/CHIP/gen/CHIPClientCallbacks.cpp
new file mode 100644
index 0000000..58b3d84
--- /dev/null
+++ b/src/darwin/Framework/CHIP/gen/CHIPClientCallbacks.cpp
@@ -0,0 +1,1567 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+#include "gen/CHIPClientCallbacks.h"
+
+#include "gen/enums.h"
+#include <app/util/CHIPDeviceCallbacksMgr.h>
+#include <app/util/af-enums.h>
+#include <app/util/af.h>
+#include <app/util/basic-types.h>
+#include <core/CHIPEncoding.h>
+#include <support/SafeInt.h>
+#include <support/logging/CHIPLogging.h>
+
+using namespace ::chip;
+
+#define CHECK_MESSAGE_LENGTH(value)                                                                                                \
+    if (!chip::CanCastTo<uint16_t>(value))                                                                                         \
+    {                                                                                                                              \
+        ChipLogError(Zcl, "CHECK_MESSAGE_LENGTH expects a uint16_t value, got: %d", value);                                        \
+        if (onFailureCallback != nullptr)                                                                                          \
+        {                                                                                                                          \
+            Callback::Callback<DefaultFailureCallback> * cb =                                                                      \
+                Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);                                     \
+            cb->mCall(cb->mContext, static_cast<uint8_t>(EMBER_ZCL_STATUS_INVALID_VALUE));                                         \
+        }                                                                                                                          \
+        return true;                                                                                                               \
+    }                                                                                                                              \
+                                                                                                                                   \
+    if (messageLen < value)                                                                                                        \
+    {                                                                                                                              \
+        ChipLogError(Zcl, "Unexpected response length: %d", messageLen);                                                           \
+        if (onFailureCallback != nullptr)                                                                                          \
+        {                                                                                                                          \
+            Callback::Callback<DefaultFailureCallback> * cb =                                                                      \
+                Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);                                     \
+            cb->mCall(cb->mContext, static_cast<uint8_t>(EMBER_ZCL_STATUS_INVALID_VALUE));                                         \
+        }                                                                                                                          \
+        return true;                                                                                                               \
+    }                                                                                                                              \
+                                                                                                                                   \
+    messageLen = static_cast<uint16_t>(messageLen - static_cast<uint16_t>(value));
+
+#define GET_RESPONSE_CALLBACKS(name)                                                                                               \
+    Callback::Cancelable * onSuccessCallback = nullptr;                                                                            \
+    Callback::Cancelable * onFailureCallback = nullptr;                                                                            \
+    NodeId sourceId                          = emberAfCurrentCommand()->source;                                                    \
+    uint8_t sequenceNumber                   = emberAfCurrentCommand()->seqNum;                                                    \
+    CHIP_ERROR err = gCallbacks.GetResponseCallback(sourceId, sequenceNumber, &onSuccessCallback, &onFailureCallback);             \
+                                                                                                                                   \
+    if (CHIP_NO_ERROR != err)                                                                                                      \
+    {                                                                                                                              \
+        if (onSuccessCallback == nullptr)                                                                                          \
+        {                                                                                                                          \
+            ChipLogDetail(Zcl, "%s: Missing success callback", name);                                                              \
+        }                                                                                                                          \
+                                                                                                                                   \
+        if (onFailureCallback == nullptr)                                                                                          \
+        {                                                                                                                          \
+            ChipLogDetail(Zcl, "%s: Missing failure callback", name);                                                              \
+        }                                                                                                                          \
+                                                                                                                                   \
+        return true;                                                                                                               \
+    }
+
+#define GET_REPORT_CALLBACK(name)                                                                                                  \
+    Callback::Cancelable * onReportCallback = nullptr;                                                                             \
+    CHIP_ERROR err = gCallbacks.GetReportCallback(sourceId, endpointId, clusterId, attributeId, &onReportCallback);                \
+                                                                                                                                   \
+    if (CHIP_NO_ERROR != err)                                                                                                      \
+    {                                                                                                                              \
+        if (onReportCallback == nullptr)                                                                                           \
+        {                                                                                                                          \
+            ChipLogDetail(Zcl, "%s: Missing report callback", name);                                                               \
+        }                                                                                                                          \
+                                                                                                                                   \
+        return true;                                                                                                               \
+    }
+
+void LogStatus(uint8_t status)
+{
+    switch (status)
+    {
+    case EMBER_ZCL_STATUS_SUCCESS:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_SUCCESS (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_FAILURE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_FAILURE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_NOT_AUTHORIZED:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_NOT_AUTHORIZED (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_MALFORMED_COMMAND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_MALFORMED_COMMAND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNSUP_COMMAND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNSUP_CLUSTER_COMMAND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNSUP_GENERAL_COMMAND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNSUP_GENERAL_COMMAND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNSUP_MANUF_CLUSTER_COMMAND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNSUP_MANUF_CLUSTER_COMMAND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNSUP_MANUF_GENERAL_COMMAND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNSUP_MANUF_GENERAL_COMMAND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INVALID_FIELD:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INVALID_FIELD (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNSUPPORTED_ATTRIBUTE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNSUPPORTED_ATTRIBUTE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INVALID_VALUE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INVALID_VALUE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_READ_ONLY:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_READ_ONLY (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INSUFFICIENT_SPACE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INSUFFICIENT_SPACE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_DUPLICATE_EXISTS:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_DUPLICATE_EXISTS (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_NOT_FOUND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_NOT_FOUND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNREPORTABLE_ATTRIBUTE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNREPORTABLE_ATTRIBUTE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INVALID_DATA_TYPE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INVALID_DATA_TYPE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INVALID_SELECTOR:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INVALID_SELECTOR (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_WRITE_ONLY:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_WRITE_ONLY (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INCONSISTENT_STARTUP_STATE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INCONSISTENT_STARTUP_STATE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_DEFINED_OUT_OF_BAND:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_DEFINED_OUT_Of_BAND (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_ACTION_DENIED:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_ACTION_DENIED (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_TIMEOUT:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_TIMEOUT (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_ABORT:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_ABORT (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_INVALID_IMAGE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_INVALID_IMAGE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_WAIT_FOR_DATA:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_WAIT_FOR_DATA (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_NO_IMAGE_AVAILABLE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_NO_IMAGE_AVAILABLE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_REQUIRE_MORE_IMAGE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_REQUIRE_MORE_IMAGE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_HARDWARE_FAILURE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_HARDWARE_FAILURE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_SOFTWARE_FAILURE:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_SOFTWARE_FAILURE (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_UNSUPPORTED_CLUSTER:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_UNSUPPORTED_CLUSTER (0x%02x)", status);
+        break;
+    case EMBER_ZCL_STATUS_LIMIT_REACHED:
+        ChipLogProgress(Zcl, "  status: EMBER_ZCL_STATUS_LIMIT_REACHED (0x%02x)", status);
+        break;
+    default:
+        ChipLogError(Zcl, "Unknow status: 0x%02x", status);
+        break;
+    }
+}
+
+// Singleton instance of the callbacks manager
+app::CHIPDeviceCallbacksMgr & gCallbacks = app::CHIPDeviceCallbacksMgr::GetInstance();
+
+bool emberAfDefaultResponseCallback(ClusterId clusterId, CommandId commandId, EmberAfStatus status)
+{
+    ChipLogProgress(Zcl, "DefaultResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+    ChipLogProgress(Zcl, "  CommandId: 0x%02x", commandId);
+    LogStatus(status);
+
+    GET_RESPONSE_CALLBACKS("emberAfDefaultResponseCallback");
+    if (status == EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultSuccessCallback> * cb =
+            Callback::Callback<DefaultSuccessCallback>::FromCancelable(onSuccessCallback);
+        cb->mCall(cb->mContext);
+    }
+    else
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, static_cast<uint8_t>(status));
+    }
+
+    return true;
+}
+
+bool emberAfReadAttributesResponseCallback(ClusterId clusterId, uint8_t * message, uint16_t messageLen)
+{
+    ChipLogProgress(Zcl, "ReadAttributesResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+
+    GET_RESPONSE_CALLBACKS("emberAfReadAttributesResponseCallback");
+
+    // struct readAttributeResponseRecord[]
+    while (messageLen)
+    {
+        CHECK_MESSAGE_LENGTH(2);
+        uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+        ChipLogProgress(Zcl, "  attributeId: 0x%04x", attributeId);
+
+        CHECK_MESSAGE_LENGTH(1);
+        uint8_t status = chip::Encoding::Read8(message); // zclStatus
+        LogStatus(status);
+
+        if (status == EMBER_ZCL_STATUS_SUCCESS)
+        {
+            CHECK_MESSAGE_LENGTH(1);
+            uint8_t attributeType = chip::Encoding::Read8(message);
+            ChipLogProgress(Zcl, "  attributeType: 0x%02x", attributeType);
+
+            switch (attributeType)
+            {
+            case 0x00: // nodata / No data
+            case 0x0A: // data24 / 24-bit data
+            case 0x0C: // data40 / 40-bit data
+            case 0x0D: // data48 / 48-bit data
+            case 0x0E: // data56 / 56-bit data
+            case 0x1A: // map24 / 24-bit bitmap
+            case 0x1C: // map40 / 40-bit bitmap
+            case 0x1D: // map48 / 48-bit bitmap
+            case 0x1E: // map56 / 56-bit bitmap
+            case 0x22: // uint24 / Unsigned 24-bit integer
+            case 0x24: // uint40 / Unsigned 40-bit integer
+            case 0x25: // uint48 / Unsigned 48-bit integer
+            case 0x26: // uint56 / Unsigned 56-bit integer
+            case 0x2A: // int24 / Signed 24-bit integer
+            case 0x2C: // int40 / Signed 40-bit integer
+            case 0x2D: // int48 / Signed 48-bit integer
+            case 0x2E: // int56 / Signed 56-bit integer
+            case 0x38: // semi / Semi-precision
+            case 0x39: // single / Single precision
+            case 0x3A: // double / Double precision
+            case 0x41: // octstr / Octet string
+            case 0x42: // string / Character string
+            case 0x43: // octstr16 / Long octet string
+            case 0x44: // string16 / Long character string
+            case 0x48: // array / Array
+            case 0x49: // struct / Structure
+            case 0x50: // set / Set
+            case 0x51: // bag / Bag
+            case 0xE0: // ToD / Time of day
+            {
+                ChipLogError(Zcl, "attributeType 0x%02x is not supported", attributeType);
+                Callback::Callback<DefaultFailureCallback> * cb =
+                    Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+                cb->mCall(cb->mContext, EMBER_ZCL_STATUS_INVALID_VALUE);
+                return true;
+            }
+
+            case 0x08: // data8 / 8-bit data
+            case 0x18: // map8 / 8-bit bitmap
+            case 0x20: // uint8 / Unsigned  8-bit integer
+            case 0x30: // enum8 / 8-bit enumeration
+            {
+                CHECK_MESSAGE_LENGTH(1);
+                uint8_t value = chip::Encoding::Read8(message);
+                ChipLogProgress(Zcl, "  value: 0x%02x", value);
+
+                Callback::Callback<Int8uAttributeCallback> * cb =
+                    Callback::Callback<Int8uAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x09: // data16 / 16-bit data
+            case 0x19: // map16 / 16-bit bitmap
+            case 0x21: // uint16 / Unsigned 16-bit integer
+            case 0x31: // enum16 / 16-bit enumeration
+            case 0xE8: // clusterId / Cluster ID
+            case 0xE9: // attribId / Attribute ID
+            case 0xEA: // bacOID / BACnet OID
+            case 0xF1: // key128 / 128-bit security key
+            case 0xFF: // unk / Unknown
+            {
+                CHECK_MESSAGE_LENGTH(2);
+                uint16_t value = chip::Encoding::LittleEndian::Read16(message);
+                ChipLogProgress(Zcl, "  value: 0x%04x", value);
+
+                Callback::Callback<Int16uAttributeCallback> * cb =
+                    Callback::Callback<Int16uAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x0B: // data32 / 32-bit data
+            case 0x1B: // map32 / 32-bit bitmap
+            case 0x23: // uint32 / Unsigned 32-bit integer
+            case 0xE1: // date / Date
+            case 0xE2: // UTC / UTCTime
+            {
+                CHECK_MESSAGE_LENGTH(4);
+                uint32_t value = chip::Encoding::LittleEndian::Read32(message);
+                ChipLogProgress(Zcl, "  value: 0x%08x", value);
+
+                Callback::Callback<Int32uAttributeCallback> * cb =
+                    Callback::Callback<Int32uAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x0F: // data64 / 64-bit data
+            case 0x1F: // map64 / 64-bit bitmap
+            case 0x27: // uint64 / Unsigned 64-bit integer
+            case 0xF0: // EUI64 / IEEE address
+            {
+                CHECK_MESSAGE_LENGTH(8);
+                uint64_t value = chip::Encoding::LittleEndian::Read64(message);
+                ChipLogProgress(Zcl, "  value: 0x%16x", value);
+
+                Callback::Callback<Int64uAttributeCallback> * cb =
+                    Callback::Callback<Int64uAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x10: // bool / Boolean
+            {
+                CHECK_MESSAGE_LENGTH(1);
+                uint8_t value = chip::Encoding::Read8(message);
+                ChipLogProgress(Zcl, "  value: %d", value);
+
+                Callback::Callback<BooleanAttributeCallback> * cb =
+                    Callback::Callback<BooleanAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x28: // int8 / Signed 8-bit integer
+            {
+                CHECK_MESSAGE_LENGTH(1);
+                int8_t value = chip::CastToSigned(chip::Encoding::Read8(message));
+                ChipLogProgress(Zcl, "  value: %" PRId8, value);
+
+                Callback::Callback<Int8sAttributeCallback> * cb =
+                    Callback::Callback<Int8sAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x29: // int16 / Signed 16-bit integer
+            {
+                CHECK_MESSAGE_LENGTH(2);
+                int16_t value = chip::CastToSigned(chip::Encoding::LittleEndian::Read16(message));
+                ChipLogProgress(Zcl, "  value: %" PRId16, value);
+
+                Callback::Callback<Int16sAttributeCallback> * cb =
+                    Callback::Callback<Int16sAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x2B: // int32 / Signed 32-bit integer
+            {
+                CHECK_MESSAGE_LENGTH(4);
+                int32_t value = chip::CastToSigned(chip::Encoding::LittleEndian::Read32(message));
+                ChipLogProgress(Zcl, "  value: %" PRId32, value);
+
+                Callback::Callback<Int32sAttributeCallback> * cb =
+                    Callback::Callback<Int32sAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+
+            case 0x2F: // int64 / Signed 64-bit integer
+            {
+                CHECK_MESSAGE_LENGTH(8);
+                int64_t value = chip::CastToSigned(chip::Encoding::LittleEndian::Read64(message));
+                ChipLogProgress(Zcl, "  value: %" PRId64, value);
+
+                Callback::Callback<Int64sAttributeCallback> * cb =
+                    Callback::Callback<Int64sAttributeCallback>::FromCancelable(onSuccessCallback);
+                cb->mCall(cb->mContext, value);
+                break;
+            }
+            }
+        }
+        else
+        {
+            Callback::Callback<DefaultFailureCallback> * cb =
+                Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+            cb->mCall(cb->mContext, status);
+        }
+
+        // The current code is written matching the current API where there is a single attribute read
+        // per read command. So if multiple attributes are read at the same time, something is wrong
+        // somewhere.
+        if (messageLen)
+        {
+            ChipLogError(Zcl, "Multiple attributes read at the same time. Something went wrong.");
+            break;
+        }
+    }
+
+    return true;
+}
+
+bool emberAfWriteAttributesResponseCallback(ClusterId clusterId, uint8_t * message, uint16_t messageLen)
+{
+    ChipLogProgress(Zcl, "WriteAttributesResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+
+    GET_RESPONSE_CALLBACKS("emberAfWriteAttributesResponseCallback");
+
+    // struct writeAttributeResponseRecord[]
+    while (messageLen)
+    {
+        CHECK_MESSAGE_LENGTH(1);
+        uint8_t status = chip::Encoding::Read8(message); // zclStatus
+        LogStatus(status);
+
+        if (status == EMBER_ZCL_STATUS_SUCCESS)
+        {
+            Callback::Callback<DefaultSuccessCallback> * cb =
+                Callback::Callback<DefaultSuccessCallback>::FromCancelable(onSuccessCallback);
+            cb->mCall(cb->mContext);
+        }
+        else
+        {
+            CHECK_MESSAGE_LENGTH(2);
+            uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+            ChipLogProgress(Zcl, "  attributeId: 0x%04x", attributeId);
+
+            Callback::Callback<DefaultFailureCallback> * cb =
+                Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+            cb->mCall(cb->mContext, status);
+        }
+
+        // The current code is written matching the current API where there is a single attribute written
+        // per write command. So if multiple attributes are written at the same time, something is wrong
+        // somewhere.
+        if (messageLen)
+        {
+            ChipLogError(Zcl, "Multiple attributes written at the same time. Something went wrong.");
+            break;
+        }
+    }
+
+    return true;
+}
+
+bool emberAfConfigureReportingResponseCallback(ClusterId clusterId, uint8_t * message, uint16_t messageLen)
+{
+    ChipLogProgress(Zcl, "ConfigureReportingResponseCallback:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+
+    GET_RESPONSE_CALLBACKS("emberAfConfigureReportingResponseCallback");
+
+    // struct configureReportingResponseRecord[]
+    while (messageLen)
+    {
+        CHECK_MESSAGE_LENGTH(1);
+        uint8_t status = chip::Encoding::Read8(message); // zclStatus
+        LogStatus(status);
+
+        if (status == EMBER_ZCL_STATUS_SUCCESS)
+        {
+            Callback::Callback<DefaultSuccessCallback> * cb =
+                Callback::Callback<DefaultSuccessCallback>::FromCancelable(onSuccessCallback);
+            cb->mCall(cb->mContext);
+        }
+        else
+        {
+            CHECK_MESSAGE_LENGTH(1);
+            uint8_t direction = chip::Encoding::Read8(message); // reportingRole
+            ChipLogProgress(Zcl, "  direction: 0x%02x", direction);
+
+            CHECK_MESSAGE_LENGTH(2);
+            uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+            ChipLogProgress(Zcl, "  attributeId: 0x%04x", attributeId);
+
+            Callback::Callback<DefaultFailureCallback> * cb =
+                Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+            cb->mCall(cb->mContext, status);
+        }
+
+        // The current code is written matching the current API where there is a single attribute report
+        // per configure command. So if multiple attributes are configured at the same time, something is wrong
+        // somewhere.
+        if (messageLen)
+        {
+            ChipLogError(Zcl, "Multiple attributes reports configured at the same time. Something went wrong.");
+            break;
+        }
+    }
+
+    return true;
+}
+
+bool emberAfReadReportingConfigurationResponseCallback(chip::ClusterId clusterId, uint8_t * message, uint16_t messageLen)
+{
+    ChipLogProgress(Zcl, "ReadReportingConfigurationResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+
+    GET_RESPONSE_CALLBACKS("emberAfReadReportingConfigurationResponseCallback");
+
+    // struct readReportingConfigurationResponseRecord[]
+    while (messageLen)
+    {
+        CHECK_MESSAGE_LENGTH(1);
+        uint8_t direction = chip::Encoding::Read8(message); // reportingRole
+        ChipLogProgress(Zcl, "  direction: 0x%02x", direction);
+
+        CHECK_MESSAGE_LENGTH(2);
+        uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+        ChipLogProgress(Zcl, "  attributeId: 0x%04x", attributeId);
+
+        if (direction == EMBER_ZCL_REPORTING_DIRECTION_REPORTED)
+        {
+            CHECK_MESSAGE_LENGTH(1);
+            uint8_t attributeType = chip::Encoding::Read8(message); // zclType
+            ChipLogProgress(Zcl, "  attributeType: 0x%02x", attributeType);
+
+            CHECK_MESSAGE_LENGTH(2);
+            uint16_t minimumReportingInterval = chip::Encoding::LittleEndian::Read16(message); // uint16
+            ChipLogProgress(Zcl, "  minimumReportingInterval: %" PRIu16, minimumReportingInterval);
+
+            CHECK_MESSAGE_LENGTH(2);
+            uint16_t maximumReportingInterval = chip::Encoding::LittleEndian::Read16(message); // uint16
+            ChipLogProgress(Zcl, "  maximumReportingInterval: %" PRIu16, maximumReportingInterval);
+
+            // FIXME: unk is not supported yet.
+
+            Callback::Callback<ReadReportingConfigurationReportedCallback> * cb =
+                Callback::Callback<ReadReportingConfigurationReportedCallback>::FromCancelable(onSuccessCallback);
+            cb->mCall(cb->mContext, minimumReportingInterval, maximumReportingInterval);
+        }
+        else
+        {
+            CHECK_MESSAGE_LENGTH(2);
+            uint16_t timeout = chip::Encoding::LittleEndian::Read16(message); // uint16
+            ChipLogProgress(Zcl, "  timeout: %" PRIu16, timeout);
+
+            Callback::Callback<ReadReportingConfigurationReceivedCallback> * cb =
+                Callback::Callback<ReadReportingConfigurationReceivedCallback>::FromCancelable(onSuccessCallback);
+            cb->mCall(cb->mContext, timeout);
+        }
+    }
+
+    return true;
+}
+
+bool emberAfDiscoverAttributesResponseCallback(ClusterId clusterId, bool discoveryComplete, uint8_t * message, uint16_t messageLen,
+                                               bool extended)
+{
+    ChipLogProgress(Zcl, "DiscoverAttributesResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+    ChipLogProgress(Zcl, "  discoveryComplete: %d", discoveryComplete);
+    ChipLogProgress(Zcl, "  extended: %d", extended);
+
+    GET_RESPONSE_CALLBACKS("emberAfDiscoverAttributesCallback");
+
+    // struct discoverAttributesResponseRecord[]
+    while (messageLen)
+    {
+        CHECK_MESSAGE_LENGTH(2);
+        uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+        ChipLogProgress(Zcl, "  attributeId: 0x%04x", attributeId);
+
+        CHECK_MESSAGE_LENGTH(1);
+        uint8_t attributeType = chip::Encoding::Read8(message); // zclType
+        ChipLogProgress(Zcl, "  attributeType: 0x%02x", attributeType);
+    }
+
+    Callback::Callback<DefaultSuccessCallback> * cb = Callback::Callback<DefaultSuccessCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfDiscoverCommandsGeneratedResponseCallback(ClusterId clusterId, uint16_t manufacturerCode, bool discoveryComplete,
+                                                      CommandId * commandIds, uint16_t commandIdCount)
+{
+    ChipLogProgress(Zcl, "DiscoverCommandsGeneratedResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+    ChipLogProgress(Zcl, "  manufacturerCode: 0x%04x", manufacturerCode);
+    ChipLogProgress(Zcl, "  discoveryComplete: %d", discoveryComplete);
+    ChipLogProgress(Zcl, "  commandIdCount: %" PRIu16, commandIdCount);
+
+    for (uint16_t i = 0; i < commandIdCount; i++)
+    {
+        ChipLogProgress(Zcl, "  commandId: 0x%02x", commandIds++);
+    }
+
+    GET_RESPONSE_CALLBACKS("emberAfDiscoverCommandsGeneratedResponseCallback");
+    Callback::Callback<DefaultSuccessCallback> * cb = Callback::Callback<DefaultSuccessCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfDiscoverCommandsReceivedResponseCallback(ClusterId clusterId, uint16_t manufacturerCode, bool discoveryComplete,
+                                                     CommandId * commandIds, uint16_t commandIdCount)
+{
+    ChipLogProgress(Zcl, "DiscoverCommandsReceivedResponse:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+    ChipLogProgress(Zcl, "  manufacturerCode: 0x%04x", manufacturerCode);
+    ChipLogProgress(Zcl, "  discoveryComplete: %d", discoveryComplete);
+    ChipLogProgress(Zcl, "  commandIdCount: %" PRIu16, commandIdCount);
+
+    for (uint16_t i = 0; i < commandIdCount; i++)
+    {
+        ChipLogProgress(Zcl, "  commandId: 0x%02x", commandIds++);
+    }
+
+    GET_RESPONSE_CALLBACKS("emberAfDiscoverCommandsGeneratedResponseCallback");
+    Callback::Callback<DefaultSuccessCallback> * cb = Callback::Callback<DefaultSuccessCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfDoorLockClusterClearAllPinsResponseCallback(uint8_t status)
+{
+    ChipLogProgress(Zcl, "ClearAllPinsResponse:");
+    LogStatus(status);
+
+    GET_RESPONSE_CALLBACKS("DoorLockClusterClearAllPinsResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<DoorLockClusterClearAllPinsResponseCallback> * cb =
+        Callback::Callback<DoorLockClusterClearAllPinsResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfDoorLockClusterClearAllRfidsResponseCallback(uint8_t status)
+{
+    ChipLogProgress(Zcl, "ClearAllRfidsResponse:");
+    LogStatus(status);
+
+    GET_RESPONSE_CALLBACKS("DoorLockClusterClearAllRfidsResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<DoorLockClusterClearAllRfidsResponseCallback> * cb =
+        Callback::Callback<DoorLockClusterClearAllRfidsResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfDoorLockClusterClearHolidayScheduleResponseCallback(uint8_t status)
+{
+    ChipLogProgress(Zcl, "ClearHolidayScheduleResponse:");
+    LogStatus(status);
+
+    GET_RESPONSE_CALLBACKS("DoorLockClusterClearHolidayScheduleResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<DoorLockClusterClearHolidayScheduleResponseCallback> * cb =
+        Callback::Callback<DoorLockClusterClearHolidayScheduleResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfDoorLockClusterClearPinResponseCallback(uint8_t status)
+{
+    ChipLogProgress(Zcl, "ClearPinResponse:");
+    LogStatus(status);
+
+    GET_RESPONSE_CALLBACKS("DoorLockClusterClearPinResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<DoorLockClusterClearPinResponseCallback> * cb =
+        Callback::Callback<DoorLockClusterClearPinResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfDoorLockClusterClearRfidResponseCallback(uint8_t status)
+{
+    ChipLogProgress(Zcl, "ClearRfidResponse:");
+    LogStatus(status);
+
+    GET_RESPONSE_CALLBACKS("DoorLockClusterClearRfidResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<DoorLockClusterClearRfidResponseCallback> * cb =
+        Callback::Callback<DoorLockClusterClearRfidResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfDoorLockClusterClearWeekdayScheduleResponseCallback(uint8_t status)
+{
+    ChipLogProgress(Zcl, "ClearWeekdayScheduleResponse:");
+    LogStatus(status);
+
+    GET_RESPONSE_CALLBACKS("DoorLockClusterClearWeekdayScheduleResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<DoorLockClusterClearWeekdayScheduleResponseCallback> * cb =
+        Callback::Callback<DoorLockClusterClearWeekdayScheduleResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfDoorLockClusterClearYeardayScheduleResponseCallback(uint8_t status)
+{
+    ChipLogProgress(Zcl, "ClearYeardayScheduleResponse:");
+    LogStatus(status);
+
+    GET_RESPONSE_CALLBACKS("DoorLockClusterClearYeardayScheduleResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<DoorLockClusterClearYeardayScheduleResponseCallback> * cb =
+        Callback::Callback<DoorLockClusterClearYeardayScheduleResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfDoorLockClusterGetHolidayScheduleResponseCallback(uint8_t scheduleId, uint8_t status, uint32_t localStartTime,
+                                                              uint32_t localEndTime, uint8_t operatingModeDuringHoliday)
+{
+    ChipLogProgress(Zcl, "GetHolidayScheduleResponse:");
+    ChipLogProgress(Zcl, "  scheduleId: %" PRIu8 "", scheduleId);
+    LogStatus(status);
+    ChipLogProgress(Zcl, "  localStartTime: %" PRIu32 "", localStartTime);
+    ChipLogProgress(Zcl, "  localEndTime: %" PRIu32 "", localEndTime);
+    ChipLogProgress(Zcl, "  operatingModeDuringHoliday: %" PRIu8 "", operatingModeDuringHoliday);
+
+    GET_RESPONSE_CALLBACKS("DoorLockClusterGetHolidayScheduleResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<DoorLockClusterGetHolidayScheduleResponseCallback> * cb =
+        Callback::Callback<DoorLockClusterGetHolidayScheduleResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext, scheduleId, localStartTime, localEndTime, operatingModeDuringHoliday);
+    return true;
+}
+
+bool emberAfDoorLockClusterGetLogRecordResponseCallback(uint16_t logEntryId, uint32_t timestamp, uint8_t eventType, uint8_t source,
+                                                        uint8_t eventIdOrAlarmCode, uint16_t userId, uint8_t * pin)
+{
+    ChipLogProgress(Zcl, "GetLogRecordResponse:");
+    ChipLogProgress(Zcl, "  logEntryId: %" PRIu16 "", logEntryId);
+    ChipLogProgress(Zcl, "  timestamp: %" PRIu32 "", timestamp);
+    ChipLogProgress(Zcl, "  eventType: %" PRIu8 "", eventType);
+    ChipLogProgress(Zcl, "  source: %" PRIu8 "", source);
+    ChipLogProgress(Zcl, "  eventIdOrAlarmCode: %" PRIu8 "", eventIdOrAlarmCode);
+    ChipLogProgress(Zcl, "  userId: %" PRIu16 "", userId);
+    ChipLogProgress(Zcl, "  pin: %s", pin);
+
+    GET_RESPONSE_CALLBACKS("DoorLockClusterGetLogRecordResponseCallback");
+
+    Callback::Callback<DoorLockClusterGetLogRecordResponseCallback> * cb =
+        Callback::Callback<DoorLockClusterGetLogRecordResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext, logEntryId, timestamp, eventType, source, eventIdOrAlarmCode, userId, pin);
+    return true;
+}
+
+bool emberAfDoorLockClusterGetPinResponseCallback(uint16_t userId, uint8_t userStatus, uint8_t userType, uint8_t * pin)
+{
+    ChipLogProgress(Zcl, "GetPinResponse:");
+    ChipLogProgress(Zcl, "  userId: %" PRIu16 "", userId);
+    ChipLogProgress(Zcl, "  userStatus: %" PRIu8 "", userStatus);
+    ChipLogProgress(Zcl, "  userType: %" PRIu8 "", userType);
+    ChipLogProgress(Zcl, "  pin: %s", pin);
+
+    GET_RESPONSE_CALLBACKS("DoorLockClusterGetPinResponseCallback");
+
+    Callback::Callback<DoorLockClusterGetPinResponseCallback> * cb =
+        Callback::Callback<DoorLockClusterGetPinResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext, userId, userStatus, userType, pin);
+    return true;
+}
+
+bool emberAfDoorLockClusterGetRfidResponseCallback(uint16_t userId, uint8_t userStatus, uint8_t userType, uint8_t * rfid)
+{
+    ChipLogProgress(Zcl, "GetRfidResponse:");
+    ChipLogProgress(Zcl, "  userId: %" PRIu16 "", userId);
+    ChipLogProgress(Zcl, "  userStatus: %" PRIu8 "", userStatus);
+    ChipLogProgress(Zcl, "  userType: %" PRIu8 "", userType);
+    ChipLogProgress(Zcl, "  rfid: %s", rfid);
+
+    GET_RESPONSE_CALLBACKS("DoorLockClusterGetRfidResponseCallback");
+
+    Callback::Callback<DoorLockClusterGetRfidResponseCallback> * cb =
+        Callback::Callback<DoorLockClusterGetRfidResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext, userId, userStatus, userType, rfid);
+    return true;
+}
+
+bool emberAfDoorLockClusterGetUserTypeResponseCallback(uint16_t userId, uint8_t userType)
+{
+    ChipLogProgress(Zcl, "GetUserTypeResponse:");
+    ChipLogProgress(Zcl, "  userId: %" PRIu16 "", userId);
+    ChipLogProgress(Zcl, "  userType: %" PRIu8 "", userType);
+
+    GET_RESPONSE_CALLBACKS("DoorLockClusterGetUserTypeResponseCallback");
+
+    Callback::Callback<DoorLockClusterGetUserTypeResponseCallback> * cb =
+        Callback::Callback<DoorLockClusterGetUserTypeResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext, userId, userType);
+    return true;
+}
+
+bool emberAfDoorLockClusterGetWeekdayScheduleResponseCallback(uint8_t scheduleId, uint16_t userId, uint8_t status, uint8_t daysMask,
+                                                              uint8_t startHour, uint8_t startMinute, uint8_t endHour,
+                                                              uint8_t endMinute)
+{
+    ChipLogProgress(Zcl, "GetWeekdayScheduleResponse:");
+    ChipLogProgress(Zcl, "  scheduleId: %" PRIu8 "", scheduleId);
+    ChipLogProgress(Zcl, "  userId: %" PRIu16 "", userId);
+    LogStatus(status);
+    ChipLogProgress(Zcl, "  daysMask: %" PRIu8 "", daysMask);
+    ChipLogProgress(Zcl, "  startHour: %" PRIu8 "", startHour);
+    ChipLogProgress(Zcl, "  startMinute: %" PRIu8 "", startMinute);
+    ChipLogProgress(Zcl, "  endHour: %" PRIu8 "", endHour);
+    ChipLogProgress(Zcl, "  endMinute: %" PRIu8 "", endMinute);
+
+    GET_RESPONSE_CALLBACKS("DoorLockClusterGetWeekdayScheduleResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<DoorLockClusterGetWeekdayScheduleResponseCallback> * cb =
+        Callback::Callback<DoorLockClusterGetWeekdayScheduleResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext, scheduleId, userId, daysMask, startHour, startMinute, endHour, endMinute);
+    return true;
+}
+
+bool emberAfDoorLockClusterGetYeardayScheduleResponseCallback(uint8_t scheduleId, uint16_t userId, uint8_t status,
+                                                              uint32_t localStartTime, uint32_t localEndTime)
+{
+    ChipLogProgress(Zcl, "GetYeardayScheduleResponse:");
+    ChipLogProgress(Zcl, "  scheduleId: %" PRIu8 "", scheduleId);
+    ChipLogProgress(Zcl, "  userId: %" PRIu16 "", userId);
+    LogStatus(status);
+    ChipLogProgress(Zcl, "  localStartTime: %" PRIu32 "", localStartTime);
+    ChipLogProgress(Zcl, "  localEndTime: %" PRIu32 "", localEndTime);
+
+    GET_RESPONSE_CALLBACKS("DoorLockClusterGetYeardayScheduleResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<DoorLockClusterGetYeardayScheduleResponseCallback> * cb =
+        Callback::Callback<DoorLockClusterGetYeardayScheduleResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext, scheduleId, userId, localStartTime, localEndTime);
+    return true;
+}
+
+bool emberAfDoorLockClusterLockDoorResponseCallback(uint8_t status)
+{
+    ChipLogProgress(Zcl, "LockDoorResponse:");
+    LogStatus(status);
+
+    GET_RESPONSE_CALLBACKS("DoorLockClusterLockDoorResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<DoorLockClusterLockDoorResponseCallback> * cb =
+        Callback::Callback<DoorLockClusterLockDoorResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfDoorLockClusterSetHolidayScheduleResponseCallback(uint8_t status)
+{
+    ChipLogProgress(Zcl, "SetHolidayScheduleResponse:");
+    LogStatus(status);
+
+    GET_RESPONSE_CALLBACKS("DoorLockClusterSetHolidayScheduleResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<DoorLockClusterSetHolidayScheduleResponseCallback> * cb =
+        Callback::Callback<DoorLockClusterSetHolidayScheduleResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfDoorLockClusterSetPinResponseCallback(uint8_t status)
+{
+    ChipLogProgress(Zcl, "SetPinResponse:");
+    LogStatus(status);
+
+    GET_RESPONSE_CALLBACKS("DoorLockClusterSetPinResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<DoorLockClusterSetPinResponseCallback> * cb =
+        Callback::Callback<DoorLockClusterSetPinResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfDoorLockClusterSetRfidResponseCallback(uint8_t status)
+{
+    ChipLogProgress(Zcl, "SetRfidResponse:");
+    LogStatus(status);
+
+    GET_RESPONSE_CALLBACKS("DoorLockClusterSetRfidResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<DoorLockClusterSetRfidResponseCallback> * cb =
+        Callback::Callback<DoorLockClusterSetRfidResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfDoorLockClusterSetUserTypeResponseCallback(uint8_t status)
+{
+    ChipLogProgress(Zcl, "SetUserTypeResponse:");
+    LogStatus(status);
+
+    GET_RESPONSE_CALLBACKS("DoorLockClusterSetUserTypeResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<DoorLockClusterSetUserTypeResponseCallback> * cb =
+        Callback::Callback<DoorLockClusterSetUserTypeResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfDoorLockClusterSetWeekdayScheduleResponseCallback(uint8_t status)
+{
+    ChipLogProgress(Zcl, "SetWeekdayScheduleResponse:");
+    LogStatus(status);
+
+    GET_RESPONSE_CALLBACKS("DoorLockClusterSetWeekdayScheduleResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<DoorLockClusterSetWeekdayScheduleResponseCallback> * cb =
+        Callback::Callback<DoorLockClusterSetWeekdayScheduleResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfDoorLockClusterSetYeardayScheduleResponseCallback(uint8_t status)
+{
+    ChipLogProgress(Zcl, "SetYeardayScheduleResponse:");
+    LogStatus(status);
+
+    GET_RESPONSE_CALLBACKS("DoorLockClusterSetYeardayScheduleResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<DoorLockClusterSetYeardayScheduleResponseCallback> * cb =
+        Callback::Callback<DoorLockClusterSetYeardayScheduleResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfDoorLockClusterUnlockDoorResponseCallback(uint8_t status)
+{
+    ChipLogProgress(Zcl, "UnlockDoorResponse:");
+    LogStatus(status);
+
+    GET_RESPONSE_CALLBACKS("DoorLockClusterUnlockDoorResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<DoorLockClusterUnlockDoorResponseCallback> * cb =
+        Callback::Callback<DoorLockClusterUnlockDoorResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfDoorLockClusterUnlockWithTimeoutResponseCallback(uint8_t status)
+{
+    ChipLogProgress(Zcl, "UnlockWithTimeoutResponse:");
+    LogStatus(status);
+
+    GET_RESPONSE_CALLBACKS("DoorLockClusterUnlockWithTimeoutResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<DoorLockClusterUnlockWithTimeoutResponseCallback> * cb =
+        Callback::Callback<DoorLockClusterUnlockWithTimeoutResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext);
+    return true;
+}
+
+bool emberAfGroupsClusterAddGroupResponseCallback(uint8_t status, uint16_t groupId)
+{
+    ChipLogProgress(Zcl, "AddGroupResponse:");
+    LogStatus(status);
+    ChipLogProgress(Zcl, "  groupId: %" PRIu16 "", groupId);
+
+    GET_RESPONSE_CALLBACKS("GroupsClusterAddGroupResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<GroupsClusterAddGroupResponseCallback> * cb =
+        Callback::Callback<GroupsClusterAddGroupResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext, groupId);
+    return true;
+}
+
+bool emberAfGroupsClusterGetGroupMembershipResponseCallback(uint8_t capacity, uint8_t groupCount,
+                                                            /* TYPE WARNING: array array defaults to */ uint8_t * groupList)
+{
+    ChipLogProgress(Zcl, "GetGroupMembershipResponse:");
+    ChipLogProgress(Zcl, "  capacity: %" PRIu8 "", capacity);
+    ChipLogProgress(Zcl, "  groupCount: %" PRIu8 "", groupCount);
+    ChipLogProgress(Zcl, "  groupList: %p", groupList);
+
+    GET_RESPONSE_CALLBACKS("GroupsClusterGetGroupMembershipResponseCallback");
+
+    Callback::Callback<GroupsClusterGetGroupMembershipResponseCallback> * cb =
+        Callback::Callback<GroupsClusterGetGroupMembershipResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext, capacity, groupCount, groupList);
+    return true;
+}
+
+bool emberAfGroupsClusterRemoveGroupResponseCallback(uint8_t status, uint16_t groupId)
+{
+    ChipLogProgress(Zcl, "RemoveGroupResponse:");
+    LogStatus(status);
+    ChipLogProgress(Zcl, "  groupId: %" PRIu16 "", groupId);
+
+    GET_RESPONSE_CALLBACKS("GroupsClusterRemoveGroupResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<GroupsClusterRemoveGroupResponseCallback> * cb =
+        Callback::Callback<GroupsClusterRemoveGroupResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext, groupId);
+    return true;
+}
+
+bool emberAfGroupsClusterViewGroupResponseCallback(uint8_t status, uint16_t groupId, uint8_t * groupName)
+{
+    ChipLogProgress(Zcl, "ViewGroupResponse:");
+    LogStatus(status);
+    ChipLogProgress(Zcl, "  groupId: %" PRIu16 "", groupId);
+    ChipLogProgress(Zcl, "  groupName: %s", groupName);
+
+    GET_RESPONSE_CALLBACKS("GroupsClusterViewGroupResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<GroupsClusterViewGroupResponseCallback> * cb =
+        Callback::Callback<GroupsClusterViewGroupResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext, groupId, groupName);
+    return true;
+}
+
+bool emberAfIdentifyClusterIdentifyQueryResponseCallback(uint16_t timeout)
+{
+    ChipLogProgress(Zcl, "IdentifyQueryResponse:");
+    ChipLogProgress(Zcl, "  timeout: %" PRIu16 "", timeout);
+
+    GET_RESPONSE_CALLBACKS("IdentifyClusterIdentifyQueryResponseCallback");
+
+    Callback::Callback<IdentifyClusterIdentifyQueryResponseCallback> * cb =
+        Callback::Callback<IdentifyClusterIdentifyQueryResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext, timeout);
+    return true;
+}
+
+bool emberAfScenesClusterAddSceneResponseCallback(uint8_t status, uint16_t groupId, uint8_t sceneId)
+{
+    ChipLogProgress(Zcl, "AddSceneResponse:");
+    LogStatus(status);
+    ChipLogProgress(Zcl, "  groupId: %" PRIu16 "", groupId);
+    ChipLogProgress(Zcl, "  sceneId: %" PRIu8 "", sceneId);
+
+    GET_RESPONSE_CALLBACKS("ScenesClusterAddSceneResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<ScenesClusterAddSceneResponseCallback> * cb =
+        Callback::Callback<ScenesClusterAddSceneResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext, groupId, sceneId);
+    return true;
+}
+
+bool emberAfScenesClusterGetSceneMembershipResponseCallback(uint8_t status, uint8_t capacity, uint16_t groupId, uint8_t sceneCount,
+                                                            /* TYPE WARNING: array array defaults to */ uint8_t * sceneList)
+{
+    ChipLogProgress(Zcl, "GetSceneMembershipResponse:");
+    LogStatus(status);
+    ChipLogProgress(Zcl, "  capacity: %" PRIu8 "", capacity);
+    ChipLogProgress(Zcl, "  groupId: %" PRIu16 "", groupId);
+    ChipLogProgress(Zcl, "  sceneCount: %" PRIu8 "", sceneCount);
+    ChipLogProgress(Zcl, "  sceneList: %p", sceneList);
+
+    GET_RESPONSE_CALLBACKS("ScenesClusterGetSceneMembershipResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<ScenesClusterGetSceneMembershipResponseCallback> * cb =
+        Callback::Callback<ScenesClusterGetSceneMembershipResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext, capacity, groupId, sceneCount, sceneList);
+    return true;
+}
+
+bool emberAfScenesClusterRemoveAllScenesResponseCallback(uint8_t status, uint16_t groupId)
+{
+    ChipLogProgress(Zcl, "RemoveAllScenesResponse:");
+    LogStatus(status);
+    ChipLogProgress(Zcl, "  groupId: %" PRIu16 "", groupId);
+
+    GET_RESPONSE_CALLBACKS("ScenesClusterRemoveAllScenesResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<ScenesClusterRemoveAllScenesResponseCallback> * cb =
+        Callback::Callback<ScenesClusterRemoveAllScenesResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext, groupId);
+    return true;
+}
+
+bool emberAfScenesClusterRemoveSceneResponseCallback(uint8_t status, uint16_t groupId, uint8_t sceneId)
+{
+    ChipLogProgress(Zcl, "RemoveSceneResponse:");
+    LogStatus(status);
+    ChipLogProgress(Zcl, "  groupId: %" PRIu16 "", groupId);
+    ChipLogProgress(Zcl, "  sceneId: %" PRIu8 "", sceneId);
+
+    GET_RESPONSE_CALLBACKS("ScenesClusterRemoveSceneResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<ScenesClusterRemoveSceneResponseCallback> * cb =
+        Callback::Callback<ScenesClusterRemoveSceneResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext, groupId, sceneId);
+    return true;
+}
+
+bool emberAfScenesClusterStoreSceneResponseCallback(uint8_t status, uint16_t groupId, uint8_t sceneId)
+{
+    ChipLogProgress(Zcl, "StoreSceneResponse:");
+    LogStatus(status);
+    ChipLogProgress(Zcl, "  groupId: %" PRIu16 "", groupId);
+    ChipLogProgress(Zcl, "  sceneId: %" PRIu8 "", sceneId);
+
+    GET_RESPONSE_CALLBACKS("ScenesClusterStoreSceneResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<ScenesClusterStoreSceneResponseCallback> * cb =
+        Callback::Callback<ScenesClusterStoreSceneResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext, groupId, sceneId);
+    return true;
+}
+
+bool emberAfScenesClusterViewSceneResponseCallback(uint8_t status, uint16_t groupId, uint8_t sceneId, uint16_t transitionTime,
+                                                   uint8_t * sceneName,
+                                                   /* TYPE WARNING: array array defaults to */ uint8_t * extensionFieldSets)
+{
+    ChipLogProgress(Zcl, "ViewSceneResponse:");
+    LogStatus(status);
+    ChipLogProgress(Zcl, "  groupId: %" PRIu16 "", groupId);
+    ChipLogProgress(Zcl, "  sceneId: %" PRIu8 "", sceneId);
+    ChipLogProgress(Zcl, "  transitionTime: %" PRIu16 "", transitionTime);
+    ChipLogProgress(Zcl, "  sceneName: %s", sceneName);
+    ChipLogProgress(Zcl, "  extensionFieldSets: %p", extensionFieldSets);
+
+    GET_RESPONSE_CALLBACKS("ScenesClusterViewSceneResponseCallback");
+
+    if (status != EMBER_ZCL_STATUS_SUCCESS)
+    {
+        Callback::Callback<DefaultFailureCallback> * cb =
+            Callback::Callback<DefaultFailureCallback>::FromCancelable(onFailureCallback);
+        cb->mCall(cb->mContext, status);
+        return true;
+    }
+
+    Callback::Callback<ScenesClusterViewSceneResponseCallback> * cb =
+        Callback::Callback<ScenesClusterViewSceneResponseCallback>::FromCancelable(onSuccessCallback);
+    cb->mCall(cb->mContext, groupId, sceneId, transitionTime, sceneName, extensionFieldSets);
+    return true;
+}
+
+bool emberAfReportAttributesCallback(ClusterId clusterId, uint8_t * message, uint16_t messageLen)
+{
+    ChipLogProgress(Zcl, "emberAfReportAttributeCallback:");
+    ChipLogProgress(Zcl, "  ClusterId: 0x%04x", clusterId);
+
+    NodeId sourceId = emberAfCurrentCommand()->source;
+    ChipLogProgress(Zcl, "  Source NodeId: %" PRIu64, sourceId);
+
+    EndpointId endpointId = emberAfCurrentCommand()->apsFrame->sourceEndpoint;
+    ChipLogProgress(Zcl, "  Source EndpointId: 0x%04x", endpointId);
+
+    // TODO onFailureCallback is just here because of the CHECK_MESSAGE_LENGTH macro. It needs to be removed.
+    Callback::Cancelable * onFailureCallback = nullptr;
+
+    while (messageLen)
+    {
+        CHECK_MESSAGE_LENGTH(2);
+        uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+        ChipLogProgress(Zcl, "  attributeId: 0x%04x", attributeId);
+
+        GET_REPORT_CALLBACK("emberAfReportAttributesCallback");
+
+        CHECK_MESSAGE_LENGTH(1);
+        uint8_t attributeType = chip::Encoding::Read8(message);
+        ChipLogProgress(Zcl, "  attributeType: 0x%02x", attributeType);
+
+        switch (attributeType)
+        {
+        case 0x00: // nodata / No data
+        case 0x0A: // data24 / 24-bit data
+        case 0x0C: // data40 / 40-bit data
+        case 0x0D: // data48 / 48-bit data
+        case 0x0E: // data56 / 56-bit data
+        case 0x1A: // map24 / 24-bit bitmap
+        case 0x1C: // map40 / 40-bit bitmap
+        case 0x1D: // map48 / 48-bit bitmap
+        case 0x1E: // map56 / 56-bit bitmap
+        case 0x22: // uint24 / Unsigned 24-bit integer
+        case 0x24: // uint40 / Unsigned 40-bit integer
+        case 0x25: // uint48 / Unsigned 48-bit integer
+        case 0x26: // uint56 / Unsigned 56-bit integer
+        case 0x2A: // int24 / Signed 24-bit integer
+        case 0x2C: // int40 / Signed 40-bit integer
+        case 0x2D: // int48 / Signed 48-bit integer
+        case 0x2E: // int56 / Signed 56-bit integer
+        case 0x38: // semi / Semi-precision
+        case 0x39: // single / Single precision
+        case 0x3A: // double / Double precision
+        case 0x41: // octstr / Octet string
+        case 0x42: // string / Character string
+        case 0x43: // octstr16 / Long octet string
+        case 0x44: // string16 / Long character string
+        case 0x48: // array / Array
+        case 0x49: // struct / Structure
+        case 0x50: // set / Set
+        case 0x51: // bag / Bag
+        case 0xE0: // ToD / Time of day
+        {
+            ChipLogError(Zcl, "attributeType 0x%02x is not supported", attributeType);
+            return true;
+        }
+
+        case 0x08: // data8 / 8-bit data
+        case 0x18: // map8 / 8-bit bitmap
+        case 0x20: // uint8 / Unsigned  8-bit integer
+        case 0x30: // enum8 / 8-bit enumeration
+        {
+            CHECK_MESSAGE_LENGTH(1);
+            uint8_t value = chip::Encoding::Read8(message);
+            ChipLogProgress(Zcl, "  value: 0x%02x", value);
+
+            Callback::Callback<Int8uAttributeCallback> * cb =
+                Callback::Callback<Int8uAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x09: // data16 / 16-bit data
+        case 0x19: // map16 / 16-bit bitmap
+        case 0x21: // uint16 / Unsigned 16-bit integer
+        case 0x31: // enum16 / 16-bit enumeration
+        case 0xE8: // clusterId / Cluster ID
+        case 0xE9: // attribId / Attribute ID
+        case 0xEA: // bacOID / BACnet OID
+        case 0xF1: // key128 / 128-bit security key
+        case 0xFF: // unk / Unknown
+        {
+            CHECK_MESSAGE_LENGTH(2);
+            uint16_t value = chip::Encoding::LittleEndian::Read16(message);
+            ChipLogProgress(Zcl, "  value: 0x%04x", value);
+
+            Callback::Callback<Int16uAttributeCallback> * cb =
+                Callback::Callback<Int16uAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x0B: // data32 / 32-bit data
+        case 0x1B: // map32 / 32-bit bitmap
+        case 0x23: // uint32 / Unsigned 32-bit integer
+        case 0xE1: // date / Date
+        case 0xE2: // UTC / UTCTime
+        {
+            CHECK_MESSAGE_LENGTH(4);
+            uint32_t value = chip::Encoding::LittleEndian::Read32(message);
+            ChipLogProgress(Zcl, "  value: 0x%08x", value);
+
+            Callback::Callback<Int32uAttributeCallback> * cb =
+                Callback::Callback<Int32uAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x0F: // data64 / 64-bit data
+        case 0x1F: // map64 / 64-bit bitmap
+        case 0x27: // uint64 / Unsigned 64-bit integer
+        case 0xF0: // EUI64 / IEEE address
+        {
+            CHECK_MESSAGE_LENGTH(8);
+            uint64_t value = chip::Encoding::LittleEndian::Read64(message);
+            ChipLogProgress(Zcl, "  value: 0x%16x", value);
+
+            Callback::Callback<Int64uAttributeCallback> * cb =
+                Callback::Callback<Int64uAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x10: // bool / Boolean
+        {
+            CHECK_MESSAGE_LENGTH(1);
+            uint8_t value = chip::Encoding::Read8(message);
+            ChipLogProgress(Zcl, "  value: %d", value);
+
+            Callback::Callback<BooleanAttributeCallback> * cb =
+                Callback::Callback<BooleanAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x28: // int8 / Signed 8-bit integer
+        {
+            CHECK_MESSAGE_LENGTH(1);
+            int8_t value = chip::CastToSigned(chip::Encoding::Read8(message));
+            ChipLogProgress(Zcl, "  value: %" PRId8, value);
+
+            Callback::Callback<Int8sAttributeCallback> * cb =
+                Callback::Callback<Int8sAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x29: // int16 / Signed 16-bit integer
+        {
+            CHECK_MESSAGE_LENGTH(2);
+            int16_t value = chip::CastToSigned(chip::Encoding::LittleEndian::Read16(message));
+            ChipLogProgress(Zcl, "  value: %" PRId16, value);
+
+            Callback::Callback<Int16sAttributeCallback> * cb =
+                Callback::Callback<Int16sAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x2B: // int32 / Signed 32-bit integer
+        {
+            CHECK_MESSAGE_LENGTH(4);
+            int32_t value = chip::CastToSigned(chip::Encoding::LittleEndian::Read32(message));
+            ChipLogProgress(Zcl, "  value: %" PRId32, value);
+
+            Callback::Callback<Int32sAttributeCallback> * cb =
+                Callback::Callback<Int32sAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+
+        case 0x2F: // int64 / Signed 64-bit integer
+        {
+            CHECK_MESSAGE_LENGTH(8);
+            int64_t value = chip::CastToSigned(chip::Encoding::LittleEndian::Read64(message));
+            ChipLogProgress(Zcl, "  value: %" PRId64, value);
+
+            Callback::Callback<Int64sAttributeCallback> * cb =
+                Callback::Callback<Int64sAttributeCallback>::FromCancelable(onReportCallback);
+            cb->mCall(cb->mContext, value);
+            break;
+        }
+        }
+    }
+
+    return true;
+}
diff --git a/src/darwin/Framework/CHIP/gen/CHIPClientCallbacks.h b/src/darwin/Framework/CHIP/gen/CHIPClientCallbacks.h
new file mode 100644
index 0000000..3e88cfc
--- /dev/null
+++ b/src/darwin/Framework/CHIP/gen/CHIPClientCallbacks.h
@@ -0,0 +1,86 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+#pragma once
+
+#include <inttypes.h>
+
+// Global Response Callbacks
+typedef void (*DefaultSuccessCallback)(void * context);
+typedef void (*DefaultFailureCallback)(void * context, uint8_t status);
+typedef void (*BooleanAttributeCallback)(void * context, bool value);
+typedef void (*Int8uAttributeCallback)(void * context, uint8_t value);
+typedef void (*Int8sAttributeCallback)(void * context, int8_t value);
+typedef void (*Int16uAttributeCallback)(void * context, uint16_t value);
+typedef void (*Int16sAttributeCallback)(void * context, int16_t value);
+typedef void (*Int32uAttributeCallback)(void * context, uint32_t value);
+typedef void (*Int32sAttributeCallback)(void * context, int32_t value);
+typedef void (*Int64uAttributeCallback)(void * context, uint64_t value);
+typedef void (*Int64sAttributeCallback)(void * context, int64_t value);
+typedef void (*ReadReportingConfigurationReportedCallback)(void * context, uint16_t minInterval, uint16_t maxInterval);
+typedef void (*ReadReportingConfigurationReceivedCallback)(void * context, uint16_t timeout);
+
+// Cluster Specific Response Callbacks
+typedef void (*DoorLockClusterClearAllPinsResponseCallback)(void * context);
+typedef void (*DoorLockClusterClearAllRfidsResponseCallback)(void * context);
+typedef void (*DoorLockClusterClearHolidayScheduleResponseCallback)(void * context);
+typedef void (*DoorLockClusterClearPinResponseCallback)(void * context);
+typedef void (*DoorLockClusterClearRfidResponseCallback)(void * context);
+typedef void (*DoorLockClusterClearWeekdayScheduleResponseCallback)(void * context);
+typedef void (*DoorLockClusterClearYeardayScheduleResponseCallback)(void * context);
+typedef void (*DoorLockClusterGetHolidayScheduleResponseCallback)(void * context, uint8_t scheduleId, uint32_t localStartTime,
+                                                                  uint32_t localEndTime, uint8_t operatingModeDuringHoliday);
+typedef void (*DoorLockClusterGetLogRecordResponseCallback)(void * context, uint16_t logEntryId, uint32_t timestamp,
+                                                            uint8_t eventType, uint8_t source, uint8_t eventIdOrAlarmCode,
+                                                            uint16_t userId, uint8_t * pin);
+typedef void (*DoorLockClusterGetPinResponseCallback)(void * context, uint16_t userId, uint8_t userStatus, uint8_t userType,
+                                                      uint8_t * pin);
+typedef void (*DoorLockClusterGetRfidResponseCallback)(void * context, uint16_t userId, uint8_t userStatus, uint8_t userType,
+                                                       uint8_t * rfid);
+typedef void (*DoorLockClusterGetUserTypeResponseCallback)(void * context, uint16_t userId, uint8_t userType);
+typedef void (*DoorLockClusterGetWeekdayScheduleResponseCallback)(void * context, uint8_t scheduleId, uint16_t userId,
+                                                                  uint8_t daysMask, uint8_t startHour, uint8_t startMinute,
+                                                                  uint8_t endHour, uint8_t endMinute);
+typedef void (*DoorLockClusterGetYeardayScheduleResponseCallback)(void * context, uint8_t scheduleId, uint16_t userId,
+                                                                  uint32_t localStartTime, uint32_t localEndTime);
+typedef void (*DoorLockClusterLockDoorResponseCallback)(void * context);
+typedef void (*DoorLockClusterSetHolidayScheduleResponseCallback)(void * context);
+typedef void (*DoorLockClusterSetPinResponseCallback)(void * context);
+typedef void (*DoorLockClusterSetRfidResponseCallback)(void * context);
+typedef void (*DoorLockClusterSetUserTypeResponseCallback)(void * context);
+typedef void (*DoorLockClusterSetWeekdayScheduleResponseCallback)(void * context);
+typedef void (*DoorLockClusterSetYeardayScheduleResponseCallback)(void * context);
+typedef void (*DoorLockClusterUnlockDoorResponseCallback)(void * context);
+typedef void (*DoorLockClusterUnlockWithTimeoutResponseCallback)(void * context);
+typedef void (*GroupsClusterAddGroupResponseCallback)(void * context, uint16_t groupId);
+typedef void (*GroupsClusterGetGroupMembershipResponseCallback)(void * context, uint8_t capacity, uint8_t groupCount,
+                                                                /* TYPE WARNING: array array defaults to */ uint8_t * groupList);
+typedef void (*GroupsClusterRemoveGroupResponseCallback)(void * context, uint16_t groupId);
+typedef void (*GroupsClusterViewGroupResponseCallback)(void * context, uint16_t groupId, uint8_t * groupName);
+typedef void (*IdentifyClusterIdentifyQueryResponseCallback)(void * context, uint16_t timeout);
+typedef void (*ScenesClusterAddSceneResponseCallback)(void * context, uint16_t groupId, uint8_t sceneId);
+typedef void (*ScenesClusterGetSceneMembershipResponseCallback)(void * context, uint8_t capacity, uint16_t groupId,
+                                                                uint8_t sceneCount,
+                                                                /* TYPE WARNING: array array defaults to */ uint8_t * sceneList);
+typedef void (*ScenesClusterRemoveAllScenesResponseCallback)(void * context, uint16_t groupId);
+typedef void (*ScenesClusterRemoveSceneResponseCallback)(void * context, uint16_t groupId, uint8_t sceneId);
+typedef void (*ScenesClusterStoreSceneResponseCallback)(void * context, uint16_t groupId, uint8_t sceneId);
+typedef void (*ScenesClusterViewSceneResponseCallback)(void * context, uint16_t groupId, uint8_t sceneId, uint16_t transitionTime,
+                                                       uint8_t * sceneName,
+                                                       /* TYPE WARNING: array array defaults to */ uint8_t * extensionFieldSets);
diff --git a/src/darwin/Framework/CHIP/gen/CHIPClustersObjc.h b/src/darwin/Framework/CHIP/gen/CHIPClustersObjc.h
new file mode 100644
index 0000000..e0a5978
--- /dev/null
+++ b/src/darwin/Framework/CHIP/gen/CHIPClustersObjc.h
@@ -0,0 +1,515 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+#ifndef CHIP_CLUSTERS_H
+#define CHIP_CLUSTERS_H
+
+#import <Foundation/Foundation.h>
+
+typedef void (^ResponseHandler)(NSError * _Nullable error, NSDictionary * _Nullable values);
+
+@class CHIPDevice;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CHIPBarrierControl : NSObject
+
+- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
+- (BOOL)barrierControlGoToPercent:(uint8_t)percentOpen completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)barrierControlStop:(ResponseHandler)completionHandler;
+
+- (BOOL)readAttributeBarrierMovingState:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeBarrierSafetyStatus:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeBarrierCapabilities:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeBarrierPosition:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler;
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CHIPBasic : NSObject
+
+- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
+- (BOOL)mfgSpecificPing:(ResponseHandler)completionHandler;
+- (BOOL)resetToFactoryDefaults:(ResponseHandler)completionHandler;
+
+- (BOOL)readAttributeZclVersion:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePowerSource:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler;
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CHIPBinding : NSObject
+
+- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
+- (BOOL)bind:(uint64_t)nodeId
+              groupId:(uint16_t)groupId
+           endpointId:(uint8_t)endpointId
+            clusterId:(uint16_t)clusterId
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)unbind:(uint64_t)nodeId
+              groupId:(uint16_t)groupId
+           endpointId:(uint8_t)endpointId
+            clusterId:(uint16_t)clusterId
+    completionHandler:(ResponseHandler)completionHandler;
+
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler;
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CHIPColorControl : NSObject
+
+- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
+- (BOOL)moveColor:(int16_t)rateX
+                rateY:(int16_t)rateY
+          optionsMask:(uint8_t)optionsMask
+      optionsOverride:(uint8_t)optionsOverride
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)moveColorTemperature:(uint8_t)moveMode
+                        rate:(uint16_t)rate
+     colorTemperatureMinimum:(uint16_t)colorTemperatureMinimum
+     colorTemperatureMaximum:(uint16_t)colorTemperatureMaximum
+                 optionsMask:(uint8_t)optionsMask
+             optionsOverride:(uint8_t)optionsOverride
+           completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)moveHue:(uint8_t)moveMode
+                 rate:(uint8_t)rate
+          optionsMask:(uint8_t)optionsMask
+      optionsOverride:(uint8_t)optionsOverride
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)moveSaturation:(uint8_t)moveMode
+                  rate:(uint8_t)rate
+           optionsMask:(uint8_t)optionsMask
+       optionsOverride:(uint8_t)optionsOverride
+     completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)moveToColor:(uint16_t)colorX
+               colorY:(uint16_t)colorY
+       transitionTime:(uint16_t)transitionTime
+          optionsMask:(uint8_t)optionsMask
+      optionsOverride:(uint8_t)optionsOverride
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)moveToColorTemperature:(uint16_t)colorTemperature
+                transitionTime:(uint16_t)transitionTime
+                   optionsMask:(uint8_t)optionsMask
+               optionsOverride:(uint8_t)optionsOverride
+             completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)moveToHue:(uint8_t)hue
+            direction:(uint8_t)direction
+       transitionTime:(uint16_t)transitionTime
+          optionsMask:(uint8_t)optionsMask
+      optionsOverride:(uint8_t)optionsOverride
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)moveToHueAndSaturation:(uint8_t)hue
+                    saturation:(uint8_t)saturation
+                transitionTime:(uint16_t)transitionTime
+                   optionsMask:(uint8_t)optionsMask
+               optionsOverride:(uint8_t)optionsOverride
+             completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)moveToSaturation:(uint8_t)saturation
+          transitionTime:(uint16_t)transitionTime
+             optionsMask:(uint8_t)optionsMask
+         optionsOverride:(uint8_t)optionsOverride
+       completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)stepColor:(int16_t)stepX
+                stepY:(int16_t)stepY
+       transitionTime:(uint16_t)transitionTime
+          optionsMask:(uint8_t)optionsMask
+      optionsOverride:(uint8_t)optionsOverride
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)stepColorTemperature:(uint8_t)stepMode
+                    stepSize:(uint16_t)stepSize
+              transitionTime:(uint16_t)transitionTime
+     colorTemperatureMinimum:(uint16_t)colorTemperatureMinimum
+     colorTemperatureMaximum:(uint16_t)colorTemperatureMaximum
+                 optionsMask:(uint8_t)optionsMask
+             optionsOverride:(uint8_t)optionsOverride
+           completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)stepHue:(uint8_t)stepMode
+             stepSize:(uint8_t)stepSize
+       transitionTime:(uint8_t)transitionTime
+          optionsMask:(uint8_t)optionsMask
+      optionsOverride:(uint8_t)optionsOverride
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)stepSaturation:(uint8_t)stepMode
+              stepSize:(uint8_t)stepSize
+        transitionTime:(uint8_t)transitionTime
+           optionsMask:(uint8_t)optionsMask
+       optionsOverride:(uint8_t)optionsOverride
+     completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)stopMoveStep:(uint8_t)optionsMask
+      optionsOverride:(uint8_t)optionsOverride
+    completionHandler:(ResponseHandler)completionHandler;
+
+- (BOOL)readAttributeCurrentHue:(ResponseHandler)completionHandler;
+- (BOOL)configureAttributeCurrentHue:(uint16_t)minInterval
+                         maxInterval:(uint16_t)maxInterval
+                              change:(uint8_t)change
+                   completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)reportAttributeCurrentHue:(ResponseHandler)reportHandler;
+- (BOOL)readAttributeCurrentSaturation:(ResponseHandler)completionHandler;
+- (BOOL)configureAttributeCurrentSaturation:(uint16_t)minInterval
+                                maxInterval:(uint16_t)maxInterval
+                                     change:(uint8_t)change
+                          completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)reportAttributeCurrentSaturation:(ResponseHandler)reportHandler;
+- (BOOL)readAttributeRemainingTime:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeCurrentX:(ResponseHandler)completionHandler;
+- (BOOL)configureAttributeCurrentX:(uint16_t)minInterval
+                       maxInterval:(uint16_t)maxInterval
+                            change:(uint16_t)change
+                 completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)reportAttributeCurrentX:(ResponseHandler)reportHandler;
+- (BOOL)readAttributeCurrentY:(ResponseHandler)completionHandler;
+- (BOOL)configureAttributeCurrentY:(uint16_t)minInterval
+                       maxInterval:(uint16_t)maxInterval
+                            change:(uint16_t)change
+                 completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)reportAttributeCurrentY:(ResponseHandler)reportHandler;
+- (BOOL)readAttributeDriftCompensation:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeCompensationText:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorTemperature:(ResponseHandler)completionHandler;
+- (BOOL)configureAttributeColorTemperature:(uint16_t)minInterval
+                               maxInterval:(uint16_t)maxInterval
+                                    change:(uint16_t)change
+                         completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)reportAttributeColorTemperature:(ResponseHandler)reportHandler;
+- (BOOL)readAttributeColorMode:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorControlOptions:(ResponseHandler)completionHandler;
+- (BOOL)writeAttributeColorControlOptions:(uint8_t)value completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeNumberOfPrimaries:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary1X:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary1Y:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary1Intensity:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary2X:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary2Y:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary2Intensity:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary3X:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary3Y:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary3Intensity:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary4X:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary4Y:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary4Intensity:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary5X:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary5Y:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary5Intensity:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary6X:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary6Y:(ResponseHandler)completionHandler;
+- (BOOL)readAttributePrimary6Intensity:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeWhitePointX:(ResponseHandler)completionHandler;
+- (BOOL)writeAttributeWhitePointX:(uint16_t)value completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeWhitePointY:(ResponseHandler)completionHandler;
+- (BOOL)writeAttributeWhitePointY:(uint16_t)value completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorPointRX:(ResponseHandler)completionHandler;
+- (BOOL)writeAttributeColorPointRX:(uint16_t)value completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorPointRY:(ResponseHandler)completionHandler;
+- (BOOL)writeAttributeColorPointRY:(uint16_t)value completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorPointRIntensity:(ResponseHandler)completionHandler;
+- (BOOL)writeAttributeColorPointRIntensity:(uint8_t)value completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorPointGX:(ResponseHandler)completionHandler;
+- (BOOL)writeAttributeColorPointGX:(uint16_t)value completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorPointGY:(ResponseHandler)completionHandler;
+- (BOOL)writeAttributeColorPointGY:(uint16_t)value completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorPointGIntensity:(ResponseHandler)completionHandler;
+- (BOOL)writeAttributeColorPointGIntensity:(uint8_t)value completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorPointBX:(ResponseHandler)completionHandler;
+- (BOOL)writeAttributeColorPointBX:(uint16_t)value completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorPointBY:(ResponseHandler)completionHandler;
+- (BOOL)writeAttributeColorPointBY:(uint16_t)value completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorPointBIntensity:(ResponseHandler)completionHandler;
+- (BOOL)writeAttributeColorPointBIntensity:(uint8_t)value completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeEnhancedCurrentHue:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeEnhancedColorMode:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorLoopActive:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorLoopDirection:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorLoopTime:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorCapabilities:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorTempPhysicalMin:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeColorTempPhysicalMax:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeCoupleColorTempToLevelMinMireds:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeStartUpColorTemperatureMireds:(ResponseHandler)completionHandler;
+- (BOOL)writeAttributeStartUpColorTemperatureMireds:(uint16_t)value completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler;
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CHIPDoorLock : NSObject
+
+- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
+- (BOOL)clearAllPins:(ResponseHandler)completionHandler;
+- (BOOL)clearAllRfids:(ResponseHandler)completionHandler;
+- (BOOL)clearHolidaySchedule:(uint8_t)scheduleId completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)clearPin:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)clearRfid:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)clearWeekdaySchedule:(uint8_t)scheduleId userId:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)clearYeardaySchedule:(uint8_t)scheduleId userId:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)getHolidaySchedule:(uint8_t)scheduleId completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)getLogRecord:(uint16_t)logIndex completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)getPin:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)getRfid:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)getUserType:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)getWeekdaySchedule:(uint8_t)scheduleId userId:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)getYeardaySchedule:(uint8_t)scheduleId userId:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)lockDoor:(char *)pin completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)setHolidaySchedule:(uint8_t)scheduleId
+                localStartTime:(uint32_t)localStartTime
+                  localEndTime:(uint32_t)localEndTime
+    operatingModeDuringHoliday:(uint8_t)operatingModeDuringHoliday
+             completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)setPin:(uint16_t)userId
+           userStatus:(uint8_t)userStatus
+             userType:(uint8_t)userType
+                  pin:(char *)pin
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)setRfid:(uint16_t)userId
+           userStatus:(uint8_t)userStatus
+             userType:(uint8_t)userType
+                   id:(char *)id
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)setUserType:(uint16_t)userId userType:(uint8_t)userType completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)setWeekdaySchedule:(uint8_t)scheduleId
+                    userId:(uint16_t)userId
+                  daysMask:(uint8_t)daysMask
+                 startHour:(uint8_t)startHour
+               startMinute:(uint8_t)startMinute
+                   endHour:(uint8_t)endHour
+                 endMinute:(uint8_t)endMinute
+         completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)setYeardaySchedule:(uint8_t)scheduleId
+                    userId:(uint16_t)userId
+            localStartTime:(uint32_t)localStartTime
+              localEndTime:(uint32_t)localEndTime
+         completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)unlockDoor:(char *)pin completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)unlockWithTimeout:(uint16_t)timeoutInSeconds pin:(char *)pin completionHandler:(ResponseHandler)completionHandler;
+
+- (BOOL)readAttributeLockState:(ResponseHandler)completionHandler;
+- (BOOL)configureAttributeLockState:(uint16_t)minInterval
+                        maxInterval:(uint16_t)maxInterval
+                  completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)reportAttributeLockState:(ResponseHandler)reportHandler;
+- (BOOL)readAttributeLockType:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeActuatorEnabled:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler;
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CHIPGroups : NSObject
+
+- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
+- (BOOL)addGroup:(uint16_t)groupId groupName:(char *)groupName completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)addGroupIfIdentifying:(uint16_t)groupId groupName:(char *)groupName completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)getGroupMembership:(uint8_t)groupCount groupList:(uint16_t)groupList completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)removeAllGroups:(ResponseHandler)completionHandler;
+- (BOOL)removeGroup:(uint16_t)groupId completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)viewGroup:(uint16_t)groupId completionHandler:(ResponseHandler)completionHandler;
+
+- (BOOL)readAttributeNameSupport:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler;
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CHIPIdentify : NSObject
+
+- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
+- (BOOL)identify:(uint16_t)identifyTime completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)identifyQuery:(ResponseHandler)completionHandler;
+
+- (BOOL)readAttributeIdentifyTime:(ResponseHandler)completionHandler;
+- (BOOL)writeAttributeIdentifyTime:(uint16_t)value completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler;
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CHIPLevelControl : NSObject
+
+- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
+- (BOOL)move:(uint8_t)moveMode
+                 rate:(uint8_t)rate
+           optionMask:(uint8_t)optionMask
+       optionOverride:(uint8_t)optionOverride
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)moveToLevel:(uint8_t)level
+       transitionTime:(uint16_t)transitionTime
+           optionMask:(uint8_t)optionMask
+       optionOverride:(uint8_t)optionOverride
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)moveToLevelWithOnOff:(uint8_t)level
+              transitionTime:(uint16_t)transitionTime
+           completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)moveWithOnOff:(uint8_t)moveMode rate:(uint8_t)rate completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)step:(uint8_t)stepMode
+             stepSize:(uint8_t)stepSize
+       transitionTime:(uint16_t)transitionTime
+           optionMask:(uint8_t)optionMask
+       optionOverride:(uint8_t)optionOverride
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)stepWithOnOff:(uint8_t)stepMode
+             stepSize:(uint8_t)stepSize
+       transitionTime:(uint16_t)transitionTime
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)stop:(uint8_t)optionMask optionOverride:(uint8_t)optionOverride completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)stopWithOnOff:(ResponseHandler)completionHandler;
+
+- (BOOL)readAttributeCurrentLevel:(ResponseHandler)completionHandler;
+- (BOOL)configureAttributeCurrentLevel:(uint16_t)minInterval
+                           maxInterval:(uint16_t)maxInterval
+                                change:(uint8_t)change
+                     completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)reportAttributeCurrentLevel:(ResponseHandler)reportHandler;
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler;
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CHIPOnOff : NSObject
+
+- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
+- (BOOL)off:(ResponseHandler)completionHandler;
+- (BOOL)on:(ResponseHandler)completionHandler;
+- (BOOL)toggle:(ResponseHandler)completionHandler;
+
+- (BOOL)readAttributeOnOff:(ResponseHandler)completionHandler;
+- (BOOL)configureAttributeOnOff:(uint16_t)minInterval
+                    maxInterval:(uint16_t)maxInterval
+              completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)reportAttributeOnOff:(ResponseHandler)reportHandler;
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler;
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CHIPScenes : NSObject
+
+- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
+- (BOOL)addScene:(uint16_t)groupId
+              sceneId:(uint8_t)sceneId
+       transitionTime:(uint16_t)transitionTime
+            sceneName:(char *)sceneName
+            clusterId:(uint16_t)clusterId
+               length:(uint8_t)length
+                value:(uint8_t)value
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)getSceneMembership:(uint16_t)groupId completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)recallScene:(uint16_t)groupId
+              sceneId:(uint8_t)sceneId
+       transitionTime:(uint16_t)transitionTime
+    completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)removeAllScenes:(uint16_t)groupId completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)removeScene:(uint16_t)groupId sceneId:(uint8_t)sceneId completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)storeScene:(uint16_t)groupId sceneId:(uint8_t)sceneId completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)viewScene:(uint16_t)groupId sceneId:(uint8_t)sceneId completionHandler:(ResponseHandler)completionHandler;
+
+- (BOOL)readAttributeSceneCount:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeCurrentScene:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeCurrentGroup:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeSceneValid:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeNameSupport:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler;
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CHIPTemperatureMeasurement : NSObject
+
+- (nullable instancetype)initWithDevice:(CHIPDevice *)device endpoint:(uint8_t)endpoint queue:(dispatch_queue_t)queue;
+
+- (BOOL)readAttributeMeasuredValue:(ResponseHandler)completionHandler;
+- (BOOL)configureAttributeMeasuredValue:(uint16_t)minInterval
+                            maxInterval:(uint16_t)maxInterval
+                                 change:(int16_t)change
+                      completionHandler:(ResponseHandler)completionHandler;
+- (BOOL)reportAttributeMeasuredValue:(ResponseHandler)reportHandler;
+- (BOOL)readAttributeMinMeasuredValue:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeMaxMeasuredValue:(ResponseHandler)completionHandler;
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler;
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif /* CHIP_CLUSTERS_H */
diff --git a/src/darwin/Framework/CHIP/gen/CHIPClustersObjc.mm b/src/darwin/Framework/CHIP/gen/CHIPClustersObjc.mm
new file mode 100644
index 0000000..179c28b
--- /dev/null
+++ b/src/darwin/Framework/CHIP/gen/CHIPClustersObjc.mm
@@ -0,0 +1,5760 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+#import <Foundation/Foundation.h>
+
+#import "CHIPDevice.h"
+#import "CHIPDevice_Internal.h"
+#import "gen/CHIPClientCallbacks.h"
+#import "gen/CHIPClustersObjc.h"
+
+#include <controller/CHIPClusters.h>
+
+using namespace ::chip;
+
+class CHIPDefaultSuccessCallbackBridge : public Callback::Callback<DefaultSuccessCallback> {
+public:
+    CHIPDefaultSuccessCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DefaultSuccessCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDefaultSuccessCallbackBridge() {};
+
+    static void CallbackFn(void * context)
+    {
+        CHIPDefaultSuccessCallbackBridge * callback = reinterpret_cast<CHIPDefaultSuccessCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, nil);
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDefaultFailureCallbackBridge : public Callback::Callback<DefaultFailureCallback> {
+public:
+    CHIPDefaultFailureCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DefaultFailureCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDefaultFailureCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint8_t status)
+    {
+        CHIPDefaultFailureCallbackBridge * callback = reinterpret_cast<CHIPDefaultFailureCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                NSError * error = [NSError errorWithDomain:@"ZCL" code:status userInfo:@ { NSLocalizedDescriptionKey : @"" }];
+                callback->mHandler(error, nil);
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPUnsupportedAttributeCallbackBridge : public Callback::Callback<DefaultSuccessCallback> {
+public:
+    CHIPUnsupportedAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DefaultSuccessCallback>(CallbackFn, this)
+    {
+    }
+
+    ~CHIPUnsupportedAttributeCallbackBridge() {};
+
+    static void CallbackFn(void * context)
+    {
+        CHIPUnsupportedAttributeCallbackBridge * callback = reinterpret_cast<CHIPUnsupportedAttributeCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                NSError * error = [NSError errorWithDomain:@"ZCL"
+                                                      code:0
+                                                  userInfo:@ { NSLocalizedDescriptionKey : @"Unsuported attribute type" }];
+                callback->mHandler(error, nil);
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPBooleanAttributeCallbackBridge : public Callback::Callback<BooleanAttributeCallback> {
+public:
+    CHIPBooleanAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
+        : Callback::Callback<BooleanAttributeCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+        , mKeepAlive(keepAlive)
+    {
+    }
+
+    ~CHIPBooleanAttributeCallbackBridge() {};
+
+    static void CallbackFn(void * context, bool value)
+    {
+        CHIPBooleanAttributeCallbackBridge * callback = reinterpret_cast<CHIPBooleanAttributeCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ { @"value" : [NSNumber numberWithBool:value] });
+                if (!callback->mKeepAlive) {
+                    callback->Cancel();
+                    delete callback;
+                }
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+    bool mKeepAlive;
+};
+
+class CHIPInt8uAttributeCallbackBridge : public Callback::Callback<Int8uAttributeCallback> {
+public:
+    CHIPInt8uAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
+        : Callback::Callback<Int8uAttributeCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+        , mKeepAlive(keepAlive)
+    {
+    }
+
+    ~CHIPInt8uAttributeCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint8_t value)
+    {
+        CHIPInt8uAttributeCallbackBridge * callback = reinterpret_cast<CHIPInt8uAttributeCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ { @"value" : [NSNumber numberWithUnsignedChar:value] });
+                if (!callback->mKeepAlive) {
+                    callback->Cancel();
+                    delete callback;
+                }
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+    bool mKeepAlive;
+};
+
+class CHIPInt8sAttributeCallbackBridge : public Callback::Callback<Int8sAttributeCallback> {
+public:
+    CHIPInt8sAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
+        : Callback::Callback<Int8sAttributeCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+        , mKeepAlive(keepAlive)
+    {
+    }
+
+    ~CHIPInt8sAttributeCallbackBridge() {};
+
+    static void CallbackFn(void * context, int8_t value)
+    {
+        CHIPInt8sAttributeCallbackBridge * callback = reinterpret_cast<CHIPInt8sAttributeCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ { @"value" : [NSNumber numberWithChar:value] });
+                if (!callback->mKeepAlive) {
+                    callback->Cancel();
+                    delete callback;
+                }
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+    bool mKeepAlive;
+};
+
+class CHIPInt16uAttributeCallbackBridge : public Callback::Callback<Int16uAttributeCallback> {
+public:
+    CHIPInt16uAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
+        : Callback::Callback<Int16uAttributeCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+        , mKeepAlive(keepAlive)
+    {
+    }
+
+    ~CHIPInt16uAttributeCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint16_t value)
+    {
+        CHIPInt16uAttributeCallbackBridge * callback = reinterpret_cast<CHIPInt16uAttributeCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ { @"value" : [NSNumber numberWithUnsignedShort:value] });
+                if (!callback->mKeepAlive) {
+                    callback->Cancel();
+                    delete callback;
+                }
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+    bool mKeepAlive;
+};
+
+class CHIPInt16sAttributeCallbackBridge : public Callback::Callback<Int16sAttributeCallback> {
+public:
+    CHIPInt16sAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
+        : Callback::Callback<Int16sAttributeCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+        , mKeepAlive(keepAlive)
+    {
+    }
+
+    ~CHIPInt16sAttributeCallbackBridge() {};
+
+    static void CallbackFn(void * context, int16_t value)
+    {
+        CHIPInt16sAttributeCallbackBridge * callback = reinterpret_cast<CHIPInt16sAttributeCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ { @"value" : [NSNumber numberWithShort:value] });
+                if (!callback->mKeepAlive) {
+                    callback->Cancel();
+                    delete callback;
+                }
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+    bool mKeepAlive;
+};
+
+class CHIPDoorLockClusterClearAllPinsResponseCallbackBridge
+    : public Callback::Callback<DoorLockClusterClearAllPinsResponseCallback> {
+public:
+    CHIPDoorLockClusterClearAllPinsResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DoorLockClusterClearAllPinsResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDoorLockClusterClearAllPinsResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context)
+    {
+        CHIPDoorLockClusterClearAllPinsResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPDoorLockClusterClearAllPinsResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {});
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDoorLockClusterClearAllRfidsResponseCallbackBridge
+    : public Callback::Callback<DoorLockClusterClearAllRfidsResponseCallback> {
+public:
+    CHIPDoorLockClusterClearAllRfidsResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DoorLockClusterClearAllRfidsResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDoorLockClusterClearAllRfidsResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context)
+    {
+        CHIPDoorLockClusterClearAllRfidsResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPDoorLockClusterClearAllRfidsResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {});
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDoorLockClusterClearHolidayScheduleResponseCallbackBridge
+    : public Callback::Callback<DoorLockClusterClearHolidayScheduleResponseCallback> {
+public:
+    CHIPDoorLockClusterClearHolidayScheduleResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DoorLockClusterClearHolidayScheduleResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDoorLockClusterClearHolidayScheduleResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context)
+    {
+        CHIPDoorLockClusterClearHolidayScheduleResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPDoorLockClusterClearHolidayScheduleResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {});
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDoorLockClusterClearPinResponseCallbackBridge : public Callback::Callback<DoorLockClusterClearPinResponseCallback> {
+public:
+    CHIPDoorLockClusterClearPinResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DoorLockClusterClearPinResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDoorLockClusterClearPinResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context)
+    {
+        CHIPDoorLockClusterClearPinResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPDoorLockClusterClearPinResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {});
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDoorLockClusterClearRfidResponseCallbackBridge : public Callback::Callback<DoorLockClusterClearRfidResponseCallback> {
+public:
+    CHIPDoorLockClusterClearRfidResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DoorLockClusterClearRfidResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDoorLockClusterClearRfidResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context)
+    {
+        CHIPDoorLockClusterClearRfidResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPDoorLockClusterClearRfidResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {});
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDoorLockClusterClearWeekdayScheduleResponseCallbackBridge
+    : public Callback::Callback<DoorLockClusterClearWeekdayScheduleResponseCallback> {
+public:
+    CHIPDoorLockClusterClearWeekdayScheduleResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DoorLockClusterClearWeekdayScheduleResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDoorLockClusterClearWeekdayScheduleResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context)
+    {
+        CHIPDoorLockClusterClearWeekdayScheduleResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPDoorLockClusterClearWeekdayScheduleResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {});
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDoorLockClusterClearYeardayScheduleResponseCallbackBridge
+    : public Callback::Callback<DoorLockClusterClearYeardayScheduleResponseCallback> {
+public:
+    CHIPDoorLockClusterClearYeardayScheduleResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DoorLockClusterClearYeardayScheduleResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDoorLockClusterClearYeardayScheduleResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context)
+    {
+        CHIPDoorLockClusterClearYeardayScheduleResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPDoorLockClusterClearYeardayScheduleResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {});
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDoorLockClusterGetHolidayScheduleResponseCallbackBridge
+    : public Callback::Callback<DoorLockClusterGetHolidayScheduleResponseCallback> {
+public:
+    CHIPDoorLockClusterGetHolidayScheduleResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DoorLockClusterGetHolidayScheduleResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDoorLockClusterGetHolidayScheduleResponseCallbackBridge() {};
+
+    static void CallbackFn(
+        void * context, uint8_t scheduleId, uint32_t localStartTime, uint32_t localEndTime, uint8_t operatingModeDuringHoliday)
+    {
+        CHIPDoorLockClusterGetHolidayScheduleResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPDoorLockClusterGetHolidayScheduleResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {
+                    @"scheduleId" : [NSNumber numberWithUnsignedChar:scheduleId],
+                    @"localStartTime" : [NSNumber numberWithUnsignedLong:localStartTime],
+                    @"localEndTime" : [NSNumber numberWithUnsignedLong:localEndTime],
+                    @"operatingModeDuringHoliday" : [NSNumber numberWithUnsignedChar:operatingModeDuringHoliday],
+                });
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDoorLockClusterGetLogRecordResponseCallbackBridge
+    : public Callback::Callback<DoorLockClusterGetLogRecordResponseCallback> {
+public:
+    CHIPDoorLockClusterGetLogRecordResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DoorLockClusterGetLogRecordResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDoorLockClusterGetLogRecordResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint16_t logEntryId, uint32_t timestamp, uint8_t eventType, uint8_t source,
+        uint8_t eventIdOrAlarmCode, uint16_t userId, uint8_t * pin)
+    {
+        CHIPDoorLockClusterGetLogRecordResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPDoorLockClusterGetLogRecordResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {
+                    @"logEntryId" : [NSNumber numberWithUnsignedShort:logEntryId],
+                    @"timestamp" : [NSNumber numberWithUnsignedLong:timestamp],
+                    @"eventType" : [NSNumber numberWithUnsignedChar:eventType],
+                    @"source" : [NSNumber numberWithUnsignedChar:source],
+                    @"eventIdOrAlarmCode" : [NSNumber numberWithUnsignedChar:eventIdOrAlarmCode],
+                    @"userId" : [NSNumber numberWithUnsignedShort:userId],
+                    @"pin" : [NSString stringWithFormat:@"%s", pin],
+                });
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDoorLockClusterGetPinResponseCallbackBridge : public Callback::Callback<DoorLockClusterGetPinResponseCallback> {
+public:
+    CHIPDoorLockClusterGetPinResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DoorLockClusterGetPinResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDoorLockClusterGetPinResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint16_t userId, uint8_t userStatus, uint8_t userType, uint8_t * pin)
+    {
+        CHIPDoorLockClusterGetPinResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPDoorLockClusterGetPinResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {
+                    @"userId" : [NSNumber numberWithUnsignedShort:userId],
+                    @"userStatus" : [NSNumber numberWithUnsignedChar:userStatus],
+                    @"userType" : [NSNumber numberWithUnsignedChar:userType],
+                    @"pin" : [NSString stringWithFormat:@"%s", pin],
+                });
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDoorLockClusterGetRfidResponseCallbackBridge : public Callback::Callback<DoorLockClusterGetRfidResponseCallback> {
+public:
+    CHIPDoorLockClusterGetRfidResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DoorLockClusterGetRfidResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDoorLockClusterGetRfidResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint16_t userId, uint8_t userStatus, uint8_t userType, uint8_t * rfid)
+    {
+        CHIPDoorLockClusterGetRfidResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPDoorLockClusterGetRfidResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {
+                    @"userId" : [NSNumber numberWithUnsignedShort:userId],
+                    @"userStatus" : [NSNumber numberWithUnsignedChar:userStatus],
+                    @"userType" : [NSNumber numberWithUnsignedChar:userType],
+                    @"rfid" : [NSString stringWithFormat:@"%s", rfid],
+                });
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDoorLockClusterGetUserTypeResponseCallbackBridge : public Callback::Callback<DoorLockClusterGetUserTypeResponseCallback> {
+public:
+    CHIPDoorLockClusterGetUserTypeResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DoorLockClusterGetUserTypeResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDoorLockClusterGetUserTypeResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint16_t userId, uint8_t userType)
+    {
+        CHIPDoorLockClusterGetUserTypeResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPDoorLockClusterGetUserTypeResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {
+                    @"userId" : [NSNumber numberWithUnsignedShort:userId],
+                    @"userType" : [NSNumber numberWithUnsignedChar:userType],
+                });
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDoorLockClusterGetWeekdayScheduleResponseCallbackBridge
+    : public Callback::Callback<DoorLockClusterGetWeekdayScheduleResponseCallback> {
+public:
+    CHIPDoorLockClusterGetWeekdayScheduleResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DoorLockClusterGetWeekdayScheduleResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDoorLockClusterGetWeekdayScheduleResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint8_t scheduleId, uint16_t userId, uint8_t daysMask, uint8_t startHour,
+        uint8_t startMinute, uint8_t endHour, uint8_t endMinute)
+    {
+        CHIPDoorLockClusterGetWeekdayScheduleResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPDoorLockClusterGetWeekdayScheduleResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {
+                    @"scheduleId" : [NSNumber numberWithUnsignedChar:scheduleId],
+                    @"userId" : [NSNumber numberWithUnsignedShort:userId],
+                    @"daysMask" : [NSNumber numberWithUnsignedChar:daysMask],
+                    @"startHour" : [NSNumber numberWithUnsignedChar:startHour],
+                    @"startMinute" : [NSNumber numberWithUnsignedChar:startMinute],
+                    @"endHour" : [NSNumber numberWithUnsignedChar:endHour],
+                    @"endMinute" : [NSNumber numberWithUnsignedChar:endMinute],
+                });
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDoorLockClusterGetYeardayScheduleResponseCallbackBridge
+    : public Callback::Callback<DoorLockClusterGetYeardayScheduleResponseCallback> {
+public:
+    CHIPDoorLockClusterGetYeardayScheduleResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DoorLockClusterGetYeardayScheduleResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDoorLockClusterGetYeardayScheduleResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint8_t scheduleId, uint16_t userId, uint32_t localStartTime, uint32_t localEndTime)
+    {
+        CHIPDoorLockClusterGetYeardayScheduleResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPDoorLockClusterGetYeardayScheduleResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {
+                    @"scheduleId" : [NSNumber numberWithUnsignedChar:scheduleId],
+                    @"userId" : [NSNumber numberWithUnsignedShort:userId],
+                    @"localStartTime" : [NSNumber numberWithUnsignedLong:localStartTime],
+                    @"localEndTime" : [NSNumber numberWithUnsignedLong:localEndTime],
+                });
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDoorLockClusterLockDoorResponseCallbackBridge : public Callback::Callback<DoorLockClusterLockDoorResponseCallback> {
+public:
+    CHIPDoorLockClusterLockDoorResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DoorLockClusterLockDoorResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDoorLockClusterLockDoorResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context)
+    {
+        CHIPDoorLockClusterLockDoorResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPDoorLockClusterLockDoorResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {});
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDoorLockClusterSetHolidayScheduleResponseCallbackBridge
+    : public Callback::Callback<DoorLockClusterSetHolidayScheduleResponseCallback> {
+public:
+    CHIPDoorLockClusterSetHolidayScheduleResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DoorLockClusterSetHolidayScheduleResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDoorLockClusterSetHolidayScheduleResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context)
+    {
+        CHIPDoorLockClusterSetHolidayScheduleResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPDoorLockClusterSetHolidayScheduleResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {});
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDoorLockClusterSetPinResponseCallbackBridge : public Callback::Callback<DoorLockClusterSetPinResponseCallback> {
+public:
+    CHIPDoorLockClusterSetPinResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DoorLockClusterSetPinResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDoorLockClusterSetPinResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context)
+    {
+        CHIPDoorLockClusterSetPinResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPDoorLockClusterSetPinResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {});
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDoorLockClusterSetRfidResponseCallbackBridge : public Callback::Callback<DoorLockClusterSetRfidResponseCallback> {
+public:
+    CHIPDoorLockClusterSetRfidResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DoorLockClusterSetRfidResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDoorLockClusterSetRfidResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context)
+    {
+        CHIPDoorLockClusterSetRfidResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPDoorLockClusterSetRfidResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {});
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDoorLockClusterSetUserTypeResponseCallbackBridge : public Callback::Callback<DoorLockClusterSetUserTypeResponseCallback> {
+public:
+    CHIPDoorLockClusterSetUserTypeResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DoorLockClusterSetUserTypeResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDoorLockClusterSetUserTypeResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context)
+    {
+        CHIPDoorLockClusterSetUserTypeResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPDoorLockClusterSetUserTypeResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {});
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDoorLockClusterSetWeekdayScheduleResponseCallbackBridge
+    : public Callback::Callback<DoorLockClusterSetWeekdayScheduleResponseCallback> {
+public:
+    CHIPDoorLockClusterSetWeekdayScheduleResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DoorLockClusterSetWeekdayScheduleResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDoorLockClusterSetWeekdayScheduleResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context)
+    {
+        CHIPDoorLockClusterSetWeekdayScheduleResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPDoorLockClusterSetWeekdayScheduleResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {});
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDoorLockClusterSetYeardayScheduleResponseCallbackBridge
+    : public Callback::Callback<DoorLockClusterSetYeardayScheduleResponseCallback> {
+public:
+    CHIPDoorLockClusterSetYeardayScheduleResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DoorLockClusterSetYeardayScheduleResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDoorLockClusterSetYeardayScheduleResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context)
+    {
+        CHIPDoorLockClusterSetYeardayScheduleResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPDoorLockClusterSetYeardayScheduleResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {});
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDoorLockClusterUnlockDoorResponseCallbackBridge : public Callback::Callback<DoorLockClusterUnlockDoorResponseCallback> {
+public:
+    CHIPDoorLockClusterUnlockDoorResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DoorLockClusterUnlockDoorResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDoorLockClusterUnlockDoorResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context)
+    {
+        CHIPDoorLockClusterUnlockDoorResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPDoorLockClusterUnlockDoorResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {});
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPDoorLockClusterUnlockWithTimeoutResponseCallbackBridge
+    : public Callback::Callback<DoorLockClusterUnlockWithTimeoutResponseCallback> {
+public:
+    CHIPDoorLockClusterUnlockWithTimeoutResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<DoorLockClusterUnlockWithTimeoutResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPDoorLockClusterUnlockWithTimeoutResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context)
+    {
+        CHIPDoorLockClusterUnlockWithTimeoutResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPDoorLockClusterUnlockWithTimeoutResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {});
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPGroupsClusterAddGroupResponseCallbackBridge : public Callback::Callback<GroupsClusterAddGroupResponseCallback> {
+public:
+    CHIPGroupsClusterAddGroupResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<GroupsClusterAddGroupResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPGroupsClusterAddGroupResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint16_t groupId)
+    {
+        CHIPGroupsClusterAddGroupResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPGroupsClusterAddGroupResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {
+                    @"groupId" : [NSNumber numberWithUnsignedShort:groupId],
+                });
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPGroupsClusterGetGroupMembershipResponseCallbackBridge
+    : public Callback::Callback<GroupsClusterGetGroupMembershipResponseCallback> {
+public:
+    CHIPGroupsClusterGetGroupMembershipResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<GroupsClusterGetGroupMembershipResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPGroupsClusterGetGroupMembershipResponseCallbackBridge() {};
+
+    static void CallbackFn(
+        void * context, uint8_t capacity, uint8_t groupCount, /* TYPE WARNING: array array defaults to */ uint8_t * groupList)
+    {
+        CHIPGroupsClusterGetGroupMembershipResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPGroupsClusterGetGroupMembershipResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {
+                    @"capacity" : [NSNumber numberWithUnsignedChar:capacity],
+                    @"groupCount" : [NSNumber numberWithUnsignedChar:groupCount],
+                    // groupList: /* TYPE WARNING: array array defaults to */ uint8_t *
+                    // Conversion from this type to Objc is not properly implemented yet
+                });
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPGroupsClusterRemoveGroupResponseCallbackBridge : public Callback::Callback<GroupsClusterRemoveGroupResponseCallback> {
+public:
+    CHIPGroupsClusterRemoveGroupResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<GroupsClusterRemoveGroupResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPGroupsClusterRemoveGroupResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint16_t groupId)
+    {
+        CHIPGroupsClusterRemoveGroupResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPGroupsClusterRemoveGroupResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {
+                    @"groupId" : [NSNumber numberWithUnsignedShort:groupId],
+                });
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPGroupsClusterViewGroupResponseCallbackBridge : public Callback::Callback<GroupsClusterViewGroupResponseCallback> {
+public:
+    CHIPGroupsClusterViewGroupResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<GroupsClusterViewGroupResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPGroupsClusterViewGroupResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint16_t groupId, uint8_t * groupName)
+    {
+        CHIPGroupsClusterViewGroupResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPGroupsClusterViewGroupResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {
+                    @"groupId" : [NSNumber numberWithUnsignedShort:groupId],
+                    @"groupName" : [NSString stringWithFormat:@"%s", groupName],
+                });
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPIdentifyClusterIdentifyQueryResponseCallbackBridge
+    : public Callback::Callback<IdentifyClusterIdentifyQueryResponseCallback> {
+public:
+    CHIPIdentifyClusterIdentifyQueryResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<IdentifyClusterIdentifyQueryResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPIdentifyClusterIdentifyQueryResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint16_t timeout)
+    {
+        CHIPIdentifyClusterIdentifyQueryResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPIdentifyClusterIdentifyQueryResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {
+                    @"timeout" : [NSNumber numberWithUnsignedShort:timeout],
+                });
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPScenesClusterAddSceneResponseCallbackBridge : public Callback::Callback<ScenesClusterAddSceneResponseCallback> {
+public:
+    CHIPScenesClusterAddSceneResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<ScenesClusterAddSceneResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPScenesClusterAddSceneResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint16_t groupId, uint8_t sceneId)
+    {
+        CHIPScenesClusterAddSceneResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPScenesClusterAddSceneResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {
+                    @"groupId" : [NSNumber numberWithUnsignedShort:groupId],
+                    @"sceneId" : [NSNumber numberWithUnsignedChar:sceneId],
+                });
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPScenesClusterGetSceneMembershipResponseCallbackBridge
+    : public Callback::Callback<ScenesClusterGetSceneMembershipResponseCallback> {
+public:
+    CHIPScenesClusterGetSceneMembershipResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<ScenesClusterGetSceneMembershipResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPScenesClusterGetSceneMembershipResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint8_t capacity, uint16_t groupId, uint8_t sceneCount,
+        /* TYPE WARNING: array array defaults to */ uint8_t * sceneList)
+    {
+        CHIPScenesClusterGetSceneMembershipResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPScenesClusterGetSceneMembershipResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {
+                    @"capacity" : [NSNumber numberWithUnsignedChar:capacity],
+                    @"groupId" : [NSNumber numberWithUnsignedShort:groupId],
+                    @"sceneCount" : [NSNumber numberWithUnsignedChar:sceneCount],
+                    // sceneList: /* TYPE WARNING: array array defaults to */ uint8_t *
+                    // Conversion from this type to Objc is not properly implemented yet
+                });
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPScenesClusterRemoveAllScenesResponseCallbackBridge
+    : public Callback::Callback<ScenesClusterRemoveAllScenesResponseCallback> {
+public:
+    CHIPScenesClusterRemoveAllScenesResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<ScenesClusterRemoveAllScenesResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPScenesClusterRemoveAllScenesResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint16_t groupId)
+    {
+        CHIPScenesClusterRemoveAllScenesResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPScenesClusterRemoveAllScenesResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {
+                    @"groupId" : [NSNumber numberWithUnsignedShort:groupId],
+                });
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPScenesClusterRemoveSceneResponseCallbackBridge : public Callback::Callback<ScenesClusterRemoveSceneResponseCallback> {
+public:
+    CHIPScenesClusterRemoveSceneResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<ScenesClusterRemoveSceneResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPScenesClusterRemoveSceneResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint16_t groupId, uint8_t sceneId)
+    {
+        CHIPScenesClusterRemoveSceneResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPScenesClusterRemoveSceneResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {
+                    @"groupId" : [NSNumber numberWithUnsignedShort:groupId],
+                    @"sceneId" : [NSNumber numberWithUnsignedChar:sceneId],
+                });
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPScenesClusterStoreSceneResponseCallbackBridge : public Callback::Callback<ScenesClusterStoreSceneResponseCallback> {
+public:
+    CHIPScenesClusterStoreSceneResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<ScenesClusterStoreSceneResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPScenesClusterStoreSceneResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint16_t groupId, uint8_t sceneId)
+    {
+        CHIPScenesClusterStoreSceneResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPScenesClusterStoreSceneResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {
+                    @"groupId" : [NSNumber numberWithUnsignedShort:groupId],
+                    @"sceneId" : [NSNumber numberWithUnsignedChar:sceneId],
+                });
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+class CHIPScenesClusterViewSceneResponseCallbackBridge : public Callback::Callback<ScenesClusterViewSceneResponseCallback> {
+public:
+    CHIPScenesClusterViewSceneResponseCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
+        : Callback::Callback<ScenesClusterViewSceneResponseCallback>(CallbackFn, this)
+        , mHandler(handler)
+        , mQueue(queue)
+    {
+    }
+
+    ~CHIPScenesClusterViewSceneResponseCallbackBridge() {};
+
+    static void CallbackFn(void * context, uint16_t groupId, uint8_t sceneId, uint16_t transitionTime, uint8_t * sceneName,
+        /* TYPE WARNING: array array defaults to */ uint8_t * extensionFieldSets)
+    {
+        CHIPScenesClusterViewSceneResponseCallbackBridge * callback
+            = reinterpret_cast<CHIPScenesClusterViewSceneResponseCallbackBridge *>(context);
+        if (callback && callback->mQueue) {
+            dispatch_async(callback->mQueue, ^{
+                callback->mHandler(nil, @ {
+                    @"groupId" : [NSNumber numberWithUnsignedShort:groupId],
+                    @"sceneId" : [NSNumber numberWithUnsignedChar:sceneId],
+                    @"transitionTime" : [NSNumber numberWithUnsignedShort:transitionTime],
+                    @"sceneName" : [NSString stringWithFormat:@"%s", sceneName],
+                    // extensionFieldSets: /* TYPE WARNING: array array defaults to */ uint8_t *
+                    // Conversion from this type to Objc is not properly implemented yet
+                });
+                callback->Cancel();
+                delete callback;
+            });
+        }
+    };
+
+private:
+    ResponseHandler mHandler;
+    dispatch_queue_t mQueue;
+};
+
+@interface CHIPBarrierControl ()
+
+@property (readonly) Controller::BarrierControlCluster cppCluster;
+@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
+@end
+
+@implementation CHIPBarrierControl
+
+- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(EndpointId)endpoint queue:(dispatch_queue_t)queue
+{
+    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
+
+    if (err != CHIP_NO_ERROR) {
+        return nil;
+    }
+
+    if (self = [super init]) {
+        _callbackQueue = queue;
+    }
+
+    return self;
+}
+
+- (BOOL)barrierControlGoToPercent:(uint8_t)percentOpen completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.BarrierControlGoToPercent(onSuccess->Cancel(), onFailure->Cancel(), percentOpen);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)barrierControlStop:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.BarrierControlStop(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeBarrierMovingState:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeBarrierMovingState(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeBarrierSafetyStatus:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeBarrierSafetyStatus(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeBarrierCapabilities:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeBarrierCapabilities(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeBarrierPosition:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeBarrierPosition(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+@end
+
+@interface CHIPBasic ()
+
+@property (readonly) Controller::BasicCluster cppCluster;
+@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
+@end
+
+@implementation CHIPBasic
+
+- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(EndpointId)endpoint queue:(dispatch_queue_t)queue
+{
+    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
+
+    if (err != CHIP_NO_ERROR) {
+        return nil;
+    }
+
+    if (self = [super init]) {
+        _callbackQueue = queue;
+    }
+
+    return self;
+}
+
+- (BOOL)mfgSpecificPing:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.MfgSpecificPing(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)resetToFactoryDefaults:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ResetToFactoryDefaults(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeZclVersion:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeZclVersion(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePowerSource:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePowerSource(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+@end
+
+@interface CHIPBinding ()
+
+@property (readonly) Controller::BindingCluster cppCluster;
+@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
+@end
+
+@implementation CHIPBinding
+
+- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(EndpointId)endpoint queue:(dispatch_queue_t)queue
+{
+    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
+
+    if (err != CHIP_NO_ERROR) {
+        return nil;
+    }
+
+    if (self = [super init]) {
+        _callbackQueue = queue;
+    }
+
+    return self;
+}
+
+- (BOOL)bind:(uint64_t)nodeId
+              groupId:(uint16_t)groupId
+           endpointId:(uint8_t)endpointId
+            clusterId:(uint16_t)clusterId
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.Bind(onSuccess->Cancel(), onFailure->Cancel(), nodeId, groupId, endpointId, clusterId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)unbind:(uint64_t)nodeId
+              groupId:(uint16_t)groupId
+           endpointId:(uint8_t)endpointId
+            clusterId:(uint16_t)clusterId
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.Unbind(onSuccess->Cancel(), onFailure->Cancel(), nodeId, groupId, endpointId, clusterId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+@end
+
+@interface CHIPColorControl ()
+
+@property (readonly) Controller::ColorControlCluster cppCluster;
+@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
+@end
+
+@implementation CHIPColorControl
+
+- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(EndpointId)endpoint queue:(dispatch_queue_t)queue
+{
+    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
+
+    if (err != CHIP_NO_ERROR) {
+        return nil;
+    }
+
+    if (self = [super init]) {
+        _callbackQueue = queue;
+    }
+
+    return self;
+}
+
+- (BOOL)moveColor:(int16_t)rateX
+                rateY:(int16_t)rateY
+          optionsMask:(uint8_t)optionsMask
+      optionsOverride:(uint8_t)optionsOverride
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err
+        = self.cppCluster.MoveColor(onSuccess->Cancel(), onFailure->Cancel(), rateX, rateY, optionsMask, optionsOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)moveColorTemperature:(uint8_t)moveMode
+                        rate:(uint16_t)rate
+     colorTemperatureMinimum:(uint16_t)colorTemperatureMinimum
+     colorTemperatureMaximum:(uint16_t)colorTemperatureMaximum
+                 optionsMask:(uint8_t)optionsMask
+             optionsOverride:(uint8_t)optionsOverride
+           completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.MoveColorTemperature(onSuccess->Cancel(), onFailure->Cancel(), moveMode, rate,
+        colorTemperatureMinimum, colorTemperatureMaximum, optionsMask, optionsOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)moveHue:(uint8_t)moveMode
+                 rate:(uint8_t)rate
+          optionsMask:(uint8_t)optionsMask
+      optionsOverride:(uint8_t)optionsOverride
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err
+        = self.cppCluster.MoveHue(onSuccess->Cancel(), onFailure->Cancel(), moveMode, rate, optionsMask, optionsOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)moveSaturation:(uint8_t)moveMode
+                  rate:(uint8_t)rate
+           optionsMask:(uint8_t)optionsMask
+       optionsOverride:(uint8_t)optionsOverride
+     completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err
+        = self.cppCluster.MoveSaturation(onSuccess->Cancel(), onFailure->Cancel(), moveMode, rate, optionsMask, optionsOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)moveToColor:(uint16_t)colorX
+               colorY:(uint16_t)colorY
+       transitionTime:(uint16_t)transitionTime
+          optionsMask:(uint8_t)optionsMask
+      optionsOverride:(uint8_t)optionsOverride
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.MoveToColor(
+        onSuccess->Cancel(), onFailure->Cancel(), colorX, colorY, transitionTime, optionsMask, optionsOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)moveToColorTemperature:(uint16_t)colorTemperature
+                transitionTime:(uint16_t)transitionTime
+                   optionsMask:(uint8_t)optionsMask
+               optionsOverride:(uint8_t)optionsOverride
+             completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.MoveToColorTemperature(
+        onSuccess->Cancel(), onFailure->Cancel(), colorTemperature, transitionTime, optionsMask, optionsOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)moveToHue:(uint8_t)hue
+            direction:(uint8_t)direction
+       transitionTime:(uint16_t)transitionTime
+          optionsMask:(uint8_t)optionsMask
+      optionsOverride:(uint8_t)optionsOverride
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.MoveToHue(
+        onSuccess->Cancel(), onFailure->Cancel(), hue, direction, transitionTime, optionsMask, optionsOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)moveToHueAndSaturation:(uint8_t)hue
+                    saturation:(uint8_t)saturation
+                transitionTime:(uint16_t)transitionTime
+                   optionsMask:(uint8_t)optionsMask
+               optionsOverride:(uint8_t)optionsOverride
+             completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.MoveToHueAndSaturation(
+        onSuccess->Cancel(), onFailure->Cancel(), hue, saturation, transitionTime, optionsMask, optionsOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)moveToSaturation:(uint8_t)saturation
+          transitionTime:(uint16_t)transitionTime
+             optionsMask:(uint8_t)optionsMask
+         optionsOverride:(uint8_t)optionsOverride
+       completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.MoveToSaturation(
+        onSuccess->Cancel(), onFailure->Cancel(), saturation, transitionTime, optionsMask, optionsOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)stepColor:(int16_t)stepX
+                stepY:(int16_t)stepY
+       transitionTime:(uint16_t)transitionTime
+          optionsMask:(uint8_t)optionsMask
+      optionsOverride:(uint8_t)optionsOverride
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.StepColor(
+        onSuccess->Cancel(), onFailure->Cancel(), stepX, stepY, transitionTime, optionsMask, optionsOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)stepColorTemperature:(uint8_t)stepMode
+                    stepSize:(uint16_t)stepSize
+              transitionTime:(uint16_t)transitionTime
+     colorTemperatureMinimum:(uint16_t)colorTemperatureMinimum
+     colorTemperatureMaximum:(uint16_t)colorTemperatureMaximum
+                 optionsMask:(uint8_t)optionsMask
+             optionsOverride:(uint8_t)optionsOverride
+           completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.StepColorTemperature(onSuccess->Cancel(), onFailure->Cancel(), stepMode, stepSize,
+        transitionTime, colorTemperatureMinimum, colorTemperatureMaximum, optionsMask, optionsOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)stepHue:(uint8_t)stepMode
+             stepSize:(uint8_t)stepSize
+       transitionTime:(uint8_t)transitionTime
+          optionsMask:(uint8_t)optionsMask
+      optionsOverride:(uint8_t)optionsOverride
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.StepHue(
+        onSuccess->Cancel(), onFailure->Cancel(), stepMode, stepSize, transitionTime, optionsMask, optionsOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)stepSaturation:(uint8_t)stepMode
+              stepSize:(uint8_t)stepSize
+        transitionTime:(uint8_t)transitionTime
+           optionsMask:(uint8_t)optionsMask
+       optionsOverride:(uint8_t)optionsOverride
+     completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.StepSaturation(
+        onSuccess->Cancel(), onFailure->Cancel(), stepMode, stepSize, transitionTime, optionsMask, optionsOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)stopMoveStep:(uint8_t)optionsMask
+      optionsOverride:(uint8_t)optionsOverride
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.StopMoveStep(onSuccess->Cancel(), onFailure->Cancel(), optionsMask, optionsOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeCurrentHue:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeCurrentHue(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)configureAttributeCurrentHue:(uint16_t)minInterval
+                         maxInterval:(uint16_t)maxInterval
+                              change:(uint8_t)change
+                   completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err
+        = self.cppCluster.ConfigureAttributeCurrentHue(onSuccess->Cancel(), onFailure->Cancel(), minInterval, maxInterval, change);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)reportAttributeCurrentHue:(ResponseHandler)reportHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onReport = new CHIPInt8uAttributeCallbackBridge(reportHandler, _callbackQueue, true);
+    if (!onReport) {
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReportAttributeCurrentHue(onReport->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onReport;
+        return NO;
+    }
+
+    return YES;
+}
+
+- (BOOL)readAttributeCurrentSaturation:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeCurrentSaturation(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)configureAttributeCurrentSaturation:(uint16_t)minInterval
+                                maxInterval:(uint16_t)maxInterval
+                                     change:(uint8_t)change
+                          completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ConfigureAttributeCurrentSaturation(
+        onSuccess->Cancel(), onFailure->Cancel(), minInterval, maxInterval, change);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)reportAttributeCurrentSaturation:(ResponseHandler)reportHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onReport = new CHIPInt8uAttributeCallbackBridge(reportHandler, _callbackQueue, true);
+    if (!onReport) {
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReportAttributeCurrentSaturation(onReport->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onReport;
+        return NO;
+    }
+
+    return YES;
+}
+
+- (BOOL)readAttributeRemainingTime:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeRemainingTime(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeCurrentX:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeCurrentX(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)configureAttributeCurrentX:(uint16_t)minInterval
+                       maxInterval:(uint16_t)maxInterval
+                            change:(uint16_t)change
+                 completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err
+        = self.cppCluster.ConfigureAttributeCurrentX(onSuccess->Cancel(), onFailure->Cancel(), minInterval, maxInterval, change);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)reportAttributeCurrentX:(ResponseHandler)reportHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onReport = new CHIPInt16uAttributeCallbackBridge(reportHandler, _callbackQueue, true);
+    if (!onReport) {
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReportAttributeCurrentX(onReport->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onReport;
+        return NO;
+    }
+
+    return YES;
+}
+
+- (BOOL)readAttributeCurrentY:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeCurrentY(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)configureAttributeCurrentY:(uint16_t)minInterval
+                       maxInterval:(uint16_t)maxInterval
+                            change:(uint16_t)change
+                 completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err
+        = self.cppCluster.ConfigureAttributeCurrentY(onSuccess->Cancel(), onFailure->Cancel(), minInterval, maxInterval, change);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)reportAttributeCurrentY:(ResponseHandler)reportHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onReport = new CHIPInt16uAttributeCallbackBridge(reportHandler, _callbackQueue, true);
+    if (!onReport) {
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReportAttributeCurrentY(onReport->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onReport;
+        return NO;
+    }
+
+    return YES;
+}
+
+- (BOOL)readAttributeDriftCompensation:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeDriftCompensation(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeCompensationText:(ResponseHandler)completionHandler
+{
+    CHIPUnsupportedAttributeCallbackBridge * onSuccess
+        = new CHIPUnsupportedAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeCompensationText(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorTemperature:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorTemperature(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)configureAttributeColorTemperature:(uint16_t)minInterval
+                               maxInterval:(uint16_t)maxInterval
+                                    change:(uint16_t)change
+                         completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ConfigureAttributeColorTemperature(
+        onSuccess->Cancel(), onFailure->Cancel(), minInterval, maxInterval, change);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)reportAttributeColorTemperature:(ResponseHandler)reportHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onReport = new CHIPInt16uAttributeCallbackBridge(reportHandler, _callbackQueue, true);
+    if (!onReport) {
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReportAttributeColorTemperature(onReport->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onReport;
+        return NO;
+    }
+
+    return YES;
+}
+
+- (BOOL)readAttributeColorMode:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorMode(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorControlOptions:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorControlOptions(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)writeAttributeColorControlOptions:(uint8_t)value completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.WriteAttributeColorControlOptions(onSuccess->Cancel(), onFailure->Cancel(), value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeNumberOfPrimaries:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeNumberOfPrimaries(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary1X:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary1X(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary1Y:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary1Y(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary1Intensity:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary1Intensity(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary2X:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary2X(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary2Y:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary2Y(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary2Intensity:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary2Intensity(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary3X:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary3X(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary3Y:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary3Y(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary3Intensity:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary3Intensity(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary4X:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary4X(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary4Y:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary4Y(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary4Intensity:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary4Intensity(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary5X:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary5X(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary5Y:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary5Y(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary5Intensity:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary5Intensity(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary6X:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary6X(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary6Y:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary6Y(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributePrimary6Intensity:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributePrimary6Intensity(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeWhitePointX:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeWhitePointX(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)writeAttributeWhitePointX:(uint16_t)value completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.WriteAttributeWhitePointX(onSuccess->Cancel(), onFailure->Cancel(), value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeWhitePointY:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeWhitePointY(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)writeAttributeWhitePointY:(uint16_t)value completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.WriteAttributeWhitePointY(onSuccess->Cancel(), onFailure->Cancel(), value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorPointRX:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorPointRX(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)writeAttributeColorPointRX:(uint16_t)value completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.WriteAttributeColorPointRX(onSuccess->Cancel(), onFailure->Cancel(), value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorPointRY:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorPointRY(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)writeAttributeColorPointRY:(uint16_t)value completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.WriteAttributeColorPointRY(onSuccess->Cancel(), onFailure->Cancel(), value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorPointRIntensity:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorPointRIntensity(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)writeAttributeColorPointRIntensity:(uint8_t)value completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.WriteAttributeColorPointRIntensity(onSuccess->Cancel(), onFailure->Cancel(), value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorPointGX:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorPointGX(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)writeAttributeColorPointGX:(uint16_t)value completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.WriteAttributeColorPointGX(onSuccess->Cancel(), onFailure->Cancel(), value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorPointGY:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorPointGY(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)writeAttributeColorPointGY:(uint16_t)value completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.WriteAttributeColorPointGY(onSuccess->Cancel(), onFailure->Cancel(), value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorPointGIntensity:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorPointGIntensity(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)writeAttributeColorPointGIntensity:(uint8_t)value completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.WriteAttributeColorPointGIntensity(onSuccess->Cancel(), onFailure->Cancel(), value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorPointBX:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorPointBX(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)writeAttributeColorPointBX:(uint16_t)value completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.WriteAttributeColorPointBX(onSuccess->Cancel(), onFailure->Cancel(), value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorPointBY:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorPointBY(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)writeAttributeColorPointBY:(uint16_t)value completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.WriteAttributeColorPointBY(onSuccess->Cancel(), onFailure->Cancel(), value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorPointBIntensity:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorPointBIntensity(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)writeAttributeColorPointBIntensity:(uint8_t)value completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.WriteAttributeColorPointBIntensity(onSuccess->Cancel(), onFailure->Cancel(), value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeEnhancedCurrentHue:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeEnhancedCurrentHue(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeEnhancedColorMode:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeEnhancedColorMode(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorLoopActive:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorLoopActive(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorLoopDirection:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorLoopDirection(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorLoopTime:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorLoopTime(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorCapabilities:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorCapabilities(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorTempPhysicalMin:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorTempPhysicalMin(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeColorTempPhysicalMax:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeColorTempPhysicalMax(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeCoupleColorTempToLevelMinMireds:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeCoupleColorTempToLevelMinMireds(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeStartUpColorTemperatureMireds:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeStartUpColorTemperatureMireds(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)writeAttributeStartUpColorTemperatureMireds:(uint16_t)value completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.WriteAttributeStartUpColorTemperatureMireds(onSuccess->Cancel(), onFailure->Cancel(), value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+@end
+
+@interface CHIPDoorLock ()
+
+@property (readonly) Controller::DoorLockCluster cppCluster;
+@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
+@end
+
+@implementation CHIPDoorLock
+
+- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(EndpointId)endpoint queue:(dispatch_queue_t)queue
+{
+    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
+
+    if (err != CHIP_NO_ERROR) {
+        return nil;
+    }
+
+    if (self = [super init]) {
+        _callbackQueue = queue;
+    }
+
+    return self;
+}
+
+- (BOOL)clearAllPins:(ResponseHandler)completionHandler
+{
+    CHIPDoorLockClusterClearAllPinsResponseCallbackBridge * onSuccess
+        = new CHIPDoorLockClusterClearAllPinsResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ClearAllPins(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)clearAllRfids:(ResponseHandler)completionHandler
+{
+    CHIPDoorLockClusterClearAllRfidsResponseCallbackBridge * onSuccess
+        = new CHIPDoorLockClusterClearAllRfidsResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ClearAllRfids(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)clearHolidaySchedule:(uint8_t)scheduleId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDoorLockClusterClearHolidayScheduleResponseCallbackBridge * onSuccess
+        = new CHIPDoorLockClusterClearHolidayScheduleResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ClearHolidaySchedule(onSuccess->Cancel(), onFailure->Cancel(), scheduleId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)clearPin:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDoorLockClusterClearPinResponseCallbackBridge * onSuccess
+        = new CHIPDoorLockClusterClearPinResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ClearPin(onSuccess->Cancel(), onFailure->Cancel(), userId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)clearRfid:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDoorLockClusterClearRfidResponseCallbackBridge * onSuccess
+        = new CHIPDoorLockClusterClearRfidResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ClearRfid(onSuccess->Cancel(), onFailure->Cancel(), userId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)clearWeekdaySchedule:(uint8_t)scheduleId userId:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDoorLockClusterClearWeekdayScheduleResponseCallbackBridge * onSuccess
+        = new CHIPDoorLockClusterClearWeekdayScheduleResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ClearWeekdaySchedule(onSuccess->Cancel(), onFailure->Cancel(), scheduleId, userId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)clearYeardaySchedule:(uint8_t)scheduleId userId:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDoorLockClusterClearYeardayScheduleResponseCallbackBridge * onSuccess
+        = new CHIPDoorLockClusterClearYeardayScheduleResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ClearYeardaySchedule(onSuccess->Cancel(), onFailure->Cancel(), scheduleId, userId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)getHolidaySchedule:(uint8_t)scheduleId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDoorLockClusterGetHolidayScheduleResponseCallbackBridge * onSuccess
+        = new CHIPDoorLockClusterGetHolidayScheduleResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.GetHolidaySchedule(onSuccess->Cancel(), onFailure->Cancel(), scheduleId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)getLogRecord:(uint16_t)logIndex completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDoorLockClusterGetLogRecordResponseCallbackBridge * onSuccess
+        = new CHIPDoorLockClusterGetLogRecordResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.GetLogRecord(onSuccess->Cancel(), onFailure->Cancel(), logIndex);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)getPin:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDoorLockClusterGetPinResponseCallbackBridge * onSuccess
+        = new CHIPDoorLockClusterGetPinResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.GetPin(onSuccess->Cancel(), onFailure->Cancel(), userId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)getRfid:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDoorLockClusterGetRfidResponseCallbackBridge * onSuccess
+        = new CHIPDoorLockClusterGetRfidResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.GetRfid(onSuccess->Cancel(), onFailure->Cancel(), userId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)getUserType:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDoorLockClusterGetUserTypeResponseCallbackBridge * onSuccess
+        = new CHIPDoorLockClusterGetUserTypeResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.GetUserType(onSuccess->Cancel(), onFailure->Cancel(), userId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)getWeekdaySchedule:(uint8_t)scheduleId userId:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDoorLockClusterGetWeekdayScheduleResponseCallbackBridge * onSuccess
+        = new CHIPDoorLockClusterGetWeekdayScheduleResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.GetWeekdaySchedule(onSuccess->Cancel(), onFailure->Cancel(), scheduleId, userId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)getYeardaySchedule:(uint8_t)scheduleId userId:(uint16_t)userId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDoorLockClusterGetYeardayScheduleResponseCallbackBridge * onSuccess
+        = new CHIPDoorLockClusterGetYeardayScheduleResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.GetYeardaySchedule(onSuccess->Cancel(), onFailure->Cancel(), scheduleId, userId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)lockDoor:(char *)pin completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDoorLockClusterLockDoorResponseCallbackBridge * onSuccess
+        = new CHIPDoorLockClusterLockDoorResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.LockDoor(onSuccess->Cancel(), onFailure->Cancel(), pin);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)setHolidaySchedule:(uint8_t)scheduleId
+                localStartTime:(uint32_t)localStartTime
+                  localEndTime:(uint32_t)localEndTime
+    operatingModeDuringHoliday:(uint8_t)operatingModeDuringHoliday
+             completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDoorLockClusterSetHolidayScheduleResponseCallbackBridge * onSuccess
+        = new CHIPDoorLockClusterSetHolidayScheduleResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.SetHolidaySchedule(
+        onSuccess->Cancel(), onFailure->Cancel(), scheduleId, localStartTime, localEndTime, operatingModeDuringHoliday);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)setPin:(uint16_t)userId
+           userStatus:(uint8_t)userStatus
+             userType:(uint8_t)userType
+                  pin:(char *)pin
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDoorLockClusterSetPinResponseCallbackBridge * onSuccess
+        = new CHIPDoorLockClusterSetPinResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.SetPin(onSuccess->Cancel(), onFailure->Cancel(), userId, userStatus, userType, pin);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)setRfid:(uint16_t)userId
+           userStatus:(uint8_t)userStatus
+             userType:(uint8_t)userType
+                   id:(char *)id
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDoorLockClusterSetRfidResponseCallbackBridge * onSuccess
+        = new CHIPDoorLockClusterSetRfidResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.SetRfid(onSuccess->Cancel(), onFailure->Cancel(), userId, userStatus, userType, id);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)setUserType:(uint16_t)userId userType:(uint8_t)userType completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDoorLockClusterSetUserTypeResponseCallbackBridge * onSuccess
+        = new CHIPDoorLockClusterSetUserTypeResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.SetUserType(onSuccess->Cancel(), onFailure->Cancel(), userId, userType);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)setWeekdaySchedule:(uint8_t)scheduleId
+                    userId:(uint16_t)userId
+                  daysMask:(uint8_t)daysMask
+                 startHour:(uint8_t)startHour
+               startMinute:(uint8_t)startMinute
+                   endHour:(uint8_t)endHour
+                 endMinute:(uint8_t)endMinute
+         completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDoorLockClusterSetWeekdayScheduleResponseCallbackBridge * onSuccess
+        = new CHIPDoorLockClusterSetWeekdayScheduleResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.SetWeekdaySchedule(
+        onSuccess->Cancel(), onFailure->Cancel(), scheduleId, userId, daysMask, startHour, startMinute, endHour, endMinute);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)setYeardaySchedule:(uint8_t)scheduleId
+                    userId:(uint16_t)userId
+            localStartTime:(uint32_t)localStartTime
+              localEndTime:(uint32_t)localEndTime
+         completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDoorLockClusterSetYeardayScheduleResponseCallbackBridge * onSuccess
+        = new CHIPDoorLockClusterSetYeardayScheduleResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.SetYeardaySchedule(
+        onSuccess->Cancel(), onFailure->Cancel(), scheduleId, userId, localStartTime, localEndTime);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)unlockDoor:(char *)pin completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDoorLockClusterUnlockDoorResponseCallbackBridge * onSuccess
+        = new CHIPDoorLockClusterUnlockDoorResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.UnlockDoor(onSuccess->Cancel(), onFailure->Cancel(), pin);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)unlockWithTimeout:(uint16_t)timeoutInSeconds pin:(char *)pin completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDoorLockClusterUnlockWithTimeoutResponseCallbackBridge * onSuccess
+        = new CHIPDoorLockClusterUnlockWithTimeoutResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.UnlockWithTimeout(onSuccess->Cancel(), onFailure->Cancel(), timeoutInSeconds, pin);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeLockState:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeLockState(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)configureAttributeLockState:(uint16_t)minInterval
+                        maxInterval:(uint16_t)maxInterval
+                  completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err
+        = self.cppCluster.ConfigureAttributeLockState(onSuccess->Cancel(), onFailure->Cancel(), minInterval, maxInterval);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)reportAttributeLockState:(ResponseHandler)reportHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onReport = new CHIPInt8uAttributeCallbackBridge(reportHandler, _callbackQueue, true);
+    if (!onReport) {
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReportAttributeLockState(onReport->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onReport;
+        return NO;
+    }
+
+    return YES;
+}
+
+- (BOOL)readAttributeLockType:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeLockType(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeActuatorEnabled:(ResponseHandler)completionHandler
+{
+    CHIPBooleanAttributeCallbackBridge * onSuccess = new CHIPBooleanAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeActuatorEnabled(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+@end
+
+@interface CHIPGroups ()
+
+@property (readonly) Controller::GroupsCluster cppCluster;
+@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
+@end
+
+@implementation CHIPGroups
+
+- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(EndpointId)endpoint queue:(dispatch_queue_t)queue
+{
+    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
+
+    if (err != CHIP_NO_ERROR) {
+        return nil;
+    }
+
+    if (self = [super init]) {
+        _callbackQueue = queue;
+    }
+
+    return self;
+}
+
+- (BOOL)addGroup:(uint16_t)groupId groupName:(char *)groupName completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPGroupsClusterAddGroupResponseCallbackBridge * onSuccess
+        = new CHIPGroupsClusterAddGroupResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.AddGroup(onSuccess->Cancel(), onFailure->Cancel(), groupId, groupName);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)addGroupIfIdentifying:(uint16_t)groupId groupName:(char *)groupName completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.AddGroupIfIdentifying(onSuccess->Cancel(), onFailure->Cancel(), groupId, groupName);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)getGroupMembership:(uint8_t)groupCount groupList:(uint16_t)groupList completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPGroupsClusterGetGroupMembershipResponseCallbackBridge * onSuccess
+        = new CHIPGroupsClusterGetGroupMembershipResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.GetGroupMembership(onSuccess->Cancel(), onFailure->Cancel(), groupCount, groupList);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)removeAllGroups:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.RemoveAllGroups(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)removeGroup:(uint16_t)groupId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPGroupsClusterRemoveGroupResponseCallbackBridge * onSuccess
+        = new CHIPGroupsClusterRemoveGroupResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.RemoveGroup(onSuccess->Cancel(), onFailure->Cancel(), groupId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)viewGroup:(uint16_t)groupId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPGroupsClusterViewGroupResponseCallbackBridge * onSuccess
+        = new CHIPGroupsClusterViewGroupResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ViewGroup(onSuccess->Cancel(), onFailure->Cancel(), groupId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeNameSupport:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeNameSupport(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+@end
+
+@interface CHIPIdentify ()
+
+@property (readonly) Controller::IdentifyCluster cppCluster;
+@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
+@end
+
+@implementation CHIPIdentify
+
+- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(EndpointId)endpoint queue:(dispatch_queue_t)queue
+{
+    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
+
+    if (err != CHIP_NO_ERROR) {
+        return nil;
+    }
+
+    if (self = [super init]) {
+        _callbackQueue = queue;
+    }
+
+    return self;
+}
+
+- (BOOL)identify:(uint16_t)identifyTime completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.Identify(onSuccess->Cancel(), onFailure->Cancel(), identifyTime);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)identifyQuery:(ResponseHandler)completionHandler
+{
+    CHIPIdentifyClusterIdentifyQueryResponseCallbackBridge * onSuccess
+        = new CHIPIdentifyClusterIdentifyQueryResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.IdentifyQuery(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeIdentifyTime:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeIdentifyTime(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)writeAttributeIdentifyTime:(uint16_t)value completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.WriteAttributeIdentifyTime(onSuccess->Cancel(), onFailure->Cancel(), value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+@end
+
+@interface CHIPLevelControl ()
+
+@property (readonly) Controller::LevelControlCluster cppCluster;
+@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
+@end
+
+@implementation CHIPLevelControl
+
+- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(EndpointId)endpoint queue:(dispatch_queue_t)queue
+{
+    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
+
+    if (err != CHIP_NO_ERROR) {
+        return nil;
+    }
+
+    if (self = [super init]) {
+        _callbackQueue = queue;
+    }
+
+    return self;
+}
+
+- (BOOL)move:(uint8_t)moveMode
+                 rate:(uint8_t)rate
+           optionMask:(uint8_t)optionMask
+       optionOverride:(uint8_t)optionOverride
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.Move(onSuccess->Cancel(), onFailure->Cancel(), moveMode, rate, optionMask, optionOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)moveToLevel:(uint8_t)level
+       transitionTime:(uint16_t)transitionTime
+           optionMask:(uint8_t)optionMask
+       optionOverride:(uint8_t)optionOverride
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err
+        = self.cppCluster.MoveToLevel(onSuccess->Cancel(), onFailure->Cancel(), level, transitionTime, optionMask, optionOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)moveToLevelWithOnOff:(uint8_t)level
+              transitionTime:(uint16_t)transitionTime
+           completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.MoveToLevelWithOnOff(onSuccess->Cancel(), onFailure->Cancel(), level, transitionTime);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)moveWithOnOff:(uint8_t)moveMode rate:(uint8_t)rate completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.MoveWithOnOff(onSuccess->Cancel(), onFailure->Cancel(), moveMode, rate);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)step:(uint8_t)stepMode
+             stepSize:(uint8_t)stepSize
+       transitionTime:(uint16_t)transitionTime
+           optionMask:(uint8_t)optionMask
+       optionOverride:(uint8_t)optionOverride
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.Step(
+        onSuccess->Cancel(), onFailure->Cancel(), stepMode, stepSize, transitionTime, optionMask, optionOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)stepWithOnOff:(uint8_t)stepMode
+             stepSize:(uint8_t)stepSize
+       transitionTime:(uint16_t)transitionTime
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.StepWithOnOff(onSuccess->Cancel(), onFailure->Cancel(), stepMode, stepSize, transitionTime);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)stop:(uint8_t)optionMask optionOverride:(uint8_t)optionOverride completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.Stop(onSuccess->Cancel(), onFailure->Cancel(), optionMask, optionOverride);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)stopWithOnOff:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.StopWithOnOff(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeCurrentLevel:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeCurrentLevel(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)configureAttributeCurrentLevel:(uint16_t)minInterval
+                           maxInterval:(uint16_t)maxInterval
+                                change:(uint8_t)change
+                     completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ConfigureAttributeCurrentLevel(
+        onSuccess->Cancel(), onFailure->Cancel(), minInterval, maxInterval, change);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)reportAttributeCurrentLevel:(ResponseHandler)reportHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onReport = new CHIPInt8uAttributeCallbackBridge(reportHandler, _callbackQueue, true);
+    if (!onReport) {
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReportAttributeCurrentLevel(onReport->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onReport;
+        return NO;
+    }
+
+    return YES;
+}
+
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+@end
+
+@interface CHIPOnOff ()
+
+@property (readonly) Controller::OnOffCluster cppCluster;
+@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
+@end
+
+@implementation CHIPOnOff
+
+- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(EndpointId)endpoint queue:(dispatch_queue_t)queue
+{
+    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
+
+    if (err != CHIP_NO_ERROR) {
+        return nil;
+    }
+
+    if (self = [super init]) {
+        _callbackQueue = queue;
+    }
+
+    return self;
+}
+
+- (BOOL)off:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.Off(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)on:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.On(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)toggle:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.Toggle(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeOnOff:(ResponseHandler)completionHandler
+{
+    CHIPBooleanAttributeCallbackBridge * onSuccess = new CHIPBooleanAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeOnOff(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)configureAttributeOnOff:(uint16_t)minInterval
+                    maxInterval:(uint16_t)maxInterval
+              completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ConfigureAttributeOnOff(onSuccess->Cancel(), onFailure->Cancel(), minInterval, maxInterval);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)reportAttributeOnOff:(ResponseHandler)reportHandler
+{
+    CHIPBooleanAttributeCallbackBridge * onReport = new CHIPBooleanAttributeCallbackBridge(reportHandler, _callbackQueue, true);
+    if (!onReport) {
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReportAttributeOnOff(onReport->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onReport;
+        return NO;
+    }
+
+    return YES;
+}
+
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+@end
+
+@interface CHIPScenes ()
+
+@property (readonly) Controller::ScenesCluster cppCluster;
+@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
+@end
+
+@implementation CHIPScenes
+
+- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(EndpointId)endpoint queue:(dispatch_queue_t)queue
+{
+    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
+
+    if (err != CHIP_NO_ERROR) {
+        return nil;
+    }
+
+    if (self = [super init]) {
+        _callbackQueue = queue;
+    }
+
+    return self;
+}
+
+- (BOOL)addScene:(uint16_t)groupId
+              sceneId:(uint8_t)sceneId
+       transitionTime:(uint16_t)transitionTime
+            sceneName:(char *)sceneName
+            clusterId:(uint16_t)clusterId
+               length:(uint8_t)length
+                value:(uint8_t)value
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPScenesClusterAddSceneResponseCallbackBridge * onSuccess
+        = new CHIPScenesClusterAddSceneResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.AddScene(
+        onSuccess->Cancel(), onFailure->Cancel(), groupId, sceneId, transitionTime, sceneName, clusterId, length, value);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)getSceneMembership:(uint16_t)groupId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPScenesClusterGetSceneMembershipResponseCallbackBridge * onSuccess
+        = new CHIPScenesClusterGetSceneMembershipResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.GetSceneMembership(onSuccess->Cancel(), onFailure->Cancel(), groupId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)recallScene:(uint16_t)groupId
+              sceneId:(uint8_t)sceneId
+       transitionTime:(uint16_t)transitionTime
+    completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.RecallScene(onSuccess->Cancel(), onFailure->Cancel(), groupId, sceneId, transitionTime);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)removeAllScenes:(uint16_t)groupId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPScenesClusterRemoveAllScenesResponseCallbackBridge * onSuccess
+        = new CHIPScenesClusterRemoveAllScenesResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.RemoveAllScenes(onSuccess->Cancel(), onFailure->Cancel(), groupId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)removeScene:(uint16_t)groupId sceneId:(uint8_t)sceneId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPScenesClusterRemoveSceneResponseCallbackBridge * onSuccess
+        = new CHIPScenesClusterRemoveSceneResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.RemoveScene(onSuccess->Cancel(), onFailure->Cancel(), groupId, sceneId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)storeScene:(uint16_t)groupId sceneId:(uint8_t)sceneId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPScenesClusterStoreSceneResponseCallbackBridge * onSuccess
+        = new CHIPScenesClusterStoreSceneResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.StoreScene(onSuccess->Cancel(), onFailure->Cancel(), groupId, sceneId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+- (BOOL)viewScene:(uint16_t)groupId sceneId:(uint8_t)sceneId completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPScenesClusterViewSceneResponseCallbackBridge * onSuccess
+        = new CHIPScenesClusterViewSceneResponseCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ViewScene(onSuccess->Cancel(), onFailure->Cancel(), groupId, sceneId);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeSceneCount:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeSceneCount(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeCurrentScene:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeCurrentScene(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeCurrentGroup:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeCurrentGroup(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeSceneValid:(ResponseHandler)completionHandler
+{
+    CHIPBooleanAttributeCallbackBridge * onSuccess = new CHIPBooleanAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeSceneValid(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeNameSupport:(ResponseHandler)completionHandler
+{
+    CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeNameSupport(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+@end
+
+@interface CHIPTemperatureMeasurement ()
+
+@property (readonly) Controller::TemperatureMeasurementCluster cppCluster;
+@property (readonly, nonatomic) dispatch_queue_t callbackQueue;
+@end
+
+@implementation CHIPTemperatureMeasurement
+
+- (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(EndpointId)endpoint queue:(dispatch_queue_t)queue
+{
+    CHIP_ERROR err = _cppCluster.Associate([device internalDevice], endpoint);
+
+    if (err != CHIP_NO_ERROR) {
+        return nil;
+    }
+
+    if (self = [super init]) {
+        _callbackQueue = queue;
+    }
+
+    return self;
+}
+
+- (BOOL)readAttributeMeasuredValue:(ResponseHandler)completionHandler
+{
+    CHIPInt16sAttributeCallbackBridge * onSuccess = new CHIPInt16sAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeMeasuredValue(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)configureAttributeMeasuredValue:(uint16_t)minInterval
+                            maxInterval:(uint16_t)maxInterval
+                                 change:(int16_t)change
+                      completionHandler:(ResponseHandler)completionHandler
+{
+    CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ConfigureAttributeMeasuredValue(
+        onSuccess->Cancel(), onFailure->Cancel(), minInterval, maxInterval, change);
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)reportAttributeMeasuredValue:(ResponseHandler)reportHandler
+{
+    CHIPInt16sAttributeCallbackBridge * onReport = new CHIPInt16sAttributeCallbackBridge(reportHandler, _callbackQueue, true);
+    if (!onReport) {
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReportAttributeMeasuredValue(onReport->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onReport;
+        return NO;
+    }
+
+    return YES;
+}
+
+- (BOOL)readAttributeMinMeasuredValue:(ResponseHandler)completionHandler
+{
+    CHIPInt16sAttributeCallbackBridge * onSuccess = new CHIPInt16sAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeMinMeasuredValue(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeMaxMeasuredValue:(ResponseHandler)completionHandler
+{
+    CHIPInt16sAttributeCallbackBridge * onSuccess = new CHIPInt16sAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeMaxMeasuredValue(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+- (BOOL)readAttributeClusterRevision:(ResponseHandler)completionHandler
+{
+    CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, _callbackQueue);
+    if (!onSuccess) {
+        return NO;
+    }
+
+    CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, _callbackQueue);
+    if (!onFailure) {
+        delete onSuccess;
+        return NO;
+    }
+
+    CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(onSuccess->Cancel(), onFailure->Cancel());
+    if (err != CHIP_NO_ERROR) {
+        delete onSuccess;
+        delete onFailure;
+        return NO;
+    }
+    return YES;
+}
+
+@end
diff --git a/src/darwin/Framework/CHIP/gen/af-gen-event.h b/src/darwin/Framework/CHIP/gen/af-gen-event.h
new file mode 100644
index 0000000..9dbfd3a
--- /dev/null
+++ b/src/darwin/Framework/CHIP/gen/af-gen-event.h
@@ -0,0 +1,54 @@
+/**
+ *
+ *    Copyright (c) 2020 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+/**
+ *
+ *    Copyright (c) 2020 Silicon Labs
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+// This file is generated by Simplicity Studio.  Please do not edit manually.
+//
+//
+
+// Enclosing macro to prevent multiple inclusion
+#ifndef __AF_GEN_EVENT__
+#define __AF_GEN_EVENT__
+
+// Code used to configure the cluster event mechanism
+#define EMBER_AF_GENERATED_EVENT_CODE
+// EmberEventData structs used to populate the EmberEventData table
+#define EMBER_AF_GENERATED_EVENTS
+#define EMBER_AF_GENERATED_EVENT_STRINGS
+
+// The length of the event context table used to track and retrieve cluster events
+#define EMBER_AF_EVENT_CONTEXT_LENGTH 4
+
+// EmberAfEventContext structs used to populate the EmberAfEventContext table
+#define EMBER_AF_GENERATED_EVENT_CONTEXT
+
+#endif // __AF_GEN_EVENT__
diff --git a/src/darwin/Framework/CHIP/gen/af-structs.h b/src/darwin/Framework/CHIP/gen/af-structs.h
new file mode 100644
index 0000000..c5cd195
--- /dev/null
+++ b/src/darwin/Framework/CHIP/gen/af-structs.h
@@ -0,0 +1,440 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+// Prevent multiple inclusion
+#pragma once
+
+#include "basic-types.h"
+#include "enums.h"
+#include <stdint.h>
+
+// Struct for BlockThreshold
+typedef struct _BlockThreshold
+{
+    uint8_t blockThreshold;
+    uint8_t priceControl;
+    uint32_t blockPeriodStartTime;
+    uint32_t blockPeriodDurationMinutes;
+    uint8_t fuelType;
+    uint32_t standingCharge;
+} EmberAfBlockThreshold;
+
+// Struct for BlockThresholdSubPayload
+typedef struct _BlockThresholdSubPayload
+{
+    uint8_t tierNumberOfBlockThresholds;
+    uint8_t * blockThreshold;
+} EmberAfBlockThresholdSubPayload;
+
+// Struct for ChatParticipant
+typedef struct _ChatParticipant
+{
+    uint16_t uid;
+    uint8_t * nickname;
+} EmberAfChatParticipant;
+
+// Struct for ChatRoom
+typedef struct _ChatRoom
+{
+    uint16_t cid;
+    uint8_t * name;
+} EmberAfChatRoom;
+
+// Struct for ConfigureReportingRecord
+typedef struct _ConfigureReportingRecord
+{
+    uint8_t direction;
+    chip::AttributeId attributeId;
+    uint8_t attributeType;
+    uint16_t minimumReportingInterval;
+    uint16_t maximumReportingInterval;
+    uint8_t * reportableChangeLocation;
+    uint16_t timeoutPeriod;
+} EmberAfConfigureReportingRecord;
+
+// Struct for ConfigureReportingStatusRecord
+typedef struct _ConfigureReportingStatusRecord
+{
+    uint8_t status;
+    uint8_t direction;
+    chip::AttributeId attributeId;
+} EmberAfConfigureReportingStatusRecord;
+
+// Struct for DebtPayload
+typedef struct _DebtPayload
+{
+    uint32_t collectionTime;
+    uint32_t amountCollected;
+    uint8_t debtType;
+    uint32_t outstandingDebt;
+} EmberAfDebtPayload;
+
+// Struct for DeviceInformationRecord
+typedef struct _DeviceInformationRecord
+{
+    uint64_t ieeeAddress;
+    chip::EndpointId endpointId;
+    uint16_t profileId;
+    uint16_t deviceId;
+    uint8_t version;
+    uint8_t groupIdCount;
+    uint8_t sort;
+} EmberAfDeviceInformationRecord;
+
+// Struct for DiscoverAttributesInfoRecord
+typedef struct _DiscoverAttributesInfoRecord
+{
+    chip::AttributeId attributeId;
+    uint8_t attributeType;
+} EmberAfDiscoverAttributesInfoRecord;
+
+// Struct for EndpointInformationRecord
+typedef struct _EndpointInformationRecord
+{
+    uint16_t networkAddress;
+    chip::EndpointId endpointId;
+    uint16_t profileId;
+    uint16_t deviceId;
+    uint8_t version;
+} EmberAfEndpointInformationRecord;
+
+// Void typedef for EmberAfEphemeralData which is empty.
+// this will result in all the references to the data being as uint8_t*
+typedef uint8_t EmberAfEphemeralData;
+
+// Struct for EventConfigurationPayload
+typedef struct _EventConfigurationPayload
+{
+    uint16_t eventId;
+    uint8_t eventConfiguration;
+} EmberAfEventConfigurationPayload;
+
+// Struct for EventLogPayload
+typedef struct _EventLogPayload
+{
+    uint8_t logId;
+    uint16_t eventId;
+    uint32_t eventTime;
+    uint8_t * eventData;
+} EmberAfEventLogPayload;
+
+// Struct for ExtendedDiscoverAttributesInfoRecord
+typedef struct _ExtendedDiscoverAttributesInfoRecord
+{
+    chip::AttributeId attributeId;
+    uint8_t attributeType;
+    uint8_t attributeAccessControl;
+} EmberAfExtendedDiscoverAttributesInfoRecord;
+
+// Struct for GpPairingConfigurationGroupList
+typedef struct _GpPairingConfigurationGroupList
+{
+    uint16_t SinkGroup;
+    uint16_t Alias;
+} EmberAfGpPairingConfigurationGroupList;
+
+// Struct for GpTranslationTableUpdateTranslation
+typedef struct _GpTranslationTableUpdateTranslation
+{
+    uint8_t index;
+    uint8_t gpdCommandId;
+    chip::EndpointId endpoint;
+    uint16_t profile;
+    uint16_t cluster;
+    uint8_t zigbeeCommandId;
+    uint8_t * zigbeeCommandPayload;
+    uint8_t * additionalInfoBlock;
+} EmberAfGpTranslationTableUpdateTranslation;
+
+// Struct for GroupInformationRecord
+typedef struct _GroupInformationRecord
+{
+    chip::GroupId groupId;
+    uint8_t groupType;
+} EmberAfGroupInformationRecord;
+
+// Struct for IasAceZoneStatusResult
+typedef struct _IasAceZoneStatusResult
+{
+    uint8_t zoneId;
+    uint16_t zoneStatus;
+} EmberAfIasAceZoneStatusResult;
+
+// Void typedef for EmberAfIdentity which is empty.
+// this will result in all the references to the data being as uint8_t*
+typedef uint8_t EmberAfIdentity;
+
+// Struct for NeighborInfo
+typedef struct _NeighborInfo
+{
+    uint64_t neighbor;
+    int16_t x;
+    int16_t y;
+    int16_t z;
+    int8_t rssi;
+    uint8_t numberRssiMeasurements;
+} EmberAfNeighborInfo;
+
+// Struct for NodeInformation
+typedef struct _NodeInformation
+{
+    uint16_t uid;
+    uint16_t address;
+    chip::EndpointId endpoint;
+    uint8_t * nickname;
+} EmberAfNodeInformation;
+
+// Struct for Notification
+typedef struct _Notification
+{
+    uint16_t contentId;
+    uint8_t statusFeedback;
+} EmberAfNotification;
+
+// Struct for PowerProfileRecord
+typedef struct _PowerProfileRecord
+{
+    uint8_t powerProfileId;
+    uint8_t energyPhaseId;
+    uint8_t powerProfileRemoteControl;
+    uint8_t powerProfileState;
+} EmberAfPowerProfileRecord;
+
+// Struct for PriceMatrixSubPayload
+typedef struct _PriceMatrixSubPayload
+{
+    uint8_t tierBlockId;
+    uint32_t price;
+} EmberAfPriceMatrixSubPayload;
+
+// Struct for Protocol
+typedef struct _Protocol
+{
+    uint16_t manufacturerCode;
+    uint8_t protocolId;
+} EmberAfProtocol;
+
+// Struct for ReadAttributeStatusRecord
+typedef struct _ReadAttributeStatusRecord
+{
+    chip::AttributeId attributeId;
+    uint8_t status;
+    uint8_t attributeType;
+    uint8_t * attributeLocation;
+} EmberAfReadAttributeStatusRecord;
+
+// Struct for ReadReportingConfigurationAttributeRecord
+typedef struct _ReadReportingConfigurationAttributeRecord
+{
+    uint8_t direction;
+    chip::AttributeId attributeId;
+} EmberAfReadReportingConfigurationAttributeRecord;
+
+// Struct for ReadReportingConfigurationRecord
+typedef struct _ReadReportingConfigurationRecord
+{
+    uint8_t status;
+    uint8_t direction;
+    chip::AttributeId attributeId;
+    uint8_t attributeType;
+    uint16_t minimumReportingInterval;
+    uint16_t maximumReportingInterval;
+    uint8_t * reportableChangeLocation;
+    uint16_t timeoutPeriod;
+} EmberAfReadReportingConfigurationRecord;
+
+// Struct for ReadStructuredAttributeRecord
+typedef struct _ReadStructuredAttributeRecord
+{
+    chip::AttributeId attributeId;
+    uint8_t indicator;
+    uint16_t indicies;
+} EmberAfReadStructuredAttributeRecord;
+
+// Struct for ReportAttributeRecord
+typedef struct _ReportAttributeRecord
+{
+    chip::AttributeId attributeId;
+    uint8_t attributeType;
+    uint8_t * attributeLocation;
+} EmberAfReportAttributeRecord;
+
+// Struct for SceneExtensionAttributeInfo
+typedef struct _SceneExtensionAttributeInfo
+{
+    uint8_t attributeType;
+    uint8_t * attributeLocation;
+} EmberAfSceneExtensionAttributeInfo;
+
+// Struct for SceneExtensionFieldSet
+typedef struct _SceneExtensionFieldSet
+{
+    chip::ClusterId clusterId;
+    uint8_t length;
+    uint8_t value;
+} EmberAfSceneExtensionFieldSet;
+
+// Struct for ScheduleEntry
+typedef struct _ScheduleEntry
+{
+    uint16_t startTime;
+    uint8_t activePriceTierOrFriendlyCreditEnable;
+} EmberAfScheduleEntry;
+
+// Struct for ScheduleEntryAuxilliaryLoadSwitchTimes
+typedef struct _ScheduleEntryAuxilliaryLoadSwitchTimes
+{
+    uint16_t startTime;
+    uint8_t auxiliaryLoadSwitchState;
+} EmberAfScheduleEntryAuxilliaryLoadSwitchTimes;
+
+// Struct for ScheduleEntryFriendlyCreditSwitchTimes
+typedef struct _ScheduleEntryFriendlyCreditSwitchTimes
+{
+    uint16_t startTime;
+    uint8_t friendlyCreditEnable;
+} EmberAfScheduleEntryFriendlyCreditSwitchTimes;
+
+// Struct for ScheduleEntryRateSwitchTimes
+typedef struct _ScheduleEntryRateSwitchTimes
+{
+    uint16_t startTime;
+    uint8_t priceTier;
+} EmberAfScheduleEntryRateSwitchTimes;
+
+// Struct for ScheduledPhase
+typedef struct _ScheduledPhase
+{
+    uint8_t energyPhaseId;
+    uint16_t scheduledTime;
+} EmberAfScheduledPhase;
+
+// Struct for SeasonEntry
+typedef struct _SeasonEntry
+{
+    uint32_t seasonStartDate;
+    uint8_t weekIdRef;
+} EmberAfSeasonEntry;
+
+// Void typedef for EmberAfSignature which is empty.
+// this will result in all the references to the data being as uint8_t*
+typedef uint8_t EmberAfSignature;
+
+// Void typedef for EmberAfSmac which is empty.
+// this will result in all the references to the data being as uint8_t*
+typedef uint8_t EmberAfSmac;
+
+// Struct for SnapshotResponsePayload
+typedef struct _SnapshotResponsePayload
+{
+    uint8_t snapshotScheduleId;
+    uint8_t snapshotScheduleConfirmation;
+} EmberAfSnapshotResponsePayload;
+
+// Struct for SnapshotSchedulePayload
+typedef struct _SnapshotSchedulePayload
+{
+    uint8_t snapshotScheduleId;
+    uint32_t snapshotStartTime;
+    uint32_t snapshotSchedule;
+    uint8_t snapshotPayloadType;
+    uint32_t snapshotCause;
+} EmberAfSnapshotSchedulePayload;
+
+// Struct for SpecialDay
+typedef struct _SpecialDay
+{
+    uint32_t specialDayDate;
+    uint8_t dayIdRef;
+} EmberAfSpecialDay;
+
+// Struct for TierLabelsPayload
+typedef struct _TierLabelsPayload
+{
+    uint8_t tierId;
+    uint8_t * tierLabel;
+} EmberAfTierLabelsPayload;
+
+// Struct for TopUpPayload
+typedef struct _TopUpPayload
+{
+    uint8_t * topUpCode;
+    int32_t topUpAmount;
+    uint32_t topUpTime;
+} EmberAfTopUpPayload;
+
+// Struct for TransferredPhase
+typedef struct _TransferredPhase
+{
+    uint8_t energyPhaseId;
+    uint8_t macroPhaseId;
+    uint16_t expectedDuration;
+    uint16_t peakPower;
+    uint16_t energy;
+    uint16_t maxActivationDelay;
+} EmberAfTransferredPhase;
+
+// Struct for WriteAttributeRecord
+typedef struct _WriteAttributeRecord
+{
+    chip::AttributeId attributeId;
+    uint8_t attributeType;
+    uint8_t * attributeLocation;
+} EmberAfWriteAttributeRecord;
+
+// Struct for WriteAttributeStatusRecord
+typedef struct _WriteAttributeStatusRecord
+{
+    uint8_t status;
+    chip::AttributeId attributeId;
+} EmberAfWriteAttributeStatusRecord;
+
+// Struct for WriteStructuredAttributeRecord
+typedef struct _WriteStructuredAttributeRecord
+{
+    chip::AttributeId attributeId;
+    uint8_t indicator;
+    uint16_t indicies;
+    uint8_t attributeType;
+    uint8_t * attributeLocation;
+} EmberAfWriteStructuredAttributeRecord;
+
+// Struct for WriteStructuredAttributeStatusRecord
+typedef struct _WriteStructuredAttributeStatusRecord
+{
+    uint8_t status;
+    chip::AttributeId attributeId;
+    uint8_t indicator;
+    uint16_t indicies;
+} EmberAfWriteStructuredAttributeStatusRecord;
+
+// Struct for WwahBeaconSurvey
+typedef struct _WwahBeaconSurvey
+{
+    uint16_t deviceShort;
+    uint8_t rssi;
+    uint8_t classificationMask;
+} EmberAfWwahBeaconSurvey;
+
+// Struct for WwahClusterStatusToUseTC
+typedef struct _WwahClusterStatusToUseTC
+{
+    chip::ClusterId clusterId;
+    uint8_t status;
+} EmberAfWwahClusterStatusToUseTC;
diff --git a/src/darwin/Framework/CHIP/gen/att-storage.h b/src/darwin/Framework/CHIP/gen/att-storage.h
new file mode 100644
index 0000000..bd817b7
--- /dev/null
+++ b/src/darwin/Framework/CHIP/gen/att-storage.h
@@ -0,0 +1,70 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+// Prevent multiple inclusion
+#pragma once
+
+// Attribute masks modify how attributes are used by the framework
+//
+// Attribute that has this mask is NOT read-only
+#define ATTRIBUTE_MASK_WRITABLE (0x01)
+// Attribute that has this mask is saved to a token
+#define ATTRIBUTE_MASK_TOKENIZE (0x02)
+// Attribute that has this mask has a min/max values
+#define ATTRIBUTE_MASK_MIN_MAX (0x04)
+// Manufacturer specific attribute
+#define ATTRIBUTE_MASK_MANUFACTURER_SPECIFIC (0x08)
+// Attribute deferred to external storage
+#define ATTRIBUTE_MASK_EXTERNAL_STORAGE (0x10)
+// Attribute is singleton
+#define ATTRIBUTE_MASK_SINGLETON (0x20)
+// Attribute is a client attribute
+#define ATTRIBUTE_MASK_CLIENT (0x40)
+
+// Cluster masks modify how clusters are used by the framework
+//
+// Does this cluster have init function?
+#define CLUSTER_MASK_INIT_FUNCTION (0x01)
+// Does this cluster have attribute changed function?
+#define CLUSTER_MASK_ATTRIBUTE_CHANGED_FUNCTION (0x02)
+// Does this cluster have default response function?
+#define CLUSTER_MASK_DEFAULT_RESPONSE_FUNCTION (0x04)
+// Does this cluster have message sent function?
+#define CLUSTER_MASK_MESSAGE_SENT_FUNCTION (0x08)
+// Does this cluster have manufacturer specific attribute changed function?
+#define CLUSTER_MASK_MANUFACTURER_SPECIFIC_ATTRIBUTE_CHANGED_FUNCTION (0x10)
+// Does this cluster have pre-attribute changed function?
+#define CLUSTER_MASK_PRE_ATTRIBUTE_CHANGED_FUNCTION (0x20)
+// Cluster is a server
+#define CLUSTER_MASK_SERVER (0x40)
+// Cluster is a client
+#define CLUSTER_MASK_CLIENT (0x80)
+
+// Command masks modify meanings of commands
+//
+// Is sending of this client command supported
+#define COMMAND_MASK_OUTGOING_CLIENT (0x01)
+// Is sending of this server command supported
+#define COMMAND_MASK_OUTGOING_SERVER (0x02)
+// Is receiving of this client command supported
+#define COMMAND_MASK_INCOMING_CLIENT (0x04)
+// Is receiving of this server command supported
+#define COMMAND_MASK_INCOMING_SERVER (0x08)
+// Is this command manufacturer specific?
+#define COMMAND_MASK_MANUFACTURER_SPECIFIC (0x10)
diff --git a/src/darwin/Framework/CHIP/gen/attribute-id.h b/src/darwin/Framework/CHIP/gen/attribute-id.h
new file mode 100644
index 0000000..0fd456c
--- /dev/null
+++ b/src/darwin/Framework/CHIP/gen/attribute-id.h
@@ -0,0 +1,4121 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+// Prevent multiple inclusion
+#pragma once
+
+// Global cluster attribute ids
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Basic
+
+// Client attributes
+
+// Server attributes
+#define ZCL_VERSION_ATTRIBUTE_ID (0x0000)
+#define ZCL_APPLICATION_VERSION_ATTRIBUTE_ID (0x0001)
+#define ZCL_STACK_VERSION_ATTRIBUTE_ID (0x0002)
+#define ZCL_HW_VERSION_ATTRIBUTE_ID (0x0003)
+#define ZCL_MANUFACTURER_NAME_ATTRIBUTE_ID (0x0004)
+#define ZCL_MODEL_IDENTIFIER_ATTRIBUTE_ID (0x0005)
+#define ZCL_DATE_CODE_ATTRIBUTE_ID (0x0006)
+#define ZCL_POWER_SOURCE_ATTRIBUTE_ID (0x0007)
+#define ZCL_GENERIC_DEVICE_CLASS_ATTRIBUTE_ID (0x0008)
+#define ZCL_GENERIC_DEVICE_TYPE_ATTRIBUTE_ID (0x0009)
+#define ZCL_PRODUCT_CODE_ATTRIBUTE_ID (0x000A)
+#define ZCL_PRODUCT_URL_ATTRIBUTE_ID (0x000B)
+#define ZCL_LOCATION_DESCRIPTION_ATTRIBUTE_ID (0x0010)
+#define ZCL_PHYSICAL_ENVIRONMENT_ATTRIBUTE_ID (0x0011)
+#define ZCL_DEVICE_ENABLED_ATTRIBUTE_ID (0x0012)
+#define ZCL_ALARM_MASK_ATTRIBUTE_ID (0x0013)
+#define ZCL_DISABLE_LOCAL_CONFIG_ATTRIBUTE_ID (0x0014)
+#define ZCL_SW_BUILD_ID_ATTRIBUTE_ID (0x4000)
+
+// Attribute ids for cluster: Power Configuration
+
+// Client attributes
+
+// Server attributes
+#define ZCL_MAINS_VOLTAGE_ATTRIBUTE_ID (0x0000)
+#define ZCL_MAINS_FREQUENCY_ATTRIBUTE_ID (0x0001)
+#define ZCL_MAINS_ALARM_MASK_ATTRIBUTE_ID (0x0010)
+#define ZCL_MAINS_VOLTAGE_MIN_THRESHOLD_ATTRIBUTE_ID (0x0011)
+#define ZCL_MAINS_VOLTAGE_MAX_THRESHOLD_ATTRIBUTE_ID (0x0012)
+#define ZCL_MAINS_VOLTAGE_DWELL_TRIP_POINT_ATTRIBUTE_ID (0x0013)
+#define ZCL_BATTERY_VOLTAGE_ATTRIBUTE_ID (0x0020)
+#define ZCL_BATTERY_PERCENTAGE_REMAINING_ATTRIBUTE_ID (0x0021)
+#define ZCL_BATTERY_MANUFACTURER_ATTRIBUTE_ID (0x0030)
+#define ZCL_BATTERY_SIZE_ATTRIBUTE_ID (0x0031)
+#define ZCL_BATTERY_AHR_RATING_ATTRIBUTE_ID (0x0032)
+#define ZCL_BATTERY_QUANTITY_ATTRIBUTE_ID (0x0033)
+#define ZCL_BATTERY_RATED_VOLTAGE_ATTRIBUTE_ID (0x0034)
+#define ZCL_BATTERY_ALARM_MASK_ATTRIBUTE_ID (0x0035)
+#define ZCL_BATTERY_VOLTAGE_MIN_THRESHOLD_ATTRIBUTE_ID (0x0036)
+#define ZCL_BATTERY_VOLTAGE_THRESHOLD_1_ATTRIBUTE_ID (0x0037)
+#define ZCL_BATTERY_VOLTAGE_THRESHOLD_2_ATTRIBUTE_ID (0x0038)
+#define ZCL_BATTERY_VOLTAGE_THRESHOLD_3_ATTRIBUTE_ID (0x0039)
+#define ZCL_BATTERY_PERCENTAGE_MIN_THRESHOLD_ATTRIBUTE_ID (0x003A)
+#define ZCL_BATTERY_PERCENTAGE_THRESHOLD_1_ATTRIBUTE_ID (0x003B)
+#define ZCL_BATTERY_PERCENTAGE_THRESHOLD_2_ATTRIBUTE_ID (0x003C)
+#define ZCL_BATTERY_PERCENTAGE_THRESHOLD_3_ATTRIBUTE_ID (0x003D)
+#define ZCL_BATTERY_ALARM_STATE_ATTRIBUTE_ID (0x003E)
+#define ZCL_BATTERY_2_VOLTAGE_ATTRIBUTE_ID (0x0040)
+#define ZCL_BATTERY_2_PERCENTAGE_REMAINING_ATTRIBUTE_ID (0x0041)
+#define ZCL_BATTERY_2_MANUFACTURER_ATTRIBUTE_ID (0x0050)
+#define ZCL_BATTERY_2_SIZE_ATTRIBUTE_ID (0x0051)
+#define ZCL_BATTERY_2_AHR_RATING_ATTRIBUTE_ID (0x0052)
+#define ZCL_BATTERY_2_QUANTITY_ATTRIBUTE_ID (0x0053)
+#define ZCL_BATTERY_2_RATED_VOLTAGE_ATTRIBUTE_ID (0x0054)
+#define ZCL_BATTERY_2_ALARM_MASK_ATTRIBUTE_ID (0x0055)
+#define ZCL_BATTERY_2_VOLTAGE_MIN_THRESHOLD_ATTRIBUTE_ID (0x0056)
+#define ZCL_BATTERY_2_VOLTAGE_THRESHOLD_1_ATTRIBUTE_ID (0x0057)
+#define ZCL_BATTERY_2_VOLTAGE_THRESHOLD_2_ATTRIBUTE_ID (0x0058)
+#define ZCL_BATTERY_2_VOLTAGE_THRESHOLD_3_ATTRIBUTE_ID (0x0059)
+#define ZCL_BATTERY_2_PERCENTAGE_MIN_THRESHOLD_ATTRIBUTE_ID (0x005A)
+#define ZCL_BATTERY_2_PERCENTAGE_THRESHOLD_1_ATTRIBUTE_ID (0x005B)
+#define ZCL_BATTERY_2_PERCENTAGE_THRESHOLD_2_ATTRIBUTE_ID (0x005C)
+#define ZCL_BATTERY_2_PERCENTAGE_THRESHOLD_3_ATTRIBUTE_ID (0x005D)
+#define ZCL_BATTERY_2_ALARM_STATE_ATTRIBUTE_ID (0x005E)
+#define ZCL_BATTERY_3_VOLTAGE_ATTRIBUTE_ID (0x0060)
+#define ZCL_BATTERY_3_PERCENTAGE_REMAINING_ATTRIBUTE_ID (0x0061)
+#define ZCL_BATTERY_3_MANUFACTURER_ATTRIBUTE_ID (0x0070)
+#define ZCL_BATTERY_3_SIZE_ATTRIBUTE_ID (0x0071)
+#define ZCL_BATTERY_3_AHR_RATING_ATTRIBUTE_ID (0x0072)
+#define ZCL_BATTERY_3_QUANTITY_ATTRIBUTE_ID (0x0073)
+#define ZCL_BATTERY_3_RATED_VOLTAGE_ATTRIBUTE_ID (0x0074)
+#define ZCL_BATTERY_3_ALARM_MASK_ATTRIBUTE_ID (0x0075)
+#define ZCL_BATTERY_3_VOLTAGE_MIN_THRESHOLD_ATTRIBUTE_ID (0x0076)
+#define ZCL_BATTERY_3_VOLTAGE_THRESHOLD_1_ATTRIBUTE_ID (0x0077)
+#define ZCL_BATTERY_3_VOLTAGE_THRESHOLD_2_ATTRIBUTE_ID (0x0078)
+#define ZCL_BATTERY_3_VOLTAGE_THRESHOLD_3_ATTRIBUTE_ID (0x0079)
+#define ZCL_BATTERY_3_PERCENTAGE_MIN_THRESHOLD_ATTRIBUTE_ID (0x007A)
+#define ZCL_BATTERY_3_PERCENTAGE_THRESHOLD_1_ATTRIBUTE_ID (0x007B)
+#define ZCL_BATTERY_3_PERCENTAGE_THRESHOLD_2_ATTRIBUTE_ID (0x007C)
+#define ZCL_BATTERY_3_PERCENTAGE_THRESHOLD_3_ATTRIBUTE_ID (0x007D)
+#define ZCL_BATTERY_3_ALARM_STATE_ATTRIBUTE_ID (0x007E)
+
+// Attribute ids for cluster: Device Temperature Configuration
+
+// Client attributes
+
+// Server attributes
+#define ZCL_CURRENT_TEMPERATURE_ATTRIBUTE_ID (0x0000)
+#define ZCL_MIN_TEMP_EXPERIENCED_ATTRIBUTE_ID (0x0001)
+#define ZCL_MAX_TEMP_EXPERIENCED_ATTRIBUTE_ID (0x0002)
+#define ZCL_OVER_TEMP_TOTAL_DWELL_ATTRIBUTE_ID (0x0003)
+#define ZCL_DEVICE_TEMP_ALARM_MASK_ATTRIBUTE_ID (0x0010)
+#define ZCL_LOW_TEMP_THRESHOLD_ATTRIBUTE_ID (0x0011)
+#define ZCL_HIGH_TEMP_THRESHOLD_ATTRIBUTE_ID (0x0012)
+#define ZCL_LOW_TEMP_DWELL_TRIP_POINT_ATTRIBUTE_ID (0x0013)
+#define ZCL_HIGH_TEMP_DWELL_TRIP_POINT_ATTRIBUTE_ID (0x0014)
+
+// Attribute ids for cluster: Identify
+
+// Client attributes
+
+// Server attributes
+#define ZCL_IDENTIFY_TIME_ATTRIBUTE_ID (0x0000)
+#define ZCL_COMMISSION_STATE_ATTRIBUTE_ID (0x0001)
+
+// Attribute ids for cluster: Groups
+
+// Client attributes
+
+// Server attributes
+#define ZCL_GROUP_NAME_SUPPORT_ATTRIBUTE_ID (0x0000)
+
+// Attribute ids for cluster: Scenes
+
+// Client attributes
+
+// Server attributes
+#define ZCL_SCENE_COUNT_ATTRIBUTE_ID (0x0000)
+#define ZCL_CURRENT_SCENE_ATTRIBUTE_ID (0x0001)
+#define ZCL_CURRENT_GROUP_ATTRIBUTE_ID (0x0002)
+#define ZCL_SCENE_VALID_ATTRIBUTE_ID (0x0003)
+#define ZCL_SCENE_NAME_SUPPORT_ATTRIBUTE_ID (0x0004)
+#define ZCL_LAST_CONFIGURED_BY_ATTRIBUTE_ID (0x0005)
+
+// Attribute ids for cluster: On/off
+
+// Client attributes
+
+// Server attributes
+#define ZCL_ON_OFF_ATTRIBUTE_ID (0x0000)
+#define ZCL_SAMPLE_MFG_SPECIFIC_TRANSITION_TIME_ATTRIBUTE_ID (0x0000)
+#define ZCL_SAMPLE_MFG_SPECIFIC_TRANSITION_TIME_2_ATTRIBUTE_ID (0x0000)
+#define ZCL_SAMPLE_MFG_SPECIFIC_TRANSITION_TIME_3_ATTRIBUTE_ID (0x0001)
+#define ZCL_SAMPLE_MFG_SPECIFIC_TRANSITION_TIME_4_ATTRIBUTE_ID (0x0001)
+#define ZCL_GLOBAL_SCENE_CONTROL_ATTRIBUTE_ID (0x4000)
+#define ZCL_ON_TIME_ATTRIBUTE_ID (0x4001)
+#define ZCL_OFF_WAIT_TIME_ATTRIBUTE_ID (0x4002)
+#define ZCL_START_UP_ON_OFF_ATTRIBUTE_ID (0x4003)
+
+// Attribute ids for cluster: On/off Switch Configuration
+
+// Client attributes
+
+// Server attributes
+#define ZCL_SWITCH_TYPE_ATTRIBUTE_ID (0x0000)
+#define ZCL_SWITCH_ACTIONS_ATTRIBUTE_ID (0x0010)
+
+// Attribute ids for cluster: Level Control
+
+// Client attributes
+
+// Server attributes
+#define ZCL_CURRENT_LEVEL_ATTRIBUTE_ID (0x0000)
+#define ZCL_LEVEL_CONTROL_REMAINING_TIME_ATTRIBUTE_ID (0x0001)
+#define ZCL_OPTIONS_ATTRIBUTE_ID (0x000F)
+#define ZCL_ON_OFF_TRANSITION_TIME_ATTRIBUTE_ID (0x0010)
+#define ZCL_ON_LEVEL_ATTRIBUTE_ID (0x0011)
+#define ZCL_ON_TRANSITION_TIME_ATTRIBUTE_ID (0x0012)
+#define ZCL_OFF_TRANSITION_TIME_ATTRIBUTE_ID (0x0013)
+#define ZCL_DEFAULT_MOVE_RATE_ATTRIBUTE_ID (0x0014)
+#define ZCL_START_UP_CURRENT_LEVEL_ATTRIBUTE_ID (0x4000)
+
+// Attribute ids for cluster: Alarms
+
+// Client attributes
+
+// Server attributes
+#define ZCL_ALARM_COUNT_ATTRIBUTE_ID (0x0000)
+
+// Attribute ids for cluster: Time
+
+// Client attributes
+
+// Server attributes
+#define ZCL_TIME_ATTRIBUTE_ID (0x0000)
+#define ZCL_TIME_STATUS_ATTRIBUTE_ID (0x0001)
+#define ZCL_TIME_ZONE_ATTRIBUTE_ID (0x0002)
+#define ZCL_DST_START_ATTRIBUTE_ID (0x0003)
+#define ZCL_DST_END_ATTRIBUTE_ID (0x0004)
+#define ZCL_DST_SHIFT_ATTRIBUTE_ID (0x0005)
+#define ZCL_STANDARD_TIME_ATTRIBUTE_ID (0x0006)
+#define ZCL_LOCAL_TIME_ATTRIBUTE_ID (0x0007)
+#define ZCL_LAST_SET_TIME_ATTRIBUTE_ID (0x0008)
+#define ZCL_VALID_UNTIL_TIME_ATTRIBUTE_ID (0x0009)
+
+// Attribute ids for cluster: RSSI Location
+
+// Client attributes
+
+// Server attributes
+#define ZCL_LOCATION_TYPE_ATTRIBUTE_ID (0x0000)
+#define ZCL_LOCATION_METHOD_ATTRIBUTE_ID (0x0001)
+#define ZCL_LOCATION_AGE_ATTRIBUTE_ID (0x0002)
+#define ZCL_QUALITY_MEASURE_ATTRIBUTE_ID (0x0003)
+#define ZCL_NUMBER_OF_DEVICES_ATTRIBUTE_ID (0x0004)
+#define ZCL_COORDINATE1_ATTRIBUTE_ID (0x0010)
+#define ZCL_COORDINATE2_ATTRIBUTE_ID (0x0011)
+#define ZCL_COORDINATE3_ATTRIBUTE_ID (0x0012)
+#define ZCL_POWER_ATTRIBUTE_ID (0x0013)
+#define ZCL_PATH_LOSS_EXPONENT_ATTRIBUTE_ID (0x0014)
+#define ZCL_REPORTING_PERIOD_ATTRIBUTE_ID (0x0015)
+#define ZCL_CALCULATION_PERIOD_ATTRIBUTE_ID (0x0016)
+#define ZCL_NUMBER_RSSI_MEASUREMENTS_ATTRIBUTE_ID (0x0017)
+
+// Attribute ids for cluster: Binary Input (Basic)
+
+// Client attributes
+
+// Server attributes
+#define ZCL_ACTIVE_TEXT_ATTRIBUTE_ID (0x0004)
+#define ZCL_DESCRIPTION_ATTRIBUTE_ID (0x001C)
+#define ZCL_INACTIVE_TEXT_ATTRIBUTE_ID (0x002E)
+#define ZCL_OUT_OF_SERVICE_ATTRIBUTE_ID (0x0051)
+#define ZCL_POLARITY_ATTRIBUTE_ID (0x0054)
+#define ZCL_PRESENT_VALUE_ATTRIBUTE_ID (0x0055)
+#define ZCL_RELIABILITY_ATTRIBUTE_ID (0x0067)
+#define ZCL_STATUS_FLAGS_ATTRIBUTE_ID (0x006F)
+#define ZCL_APPLICATION_TYPE_ATTRIBUTE_ID (0x0100)
+
+// Attribute ids for cluster: Commissioning
+
+// Client attributes
+
+// Server attributes
+#define ZCL_SHORT_ADDRESS_ATTRIBUTE_ID (0x0000)
+#define ZCL_EXTENDED_PAN_ID_ATTRIBUTE_ID (0x0001)
+#define ZCL_PAN_ID_ATTRIBUTE_ID (0x0002)
+#define ZCL_CHANNEL_MASK_ATTRIBUTE_ID (0x0003)
+#define ZCL_PROTOCOL_VERSION_ATTRIBUTE_ID (0x0004)
+#define ZCL_STACK_PROFILE_ATTRIBUTE_ID (0x0005)
+#define ZCL_STARTUP_CONTROL_ATTRIBUTE_ID (0x0006)
+#define ZCL_TRUST_CENTER_ADDRESS_ATTRIBUTE_ID (0x0010)
+#define ZCL_TRUST_CENTER_MASTER_KEY_ATTRIBUTE_ID (0x0011)
+#define ZCL_NETWORK_KEY_ATTRIBUTE_ID (0x0012)
+#define ZCL_USE_INSECURE_JOIN_ATTRIBUTE_ID (0x0013)
+#define ZCL_PRECONFIGURED_LINK_KEY_ATTRIBUTE_ID (0x0014)
+#define ZCL_NETWORK_KEY_SEQUENCE_NUMBER_ATTRIBUTE_ID (0x0015)
+#define ZCL_NETWORK_KEY_TYPE_ATTRIBUTE_ID (0x0016)
+#define ZCL_NETWORK_MANAGER_ADDRESS_ATTRIBUTE_ID (0x0017)
+#define ZCL_SCAN_ATTEMPTS_ATTRIBUTE_ID (0x0020)
+#define ZCL_TIME_BETWEEN_SCANS_ATTRIBUTE_ID (0x0021)
+#define ZCL_REJOIN_INTERVAL_ATTRIBUTE_ID (0x0022)
+#define ZCL_MAX_REJOIN_INTERVAL_ATTRIBUTE_ID (0x0023)
+#define ZCL_INDIRECT_POLL_RATE_ATTRIBUTE_ID (0x0030)
+#define ZCL_PARENT_RETRY_THRESHOLD_ATTRIBUTE_ID (0x0031)
+#define ZCL_CONCENTRATOR_FLAG_ATTRIBUTE_ID (0x0040)
+#define ZCL_CONCENTRATOR_RADIUS_ATTRIBUTE_ID (0x0041)
+#define ZCL_CONCENTRATOR_DISCOVERY_TIME_ATTRIBUTE_ID (0x0042)
+
+// Attribute ids for cluster: Partition
+
+// Client attributes
+
+// Server attributes
+#define ZCL_PARTITION_MAXIMUM_INCOMING_TRANSFER_SIZE_ATTRIBUTE_ID (0x0000)
+#define ZCL_PARTITION_MAXIMUM_OUTGOING_TRANSFER_SIZE_ATTRIBUTE_ID (0x0001)
+#define ZCL_PARTIONED_FRAME_SIZE_ATTRIBUTE_ID (0x0002)
+#define ZCL_LARGE_FRAME_SIZE_ATTRIBUTE_ID (0x0003)
+#define ZCL_NUMBER_OF_ACK_FRAME_ATTRIBUTE_ID (0x0004)
+#define ZCL_NACK_TIMEOUT_ATTRIBUTE_ID (0x0005)
+#define ZCL_INTERFRAME_DELAY_ATTRIBUTE_ID (0x0006)
+#define ZCL_NUMBER_OF_SEND_RETRIES_ATTRIBUTE_ID (0x0007)
+#define ZCL_SENDER_TIMEOUT_ATTRIBUTE_ID (0x0008)
+#define ZCL_RECEIVER_TIMEOUT_ATTRIBUTE_ID (0x0009)
+
+// Attribute ids for cluster: Over the Air Bootloading
+
+// Client attributes
+#define ZCL_UPGRADE_SERVER_ID_ATTRIBUTE_ID (0x0000)
+#define ZCL_FILE_OFFSET_ATTRIBUTE_ID (0x0001)
+#define ZCL_CURRENT_FILE_VERSION_ATTRIBUTE_ID (0x0002)
+#define ZCL_CURRENT_ZIGBEE_STACK_VERSION_ATTRIBUTE_ID (0x0003)
+#define ZCL_DOWNLOADED_FILE_VERSION_ATTRIBUTE_ID (0x0004)
+#define ZCL_DOWNLOADED_ZIGBEE_STACK_VERSION_ATTRIBUTE_ID (0x0005)
+#define ZCL_IMAGE_UPGRADE_STATUS_ATTRIBUTE_ID (0x0006)
+#define ZCL_MANUFACTURER_ID_ATTRIBUTE_ID (0x0007)
+#define ZCL_IMAGE_TYPE_ID_ATTRIBUTE_ID (0x0008)
+#define ZCL_MINIMUM_BLOCK_REQUEST_PERIOD_ATTRIBUTE_ID (0x0009)
+#define ZCL_IMAGE_STAMP_ATTRIBUTE_ID (0x000A)
+#define ZCL_UPGRADE_ACTIVATION_POLICY_ATTRIBUTE_ID (0x000B)
+#define ZCL_UPGRADE_TIMEOUT_POLICY_ATTRIBUTE_ID (0x000C)
+
+// Server attributes
+
+// Attribute ids for cluster: Power Profile
+
+// Client attributes
+
+// Server attributes
+#define ZCL_TOTAL_PROFILE_NUM_ATTRIBUTE_ID (0x0000)
+#define ZCL_MULTIPLE_SCHEDULING_ATTRIBUTE_ID (0x0001)
+#define ZCL_ENERGY_FORMATTING_ATTRIBUTE_ID (0x0002)
+#define ZCL_ENERGY_REMOTE_ATTRIBUTE_ID (0x0003)
+#define ZCL_SCHEDULE_MODE_ATTRIBUTE_ID (0x0004)
+
+// Attribute ids for cluster: Appliance Control
+
+// Client attributes
+
+// Server attributes
+#define ZCL_START_TIME_ATTRIBUTE_ID (0x0000)
+#define ZCL_FINISH_TIME_ATTRIBUTE_ID (0x0001)
+#define ZCL_REMAINING_TIME_ATTRIBUTE_ID (0x0002)
+
+// Attribute ids for cluster: Poll Control
+
+// Client attributes
+
+// Server attributes
+#define ZCL_CHECK_IN_INTERVAL_ATTRIBUTE_ID (0x0000)
+#define ZCL_LONG_POLL_INTERVAL_ATTRIBUTE_ID (0x0001)
+#define ZCL_SHORT_POLL_INTERVAL_ATTRIBUTE_ID (0x0002)
+#define ZCL_FAST_POLL_TIMEOUT_ATTRIBUTE_ID (0x0003)
+#define ZCL_CHECK_IN_INTERVAL_MIN_ATTRIBUTE_ID (0x0004)
+#define ZCL_LONG_POLL_INTERVAL_MIN_ATTRIBUTE_ID (0x0005)
+#define ZCL_FAST_POLL_TIMEOUT_MAX_ATTRIBUTE_ID (0x0006)
+
+// Attribute ids for cluster: Green Power
+
+// Client attributes
+#define ZCL_GP_CLIENT_GPP_MAX_PROXY_TABLE_ENTRIES_ATTRIBUTE_ID (0x0010)
+#define ZCL_GP_CLIENT_PROXY_TABLE_ATTRIBUTE_ID (0x0011)
+#define ZCL_GP_CLIENT_GPP_NOTIFICATION_RETRY_NUMBER_ATTRIBUTE_ID (0x0012)
+#define ZCL_GP_CLIENT_GPP_NOTIFICATION_RETRY_TIMER_ATTRIBUTE_ID (0x0013)
+#define ZCL_GP_CLIENT_GPP_MAX_SEARCH_COUNTER_ATTRIBUTE_ID (0x0014)
+#define ZCL_GP_CLIENT_GPP_BLOCKED_GPD_ID_ATTRIBUTE_ID (0x0015)
+#define ZCL_GP_CLIENT_GPP_FUNCTIONALITY_ATTRIBUTE_ID (0x0016)
+#define ZCL_GP_CLIENT_GPP_ACTIVE_FUNCTIONALITY_ATTRIBUTE_ID (0x0017)
+#define ZCL_GP_CLIENT_GP_SHARED_SECURITY_KEY_TYPE_ATTRIBUTE_ID (0x0020)
+#define ZCL_GP_CLIENT_GP_SHARED_SECURITY_KEY_ATTRIBUTE_ID (0x0021)
+#define ZCL_GP_CLIENT_GP_LINK_KEY_ATTRIBUTE_ID (0x0022)
+
+// Server attributes
+#define ZCL_GP_SERVER_GPS_MAX_SINK_TABLE_ENTRIES_ATTRIBUTE_ID (0x0000)
+#define ZCL_GP_SERVER_SINK_TABLE_ATTRIBUTE_ID (0x0001)
+#define ZCL_GP_SERVER_GPS_COMMUNICATION_MODE_ATTRIBUTE_ID (0x0002)
+#define ZCL_GP_SERVER_GPS_COMMISSIONING_EXIT_MODE_ATTRIBUTE_ID (0x0003)
+#define ZCL_GP_SERVER_GPS_COMMISSIONING_WINDOW_ATTRIBUTE_ID (0x0004)
+#define ZCL_GP_SERVER_GPS_SECURITY_LEVEL_ATTRIBUTE_ID (0x0005)
+#define ZCL_GP_SERVER_GPS_FUNCTIONALITY_ATTRIBUTE_ID (0x0006)
+#define ZCL_GP_SERVER_GPS_ACTIVE_FUNCTIONALITY_ATTRIBUTE_ID (0x0007)
+#define ZCL_GP_SERVER_GP_SHARED_SECURITY_KEY_TYPE_ATTRIBUTE_ID (0x0020)
+#define ZCL_GP_SERVER_GP_SHARED_SECURITY_KEY_ATTRIBUTE_ID (0x0021)
+#define ZCL_GP_SERVER_GP_LINK_KEY_ATTRIBUTE_ID (0x0022)
+
+// Attribute ids for cluster: Keep-Alive
+
+// Client attributes
+
+// Server attributes
+#define ZCL_KEEPALIVE_BASE_ATTRIBUTE_ID (0x0000)
+#define ZCL_KEEPALIVE_JITTER_ATTRIBUTE_ID (0x0001)
+
+// Attribute ids for cluster: Shade Configuration
+
+// Client attributes
+
+// Server attributes
+#define ZCL_SHADE_CONFIG_PHYSICAL_CLOSED_LIMIT_ATTRIBUTE_ID (0x0000)
+#define ZCL_SHADE_CONFIG_MOTOR_STEP_SIZE_ATTRIBUTE_ID (0x0001)
+#define ZCL_SHADE_CONFIG_STATUS_ATTRIBUTE_ID (0x0002)
+#define ZCL_SHADE_CONFIG_CLOSED_LIMIT_ATTRIBUTE_ID (0x0010)
+#define ZCL_SHADE_CONFIG_MODE_ATTRIBUTE_ID (0x0011)
+
+// Attribute ids for cluster: Door Lock
+
+// Client attributes
+
+// Server attributes
+#define ZCL_LOCK_STATE_ATTRIBUTE_ID (0x0000)
+#define ZCL_LOCK_TYPE_ATTRIBUTE_ID (0x0001)
+#define ZCL_ACTUATOR_ENABLED_ATTRIBUTE_ID (0x0002)
+#define ZCL_DOOR_STATE_ATTRIBUTE_ID (0x0003)
+#define ZCL_DOOR_OPEN_EVENTS_ATTRIBUTE_ID (0x0004)
+#define ZCL_DOOR_CLOSED_EVENTS_ATTRIBUTE_ID (0x0005)
+#define ZCL_OPEN_PERIOD_ATTRIBUTE_ID (0x0006)
+#define ZCL_NUM_LOCK_RECORDS_SUPPORTED_ATTRIBUTE_ID (0x0010)
+#define ZCL_NUM_TOTAL_USERS_SUPPORTED_ATTRIBUTE_ID (0x0011)
+#define ZCL_NUM_PIN_USERS_SUPPORTED_ATTRIBUTE_ID (0x0012)
+#define ZCL_NUM_RFID_USERS_SUPPORTED_ATTRIBUTE_ID (0x0013)
+#define ZCL_NUM_WEEKDAY_SCHEDULES_SUPPORTED_PER_USER_ATTRIBUTE_ID (0x0014)
+#define ZCL_NUM_YEARDAY_SCHEDULES_SUPPORTED_PER_USER_ATTRIBUTE_ID (0x0015)
+#define ZCL_NUM_HOLIDAY_SCHEDULES_SUPPORTED_PER_USER_ATTRIBUTE_ID (0x0016)
+#define ZCL_MAX_PIN_LENGTH_ATTRIBUTE_ID (0x0017)
+#define ZCL_MIN_PIN_LENGTH_ATTRIBUTE_ID (0x0018)
+#define ZCL_MAX_RFID_CODE_LENGTH_ATTRIBUTE_ID (0x0019)
+#define ZCL_MIN_RFID_CODE_LENGTH_ATTRIBUTE_ID (0x001A)
+#define ZCL_ENABLE_LOGGING_ATTRIBUTE_ID (0x0020)
+#define ZCL_LANGUAGE_ATTRIBUTE_ID (0x0021)
+#define ZCL_LED_SETTINGS_ATTRIBUTE_ID (0x0022)
+#define ZCL_AUTO_RELOCK_TIME_ATTRIBUTE_ID (0x0023)
+#define ZCL_SOUND_VOLUME_ATTRIBUTE_ID (0x0024)
+#define ZCL_OPERATING_MODE_ATTRIBUTE_ID (0x0025)
+#define ZCL_SUPPORTED_OPERATING_MODES_ATTRIBUTE_ID (0x0026)
+#define ZCL_DEFAULT_CONFIGURATION_REGISTER_ATTRIBUTE_ID (0x0027)
+#define ZCL_ENABLE_LOCAL_PROGRAMMING_ATTRIBUTE_ID (0x0028)
+#define ZCL_ENABLE_ONE_TOUCH_LOCKING_ATTRIBUTE_ID (0x0029)
+#define ZCL_ENABLE_INSIDE_STATUS_LED_ATTRIBUTE_ID (0x002A)
+#define ZCL_ENABLE_PRIVACY_MODE_BUTTON_ATTRIBUTE_ID (0x002B)
+#define ZCL_WRONG_CODE_ENTRY_LIMIT_ATTRIBUTE_ID (0x0030)
+#define ZCL_USER_CODE_TEMPORARY_DISABLE_TIME_ATTRIBUTE_ID (0x0031)
+#define ZCL_SEND_PIN_OVER_THE_AIR_ATTRIBUTE_ID (0x0032)
+#define ZCL_REQUIRE_PIN_FOR_RF_OPERATION_ATTRIBUTE_ID (0x0033)
+#define ZCL_ZIGBEE_SECURITY_LEVEL_ATTRIBUTE_ID (0x0034)
+#define ZCL_DOOR_LOCK_ALARM_MASK_ATTRIBUTE_ID (0x0040)
+#define ZCL_KEYPAD_OPERATION_EVENT_MASK_ATTRIBUTE_ID (0x0041)
+#define ZCL_RF_OPERATION_EVENT_MASK_ATTRIBUTE_ID (0x0042)
+#define ZCL_MANUAL_OPERATION_EVENT_MASK_ATTRIBUTE_ID (0x0043)
+#define ZCL_RFID_OPERATION_EVENT_MASK_ATTRIBUTE_ID (0x0044)
+#define ZCL_KEYPAD_PROGRAMMING_EVENT_MASK_ATTRIBUTE_ID (0x0045)
+#define ZCL_RF_PROGRAMMING_EVENT_MASK_ATTRIBUTE_ID (0x0046)
+#define ZCL_RFID_PROGRAMMING_EVENT_MASK_ATTRIBUTE_ID (0x0047)
+
+// Attribute ids for cluster: Window Covering
+
+// Client attributes
+
+// Server attributes
+#define ZCL_COVERING_TYPE_ATTRIBUTE_ID (0x0000)
+#define ZCL_LIMIT_LIFT_ATTRIBUTE_ID (0x0001)
+#define ZCL_LIMIT_TILT_ATTRIBUTE_ID (0x0002)
+#define ZCL_CURRENT_LIFT_ATTRIBUTE_ID (0x0003)
+#define ZCL_CURRENT_TILT_ATTRIBUTE_ID (0x0004)
+#define ZCL_NUMBER_LIFT_ATTRIBUTE_ID (0x0005)
+#define ZCL_NUMBER_TILT_ATTRIBUTE_ID (0x0006)
+#define ZCL_CONFIG_STATUS_ATTRIBUTE_ID (0x0007)
+#define ZCL_CURRENT_LIFT_PERCENTAGE_ATTRIBUTE_ID (0x0008)
+#define ZCL_CURRENT_TILT_PERCENTAGE_ATTRIBUTE_ID (0x0009)
+#define ZCL_OPEN_LIMIT_LIFT_ATTRIBUTE_ID (0x0010)
+#define ZCL_CLOSED_LIMIT_LIFT_ATTRIBUTE_ID (0x0011)
+#define ZCL_OPEN_LIMIT_TILT_ATTRIBUTE_ID (0x0012)
+#define ZCL_CLOSED_LIMIT_TILT_ATTRIBUTE_ID (0x0013)
+#define ZCL_VELOCITY_LIFT_ATTRIBUTE_ID (0x0014)
+#define ZCL_ACCELERATION_LIFT_ATTRIBUTE_ID (0x0015)
+#define ZCL_DECELERATION_LIFT_ATTRIBUTE_ID (0x0016)
+#define ZCL_MODE_ATTRIBUTE_ID (0x0017)
+#define ZCL_SETPOINTS_LIFT_ATTRIBUTE_ID (0x0018)
+#define ZCL_SETPOINTS_TILT_ATTRIBUTE_ID (0x0019)
+
+// Attribute ids for cluster: Barrier Control
+
+// Client attributes
+
+// Server attributes
+#define ZCL_BARRIER_MOVING_STATE_ATTRIBUTE_ID (0x0001)
+#define ZCL_BARRIER_SAFETY_STATUS_ATTRIBUTE_ID (0x0002)
+#define ZCL_BARRIER_CAPABILITIES_ATTRIBUTE_ID (0x0003)
+#define ZCL_BARRIER_OPEN_EVENTS_ATTRIBUTE_ID (0x0004)
+#define ZCL_BARRIER_CLOSE_EVENTS_ATTRIBUTE_ID (0x0005)
+#define ZCL_BARRIER_COMMAND_OPEN_EVENTS_ATTRIBUTE_ID (0x0006)
+#define ZCL_BARRIER_COMMAND_CLOSE_EVENTS_ATTRIBUTE_ID (0x0007)
+#define ZCL_BARRIER_OPEN_PERIOD_ATTRIBUTE_ID (0x0008)
+#define ZCL_BARRIER_CLOSE_PERIOD_ATTRIBUTE_ID (0x0009)
+#define ZCL_BARRIER_POSITION_ATTRIBUTE_ID (0x000A)
+
+// Attribute ids for cluster: Pump Configuration and Control
+
+// Client attributes
+
+// Server attributes
+#define ZCL_MAX_PRESSURE_ATTRIBUTE_ID (0x0000)
+#define ZCL_MAX_SPEED_ATTRIBUTE_ID (0x0001)
+#define ZCL_MAX_FLOW_ATTRIBUTE_ID (0x0002)
+#define ZCL_MIN_CONST_PRESSURE_ATTRIBUTE_ID (0x0003)
+#define ZCL_MAX_CONST_PRESSURE_ATTRIBUTE_ID (0x0004)
+#define ZCL_MIN_COMP_PRESSURE_ATTRIBUTE_ID (0x0005)
+#define ZCL_MAX_COMP_PRESSURE_ATTRIBUTE_ID (0x0006)
+#define ZCL_MIN_CONST_SPEED_ATTRIBUTE_ID (0x0007)
+#define ZCL_MAX_CONST_SPEED_ATTRIBUTE_ID (0x0008)
+#define ZCL_MIN_CONST_FLOW_ATTRIBUTE_ID (0x0009)
+#define ZCL_MAX_CONST_FLOW_ATTRIBUTE_ID (0x000A)
+#define ZCL_MIN_CONST_TEMP_ATTRIBUTE_ID (0x000B)
+#define ZCL_MAX_CONST_TEMP_ATTRIBUTE_ID (0x000C)
+#define ZCL_PUMP_STATUS_ATTRIBUTE_ID (0x0010)
+#define ZCL_EFFECTIVE_OPERATION_MODE_ATTRIBUTE_ID (0x0011)
+#define ZCL_EFFECTIVE_CONTROL_MODE_ATTRIBUTE_ID (0x0012)
+#define ZCL_CAPACITY_ATTRIBUTE_ID (0x0013)
+#define ZCL_SPEED_ATTRIBUTE_ID (0x0014)
+#define ZCL_LIFETIME_RUNNING_HOURS_ATTRIBUTE_ID (0x0015)
+#define ZCL_PUMP_POWER_ATTRIBUTE_ID (0x0016)
+#define ZCL_LIFETIME_ENERGY_CONSUMED_ATTRIBUTE_ID (0x0017)
+#define ZCL_OPERATION_MODE_ATTRIBUTE_ID (0x0020)
+#define ZCL_CONTROL_MODE_ATTRIBUTE_ID (0x0021)
+#define ZCL_PUMP_ALARM_MASK_ATTRIBUTE_ID (0x0022)
+
+// Attribute ids for cluster: Thermostat
+
+// Client attributes
+
+// Server attributes
+#define ZCL_LOCAL_TEMPERATURE_ATTRIBUTE_ID (0x0000)
+#define ZCL_OUTDOOR_TEMPERATURE_ATTRIBUTE_ID (0x0001)
+#define ZCL_THERMOSTAT_OCCUPANCY_ATTRIBUTE_ID (0x0002)
+#define ZCL_ABS_MIN_HEAT_SETPOINT_LIMIT_ATTRIBUTE_ID (0x0003)
+#define ZCL_ABS_MAX_HEAT_SETPOINT_LIMIT_ATTRIBUTE_ID (0x0004)
+#define ZCL_ABS_MIN_COOL_SETPOINT_LIMIT_ATTRIBUTE_ID (0x0005)
+#define ZCL_ABS_MAX_COOL_SETPOINT_LIMIT_ATTRIBUTE_ID (0x0006)
+#define ZCL_PI_COOLING_DEMAND_ATTRIBUTE_ID (0x0007)
+#define ZCL_PI_HEATING_DEMAND_ATTRIBUTE_ID (0x0008)
+#define ZCL_HVAC_SYSTEM_TYPE_CONFIGURATION_ATTRIBUTE_ID (0x0009)
+#define ZCL_LOCAL_TEMPERATURE_CALIBRATION_ATTRIBUTE_ID (0x0010)
+#define ZCL_OCCUPIED_COOLING_SETPOINT_ATTRIBUTE_ID (0x0011)
+#define ZCL_OCCUPIED_HEATING_SETPOINT_ATTRIBUTE_ID (0x0012)
+#define ZCL_UNOCCUPIED_COOLING_SETPOINT_ATTRIBUTE_ID (0x0013)
+#define ZCL_UNOCCUPIED_HEATING_SETPOINT_ATTRIBUTE_ID (0x0014)
+#define ZCL_MIN_HEAT_SETPOINT_LIMIT_ATTRIBUTE_ID (0x0015)
+#define ZCL_MAX_HEAT_SETPOINT_LIMIT_ATTRIBUTE_ID (0x0016)
+#define ZCL_MIN_COOL_SETPOINT_LIMIT_ATTRIBUTE_ID (0x0017)
+#define ZCL_MAX_COOL_SETPOINT_LIMIT_ATTRIBUTE_ID (0x0018)
+#define ZCL_MIN_SETPOINT_DEAD_BAND_ATTRIBUTE_ID (0x0019)
+#define ZCL_REMOTE_SENSING_ATTRIBUTE_ID (0x001A)
+#define ZCL_CONTROL_SEQUENCE_OF_OPERATION_ATTRIBUTE_ID (0x001B)
+#define ZCL_SYSTEM_MODE_ATTRIBUTE_ID (0x001C)
+#define ZCL_THERMOSTAT_ALARM_MASK_ATTRIBUTE_ID (0x001D)
+#define ZCL_THERMOSTAT_RUNNING_MODE_ATTRIBUTE_ID (0x001E)
+#define ZCL_START_OF_WEEK_ATTRIBUTE_ID (0x0020)
+#define ZCL_NUMBER_OF_WEEKLY_TRANSITIONS_ATTRIBUTE_ID (0x0021)
+#define ZCL_NUMBER_OF_DAILY_TRANSITIONS_ATTRIBUTE_ID (0x0022)
+#define ZCL_TEMPERATURE_SETPOINT_HOLD_ATTRIBUTE_ID (0x0023)
+#define ZCL_TEMPERATURE_SETPOINT_HOLD_DURATION_ATTRIBUTE_ID (0x0024)
+#define ZCL_THERMOSTAT_PROGRAMMING_OPERATION_MODE_ATTRIBUTE_ID (0x0025)
+#define ZCL_THERMOSTAT_RUNNING_STATE_ATTRIBUTE_ID (0x0029)
+#define ZCL_SETPOINT_CHANGE_SOURCE_ATTRIBUTE_ID (0x0030)
+#define ZCL_SETPOINT_CHANGE_AMOUNT_ATTRIBUTE_ID (0x0031)
+#define ZCL_SETPOINT_CHANGE_SOURCE_TIMESTAMP_ATTRIBUTE_ID (0x0032)
+#define ZCL_AC_TYPE_ATTRIBUTE_ID (0x0040)
+#define ZCL_AC_CAPACITY_ATTRIBUTE_ID (0x0041)
+#define ZCL_AC_REFRIGERANT_TYPE_ATTRIBUTE_ID (0x0042)
+#define ZCL_AC_COMPRESSOR_ATTRIBUTE_ID (0x0043)
+#define ZCL_AC_ERROR_CODE_ATTRIBUTE_ID (0x0044)
+#define ZCL_AC_LOUVER_POSITION_ATTRIBUTE_ID (0x0045)
+#define ZCL_AC_COIL_TEMPERATURE_ATTRIBUTE_ID (0x0046)
+#define ZCL_AC_CAPACITY_FORMAT_ATTRIBUTE_ID (0x0047)
+
+// Attribute ids for cluster: Fan Control
+
+// Client attributes
+
+// Server attributes
+#define ZCL_FAN_CONTROL_FAN_MODE_ATTRIBUTE_ID (0x0000)
+#define ZCL_FAN_CONTROL_FAN_MODE_SEQUENCE_ATTRIBUTE_ID (0x0001)
+
+// Attribute ids for cluster: Dehumidification Control
+
+// Client attributes
+
+// Server attributes
+#define ZCL_RELATIVE_HUMIDITY_ATTRIBUTE_ID (0x0000)
+#define ZCL_DEHUMIDIFICATION_COOLING_ATTRIBUTE_ID (0x0001)
+#define ZCL_RH_DEHUMIDIFICATION_SETPOINT_ATTRIBUTE_ID (0x0010)
+#define ZCL_RELATIVE_HUMIDITY_MODE_ATTRIBUTE_ID (0x0011)
+#define ZCL_DEHUMIDIFICATION_LOCKOUT_ATTRIBUTE_ID (0x0012)
+#define ZCL_DEHUMIDIFICATION_HYSTERESIS_ATTRIBUTE_ID (0x0013)
+#define ZCL_DEHUMIDIFICATION_MAX_COOL_ATTRIBUTE_ID (0x0014)
+#define ZCL_RELATIVE_HUMIDITY_DISPLAY_ATTRIBUTE_ID (0x0015)
+
+// Attribute ids for cluster: Thermostat User Interface Configuration
+
+// Client attributes
+
+// Server attributes
+#define ZCL_TEMPERATURE_DISPLAY_MODE_ATTRIBUTE_ID (0x0000)
+#define ZCL_KEYPAD_LOCKOUT_ATTRIBUTE_ID (0x0001)
+#define ZCL_SCHEDULE_PROGRAMMING_VISIBILITY_ATTRIBUTE_ID (0x0002)
+
+// Attribute ids for cluster: Color Control
+
+// Client attributes
+
+// Server attributes
+#define ZCL_COLOR_CONTROL_CURRENT_HUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_COLOR_CONTROL_CURRENT_SATURATION_ATTRIBUTE_ID (0x0001)
+#define ZCL_COLOR_CONTROL_REMAINING_TIME_ATTRIBUTE_ID (0x0002)
+#define ZCL_COLOR_CONTROL_CURRENT_X_ATTRIBUTE_ID (0x0003)
+#define ZCL_COLOR_CONTROL_CURRENT_Y_ATTRIBUTE_ID (0x0004)
+#define ZCL_COLOR_CONTROL_DRIFT_COMPENSATION_ATTRIBUTE_ID (0x0005)
+#define ZCL_COLOR_CONTROL_COMPENSATION_TEXT_ATTRIBUTE_ID (0x0006)
+#define ZCL_COLOR_CONTROL_COLOR_TEMPERATURE_ATTRIBUTE_ID (0x0007)
+#define ZCL_COLOR_CONTROL_COLOR_MODE_ATTRIBUTE_ID (0x0008)
+#define ZCL_COLOR_CONTROL_OPTIONS_ATTRIBUTE_ID (0x000F)
+#define ZCL_COLOR_CONTROL_NUMBER_OF_PRIMARIES_ATTRIBUTE_ID (0x0010)
+#define ZCL_COLOR_CONTROL_PRIMARY_1_X_ATTRIBUTE_ID (0x0011)
+#define ZCL_COLOR_CONTROL_PRIMARY_1_Y_ATTRIBUTE_ID (0x0012)
+#define ZCL_COLOR_CONTROL_PRIMARY_1_INTENSITY_ATTRIBUTE_ID (0x0013)
+#define ZCL_COLOR_CONTROL_PRIMARY_2_X_ATTRIBUTE_ID (0x0015)
+#define ZCL_COLOR_CONTROL_PRIMARY_2_Y_ATTRIBUTE_ID (0x0016)
+#define ZCL_COLOR_CONTROL_PRIMARY_2_INTENSITY_ATTRIBUTE_ID (0x0017)
+#define ZCL_COLOR_CONTROL_PRIMARY_3_X_ATTRIBUTE_ID (0x0019)
+#define ZCL_COLOR_CONTROL_PRIMARY_3_Y_ATTRIBUTE_ID (0x001A)
+#define ZCL_COLOR_CONTROL_PRIMARY_3_INTENSITY_ATTRIBUTE_ID (0x001B)
+#define ZCL_COLOR_CONTROL_PRIMARY_4_X_ATTRIBUTE_ID (0x0020)
+#define ZCL_COLOR_CONTROL_PRIMARY_4_Y_ATTRIBUTE_ID (0x0021)
+#define ZCL_COLOR_CONTROL_PRIMARY_4_INTENSITY_ATTRIBUTE_ID (0x0022)
+#define ZCL_COLOR_CONTROL_PRIMARY_5_X_ATTRIBUTE_ID (0x0024)
+#define ZCL_COLOR_CONTROL_PRIMARY_5_Y_ATTRIBUTE_ID (0x0025)
+#define ZCL_COLOR_CONTROL_PRIMARY_5_INTENSITY_ATTRIBUTE_ID (0x0026)
+#define ZCL_COLOR_CONTROL_PRIMARY_6_X_ATTRIBUTE_ID (0x0028)
+#define ZCL_COLOR_CONTROL_PRIMARY_6_Y_ATTRIBUTE_ID (0x0029)
+#define ZCL_COLOR_CONTROL_PRIMARY_6_INTENSITY_ATTRIBUTE_ID (0x002A)
+#define ZCL_COLOR_CONTROL_WHITE_POINT_X_ATTRIBUTE_ID (0x0030)
+#define ZCL_COLOR_CONTROL_WHITE_POINT_Y_ATTRIBUTE_ID (0x0031)
+#define ZCL_COLOR_CONTROL_COLOR_POINT_R_X_ATTRIBUTE_ID (0x0032)
+#define ZCL_COLOR_CONTROL_COLOR_POINT_R_Y_ATTRIBUTE_ID (0x0033)
+#define ZCL_COLOR_CONTROL_COLOR_POINT_R_INTENSITY_ATTRIBUTE_ID (0x0034)
+#define ZCL_COLOR_CONTROL_COLOR_POINT_G_X_ATTRIBUTE_ID (0x0036)
+#define ZCL_COLOR_CONTROL_COLOR_POINT_G_Y_ATTRIBUTE_ID (0x0037)
+#define ZCL_COLOR_CONTROL_COLOR_POINT_G_INTENSITY_ATTRIBUTE_ID (0x0038)
+#define ZCL_COLOR_CONTROL_COLOR_POINT_B_X_ATTRIBUTE_ID (0x003A)
+#define ZCL_COLOR_CONTROL_COLOR_POINT_B_Y_ATTRIBUTE_ID (0x003B)
+#define ZCL_COLOR_CONTROL_COLOR_POINT_B_INTENSITY_ATTRIBUTE_ID (0x003C)
+#define ZCL_COLOR_CONTROL_ENHANCED_CURRENT_HUE_ATTRIBUTE_ID (0x4000)
+#define ZCL_COLOR_CONTROL_ENHANCED_COLOR_MODE_ATTRIBUTE_ID (0x4001)
+#define ZCL_COLOR_CONTROL_COLOR_LOOP_ACTIVE_ATTRIBUTE_ID (0x4002)
+#define ZCL_COLOR_CONTROL_COLOR_LOOP_DIRECTION_ATTRIBUTE_ID (0x4003)
+#define ZCL_COLOR_CONTROL_COLOR_LOOP_TIME_ATTRIBUTE_ID (0x4004)
+#define ZCL_COLOR_CONTROL_COLOR_LOOP_START_ENHANCED_HUE_ATTRIBUTE_ID (0x4005)
+#define ZCL_COLOR_CONTROL_COLOR_LOOP_STORED_ENHANCED_HUE_ATTRIBUTE_ID (0x4006)
+#define ZCL_COLOR_CONTROL_COLOR_CAPABILITIES_ATTRIBUTE_ID (0x400A)
+#define ZCL_COLOR_CONTROL_COLOR_TEMP_PHYSICAL_MIN_ATTRIBUTE_ID (0x400B)
+#define ZCL_COLOR_CONTROL_COLOR_TEMP_PHYSICAL_MAX_ATTRIBUTE_ID (0x400C)
+#define ZCL_COLOR_CONTROL_TEMPERATURE_LEVEL_MIN_MIREDS_ATTRIBUTE_ID (0x400D)
+#define ZCL_START_UP_COLOR_TEMPERATURE_MIREDS_ATTRIBUTE_ID (0x4010)
+
+// Attribute ids for cluster: Ballast Configuration
+
+// Client attributes
+
+// Server attributes
+#define ZCL_PHYSICAL_MIN_LEVEL_ATTRIBUTE_ID (0x0000)
+#define ZCL_PHYSICAL_MAX_LEVEL_ATTRIBUTE_ID (0x0001)
+#define ZCL_BALLAST_STATUS_ATTRIBUTE_ID (0x0002)
+#define ZCL_MIN_LEVEL_ATTRIBUTE_ID (0x0010)
+#define ZCL_MAX_LEVEL_ATTRIBUTE_ID (0x0011)
+#define ZCL_POWER_ON_LEVEL_ATTRIBUTE_ID (0x0012)
+#define ZCL_POWER_ON_FADE_TIME_ATTRIBUTE_ID (0x0013)
+#define ZCL_INTRINSIC_BALLAST_FACTOR_ATTRIBUTE_ID (0x0014)
+#define ZCL_BALLAST_FACTOR_ADJUSTMENT_ATTRIBUTE_ID (0x0015)
+#define ZCL_LAMP_QUALITY_ATTRIBUTE_ID (0x0020)
+#define ZCL_LAMP_TYPE_ATTRIBUTE_ID (0x0030)
+#define ZCL_LAMP_MANUFACTURER_ATTRIBUTE_ID (0x0031)
+#define ZCL_LAMP_RATED_HOURS_ATTRIBUTE_ID (0x0032)
+#define ZCL_LAMP_BURN_HOURS_ATTRIBUTE_ID (0x0033)
+#define ZCL_LAMP_ALARM_MODE_ATTRIBUTE_ID (0x0034)
+#define ZCL_LAMP_BURN_HOURS_TRIP_POINT_ATTRIBUTE_ID (0x0035)
+
+// Attribute ids for cluster: Illuminance Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_ILLUM_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_ILLUM_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_ILLUM_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_ILLUM_TOLERANCE_ATTRIBUTE_ID (0x0003)
+#define ZCL_MEASUREMENT_LIGHT_SENSOR_TYPE_ATTRIBUTE_ID (0x0004)
+
+// Attribute ids for cluster: Illuminance Level Sensing
+
+// Client attributes
+
+// Server attributes
+#define ZCL_LEVEL_STATUS_ATTRIBUTE_ID (0x0000)
+#define ZCL_SENSING_LIGHT_SENSOR_TYPE_ATTRIBUTE_ID (0x0001)
+#define ZCL_ILLUMINANCE_TARGET_LEVEL_ATTRIBUTE_ID (0x0010)
+
+// Attribute ids for cluster: Temperature Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_TEMP_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_TEMP_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_TEMP_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_TEMP_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Pressure Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_PRESSURE_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_PRESSURE_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_PRESSURE_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_PRESSURE_TOLERANCE_ATTRIBUTE_ID (0x0003)
+#define ZCL_PRESSURE_SCALED_VALUE_ATTRIBUTE_ID (0x0010)
+#define ZCL_PRESSURE_MIN_SCALED_VALUE_ATTRIBUTE_ID (0x0011)
+#define ZCL_PRESSURE_MAX_SCALED_VALUE_ATTRIBUTE_ID (0x0012)
+#define ZCL_PRESSURE_SCALED_TOLERANCE_ATTRIBUTE_ID (0x0013)
+#define ZCL_PRESSURE_SCALE_ATTRIBUTE_ID (0x0014)
+
+// Attribute ids for cluster: Flow Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_FLOW_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_FLOW_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_FLOW_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_FLOW_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Relative Humidity Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_RELATIVE_HUMIDITY_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_RELATIVE_HUMIDITY_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_RELATIVE_HUMIDITY_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_RELATIVE_HUMIDITY_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Occupancy Sensing
+
+// Client attributes
+
+// Server attributes
+#define ZCL_OCCUPANCY_ATTRIBUTE_ID (0x0000)
+#define ZCL_OCCUPANCY_SENSOR_TYPE_ATTRIBUTE_ID (0x0001)
+#define ZCL_OCCUPANCY_SENSOR_TYPE_BITMAP_ATTRIBUTE_ID (0x0002)
+#define ZCL_PIR_OCCUPIED_TO_UNOCCUPIED_DELAY_ATTRIBUTE_ID (0x0010)
+#define ZCL_PIR_UNOCCUPIED_TO_OCCUPIED_DELAY_ATTRIBUTE_ID (0x0011)
+#define ZCL_PIR_UNOCCUPIED_TO_OCCUPIED_THRESHOLD_ATTRIBUTE_ID (0x0012)
+#define ZCL_ULTRASONIC_OCCUPIED_TO_UNOCCUPIED_DELAY_ATTRIBUTE_ID (0x0020)
+#define ZCL_ULTRASONIC_UNOCCUPIED_TO_OCCUPIED_DELAY_ATTRIBUTE_ID (0x0021)
+#define ZCL_ULTRASONIC_UNOCCUPIED_TO_OCCUPIED_THRESHOLD_ATTRIBUTE_ID (0x0022)
+#define ZCL_PHYSICAL_CONTACT_OCCUPIED_TO_UNOCCUPIED_DELAY_ATTRIBUTE_ID (0x0030)
+#define ZCL_PHYSICAL_CONTACT_UNOCCUPIED_TO_OCCUPIED_DELAY_ATTRIBUTE_ID (0x0031)
+#define ZCL_PHYSICAL_CONTACT_UNOCCUPIED_TO_OCCUPIED_THRESHOLD_ATTRIBUTE_ID (0x0032)
+
+// Attribute ids for cluster: Carbon Monoxide Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_CARBON_MONOXIDE_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_CARBON_MONOXIDE_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_CARBON_MONOXIDE_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_CARBON_MONOXIDE_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Carbon Dioxide Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_CARBON_DIOXIDE_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_CARBON_DIOXIDE_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_CARBON_DIOXIDE_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_CARBON_DIOXIDE_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Ethylene Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_ETHYLENE_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_ETHYLENE_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_ETHYLENE_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_ETHYLENE_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Ethylene Oxide Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_ETHYLENE_OXIDE_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_ETHYLENE_OXIDE_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_ETHYLENE_OXIDE_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_ETHYLENE_OXIDE_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Hydrogen Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_HYDROGEN_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_HYDROGEN_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_HYDROGEN_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_HYDROGEN_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Hydrogen Sulphide Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_HYDROGEN_SULPHIDE_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_HYDROGEN_SULPHIDE_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_HYDROGEN_SULPHIDE_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_HYDROGEN_SULPHIDE_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Nitric Oxide Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_NITRIC_OXIDE_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_NITRIC_OXIDE_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_NITRIC_OXIDE_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_NITRIC_OXIDE_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Nitrogen Dioxide Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_NITROGEN_DIOXIDE_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_NITROGEN_DIOXIDE_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_NITROGEN_DIOXIDE_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_NITROGEN_DIOXIDE_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Oxygen Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_OXYGEN_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_OXYGEN_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_OXYGEN_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_OXYGEN_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Ozone Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_OZONE_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_OZONE_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_OZONE_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_OZONE_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Sulfur Dioxide Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_SULFUR_DIOXIDE_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_SULFUR_DIOXIDE_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_SULFUR_DIOXIDE_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_SULFUR_DIOXIDE_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Dissolved Oxygen Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_DISSOLVED_OXYGEN_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_DISSOLVED_OXYGEN_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_DISSOLVED_OXYGEN_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_DISSOLVED_OXYGEN_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Bromate Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_BROMATE_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_BROMATE_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_BROMATE_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_BROMATE_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Chloramines Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_CHLORAMINES_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_CHLORAMINES_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_CHLORAMINES_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_CHLORAMINES_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Chlorine Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_CHLORINE_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_CHLORINE_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_CHLORINE_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_CHLORINE_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Fecal coliform and E. Coli Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_FECAL_COLIFORM_AND_E_COLI_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_FECAL_COLIFORM_AND_E_COLI_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_FECAL_COLIFORM_AND_E_COLI_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_FECAL_COLIFORM_AND_E_COLI_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Fluoride Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_FLUORIDE_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_FLUORIDE_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_FLUORIDE_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_FLUORIDE_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Haloacetic Acids Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_HALOACETIC_ACIDS_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_HALOACETIC_ACIDS_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_HALOACETIC_ACIDS_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_HALOACETIC_ACIDS_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Total Trihalomethanes Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_TOTAL_TRIHALOMETHANES_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_TOTAL_TRIHALOMETHANES_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_TOTAL_TRIHALOMETHANES_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_TOTAL_TRIHALOMETHANES_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Total Coliform Bacteria Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_TOTAL_COLIFORM_BACTERIA_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_TOTAL_COLIFORM_BACTERIA_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_TOTAL_COLIFORM_BACTERIA_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_TOTAL_COLIFORM_BACTERIA_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Turbidity Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_TURBIDITY_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_TURBIDITY_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_TURBIDITY_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_TURBIDITY_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Copper Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_COPPER_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_COPPER_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_COPPER_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_COPPER_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Lead Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_LEAD_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_LEAD_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_LEAD_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_LEAD_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Manganese Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_MANGANESE_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_MANGANESE_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_MANGANESE_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_MANGANESE_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Sulfate Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_SULFATE_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_SULFATE_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_SULFATE_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_SULFATE_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Bromodichloromethane Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_BROMODICHLOROMETHANE_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_BROMODICHLOROMETHANE_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_BROMODICHLOROMETHANE_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_BROMODICHLOROMETHANE_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Bromoform Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_BROMOFORM_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_BROMOFORM_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_BROMOFORM_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_BROMOFORM_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Chlorodibromomethane Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_CHLORODIBROMOMETHANE_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_CHLORODIBROMOMETHANE_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_CHLORODIBROMOMETHANE_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_CHLORODIBROMOMETHANE_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Chloroform Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_CHLOROFORM_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_CHLOROFORM_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_CHLOROFORM_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_CHLOROFORM_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: Sodium Concentration Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_SODIUM_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_SODIUM_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_SODIUM_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_SODIUM_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: IAS Zone
+
+// Client attributes
+
+// Server attributes
+#define ZCL_ZONE_STATE_ATTRIBUTE_ID (0x0000)
+#define ZCL_ZONE_TYPE_ATTRIBUTE_ID (0x0001)
+#define ZCL_ZONE_STATUS_ATTRIBUTE_ID (0x0002)
+#define ZCL_IAS_CIE_ADDRESS_ATTRIBUTE_ID (0x0010)
+#define ZCL_ZONE_ID_ATTRIBUTE_ID (0x0011)
+#define ZCL_NUMBER_OF_ZONE_SENSITIVITY_LEVELS_SUPPORTED_ATTRIBUTE_ID (0x0012)
+#define ZCL_CURRENT_ZONE_SENSITIVITY_LEVEL_ATTRIBUTE_ID (0x0013)
+
+// Attribute ids for cluster: IAS ACE
+
+// Client attributes
+
+// Server attributes
+
+// Attribute ids for cluster: IAS WD
+
+// Client attributes
+
+// Server attributes
+#define ZCL_MAX_DURATION_ATTRIBUTE_ID (0x0000)
+
+// Attribute ids for cluster: Generic Tunnel
+
+// Client attributes
+
+// Server attributes
+#define ZCL_MAXIMUM_INCOMING_TRANSFER_SIZE_ATTRIBUTE_ID (0x0001)
+#define ZCL_MAXIMUM_OUTGOING_TRANSFER_SIZE_ATTRIBUTE_ID (0x0002)
+#define ZCL_PROTOCOL_ADDRESS_ATTRIBUTE_ID (0x0003)
+
+// Attribute ids for cluster: BACnet Protocol Tunnel
+
+// Client attributes
+
+// Server attributes
+
+// Attribute ids for cluster: 11073 Protocol Tunnel
+
+// Client attributes
+
+// Server attributes
+#define ZCL_DEVICE_ID_LIST_ATTRIBUTE_ID (0x0000)
+#define ZCL_MANAGER_TARGET_ATTRIBUTE_ID (0x0001)
+#define ZCL_MANAGER_ENDPOINT_ATTRIBUTE_ID (0x0002)
+#define ZCL_CONNECTED_ATTRIBUTE_ID (0x0003)
+#define ZCL_PREEMPTIBLE_ATTRIBUTE_ID (0x0004)
+#define ZCL_IDLE_TIMEOUT_ATTRIBUTE_ID (0x0005)
+
+// Attribute ids for cluster: ISO 7816 Protocol Tunnel
+
+// Client attributes
+
+// Server attributes
+#define ZCL_ISO7816_PROTOCOL_TUNNEL_STATUS_ATTRIBUTE_ID (0x0000)
+
+// Attribute ids for cluster: Price
+
+// Client attributes
+#define ZCL_PRICE_INCREASE_RANDOMIZE_MINUTES_ATTRIBUTE_ID (0x0000)
+#define ZCL_PRICE_DECREASE_RANDOMIZE_MINUTES_ATTRIBUTE_ID (0x0001)
+#define ZCL_COMMODITY_TYPE_CLIENT_ATTRIBUTE_ID (0x0002)
+
+// Server attributes
+#define ZCL_TIER1_PRICE_LABEL_ATTRIBUTE_ID (0x0000)
+#define ZCL_TIER2_PRICE_LABEL_ATTRIBUTE_ID (0x0001)
+#define ZCL_TIER3_PRICE_LABEL_ATTRIBUTE_ID (0x0002)
+#define ZCL_TIER4_PRICE_LABEL_ATTRIBUTE_ID (0x0003)
+#define ZCL_TIER5_PRICE_LABEL_ATTRIBUTE_ID (0x0004)
+#define ZCL_TIER6_PRICE_LABEL_ATTRIBUTE_ID (0x0005)
+#define ZCL_TIER7_PRICE_LABEL_ATTRIBUTE_ID (0x0006)
+#define ZCL_TIER8_PRICE_LABEL_ATTRIBUTE_ID (0x0007)
+#define ZCL_TIER9_PRICE_LABEL_ATTRIBUTE_ID (0x0008)
+#define ZCL_TIER10_PRICE_LABEL_ATTRIBUTE_ID (0x0009)
+#define ZCL_TIER11_PRICE_LABEL_ATTRIBUTE_ID (0x000A)
+#define ZCL_TIER12_PRICE_LABEL_ATTRIBUTE_ID (0x000B)
+#define ZCL_TIER13_PRICE_LABEL_ATTRIBUTE_ID (0x000C)
+#define ZCL_TIER14_PRICE_LABEL_ATTRIBUTE_ID (0x000D)
+#define ZCL_TIER15_PRICE_LABEL_ATTRIBUTE_ID (0x000E)
+#define ZCL_TIER16_PRICE_LABEL_ATTRIBUTE_ID (0x000F)
+#define ZCL_TIER17_PRICE_LABEL_ATTRIBUTE_ID (0x0010)
+#define ZCL_TIER18_PRICE_LABEL_ATTRIBUTE_ID (0x0011)
+#define ZCL_TIER19_PRICE_LABEL_ATTRIBUTE_ID (0x0012)
+#define ZCL_TIER20_PRICE_LABEL_ATTRIBUTE_ID (0x0013)
+#define ZCL_TIER21_PRICE_LABEL_ATTRIBUTE_ID (0x0014)
+#define ZCL_TIER22_PRICE_LABEL_ATTRIBUTE_ID (0x0015)
+#define ZCL_TIER23_PRICE_LABEL_ATTRIBUTE_ID (0x0016)
+#define ZCL_TIER24_PRICE_LABEL_ATTRIBUTE_ID (0x0017)
+#define ZCL_TIER25_PRICE_LABEL_ATTRIBUTE_ID (0x0018)
+#define ZCL_TIER26_PRICE_LABEL_ATTRIBUTE_ID (0x0019)
+#define ZCL_TIER27_PRICE_LABEL_ATTRIBUTE_ID (0x001A)
+#define ZCL_TIER28_PRICE_LABEL_ATTRIBUTE_ID (0x001B)
+#define ZCL_TIER29_PRICE_LABEL_ATTRIBUTE_ID (0x001C)
+#define ZCL_TIER30_PRICE_LABEL_ATTRIBUTE_ID (0x001D)
+#define ZCL_TIER31_PRICE_LABEL_ATTRIBUTE_ID (0x001E)
+#define ZCL_TIER32_PRICE_LABEL_ATTRIBUTE_ID (0x001F)
+#define ZCL_TIER33_PRICE_LABEL_ATTRIBUTE_ID (0x0020)
+#define ZCL_TIER34_PRICE_LABEL_ATTRIBUTE_ID (0x0021)
+#define ZCL_TIER35_PRICE_LABEL_ATTRIBUTE_ID (0x0022)
+#define ZCL_TIER36_PRICE_LABEL_ATTRIBUTE_ID (0x0023)
+#define ZCL_TIER37_PRICE_LABEL_ATTRIBUTE_ID (0x0024)
+#define ZCL_TIER38_PRICE_LABEL_ATTRIBUTE_ID (0x0025)
+#define ZCL_TIER39_PRICE_LABEL_ATTRIBUTE_ID (0x0026)
+#define ZCL_TIER40_PRICE_LABEL_ATTRIBUTE_ID (0x0027)
+#define ZCL_TIER41_PRICE_LABEL_ATTRIBUTE_ID (0x0028)
+#define ZCL_TIER42_PRICE_LABEL_ATTRIBUTE_ID (0x0029)
+#define ZCL_TIER43_PRICE_LABEL_ATTRIBUTE_ID (0x002A)
+#define ZCL_TIER44_PRICE_LABEL_ATTRIBUTE_ID (0x002B)
+#define ZCL_TIER45_PRICE_LABEL_ATTRIBUTE_ID (0x002C)
+#define ZCL_TIER46_PRICE_LABEL_ATTRIBUTE_ID (0x002D)
+#define ZCL_TIER47_PRICE_LABEL_ATTRIBUTE_ID (0x002E)
+#define ZCL_TIER48_PRICE_LABEL_ATTRIBUTE_ID (0x002F)
+#define ZCL_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x0100)
+#define ZCL_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x0101)
+#define ZCL_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x0102)
+#define ZCL_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x0103)
+#define ZCL_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x0104)
+#define ZCL_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x0105)
+#define ZCL_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x0106)
+#define ZCL_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x0107)
+#define ZCL_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x0108)
+#define ZCL_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x0109)
+#define ZCL_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x010A)
+#define ZCL_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x010B)
+#define ZCL_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x010C)
+#define ZCL_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x010D)
+#define ZCL_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x010E)
+#define ZCL_BLOCK_THRESHOLD_COUNT_ATTRIBUTE_ID (0x010F)
+#define ZCL_TIER1_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x0110)
+#define ZCL_TIER1_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x0111)
+#define ZCL_TIER1_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x0112)
+#define ZCL_TIER1_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x0113)
+#define ZCL_TIER1_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x0114)
+#define ZCL_TIER1_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x0115)
+#define ZCL_TIER1_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x0116)
+#define ZCL_TIER1_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x0117)
+#define ZCL_TIER1_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x0118)
+#define ZCL_TIER1_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x0119)
+#define ZCL_TIER1_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x011A)
+#define ZCL_TIER1_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x011B)
+#define ZCL_TIER1_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x011C)
+#define ZCL_TIER1_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x011D)
+#define ZCL_TIER1_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x011E)
+#define ZCL_TIER1_BLOCK_THRESHOLD_COUNT_ATTRIBUTE_ID (0x011F)
+#define ZCL_TIER2_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x0120)
+#define ZCL_TIER2_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x0121)
+#define ZCL_TIER2_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x0122)
+#define ZCL_TIER2_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x0123)
+#define ZCL_TIER2_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x0124)
+#define ZCL_TIER2_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x0125)
+#define ZCL_TIER2_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x0126)
+#define ZCL_TIER2_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x0127)
+#define ZCL_TIER2_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x0128)
+#define ZCL_TIER2_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x0129)
+#define ZCL_TIER2_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x012A)
+#define ZCL_TIER2_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x012B)
+#define ZCL_TIER2_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x012C)
+#define ZCL_TIER2_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x012D)
+#define ZCL_TIER2_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x012E)
+#define ZCL_TIER2_BLOCK_THRESHOLD_COUNT_ATTRIBUTE_ID (0x012F)
+#define ZCL_TIER3_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x0130)
+#define ZCL_TIER3_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x0131)
+#define ZCL_TIER3_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x0132)
+#define ZCL_TIER3_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x0133)
+#define ZCL_TIER3_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x0134)
+#define ZCL_TIER3_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x0135)
+#define ZCL_TIER3_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x0136)
+#define ZCL_TIER3_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x0137)
+#define ZCL_TIER3_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x0138)
+#define ZCL_TIER3_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x0139)
+#define ZCL_TIER3_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x013A)
+#define ZCL_TIER3_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x013B)
+#define ZCL_TIER3_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x013C)
+#define ZCL_TIER3_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x013D)
+#define ZCL_TIER3_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x013E)
+#define ZCL_TIER3_BLOCK_THRESHOLD_COUNT_ATTRIBUTE_ID (0x013F)
+#define ZCL_TIER4_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x0140)
+#define ZCL_TIER4_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x0141)
+#define ZCL_TIER4_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x0142)
+#define ZCL_TIER4_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x0143)
+#define ZCL_TIER4_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x0144)
+#define ZCL_TIER4_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x0145)
+#define ZCL_TIER4_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x0146)
+#define ZCL_TIER4_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x0147)
+#define ZCL_TIER4_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x0148)
+#define ZCL_TIER4_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x0149)
+#define ZCL_TIER4_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x014A)
+#define ZCL_TIER4_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x014B)
+#define ZCL_TIER4_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x014C)
+#define ZCL_TIER4_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x014D)
+#define ZCL_TIER4_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x014E)
+#define ZCL_TIER4_BLOCK_THRESHOLD_COUNT_ATTRIBUTE_ID (0x014F)
+#define ZCL_TIER5_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x0150)
+#define ZCL_TIER5_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x0151)
+#define ZCL_TIER5_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x0152)
+#define ZCL_TIER5_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x0153)
+#define ZCL_TIER5_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x0154)
+#define ZCL_TIER5_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x0155)
+#define ZCL_TIER5_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x0156)
+#define ZCL_TIER5_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x0157)
+#define ZCL_TIER5_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x0158)
+#define ZCL_TIER5_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x0159)
+#define ZCL_TIER5_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x015A)
+#define ZCL_TIER5_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x015B)
+#define ZCL_TIER5_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x015C)
+#define ZCL_TIER5_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x015D)
+#define ZCL_TIER5_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x015E)
+#define ZCL_TIER5_BLOCK_THRESHOLD_COUNT_ATTRIBUTE_ID (0x015F)
+#define ZCL_TIER6_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x0160)
+#define ZCL_TIER6_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x0161)
+#define ZCL_TIER6_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x0162)
+#define ZCL_TIER6_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x0163)
+#define ZCL_TIER6_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x0164)
+#define ZCL_TIER6_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x0165)
+#define ZCL_TIER6_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x0166)
+#define ZCL_TIER6_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x0167)
+#define ZCL_TIER6_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x0168)
+#define ZCL_TIER6_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x0169)
+#define ZCL_TIER6_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x016A)
+#define ZCL_TIER6_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x016B)
+#define ZCL_TIER6_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x016C)
+#define ZCL_TIER6_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x016D)
+#define ZCL_TIER6_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x016E)
+#define ZCL_TIER6_BLOCK_THRESHOLD_COUNT_ATTRIBUTE_ID (0x016F)
+#define ZCL_TIER7_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x0170)
+#define ZCL_TIER7_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x0171)
+#define ZCL_TIER7_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x0172)
+#define ZCL_TIER7_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x0173)
+#define ZCL_TIER7_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x0174)
+#define ZCL_TIER7_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x0175)
+#define ZCL_TIER7_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x0176)
+#define ZCL_TIER7_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x0177)
+#define ZCL_TIER7_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x0178)
+#define ZCL_TIER7_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x0179)
+#define ZCL_TIER7_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x017A)
+#define ZCL_TIER7_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x017B)
+#define ZCL_TIER7_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x017C)
+#define ZCL_TIER7_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x017D)
+#define ZCL_TIER7_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x017E)
+#define ZCL_TIER7_BLOCK_THRESHOLD_COUNT_ATTRIBUTE_ID (0x017F)
+#define ZCL_TIER8_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x0180)
+#define ZCL_TIER8_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x0181)
+#define ZCL_TIER8_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x0182)
+#define ZCL_TIER8_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x0183)
+#define ZCL_TIER8_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x0184)
+#define ZCL_TIER8_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x0185)
+#define ZCL_TIER8_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x0186)
+#define ZCL_TIER8_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x0187)
+#define ZCL_TIER8_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x0188)
+#define ZCL_TIER8_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x0189)
+#define ZCL_TIER8_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x018A)
+#define ZCL_TIER8_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x018B)
+#define ZCL_TIER8_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x018C)
+#define ZCL_TIER8_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x018D)
+#define ZCL_TIER8_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x018E)
+#define ZCL_TIER8_BLOCK_THRESHOLD_COUNT_ATTRIBUTE_ID (0x018F)
+#define ZCL_TIER9_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x0190)
+#define ZCL_TIER9_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x0191)
+#define ZCL_TIER9_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x0192)
+#define ZCL_TIER9_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x0193)
+#define ZCL_TIER9_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x0194)
+#define ZCL_TIER9_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x0195)
+#define ZCL_TIER9_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x0196)
+#define ZCL_TIER9_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x0197)
+#define ZCL_TIER9_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x0198)
+#define ZCL_TIER9_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x0199)
+#define ZCL_TIER9_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x019A)
+#define ZCL_TIER9_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x019B)
+#define ZCL_TIER9_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x019C)
+#define ZCL_TIER9_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x019D)
+#define ZCL_TIER9_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x019E)
+#define ZCL_TIER9_BLOCK_THRESHOLD_COUNT_ATTRIBUTE_ID (0x019F)
+#define ZCL_TIER10_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x01A0)
+#define ZCL_TIER10_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x01A1)
+#define ZCL_TIER10_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x01A2)
+#define ZCL_TIER10_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x01A3)
+#define ZCL_TIER10_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x01A4)
+#define ZCL_TIER10_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x01A5)
+#define ZCL_TIER10_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x01A6)
+#define ZCL_TIER10_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x01A7)
+#define ZCL_TIER10_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x01A8)
+#define ZCL_TIER10_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x01A9)
+#define ZCL_TIER10_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x01AA)
+#define ZCL_TIER10_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x01AB)
+#define ZCL_TIER10_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x01AC)
+#define ZCL_TIER10_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x01AD)
+#define ZCL_TIER10_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x01AE)
+#define ZCL_TIER10_BLOCK_THRESHOLD_COUNT_ATTRIBUTE_ID (0x01AF)
+#define ZCL_TIER11_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x01B0)
+#define ZCL_TIER11_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x01B1)
+#define ZCL_TIER11_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x01B2)
+#define ZCL_TIER11_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x01B3)
+#define ZCL_TIER11_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x01B4)
+#define ZCL_TIER11_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x01B5)
+#define ZCL_TIER11_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x01B6)
+#define ZCL_TIER11_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x01B7)
+#define ZCL_TIER11_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x01B8)
+#define ZCL_TIER11_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x01B9)
+#define ZCL_TIER11_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x01BA)
+#define ZCL_TIER11_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x01BB)
+#define ZCL_TIER11_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x01BC)
+#define ZCL_TIER11_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x01BD)
+#define ZCL_TIER11_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x01BE)
+#define ZCL_TIER11_BLOCK_THRESHOLD_COUNT_ATTRIBUTE_ID (0x01BF)
+#define ZCL_TIER12_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x01C0)
+#define ZCL_TIER12_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x01C1)
+#define ZCL_TIER12_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x01C2)
+#define ZCL_TIER12_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x01C3)
+#define ZCL_TIER12_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x01C4)
+#define ZCL_TIER12_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x01C5)
+#define ZCL_TIER12_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x01C6)
+#define ZCL_TIER12_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x01C7)
+#define ZCL_TIER12_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x01C8)
+#define ZCL_TIER12_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x01C9)
+#define ZCL_TIER12_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x01CA)
+#define ZCL_TIER12_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x01CB)
+#define ZCL_TIER12_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x01CC)
+#define ZCL_TIER12_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x01CD)
+#define ZCL_TIER12_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x01CE)
+#define ZCL_TIER12_BLOCK_THRESHOLD_COUNT_ATTRIBUTE_ID (0x01CF)
+#define ZCL_TIER13_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x01D0)
+#define ZCL_TIER13_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x01D1)
+#define ZCL_TIER13_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x01D2)
+#define ZCL_TIER13_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x01D3)
+#define ZCL_TIER13_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x01D4)
+#define ZCL_TIER13_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x01D5)
+#define ZCL_TIER13_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x01D6)
+#define ZCL_TIER13_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x01D7)
+#define ZCL_TIER13_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x01D8)
+#define ZCL_TIER13_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x01D9)
+#define ZCL_TIER13_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x01DA)
+#define ZCL_TIER13_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x01DB)
+#define ZCL_TIER13_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x01DC)
+#define ZCL_TIER13_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x01DD)
+#define ZCL_TIER13_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x01DE)
+#define ZCL_TIER13_BLOCK_THRESHOLD_COUNT_ATTRIBUTE_ID (0x01DF)
+#define ZCL_TIER14_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x01E0)
+#define ZCL_TIER14_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x01E1)
+#define ZCL_TIER14_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x01E2)
+#define ZCL_TIER14_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x01E3)
+#define ZCL_TIER14_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x01E4)
+#define ZCL_TIER14_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x01E5)
+#define ZCL_TIER14_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x01E6)
+#define ZCL_TIER14_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x01E7)
+#define ZCL_TIER14_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x01E8)
+#define ZCL_TIER14_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x01E9)
+#define ZCL_TIER14_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x01EA)
+#define ZCL_TIER14_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x01EB)
+#define ZCL_TIER14_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x01EC)
+#define ZCL_TIER14_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x01ED)
+#define ZCL_TIER14_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x01EE)
+#define ZCL_TIER14_BLOCK_THRESHOLD_COUNT_ATTRIBUTE_ID (0x01EF)
+#define ZCL_TIER15_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x01F0)
+#define ZCL_TIER15_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x01F1)
+#define ZCL_TIER15_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x01F2)
+#define ZCL_TIER15_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x01F3)
+#define ZCL_TIER15_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x01F4)
+#define ZCL_TIER15_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x01F5)
+#define ZCL_TIER15_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x01F6)
+#define ZCL_TIER15_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x01F7)
+#define ZCL_TIER15_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x01F8)
+#define ZCL_TIER15_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x01F9)
+#define ZCL_TIER15_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x01FA)
+#define ZCL_TIER15_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x01FB)
+#define ZCL_TIER15_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x01FC)
+#define ZCL_TIER15_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x01FD)
+#define ZCL_TIER15_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x01FE)
+#define ZCL_TIER15_BLOCK_THRESHOLD_COUNT_ATTRIBUTE_ID (0x01FF)
+#define ZCL_START_OF_BLOCK_PERIOD_ATTRIBUTE_ID (0x0200)
+#define ZCL_BLOCK_PERIOD_DURATION_MINUTES_ATTRIBUTE_ID (0x0201)
+#define ZCL_THRESHOLD_MULTIPLIER_ATTRIBUTE_ID (0x0202)
+#define ZCL_THRESHOLD_DIVISOR_ATTRIBUTE_ID (0x0203)
+#define ZCL_BLOCK_PERIOD_DURATION_TYPE_ATTRIBUTE_ID (0x0204)
+#define ZCL_COMMODITY_TYPE_SERVER_ATTRIBUTE_ID (0x0300)
+#define ZCL_STANDING_CHARGE_ATTRIBUTE_ID (0x0301)
+#define ZCL_CONVERSION_FACTOR_ATTRIBUTE_ID (0x0302)
+#define ZCL_CONVERSION_FACTOR_TRAILING_DIGIT_ATTRIBUTE_ID (0x0303)
+#define ZCL_CALORIFIC_VALUE_ATTRIBUTE_ID (0x0304)
+#define ZCL_CALORIFIC_VALUE_UNIT_ATTRIBUTE_ID (0x0305)
+#define ZCL_CALORIFIC_VALUE_TRAILING_DIGIT_ATTRIBUTE_ID (0x0306)
+#define ZCL_NO_TIER_BLOCK1_PRICE_ATTRIBUTE_ID (0x0400)
+#define ZCL_NO_TIER_BLOCK2_PRICE_ATTRIBUTE_ID (0x0401)
+#define ZCL_NO_TIER_BLOCK3_PRICE_ATTRIBUTE_ID (0x0402)
+#define ZCL_NO_TIER_BLOCK4_PRICE_ATTRIBUTE_ID (0x0403)
+#define ZCL_NO_TIER_BLOCK5_PRICE_ATTRIBUTE_ID (0x0404)
+#define ZCL_NO_TIER_BLOCK6_PRICE_ATTRIBUTE_ID (0x0405)
+#define ZCL_NO_TIER_BLOCK7_PRICE_ATTRIBUTE_ID (0x0406)
+#define ZCL_NO_TIER_BLOCK8_PRICE_ATTRIBUTE_ID (0x0407)
+#define ZCL_NO_TIER_BLOCK9_PRICE_ATTRIBUTE_ID (0x0408)
+#define ZCL_NO_TIER_BLOCK10_PRICE_ATTRIBUTE_ID (0x0409)
+#define ZCL_NO_TIER_BLOCK11_PRICE_ATTRIBUTE_ID (0x040A)
+#define ZCL_NO_TIER_BLOCK12_PRICE_ATTRIBUTE_ID (0x040B)
+#define ZCL_NO_TIER_BLOCK13_PRICE_ATTRIBUTE_ID (0x040C)
+#define ZCL_NO_TIER_BLOCK14_PRICE_ATTRIBUTE_ID (0x040D)
+#define ZCL_NO_TIER_BLOCK15_PRICE_ATTRIBUTE_ID (0x040E)
+#define ZCL_NO_TIER_BLOCK16_PRICE_ATTRIBUTE_ID (0x040F)
+#define ZCL_TIER1_BLOCK1_PRICE_ATTRIBUTE_ID (0x0410)
+#define ZCL_TIER1_BLOCK2_PRICE_ATTRIBUTE_ID (0x0411)
+#define ZCL_TIER1_BLOCK3_PRICE_ATTRIBUTE_ID (0x0412)
+#define ZCL_TIER1_BLOCK4_PRICE_ATTRIBUTE_ID (0x0413)
+#define ZCL_TIER1_BLOCK5_PRICE_ATTRIBUTE_ID (0x0414)
+#define ZCL_TIER1_BLOCK6_PRICE_ATTRIBUTE_ID (0x0415)
+#define ZCL_TIER1_BLOCK7_PRICE_ATTRIBUTE_ID (0x0416)
+#define ZCL_TIER1_BLOCK8_PRICE_ATTRIBUTE_ID (0x0417)
+#define ZCL_TIER1_BLOCK9_PRICE_ATTRIBUTE_ID (0x0418)
+#define ZCL_TIER1_BLOCK10_PRICE_ATTRIBUTE_ID (0x0419)
+#define ZCL_TIER1_BLOCK11_PRICE_ATTRIBUTE_ID (0x041A)
+#define ZCL_TIER1_BLOCK12_PRICE_ATTRIBUTE_ID (0x041B)
+#define ZCL_TIER1_BLOCK13_PRICE_ATTRIBUTE_ID (0x041C)
+#define ZCL_TIER1_BLOCK14_PRICE_ATTRIBUTE_ID (0x041D)
+#define ZCL_TIER1_BLOCK15_PRICE_ATTRIBUTE_ID (0x041E)
+#define ZCL_TIER1_BLOCK16_PRICE_ATTRIBUTE_ID (0x041F)
+#define ZCL_TIER2_BLOCK1_PRICE_ATTRIBUTE_ID (0x0420)
+#define ZCL_TIER2_BLOCK2_PRICE_ATTRIBUTE_ID (0x0421)
+#define ZCL_TIER2_BLOCK3_PRICE_ATTRIBUTE_ID (0x0422)
+#define ZCL_TIER2_BLOCK4_PRICE_ATTRIBUTE_ID (0x0423)
+#define ZCL_TIER2_BLOCK5_PRICE_ATTRIBUTE_ID (0x0424)
+#define ZCL_TIER2_BLOCK6_PRICE_ATTRIBUTE_ID (0x0425)
+#define ZCL_TIER2_BLOCK7_PRICE_ATTRIBUTE_ID (0x0426)
+#define ZCL_TIER2_BLOCK8_PRICE_ATTRIBUTE_ID (0x0427)
+#define ZCL_TIER2_BLOCK9_PRICE_ATTRIBUTE_ID (0x0428)
+#define ZCL_TIER2_BLOCK10_PRICE_ATTRIBUTE_ID (0x0429)
+#define ZCL_TIER2_BLOCK11_PRICE_ATTRIBUTE_ID (0x042A)
+#define ZCL_TIER2_BLOCK12_PRICE_ATTRIBUTE_ID (0x042B)
+#define ZCL_TIER2_BLOCK13_PRICE_ATTRIBUTE_ID (0x042C)
+#define ZCL_TIER2_BLOCK14_PRICE_ATTRIBUTE_ID (0x042D)
+#define ZCL_TIER2_BLOCK15_PRICE_ATTRIBUTE_ID (0x042E)
+#define ZCL_TIER2_BLOCK16_PRICE_ATTRIBUTE_ID (0x042F)
+#define ZCL_TIER3_BLOCK1_PRICE_ATTRIBUTE_ID (0x0430)
+#define ZCL_TIER3_BLOCK2_PRICE_ATTRIBUTE_ID (0x0431)
+#define ZCL_TIER3_BLOCK3_PRICE_ATTRIBUTE_ID (0x0432)
+#define ZCL_TIER3_BLOCK4_PRICE_ATTRIBUTE_ID (0x0433)
+#define ZCL_TIER3_BLOCK5_PRICE_ATTRIBUTE_ID (0x0434)
+#define ZCL_TIER3_BLOCK6_PRICE_ATTRIBUTE_ID (0x0435)
+#define ZCL_TIER3_BLOCK7_PRICE_ATTRIBUTE_ID (0x0436)
+#define ZCL_TIER3_BLOCK8_PRICE_ATTRIBUTE_ID (0x0437)
+#define ZCL_TIER3_BLOCK9_PRICE_ATTRIBUTE_ID (0x0438)
+#define ZCL_TIER3_BLOCK10_PRICE_ATTRIBUTE_ID (0x0439)
+#define ZCL_TIER3_BLOCK11_PRICE_ATTRIBUTE_ID (0x043A)
+#define ZCL_TIER3_BLOCK12_PRICE_ATTRIBUTE_ID (0x043B)
+#define ZCL_TIER3_BLOCK13_PRICE_ATTRIBUTE_ID (0x043C)
+#define ZCL_TIER3_BLOCK14_PRICE_ATTRIBUTE_ID (0x043D)
+#define ZCL_TIER3_BLOCK15_PRICE_ATTRIBUTE_ID (0x043E)
+#define ZCL_TIER3_BLOCK16_PRICE_ATTRIBUTE_ID (0x043F)
+#define ZCL_TIER4_BLOCK1_PRICE_ATTRIBUTE_ID (0x0440)
+#define ZCL_TIER4_BLOCK2_PRICE_ATTRIBUTE_ID (0x0441)
+#define ZCL_TIER4_BLOCK3_PRICE_ATTRIBUTE_ID (0x0442)
+#define ZCL_TIER4_BLOCK4_PRICE_ATTRIBUTE_ID (0x0443)
+#define ZCL_TIER4_BLOCK5_PRICE_ATTRIBUTE_ID (0x0444)
+#define ZCL_TIER4_BLOCK6_PRICE_ATTRIBUTE_ID (0x0445)
+#define ZCL_TIER4_BLOCK7_PRICE_ATTRIBUTE_ID (0x0446)
+#define ZCL_TIER4_BLOCK8_PRICE_ATTRIBUTE_ID (0x0447)
+#define ZCL_TIER4_BLOCK9_PRICE_ATTRIBUTE_ID (0x0448)
+#define ZCL_TIER4_BLOCK10_PRICE_ATTRIBUTE_ID (0x0449)
+#define ZCL_TIER4_BLOCK11_PRICE_ATTRIBUTE_ID (0x044A)
+#define ZCL_TIER4_BLOCK12_PRICE_ATTRIBUTE_ID (0x044B)
+#define ZCL_TIER4_BLOCK13_PRICE_ATTRIBUTE_ID (0x044C)
+#define ZCL_TIER4_BLOCK14_PRICE_ATTRIBUTE_ID (0x044D)
+#define ZCL_TIER4_BLOCK15_PRICE_ATTRIBUTE_ID (0x044E)
+#define ZCL_TIER4_BLOCK16_PRICE_ATTRIBUTE_ID (0x044F)
+#define ZCL_TIER5_BLOCK1_PRICE_ATTRIBUTE_ID (0x0450)
+#define ZCL_TIER5_BLOCK2_PRICE_ATTRIBUTE_ID (0x0451)
+#define ZCL_TIER5_BLOCK3_PRICE_ATTRIBUTE_ID (0x0452)
+#define ZCL_TIER5_BLOCK4_PRICE_ATTRIBUTE_ID (0x0453)
+#define ZCL_TIER5_BLOCK5_PRICE_ATTRIBUTE_ID (0x0454)
+#define ZCL_TIER5_BLOCK6_PRICE_ATTRIBUTE_ID (0x0455)
+#define ZCL_TIER5_BLOCK7_PRICE_ATTRIBUTE_ID (0x0456)
+#define ZCL_TIER5_BLOCK8_PRICE_ATTRIBUTE_ID (0x0457)
+#define ZCL_TIER5_BLOCK9_PRICE_ATTRIBUTE_ID (0x0458)
+#define ZCL_TIER5_BLOCK10_PRICE_ATTRIBUTE_ID (0x0459)
+#define ZCL_TIER5_BLOCK11_PRICE_ATTRIBUTE_ID (0x045A)
+#define ZCL_TIER5_BLOCK12_PRICE_ATTRIBUTE_ID (0x045B)
+#define ZCL_TIER5_BLOCK13_PRICE_ATTRIBUTE_ID (0x045C)
+#define ZCL_TIER5_BLOCK14_PRICE_ATTRIBUTE_ID (0x045D)
+#define ZCL_TIER5_BLOCK15_PRICE_ATTRIBUTE_ID (0x045E)
+#define ZCL_TIER5_BLOCK16_PRICE_ATTRIBUTE_ID (0x045F)
+#define ZCL_TIER6_BLOCK1_PRICE_ATTRIBUTE_ID (0x0460)
+#define ZCL_TIER6_BLOCK2_PRICE_ATTRIBUTE_ID (0x0461)
+#define ZCL_TIER6_BLOCK3_PRICE_ATTRIBUTE_ID (0x0462)
+#define ZCL_TIER6_BLOCK4_PRICE_ATTRIBUTE_ID (0x0463)
+#define ZCL_TIER6_BLOCK5_PRICE_ATTRIBUTE_ID (0x0464)
+#define ZCL_TIER6_BLOCK6_PRICE_ATTRIBUTE_ID (0x0465)
+#define ZCL_TIER6_BLOCK7_PRICE_ATTRIBUTE_ID (0x0466)
+#define ZCL_TIER6_BLOCK8_PRICE_ATTRIBUTE_ID (0x0467)
+#define ZCL_TIER6_BLOCK9_PRICE_ATTRIBUTE_ID (0x0468)
+#define ZCL_TIER6_BLOCK10_PRICE_ATTRIBUTE_ID (0x0469)
+#define ZCL_TIER6_BLOCK11_PRICE_ATTRIBUTE_ID (0x046A)
+#define ZCL_TIER6_BLOCK12_PRICE_ATTRIBUTE_ID (0x046B)
+#define ZCL_TIER6_BLOCK13_PRICE_ATTRIBUTE_ID (0x046C)
+#define ZCL_TIER6_BLOCK14_PRICE_ATTRIBUTE_ID (0x046D)
+#define ZCL_TIER6_BLOCK15_PRICE_ATTRIBUTE_ID (0x046E)
+#define ZCL_TIER6_BLOCK16_PRICE_ATTRIBUTE_ID (0x046F)
+#define ZCL_TIER7_BLOCK1_PRICE_ATTRIBUTE_ID (0x0470)
+#define ZCL_TIER7_BLOCK2_PRICE_ATTRIBUTE_ID (0x0471)
+#define ZCL_TIER7_BLOCK3_PRICE_ATTRIBUTE_ID (0x0472)
+#define ZCL_TIER7_BLOCK4_PRICE_ATTRIBUTE_ID (0x0473)
+#define ZCL_TIER7_BLOCK5_PRICE_ATTRIBUTE_ID (0x0474)
+#define ZCL_TIER7_BLOCK6_PRICE_ATTRIBUTE_ID (0x0475)
+#define ZCL_TIER7_BLOCK7_PRICE_ATTRIBUTE_ID (0x0476)
+#define ZCL_TIER7_BLOCK8_PRICE_ATTRIBUTE_ID (0x0477)
+#define ZCL_TIER7_BLOCK9_PRICE_ATTRIBUTE_ID (0x0478)
+#define ZCL_TIER7_BLOCK10_PRICE_ATTRIBUTE_ID (0x0479)
+#define ZCL_TIER7_BLOCK11_PRICE_ATTRIBUTE_ID (0x047A)
+#define ZCL_TIER7_BLOCK12_PRICE_ATTRIBUTE_ID (0x047B)
+#define ZCL_TIER7_BLOCK13_PRICE_ATTRIBUTE_ID (0x047C)
+#define ZCL_TIER7_BLOCK14_PRICE_ATTRIBUTE_ID (0x047D)
+#define ZCL_TIER7_BLOCK15_PRICE_ATTRIBUTE_ID (0x047E)
+#define ZCL_TIER7_BLOCK16_PRICE_ATTRIBUTE_ID (0x047F)
+#define ZCL_TIER8_BLOCK1_PRICE_ATTRIBUTE_ID (0x0480)
+#define ZCL_TIER8_BLOCK2_PRICE_ATTRIBUTE_ID (0x0481)
+#define ZCL_TIER8_BLOCK3_PRICE_ATTRIBUTE_ID (0x0482)
+#define ZCL_TIER8_BLOCK4_PRICE_ATTRIBUTE_ID (0x0483)
+#define ZCL_TIER8_BLOCK5_PRICE_ATTRIBUTE_ID (0x0484)
+#define ZCL_TIER8_BLOCK6_PRICE_ATTRIBUTE_ID (0x0485)
+#define ZCL_TIER8_BLOCK7_PRICE_ATTRIBUTE_ID (0x0486)
+#define ZCL_TIER8_BLOCK8_PRICE_ATTRIBUTE_ID (0x0487)
+#define ZCL_TIER8_BLOCK9_PRICE_ATTRIBUTE_ID (0x0488)
+#define ZCL_TIER8_BLOCK10_PRICE_ATTRIBUTE_ID (0x0489)
+#define ZCL_TIER8_BLOCK11_PRICE_ATTRIBUTE_ID (0x048A)
+#define ZCL_TIER8_BLOCK12_PRICE_ATTRIBUTE_ID (0x048B)
+#define ZCL_TIER8_BLOCK13_PRICE_ATTRIBUTE_ID (0x048C)
+#define ZCL_TIER8_BLOCK14_PRICE_ATTRIBUTE_ID (0x048D)
+#define ZCL_TIER8_BLOCK15_PRICE_ATTRIBUTE_ID (0x048E)
+#define ZCL_TIER8_BLOCK16_PRICE_ATTRIBUTE_ID (0x048F)
+#define ZCL_TIER9_BLOCK1_PRICE_ATTRIBUTE_ID (0x0490)
+#define ZCL_TIER9_BLOCK2_PRICE_ATTRIBUTE_ID (0x0491)
+#define ZCL_TIER9_BLOCK3_PRICE_ATTRIBUTE_ID (0x0492)
+#define ZCL_TIER9_BLOCK4_PRICE_ATTRIBUTE_ID (0x0493)
+#define ZCL_TIER9_BLOCK5_PRICE_ATTRIBUTE_ID (0x0494)
+#define ZCL_TIER9_BLOCK6_PRICE_ATTRIBUTE_ID (0x0495)
+#define ZCL_TIER9_BLOCK7_PRICE_ATTRIBUTE_ID (0x0496)
+#define ZCL_TIER9_BLOCK8_PRICE_ATTRIBUTE_ID (0x0497)
+#define ZCL_TIER9_BLOCK9_PRICE_ATTRIBUTE_ID (0x0498)
+#define ZCL_TIER9_BLOCK10_PRICE_ATTRIBUTE_ID (0x0499)
+#define ZCL_TIER9_BLOCK11_PRICE_ATTRIBUTE_ID (0x049A)
+#define ZCL_TIER9_BLOCK12_PRICE_ATTRIBUTE_ID (0x049B)
+#define ZCL_TIER9_BLOCK13_PRICE_ATTRIBUTE_ID (0x049C)
+#define ZCL_TIER9_BLOCK14_PRICE_ATTRIBUTE_ID (0x049D)
+#define ZCL_TIER9_BLOCK15_PRICE_ATTRIBUTE_ID (0x049E)
+#define ZCL_TIER9_BLOCK16_PRICE_ATTRIBUTE_ID (0x049F)
+#define ZCL_TIER10_BLOCK1_PRICE_ATTRIBUTE_ID (0x04A0)
+#define ZCL_TIER10_BLOCK2_PRICE_ATTRIBUTE_ID (0x04A1)
+#define ZCL_TIER10_BLOCK3_PRICE_ATTRIBUTE_ID (0x04A2)
+#define ZCL_TIER10_BLOCK4_PRICE_ATTRIBUTE_ID (0x04A3)
+#define ZCL_TIER10_BLOCK5_PRICE_ATTRIBUTE_ID (0x04A4)
+#define ZCL_TIER10_BLOCK6_PRICE_ATTRIBUTE_ID (0x04A5)
+#define ZCL_TIER10_BLOCK7_PRICE_ATTRIBUTE_ID (0x04A6)
+#define ZCL_TIER10_BLOCK8_PRICE_ATTRIBUTE_ID (0x04A7)
+#define ZCL_TIER10_BLOCK9_PRICE_ATTRIBUTE_ID (0x04A8)
+#define ZCL_TIER10_BLOCK10_PRICE_ATTRIBUTE_ID (0x04A9)
+#define ZCL_TIER10_BLOCK11_PRICE_ATTRIBUTE_ID (0x04AA)
+#define ZCL_TIER10_BLOCK12_PRICE_ATTRIBUTE_ID (0x04AB)
+#define ZCL_TIER10_BLOCK13_PRICE_ATTRIBUTE_ID (0x04AC)
+#define ZCL_TIER10_BLOCK14_PRICE_ATTRIBUTE_ID (0x04AD)
+#define ZCL_TIER10_BLOCK15_PRICE_ATTRIBUTE_ID (0x04AE)
+#define ZCL_TIER10_BLOCK16_PRICE_ATTRIBUTE_ID (0x04AF)
+#define ZCL_TIER11_BLOCK1_PRICE_ATTRIBUTE_ID (0x04B0)
+#define ZCL_TIER11_BLOCK2_PRICE_ATTRIBUTE_ID (0x04B1)
+#define ZCL_TIER11_BLOCK3_PRICE_ATTRIBUTE_ID (0x04B2)
+#define ZCL_TIER11_BLOCK4_PRICE_ATTRIBUTE_ID (0x04B3)
+#define ZCL_TIER11_BLOCK5_PRICE_ATTRIBUTE_ID (0x04B4)
+#define ZCL_TIER11_BLOCK6_PRICE_ATTRIBUTE_ID (0x04B5)
+#define ZCL_TIER11_BLOCK7_PRICE_ATTRIBUTE_ID (0x04B6)
+#define ZCL_TIER11_BLOCK8_PRICE_ATTRIBUTE_ID (0x04B7)
+#define ZCL_TIER11_BLOCK9_PRICE_ATTRIBUTE_ID (0x04B8)
+#define ZCL_TIER11_BLOCK10_PRICE_ATTRIBUTE_ID (0x04B9)
+#define ZCL_TIER11_BLOCK11_PRICE_ATTRIBUTE_ID (0x04BA)
+#define ZCL_TIER11_BLOCK12_PRICE_ATTRIBUTE_ID (0x04BB)
+#define ZCL_TIER11_BLOCK13_PRICE_ATTRIBUTE_ID (0x04BC)
+#define ZCL_TIER11_BLOCK14_PRICE_ATTRIBUTE_ID (0x04BD)
+#define ZCL_TIER11_BLOCK15_PRICE_ATTRIBUTE_ID (0x04BE)
+#define ZCL_TIER11_BLOCK16_PRICE_ATTRIBUTE_ID (0x04BF)
+#define ZCL_TIER12_BLOCK1_PRICE_ATTRIBUTE_ID (0x04C0)
+#define ZCL_TIER12_BLOCK2_PRICE_ATTRIBUTE_ID (0x04C1)
+#define ZCL_TIER12_BLOCK3_PRICE_ATTRIBUTE_ID (0x04C2)
+#define ZCL_TIER12_BLOCK4_PRICE_ATTRIBUTE_ID (0x04C3)
+#define ZCL_TIER12_BLOCK5_PRICE_ATTRIBUTE_ID (0x04C4)
+#define ZCL_TIER12_BLOCK6_PRICE_ATTRIBUTE_ID (0x04C5)
+#define ZCL_TIER12_BLOCK7_PRICE_ATTRIBUTE_ID (0x04C6)
+#define ZCL_TIER12_BLOCK8_PRICE_ATTRIBUTE_ID (0x04C7)
+#define ZCL_TIER12_BLOCK9_PRICE_ATTRIBUTE_ID (0x04C8)
+#define ZCL_TIER12_BLOCK10_PRICE_ATTRIBUTE_ID (0x04C9)
+#define ZCL_TIER12_BLOCK11_PRICE_ATTRIBUTE_ID (0x04CA)
+#define ZCL_TIER12_BLOCK12_PRICE_ATTRIBUTE_ID (0x04CB)
+#define ZCL_TIER12_BLOCK13_PRICE_ATTRIBUTE_ID (0x04CC)
+#define ZCL_TIER12_BLOCK14_PRICE_ATTRIBUTE_ID (0x04CD)
+#define ZCL_TIER12_BLOCK15_PRICE_ATTRIBUTE_ID (0x04CE)
+#define ZCL_TIER12_BLOCK16_PRICE_ATTRIBUTE_ID (0x04CF)
+#define ZCL_TIER13_BLOCK1_PRICE_ATTRIBUTE_ID (0x04D0)
+#define ZCL_TIER13_BLOCK2_PRICE_ATTRIBUTE_ID (0x04D1)
+#define ZCL_TIER13_BLOCK3_PRICE_ATTRIBUTE_ID (0x04D2)
+#define ZCL_TIER13_BLOCK4_PRICE_ATTRIBUTE_ID (0x04D3)
+#define ZCL_TIER13_BLOCK5_PRICE_ATTRIBUTE_ID (0x04D4)
+#define ZCL_TIER13_BLOCK6_PRICE_ATTRIBUTE_ID (0x04D5)
+#define ZCL_TIER13_BLOCK7_PRICE_ATTRIBUTE_ID (0x04D6)
+#define ZCL_TIER13_BLOCK8_PRICE_ATTRIBUTE_ID (0x04D7)
+#define ZCL_TIER13_BLOCK9_PRICE_ATTRIBUTE_ID (0x04D8)
+#define ZCL_TIER13_BLOCK10_PRICE_ATTRIBUTE_ID (0x04D9)
+#define ZCL_TIER13_BLOCK11_PRICE_ATTRIBUTE_ID (0x04DA)
+#define ZCL_TIER13_BLOCK12_PRICE_ATTRIBUTE_ID (0x04DB)
+#define ZCL_TIER13_BLOCK13_PRICE_ATTRIBUTE_ID (0x04DC)
+#define ZCL_TIER13_BLOCK14_PRICE_ATTRIBUTE_ID (0x04DD)
+#define ZCL_TIER13_BLOCK15_PRICE_ATTRIBUTE_ID (0x04DE)
+#define ZCL_TIER13_BLOCK16_PRICE_ATTRIBUTE_ID (0x04DF)
+#define ZCL_TIER14_BLOCK1_PRICE_ATTRIBUTE_ID (0x04E0)
+#define ZCL_TIER14_BLOCK2_PRICE_ATTRIBUTE_ID (0x04E1)
+#define ZCL_TIER14_BLOCK3_PRICE_ATTRIBUTE_ID (0x04E2)
+#define ZCL_TIER14_BLOCK4_PRICE_ATTRIBUTE_ID (0x04E3)
+#define ZCL_TIER14_BLOCK5_PRICE_ATTRIBUTE_ID (0x04E4)
+#define ZCL_TIER14_BLOCK6_PRICE_ATTRIBUTE_ID (0x04E5)
+#define ZCL_TIER14_BLOCK7_PRICE_ATTRIBUTE_ID (0x04E6)
+#define ZCL_TIER14_BLOCK8_PRICE_ATTRIBUTE_ID (0x04E7)
+#define ZCL_TIER14_BLOCK9_PRICE_ATTRIBUTE_ID (0x04E8)
+#define ZCL_TIER14_BLOCK10_PRICE_ATTRIBUTE_ID (0x04E9)
+#define ZCL_TIER14_BLOCK11_PRICE_ATTRIBUTE_ID (0x04EA)
+#define ZCL_TIER14_BLOCK12_PRICE_ATTRIBUTE_ID (0x04EB)
+#define ZCL_TIER14_BLOCK13_PRICE_ATTRIBUTE_ID (0x04EC)
+#define ZCL_TIER14_BLOCK14_PRICE_ATTRIBUTE_ID (0x04ED)
+#define ZCL_TIER14_BLOCK15_PRICE_ATTRIBUTE_ID (0x04EE)
+#define ZCL_TIER14_BLOCK16_PRICE_ATTRIBUTE_ID (0x04EF)
+#define ZCL_TIER15_BLOCK1_PRICE_ATTRIBUTE_ID (0x04F0)
+#define ZCL_TIER15_BLOCK2_PRICE_ATTRIBUTE_ID (0x04F1)
+#define ZCL_TIER15_BLOCK3_PRICE_ATTRIBUTE_ID (0x04F2)
+#define ZCL_TIER15_BLOCK4_PRICE_ATTRIBUTE_ID (0x04F3)
+#define ZCL_TIER15_BLOCK5_PRICE_ATTRIBUTE_ID (0x04F4)
+#define ZCL_TIER15_BLOCK6_PRICE_ATTRIBUTE_ID (0x04F5)
+#define ZCL_TIER15_BLOCK7_PRICE_ATTRIBUTE_ID (0x04F6)
+#define ZCL_TIER15_BLOCK8_PRICE_ATTRIBUTE_ID (0x04F7)
+#define ZCL_TIER15_BLOCK9_PRICE_ATTRIBUTE_ID (0x04F8)
+#define ZCL_TIER15_BLOCK10_PRICE_ATTRIBUTE_ID (0x04F9)
+#define ZCL_TIER15_BLOCK11_PRICE_ATTRIBUTE_ID (0x04FA)
+#define ZCL_TIER15_BLOCK12_PRICE_ATTRIBUTE_ID (0x04FB)
+#define ZCL_TIER15_BLOCK13_PRICE_ATTRIBUTE_ID (0x04FC)
+#define ZCL_TIER15_BLOCK14_PRICE_ATTRIBUTE_ID (0x04FD)
+#define ZCL_TIER15_BLOCK15_PRICE_ATTRIBUTE_ID (0x04FE)
+#define ZCL_TIER15_BLOCK16_PRICE_ATTRIBUTE_ID (0x04FF)
+#define ZCL_PRICE_TIER16_ATTRIBUTE_ID (0x050F)
+#define ZCL_PRICE_TIER17_ATTRIBUTE_ID (0x0510)
+#define ZCL_PRICE_TIER18_ATTRIBUTE_ID (0x0511)
+#define ZCL_PRICE_TIER19_ATTRIBUTE_ID (0x0512)
+#define ZCL_PRICE_TIER20_ATTRIBUTE_ID (0x0513)
+#define ZCL_PRICE_TIER21_ATTRIBUTE_ID (0x0514)
+#define ZCL_PRICE_TIER22_ATTRIBUTE_ID (0x0515)
+#define ZCL_PRICE_TIER23_ATTRIBUTE_ID (0x0516)
+#define ZCL_PRICE_TIER24_ATTRIBUTE_ID (0x0517)
+#define ZCL_PRICE_TIER25_ATTRIBUTE_ID (0x0518)
+#define ZCL_PRICE_TIER26_ATTRIBUTE_ID (0x0519)
+#define ZCL_PRICE_TIER27_ATTRIBUTE_ID (0x051A)
+#define ZCL_PRICE_TIER28_ATTRIBUTE_ID (0x051B)
+#define ZCL_PRICE_TIER29_ATTRIBUTE_ID (0x051C)
+#define ZCL_PRICE_TIER30_ATTRIBUTE_ID (0x051D)
+#define ZCL_PRICE_TIER31_ATTRIBUTE_ID (0x051E)
+#define ZCL_PRICE_TIER32_ATTRIBUTE_ID (0x051F)
+#define ZCL_PRICE_TIER33_ATTRIBUTE_ID (0x0520)
+#define ZCL_PRICE_TIER34_ATTRIBUTE_ID (0x0521)
+#define ZCL_PRICE_TIER35_ATTRIBUTE_ID (0x0522)
+#define ZCL_PRICE_TIER36_ATTRIBUTE_ID (0x0523)
+#define ZCL_PRICE_TIER37_ATTRIBUTE_ID (0x0524)
+#define ZCL_PRICE_TIER38_ATTRIBUTE_ID (0x0525)
+#define ZCL_PRICE_TIER39_ATTRIBUTE_ID (0x0526)
+#define ZCL_PRICE_TIER40_ATTRIBUTE_ID (0x0527)
+#define ZCL_PRICE_TIER41_ATTRIBUTE_ID (0x0528)
+#define ZCL_PRICE_TIER42_ATTRIBUTE_ID (0x0529)
+#define ZCL_PRICE_TIER43_ATTRIBUTE_ID (0x052A)
+#define ZCL_PRICE_TIER44_ATTRIBUTE_ID (0x052B)
+#define ZCL_PRICE_TIER45_ATTRIBUTE_ID (0x052C)
+#define ZCL_PRICE_TIER46_ATTRIBUTE_ID (0x052D)
+#define ZCL_PRICE_TIER47_ATTRIBUTE_ID (0x052E)
+#define ZCL_PRICE_TIER48_ATTRIBUTE_ID (0x052F)
+#define ZCL_CPP1_PRICE_ATTRIBUTE_ID (0x05FE)
+#define ZCL_CPP2_PRICE_ATTRIBUTE_ID (0x05FF)
+#define ZCL_TARIFF_LABEL_ATTRIBUTE_ID (0x0610)
+#define ZCL_NUMBER_OF_PRICE_TIERS_IN_USE_ATTRIBUTE_ID (0x0611)
+#define ZCL_NUMBER_OF_BLOCK_THRESHOLDS_IN_USE_ATTRIBUTE_ID (0x0612)
+#define ZCL_TIER_BLOCK_MODE_ATTRIBUTE_ID (0x0613)
+#define ZCL_TARIFF_UNIT_OF_MEASURE_ATTRIBUTE_ID (0x0615)
+#define ZCL_TARIFF_CURRENCY_ATTRIBUTE_ID (0x0616)
+#define ZCL_TARIFF_PRICE_TRAILING_DIGIT_ATTRIBUTE_ID (0x0617)
+#define ZCL_TARIFF_RESOLUTION_PERIOD_ATTRIBUTE_ID (0x0619)
+#define ZCL_TARIFF_CO2_ATTRIBUTE_ID (0x0620)
+#define ZCL_TARIFF_CO2_UNIT_ATTRIBUTE_ID (0x0621)
+#define ZCL_TARIFF_CO2_TRAILING_DIGIT_ATTRIBUTE_ID (0x0622)
+#define ZCL_CURRENT_BILLING_PERIOD_START_ATTRIBUTE_ID (0x0700)
+#define ZCL_CURRENT_BILLING_PERIOD_DURATION_ATTRIBUTE_ID (0x0701)
+#define ZCL_LAST_BILLING_PERIOD_START_ATTRIBUTE_ID (0x0702)
+#define ZCL_LAST_BILLING_PERIOD_DURATION_ATTRIBUTE_ID (0x0703)
+#define ZCL_LAST_BILLING_PERIOD_CONSOLIDATED_BILL_ATTRIBUTE_ID (0x0704)
+#define ZCL_CREDIT_PAYMENT_DUE_DATE_ATTRIBUTE_ID (0x0800)
+#define ZCL_CREDIT_PAYMENT_STATUS_ATTRIBUTE_ID (0x0801)
+#define ZCL_CREDIT_PAYMENT_OVER_DUE_AMOUNT_ATTRIBUTE_ID (0x0802)
+#define ZCL_PAYMENT_DISCOUNT_ATTRIBUTE_ID (0x080A)
+#define ZCL_PAYMENT_DISCOUNT_PERIOD_ATTRIBUTE_ID (0x080B)
+#define ZCL_CREDIT_PAYMENT_1_ATTRIBUTE_ID (0x0810)
+#define ZCL_CREDIT_PAYMENT_DATE_1_ATTRIBUTE_ID (0x0811)
+#define ZCL_CREDIT_PAYMENT_REF_1_ATTRIBUTE_ID (0x0812)
+#define ZCL_CREDIT_PAYMENT_2_ATTRIBUTE_ID (0x0820)
+#define ZCL_CREDIT_PAYMENT_DATE_2_ATTRIBUTE_ID (0x0821)
+#define ZCL_CREDIT_PAYMENT_REF_2_ATTRIBUTE_ID (0x0822)
+#define ZCL_CREDIT_PAYMENT_3_ATTRIBUTE_ID (0x0830)
+#define ZCL_CREDIT_PAYMENT_DATE_3_ATTRIBUTE_ID (0x0831)
+#define ZCL_CREDIT_PAYMENT_REF_3_ATTRIBUTE_ID (0x0832)
+#define ZCL_CREDIT_PAYMENT_4_ATTRIBUTE_ID (0x0840)
+#define ZCL_CREDIT_PAYMENT_DATE_4_ATTRIBUTE_ID (0x0841)
+#define ZCL_CREDIT_PAYMENT_REF_4_ATTRIBUTE_ID (0x0842)
+#define ZCL_CREDIT_PAYMENT_5_ATTRIBUTE_ID (0x0850)
+#define ZCL_CREDIT_PAYMENT_DATE_5_ATTRIBUTE_ID (0x0851)
+#define ZCL_CREDIT_PAYMENT_REF_5_ATTRIBUTE_ID (0x0852)
+#define ZCL_RX_TIER1_PRICE_LABEL_ATTRIBUTE_ID (0x8000)
+#define ZCL_RX_TIER2_PRICE_LABEL_ATTRIBUTE_ID (0x8001)
+#define ZCL_RX_TIER3_PRICE_LABEL_ATTRIBUTE_ID (0x8002)
+#define ZCL_RX_TIER4_PRICE_LABEL_ATTRIBUTE_ID (0x8003)
+#define ZCL_RX_TIER5_PRICE_LABEL_ATTRIBUTE_ID (0x8004)
+#define ZCL_RX_TIER6_PRICE_LABEL_ATTRIBUTE_ID (0x8005)
+#define ZCL_RX_TIER7_PRICE_LABEL_ATTRIBUTE_ID (0x8006)
+#define ZCL_RX_TIER8_PRICE_LABEL_ATTRIBUTE_ID (0x8007)
+#define ZCL_RX_TIER9_PRICE_LABEL_ATTRIBUTE_ID (0x8008)
+#define ZCL_RX_TIER10_PRICE_LABEL_ATTRIBUTE_ID (0x8009)
+#define ZCL_RX_TIER11_PRICE_LABEL_ATTRIBUTE_ID (0x800A)
+#define ZCL_RX_TIER12_PRICE_LABEL_ATTRIBUTE_ID (0x800B)
+#define ZCL_RX_TIER13_PRICE_LABEL_ATTRIBUTE_ID (0x800C)
+#define ZCL_RX_TIER14_PRICE_LABEL_ATTRIBUTE_ID (0x800D)
+#define ZCL_RX_TIER15_PRICE_LABEL_ATTRIBUTE_ID (0x800E)
+#define ZCL_RX_TIER16_PRICE_LABEL_ATTRIBUTE_ID (0x800F)
+#define ZCL_RX_TIER17_PRICE_LABEL_ATTRIBUTE_ID (0x8010)
+#define ZCL_RX_TIER18_PRICE_LABEL_ATTRIBUTE_ID (0x8011)
+#define ZCL_RX_TIER19_PRICE_LABEL_ATTRIBUTE_ID (0x8012)
+#define ZCL_RX_TIER20_PRICE_LABEL_ATTRIBUTE_ID (0x8013)
+#define ZCL_RX_TIER21_PRICE_LABEL_ATTRIBUTE_ID (0x8014)
+#define ZCL_RX_TIER22_PRICE_LABEL_ATTRIBUTE_ID (0x8015)
+#define ZCL_RX_TIER23_PRICE_LABEL_ATTRIBUTE_ID (0x8016)
+#define ZCL_RX_TIER24_PRICE_LABEL_ATTRIBUTE_ID (0x8017)
+#define ZCL_RX_TIER25_PRICE_LABEL_ATTRIBUTE_ID (0x8018)
+#define ZCL_RX_TIER26_PRICE_LABEL_ATTRIBUTE_ID (0x8019)
+#define ZCL_RX_TIER27_PRICE_LABEL_ATTRIBUTE_ID (0x801A)
+#define ZCL_RX_TIER28_PRICE_LABEL_ATTRIBUTE_ID (0x801B)
+#define ZCL_RX_TIER29_PRICE_LABEL_ATTRIBUTE_ID (0x801C)
+#define ZCL_RX_TIER30_PRICE_LABEL_ATTRIBUTE_ID (0x801D)
+#define ZCL_RX_TIER31_PRICE_LABEL_ATTRIBUTE_ID (0x801E)
+#define ZCL_RX_TIER32_PRICE_LABEL_ATTRIBUTE_ID (0x801F)
+#define ZCL_RX_TIER33_PRICE_LABEL_ATTRIBUTE_ID (0x8020)
+#define ZCL_RX_TIER34_PRICE_LABEL_ATTRIBUTE_ID (0x8021)
+#define ZCL_RX_TIER35_PRICE_LABEL_ATTRIBUTE_ID (0x8022)
+#define ZCL_RX_TIER36_PRICE_LABEL_ATTRIBUTE_ID (0x8023)
+#define ZCL_RX_TIER37_PRICE_LABEL_ATTRIBUTE_ID (0x8024)
+#define ZCL_RX_TIER38_PRICE_LABEL_ATTRIBUTE_ID (0x8025)
+#define ZCL_RX_TIER39_PRICE_LABEL_ATTRIBUTE_ID (0x8026)
+#define ZCL_RX_TIER40_PRICE_LABEL_ATTRIBUTE_ID (0x8027)
+#define ZCL_RX_TIER41_PRICE_LABEL_ATTRIBUTE_ID (0x8028)
+#define ZCL_RX_TIER42_PRICE_LABEL_ATTRIBUTE_ID (0x8029)
+#define ZCL_RX_TIER43_PRICE_LABEL_ATTRIBUTE_ID (0x802A)
+#define ZCL_RX_TIER44_PRICE_LABEL_ATTRIBUTE_ID (0x802B)
+#define ZCL_RX_TIER45_PRICE_LABEL_ATTRIBUTE_ID (0x802C)
+#define ZCL_RX_TIER46_PRICE_LABEL_ATTRIBUTE_ID (0x802D)
+#define ZCL_RX_TIER47_PRICE_LABEL_ATTRIBUTE_ID (0x802E)
+#define ZCL_RX_TIER48_PRICE_LABEL_ATTRIBUTE_ID (0x802F)
+#define ZCL_RX_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x8100)
+#define ZCL_RX_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x8101)
+#define ZCL_RX_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x8102)
+#define ZCL_RX_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x8103)
+#define ZCL_RX_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x8104)
+#define ZCL_RX_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x8105)
+#define ZCL_RX_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x8106)
+#define ZCL_RX_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x8107)
+#define ZCL_RX_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x8108)
+#define ZCL_RX_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x8109)
+#define ZCL_RX_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x810A)
+#define ZCL_RX_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x810B)
+#define ZCL_RX_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x810C)
+#define ZCL_RX_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x810D)
+#define ZCL_RX_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x810E)
+#define ZCL_RX_START_OF_BLOCK_PERIOD_ATTRIBUTE_ID (0x8200)
+#define ZCL_RX_BLOCK_PERIOD_DURATION_ATTRIBUTE_ID (0x8201)
+#define ZCL_RX_THRESHOLD_MULTIPLIER_ATTRIBUTE_ID (0x8202)
+#define ZCL_RX_THRESHOLD_DIVISOR_ATTRIBUTE_ID (0x8203)
+#define ZCL_RX_NO_TIER_BLOCK1_PRICE_ATTRIBUTE_ID (0x8400)
+#define ZCL_RX_NO_TIER_BLOCK2_PRICE_ATTRIBUTE_ID (0x8401)
+#define ZCL_RX_NO_TIER_BLOCK3_PRICE_ATTRIBUTE_ID (0x8402)
+#define ZCL_RX_NO_TIER_BLOCK4_PRICE_ATTRIBUTE_ID (0x8403)
+#define ZCL_RX_NO_TIER_BLOCK5_PRICE_ATTRIBUTE_ID (0x8404)
+#define ZCL_RX_NO_TIER_BLOCK6_PRICE_ATTRIBUTE_ID (0x8405)
+#define ZCL_RX_NO_TIER_BLOCK7_PRICE_ATTRIBUTE_ID (0x8406)
+#define ZCL_RX_NO_TIER_BLOCK8_PRICE_ATTRIBUTE_ID (0x8407)
+#define ZCL_RX_NO_TIER_BLOCK9_PRICE_ATTRIBUTE_ID (0x8408)
+#define ZCL_RX_NO_TIER_BLOCK10_PRICE_ATTRIBUTE_ID (0x8409)
+#define ZCL_RX_NO_TIER_BLOCK11_PRICE_ATTRIBUTE_ID (0x840A)
+#define ZCL_RX_NO_TIER_BLOCK12_PRICE_ATTRIBUTE_ID (0x840B)
+#define ZCL_RX_NO_TIER_BLOCK13_PRICE_ATTRIBUTE_ID (0x840C)
+#define ZCL_RX_NO_TIER_BLOCK14_PRICE_ATTRIBUTE_ID (0x840D)
+#define ZCL_RX_NO_TIER_BLOCK15_PRICE_ATTRIBUTE_ID (0x840E)
+#define ZCL_RX_NO_TIER_BLOCK16_PRICE_ATTRIBUTE_ID (0x840F)
+#define ZCL_RX_TIER1_BLOCK1_PRICE_ATTRIBUTE_ID (0x8410)
+#define ZCL_RX_TIER1_BLOCK2_PRICE_ATTRIBUTE_ID (0x8411)
+#define ZCL_RX_TIER1_BLOCK3_PRICE_ATTRIBUTE_ID (0x8412)
+#define ZCL_RX_TIER1_BLOCK4_PRICE_ATTRIBUTE_ID (0x8413)
+#define ZCL_RX_TIER1_BLOCK5_PRICE_ATTRIBUTE_ID (0x8414)
+#define ZCL_RX_TIER1_BLOCK6_PRICE_ATTRIBUTE_ID (0x8415)
+#define ZCL_RX_TIER1_BLOCK7_PRICE_ATTRIBUTE_ID (0x8416)
+#define ZCL_RX_TIER1_BLOCK8_PRICE_ATTRIBUTE_ID (0x8417)
+#define ZCL_RX_TIER1_BLOCK9_PRICE_ATTRIBUTE_ID (0x8418)
+#define ZCL_RX_TIER1_BLOCK10_PRICE_ATTRIBUTE_ID (0x8419)
+#define ZCL_RX_TIER1_BLOCK11_PRICE_ATTRIBUTE_ID (0x841A)
+#define ZCL_RX_TIER1_BLOCK12_PRICE_ATTRIBUTE_ID (0x841B)
+#define ZCL_RX_TIER1_BLOCK13_PRICE_ATTRIBUTE_ID (0x841C)
+#define ZCL_RX_TIER1_BLOCK14_PRICE_ATTRIBUTE_ID (0x841D)
+#define ZCL_RX_TIER1_BLOCK15_PRICE_ATTRIBUTE_ID (0x841E)
+#define ZCL_RX_TIER1_BLOCK16_PRICE_ATTRIBUTE_ID (0x841F)
+#define ZCL_RX_TIER2_BLOCK1_PRICE_ATTRIBUTE_ID (0x8420)
+#define ZCL_RX_TIER2_BLOCK2_PRICE_ATTRIBUTE_ID (0x8421)
+#define ZCL_RX_TIER2_BLOCK3_PRICE_ATTRIBUTE_ID (0x8422)
+#define ZCL_RX_TIER2_BLOCK4_PRICE_ATTRIBUTE_ID (0x8423)
+#define ZCL_RX_TIER2_BLOCK5_PRICE_ATTRIBUTE_ID (0x8424)
+#define ZCL_RX_TIER2_BLOCK6_PRICE_ATTRIBUTE_ID (0x8425)
+#define ZCL_RX_TIER2_BLOCK7_PRICE_ATTRIBUTE_ID (0x8426)
+#define ZCL_RX_TIER2_BLOCK8_PRICE_ATTRIBUTE_ID (0x8427)
+#define ZCL_RX_TIER2_BLOCK9_PRICE_ATTRIBUTE_ID (0x8428)
+#define ZCL_RX_TIER2_BLOCK10_PRICE_ATTRIBUTE_ID (0x8429)
+#define ZCL_RX_TIER2_BLOCK11_PRICE_ATTRIBUTE_ID (0x842A)
+#define ZCL_RX_TIER2_BLOCK12_PRICE_ATTRIBUTE_ID (0x842B)
+#define ZCL_RX_TIER2_BLOCK13_PRICE_ATTRIBUTE_ID (0x842C)
+#define ZCL_RX_TIER2_BLOCK14_PRICE_ATTRIBUTE_ID (0x842D)
+#define ZCL_RX_TIER2_BLOCK15_PRICE_ATTRIBUTE_ID (0x842E)
+#define ZCL_RX_TIER2_BLOCK16_PRICE_ATTRIBUTE_ID (0x842F)
+#define ZCL_RX_TIER3_BLOCK1_PRICE_ATTRIBUTE_ID (0x8430)
+#define ZCL_RX_TIER3_BLOCK2_PRICE_ATTRIBUTE_ID (0x8431)
+#define ZCL_RX_TIER3_BLOCK3_PRICE_ATTRIBUTE_ID (0x8432)
+#define ZCL_RX_TIER3_BLOCK4_PRICE_ATTRIBUTE_ID (0x8433)
+#define ZCL_RX_TIER3_BLOCK5_PRICE_ATTRIBUTE_ID (0x8434)
+#define ZCL_RX_TIER3_BLOCK6_PRICE_ATTRIBUTE_ID (0x8435)
+#define ZCL_RX_TIER3_BLOCK7_PRICE_ATTRIBUTE_ID (0x8436)
+#define ZCL_RX_TIER3_BLOCK8_PRICE_ATTRIBUTE_ID (0x8437)
+#define ZCL_RX_TIER3_BLOCK9_PRICE_ATTRIBUTE_ID (0x8438)
+#define ZCL_RX_TIER3_BLOCK10_PRICE_ATTRIBUTE_ID (0x8439)
+#define ZCL_RX_TIER3_BLOCK11_PRICE_ATTRIBUTE_ID (0x843A)
+#define ZCL_RX_TIER3_BLOCK12_PRICE_ATTRIBUTE_ID (0x843B)
+#define ZCL_RX_TIER3_BLOCK13_PRICE_ATTRIBUTE_ID (0x843C)
+#define ZCL_RX_TIER3_BLOCK14_PRICE_ATTRIBUTE_ID (0x843D)
+#define ZCL_RX_TIER3_BLOCK15_PRICE_ATTRIBUTE_ID (0x843E)
+#define ZCL_RX_TIER3_BLOCK16_PRICE_ATTRIBUTE_ID (0x843F)
+#define ZCL_RX_TIER4_BLOCK1_PRICE_ATTRIBUTE_ID (0x8440)
+#define ZCL_RX_TIER4_BLOCK2_PRICE_ATTRIBUTE_ID (0x8441)
+#define ZCL_RX_TIER4_BLOCK3_PRICE_ATTRIBUTE_ID (0x8442)
+#define ZCL_RX_TIER4_BLOCK4_PRICE_ATTRIBUTE_ID (0x8443)
+#define ZCL_RX_TIER4_BLOCK5_PRICE_ATTRIBUTE_ID (0x8444)
+#define ZCL_RX_TIER4_BLOCK6_PRICE_ATTRIBUTE_ID (0x8445)
+#define ZCL_RX_TIER4_BLOCK7_PRICE_ATTRIBUTE_ID (0x8446)
+#define ZCL_RX_TIER4_BLOCK8_PRICE_ATTRIBUTE_ID (0x8447)
+#define ZCL_RX_TIER4_BLOCK9_PRICE_ATTRIBUTE_ID (0x8448)
+#define ZCL_RX_TIER4_BLOCK10_PRICE_ATTRIBUTE_ID (0x8449)
+#define ZCL_RX_TIER4_BLOCK11_PRICE_ATTRIBUTE_ID (0x844A)
+#define ZCL_RX_TIER4_BLOCK12_PRICE_ATTRIBUTE_ID (0x844B)
+#define ZCL_RX_TIER4_BLOCK13_PRICE_ATTRIBUTE_ID (0x844C)
+#define ZCL_RX_TIER4_BLOCK14_PRICE_ATTRIBUTE_ID (0x844D)
+#define ZCL_RX_TIER4_BLOCK15_PRICE_ATTRIBUTE_ID (0x844E)
+#define ZCL_RX_TIER4_BLOCK16_PRICE_ATTRIBUTE_ID (0x844F)
+#define ZCL_RX_TIER5_BLOCK1_PRICE_ATTRIBUTE_ID (0x8450)
+#define ZCL_RX_TIER5_BLOCK2_PRICE_ATTRIBUTE_ID (0x8451)
+#define ZCL_RX_TIER5_BLOCK3_PRICE_ATTRIBUTE_ID (0x8452)
+#define ZCL_RX_TIER5_BLOCK4_PRICE_ATTRIBUTE_ID (0x8453)
+#define ZCL_RX_TIER5_BLOCK5_PRICE_ATTRIBUTE_ID (0x8454)
+#define ZCL_RX_TIER5_BLOCK6_PRICE_ATTRIBUTE_ID (0x8455)
+#define ZCL_RX_TIER5_BLOCK7_PRICE_ATTRIBUTE_ID (0x8456)
+#define ZCL_RX_TIER5_BLOCK8_PRICE_ATTRIBUTE_ID (0x8457)
+#define ZCL_RX_TIER5_BLOCK9_PRICE_ATTRIBUTE_ID (0x8458)
+#define ZCL_RX_TIER5_BLOCK10_PRICE_ATTRIBUTE_ID (0x8459)
+#define ZCL_RX_TIER5_BLOCK11_PRICE_ATTRIBUTE_ID (0x845A)
+#define ZCL_RX_TIER5_BLOCK12_PRICE_ATTRIBUTE_ID (0x845B)
+#define ZCL_RX_TIER5_BLOCK13_PRICE_ATTRIBUTE_ID (0x845C)
+#define ZCL_RX_TIER5_BLOCK14_PRICE_ATTRIBUTE_ID (0x845D)
+#define ZCL_RX_TIER5_BLOCK15_PRICE_ATTRIBUTE_ID (0x845E)
+#define ZCL_RX_TIER5_BLOCK16_PRICE_ATTRIBUTE_ID (0x845F)
+#define ZCL_RX_TIER6_BLOCK1_PRICE_ATTRIBUTE_ID (0x8460)
+#define ZCL_RX_TIER6_BLOCK2_PRICE_ATTRIBUTE_ID (0x8461)
+#define ZCL_RX_TIER6_BLOCK3_PRICE_ATTRIBUTE_ID (0x8462)
+#define ZCL_RX_TIER6_BLOCK4_PRICE_ATTRIBUTE_ID (0x8463)
+#define ZCL_RX_TIER6_BLOCK5_PRICE_ATTRIBUTE_ID (0x8464)
+#define ZCL_RX_TIER6_BLOCK6_PRICE_ATTRIBUTE_ID (0x8465)
+#define ZCL_RX_TIER6_BLOCK7_PRICE_ATTRIBUTE_ID (0x8466)
+#define ZCL_RX_TIER6_BLOCK8_PRICE_ATTRIBUTE_ID (0x8467)
+#define ZCL_RX_TIER6_BLOCK9_PRICE_ATTRIBUTE_ID (0x8468)
+#define ZCL_RX_TIER6_BLOCK10_PRICE_ATTRIBUTE_ID (0x8469)
+#define ZCL_RX_TIER6_BLOCK11_PRICE_ATTRIBUTE_ID (0x846A)
+#define ZCL_RX_TIER6_BLOCK12_PRICE_ATTRIBUTE_ID (0x846B)
+#define ZCL_RX_TIER6_BLOCK13_PRICE_ATTRIBUTE_ID (0x846C)
+#define ZCL_RX_TIER6_BLOCK14_PRICE_ATTRIBUTE_ID (0x846D)
+#define ZCL_RX_TIER6_BLOCK15_PRICE_ATTRIBUTE_ID (0x846E)
+#define ZCL_RX_TIER6_BLOCK16_PRICE_ATTRIBUTE_ID (0x846F)
+#define ZCL_RX_TIER7_BLOCK1_PRICE_ATTRIBUTE_ID (0x8470)
+#define ZCL_RX_TIER7_BLOCK2_PRICE_ATTRIBUTE_ID (0x8471)
+#define ZCL_RX_TIER7_BLOCK3_PRICE_ATTRIBUTE_ID (0x8472)
+#define ZCL_RX_TIER7_BLOCK4_PRICE_ATTRIBUTE_ID (0x8473)
+#define ZCL_RX_TIER7_BLOCK5_PRICE_ATTRIBUTE_ID (0x8474)
+#define ZCL_RX_TIER7_BLOCK6_PRICE_ATTRIBUTE_ID (0x8475)
+#define ZCL_RX_TIER7_BLOCK7_PRICE_ATTRIBUTE_ID (0x8476)
+#define ZCL_RX_TIER7_BLOCK8_PRICE_ATTRIBUTE_ID (0x8477)
+#define ZCL_RX_TIER7_BLOCK9_PRICE_ATTRIBUTE_ID (0x8478)
+#define ZCL_RX_TIER7_BLOCK10_PRICE_ATTRIBUTE_ID (0x8479)
+#define ZCL_RX_TIER7_BLOCK11_PRICE_ATTRIBUTE_ID (0x847A)
+#define ZCL_RX_TIER7_BLOCK12_PRICE_ATTRIBUTE_ID (0x847B)
+#define ZCL_RX_TIER7_BLOCK13_PRICE_ATTRIBUTE_ID (0x847C)
+#define ZCL_RX_TIER7_BLOCK14_PRICE_ATTRIBUTE_ID (0x847D)
+#define ZCL_RX_TIER7_BLOCK15_PRICE_ATTRIBUTE_ID (0x847E)
+#define ZCL_RX_TIER7_BLOCK16_PRICE_ATTRIBUTE_ID (0x847F)
+#define ZCL_RX_TIER8_BLOCK1_PRICE_ATTRIBUTE_ID (0x8480)
+#define ZCL_RX_TIER8_BLOCK2_PRICE_ATTRIBUTE_ID (0x8481)
+#define ZCL_RX_TIER8_BLOCK3_PRICE_ATTRIBUTE_ID (0x8482)
+#define ZCL_RX_TIER8_BLOCK4_PRICE_ATTRIBUTE_ID (0x8483)
+#define ZCL_RX_TIER8_BLOCK5_PRICE_ATTRIBUTE_ID (0x8484)
+#define ZCL_RX_TIER8_BLOCK6_PRICE_ATTRIBUTE_ID (0x8485)
+#define ZCL_RX_TIER8_BLOCK7_PRICE_ATTRIBUTE_ID (0x8486)
+#define ZCL_RX_TIER8_BLOCK8_PRICE_ATTRIBUTE_ID (0x8487)
+#define ZCL_RX_TIER8_BLOCK9_PRICE_ATTRIBUTE_ID (0x8488)
+#define ZCL_RX_TIER8_BLOCK10_PRICE_ATTRIBUTE_ID (0x8489)
+#define ZCL_RX_TIER8_BLOCK11_PRICE_ATTRIBUTE_ID (0x848A)
+#define ZCL_RX_TIER8_BLOCK12_PRICE_ATTRIBUTE_ID (0x848B)
+#define ZCL_RX_TIER8_BLOCK13_PRICE_ATTRIBUTE_ID (0x848C)
+#define ZCL_RX_TIER8_BLOCK14_PRICE_ATTRIBUTE_ID (0x848D)
+#define ZCL_RX_TIER8_BLOCK15_PRICE_ATTRIBUTE_ID (0x848E)
+#define ZCL_RX_TIER8_BLOCK16_PRICE_ATTRIBUTE_ID (0x848F)
+#define ZCL_RX_TIER9_BLOCK1_PRICE_ATTRIBUTE_ID (0x8490)
+#define ZCL_RX_TIER9_BLOCK2_PRICE_ATTRIBUTE_ID (0x8491)
+#define ZCL_RX_TIER9_BLOCK3_PRICE_ATTRIBUTE_ID (0x8492)
+#define ZCL_RX_TIER9_BLOCK4_PRICE_ATTRIBUTE_ID (0x8493)
+#define ZCL_RX_TIER9_BLOCK5_PRICE_ATTRIBUTE_ID (0x8494)
+#define ZCL_RX_TIER9_BLOCK6_PRICE_ATTRIBUTE_ID (0x8495)
+#define ZCL_RX_TIER9_BLOCK7_PRICE_ATTRIBUTE_ID (0x8496)
+#define ZCL_RX_TIER9_BLOCK8_PRICE_ATTRIBUTE_ID (0x8497)
+#define ZCL_RX_TIER9_BLOCK9_PRICE_ATTRIBUTE_ID (0x8498)
+#define ZCL_RX_TIER9_BLOCK10_PRICE_ATTRIBUTE_ID (0x8499)
+#define ZCL_RX_TIER9_BLOCK11_PRICE_ATTRIBUTE_ID (0x849A)
+#define ZCL_RX_TIER9_BLOCK12_PRICE_ATTRIBUTE_ID (0x849B)
+#define ZCL_RX_TIER9_BLOCK13_PRICE_ATTRIBUTE_ID (0x849C)
+#define ZCL_RX_TIER9_BLOCK14_PRICE_ATTRIBUTE_ID (0x849D)
+#define ZCL_RX_TIER9_BLOCK15_PRICE_ATTRIBUTE_ID (0x849E)
+#define ZCL_RX_TIER9_BLOCK16_PRICE_ATTRIBUTE_ID (0x849F)
+#define ZCL_RX_TIER10_BLOCK1_PRICE_ATTRIBUTE_ID (0x84A0)
+#define ZCL_RX_TIER10_BLOCK2_PRICE_ATTRIBUTE_ID (0x84A1)
+#define ZCL_RX_TIER10_BLOCK3_PRICE_ATTRIBUTE_ID (0x84A2)
+#define ZCL_RX_TIER10_BLOCK4_PRICE_ATTRIBUTE_ID (0x84A3)
+#define ZCL_RX_TIER10_BLOCK5_PRICE_ATTRIBUTE_ID (0x84A4)
+#define ZCL_RX_TIER10_BLOCK6_PRICE_ATTRIBUTE_ID (0x84A5)
+#define ZCL_RX_TIER10_BLOCK7_PRICE_ATTRIBUTE_ID (0x84A6)
+#define ZCL_RX_TIER10_BLOCK8_PRICE_ATTRIBUTE_ID (0x84A7)
+#define ZCL_RX_TIER10_BLOCK9_PRICE_ATTRIBUTE_ID (0x84A8)
+#define ZCL_RX_TIER10_BLOCK10_PRICE_ATTRIBUTE_ID (0x84A9)
+#define ZCL_RX_TIER10_BLOCK11_PRICE_ATTRIBUTE_ID (0x84AA)
+#define ZCL_RX_TIER10_BLOCK12_PRICE_ATTRIBUTE_ID (0x84AB)
+#define ZCL_RX_TIER10_BLOCK13_PRICE_ATTRIBUTE_ID (0x84AC)
+#define ZCL_RX_TIER10_BLOCK14_PRICE_ATTRIBUTE_ID (0x84AD)
+#define ZCL_RX_TIER10_BLOCK15_PRICE_ATTRIBUTE_ID (0x84AE)
+#define ZCL_RX_TIER10_BLOCK16_PRICE_ATTRIBUTE_ID (0x84AF)
+#define ZCL_RX_TIER11_BLOCK1_PRICE_ATTRIBUTE_ID (0x84B0)
+#define ZCL_RX_TIER11_BLOCK2_PRICE_ATTRIBUTE_ID (0x84B1)
+#define ZCL_RX_TIER11_BLOCK3_PRICE_ATTRIBUTE_ID (0x84B2)
+#define ZCL_RX_TIER11_BLOCK4_PRICE_ATTRIBUTE_ID (0x84B3)
+#define ZCL_RX_TIER11_BLOCK5_PRICE_ATTRIBUTE_ID (0x84B4)
+#define ZCL_RX_TIER11_BLOCK6_PRICE_ATTRIBUTE_ID (0x84B5)
+#define ZCL_RX_TIER11_BLOCK7_PRICE_ATTRIBUTE_ID (0x84B6)
+#define ZCL_RX_TIER11_BLOCK8_PRICE_ATTRIBUTE_ID (0x84B7)
+#define ZCL_RX_TIER11_BLOCK9_PRICE_ATTRIBUTE_ID (0x84B8)
+#define ZCL_RX_TIER11_BLOCK10_PRICE_ATTRIBUTE_ID (0x84B9)
+#define ZCL_RX_TIER11_BLOCK11_PRICE_ATTRIBUTE_ID (0x84BA)
+#define ZCL_RX_TIER11_BLOCK12_PRICE_ATTRIBUTE_ID (0x84BB)
+#define ZCL_RX_TIER11_BLOCK13_PRICE_ATTRIBUTE_ID (0x84BC)
+#define ZCL_RX_TIER11_BLOCK14_PRICE_ATTRIBUTE_ID (0x84BD)
+#define ZCL_RX_TIER11_BLOCK15_PRICE_ATTRIBUTE_ID (0x84BE)
+#define ZCL_RX_TIER11_BLOCK16_PRICE_ATTRIBUTE_ID (0x84BF)
+#define ZCL_RX_TIER12_BLOCK1_PRICE_ATTRIBUTE_ID (0x84C0)
+#define ZCL_RX_TIER12_BLOCK2_PRICE_ATTRIBUTE_ID (0x84C1)
+#define ZCL_RX_TIER12_BLOCK3_PRICE_ATTRIBUTE_ID (0x84C2)
+#define ZCL_RX_TIER12_BLOCK4_PRICE_ATTRIBUTE_ID (0x84C3)
+#define ZCL_RX_TIER12_BLOCK5_PRICE_ATTRIBUTE_ID (0x84C4)
+#define ZCL_RX_TIER12_BLOCK6_PRICE_ATTRIBUTE_ID (0x84C5)
+#define ZCL_RX_TIER12_BLOCK7_PRICE_ATTRIBUTE_ID (0x84C6)
+#define ZCL_RX_TIER12_BLOCK8_PRICE_ATTRIBUTE_ID (0x84C7)
+#define ZCL_RX_TIER12_BLOCK9_PRICE_ATTRIBUTE_ID (0x84C8)
+#define ZCL_RX_TIER12_BLOCK10_PRICE_ATTRIBUTE_ID (0x84C9)
+#define ZCL_RX_TIER12_BLOCK11_PRICE_ATTRIBUTE_ID (0x84CA)
+#define ZCL_RX_TIER12_BLOCK12_PRICE_ATTRIBUTE_ID (0x84CB)
+#define ZCL_RX_TIER12_BLOCK13_PRICE_ATTRIBUTE_ID (0x84CC)
+#define ZCL_RX_TIER12_BLOCK14_PRICE_ATTRIBUTE_ID (0x84CD)
+#define ZCL_RX_TIER12_BLOCK15_PRICE_ATTRIBUTE_ID (0x84CE)
+#define ZCL_RX_TIER12_BLOCK16_PRICE_ATTRIBUTE_ID (0x84CF)
+#define ZCL_RX_TIER13_BLOCK1_PRICE_ATTRIBUTE_ID (0x84D0)
+#define ZCL_RX_TIER13_BLOCK2_PRICE_ATTRIBUTE_ID (0x84D1)
+#define ZCL_RX_TIER13_BLOCK3_PRICE_ATTRIBUTE_ID (0x84D2)
+#define ZCL_RX_TIER13_BLOCK4_PRICE_ATTRIBUTE_ID (0x84D3)
+#define ZCL_RX_TIER13_BLOCK5_PRICE_ATTRIBUTE_ID (0x84D4)
+#define ZCL_RX_TIER13_BLOCK6_PRICE_ATTRIBUTE_ID (0x84D5)
+#define ZCL_RX_TIER13_BLOCK7_PRICE_ATTRIBUTE_ID (0x84D6)
+#define ZCL_RX_TIER13_BLOCK8_PRICE_ATTRIBUTE_ID (0x84D7)
+#define ZCL_RX_TIER13_BLOCK9_PRICE_ATTRIBUTE_ID (0x84D8)
+#define ZCL_RX_TIER13_BLOCK10_PRICE_ATTRIBUTE_ID (0x84D9)
+#define ZCL_RX_TIER13_BLOCK11_PRICE_ATTRIBUTE_ID (0x84DA)
+#define ZCL_RX_TIER13_BLOCK12_PRICE_ATTRIBUTE_ID (0x84DB)
+#define ZCL_RX_TIER13_BLOCK13_PRICE_ATTRIBUTE_ID (0x84DC)
+#define ZCL_RX_TIER13_BLOCK14_PRICE_ATTRIBUTE_ID (0x84DD)
+#define ZCL_RX_TIER13_BLOCK15_PRICE_ATTRIBUTE_ID (0x84DE)
+#define ZCL_RX_TIER13_BLOCK16_PRICE_ATTRIBUTE_ID (0x84DF)
+#define ZCL_RX_TIER14_BLOCK1_PRICE_ATTRIBUTE_ID (0x84E0)
+#define ZCL_RX_TIER14_BLOCK2_PRICE_ATTRIBUTE_ID (0x84E1)
+#define ZCL_RX_TIER14_BLOCK3_PRICE_ATTRIBUTE_ID (0x84E2)
+#define ZCL_RX_TIER14_BLOCK4_PRICE_ATTRIBUTE_ID (0x84E3)
+#define ZCL_RX_TIER14_BLOCK5_PRICE_ATTRIBUTE_ID (0x84E4)
+#define ZCL_RX_TIER14_BLOCK6_PRICE_ATTRIBUTE_ID (0x84E5)
+#define ZCL_RX_TIER14_BLOCK7_PRICE_ATTRIBUTE_ID (0x84E6)
+#define ZCL_RX_TIER14_BLOCK8_PRICE_ATTRIBUTE_ID (0x84E7)
+#define ZCL_RX_TIER14_BLOCK9_PRICE_ATTRIBUTE_ID (0x84E8)
+#define ZCL_RX_TIER14_BLOCK10_PRICE_ATTRIBUTE_ID (0x84E9)
+#define ZCL_RX_TIER14_BLOCK11_PRICE_ATTRIBUTE_ID (0x84EA)
+#define ZCL_RX_TIER14_BLOCK12_PRICE_ATTRIBUTE_ID (0x84EB)
+#define ZCL_RX_TIER14_BLOCK13_PRICE_ATTRIBUTE_ID (0x84EC)
+#define ZCL_RX_TIER14_BLOCK14_PRICE_ATTRIBUTE_ID (0x84ED)
+#define ZCL_RX_TIER14_BLOCK15_PRICE_ATTRIBUTE_ID (0x84EE)
+#define ZCL_RX_TIER14_BLOCK16_PRICE_ATTRIBUTE_ID (0x84EF)
+#define ZCL_RX_TIER15_BLOCK1_PRICE_ATTRIBUTE_ID (0x84F0)
+#define ZCL_RX_TIER15_BLOCK2_PRICE_ATTRIBUTE_ID (0x84F1)
+#define ZCL_RX_TIER15_BLOCK3_PRICE_ATTRIBUTE_ID (0x84F2)
+#define ZCL_RX_TIER15_BLOCK4_PRICE_ATTRIBUTE_ID (0x84F3)
+#define ZCL_RX_TIER15_BLOCK5_PRICE_ATTRIBUTE_ID (0x84F4)
+#define ZCL_RX_TIER15_BLOCK6_PRICE_ATTRIBUTE_ID (0x84F5)
+#define ZCL_RX_TIER15_BLOCK7_PRICE_ATTRIBUTE_ID (0x84F6)
+#define ZCL_RX_TIER15_BLOCK8_PRICE_ATTRIBUTE_ID (0x84F7)
+#define ZCL_RX_TIER15_BLOCK9_PRICE_ATTRIBUTE_ID (0x84F8)
+#define ZCL_RX_TIER15_BLOCK10_PRICE_ATTRIBUTE_ID (0x84F9)
+#define ZCL_RX_TIER15_BLOCK11_PRICE_ATTRIBUTE_ID (0x84FA)
+#define ZCL_RX_TIER15_BLOCK12_PRICE_ATTRIBUTE_ID (0x84FB)
+#define ZCL_RX_TIER15_BLOCK13_PRICE_ATTRIBUTE_ID (0x84FC)
+#define ZCL_RX_TIER15_BLOCK14_PRICE_ATTRIBUTE_ID (0x84FD)
+#define ZCL_RX_TIER15_BLOCK15_PRICE_ATTRIBUTE_ID (0x84FE)
+#define ZCL_RX_TIER15_BLOCK16_PRICE_ATTRIBUTE_ID (0x84FF)
+#define ZCL_RX_PRICE_TIER16_ATTRIBUTE_ID (0x850F)
+#define ZCL_RX_PRICE_TIER17_ATTRIBUTE_ID (0x8510)
+#define ZCL_RX_PRICE_TIER18_ATTRIBUTE_ID (0x8511)
+#define ZCL_RX_PRICE_TIER19_ATTRIBUTE_ID (0x8512)
+#define ZCL_RX_PRICE_TIER20_ATTRIBUTE_ID (0x8513)
+#define ZCL_RX_PRICE_TIER21_ATTRIBUTE_ID (0x8514)
+#define ZCL_RX_PRICE_TIER22_ATTRIBUTE_ID (0x8515)
+#define ZCL_RX_PRICE_TIER23_ATTRIBUTE_ID (0x8516)
+#define ZCL_RX_PRICE_TIER24_ATTRIBUTE_ID (0x8517)
+#define ZCL_RX_PRICE_TIER25_ATTRIBUTE_ID (0x8518)
+#define ZCL_RX_PRICE_TIER26_ATTRIBUTE_ID (0x8519)
+#define ZCL_RX_PRICE_TIER27_ATTRIBUTE_ID (0x851A)
+#define ZCL_RX_PRICE_TIER28_ATTRIBUTE_ID (0x851B)
+#define ZCL_RX_PRICE_TIER29_ATTRIBUTE_ID (0x851C)
+#define ZCL_RX_PRICE_TIER30_ATTRIBUTE_ID (0x851D)
+#define ZCL_RX_PRICE_TIER31_ATTRIBUTE_ID (0x851E)
+#define ZCL_RX_PRICE_TIER32_ATTRIBUTE_ID (0x851F)
+#define ZCL_RX_PRICE_TIER33_ATTRIBUTE_ID (0x8520)
+#define ZCL_RX_PRICE_TIER34_ATTRIBUTE_ID (0x8521)
+#define ZCL_RX_PRICE_TIER35_ATTRIBUTE_ID (0x8522)
+#define ZCL_RX_PRICE_TIER36_ATTRIBUTE_ID (0x8523)
+#define ZCL_RX_PRICE_TIER37_ATTRIBUTE_ID (0x8524)
+#define ZCL_RX_PRICE_TIER38_ATTRIBUTE_ID (0x8525)
+#define ZCL_RX_PRICE_TIER39_ATTRIBUTE_ID (0x8526)
+#define ZCL_RX_PRICE_TIER40_ATTRIBUTE_ID (0x8527)
+#define ZCL_RX_PRICE_TIER41_ATTRIBUTE_ID (0x8528)
+#define ZCL_RX_PRICE_TIER42_ATTRIBUTE_ID (0x8529)
+#define ZCL_RX_PRICE_TIER43_ATTRIBUTE_ID (0x852A)
+#define ZCL_RX_PRICE_TIER44_ATTRIBUTE_ID (0x852B)
+#define ZCL_RX_PRICE_TIER45_ATTRIBUTE_ID (0x852C)
+#define ZCL_RX_PRICE_TIER46_ATTRIBUTE_ID (0x852D)
+#define ZCL_RX_PRICE_TIER47_ATTRIBUTE_ID (0x852E)
+#define ZCL_RX_PRICE_TIER48_ATTRIBUTE_ID (0x852F)
+#define ZCL_RX_TARIFF_LABEL_ATTRIBUTE_ID (0x8610)
+#define ZCL_RX_NUMBER_OF_PRICE_TIERS_IN_USE_ATTRIBUTE_ID (0x8611)
+#define ZCL_RX_NUMBER_OF_BLOCK_THRESHOLDS_IN_USE_ATTRIBUTE_ID (0x8612)
+#define ZCL_RX_TIER_BLOCK_MODE_ATTRIBUTE_ID (0x8613)
+#define ZCL_RX_TARIFF_RESOLUTION_PERIOD_ATTRIBUTE_ID (0x8615)
+#define ZCL_RX_CO2_ATTRIBUTE_ID (0x8625)
+#define ZCL_RX_CO2_UNIT_ATTRIBUTE_ID (0x8626)
+#define ZCL_RX_CO2_TRAILING_DIGIT_ATTRIBUTE_ID (0x8627)
+#define ZCL_RX_CURRENT_BILLING_PERIOD_START_ATTRIBUTE_ID (0x8700)
+#define ZCL_RX_CURRENT_BILLING_PERIOD_DURATION_ATTRIBUTE_ID (0x8701)
+#define ZCL_RX_LAST_BILLING_PERIOD_START_ATTRIBUTE_ID (0x8702)
+#define ZCL_RX_LAST_BILLING_PERIOD_DURATION_ATTRIBUTE_ID (0x8703)
+#define ZCL_RX_LAST_BILLING_PERIOD_CONSOLIDATED_BILL_ATTRIBUTE_ID (0x8704)
+
+// Attribute ids for cluster: Demand Response and Load Control
+
+// Client attributes
+#define ZCL_UTILITY_ENROLLMENT_GROUP_ATTRIBUTE_ID (0x0000)
+#define ZCL_START_RANDOMIZATION_MINUTES_ATTRIBUTE_ID (0x0001)
+#define ZCL_DURATION_RANDOMIZATION_MINUTES_ATTRIBUTE_ID (0x0002)
+#define ZCL_DEVICE_CLASS_VALUE_ATTRIBUTE_ID (0x0003)
+
+// Server attributes
+
+// Attribute ids for cluster: Simple Metering
+
+// Client attributes
+#define ZCL_FUNCTIONAL_NOTIFICATION_FLAGS_ATTRIBUTE_ID (0x0000)
+#define ZCL_NOTIFICATION_FLAGS_2_ATTRIBUTE_ID (0x0001)
+#define ZCL_NOTIFICATION_FLAGS_3_ATTRIBUTE_ID (0x0002)
+#define ZCL_NOTIFICATION_FLAGS_4_ATTRIBUTE_ID (0x0003)
+#define ZCL_NOTIFICATION_FLAGS_5_ATTRIBUTE_ID (0x0004)
+#define ZCL_NOTIFICATION_FLAGS_6_ATTRIBUTE_ID (0x0005)
+#define ZCL_NOTIFICATION_FLAGS_7_ATTRIBUTE_ID (0x0006)
+#define ZCL_NOTIFICATION_FLAGS_8_ATTRIBUTE_ID (0x0007)
+
+// Server attributes
+#define ZCL_CURRENT_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0000)
+#define ZCL_CURRENT_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0001)
+#define ZCL_CURRENT_MAX_DEMAND_DELIVERED_ATTRIBUTE_ID (0x0002)
+#define ZCL_CURRENT_MAX_DEMAND_RECEIVED_ATTRIBUTE_ID (0x0003)
+#define ZCL_DFT_SUMMATION_ATTRIBUTE_ID (0x0004)
+#define ZCL_DAILY_FREEZE_TIME_ATTRIBUTE_ID (0x0005)
+#define ZCL_POWER_FACTOR_ATTRIBUTE_ID (0x0006)
+#define ZCL_READING_SNAP_SHOT_TIME_ATTRIBUTE_ID (0x0007)
+#define ZCL_CURRENT_MAX_DEMAND_DELIVERED_TIME_ATTRIBUTE_ID (0x0008)
+#define ZCL_CURRENT_MAX_DEMAND_RECEIVED_TIME_ATTRIBUTE_ID (0x0009)
+#define ZCL_DEFAULT_UPDATE_PERIOD_ATTRIBUTE_ID (0x000A)
+#define ZCL_FAST_POLL_UPDATE_PERIOD_ATTRIBUTE_ID (0x000B)
+#define ZCL_CURRENT_BLOCK_PERIOD_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x000C)
+#define ZCL_DAILY_CONSUMPTION_TARGET_ATTRIBUTE_ID (0x000D)
+#define ZCL_CURRENT_BLOCK_ATTRIBUTE_ID (0x000E)
+#define ZCL_PROFILE_INTERVAL_PERIOD_ATTRIBUTE_ID (0x000F)
+#define ZCL_INTERVAL_READ_REPORTING_PERIOD_ATTRIBUTE_ID (0x0010)
+#define ZCL_PRESET_READING_TIME_ATTRIBUTE_ID (0x0011)
+#define ZCL_VOLUME_PER_REPORT_ATTRIBUTE_ID (0x0012)
+#define ZCL_FLOW_RESTRICTION_ATTRIBUTE_ID (0x0013)
+#define ZCL_SUPPLY_STATUS_ATTRIBUTE_ID (0x0014)
+#define ZCL_CURRENT_INLET_ENERGY_CARRIER_SUMMATION_ATTRIBUTE_ID (0x0015)
+#define ZCL_CURRENT_OUTLET_ENERGY_CARRIER_SUMMATION_ATTRIBUTE_ID (0x0016)
+#define ZCL_INLET_TEMPERATURE_ATTRIBUTE_ID (0x0017)
+#define ZCL_OUTLET_TEMPERATURE_ATTRIBUTE_ID (0x0018)
+#define ZCL_CONTROL_TEMPERATURE_ATTRIBUTE_ID (0x0019)
+#define ZCL_CURRENT_INLET_ENERGY_CARRIER_DEMAND_ATTRIBUTE_ID (0x001A)
+#define ZCL_CURRENT_OUTLET_ENERGY_CARRIER_DEMAND_ATTRIBUTE_ID (0x001B)
+#define ZCL_PREVIOUS_BLOCK_PERIOD_CONSUMIPTION_DELIVERED_ATTRIBUTE_ID (0x001C)
+#define ZCL_CURRENT_BLOCK_PERIOD_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x001D)
+#define ZCL_CURRENT_BLOCK_RECEIVED_ATTRIBUTE_ID (0x001E)
+#define ZCL_DFT_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x001F)
+#define ZCL_ACTIVE_REGISTER_TIER_DELIVERED_ATTRIBUTE_ID (0x0020)
+#define ZCL_ACTIVE_REGISTER_TIER_RECEIVED_ATTRIBUTE_ID (0x0021)
+#define ZCL_LAST_BLOCK_SWITCH_TIME_ATTRIBUTE_ID (0x0022)
+#define ZCL_CURRENT_TIER1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0100)
+#define ZCL_CURRENT_TIER1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0101)
+#define ZCL_CURRENT_TIER2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0102)
+#define ZCL_CURRENT_TIER2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0103)
+#define ZCL_CURRENT_TIER3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0104)
+#define ZCL_CURRENT_TIER3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0105)
+#define ZCL_CURRENT_TIER4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0106)
+#define ZCL_CURRENT_TIER4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0107)
+#define ZCL_CURRENT_TIER5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0108)
+#define ZCL_CURRENT_TIER5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0109)
+#define ZCL_CURRENT_TIER6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x010A)
+#define ZCL_CURRENT_TIER6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x010B)
+#define ZCL_CURRENT_TIER7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x010C)
+#define ZCL_CURRENT_TIER7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x010D)
+#define ZCL_CURRENT_TIER8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x010E)
+#define ZCL_CURRENT_TIER8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x010F)
+#define ZCL_CURRENT_TIER9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0110)
+#define ZCL_CURRENT_TIER9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0111)
+#define ZCL_CURRENT_TIER10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0112)
+#define ZCL_CURRENT_TIER10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0113)
+#define ZCL_CURRENT_TIER11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0114)
+#define ZCL_CURRENT_TIER11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0115)
+#define ZCL_CURRENT_TIER12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0116)
+#define ZCL_CURRENT_TIER12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0117)
+#define ZCL_CURRENT_TIER13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0118)
+#define ZCL_CURRENT_TIER13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0119)
+#define ZCL_CURRENT_TIER14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x011A)
+#define ZCL_CURRENT_TIER14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x011B)
+#define ZCL_CURRENT_TIER15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x011C)
+#define ZCL_CURRENT_TIER15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x011D)
+#define ZCL_CURRENT_TIER16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x011E)
+#define ZCL_CURRENT_TIER16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x011F)
+#define ZCL_CURRENT_TIER17_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0120)
+#define ZCL_CURRENT_TIER17_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0121)
+#define ZCL_CURRENT_TIER18_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0122)
+#define ZCL_CURRENT_TIER18_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0123)
+#define ZCL_CURRENT_TIER19_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0124)
+#define ZCL_CURRENT_TIER19_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0125)
+#define ZCL_CURRENT_TIER20_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0126)
+#define ZCL_CURRENT_TIER20_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0127)
+#define ZCL_CURRENT_TIER21_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0128)
+#define ZCL_CURRENT_TIER21_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0129)
+#define ZCL_CURRENT_TIER22_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x012A)
+#define ZCL_CURRENT_TIER22_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x012B)
+#define ZCL_CURRENT_TIER23_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x012C)
+#define ZCL_CURRENT_TIER23_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x012D)
+#define ZCL_CURRENT_TIER24_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x012E)
+#define ZCL_CURRENT_TIER24_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x012F)
+#define ZCL_CURRENT_TIER25_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0130)
+#define ZCL_CURRENT_TIER25_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0131)
+#define ZCL_CURRENT_TIER26_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0132)
+#define ZCL_CURRENT_TIER26_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0133)
+#define ZCL_CURRENT_TIER27_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0134)
+#define ZCL_CURRENT_TIER27_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0135)
+#define ZCL_CURRENT_TIER28_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0136)
+#define ZCL_CURRENT_TIER28_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0137)
+#define ZCL_CURRENT_TIER29_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0138)
+#define ZCL_CURRENT_TIER29_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0139)
+#define ZCL_CURRENT_TIER30_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x013A)
+#define ZCL_CURRENT_TIER30_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x013B)
+#define ZCL_CURRENT_TIER31_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x013C)
+#define ZCL_CURRENT_TIER31_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x013D)
+#define ZCL_CURRENT_TIER32_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x013E)
+#define ZCL_CURRENT_TIER32_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x013F)
+#define ZCL_CURRENT_TIER33_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0140)
+#define ZCL_CURRENT_TIER33_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0141)
+#define ZCL_CURRENT_TIER34_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0142)
+#define ZCL_CURRENT_TIER34_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0143)
+#define ZCL_CURRENT_TIER35_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0144)
+#define ZCL_CURRENT_TIER35_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0145)
+#define ZCL_CURRENT_TIER36_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0146)
+#define ZCL_CURRENT_TIER36_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0147)
+#define ZCL_CURRENT_TIER37_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0148)
+#define ZCL_CURRENT_TIER37_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0149)
+#define ZCL_CURRENT_TIER38_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x014A)
+#define ZCL_CURRENT_TIER38_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x014B)
+#define ZCL_CURRENT_TIER39_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x014C)
+#define ZCL_CURRENT_TIER39_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x014D)
+#define ZCL_CURRENT_TIER40_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x014E)
+#define ZCL_CURRENT_TIER40_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x014F)
+#define ZCL_CURRENT_TIER41_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0150)
+#define ZCL_CURRENT_TIER41_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0151)
+#define ZCL_CURRENT_TIER42_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0152)
+#define ZCL_CURRENT_TIER42_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0153)
+#define ZCL_CURRENT_TIER43_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0154)
+#define ZCL_CURRENT_TIER43_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0155)
+#define ZCL_CURRENT_TIER44_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0156)
+#define ZCL_CURRENT_TIER44_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0157)
+#define ZCL_CURRENT_TIER45_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0158)
+#define ZCL_CURRENT_TIER45_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0159)
+#define ZCL_CURRENT_TIER46_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x015A)
+#define ZCL_CURRENT_TIER46_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x015B)
+#define ZCL_CURRENT_TIER47_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x015C)
+#define ZCL_CURRENT_TIER47_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x015D)
+#define ZCL_CURRENT_TIER48_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x015E)
+#define ZCL_CURRENT_TIER48_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x015F)
+#define ZCL_CPP1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x01FC)
+#define ZCL_CPP2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x01FE)
+#define ZCL_STATUS_ATTRIBUTE_ID (0x0200)
+#define ZCL_REMAINING_BATTERY_LIFE_ATTRIBUTE_ID (0x0201)
+#define ZCL_HOURS_IN_OPERATION_ATTRIBUTE_ID (0x0202)
+#define ZCL_HOURS_IN_FAULT_ATTRIBUTE_ID (0x0203)
+#define ZCL_EXTENDED_STATUS_ATTRIBUTE_ID (0x0204)
+#define ZCL_REMAINING_BATTERY_LIFE_IN_DAYS_ATTRIBUTE_ID (0x0205)
+#define ZCL_CURRENT_METER_ID_ATTRIBUTE_ID (0x0206)
+#define ZCL_AMBIENT_CONSUMPTION_INDICATOR_ATTRIBUTE_ID (0x0207)
+#define ZCL_UNIT_OF_MEASURE_ATTRIBUTE_ID (0x0300)
+#define ZCL_MULTIPLIER_ATTRIBUTE_ID (0x0301)
+#define ZCL_DIVISOR_ATTRIBUTE_ID (0x0302)
+#define ZCL_SUMMATION_FORMATTING_ATTRIBUTE_ID (0x0303)
+#define ZCL_DEMAND_FORMATTING_ATTRIBUTE_ID (0x0304)
+#define ZCL_HISTORICAL_CONSUMPTION_FORMATTING_ATTRIBUTE_ID (0x0305)
+#define ZCL_METERING_DEVICE_TYPE_ATTRIBUTE_ID (0x0306)
+#define ZCL_SITE_ID_ATTRIBUTE_ID (0x0307)
+#define ZCL_METER_SERIAL_NUMBER_ATTRIBUTE_ID (0x0308)
+#define ZCL_ENERGY_CARRIER_UNIT_OF_MEASURE_ATTRIBUTE_ID (0x0309)
+#define ZCL_ENERGY_CARRIER_SUMMATION_FORMATTING_ATTRIBUTE_ID (0x030A)
+#define ZCL_ENERGY_CARRIER_DEMAND_FORMATTING_ATTRIBUTE_ID (0x030B)
+#define ZCL_TEMPERATURE_UNIT_OF_MEASURE_ATTRIBUTE_ID (0x030C)
+#define ZCL_TEMPERATURE_FORMATTING_ATTRIBUTE_ID (0x030D)
+#define ZCL_MODULE_SERIAL_NUMBER_ATTRIBUTE_ID (0x030E)
+#define ZCL_OPERATING_TARIFF_LABEL_DELIVERED_ATTRIBUTE_ID (0x030F)
+#define ZCL_OPERATING_TARIFF_LABEL_RECEIVED_ATTRIBUTE_ID (0x0310)
+#define ZCL_CUSTOMER_ID_NUMBER_ATTRIBUTE_ID (0x0311)
+#define ZCL_ALTERNATIVE_UNIT_OF_MEASURE_ATTRIBUTE_ID (0x0312)
+#define ZCL_ALTERNATIVE_DEMAND_FORMATTING_ATTRIBUTE_ID (0x0313)
+#define ZCL_ALTERNATIVE_CONSUMPTION_FORMATTING_ATTRIBUTE_ID (0x0314)
+#define ZCL_INSTANTANEOUS_DEMAND_ATTRIBUTE_ID (0x0400)
+#define ZCL_CURRENT_DAY_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0401)
+#define ZCL_CURRENT_DAY_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0402)
+#define ZCL_PREVIOUS_DAY_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0403)
+#define ZCL_PREVIOUS_DAY_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0404)
+#define ZCL_CURRENT_PARTIAL_PROFILE_INTERVAL_START_TIME_DELIVERED_ATTRIBUTE_ID (0x0405)
+#define ZCL_CURRENT_PARTIAL_PROFILE_INTERVAL_START_TIME_RECEIVED_ATTRIBUTE_ID (0x0406)
+#define ZCL_CURRENT_PARTIAL_PROFILE_INTERVAL_VALUE_DELIVERED_ATTRIBUTE_ID (0x0407)
+#define ZCL_CURRENT_PARTIAL_PROFILE_INTERVAL_VALUE_RECEIVED_ATTRIBUTE_ID (0x0408)
+#define ZCL_CURRENT_DAY_MAX_PRESSURE_ATTRIBUTE_ID (0x0409)
+#define ZCL_CURRENT_DAY_MIN_PRESSURE_ATTRIBUTE_ID (0x040A)
+#define ZCL_PREVIOUS_DAY_MAX_PRESSURE_ATTRIBUTE_ID (0x040B)
+#define ZCL_PREVIOUS_DAY_MIN_PRESSURE_ATTRIBUTE_ID (0x040C)
+#define ZCL_CURRENT_DAY_MAX_DEMAND_ATTRIBUTE_ID (0x040D)
+#define ZCL_PREVIOUS_DAY_MAX_DEMAND_ATTRIBUTE_ID (0x040E)
+#define ZCL_CURRENT_MONTH_MAX_DEMAND_ATTRIBUTE_ID (0x040F)
+#define ZCL_CURRENT_YEAR_MAX_DEMAND_ATTRIBUTE_ID (0x0410)
+#define ZCL_CURRENT_DAY_MAX_ENERGY_CARRIER_DEMAND_ATTRIBUTE_ID (0x0411)
+#define ZCL_PREVIOUS_DAY_MAX_ENERGY_CARRIER_DEMAND_ATTRIBUTE_ID (0x0412)
+#define ZCL_CURRENT_MONTH_MAX_ENERGY_CARRIER_DEMAND_ATTRIBUTE_ID (0x0413)
+#define ZCL_CURRENT_MONTH_MIN_ENERGY_CARRIER_DEMAND_ATTRIBUTE_ID (0x0414)
+#define ZCL_CURRENT_YEAR_MAX_ENERGY_CARRIER_DEMAND_ATTRIBUTE_ID (0x0415)
+#define ZCL_CURRENT_YEAR_MIN_ENERGY_CARRIER_DEMAND_ATTRIBUTE_ID (0x0416)
+#define ZCL_PREVIOUS_DAY2_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0420)
+#define ZCL_PREVIOUS_DAY2_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0421)
+#define ZCL_PREVIOUS_DAY3_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0422)
+#define ZCL_PREVIOUS_DAY3_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0423)
+#define ZCL_PREVIOUS_DAY4_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0424)
+#define ZCL_PREVIOUS_DAY4_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0425)
+#define ZCL_PREVIOUS_DAY5_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0426)
+#define ZCL_PREVIOUS_DAY5_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0427)
+#define ZCL_PREVIOUS_DAY6_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0428)
+#define ZCL_PREVIOUS_DAY6_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0429)
+#define ZCL_PREVIOUS_DAY7_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x042A)
+#define ZCL_PREVIOUS_DAY7_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x042B)
+#define ZCL_PREVIOUS_DAY8_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x042C)
+#define ZCL_PREVIOUS_DAY8_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x042D)
+#define ZCL_CURRENT_WEEK_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0430)
+#define ZCL_CURRENT_WEEK_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0431)
+#define ZCL_PREVIOUS_WEEK_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0432)
+#define ZCL_PREVIOUS_WEEK_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0433)
+#define ZCL_PREVIOUS_WEEK2_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0434)
+#define ZCL_PREVIOUS_WEEK2_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0435)
+#define ZCL_PREVIOUS_WEEK3_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0436)
+#define ZCL_PREVIOUS_WEEK3_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0437)
+#define ZCL_PREVIOUS_WEEK4_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0438)
+#define ZCL_PREVIOUS_WEEK4_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0439)
+#define ZCL_PREVIOUS_WEEK5_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x043A)
+#define ZCL_PREVIOUS_WEEK5_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x043B)
+#define ZCL_CURRENT_MONTH_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0440)
+#define ZCL_CURRENT_MONTH_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0441)
+#define ZCL_PREVIOUS_MONTH_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0442)
+#define ZCL_PREVIOUS_MONTH_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0443)
+#define ZCL_PREVIOUS_MONTH2_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0444)
+#define ZCL_PREVIOUS_MONTH2_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0445)
+#define ZCL_PREVIOUS_MONTH3_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0446)
+#define ZCL_PREVIOUS_MONTH3_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0447)
+#define ZCL_PREVIOUS_MONTH4_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0448)
+#define ZCL_PREVIOUS_MONTH4_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0449)
+#define ZCL_PREVIOUS_MONTH5_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x044A)
+#define ZCL_PREVIOUS_MONTH5_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x044B)
+#define ZCL_PREVIOUS_MONTH6_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x044C)
+#define ZCL_PREVIOUS_MONTH6_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x044D)
+#define ZCL_PREVIOUS_MONTH7_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x044E)
+#define ZCL_PREVIOUS_MONTH7_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x044F)
+#define ZCL_PREVIOUS_MONTH8_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0450)
+#define ZCL_PREVIOUS_MONTH8_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0451)
+#define ZCL_PREVIOUS_MONTH9_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0452)
+#define ZCL_PREVIOUS_MONTH9_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0453)
+#define ZCL_PREVIOUS_MONTH10_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0454)
+#define ZCL_PREVIOUS_MONTH10_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0455)
+#define ZCL_PREVIOUS_MONTH11_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0456)
+#define ZCL_PREVIOUS_MONTH11_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0457)
+#define ZCL_PREVIOUS_MONTH12_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0458)
+#define ZCL_PREVIOUS_MONTH12_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0459)
+#define ZCL_PREVIOUS_MONTH13_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x045A)
+#define ZCL_PREVIOUS_MONTH13_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x045B)
+#define ZCL_METERING_HISTORICAL_FREEZE_TIME_ATTRIBUTE_ID (0x045C)
+#define ZCL_CURRENT_DAY_MAX_DEMAND_DELIVERED_ATTRIBUTE_ID (0x045D)
+#define ZCL_CURRENT_DAY_MAX_DEMAND_DELIVERED_TIME_ATTRIBUTE_ID (0x045E)
+#define ZCL_CURRENT_DAY_MAX_DEMAND_RECEIVED_ATTRIBUTE_ID (0x045F)
+#define ZCL_CURRENT_DAY_MAX_DEMAND_RECEIVED_TIME_ATTRIBUTE_ID (0x0460)
+#define ZCL_PREVIOUS_DAY_MAX_DEMAND_DELIVERED_ATTRIBUTE_ID (0x0461)
+#define ZCL_PREVIOUS_DAY_MAX_DEMAND_DELIVERED_TIME_ATTRIBUTE_ID (0x0462)
+#define ZCL_PREVIOUS_DAY_MAX_DEMAND_RECEIVED_ATTRIBUTE_ID (0x0463)
+#define ZCL_PREVIOUS_DAY_MAX_DEMAND_RECEIVED_TIME_ATTRIBUTE_ID (0x0464)
+#define ZCL_MAX_NUMBER_OF_PERIODS_DELIVERED_ATTRIBUTE_ID (0x0500)
+#define ZCL_CURRENT_DEMAND_DELIVERED_ATTRIBUTE_ID (0x0600)
+#define ZCL_DEMAND_LIMIT_ATTRIBUTE_ID (0x0601)
+#define ZCL_DEMAND_INTEGRATION_PERIOD_ATTRIBUTE_ID (0x0602)
+#define ZCL_NUMBER_OF_DEMAND_SUBINTERVALS_ATTRIBUTE_ID (0x0603)
+#define ZCL_DEMAND_LIMIT_ARM_DURATION_IN_MINUTES_ATTRIBUTE_ID (0x0604)
+#define ZCL_LOAD_LIMIT_SUPPLY_STATE_ATTRIBUTE_ID (0x0605)
+#define ZCL_LOAD_LIMIT_COUNTER_ATTRIBUTE_ID (0x0606)
+#define ZCL_SUPPLY_TAMPER_STATE_ATTRIBUTE_ID (0x0607)
+#define ZCL_SUPPLY_DEPLETION_STATE_ATTRIBUTE_ID (0x0608)
+#define ZCL_SUPPLY_UNCONTROLLED_FLOW_STATE_ATTRIBUTE_ID (0x0609)
+#define ZCL_CURRENT_NO_TIER_BLOCK1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0700)
+#define ZCL_CURRENT_NO_TIER_BLOCK2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0701)
+#define ZCL_CURRENT_NO_TIER_BLOCK3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0702)
+#define ZCL_CURRENT_NO_TIER_BLOCK4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0703)
+#define ZCL_CURRENT_NO_TIER_BLOCK5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0704)
+#define ZCL_CURRENT_NO_TIER_BLOCK6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0705)
+#define ZCL_CURRENT_NO_TIER_BLOCK7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0706)
+#define ZCL_CURRENT_NO_TIER_BLOCK8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0707)
+#define ZCL_CURRENT_NO_TIER_BLOCK9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0708)
+#define ZCL_CURRENT_NO_TIER_BLOCK10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0709)
+#define ZCL_CURRENT_NO_TIER_BLOCK11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x070A)
+#define ZCL_CURRENT_NO_TIER_BLOCK12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x070B)
+#define ZCL_CURRENT_NO_TIER_BLOCK13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x070C)
+#define ZCL_CURRENT_NO_TIER_BLOCK14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x070D)
+#define ZCL_CURRENT_NO_TIER_BLOCK15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x070E)
+#define ZCL_CURRENT_NO_TIER_BLOCK16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x070F)
+#define ZCL_CURRENT_TIER1_BLOCK1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0710)
+#define ZCL_CURRENT_TIER1_BLOCK2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0711)
+#define ZCL_CURRENT_TIER1_BLOCK3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0712)
+#define ZCL_CURRENT_TIER1_BLOCK4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0713)
+#define ZCL_CURRENT_TIER1_BLOCK5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0714)
+#define ZCL_CURRENT_TIER1_BLOCK6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0715)
+#define ZCL_CURRENT_TIER1_BLOCK7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0716)
+#define ZCL_CURRENT_TIER1_BLOCK8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0717)
+#define ZCL_CURRENT_TIER1_BLOCK9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0718)
+#define ZCL_CURRENT_TIER1_BLOCK10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0719)
+#define ZCL_CURRENT_TIER1_BLOCK11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x071A)
+#define ZCL_CURRENT_TIER1_BLOCK12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x071B)
+#define ZCL_CURRENT_TIER1_BLOCK13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x071C)
+#define ZCL_CURRENT_TIER1_BLOCK14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x071D)
+#define ZCL_CURRENT_TIER1_BLOCK15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x071E)
+#define ZCL_CURRENT_TIER1_BLOCK16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x071F)
+#define ZCL_CURRENT_TIER2_BLOCK1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0720)
+#define ZCL_CURRENT_TIER2_BLOCK2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0721)
+#define ZCL_CURRENT_TIER2_BLOCK3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0722)
+#define ZCL_CURRENT_TIER2_BLOCK4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0723)
+#define ZCL_CURRENT_TIER2_BLOCK5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0724)
+#define ZCL_CURRENT_TIER2_BLOCK6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0725)
+#define ZCL_CURRENT_TIER2_BLOCK7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0726)
+#define ZCL_CURRENT_TIER2_BLOCK8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0727)
+#define ZCL_CURRENT_TIER2_BLOCK9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0728)
+#define ZCL_CURRENT_TIER2_BLOCK10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0729)
+#define ZCL_CURRENT_TIER2_BLOCK11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x072A)
+#define ZCL_CURRENT_TIER2_BLOCK12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x072B)
+#define ZCL_CURRENT_TIER2_BLOCK13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x072C)
+#define ZCL_CURRENT_TIER2_BLOCK14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x072D)
+#define ZCL_CURRENT_TIER2_BLOCK15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x072E)
+#define ZCL_CURRENT_TIER2_BLOCK16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x072F)
+#define ZCL_CURRENT_TIER3_BLOCK1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0730)
+#define ZCL_CURRENT_TIER3_BLOCK2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0731)
+#define ZCL_CURRENT_TIER3_BLOCK3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0732)
+#define ZCL_CURRENT_TIER3_BLOCK4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0733)
+#define ZCL_CURRENT_TIER3_BLOCK5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0734)
+#define ZCL_CURRENT_TIER3_BLOCK6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0735)
+#define ZCL_CURRENT_TIER3_BLOCK7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0736)
+#define ZCL_CURRENT_TIER3_BLOCK8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0737)
+#define ZCL_CURRENT_TIER3_BLOCK9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0738)
+#define ZCL_CURRENT_TIER3_BLOCK10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0739)
+#define ZCL_CURRENT_TIER3_BLOCK11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x073A)
+#define ZCL_CURRENT_TIER3_BLOCK12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x073B)
+#define ZCL_CURRENT_TIER3_BLOCK13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x073C)
+#define ZCL_CURRENT_TIER3_BLOCK14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x073D)
+#define ZCL_CURRENT_TIER3_BLOCK15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x073E)
+#define ZCL_CURRENT_TIER3_BLOCK16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x073F)
+#define ZCL_CURRENT_TIER4_BLOCK1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0740)
+#define ZCL_CURRENT_TIER4_BLOCK2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0741)
+#define ZCL_CURRENT_TIER4_BLOCK3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0742)
+#define ZCL_CURRENT_TIER4_BLOCK4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0743)
+#define ZCL_CURRENT_TIER4_BLOCK5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0744)
+#define ZCL_CURRENT_TIER4_BLOCK6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0745)
+#define ZCL_CURRENT_TIER4_BLOCK7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0746)
+#define ZCL_CURRENT_TIER4_BLOCK8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0747)
+#define ZCL_CURRENT_TIER4_BLOCK9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0748)
+#define ZCL_CURRENT_TIER4_BLOCK10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0749)
+#define ZCL_CURRENT_TIER4_BLOCK11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x074A)
+#define ZCL_CURRENT_TIER4_BLOCK12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x074B)
+#define ZCL_CURRENT_TIER4_BLOCK13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x074C)
+#define ZCL_CURRENT_TIER4_BLOCK14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x074D)
+#define ZCL_CURRENT_TIER4_BLOCK15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x074E)
+#define ZCL_CURRENT_TIER4_BLOCK16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x074F)
+#define ZCL_CURRENT_TIER5_BLOCK1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0750)
+#define ZCL_CURRENT_TIER5_BLOCK2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0751)
+#define ZCL_CURRENT_TIER5_BLOCK3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0752)
+#define ZCL_CURRENT_TIER5_BLOCK4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0753)
+#define ZCL_CURRENT_TIER5_BLOCK5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0754)
+#define ZCL_CURRENT_TIER5_BLOCK6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0755)
+#define ZCL_CURRENT_TIER5_BLOCK7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0756)
+#define ZCL_CURRENT_TIER5_BLOCK8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0757)
+#define ZCL_CURRENT_TIER5_BLOCK9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0758)
+#define ZCL_CURRENT_TIER5_BLOCK10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0759)
+#define ZCL_CURRENT_TIER5_BLOCK11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x075A)
+#define ZCL_CURRENT_TIER5_BLOCK12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x075B)
+#define ZCL_CURRENT_TIER5_BLOCK13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x075C)
+#define ZCL_CURRENT_TIER5_BLOCK14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x075D)
+#define ZCL_CURRENT_TIER5_BLOCK15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x075E)
+#define ZCL_CURRENT_TIER5_BLOCK16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x075F)
+#define ZCL_CURRENT_TIER6_BLOCK1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0760)
+#define ZCL_CURRENT_TIER6_BLOCK2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0761)
+#define ZCL_CURRENT_TIER6_BLOCK3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0762)
+#define ZCL_CURRENT_TIER6_BLOCK4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0763)
+#define ZCL_CURRENT_TIER6_BLOCK5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0764)
+#define ZCL_CURRENT_TIER6_BLOCK6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0765)
+#define ZCL_CURRENT_TIER6_BLOCK7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0766)
+#define ZCL_CURRENT_TIER6_BLOCK8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0767)
+#define ZCL_CURRENT_TIER6_BLOCK9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0768)
+#define ZCL_CURRENT_TIER6_BLOCK10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0769)
+#define ZCL_CURRENT_TIER6_BLOCK11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x076A)
+#define ZCL_CURRENT_TIER6_BLOCK12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x076B)
+#define ZCL_CURRENT_TIER6_BLOCK13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x076C)
+#define ZCL_CURRENT_TIER6_BLOCK14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x076D)
+#define ZCL_CURRENT_TIER6_BLOCK15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x076E)
+#define ZCL_CURRENT_TIER6_BLOCK16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x076F)
+#define ZCL_CURRENT_TIER7_BLOCK1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0770)
+#define ZCL_CURRENT_TIER7_BLOCK2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0771)
+#define ZCL_CURRENT_TIER7_BLOCK3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0772)
+#define ZCL_CURRENT_TIER7_BLOCK4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0773)
+#define ZCL_CURRENT_TIER7_BLOCK5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0774)
+#define ZCL_CURRENT_TIER7_BLOCK6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0775)
+#define ZCL_CURRENT_TIER7_BLOCK7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0776)
+#define ZCL_CURRENT_TIER7_BLOCK8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0777)
+#define ZCL_CURRENT_TIER7_BLOCK9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0778)
+#define ZCL_CURRENT_TIER7_BLOCK10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0779)
+#define ZCL_CURRENT_TIER7_BLOCK11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x077A)
+#define ZCL_CURRENT_TIER7_BLOCK12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x077B)
+#define ZCL_CURRENT_TIER7_BLOCK13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x077C)
+#define ZCL_CURRENT_TIER7_BLOCK14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x077D)
+#define ZCL_CURRENT_TIER7_BLOCK15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x077E)
+#define ZCL_CURRENT_TIER7_BLOCK16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x077F)
+#define ZCL_CURRENT_TIER8_BLOCK1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0780)
+#define ZCL_CURRENT_TIER8_BLOCK2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0781)
+#define ZCL_CURRENT_TIER8_BLOCK3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0782)
+#define ZCL_CURRENT_TIER8_BLOCK4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0783)
+#define ZCL_CURRENT_TIER8_BLOCK5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0784)
+#define ZCL_CURRENT_TIER8_BLOCK6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0785)
+#define ZCL_CURRENT_TIER8_BLOCK7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0786)
+#define ZCL_CURRENT_TIER8_BLOCK8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0787)
+#define ZCL_CURRENT_TIER8_BLOCK9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0788)
+#define ZCL_CURRENT_TIER8_BLOCK10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0789)
+#define ZCL_CURRENT_TIER8_BLOCK11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x078A)
+#define ZCL_CURRENT_TIER8_BLOCK12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x078B)
+#define ZCL_CURRENT_TIER8_BLOCK13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x078C)
+#define ZCL_CURRENT_TIER8_BLOCK14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x078D)
+#define ZCL_CURRENT_TIER8_BLOCK15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x078E)
+#define ZCL_CURRENT_TIER8_BLOCK16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x078F)
+#define ZCL_CURRENT_TIER9_BLOCK1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0790)
+#define ZCL_CURRENT_TIER9_BLOCK2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0791)
+#define ZCL_CURRENT_TIER9_BLOCK3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0792)
+#define ZCL_CURRENT_TIER9_BLOCK4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0793)
+#define ZCL_CURRENT_TIER9_BLOCK5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0794)
+#define ZCL_CURRENT_TIER9_BLOCK6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0795)
+#define ZCL_CURRENT_TIER9_BLOCK7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0796)
+#define ZCL_CURRENT_TIER9_BLOCK8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0797)
+#define ZCL_CURRENT_TIER9_BLOCK9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0798)
+#define ZCL_CURRENT_TIER9_BLOCK10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0799)
+#define ZCL_CURRENT_TIER9_BLOCK11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x079A)
+#define ZCL_CURRENT_TIER9_BLOCK12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x079B)
+#define ZCL_CURRENT_TIER9_BLOCK13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x079C)
+#define ZCL_CURRENT_TIER9_BLOCK14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x079D)
+#define ZCL_CURRENT_TIER9_BLOCK15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x079E)
+#define ZCL_CURRENT_TIER9_BLOCK16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x079F)
+#define ZCL_CURRENT_TIER10_BLOCK1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07A0)
+#define ZCL_CURRENT_TIER10_BLOCK2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07A1)
+#define ZCL_CURRENT_TIER10_BLOCK3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07A2)
+#define ZCL_CURRENT_TIER10_BLOCK4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07A3)
+#define ZCL_CURRENT_TIER10_BLOCK5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07A4)
+#define ZCL_CURRENT_TIER10_BLOCK6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07A5)
+#define ZCL_CURRENT_TIER10_BLOCK7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07A6)
+#define ZCL_CURRENT_TIER10_BLOCK8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07A7)
+#define ZCL_CURRENT_TIER10_BLOCK9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07A8)
+#define ZCL_CURRENT_TIER10_BLOCK10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07A9)
+#define ZCL_CURRENT_TIER10_BLOCK11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07AA)
+#define ZCL_CURRENT_TIER10_BLOCK12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07AB)
+#define ZCL_CURRENT_TIER10_BLOCK13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07AC)
+#define ZCL_CURRENT_TIER10_BLOCK14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07AD)
+#define ZCL_CURRENT_TIER10_BLOCK15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07AE)
+#define ZCL_CURRENT_TIER10_BLOCK16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07AF)
+#define ZCL_CURRENT_TIER11_BLOCK1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07B0)
+#define ZCL_CURRENT_TIER11_BLOCK2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07B1)
+#define ZCL_CURRENT_TIER11_BLOCK3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07B2)
+#define ZCL_CURRENT_TIER11_BLOCK4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07B3)
+#define ZCL_CURRENT_TIER11_BLOCK5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07B4)
+#define ZCL_CURRENT_TIER11_BLOCK6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07B5)
+#define ZCL_CURRENT_TIER11_BLOCK7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07B6)
+#define ZCL_CURRENT_TIER11_BLOCK8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07B7)
+#define ZCL_CURRENT_TIER11_BLOCK9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07B8)
+#define ZCL_CURRENT_TIER11_BLOCK10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07B9)
+#define ZCL_CURRENT_TIER11_BLOCK11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07BA)
+#define ZCL_CURRENT_TIER11_BLOCK12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07BB)
+#define ZCL_CURRENT_TIER11_BLOCK13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07BC)
+#define ZCL_CURRENT_TIER11_BLOCK14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07BD)
+#define ZCL_CURRENT_TIER11_BLOCK15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07BE)
+#define ZCL_CURRENT_TIER11_BLOCK16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07BF)
+#define ZCL_CURRENT_TIER12_BLOCK1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07C0)
+#define ZCL_CURRENT_TIER12_BLOCK2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07C1)
+#define ZCL_CURRENT_TIER12_BLOCK3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07C2)
+#define ZCL_CURRENT_TIER12_BLOCK4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07C3)
+#define ZCL_CURRENT_TIER12_BLOCK5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07C4)
+#define ZCL_CURRENT_TIER12_BLOCK6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07C5)
+#define ZCL_CURRENT_TIER12_BLOCK7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07C6)
+#define ZCL_CURRENT_TIER12_BLOCK8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07C7)
+#define ZCL_CURRENT_TIER12_BLOCK9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07C8)
+#define ZCL_CURRENT_TIER12_BLOCK10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07C9)
+#define ZCL_CURRENT_TIER12_BLOCK11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07CA)
+#define ZCL_CURRENT_TIER12_BLOCK12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07CB)
+#define ZCL_CURRENT_TIER12_BLOCK13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07CC)
+#define ZCL_CURRENT_TIER12_BLOCK14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07CD)
+#define ZCL_CURRENT_TIER12_BLOCK15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07CE)
+#define ZCL_CURRENT_TIER12_BLOCK16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07CF)
+#define ZCL_CURRENT_TIER13_BLOCK1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07D0)
+#define ZCL_CURRENT_TIER13_BLOCK2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07D1)
+#define ZCL_CURRENT_TIER13_BLOCK3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07D2)
+#define ZCL_CURRENT_TIER13_BLOCK4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07D3)
+#define ZCL_CURRENT_TIER13_BLOCK5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07D4)
+#define ZCL_CURRENT_TIER13_BLOCK6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07D5)
+#define ZCL_CURRENT_TIER13_BLOCK7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07D6)
+#define ZCL_CURRENT_TIER13_BLOCK8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07D7)
+#define ZCL_CURRENT_TIER13_BLOCK9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07D8)
+#define ZCL_CURRENT_TIER13_BLOCK10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07D9)
+#define ZCL_CURRENT_TIER13_BLOCK11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07DA)
+#define ZCL_CURRENT_TIER13_BLOCK12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07DB)
+#define ZCL_CURRENT_TIER13_BLOCK13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07DC)
+#define ZCL_CURRENT_TIER13_BLOCK14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07DD)
+#define ZCL_CURRENT_TIER13_BLOCK15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07DE)
+#define ZCL_CURRENT_TIER13_BLOCK16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07DF)
+#define ZCL_CURRENT_TIER14_BLOCK1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07E0)
+#define ZCL_CURRENT_TIER14_BLOCK2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07E1)
+#define ZCL_CURRENT_TIER14_BLOCK3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07E2)
+#define ZCL_CURRENT_TIER14_BLOCK4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07E3)
+#define ZCL_CURRENT_TIER14_BLOCK5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07E4)
+#define ZCL_CURRENT_TIER14_BLOCK6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07E5)
+#define ZCL_CURRENT_TIER14_BLOCK7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07E6)
+#define ZCL_CURRENT_TIER14_BLOCK8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07E7)
+#define ZCL_CURRENT_TIER14_BLOCK9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07E8)
+#define ZCL_CURRENT_TIER14_BLOCK10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07E9)
+#define ZCL_CURRENT_TIER14_BLOCK11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07EA)
+#define ZCL_CURRENT_TIER14_BLOCK12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07EB)
+#define ZCL_CURRENT_TIER14_BLOCK13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07EC)
+#define ZCL_CURRENT_TIER14_BLOCK14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07ED)
+#define ZCL_CURRENT_TIER14_BLOCK15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07EE)
+#define ZCL_CURRENT_TIER14_BLOCK16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07EF)
+#define ZCL_CURRENT_TIER15_BLOCK1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07F0)
+#define ZCL_CURRENT_TIER15_BLOCK2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07F1)
+#define ZCL_CURRENT_TIER15_BLOCK3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07F2)
+#define ZCL_CURRENT_TIER15_BLOCK4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07F3)
+#define ZCL_CURRENT_TIER15_BLOCK5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07F4)
+#define ZCL_CURRENT_TIER15_BLOCK6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07F5)
+#define ZCL_CURRENT_TIER15_BLOCK7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07F6)
+#define ZCL_CURRENT_TIER15_BLOCK8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07F7)
+#define ZCL_CURRENT_TIER15_BLOCK9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07F8)
+#define ZCL_CURRENT_TIER15_BLOCK10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07F9)
+#define ZCL_CURRENT_TIER15_BLOCK11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07FA)
+#define ZCL_CURRENT_TIER15_BLOCK12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07FB)
+#define ZCL_CURRENT_TIER15_BLOCK13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07FC)
+#define ZCL_CURRENT_TIER15_BLOCK14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07FD)
+#define ZCL_CURRENT_TIER15_BLOCK15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07FE)
+#define ZCL_CURRENT_TIER15_BLOCK16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07FF)
+#define ZCL_GENERIC_ALARM_MASK_ATTRIBUTE_ID (0x0800)
+#define ZCL_ELECTRICITY_ALARM_MASK_ATTRIBUTE_ID (0x0801)
+#define ZCL_GENERIC_FLOW_PRESSURE_ALARM_MASK_ATTRIBUTE_ID (0x0802)
+#define ZCL_WATER_SPECIFIC_ALARM_MASK_ATTRIBUTE_ID (0x0803)
+#define ZCL_HEAT_AND_COOLING_SPECIFIC_ALARM_MASK_ATTRIBUTE_ID (0x0804)
+#define ZCL_GAS_SPECIFIC_ALARM_MASK_ATTRIBUTE_ID (0x0805)
+#define ZCL_METERING_EXTENDED_GENERIC_ALARM_MASK_ATTRIBUTE_ID (0x0806)
+#define ZCL_METERING_MANUFACTURE_ALARM_MASK_ATTRIBUTE_ID (0x0807)
+#define ZCL_CURRENT_NO_TIER_BLOCK1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0900)
+#define ZCL_CURRENT_NO_TIER_BLOCK2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0901)
+#define ZCL_CURRENT_NO_TIER_BLOCK3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0902)
+#define ZCL_CURRENT_NO_TIER_BLOCK4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0903)
+#define ZCL_CURRENT_NO_TIER_BLOCK5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0904)
+#define ZCL_CURRENT_NO_TIER_BLOCK6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0905)
+#define ZCL_CURRENT_NO_TIER_BLOCK7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0906)
+#define ZCL_CURRENT_NO_TIER_BLOCK8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0907)
+#define ZCL_CURRENT_NO_TIER_BLOCK9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0908)
+#define ZCL_CURRENT_NO_TIER_BLOCK10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0909)
+#define ZCL_CURRENT_NO_TIER_BLOCK11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x090A)
+#define ZCL_CURRENT_NO_TIER_BLOCK12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x090B)
+#define ZCL_CURRENT_NO_TIER_BLOCK13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x090C)
+#define ZCL_CURRENT_NO_TIER_BLOCK14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x090D)
+#define ZCL_CURRENT_NO_TIER_BLOCK15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x090E)
+#define ZCL_CURRENT_NO_TIER_BLOCK16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x090F)
+#define ZCL_CURRENT_TIER1_BLOCK1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0910)
+#define ZCL_CURRENT_TIER1_BLOCK2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0911)
+#define ZCL_CURRENT_TIER1_BLOCK3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0912)
+#define ZCL_CURRENT_TIER1_BLOCK4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0913)
+#define ZCL_CURRENT_TIER1_BLOCK5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0914)
+#define ZCL_CURRENT_TIER1_BLOCK6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0915)
+#define ZCL_CURRENT_TIER1_BLOCK7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0916)
+#define ZCL_CURRENT_TIER1_BLOCK8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0917)
+#define ZCL_CURRENT_TIER1_BLOCK9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0918)
+#define ZCL_CURRENT_TIER1_BLOCK10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0919)
+#define ZCL_CURRENT_TIER1_BLOCK11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x091A)
+#define ZCL_CURRENT_TIER1_BLOCK12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x091B)
+#define ZCL_CURRENT_TIER1_BLOCK13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x091C)
+#define ZCL_CURRENT_TIER1_BLOCK14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x091D)
+#define ZCL_CURRENT_TIER1_BLOCK15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x091E)
+#define ZCL_CURRENT_TIER1_BLOCK16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x091F)
+#define ZCL_CURRENT_TIER2_BLOCK1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0920)
+#define ZCL_CURRENT_TIER2_BLOCK2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0921)
+#define ZCL_CURRENT_TIER2_BLOCK3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0922)
+#define ZCL_CURRENT_TIER2_BLOCK4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0923)
+#define ZCL_CURRENT_TIER2_BLOCK5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0924)
+#define ZCL_CURRENT_TIER2_BLOCK6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0925)
+#define ZCL_CURRENT_TIER2_BLOCK7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0926)
+#define ZCL_CURRENT_TIER2_BLOCK8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0927)
+#define ZCL_CURRENT_TIER2_BLOCK9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0928)
+#define ZCL_CURRENT_TIER2_BLOCK10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0929)
+#define ZCL_CURRENT_TIER2_BLOCK11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x092A)
+#define ZCL_CURRENT_TIER2_BLOCK12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x092B)
+#define ZCL_CURRENT_TIER2_BLOCK13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x092C)
+#define ZCL_CURRENT_TIER2_BLOCK14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x092D)
+#define ZCL_CURRENT_TIER2_BLOCK15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x092E)
+#define ZCL_CURRENT_TIER2_BLOCK16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x092F)
+#define ZCL_CURRENT_TIER3_BLOCK1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0930)
+#define ZCL_CURRENT_TIER3_BLOCK2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0931)
+#define ZCL_CURRENT_TIER3_BLOCK3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0932)
+#define ZCL_CURRENT_TIER3_BLOCK4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0933)
+#define ZCL_CURRENT_TIER3_BLOCK5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0934)
+#define ZCL_CURRENT_TIER3_BLOCK6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0935)
+#define ZCL_CURRENT_TIER3_BLOCK7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0936)
+#define ZCL_CURRENT_TIER3_BLOCK8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0937)
+#define ZCL_CURRENT_TIER3_BLOCK9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0938)
+#define ZCL_CURRENT_TIER3_BLOCK10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0939)
+#define ZCL_CURRENT_TIER3_BLOCK11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x093A)
+#define ZCL_CURRENT_TIER3_BLOCK12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x093B)
+#define ZCL_CURRENT_TIER3_BLOCK13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x093C)
+#define ZCL_CURRENT_TIER3_BLOCK14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x093D)
+#define ZCL_CURRENT_TIER3_BLOCK15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x093E)
+#define ZCL_CURRENT_TIER3_BLOCK16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x093F)
+#define ZCL_CURRENT_TIER4_BLOCK1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0940)
+#define ZCL_CURRENT_TIER4_BLOCK2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0941)
+#define ZCL_CURRENT_TIER4_BLOCK3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0942)
+#define ZCL_CURRENT_TIER4_BLOCK4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0943)
+#define ZCL_CURRENT_TIER4_BLOCK5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0944)
+#define ZCL_CURRENT_TIER4_BLOCK6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0945)
+#define ZCL_CURRENT_TIER4_BLOCK7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0946)
+#define ZCL_CURRENT_TIER4_BLOCK8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0947)
+#define ZCL_CURRENT_TIER4_BLOCK9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0948)
+#define ZCL_CURRENT_TIER4_BLOCK10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0949)
+#define ZCL_CURRENT_TIER4_BLOCK11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x094A)
+#define ZCL_CURRENT_TIER4_BLOCK12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x094B)
+#define ZCL_CURRENT_TIER4_BLOCK13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x094C)
+#define ZCL_CURRENT_TIER4_BLOCK14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x094D)
+#define ZCL_CURRENT_TIER4_BLOCK15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x094E)
+#define ZCL_CURRENT_TIER4_BLOCK16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x094F)
+#define ZCL_CURRENT_TIER5_BLOCK1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0950)
+#define ZCL_CURRENT_TIER5_BLOCK2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0951)
+#define ZCL_CURRENT_TIER5_BLOCK3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0952)
+#define ZCL_CURRENT_TIER5_BLOCK4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0953)
+#define ZCL_CURRENT_TIER5_BLOCK5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0954)
+#define ZCL_CURRENT_TIER5_BLOCK6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0955)
+#define ZCL_CURRENT_TIER5_BLOCK7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0956)
+#define ZCL_CURRENT_TIER5_BLOCK8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0957)
+#define ZCL_CURRENT_TIER5_BLOCK9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0958)
+#define ZCL_CURRENT_TIER5_BLOCK10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0959)
+#define ZCL_CURRENT_TIER5_BLOCK11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x095A)
+#define ZCL_CURRENT_TIER5_BLOCK12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x095B)
+#define ZCL_CURRENT_TIER5_BLOCK13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x095C)
+#define ZCL_CURRENT_TIER5_BLOCK14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x095D)
+#define ZCL_CURRENT_TIER5_BLOCK15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x095E)
+#define ZCL_CURRENT_TIER5_BLOCK16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x095F)
+#define ZCL_CURRENT_TIER6_BLOCK1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0960)
+#define ZCL_CURRENT_TIER6_BLOCK2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0961)
+#define ZCL_CURRENT_TIER6_BLOCK3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0962)
+#define ZCL_CURRENT_TIER6_BLOCK4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0963)
+#define ZCL_CURRENT_TIER6_BLOCK5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0964)
+#define ZCL_CURRENT_TIER6_BLOCK6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0965)
+#define ZCL_CURRENT_TIER6_BLOCK7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0966)
+#define ZCL_CURRENT_TIER6_BLOCK8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0967)
+#define ZCL_CURRENT_TIER6_BLOCK9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0968)
+#define ZCL_CURRENT_TIER6_BLOCK10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0969)
+#define ZCL_CURRENT_TIER6_BLOCK11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x096A)
+#define ZCL_CURRENT_TIER6_BLOCK12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x096B)
+#define ZCL_CURRENT_TIER6_BLOCK13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x096C)
+#define ZCL_CURRENT_TIER6_BLOCK14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x096D)
+#define ZCL_CURRENT_TIER6_BLOCK15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x096E)
+#define ZCL_CURRENT_TIER6_BLOCK16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x096F)
+#define ZCL_CURRENT_TIER7_BLOCK1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0970)
+#define ZCL_CURRENT_TIER7_BLOCK2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0971)
+#define ZCL_CURRENT_TIER7_BLOCK3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0972)
+#define ZCL_CURRENT_TIER7_BLOCK4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0973)
+#define ZCL_CURRENT_TIER7_BLOCK5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0974)
+#define ZCL_CURRENT_TIER7_BLOCK6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0975)
+#define ZCL_CURRENT_TIER7_BLOCK7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0976)
+#define ZCL_CURRENT_TIER7_BLOCK8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0977)
+#define ZCL_CURRENT_TIER7_BLOCK9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0978)
+#define ZCL_CURRENT_TIER7_BLOCK10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0979)
+#define ZCL_CURRENT_TIER7_BLOCK11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x097A)
+#define ZCL_CURRENT_TIER7_BLOCK12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x097B)
+#define ZCL_CURRENT_TIER7_BLOCK13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x097C)
+#define ZCL_CURRENT_TIER7_BLOCK14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x097D)
+#define ZCL_CURRENT_TIER7_BLOCK15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x097E)
+#define ZCL_CURRENT_TIER7_BLOCK16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x097F)
+#define ZCL_CURRENT_TIER8_BLOCK1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0980)
+#define ZCL_CURRENT_TIER8_BLOCK2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0981)
+#define ZCL_CURRENT_TIER8_BLOCK3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0982)
+#define ZCL_CURRENT_TIER8_BLOCK4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0983)
+#define ZCL_CURRENT_TIER8_BLOCK5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0984)
+#define ZCL_CURRENT_TIER8_BLOCK6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0985)
+#define ZCL_CURRENT_TIER8_BLOCK7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0986)
+#define ZCL_CURRENT_TIER8_BLOCK8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0987)
+#define ZCL_CURRENT_TIER8_BLOCK9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0988)
+#define ZCL_CURRENT_TIER8_BLOCK10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0989)
+#define ZCL_CURRENT_TIER8_BLOCK11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x098A)
+#define ZCL_CURRENT_TIER8_BLOCK12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x098B)
+#define ZCL_CURRENT_TIER8_BLOCK13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x098C)
+#define ZCL_CURRENT_TIER8_BLOCK14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x098D)
+#define ZCL_CURRENT_TIER8_BLOCK15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x098E)
+#define ZCL_CURRENT_TIER8_BLOCK16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x098F)
+#define ZCL_CURRENT_TIER9_BLOCK1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0990)
+#define ZCL_CURRENT_TIER9_BLOCK2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0991)
+#define ZCL_CURRENT_TIER9_BLOCK3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0992)
+#define ZCL_CURRENT_TIER9_BLOCK4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0993)
+#define ZCL_CURRENT_TIER9_BLOCK5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0994)
+#define ZCL_CURRENT_TIER9_BLOCK6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0995)
+#define ZCL_CURRENT_TIER9_BLOCK7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0996)
+#define ZCL_CURRENT_TIER9_BLOCK8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0997)
+#define ZCL_CURRENT_TIER9_BLOCK9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0998)
+#define ZCL_CURRENT_TIER9_BLOCK10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0999)
+#define ZCL_CURRENT_TIER9_BLOCK11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x099A)
+#define ZCL_CURRENT_TIER9_BLOCK12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x099B)
+#define ZCL_CURRENT_TIER9_BLOCK13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x099C)
+#define ZCL_CURRENT_TIER9_BLOCK14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x099D)
+#define ZCL_CURRENT_TIER9_BLOCK15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x099E)
+#define ZCL_CURRENT_TIER9_BLOCK16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x099F)
+#define ZCL_CURRENT_TIER10_BLOCK1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09A0)
+#define ZCL_CURRENT_TIER10_BLOCK2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09A1)
+#define ZCL_CURRENT_TIER10_BLOCK3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09A2)
+#define ZCL_CURRENT_TIER10_BLOCK4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09A3)
+#define ZCL_CURRENT_TIER10_BLOCK5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09A4)
+#define ZCL_CURRENT_TIER10_BLOCK6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09A5)
+#define ZCL_CURRENT_TIER10_BLOCK7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09A6)
+#define ZCL_CURRENT_TIER10_BLOCK8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09A7)
+#define ZCL_CURRENT_TIER10_BLOCK9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09A8)
+#define ZCL_CURRENT_TIER10_BLOCK10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09A9)
+#define ZCL_CURRENT_TIER10_BLOCK11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09AA)
+#define ZCL_CURRENT_TIER10_BLOCK12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09AB)
+#define ZCL_CURRENT_TIER10_BLOCK13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09AC)
+#define ZCL_CURRENT_TIER10_BLOCK14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09AD)
+#define ZCL_CURRENT_TIER10_BLOCK15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09AE)
+#define ZCL_CURRENT_TIER10_BLOCK16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09AF)
+#define ZCL_CURRENT_TIER11_BLOCK1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09B0)
+#define ZCL_CURRENT_TIER11_BLOCK2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09B1)
+#define ZCL_CURRENT_TIER11_BLOCK3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09B2)
+#define ZCL_CURRENT_TIER11_BLOCK4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09B3)
+#define ZCL_CURRENT_TIER11_BLOCK5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09B4)
+#define ZCL_CURRENT_TIER11_BLOCK6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09B5)
+#define ZCL_CURRENT_TIER11_BLOCK7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09B6)
+#define ZCL_CURRENT_TIER11_BLOCK8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09B7)
+#define ZCL_CURRENT_TIER11_BLOCK9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09B8)
+#define ZCL_CURRENT_TIER11_BLOCK10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09B9)
+#define ZCL_CURRENT_TIER11_BLOCK11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09BA)
+#define ZCL_CURRENT_TIER11_BLOCK12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09BB)
+#define ZCL_CURRENT_TIER11_BLOCK13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09BC)
+#define ZCL_CURRENT_TIER11_BLOCK14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09BD)
+#define ZCL_CURRENT_TIER11_BLOCK15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09BE)
+#define ZCL_CURRENT_TIER11_BLOCK16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09BF)
+#define ZCL_CURRENT_TIER12_BLOCK1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09C0)
+#define ZCL_CURRENT_TIER12_BLOCK2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09C1)
+#define ZCL_CURRENT_TIER12_BLOCK3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09C2)
+#define ZCL_CURRENT_TIER12_BLOCK4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09C3)
+#define ZCL_CURRENT_TIER12_BLOCK5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09C4)
+#define ZCL_CURRENT_TIER12_BLOCK6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09C5)
+#define ZCL_CURRENT_TIER12_BLOCK7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09C6)
+#define ZCL_CURRENT_TIER12_BLOCK8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09C7)
+#define ZCL_CURRENT_TIER12_BLOCK9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09C8)
+#define ZCL_CURRENT_TIER12_BLOCK10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09C9)
+#define ZCL_CURRENT_TIER12_BLOCK11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09CA)
+#define ZCL_CURRENT_TIER12_BLOCK12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09CB)
+#define ZCL_CURRENT_TIER12_BLOCK13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09CC)
+#define ZCL_CURRENT_TIER12_BLOCK14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09CD)
+#define ZCL_CURRENT_TIER12_BLOCK15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09CE)
+#define ZCL_CURRENT_TIER12_BLOCK16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09CF)
+#define ZCL_CURRENT_TIER13_BLOCK1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09D0)
+#define ZCL_CURRENT_TIER13_BLOCK2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09D1)
+#define ZCL_CURRENT_TIER13_BLOCK3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09D2)
+#define ZCL_CURRENT_TIER13_BLOCK4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09D3)
+#define ZCL_CURRENT_TIER13_BLOCK5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09D4)
+#define ZCL_CURRENT_TIER13_BLOCK6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09D5)
+#define ZCL_CURRENT_TIER13_BLOCK7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09D6)
+#define ZCL_CURRENT_TIER13_BLOCK8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09D7)
+#define ZCL_CURRENT_TIER13_BLOCK9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09D8)
+#define ZCL_CURRENT_TIER13_BLOCK10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09D9)
+#define ZCL_CURRENT_TIER13_BLOCK11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09DA)
+#define ZCL_CURRENT_TIER13_BLOCK12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09DB)
+#define ZCL_CURRENT_TIER13_BLOCK13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09DC)
+#define ZCL_CURRENT_TIER13_BLOCK14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09DD)
+#define ZCL_CURRENT_TIER13_BLOCK15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09DE)
+#define ZCL_CURRENT_TIER13_BLOCK16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09DF)
+#define ZCL_CURRENT_TIER14_BLOCK1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09E0)
+#define ZCL_CURRENT_TIER14_BLOCK2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09E1)
+#define ZCL_CURRENT_TIER14_BLOCK3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09E2)
+#define ZCL_CURRENT_TIER14_BLOCK4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09E3)
+#define ZCL_CURRENT_TIER14_BLOCK5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09E4)
+#define ZCL_CURRENT_TIER14_BLOCK6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09E5)
+#define ZCL_CURRENT_TIER14_BLOCK7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09E6)
+#define ZCL_CURRENT_TIER14_BLOCK8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09E7)
+#define ZCL_CURRENT_TIER14_BLOCK9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09E8)
+#define ZCL_CURRENT_TIER14_BLOCK10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09E9)
+#define ZCL_CURRENT_TIER14_BLOCK11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09EA)
+#define ZCL_CURRENT_TIER14_BLOCK12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09EB)
+#define ZCL_CURRENT_TIER14_BLOCK13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09EC)
+#define ZCL_CURRENT_TIER14_BLOCK14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09ED)
+#define ZCL_CURRENT_TIER14_BLOCK15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09EE)
+#define ZCL_CURRENT_TIER14_BLOCK16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09EF)
+#define ZCL_CURRENT_TIER15_BLOCK1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09F0)
+#define ZCL_CURRENT_TIER15_BLOCK2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09F1)
+#define ZCL_CURRENT_TIER15_BLOCK3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09F2)
+#define ZCL_CURRENT_TIER15_BLOCK4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09F3)
+#define ZCL_CURRENT_TIER15_BLOCK5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09F4)
+#define ZCL_CURRENT_TIER15_BLOCK6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09F5)
+#define ZCL_CURRENT_TIER15_BLOCK7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09F6)
+#define ZCL_CURRENT_TIER15_BLOCK8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09F7)
+#define ZCL_CURRENT_TIER15_BLOCK9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09F8)
+#define ZCL_CURRENT_TIER15_BLOCK10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09F9)
+#define ZCL_CURRENT_TIER15_BLOCK11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09FA)
+#define ZCL_CURRENT_TIER15_BLOCK12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09FB)
+#define ZCL_CURRENT_TIER15_BLOCK13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09FC)
+#define ZCL_CURRENT_TIER15_BLOCK14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09FD)
+#define ZCL_CURRENT_TIER15_BLOCK15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09FE)
+#define ZCL_CURRENT_TIER15_BLOCK16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09FF)
+#define ZCL_BILL_TO_DATE_DELIVERED_ATTRIBUTE_ID (0x0A00)
+#define ZCL_BILL_TO_DATE_TIME_STAMP_DELIVERED_ATTRIBUTE_ID (0x0A01)
+#define ZCL_PROJECTED_BILL_DELIVERED_ATTRIBUTE_ID (0x0A02)
+#define ZCL_PROJECTED_BILL_TIME_STAMP_DELIVERED_ATTRIBUTE_ID (0x0A03)
+#define ZCL_BILL_DELIVERED_TRAILING_DIGIT_ATTRIBUTE_ID (0x0A04)
+#define ZCL_BILL_TO_DATE_RECEIVED_ATTRIBUTE_ID (0x0A10)
+#define ZCL_BILL_TO_DATE_TIME_STAMP_RECEIVED_ATTRIBUTE_ID (0x0A11)
+#define ZCL_PROJECTED_BILL_RECEIVED_ATTRIBUTE_ID (0x0A12)
+#define ZCL_PROJECTED_BILL_TIME_STAMP_RECEIVED_ATTRIBUTE_ID (0x0A13)
+#define ZCL_BILL_RECEIVED_TRAILING_DIGIT_ATTRIBUTE_ID (0x0A14)
+#define ZCL_PROPOSED_CHANGE_SUPPLY_IMPLEMENTATION_TIME_ATTRIBUTE_ID (0x0B00)
+#define ZCL_PROPOSED_CHANGE_SUPPLY_STATUS_ATTRIBUTE_ID (0x0B01)
+#define ZCL_UNCONTROLLED_FLOW_THESHOLD_ATTRIBUTE_ID (0x0B10)
+#define ZCL_UNCONTROLLED_FLOW_THESHOLD_UNIT_OF_MEASURE_ATTRIBUTE_ID (0x0B11)
+#define ZCL_UNCONTROLLED_FLOW_MULTIPLIER_ATTRIBUTE_ID (0x0B12)
+#define ZCL_UNCONTROLLED_FLOW_DIVISOR_ATTRIBUTE_ID (0x0B13)
+#define ZCL_FLOW_STABILIZATION_PERIOD_ATTRIBUTE_ID (0x0B14)
+#define ZCL_FLOW_MEASUREMENT_PERIOD_ATTRIBUTE_ID (0x0B15)
+#define ZCL_ALTERNATIVE_INSTANTANEOUS_DEMAND_ATTRIBUTE_ID (0x0C00)
+#define ZCL_CURRENT_ALTERNATIVE_DAY_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C01)
+#define ZCL_CURRENT_ALTERNATIVE_DAY_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C02)
+#define ZCL_PREVIOUS_DAY_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C03)
+#define ZCL_PREVIOUS_DAY_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C04)
+#define ZCL_CURRENT_ALTERNATIVE_PARTIAL_PROFILE_INTERVAL_START_TIME_DELIVERED_ATTRIBUTE_ID (0x0C05)
+#define ZCL_CURRENT_ALTERNATIVE_PARTIAL_PROFILE_INTERVAL_START_TIME_RECEIVED_ATTRIBUTE_ID (0x0C06)
+#define ZCL_CURRENT_ALTERNATIVE_PARTIAL_PROFILE_INTERVAL_VALUE_DELIVERED_ATTRIBUTE_ID (0x0C07)
+#define ZCL_CURRENT_ALTERNATIVE_PARTIAL_PROFILE_INTERVAL_VALUE_RECEIVED_ATTRIBUTE_ID (0x0C08)
+#define ZCL_CURRENT_ALTERNATIVE_DAY_MAX_PRESSURE_ATTRIBUTE_ID (0x0C09)
+#define ZCL_CURRENT_ALTERNATIVE_DAY_MIN_PRESSURE_ATTRIBUTE_ID (0x0C0A)
+#define ZCL_PREVIOUS_DAY_ALTERNATIVE_MAX_PRESSURE_ATTRIBUTE_ID (0x0C0B)
+#define ZCL_PREVIOUS_DAY_ALTERNATIVE_MIN_PRESSURE_ATTRIBUTE_ID (0x0C0C)
+#define ZCL_CURRENT_ALTERNATIVE_DAY_ALTERNATIVE_MAX_DEMAND_ATTRIBUTE_ID (0x0C0D)
+#define ZCL_PREVIOUS_DAY_ALTERNATIVE_MAX_DEMAND_ATTRIBUTE_ID (0x0C0E)
+#define ZCL_CURRENT_ALTERNATIVE_MONTH_MAX_DEMAND_ATTRIBUTE_ID (0x0C0F)
+#define ZCL_CURRENT_ALTERNATIVE_YEAR_MAX_DEMAND_ATTRIBUTE_ID (0x0C10)
+#define ZCL_PREVIOUS_DAY2_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C20)
+#define ZCL_PREVIOUS_DAY2_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C21)
+#define ZCL_PREVIOUS_DAY3_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C22)
+#define ZCL_PREVIOUS_DAY3_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C23)
+#define ZCL_PREVIOUS_DAY4_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C24)
+#define ZCL_PREVIOUS_DAY4_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C25)
+#define ZCL_PREVIOUS_DAY5_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C26)
+#define ZCL_PREVIOUS_DAY5_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C27)
+#define ZCL_PREVIOUS_DAY6_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C28)
+#define ZCL_PREVIOUS_DAY6_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C29)
+#define ZCL_PREVIOUS_DAY7_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C2A)
+#define ZCL_PREVIOUS_DAY7_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C2B)
+#define ZCL_PREVIOUS_DAY8_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C2C)
+#define ZCL_PREVIOUS_DAY8_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C2D)
+#define ZCL_CURRENT_WEEK_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C30)
+#define ZCL_CURRENT_WEEK_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C31)
+#define ZCL_PREVIOUS_WEEK_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C32)
+#define ZCL_PREVIOUS_WEEK_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C33)
+#define ZCL_PREVIOUS_WEEK2_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C34)
+#define ZCL_PREVIOUS_WEEK2_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C35)
+#define ZCL_PREVIOUS_WEEK3_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C36)
+#define ZCL_PREVIOUS_WEEK3_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C37)
+#define ZCL_PREVIOUS_WEEK4_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C38)
+#define ZCL_PREVIOUS_WEEK4_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C39)
+#define ZCL_PREVIOUS_WEEK5_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C3A)
+#define ZCL_PREVIOUS_WEEK5_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C3B)
+#define ZCL_CURRENT_MONTH_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C40)
+#define ZCL_CURRENT_MONTH_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C41)
+#define ZCL_PREVIOUS_MONTH_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C42)
+#define ZCL_PREVIOUS_MONTH_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C43)
+#define ZCL_PREVIOUS_MONTH2_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C44)
+#define ZCL_PREVIOUS_MONTH2_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C45)
+#define ZCL_PREVIOUS_MONTH3_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C46)
+#define ZCL_PREVIOUS_MONTH3_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C47)
+#define ZCL_PREVIOUS_MONTH4_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C48)
+#define ZCL_PREVIOUS_MONTH4_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C49)
+#define ZCL_PREVIOUS_MONTH5_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C4A)
+#define ZCL_PREVIOUS_MONTH5_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C4B)
+#define ZCL_PREVIOUS_MONTH6_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C4C)
+#define ZCL_PREVIOUS_MONTH6_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C4D)
+#define ZCL_PREVIOUS_MONTH7_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C4E)
+#define ZCL_PREVIOUS_MONTH7_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C4F)
+#define ZCL_PREVIOUS_MONTH8_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C50)
+#define ZCL_PREVIOUS_MONTH8_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C51)
+#define ZCL_PREVIOUS_MONTH9_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C52)
+#define ZCL_PREVIOUS_MONTH9_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C53)
+#define ZCL_PREVIOUS_MONTH10_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C54)
+#define ZCL_PREVIOUS_MONTH10_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C55)
+#define ZCL_PREVIOUS_MONTH11_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C56)
+#define ZCL_PREVIOUS_MONTH11_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C57)
+#define ZCL_PREVIOUS_MONTH12_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C58)
+#define ZCL_PREVIOUS_MONTH12_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C59)
+#define ZCL_PREVIOUS_MONTH13_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C5A)
+#define ZCL_PREVIOUS_MONTH13_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C5B)
+#define ZCL_CURRENT_DAY_ALTERNATIVE_MAX_DEMAND_DELIVERED_ATTRIBUTE_ID (0x0C5C)
+#define ZCL_CURRENT_DAY_ALTERNATIVE_MAX_DEMAND_DELIVERED_TIME_ATTRIBUTE_ID (0x0C5D)
+#define ZCL_CURRENT_DAY_ALTERNATIVE_MAX_DEMAND_RECEIVED_ATTRIBUTE_ID (0x0C5E)
+#define ZCL_CURRENT_DAY_ALTERNATIVE_MAX_DEMAND_RECEIVED_TIME_ATTRIBUTE_ID (0x0C5F)
+#define ZCL_PREVIOUS_DAY_ALTERNATIVE_MAX_DEMAND_DELIVERED_ATTRIBUTE_ID (0x0C60)
+#define ZCL_PREVIOUS_DAY_ALTERNATIVE_MAX_DEMAND_DELIVERED_TIME_ATTRIBUTE_ID (0x0C61)
+#define ZCL_PREVIOUS_DAY_ALTERNATIVE_MAX_DEMAND_RECEIVED_ATTRIBUTE_ID (0x0C62)
+#define ZCL_PREVIOUS_DAY_ALTERNATIVE_MAX_DEMAND_RECEIVED_TIME_ATTRIBUTE_ID (0x0C63)
+#define ZCL_CURRENT_ACTIVE_SUMMATION_Q1_ATTRIBUTE_ID (0x0D01)
+#define ZCL_CURRENT_ACTIVE_SUMMATION_Q2_ATTRIBUTE_ID (0x0D02)
+#define ZCL_CURRENT_ACTIVE_SUMMATION_Q3_ATTRIBUTE_ID (0x0D03)
+#define ZCL_CURRENT_ACTIVE_SUMMATION_Q4_ATTRIBUTE_ID (0x0D04)
+#define ZCL_CURRENT_REACTIVE_SUMMATION_Q1_ATTRIBUTE_ID (0x0D05)
+#define ZCL_CURRENT_REACTIVE_SUMMATION_Q2_ATTRIBUTE_ID (0x0D06)
+#define ZCL_CURRENT_REACTIVE_SUMMATION_Q3_ATTRIBUTE_ID (0x0D07)
+#define ZCL_CURRENT_REACTIVE_SUMMATION_Q4_ATTRIBUTE_ID (0x0D08)
+
+// Attribute ids for cluster: Messaging
+
+// Client attributes
+
+// Server attributes
+
+// Attribute ids for cluster: Tunneling
+
+// Client attributes
+
+// Server attributes
+#define ZCL_CLOSE_TUNNEL_TIMEOUT_ATTRIBUTE_ID (0x0000)
+
+// Attribute ids for cluster: Prepayment
+
+// Client attributes
+
+// Server attributes
+#define ZCL_PAYMENT_CONTROL_CONFIGURATION_ATTRIBUTE_ID (0x0000)
+#define ZCL_CREDIT_REMAINING_ATTRIBUTE_ID (0x0001)
+#define ZCL_EMERGENCY_CREDIT_REMAINING_ATTRIBUTE_ID (0x0002)
+#define ZCL_CREDIT_STATUS_ATTRIBUTE_ID (0x0003)
+#define ZCL_CREDIT_REMAINING_TIMESTAMP_ATTRIBUTE_ID (0x0004)
+#define ZCL_ACCUMULATED_DEBT_ATTRIBUTE_ID (0x0005)
+#define ZCL_OVERALL_DEBT_CAP_ATTRIBUTE_ID (0x0006)
+#define ZCL_EMERGENCY_CREDIT_LIMIT_ALLOWANCE_ATTRIBUTE_ID (0x0010)
+#define ZCL_EMERGENCY_CREDIT_THRESHOLD_ATTRIBUTE_ID (0x0011)
+#define ZCL_TOTAL_CREDIT_ADDED_ATTRIBUTE_ID (0x0020)
+#define ZCL_MAX_CREDIT_LIMIT_ATTRIBUTE_ID (0x0021)
+#define ZCL_MAX_CREDIT_PER_TOP_UP_ATTRIBUTE_ID (0x0022)
+#define ZCL_FRIENDLY_CREDIT_WARNING_ATTRIBUTE_ID (0x0030)
+#define ZCL_LOW_CREDIT_WARNING_ATTRIBUTE_ID (0x0031)
+#define ZCL_IHD_LOW_CREDIT_WARNING_ATTRIBUTE_ID (0x0032)
+#define ZCL_INTERRUPT_SUSPEND_TIME_ATTRIBUTE_ID (0x0033)
+#define ZCL_REMAINING_FRIENDLY_CREDIT_TIME_ATTRIBUTE_ID (0x0034)
+#define ZCL_NEXT_FRIENDLY_CREDIT_PERIOD_ATTRIBUTE_ID (0x0035)
+#define ZCL_CUT_OFF_VALUE_ATTRIBUTE_ID (0x0040)
+#define ZCL_TOKEN_CARRIER_ID_ATTRIBUTE_ID (0x0080)
+#define ZCL_TOP_UP_DATE_TIME_1_ATTRIBUTE_ID (0x0100)
+#define ZCL_TOP_UP_AMOUNT_1_ATTRIBUTE_ID (0x0101)
+#define ZCL_TOP_UP_ORIGINATING_DEVICE_1_ATTRIBUTE_ID (0x0102)
+#define ZCL_TOP_UP_CODE_1_ATTRIBUTE_ID (0x0103)
+#define ZCL_TOP_UP_DATE_TIME_2_ATTRIBUTE_ID (0x0110)
+#define ZCL_TOP_UP_AMOUNT_2_ATTRIBUTE_ID (0x0111)
+#define ZCL_TOP_UP_ORIGINATING_DEVICE_2_ATTRIBUTE_ID (0x0112)
+#define ZCL_TOP_UP_CODE_2_ATTRIBUTE_ID (0x0113)
+#define ZCL_TOP_UP_DATE_TIME_3_ATTRIBUTE_ID (0x0120)
+#define ZCL_TOP_UP_AMOUNT_3_ATTRIBUTE_ID (0x0121)
+#define ZCL_TOP_UP_ORIGINATING_DEVICE_3_ATTRIBUTE_ID (0x0122)
+#define ZCL_TOP_UP_CODE_3_ATTRIBUTE_ID (0x0123)
+#define ZCL_TOP_UP_DATE_TIME_4_ATTRIBUTE_ID (0x0130)
+#define ZCL_TOP_UP_AMOUNT_4_ATTRIBUTE_ID (0x0131)
+#define ZCL_TOP_UP_ORIGINATING_DEVICE_4_ATTRIBUTE_ID (0x0132)
+#define ZCL_TOP_UP_CODE_4_ATTRIBUTE_ID (0x0133)
+#define ZCL_TOP_UP_DATE_TIME_5_ATTRIBUTE_ID (0x0140)
+#define ZCL_TOP_UP_AMOUNT_5_ATTRIBUTE_ID (0x0141)
+#define ZCL_TOP_UP_ORIGINATING_DEVICE_5_ATTRIBUTE_ID (0x0142)
+#define ZCL_TOP_UP_CODE_5_ATTRIBUTE_ID (0x0143)
+#define ZCL_DEBT_LABEL_1_ATTRIBUTE_ID (0x0210)
+#define ZCL_DEBT_AMOUNT_1_ATTRIBUTE_ID (0x0211)
+#define ZCL_DEBT_RECOVERY_METHOD_1_ATTRIBUTE_ID (0x0212)
+#define ZCL_DEBT_RECOVERY_START_TIME_1_ATTRIBUTE_ID (0x0213)
+#define ZCL_DEBT_RECOVERY_COLLECTION_TIME_1_ATTRIBUTE_ID (0x0214)
+#define ZCL_DEBT_RECOVERY_FREQUENCY_1_ATTRIBUTE_ID (0x0216)
+#define ZCL_DEBT_RECOVERY_AMOUNT_1_ATTRIBUTE_ID (0x0217)
+#define ZCL_DEBT_RECOVERY_TOP_UP_PERCENTAGE_1_ATTRIBUTE_ID (0x0219)
+#define ZCL_DEBT_LABEL_2_ATTRIBUTE_ID (0x0220)
+#define ZCL_DEBT_AMOUNT_2_ATTRIBUTE_ID (0x0221)
+#define ZCL_DEBT_RECOVERY_METHOD_2_ATTRIBUTE_ID (0x0222)
+#define ZCL_DEBT_RECOVERY_START_TIME_2_ATTRIBUTE_ID (0x0223)
+#define ZCL_DEBT_RECOVERY_COLLECTION_TIME_2_ATTRIBUTE_ID (0x0224)
+#define ZCL_DEBT_RECOVERY_FREQUENCY_2_ATTRIBUTE_ID (0x0226)
+#define ZCL_DEBT_RECOVERY_AMOUNT_2_ATTRIBUTE_ID (0x0227)
+#define ZCL_DEBT_RECOVERY_TOP_UP_PERCENTAGE_2_ATTRIBUTE_ID (0x0229)
+#define ZCL_DEBT_LABEL_3_ATTRIBUTE_ID (0x0230)
+#define ZCL_DEBT_AMOUNT_3_ATTRIBUTE_ID (0x0231)
+#define ZCL_DEBT_RECOVERY_METHOD_3_ATTRIBUTE_ID (0x0232)
+#define ZCL_DEBT_RECOVERY_START_TIME_3_ATTRIBUTE_ID (0x0233)
+#define ZCL_DEBT_RECOVERY_COLLECTION_TIME_3_ATTRIBUTE_ID (0x0234)
+#define ZCL_DEBT_RECOVERY_FREQUENCY_3_ATTRIBUTE_ID (0x0236)
+#define ZCL_DEBT_RECOVERY_AMOUNT_3_ATTRIBUTE_ID (0x0237)
+#define ZCL_DEBT_RECOVERY_TOP_UP_PERCENTAGE_3_ATTRIBUTE_ID (0x0239)
+#define ZCL_PREPAYMENT_ALARM_STATUS_ATTRIBUTE_ID (0x0400)
+#define ZCL_PREPAY_GENERIC_ALARM_MASK_ATTRIBUTE_ID (0x0401)
+#define ZCL_PREPAY_SWITCH_ALARM_MASK_ATTRIBUTE_ID (0x0402)
+#define ZCL_PREPAY_EVENT_ALARM_MASK_ATTRIBUTE_ID (0x0403)
+#define ZCL_HISTORICAL_COST_CONSUMPTION_FORMATTING_ATTRIBUTE_ID (0x0500)
+#define ZCL_CONSUMPTION_UNIT_OF_MEASUREMENT_ATTRIBUTE_ID (0x0501)
+#define ZCL_CURRENCY_SCALING_FACTOR_ATTRIBUTE_ID (0x0502)
+#define ZCL_PREPAYMANT_CURRENCY_ATTRIBUTE_ID (0x0503)
+#define ZCL_CURRENT_DAY_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x051C)
+#define ZCL_CURRENT_DAY_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x051D)
+#define ZCL_PREVIOUS_DAY_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x051E)
+#define ZCL_PREVIOUS_DAY_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x051F)
+#define ZCL_PREVIOUS_DAY_2_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0520)
+#define ZCL_PREVIOUS_DAY_2_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0521)
+#define ZCL_PREVIOUS_DAY_3_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0522)
+#define ZCL_PREVIOUS_DAY_3_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0523)
+#define ZCL_PREVIOUS_DAY_4_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0524)
+#define ZCL_PREVIOUS_DAY_4_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0525)
+#define ZCL_PREVIOUS_DAY_5_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0526)
+#define ZCL_PREVIOUS_DAY_5_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0527)
+#define ZCL_PREVIOUS_DAY_6_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0528)
+#define ZCL_PREVIOUS_DAY_6_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0529)
+#define ZCL_PREVIOUS_DAY_7_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x052A)
+#define ZCL_PREVIOUS_DAY_7_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x052B)
+#define ZCL_PREVIOUS_DAY_8_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x052C)
+#define ZCL_PREVIOUS_DAY_8_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x052D)
+#define ZCL_CURRENT_WEEK_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0530)
+#define ZCL_CURRENT_WEEK_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0531)
+#define ZCL_PREVIOUS_WEEK_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0532)
+#define ZCL_PREVIOUS_WEEK_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0533)
+#define ZCL_PREVIOUS_WEEK_2_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0534)
+#define ZCL_PREVIOUS_WEEK_2_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0535)
+#define ZCL_PREVIOUS_WEEK_3_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0536)
+#define ZCL_PREVIOUS_WEEK_3_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0537)
+#define ZCL_PREVIOUS_WEEK_4_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0538)
+#define ZCL_PREVIOUS_WEEK_4_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0539)
+#define ZCL_PREVIOUS_WEEK_5_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x053A)
+#define ZCL_PREVIOUS_WEEK_5_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x053B)
+#define ZCL_CURRENT_MONTH_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0540)
+#define ZCL_CURRENT_MONTH_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0541)
+#define ZCL_PREVIOUS_MONTH_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0542)
+#define ZCL_PREVIOUS_MONTH_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0543)
+#define ZCL_PREVIOUS_MONTH_2_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0544)
+#define ZCL_PREVIOUS_MONTH_2_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0545)
+#define ZCL_PREVIOUS_MONTH_3_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0546)
+#define ZCL_PREVIOUS_MONTH_3_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0547)
+#define ZCL_PREVIOUS_MONTH_4_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0548)
+#define ZCL_PREVIOUS_MONTH_4_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0549)
+#define ZCL_PREVIOUS_MONTH_5_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x054A)
+#define ZCL_PREVIOUS_MONTH_5_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x054B)
+#define ZCL_PREVIOUS_MONTH_6_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x054C)
+#define ZCL_PREVIOUS_MONTH_6_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x054D)
+#define ZCL_PREVIOUS_MONTH_7_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x054E)
+#define ZCL_PREVIOUS_MONTH_7_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x054F)
+#define ZCL_PREVIOUS_MONTH_8_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0550)
+#define ZCL_PREVIOUS_MONTH_8_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0551)
+#define ZCL_PREVIOUS_MONTH_9_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0552)
+#define ZCL_PREVIOUS_MONTH_9_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0553)
+#define ZCL_PREVIOUS_MONTH_10_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0554)
+#define ZCL_PREVIOUS_MONTH_10_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0555)
+#define ZCL_PREVIOUS_MONTH_11_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0556)
+#define ZCL_PREVIOUS_MONTH_11_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0557)
+#define ZCL_PREVIOUS_MONTH_12_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0558)
+#define ZCL_PREVIOUS_MONTH_12_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0559)
+#define ZCL_PREVIOUS_MONTH_13_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x055A)
+#define ZCL_PREVIOUS_MONTH_13_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x055B)
+#define ZCL_PREPAYMENT_HISTORICAL_FREEZE_TIME_ATTRIBUTE_ID (0x055C)
+
+// Attribute ids for cluster: Energy Management
+
+// Client attributes
+
+// Server attributes
+#define ZCL_LOAD_CONTROL_STATE_ATTRIBUTE_ID (0x0000)
+#define ZCL_CURRENT_EVENT_ID_ATTRIBUTE_ID (0x0001)
+#define ZCL_CURRENT_EVENT_STATUS_ATTRIBUTE_ID (0x0002)
+#define ZCL_CONFORMANCE_LEVEL_ATTRIBUTE_ID (0x0003)
+#define ZCL_MINIMUM_OFF_TIME_ATTRIBUTE_ID (0x0004)
+#define ZCL_MINIMUM_ON_TIME_ATTRIBUTE_ID (0x0005)
+#define ZCL_MINIMUM_CYCLE_PERIOD_ATTRIBUTE_ID (0x0006)
+
+// Attribute ids for cluster: Calendar
+
+// Client attributes
+
+// Server attributes
+#define ZCL_AUXILIARY_SWITCH_1_LABEL_ATTRIBUTE_ID (0x0000)
+#define ZCL_AUXILIARY_SWITCH_2_LABEL_ATTRIBUTE_ID (0x0001)
+#define ZCL_AUXILIARY_SWITCH_3_LABEL_ATTRIBUTE_ID (0x0002)
+#define ZCL_AUXILIARY_SWITCH_4_LABEL_ATTRIBUTE_ID (0x0003)
+#define ZCL_AUXILIARY_SWITCH_5_LABEL_ATTRIBUTE_ID (0x0004)
+#define ZCL_AUXILIARY_SWITCH_6_LABEL_ATTRIBUTE_ID (0x0005)
+#define ZCL_AUXILIARY_SWITCH_7_LABEL_ATTRIBUTE_ID (0x0006)
+#define ZCL_AUXILIARY_SWITCH_8_LABEL_ATTRIBUTE_ID (0x0007)
+
+// Attribute ids for cluster: Device Management
+
+// Client attributes
+#define ZCL_PROVIDER_ID_CLIENT_ATTRIBUTE_ID (0x0000)
+#define ZCL_RECEIVED_PROVIDER_ID_CLIENT_ATTRIBUTE_ID (0x0010)
+#define ZCL_TOU_TARIFF_ACTIVATION_ATTRIBUTE_ID (0x0100)
+#define ZCL_BLOCK_TARIFF_ACTIVATED_ATTRIBUTE_ID (0x0101)
+#define ZCL_BLOCK_TOU_TARIFF_ACTIVATED_ATTRIBUTE_ID (0x0102)
+#define ZCL_SINGLE_TARIFF_RATE_ACTIVATED_ATTRIBUTE_ID (0x0103)
+#define ZCL_ASYNCHRONOUS_BILLING_OCCURRED_ATTRIBUTE_ID (0x0104)
+#define ZCL_SYNCHRONOUS_BILLING_OCCURRED_ATTRIBUTE_ID (0x0105)
+#define ZCL_TARIFF_NOT_SUPPORTED_ATTRIBUTE_ID (0x0106)
+#define ZCL_PRICE_CLUSTER_NOT_FOUND_ATTRIBUTE_ID (0x0107)
+#define ZCL_CURRENCY_CHANGE_PASSIVE_ACTIVATED_ATTRIBUTE_ID (0x0108)
+#define ZCL_CURRENCY_CHANGE_PASSIVE_UPDATED_ATTRIBUTE_ID (0x0109)
+#define ZCL_PRICE_MATRIX_PASSIVE_ACTIVATED_ATTRIBUTE_ID (0x010A)
+#define ZCL_PRICE_MATRIX_PASSIVE_UPDATED_ATTRIBUTE_ID (0x010B)
+#define ZCL_TARIFF_CHANGE_PASSIVE_ACTIVATED_ATTRIBUTE_ID (0x010C)
+#define ZCL_TARIFF_CHANGE_PASSIVE_UPDATED_ATTRIBUTE_ID (0x010D)
+#define ZCL_PUBLISH_PRICE_RECEIVED_ATTRIBUTE_ID (0x01B0)
+#define ZCL_PUBLISH_PRICE_ACTIONED_ATTRIBUTE_ID (0x01B1)
+#define ZCL_PUBLISH_PRICE_CANCELLED_ATTRIBUTE_ID (0x01B2)
+#define ZCL_PUBLISH_PRICE_REJECTED_ATTRIBUTE_ID (0x01B3)
+#define ZCL_PUBLISH_TARIFF_INFO_RECEIVED_ATTRIBUTE_ID (0x01B4)
+#define ZCL_PUBLISH_TARIFF_INFO_ACTIONED_ATTRIBUTE_ID (0x01B5)
+#define ZCL_PUBLISH_TARIFF_INFO_CANCELLED_ATTRIBUTE_ID (0x01B6)
+#define ZCL_PUBLISH_TARIFF_INFO_REJECTED_ATTRIBUTE_ID (0x01B7)
+#define ZCL_PUBLISH_PRICE_MATRIX_RECEIVED_ATTRIBUTE_ID (0x01B8)
+#define ZCL_PUBLISH_PRICE_MATRIX_ACTIONED_ATTRIBUTE_ID (0x01B9)
+#define ZCL_PUBLISH_PRICE_MATRIX_CANCELLED_ATTRIBUTE_ID (0x01BA)
+#define ZCL_PUBLISH_PRICE_MATRIX_REJECTED_ATTRIBUTE_ID (0x01BB)
+#define ZCL_PUBLISH_BLOCK_THRESHOLDS_RECEIVED_ATTRIBUTE_ID (0x01BC)
+#define ZCL_PUBLISH_BLOCK_THRESHOLDS_ACTIONED_ATTRIBUTE_ID (0x01BD)
+#define ZCL_PUBLISH_BLOCK_THRESHOLDS_CANCELLED_ATTRIBUTE_ID (0x01BE)
+#define ZCL_PUBLISH_BLOCK_THRESHOLDS_REJECTED_ATTRIBUTE_ID (0x01BF)
+#define ZCL_PUBLISH_CALORIFIC_VALUE_RECEIVED_ATTRIBUTE_ID (0x01C0)
+#define ZCL_PUBLISH_CALORIFIC_VALUE_ACTIONED_ATTRIBUTE_ID (0x01C1)
+#define ZCL_PUBLISH_CALORIFIC_VALUE_CANCELLED_ATTRIBUTE_ID (0x01C2)
+#define ZCL_PUBLISH_CALORIFIC_VALUE_REJECTED_ATTRIBUTE_ID (0x01C3)
+#define ZCL_PUBLISH_CONVERSION_FACTOR_RECEIVED_ATTRIBUTE_ID (0x01C4)
+#define ZCL_PUBLISH_CONVERSION_FACTOR_ACTIONED_ATTRIBUTE_ID (0x01C5)
+#define ZCL_PUBLISH_CONVERSION_FACTOR_CANCELLED_ATTRIBUTE_ID (0x01C6)
+#define ZCL_PUBLISH_CONVERSION_FACTOR_REJECTED_ATTRIBUTE_ID (0x01C7)
+#define ZCL_PUBLISH_CO2_VALUE_RECEIVED_ATTRIBUTE_ID (0x01C8)
+#define ZCL_PUBLISH_CO2_VALUE_ACTIONED_ATTRIBUTE_ID (0x01C9)
+#define ZCL_PUBLISH_CO2_VALUE_CANCELLED_ATTRIBUTE_ID (0x01CA)
+#define ZCL_PUBLISH_CO2_VALUE_REJECTED_ATTRIBUTE_ID (0x01CB)
+#define ZCL_PUBLISH_CPP_EVENT_RECEIVED_ATTRIBUTE_ID (0x01CC)
+#define ZCL_PUBLISH_CPP_EVENT_ACTIONED_ATTRIBUTE_ID (0x01CD)
+#define ZCL_PUBLISH_CPP_EVENT_CANCELLED_ATTRIBUTE_ID (0x01CE)
+#define ZCL_PUBLISH_CPP_EVENT_REJECTED_ATTRIBUTE_ID (0x01CF)
+#define ZCL_PUBLISH_TIER_LABELS_RECEIVED_ATTRIBUTE_ID (0x01D0)
+#define ZCL_PUBLISH_TIER_LABELS_ACTIONED_ATTRIBUTE_ID (0x01D1)
+#define ZCL_PUBLISH_TIER_LABELS_CANCELLED_ATTRIBUTE_ID (0x01D2)
+#define ZCL_PUBLISH_TIER_LABELS_REJECTED_ATTRIBUTE_ID (0x01D3)
+#define ZCL_PUBLISH_BILLING_PERIOD_RECEIVED_ATTRIBUTE_ID (0x01D4)
+#define ZCL_PUBLISH_BILLING_PERIOD_ACTIONED_ATTRIBUTE_ID (0x01D5)
+#define ZCL_PUBLISH_BILLING_PERIOD_CANCELLED_ATTRIBUTE_ID (0x01D6)
+#define ZCL_PUBLISH_BILLING_PERIOD_REJECTED_ATTRIBUTE_ID (0x01D7)
+#define ZCL_PUBLISH_CONSOLIDATED_BILL_RECEIVED_ATTRIBUTE_ID (0x01D8)
+#define ZCL_PUBLISH_CONSOLIDATED_BILL_ACTIONED_ATTRIBUTE_ID (0x01D9)
+#define ZCL_PUBLISH_CONSOLIDATED_BILL_CANCELLED_ATTRIBUTE_ID (0x01DA)
+#define ZCL_PUBLISH_CONSOLIDATED_BILL_REJECTED_ATTRIBUTE_ID (0x01DB)
+#define ZCL_PUBLISH_BLOCK_PERIOD_RECEIVED_ATTRIBUTE_ID (0x01DC)
+#define ZCL_PUBLISH_BLOCK_PERIOD_ACTIONED_ATTRIBUTE_ID (0x01DD)
+#define ZCL_PUBLISH_BLOCK_PERIOD_CANCELLED_ATTRIBUTE_ID (0x01DE)
+#define ZCL_PUBLISH_BLOCK_PERIOD_REJECTED_ATTRIBUTE_ID (0x01DF)
+#define ZCL_PUBLISH_CREDIT_PAYMENT_INFO_RECEIVED_ATTRIBUTE_ID (0x01E0)
+#define ZCL_PUBLISH_CREDIT_PAYMENT_INFO_ACTIONED_ATTRIBUTE_ID (0x01E1)
+#define ZCL_PUBLISH_CREDIT_PAYMENT_INFO_CANCELLED_ATTRIBUTE_ID (0x01E2)
+#define ZCL_PUBLISH_CREDIT_PAYMENT_INFO_REJECTED_ATTRIBUTE_ID (0x01E3)
+#define ZCL_PUBLISH_CURRENCY_CONVERSION_RECEIVED_ATTRIBUTE_ID (0x01E4)
+#define ZCL_PUBLISH_CURRENCY_CONVERSION_ACTIONED_ATTRIBUTE_ID (0x01E5)
+#define ZCL_PUBLISH_CURRENCY_CONVERSION_CANCELLED_ATTRIBUTE_ID (0x01E6)
+#define ZCL_PUBLISH_CURRENCY_CONVERSION_REJECTED_ATTRIBUTE_ID (0x01E7)
+#define ZCL_CHECK_METER_ATTRIBUTE_ID (0x0200)
+#define ZCL_LOW_BATTERY_ATTRIBUTE_ID (0x0201)
+#define ZCL_TAMPER_DETECT_ATTRIBUTE_ID (0x0202)
+#define ZCL_DEVICE_MANAGEMENT_SUPPLY_STATUS_ATTRIBUTE_ID (0x0203)
+#define ZCL_SUPPLY_QUALITY_ATTRIBUTE_ID (0x0204)
+#define ZCL_LEAK_DETECT_ATTRIBUTE_ID (0x0205)
+#define ZCL_SERVICE_DISCONNECT_ATTRIBUTE_ID (0x0206)
+#define ZCL_REVERSE_FLOW_GENERAL_ATTRIBUTE_ID (0x0207)
+#define ZCL_METER_COVER_REMOVED_ATTRIBUTE_ID (0x0208)
+#define ZCL_METER_COVER_CLOSED_ATTRIBUTE_ID (0x0209)
+#define ZCL_STRONG_MAGNETIC_FIELD_ATTRIBUTE_ID (0x020A)
+#define ZCL_NO_STRONG_MAGNETIC_FIELD_ATTRIBUTE_ID (0x020B)
+#define ZCL_BATTERY_FAILURE_ATTRIBUTE_ID (0x020C)
+#define ZCL_PROGRAM_MEMORY_ERROR_ATTRIBUTE_ID (0x020D)
+#define ZCL_RAM_ERROR_ATTRIBUTE_ID (0x020E)
+#define ZCL_NV_MEMORY_ERROR_ATTRIBUTE_ID (0x020F)
+#define ZCL_LOW_VOLTAGE_L1_ATTRIBUTE_ID (0x0210)
+#define ZCL_HIGH_VOLTAGE_L1_ATTRIBUTE_ID (0x0211)
+#define ZCL_LOW_VOLTAGE_L2_ATTRIBUTE_ID (0x0212)
+#define ZCL_HIGH_VOLTAGE_L2_ATTRIBUTE_ID (0x0213)
+#define ZCL_LOW_VOLTAGE_L3_ATTRIBUTE_ID (0x0214)
+#define ZCL_HIGH_VOLTAGE_L3_ATTRIBUTE_ID (0x0215)
+#define ZCL_OVER_CURRENT_L1_ATTRIBUTE_ID (0x0216)
+#define ZCL_OVER_CURRENT_L2_ATTRIBUTE_ID (0x0217)
+#define ZCL_OVER_CURRENT_L3_ATTRIBUTE_ID (0x0218)
+#define ZCL_FREQUENCY_TOO_LOW_L1_ATTRIBUTE_ID (0x0219)
+#define ZCL_FREQUENCY_TOO_HIGH_L1_ATTRIBUTE_ID (0x021A)
+#define ZCL_FREQUENCY_TOO_LOW_L2_ATTRIBUTE_ID (0x021B)
+#define ZCL_FREQUENCY_TOO_HIGH_L2_ATTRIBUTE_ID (0x021C)
+#define ZCL_FREQUENCY_TOO_LOW_L3_ATTRIBUTE_ID (0x021D)
+#define ZCL_FREQUENCY_TOO_HIGH_L3_ATTRIBUTE_ID (0x021E)
+#define ZCL_GROUND_FAULT_ATTRIBUTE_ID (0x021F)
+#define ZCL_ELECTRIC_TAMPER_DETECT_ATTRIBUTE_ID (0x0220)
+#define ZCL_INCORRECT_POLARITY_ATTRIBUTE_ID (0x0221)
+#define ZCL_CURRENT_NO_VOLTAGE_ATTRIBUTE_ID (0x0222)
+#define ZCL_UNDER_VOLTAGE_ATTRIBUTE_ID (0x0223)
+#define ZCL_OVER_VOLTAGE_ATTRIBUTE_ID (0x0224)
+#define ZCL_NORMAL_VOLTAGE_ATTRIBUTE_ID (0x0225)
+#define ZCL_PF_BELOW_THRESHOLD_ATTRIBUTE_ID (0x0226)
+#define ZCL_PF_ABOVE_THRESHOLD_ATTRIBUTE_ID (0x0227)
+#define ZCL_TERMINAL_COVER_REMOVED_ATTRIBUTE_ID (0x0228)
+#define ZCL_TERMINAL_COVER_CLOSED_ATTRIBUTE_ID (0x0229)
+#define ZCL_BURST_DETECT_ATTRIBUTE_ID (0x0230)
+#define ZCL_PRESSURE_TOO_LOW_ATTRIBUTE_ID (0x0231)
+#define ZCL_PRESSURE_TOO_HIGH_ATTRIBUTE_ID (0x0232)
+#define ZCL_FLOW_SENSOR_COMMUNICATION_ERROR_ATTRIBUTE_ID (0x0233)
+#define ZCL_FLOW_SENSOR_MEASUREMENT_FAULT_ATTRIBUTE_ID (0x0234)
+#define ZCL_FLOW_SENSOR_REVERSE_FLOW_ATTRIBUTE_ID (0x0235)
+#define ZCL_FLOW_SENSOR_AIR_DETECT_ATTRIBUTE_ID (0x0236)
+#define ZCL_PIPE_EMPTY_ATTRIBUTE_ID (0x0237)
+#define ZCL_INLET_TEMP_SENSOR_FAULT_ATTRIBUTE_ID (0x0250)
+#define ZCL_OUTLET_TEMP_SENSOR_FAULT_ATTRIBUTE_ID (0x0251)
+#define ZCL_REVERSE_FLOW_ATTRIBUTE_ID (0x0260)
+#define ZCL_TILT_TAMPER_ATTRIBUTE_ID (0x0261)
+#define ZCL_BATTERY_COVER_REMOVED_ATTRIBUTE_ID (0x0262)
+#define ZCL_BATTERY_COVER_CLOSED_ATTRIBUTE_ID (0x0263)
+#define ZCL_EXCESS_FLOW_ATTRIBUTE_ID (0x0264)
+#define ZCL_TILT_TAMPER_ENABLED_ATTRIBUTE_ID (0x0265)
+#define ZCL_MEASUREMENT_SYSTEM_ERROR_ATTRIBUTE_ID (0x0270)
+#define ZCL_WATCHDOG_ERROR_ATTRIBUTE_ID (0x0271)
+#define ZCL_SUPPLY_DISCONNECT_FAILURE_ATTRIBUTE_ID (0x0272)
+#define ZCL_SUPPLY_CONNECT_FAILURE_ATTRIBUTE_ID (0x0273)
+#define ZCL_MEASUREMENT_SOFTWARE_CHANGED_ATTRIBUTE_ID (0x0274)
+#define ZCL_DST_ENABLED_ATTRIBUTE_ID (0x0275)
+#define ZCL_DST_DISABLED_ATTRIBUTE_ID (0x0276)
+#define ZCL_CLOCK_ADJ_BACKWARD_ATTRIBUTE_ID (0x0277)
+#define ZCL_CLOCK_ADJ_FORWARD_ATTRIBUTE_ID (0x0278)
+#define ZCL_CLOCK_INVALID_ATTRIBUTE_ID (0x0279)
+#define ZCL_COMMUNICATION_ERROR_HAN_ATTRIBUTE_ID (0x027A)
+#define ZCL_COMMUNICATION_OK_HAN_ATTRIBUTE_ID (0x027B)
+#define ZCL_METER_FRAUD_ATTEMPT_ATTRIBUTE_ID (0x027C)
+#define ZCL_POWER_LOSS_ATTRIBUTE_ID (0x027D)
+#define ZCL_UNUSUAL_HAN_TRAFFIC_ATTRIBUTE_ID (0x027E)
+#define ZCL_UNEXPECTED_CLOCK_CHANGE_ATTRIBUTE_ID (0x027F)
+#define ZCL_COMMS_USING_UNAUTHENTICATED_COMPONENT_ATTRIBUTE_ID (0x0280)
+#define ZCL_METERING_ERROR_REG_CLEAR_ATTRIBUTE_ID (0x0281)
+#define ZCL_METERING_ALARM_REG_CLEAR_ATTRIBUTE_ID (0x0282)
+#define ZCL_UNEXPECTED_HW_RESET_ATTRIBUTE_ID (0x0283)
+#define ZCL_UNEXPECTED_PROGRAM_EXECUTION_ATTRIBUTE_ID (0x0284)
+#define ZCL_LIMIT_THRESHOLD_EXCEEDED_ATTRIBUTE_ID (0x0285)
+#define ZCL_LIMIT_THRESHOLD_OK_ATTRIBUTE_ID (0x0286)
+#define ZCL_LIMIT_THRESHOLD_CHANGED_ATTRIBUTE_ID (0x0287)
+#define ZCL_MAXIMUM_DEMAND_EXCEEDED_ATTRIBUTE_ID (0x0288)
+#define ZCL_PROFILE_CLEARED_ATTRIBUTE_ID (0x0289)
+#define ZCL_LOAD_PROFILE_CLEARED_ATTRIBUTE_ID (0x028A)
+#define ZCL_BATTERY_WARN_ATTRIBUTE_ID (0x028B)
+#define ZCL_WRONG_SIGNATURE_ATTRIBUTE_ID (0x028C)
+#define ZCL_NO_SIGNATURE_ATTRIBUTE_ID (0x028D)
+#define ZCL_SIGNATURE_NOT_VALID_ATTRIBUTE_ID (0x028E)
+#define ZCL_UNAUTHORISE_ACTION_FROM_HAN_ATTRIBUTE_ID (0x028F)
+#define ZCL_FAST_POLLING_START_ATTRIBUTE_ID (0x0290)
+#define ZCL_FAST_POLLING_END_ATTRIBUTE_ID (0x0291)
+#define ZCL_METER_REPORTING_INTERVAL_CHANGED_ATTRIBUTE_ID (0x0292)
+#define ZCL_DISCONNECT_TO_LOAD_LIMIT_ATTRIBUTE_ID (0x0293)
+#define ZCL_METER_SUPPLY_STATUS_REGISTER_CHANGED_ATTRIBUTE_ID (0x0294)
+#define ZCL_METER_ALARM_STATUS_REGISTER_CHANGED_ATTRIBUTE_ID (0x0295)
+#define ZCL_EXTENDED_METER_ALARM_STATUS_REGISTER_CHANGED_ATTRIBUTE_ID (0x0296)
+#define ZCL_DATA_ACCESS_VIA_LOCAL_PORT_ATTRIBUTE_ID (0x0297)
+#define ZCL_CONFIGURE_MIRROR_SUCCESS_ATTRIBUTE_ID (0x0298)
+#define ZCL_CONFIGURE_MIRROR_FAILURE_ATTRIBUTE_ID (0x0299)
+#define ZCL_CONFIGURE_NOTIFICATION_FLAG_SCHEME_SUCCESS_ATTRIBUTE_ID (0x029A)
+#define ZCL_CONFIGURE_NOTIFICATION_FLAG_SCHEME_FAILURE_ATTRIBUTE_ID (0x029B)
+#define ZCL_CONFIGURE_NOTIFICATION_FLAGS_SUCCESS_ATTRIBUTE_ID (0x029C)
+#define ZCL_CONFIGURE_NOTIFICATION_FLAGS_FAILURE_ATTRIBUTE_ID (0x029D)
+#define ZCL_STAY_AWAKE_REQUEST_HAN_ATTRIBUTE_ID (0x029E)
+#define ZCL_STAY_AWAKE_REQUEST_WAN_ATTRIBUTE_ID (0x029F)
+#define ZCL_MANUFACTURER_SPECIFIC_A_ATTRIBUTE_ID (0x02B0)
+#define ZCL_MANUFACTURER_SPECIFIC_B_ATTRIBUTE_ID (0x02B1)
+#define ZCL_MANUFACTURER_SPECIFIC_C_ATTRIBUTE_ID (0x02B2)
+#define ZCL_MANUFACTURER_SPECIFIC_D_ATTRIBUTE_ID (0x02B3)
+#define ZCL_MANUFACTURER_SPECIFIC_E_ATTRIBUTE_ID (0x02B4)
+#define ZCL_MANUFACTURER_SPECIFIC_F_ATTRIBUTE_ID (0x02B5)
+#define ZCL_MANUFACTURER_SPECIFIC_G_ATTRIBUTE_ID (0x02B6)
+#define ZCL_MANUFACTURER_SPECIFIC_H_ATTRIBUTE_ID (0x02B7)
+#define ZCL_MANUFACTURER_SPECIFIC_I_ATTRIBUTE_ID (0x02B8)
+#define ZCL_GET_PROFILE_COMMAND_RECEIVED_ATTRIBUTE_ID (0x02C0)
+#define ZCL_GET_PROFILE_COMMAND_ACTIONED_ATTRIBUTE_ID (0x02C1)
+#define ZCL_GET_PROFILE_COMMAND_CANCELLED_ATTRIBUTE_ID (0x02C2)
+#define ZCL_GET_PROFILE_COMMAND_REJECTED_ATTRIBUTE_ID (0x02C3)
+#define ZCL_REQUEST_MIRROR_RESPONSE_COMMAND_RECEIVED_ATTRIBUTE_ID (0x02C4)
+#define ZCL_REQUEST_MIRROR_RESPONSE_COMMAND_ACTIONED_ATTRIBUTE_ID (0x02C5)
+#define ZCL_REQUEST_MIRROR_RESPONSE_COMMAND_CANCELLED_ATTRIBUTE_ID (0x02C6)
+#define ZCL_REQUEST_MIRROR_RESPONSE_COMMAND_REJECTED_ATTRIBUTE_ID (0x02C7)
+#define ZCL_MIRROR_REMOVED_COMMAND_RECEIVED_ATTRIBUTE_ID (0x02C8)
+#define ZCL_MIRROR_REMOVED_COMMAND_ACTIONED_ATTRIBUTE_ID (0x02C9)
+#define ZCL_MIRROR_REMOVED_COMMAND_CANCELLED_ATTRIBUTE_ID (0x02CA)
+#define ZCL_MIRROR_REMOVED_COMMAND_REJECTED_ATTRIBUTE_ID (0x02CB)
+#define ZCL_GET_SNAPSHOT_COMMAND_RECEIVED_ATTRIBUTE_ID (0x02CC)
+#define ZCL_GET_SNAPSHOT_COMMAND_ACTIONED_ATTRIBUTE_ID (0x02CD)
+#define ZCL_GET_SNAPSHOT_COMMAND_CANCELLED_ATTRIBUTE_ID (0x02CE)
+#define ZCL_GET_SNAPSHOT_COMMAND_REJECTED_ATTRIBUTE_ID (0x02CF)
+#define ZCL_TAKE_SNAPSHOT_COMMAND_RECEIVED_ATTRIBUTE_ID (0x02D0)
+#define ZCL_TAKE_SNAPSHOT_COMMAND_ACTIONED_ATTRIBUTE_ID (0x02D1)
+#define ZCL_TAKE_SNAPSHOT_COMMAND_CANCELLED_ATTRIBUTE_ID (0x02D2)
+#define ZCL_TAKE_SNAPSHOT_COMMAND_REJECTED_ATTRIBUTE_ID (0x02D3)
+#define ZCL_MIRROR_REPORT_ATTRIBUTE_RESPONSE_COMMAND_RECEIVED_ATTRIBUTE_ID (0x02D4)
+#define ZCL_MIRROR_REPORT_ATTRIBUTE_RESPONSE_COMMAND_ACTIONED_ATTRIBUTE_ID (0x02D5)
+#define ZCL_MIRROR_REPORT_ATTRIBUTE_RESPONSE_COMMAND_CANCELLED_ATTRIBUTE_ID (0x02D6)
+#define ZCL_MIRROR_REPORT_ATTRIBUTE_RESPONSE_COMMAND_REJECTED_ATTRIBUTE_ID (0x02D7)
+#define ZCL_SCHEDULE_SNAPSHOT_COMMAND_RECEIVED_ATTRIBUTE_ID (0x02D8)
+#define ZCL_SCHEDULE_SNAPSHOT_COMMAND_ACTIONED_ATTRIBUTE_ID (0x02D9)
+#define ZCL_SCHEDULE_SNAPSHOT_COMMAND_CANCELLED_ATTRIBUTE_ID (0x02DA)
+#define ZCL_SCHEDULE_SNAPSHOT_COMMAND_REJECTED_ATTRIBUTE_ID (0x02DB)
+#define ZCL_START_SAMPLING_COMMAND_RECEIVED_ATTRIBUTE_ID (0x02DC)
+#define ZCL_START_SAMPLING_COMMAND_ACTIONED_ATTRIBUTE_ID (0x02DD)
+#define ZCL_START_SAMPLING_COMMAND_CANCELLED_ATTRIBUTE_ID (0x02DE)
+#define ZCL_START_SAMPLING_COMMAND_REJECTED_ATTRIBUTE_ID (0x02DF)
+#define ZCL_GET_SAMPLED_DATA_COMMAND_RECEIVED_ATTRIBUTE_ID (0x02E0)
+#define ZCL_GET_SAMPLED_DATA_COMMAND_ACTIONED_ATTRIBUTE_ID (0x02E1)
+#define ZCL_GET_SAMPLED_DATA_COMMAND_CANCELLED_ATTRIBUTE_ID (0x02E2)
+#define ZCL_GET_SAMPLED_DATA_COMMAND_REJECTED_ATTRIBUTE_ID (0x02E3)
+#define ZCL_SUPPLY_ON_ATTRIBUTE_ID (0x02E4)
+#define ZCL_SUPPLY_ARMED_ATTRIBUTE_ID (0x02E5)
+#define ZCL_SUPPLY_OFF_ATTRIBUTE_ID (0x02E6)
+#define ZCL_DISCONNECTED_DUE_TO_TAMPER_DETECTED_ATTRIBUTE_ID (0x02E7)
+#define ZCL_MANUAL_DISCONNECT_ATTRIBUTE_ID (0x02E8)
+#define ZCL_MANUAL_CONNECT_ATTRIBUTE_ID (0x02E9)
+#define ZCL_REMOTE_DISCONNECTION_ATTRIBUTE_ID (0x02EA)
+#define ZCL_REMOTE_CONNECT_ATTRIBUTE_ID (0x02EB)
+#define ZCL_LOCAL_DISCONNECTION_ATTRIBUTE_ID (0x02EC)
+#define ZCL_LOCAL_CONNECT_ATTRIBUTE_ID (0x02ED)
+#define ZCL_CHANGE_SUPPLY_RECEIVED_ATTRIBUTE_ID (0x02EE)
+#define ZCL_CHANGE_SUPPLY_ACTIONED_ATTRIBUTE_ID (0x02EF)
+#define ZCL_CHANGE_SUPPLY_CANCELLED_ATTRIBUTE_ID (0x02F0)
+#define ZCL_CHANGE_SUPPLY_REJECTED_ATTRIBUTE_ID (0x02F1)
+#define ZCL_LOCAL_CHANGE_SUPPLY_RECEIVED_ATTRIBUTE_ID (0x02F2)
+#define ZCL_LOCAL_CHANGE_SUPPLY_ACTIONED_ATTRIBUTE_ID (0x02F3)
+#define ZCL_LOCAL_CHANGE_SUPPLY_CANCELLED_ATTRIBUTE_ID (0x02F4)
+#define ZCL_LOCAL_CHANGE_SUPPLY_REJECTED_ATTRIBUTE_ID (0x02F5)
+#define ZCL_PUBLISH_UNCONTROLLED_FLOW_THRESHOLD_RECEIVED_ATTRIBUTE_ID (0x02F6)
+#define ZCL_PUBLISH_UNCONTROLLED_FLOW_THRESHOLD_ACTIONED_ATTRIBUTE_ID (0x02F7)
+#define ZCL_PUBLISH_UNCONTROLLED_FLOW_THRESHOLD_CANCELLED_ATTRIBUTE_ID (0x02F8)
+#define ZCL_PUBLISH_UNCONTROLLED_FLOW_THRESHOLD_REJECTED_ATTRIBUTE_ID (0x02F9)
+#define ZCL_MESSAGE_CONFIRMATION_SENT_ATTRIBUTE_ID (0x0300)
+#define ZCL_DISPLAY_MESSAGE_RECEIVED_ATTRIBUTE_ID (0x03C0)
+#define ZCL_DISPLAY_MESSAGE_ACTIONED_ATTRIBUTE_ID (0x03C1)
+#define ZCL_DISPLAY_MESSAGE_CANCELLED_ATTRIBUTE_ID (0x03C2)
+#define ZCL_DISPLAY_MESSAGE_REJECTED_ATTRIBUTE_ID (0x03C3)
+#define ZCL_CANCEL_MESSAGE_RECEIVED_ATTRIBUTE_ID (0x03C4)
+#define ZCL_CANCEL_MESSAGE_ACTIONED_ATTRIBUTE_ID (0x03C5)
+#define ZCL_CANCEL_MESSAGE_CANCELLED_ATTRIBUTE_ID (0x03C6)
+#define ZCL_CANCEL_MESSAGE_REJECTED_ATTRIBUTE_ID (0x03C7)
+#define ZCL_LOW_CREDIT_ATTRIBUTE_ID (0x0400)
+#define ZCL_NO_CREDIT_ATTRIBUTE_ID (0x0401)
+#define ZCL_CREDIT_EXHAUSTED_ATTRIBUTE_ID (0x0402)
+#define ZCL_EMERGENCY_CREDIT_ENABLED_ATTRIBUTE_ID (0x0403)
+#define ZCL_EMERGENCY_CREDIT_EXHAUSTED_ATTRIBUTE_ID (0x0404)
+#define ZCL_PREPAY_IHD_LOW_CREDIT_WARNING_ATTRIBUTE_ID (0x0405)
+#define ZCL_PHYSICAL_ATTACK_ON_THE_PREPAY_METER_ATTRIBUTE_ID (0x0420)
+#define ZCL_ELECTRONIC_ATTACK_ON_THE_PREPAY_METER_ATTRIBUTE_ID (0x0421)
+#define ZCL_DISCOUNT_APPLIED_ATTRIBUTE_ID (0x0422)
+#define ZCL_CREDIT_ADJUSTMENT_ATTRIBUTE_ID (0x0423)
+#define ZCL_CREDIT_ADJUST_FAIL_ATTRIBUTE_ID (0x0424)
+#define ZCL_DEBT_ADJUSTMENT_ATTRIBUTE_ID (0x0425)
+#define ZCL_DEBT_ADJUST_FAIL_ATTRIBUTE_ID (0x0426)
+#define ZCL_MODE_CHANGE_ATTRIBUTE_ID (0x0427)
+#define ZCL_TOPUP_CODE_ERROR_ATTRIBUTE_ID (0x0428)
+#define ZCL_TOPUP_ALREADY_USED_ATTRIBUTE_ID (0x0429)
+#define ZCL_TOPUP_CODE_INVALID_ATTRIBUTE_ID (0x042A)
+#define ZCL_TOPUP_ACCEPTED_VIA_REMOTE_ATTRIBUTE_ID (0x042B)
+#define ZCL_TOPUP_ACCEPTED_VIA_MANUAL_ENTRY_ATTRIBUTE_ID (0x042C)
+#define ZCL_FRIENDLY_CREDIT_IN_USE_ATTRIBUTE_ID (0x042D)
+#define ZCL_FRIENDLY_CREDIT_END_WARNING_ATTRIBUTE_ID (0x042E)
+#define ZCL_FRIENDLY_CREDIT_PERIOD_END_ATTRIBUTE_ID (0x042F)
+#define ZCL_PREPAY_ERROR_REG_CLEAR_ATTRIBUTE_ID (0x0430)
+#define ZCL_PREPAY_ALARM_REG_CLEAR_ATTRIBUTE_ID (0x0431)
+#define ZCL_PREPAY_CLUSTER_NOT_FOUND_ATTRIBUTE_ID (0x0432)
+#define ZCL_TOPUP_VALUE_TOO_LARGE_ATTRIBUTE_ID (0x0433)
+#define ZCL_MODE_CREDIT_2_PREPAY_ATTRIBUTE_ID (0x0441)
+#define ZCL_MODE_PREPAY_2_CREDIT_ATTRIBUTE_ID (0x0442)
+#define ZCL_MODE_DEFAULT_ATTRIBUTE_ID (0x0443)
+#define ZCL_SELECT_AVAILABLE_EMERGENCY_CREDIT_RECEIVED_ATTRIBUTE_ID (0x04C0)
+#define ZCL_SELECT_AVAILABLE_EMERGENCY_CREDIT_ACTIONED_ATTRIBUTE_ID (0x04C1)
+#define ZCL_SELECT_AVAILABLE_EMERGENCY_CREDIT_CANCELLED_ATTRIBUTE_ID (0x04C2)
+#define ZCL_SELECT_AVAILABLE_EMERGENCY_CREDIT_REJECTED_ATTRIBUTE_ID (0x04C3)
+#define ZCL_CHANGE_DEBT_RECEIVED_ATTRIBUTE_ID (0x04C4)
+#define ZCL_CHANGE_DEBT_ACTIONED_ATTRIBUTE_ID (0x04C5)
+#define ZCL_CHANGE_DEBT_CANCELLED_ATTRIBUTE_ID (0x04C6)
+#define ZCL_CHANGE_DEBT_REJECTED_ATTRIBUTE_ID (0x04C7)
+#define ZCL_EMERGENCY_CREDIT_SETUP_RECEIVED_ATTRIBUTE_ID (0x04C8)
+#define ZCL_EMERGENCY_CREDIT_SETUP_ACTIONED_ATTRIBUTE_ID (0x04C9)
+#define ZCL_EMERGENCY_CREDIT_SETUP_CANCELLED_ATTRIBUTE_ID (0x04CA)
+#define ZCL_EMERGENCY_CREDIT_SETUP_REJECTED_ATTRIBUTE_ID (0x04CB)
+#define ZCL_CONSUMER_TOPUP_RECEIVED_ATTRIBUTE_ID (0x04CC)
+#define ZCL_CONSUMER_TOPUP_ACTIONED_ATTRIBUTE_ID (0x04CD)
+#define ZCL_CONSUMER_TOPUP_CANCELLED_ATTRIBUTE_ID (0x04CE)
+#define ZCL_CONSUMER_TOPUP_REJECTED_ATTRIBUTE_ID (0x04CF)
+#define ZCL_CREDIT_ADJUSTMENT_RECEIVED_ATTRIBUTE_ID (0x04D0)
+#define ZCL_CREDIT_ADJUSTMENT_ACTIONED_ATTRIBUTE_ID (0x04D1)
+#define ZCL_CREDIT_ADJUSTMENT_CANCELLED_ATTRIBUTE_ID (0x04D2)
+#define ZCL_CREDIT_ADJUSTMENT_REJECTED_ATTRIBUTE_ID (0x04D3)
+#define ZCL_CHANGE_PAYMENT_MODE_RECEIVED_ATTRIBUTE_ID (0x04D4)
+#define ZCL_CHANGE_PAYMENT_MODE_ACTIONED_ATTRIBUTE_ID (0x04D5)
+#define ZCL_CHANGE_PAYMENT_MODE_CANCELLED_ATTRIBUTE_ID (0x04D6)
+#define ZCL_CHANGE_PAYMENT_MODE_REJECTED_ATTRIBUTE_ID (0x04D7)
+#define ZCL_GET_PREPAY_SNAPSHOT_RECEIVED_ATTRIBUTE_ID (0x04D8)
+#define ZCL_GET_PREPAY_SNAPSHOT_ACTIONED_ATTRIBUTE_ID (0x04D9)
+#define ZCL_GET_PREPAY_SNAPSHOT_CANCELLED_ATTRIBUTE_ID (0x04DA)
+#define ZCL_GET_PREPAY_SNAPSHOT_REJECTED_ATTRIBUTE_ID (0x04DB)
+#define ZCL_GET_TOPUP_LOG_RECEIVED_ATTRIBUTE_ID (0x04DC)
+#define ZCL_GET_TOPUP_LOG_ACTIONED_ATTRIBUTE_ID (0x04DD)
+#define ZCL_GET_TOPUP_LOG_CANCELLED_ATTRIBUTE_ID (0x04DE)
+#define ZCL_GET_TOPUP_LOG_REJECTED_ATTRIBUTE_ID (0x04DF)
+#define ZCL_SET_LOW_CREDIT_WARNING_LEVEL_RECEIVED_ATTRIBUTE_ID (0x04E0)
+#define ZCL_SET_LOW_CREDIT_WARNING_LEVEL_ACTIONED_ATTRIBUTE_ID (0x04E1)
+#define ZCL_SET_LOW_CREDIT_WARNING_LEVEL_CANCELLED_ATTRIBUTE_ID (0x04E2)
+#define ZCL_SET_LOW_CREDIT_WARNING_LEVEL_REJECTED_ATTRIBUTE_ID (0x04E3)
+#define ZCL_GET_DEBT_REPAY_LOG_RECEIVED_ATTRIBUTE_ID (0x04E4)
+#define ZCL_GET_DEBT_REPAY_LOG_ACTIONED_ATTRIBUTE_ID (0x04E5)
+#define ZCL_GET_DEBT_REPAY_LOG_CANCELLED_ATTRIBUTE_ID (0x04E6)
+#define ZCL_GET_DEBT_REPAY_LOG_REJECTED_ATTRIBUTE_ID (0x04E7)
+#define ZCL_SET_MAXIMUM_CREDIT_LIMIT_RECEIVED_ATTRIBUTE_ID (0x04E8)
+#define ZCL_SET_MAXIMUM_CREDIT_LIMIT_ACTIONED_ATTRIBUTE_ID (0x04E9)
+#define ZCL_SET_MAXIMUM_CREDIT_LIMIT_CANCELLED_ATTRIBUTE_ID (0x04EA)
+#define ZCL_SET_MAXIMUM_CREDIT_LIMIT_REJECTED_ATTRIBUTE_ID (0x04EB)
+#define ZCL_SET_OVERALL_DEBT_CAP_RECEIVED_ATTRIBUTE_ID (0x04EC)
+#define ZCL_SET_OVERALL_DEBT_CAP_ACTIONED_ATTRIBUTE_ID (0x04ED)
+#define ZCL_SET_OVERALL_DEBT_CAP_CANCELLED_ATTRIBUTE_ID (0x04EE)
+#define ZCL_SET_OVERALL_DEBT_CAP_REJECTED_ATTRIBUTE_ID (0x04EF)
+#define ZCL_CALENDAR_CLUSTER_NOT_FOUND_ATTRIBUTE_ID (0x0500)
+#define ZCL_CALENDAR_CHANGE_PASSIVE_ACTIVATED_ATTRIBUTE_ID (0x0501)
+#define ZCL_CALENDAR_CHANGE_PASSIVE_UPDATED_ATTRIBUTE_ID (0x0502)
+#define ZCL_PUBLISH_CALENDAR_RECEIVED_ATTRIBUTE_ID (0x05C0)
+#define ZCL_PUBLISH_CALENDAR_ACTIONED_ATTRIBUTE_ID (0x05C1)
+#define ZCL_PUBLISH_CALENDAR_CANCELLED_ATTRIBUTE_ID (0x05C2)
+#define ZCL_PUBLISH_CALENDAR_REJECTED_ATTRIBUTE_ID (0x05C3)
+#define ZCL_PUBLISH_DAY_PROFILE_RECEIVED_ATTRIBUTE_ID (0x05C4)
+#define ZCL_PUBLISH_DAY_PROFILE_ACTIONED_ATTRIBUTE_ID (0x05C5)
+#define ZCL_PUBLISH_DAY_PROFILE_CANCELLED_ATTRIBUTE_ID (0x05C6)
+#define ZCL_PUBLISH_DAY_PROFILE_REJECTED_ATTRIBUTE_ID (0x05C7)
+#define ZCL_PUBLISH_WEEK_PROFILE_RECEIVED_ATTRIBUTE_ID (0x05C8)
+#define ZCL_PUBLISH_WEEK_PROFILE_ACTIONED_ATTRIBUTE_ID (0x05C9)
+#define ZCL_PUBLISH_WEEK_PROFILE_CANCELLED_ATTRIBUTE_ID (0x05CA)
+#define ZCL_PUBLISH_WEEK_PROFILE_REJECTED_ATTRIBUTE_ID (0x05CB)
+#define ZCL_PUBLISH_SEASONS_RECEIVED_ATTRIBUTE_ID (0x05CC)
+#define ZCL_PUBLISH_SEASONS_ACTIONED_ATTRIBUTE_ID (0x05CD)
+#define ZCL_PUBLISH_SEASONS_CANCELLED_ATTRIBUTE_ID (0x05CE)
+#define ZCL_PUBLISH_SEASONS_REJECTED_ATTRIBUTE_ID (0x05CF)
+#define ZCL_PUBLISH_SPECIAL_DAYS_RECEIVED_ATTRIBUTE_ID (0x05D0)
+#define ZCL_PUBLISH_SPECIAL_DAYS_ACTIONED_ATTRIBUTE_ID (0x05D1)
+#define ZCL_PUBLISH_SPECIAL_DAYS_CANCELLED_ATTRIBUTE_ID (0x05D2)
+#define ZCL_PUBLISH_SPECIAL_DAYS_REJECTED_ATTRIBUTE_ID (0x05D3)
+#define ZCL_PASSWORD_1_CHANGE_ATTRIBUTE_ID (0x0600)
+#define ZCL_PASSWORD_2_CHANGE_ATTRIBUTE_ID (0x0601)
+#define ZCL_PASSWORD_3_CHANGE_ATTRIBUTE_ID (0x0602)
+#define ZCL_PASSWORD_4_CHANGE_ATTRIBUTE_ID (0x0603)
+#define ZCL_EVENT_LOG_CLEARED_ATTRIBUTE_ID (0x0604)
+#define ZCL_ZIGBEE_APS_TIMEOUT_ATTRIBUTE_ID (0x0610)
+#define ZCL_ZIGBEE_IEEE_TRANSMISSION_FAILURE_OVER_THRESHOLD_ATTRIBUTE_ID (0x0611)
+#define ZCL_ZIGBEE_IEEE_FRAME_CHECK_SEQUENCE_THRESHOLD_ATTRIBUTE_ID (0x0612)
+#define ZCL_ERROR_CERTIFICATE_ATTRIBUTE_ID (0x0613)
+#define ZCL_ERROR_SIGNATURE_ATTRIBUTE_ID (0x0614)
+#define ZCL_ERROR_PROGRAM_STORAGE_ATTRIBUTE_ID (0x0615)
+#define ZCL_PUBLISH_COT_RECEIVED_ATTRIBUTE_ID (0x06C0)
+#define ZCL_PUBLISH_COT_ACTIONED_ATTRIBUTE_ID (0x06C1)
+#define ZCL_PUBLISH_COT_CANCELLED_ATTRIBUTE_ID (0x06C2)
+#define ZCL_PUBLISH_COT_REJECTED_ATTRIBUTE_ID (0x06C3)
+#define ZCL_PUBLISH_COS_RECEIVED_ATTRIBUTE_ID (0x06C4)
+#define ZCL_PUBLISH_COS_ACTIONED_ATTRIBUTE_ID (0x06C5)
+#define ZCL_PUBLISH_COS_CANCELLED_ATTRIBUTE_ID (0x06C6)
+#define ZCL_PUBLISH_COS_REJECTED_ATTRIBUTE_ID (0x06C7)
+#define ZCL_CHANGE_PASSWORD_RECEIVED_ATTRIBUTE_ID (0x06C8)
+#define ZCL_CHANGE_PASSWORD_ACTIONED_ATTRIBUTE_ID (0x06C9)
+#define ZCL_CHANGE_PASSWORD_CANCELLED_ATTRIBUTE_ID (0x06CA)
+#define ZCL_CHANGE_PASSWORD_REJECTED_ATTRIBUTE_ID (0x06CB)
+#define ZCL_SET_EVENT_CONFIGURATION_RECEIVED_ATTRIBUTE_ID (0x06CC)
+#define ZCL_SET_EVENT_CONFIGURATION_ACTIONED_ATTRIBUTE_ID (0x06CD)
+#define ZCL_SET_EVENT_CONFIGURATION_CANCELLED_ATTRIBUTE_ID (0x06CE)
+#define ZCL_SET_EVENT_CONFIGURATION_REJECTED_ATTRIBUTE_ID (0x06CF)
+#define ZCL_UPDATE_SITE_ID_RECEIVED_ATTRIBUTE_ID (0x06D0)
+#define ZCL_UPDATE_SITE_ID_ACTIONED_ATTRIBUTE_ID (0x06D1)
+#define ZCL_UPDATE_SITE_ID_CANCELLED_ATTRIBUTE_ID (0x06D2)
+#define ZCL_UPDATE_SITE_ID_REJECTED_ATTRIBUTE_ID (0x06D3)
+#define ZCL_UPDATE_CIN_RECEIVED_ATTRIBUTE_ID (0x06D4)
+#define ZCL_UPDATE_CIN_ACTIONED_ATTRIBUTE_ID (0x06D5)
+#define ZCL_UPDATE_CIN_CANCELLED_ATTRIBUTE_ID (0x06D6)
+#define ZCL_UPDATE_CIN_REJECTED_ATTRIBUTE_ID (0x06D7)
+#define ZCL_TUNNELING_CLUSTER_NOT_FOUND_ATTRIBUTE_ID (0x0700)
+#define ZCL_UNSUPPORTED_PROTOCOL_ATTRIBUTE_ID (0x0701)
+#define ZCL_INCORRECT_PROTOCOL_ATTRIBUTE_ID (0x0702)
+#define ZCL_REQUEST_TUNNEL_COMMAND_RECEIVED_ATTRIBUTE_ID (0x07C0)
+#define ZCL_REQUEST_TUNNEL_COMMAND_REJECTED_ATTRIBUTE_ID (0x07C1)
+#define ZCL_REQUEST_TUNNEL_COMMAND_GENERATED_ATTRIBUTE_ID (0x07C2)
+#define ZCL_CLOSE_TUNNEL_COMMAND_RECEIVED_ATTRIBUTE_ID (0x07C3)
+#define ZCL_CLOSE_TUNNEL_COMMAND_REJECTED_ATTRIBUTE_ID (0x07C4)
+#define ZCL_CLOSE_TUNNEL_COMMAND_GENERATED_ATTRIBUTE_ID (0x07C5)
+#define ZCL_TRANSFER_DATA_COMMAND_RECEIVED_ATTRIBUTE_ID (0x07C6)
+#define ZCL_TRANSFER_DATA_COMMAND_REJECTED_ATTRIBUTE_ID (0x07C7)
+#define ZCL_TRANSFER_DATA_COMMAND_GENERATED_ATTRIBUTE_ID (0x07C8)
+#define ZCL_TRANSFER_DATA_ERROR_COMMAND_RECEIVED_ATTRIBUTE_ID (0x07C9)
+#define ZCL_TRANSFER_DATA_ERROR_COMMAND_REJECTED_ATTRIBUTE_ID (0x07CA)
+#define ZCL_TRANSFER_DATA_ERROR_COMMAND_GENERATED_ATTRIBUTE_ID (0x07CB)
+#define ZCL_ACK_TRANSFER_DATA_COMMAND_RECEIVED_ATTRIBUTE_ID (0x07CC)
+#define ZCL_ACK_TRANSFER_DATA_COMMAND_REJECTED_ATTRIBUTE_ID (0x07CD)
+#define ZCL_ACK_TRANSFER_DATA_COMMAND_GENERATED_ATTRIBUTE_ID (0x07CE)
+#define ZCL_READY_DATA_COMMAND_RECEIVED_ATTRIBUTE_ID (0x07CF)
+#define ZCL_READY_DATA_COMMAND_REJECTED_ATTRIBUTE_ID (0x07D0)
+#define ZCL_READY_DATA_COMMAND_GENERATED_ATTRIBUTE_ID (0x07D1)
+#define ZCL_GET_SUPPORTED_TUNNEL_PROTOCOLS_COMMAND_RECEIVED_ATTRIBUTE_ID (0x07D2)
+#define ZCL_GET_SUPPORTED_TUNNEL_PROTOCOLS_COMMAND_REJECTED_ATTRIBUTE_ID (0x07D3)
+#define ZCL_GET_SUPPORTED_TUNNEL_PROTOCOLS_COMMAND_GENERATED_ATTRIBUTE_ID (0x07D4)
+#define ZCL_FIRMWARE_READY_FOR_ACTIVATION_ATTRIBUTE_ID (0x0800)
+#define ZCL_FIRMWARE_ACTIVATED_ATTRIBUTE_ID (0x0801)
+#define ZCL_FIRMWARE_ACTIVATION_FAILURE_ATTRIBUTE_ID (0x0802)
+#define ZCL_PATCH_READY_FOR_ACTIVATION_ATTRIBUTE_ID (0x0803)
+#define ZCL_PATCH_ACTIVATED_ATTRIBUTE_ID (0x0804)
+#define ZCL_PATCH_FAILURE_ATTRIBUTE_ID (0x0805)
+#define ZCL_IMAGE_NOTIFY_COMMAND_RECEIVED_ATTRIBUTE_ID (0x08C0)
+#define ZCL_IMAGE_NOTIFY_COMMAND_REJECTED_ATTRIBUTE_ID (0x08C1)
+#define ZCL_QUERY_NEXT_IMAGE_REQUEST_GENERATED_ATTRIBUTE_ID (0x08C2)
+#define ZCL_QUERY_NEXT_IMAGE_RESPONSE_RECEIVED_ATTRIBUTE_ID (0x08C3)
+#define ZCL_QUERY_NEXT_IMAGE_RESPONSE_REJECTED_ATTRIBUTE_ID (0x08C4)
+#define ZCL_IMAGE_BLOCK_REQUEST_GENERATED_ATTRIBUTE_ID (0x08C5)
+#define ZCL_IMAGE_PAGE_REQUEST_GENERATED_ATTRIBUTE_ID (0x08C6)
+#define ZCL_IMAGE_BLOCK_RESPONSE_RECEIVED_ATTRIBUTE_ID (0x08C7)
+#define ZCL_IMAGE_BLOCK_RESPONSE_REJECTED_ATTRIBUTE_ID (0x08C8)
+#define ZCL_UPGRADE_END_REQUEST_GENERATED_ATTRIBUTE_ID (0x08C9)
+#define ZCL_UPGRADE_END_RESPONSE_RECEIVED_ATTRIBUTE_ID (0x08CA)
+#define ZCL_UPGRADE_END_RESPONSE_REJECTED_ATTRIBUTE_ID (0x08CB)
+#define ZCL_QUERY_SPECIFIC_FILE_REQUEST_GENERATED_ATTRIBUTE_ID (0x08CC)
+#define ZCL_QUERY_SPECIFIC_FILE_RESPONSE_RECEIVED_ATTRIBUTE_ID (0x08CD)
+#define ZCL_QUERY_SPECIFIC_FILE_RESPONSE_REJECTED_ATTRIBUTE_ID (0x08CE)
+
+// Server attributes
+#define ZCL_PROVIDER_ID_SERVER_ATTRIBUTE_ID (0x0100)
+#define ZCL_PROVIDER_NAME_ATTRIBUTE_ID (0x0101)
+#define ZCL_PROVIDER_CONTACT_DETAILS_ATTRIBUTE_ID (0x0102)
+#define ZCL_PROPOSED_PROVIDER_ID_ATTRIBUTE_ID (0x0110)
+#define ZCL_PROPOSED_PROVIDER_NAME_ATTRIBUTE_ID (0x0111)
+#define ZCL_PROPOSED_PROVIDER_CHANGE_DATE_TIME_ATTRIBUTE_ID (0x0112)
+#define ZCL_PROPOSED_PROVIDER_CHANGE_CONTROL_ATTRIBUTE_ID (0x0113)
+#define ZCL_RECEIVED_PROVIDER_ID_SERVER_ATTRIBUTE_ID (0x0120)
+#define ZCL_RECEIVED_PROVIDER_NAME_ATTRIBUTE_ID (0x0121)
+#define ZCL_RECEIVED_PROVIDER_CONTACT_DETAILS_ATTRIBUTE_ID (0x0122)
+#define ZCL_RECEIVED_PROPOSED_PROVIDER_ID_ATTRIBUTE_ID (0x0130)
+#define ZCL_RECEIVED_PROPOSED_PROVIDER_NAME_ATTRIBUTE_ID (0x0131)
+#define ZCL_RECEIVED_PROPOSED_PROVIDER_CHANGE_DATE_TIME_ATTRIBUTE_ID (0x0132)
+#define ZCL_RECEIVED_PROPOSED_PROVIDER_CHANGE_CONTROL_ATTRIBUTE_ID (0x0133)
+#define ZCL_CHANGE_OF_TENANCY_UPDATE_DATE_TIME_ATTRIBUTE_ID (0x0200)
+#define ZCL_PROPOSED_TENANCY_CHANGE_CONTROL_ATTRIBUTE_ID (0x0201)
+#define ZCL_WAN_STATUS_ATTRIBUTE_ID (0x0300)
+#define ZCL_LOW_MEDIUM_THRESHOLD_ATTRIBUTE_ID (0x0400)
+#define ZCL_MEDIUM_HIGH_THRESHOLD_ATTRIBUTE_ID (0x0401)
+
+// Attribute ids for cluster: Events
+
+// Client attributes
+
+// Server attributes
+
+// Attribute ids for cluster: MDU Pairing
+
+// Client attributes
+
+// Server attributes
+
+// Attribute ids for cluster: Sub-GHz
+
+// Client attributes
+
+// Server attributes
+#define ZCL_SUB_GHZ_CLUSTER_CHANNEL_CHANGE_ATTRIBUTE_ID (0x0000)
+#define ZCL_SUB_GHZ_CLUSTER_PAGE_28_CHANNEL_MASK_ATTRIBUTE_ID (0x0001)
+#define ZCL_SUB_GHZ_CLUSTER_PAGE_29_CHANNEL_MASK_ATTRIBUTE_ID (0x0002)
+#define ZCL_SUB_GHZ_CLUSTER_PAGE_30_CHANNEL_MASK_ATTRIBUTE_ID (0x0003)
+#define ZCL_SUB_GHZ_CLUSTER_PAGE_31_CHANNEL_MASK_ATTRIBUTE_ID (0x0004)
+
+// Attribute ids for cluster: Key Establishment
+
+// Client attributes
+#define ZCL_KEY_ESTABLISHMENT_SUITE_CLIENT_ATTRIBUTE_ID (0x0000)
+
+// Server attributes
+#define ZCL_KEY_ESTABLISHMENT_SUITE_SERVER_ATTRIBUTE_ID (0x0000)
+
+// Attribute ids for cluster: Information
+
+// Client attributes
+
+// Server attributes
+#define ZCL_NODE_DESCRIPTION_ATTRIBUTE_ID (0x0000)
+#define ZCL_DELIVERY_ENABLE_ATTRIBUTE_ID (0x0001)
+#define ZCL_PUSH_INFORMATION_TIMER_ATTRIBUTE_ID (0x0002)
+#define ZCL_ENABLE_SECURE_CONFIGURATION_ATTRIBUTE_ID (0x0003)
+#define ZCL_NUMBER_OF_CONTENTS_ATTRIBUTE_ID (0x0010)
+#define ZCL_CONTENT_ROOT_ID_ATTRIBUTE_ID (0x0011)
+
+// Attribute ids for cluster: Data Sharing
+
+// Client attributes
+
+// Server attributes
+#define ZCL_DEVICE_NAME_ATTRIBUTE_ID (0x0000)
+#define ZCL_DEVICE_DESCRIPTION_ATTRIBUTE_ID (0x0001)
+
+// Attribute ids for cluster: Gaming
+
+// Client attributes
+
+// Server attributes
+#define ZCL_PLAYER_NAME_ATTRIBUTE_ID (0x0000)
+#define ZCL_NB_OF_GAMES_ATTRIBUTE_ID (0x0001)
+#define ZCL_LIST_OF_GAMES_ATTRIBUTE_ID (0x0002)
+#define ZCL_ANNOUNCEMENT_INTERVAL_ATTRIBUTE_ID (0x0003)
+#define ZCL_GAME_ID_ATTRIBUTE_ID (0x0010)
+#define ZCL_NAME_OF_GAME_ATTRIBUTE_ID (0x0011)
+#define ZCL_GAME_MASTER_ATTRIBUTE_ID (0x0012)
+#define ZCL_GAMING_STATUS_ATTRIBUTE_ID (0x0013)
+#define ZCL_CURRENT_NB_OF_PLAYERS_ATTRIBUTE_ID (0x0014)
+#define ZCL_LIST_OF_CURRENT_PLAYERS_ATTRIBUTE_ID (0x0015)
+#define ZCL_MAX_NB_OF_PLAYERS_ATTRIBUTE_ID (0x0016)
+#define ZCL_MIN_NB_OF_PLAYERS_ATTRIBUTE_ID (0x0017)
+#define ZCL_CURRENT_GAME_LEVEL_ATTRIBUTE_ID (0x0018)
+#define ZCL_SCORE_OF_THIS_PLAYER_ATTRIBUTE_ID (0x0019)
+#define ZCL_TIMER1_ATTRIBUTE_ID (0x001A)
+#define ZCL_TIMER2_ATTRIBUTE_ID (0x001B)
+#define ZCL_TIMER3_ATTRIBUTE_ID (0x001C)
+#define ZCL_COUNTER1_ATTRIBUTE_ID (0x001D)
+#define ZCL_COUNTER2_ATTRIBUTE_ID (0x001E)
+#define ZCL_DOWNLOADABLE_ATTRIBUTE_ID (0x001F)
+
+// Attribute ids for cluster: Data Rate Control
+
+// Client attributes
+
+// Server attributes
+#define ZCL_AVERAGE_LATENCY_REQUIREMENT_ATTRIBUTE_ID (0x0000)
+#define ZCL_MAX_LATENCY_REQUIREMENT_ATTRIBUTE_ID (0x0001)
+#define ZCL_BANDWIDTH_REQUIREMENT_ATTRIBUTE_ID (0x0002)
+
+// Attribute ids for cluster: Voice over ZigBee
+
+// Client attributes
+
+// Server attributes
+#define ZCL_CODEC_TYPE_ATTRIBUTE_ID (0x0000)
+#define ZCL_SAMPLING_FREQUENCY_ATTRIBUTE_ID (0x0001)
+#define ZCL_CODEC_RATE_ATTRIBUTE_ID (0x0002)
+#define ZCL_ESTABLISHMENT_TIMEOUT_ATTRIBUTE_ID (0x0003)
+#define ZCL_CODEC_TYPE_SUB1_ATTRIBUTE_ID (0x0004)
+#define ZCL_CODEC_TYPE_SUB2_ATTRIBUTE_ID (0x0005)
+#define ZCL_CODEC_TYPE_SUB3_ATTRIBUTE_ID (0x0006)
+#define ZCL_COMPRESSION_TYPE_ATTRIBUTE_ID (0x0007)
+#define ZCL_COMPRESSION_RATE_ATTRIBUTE_ID (0x0008)
+#define ZCL_OPTION_FLAGS_ATTRIBUTE_ID (0x0009)
+#define ZCL_THRESHOLD_ATTRIBUTE_ID (0x000A)
+
+// Attribute ids for cluster: Chatting
+
+// Client attributes
+
+// Server attributes
+#define ZCL_U_ID_ATTRIBUTE_ID (0x0000)
+#define ZCL_NICKNAME_ATTRIBUTE_ID (0x0001)
+#define ZCL_C_ID_ATTRIBUTE_ID (0x0010)
+#define ZCL_NAME_ATTRIBUTE_ID (0x0011)
+#define ZCL_ENABLE_ADD_CHAT_ATTRIBUTE_ID (0x0020)
+
+// Attribute ids for cluster: Payment
+
+// Client attributes
+
+// Server attributes
+#define ZCL_PAYMENT_USER_ID_ATTRIBUTE_ID (0x0000)
+#define ZCL_USER_TYPE_ATTRIBUTE_ID (0x0001)
+#define ZCL_PAYMENT_SERVICE_ID_ATTRIBUTE_ID (0x0010)
+#define ZCL_PAYMENT_SERVICE_PROVIDER_ID_ATTRIBUTE_ID (0x0011)
+#define ZCL_TOTEM_ID_ATTRIBUTE_ID (0x0012)
+#define ZCL_CURRENCY_ATTRIBUTE_ID (0x0020)
+#define ZCL_PRICE_TRAILING_DIGIT_ATTRIBUTE_ID (0x0021)
+#define ZCL_PRICE_ATTRIBUTE_ID (0x0022)
+#define ZCL_GOOD_ID_ATTRIBUTE_ID (0x0030)
+#define ZCL_SERIAL_NUMBER_ATTRIBUTE_ID (0x0031)
+#define ZCL_PAYMENT_TIMESTAMP_ATTRIBUTE_ID (0x0032)
+#define ZCL_TRANS_ID_ATTRIBUTE_ID (0x0033)
+#define ZCL_TRANS_STATUS_ATTRIBUTE_ID (0x0034)
+#define ZCL_PAYMENT_STATUS_ATTRIBUTE_ID (0x0035)
+
+// Attribute ids for cluster: Billing
+
+// Client attributes
+
+// Server attributes
+#define ZCL_USER_ID_ATTRIBUTE_ID (0x0000)
+#define ZCL_SERVICE_ID_ATTRIBUTE_ID (0x0010)
+#define ZCL_SERVICE_PROVIDER_ID_ATTRIBUTE_ID (0x0011)
+#define ZCL_SESSION_INTERVAL_ATTRIBUTE_ID (0x0012)
+#define ZCL_TIMESTAMP_ATTRIBUTE_ID (0x0020)
+#define ZCL_DURATION_ATTRIBUTE_ID (0x0021)
+
+// Attribute ids for cluster: Appliance Identification
+
+// Client attributes
+
+// Server attributes
+#define ZCL_BASIC_IDENTIFICATION_ATTRIBUTE_ID (0x0000)
+#define ZCL_APPLIANCE_COMPANY_NAME_ATTRIBUTE_ID (0x0010)
+#define ZCL_COMPANY_ID_ATTRIBUTE_ID (0x0011)
+#define ZCL_BRAND_NAME_ATTRIBUTE_ID (0x0012)
+#define ZCL_BRAND_ID_ATTRIBUTE_ID (0x0013)
+#define ZCL_APPLIANCE_MODEL_ATTRIBUTE_ID (0x0014)
+#define ZCL_APPLIANCE_PART_NUMBER_ATTRIBUTE_ID (0x0015)
+#define ZCL_APPLIANCE_PRODUCT_REVISION_ATTRIBUTE_ID (0x0016)
+#define ZCL_APPLIANCE_SOFTWARE_REVISION_ATTRIBUTE_ID (0x0017)
+#define ZCL_PRODUCT_TYPE_NAME_ATTRIBUTE_ID (0x0018)
+#define ZCL_PRODUCT_TYPE_ID_ATTRIBUTE_ID (0x0019)
+#define ZCL_CECED_SPECIFICATION_VERSION_ATTRIBUTE_ID (0x001A)
+
+// Attribute ids for cluster: Meter Identification
+
+// Client attributes
+
+// Server attributes
+#define ZCL_METER_COMPANY_NAME_ATTRIBUTE_ID (0x0000)
+#define ZCL_METER_TYPE_ID_ATTRIBUTE_ID (0x0001)
+#define ZCL_DATA_QUALITY_ID_ATTRIBUTE_ID (0x0004)
+#define ZCL_CUSTOMER_NAME_ATTRIBUTE_ID (0x0005)
+#define ZCL_METER_MODEL_ATTRIBUTE_ID (0x0006)
+#define ZCL_METER_PART_NUMBER_ATTRIBUTE_ID (0x0007)
+#define ZCL_METER_PRODUCT_REVISION_ATTRIBUTE_ID (0x0008)
+#define ZCL_METER_SOFTWARE_REVISION_ATTRIBUTE_ID (0x000A)
+#define ZCL_UTILITY_NAME_ATTRIBUTE_ID (0x000B)
+#define ZCL_POD_ATTRIBUTE_ID (0x000C)
+#define ZCL_AVAILABLE_POWER_ATTRIBUTE_ID (0x000D)
+#define ZCL_POWER_THRESHOLD_ATTRIBUTE_ID (0x000E)
+
+// Attribute ids for cluster: Appliance Events and Alert
+
+// Client attributes
+
+// Server attributes
+
+// Attribute ids for cluster: Appliance Statistics
+
+// Client attributes
+
+// Server attributes
+#define ZCL_LOG_MAX_SIZE_ATTRIBUTE_ID (0x0000)
+#define ZCL_LOG_QUEUE_MAX_SIZE_ATTRIBUTE_ID (0x0001)
+
+// Attribute ids for cluster: Electrical Measurement
+
+// Client attributes
+
+// Server attributes
+#define ZCL_MEASUREMENT_TYPE_ATTRIBUTE_ID (0x0000)
+#define ZCL_DC_VOLTAGE_ATTRIBUTE_ID (0x0100)
+#define ZCL_DC_VOLTAGE_MIN_ATTRIBUTE_ID (0x0101)
+#define ZCL_DC_VOLTAGE_MAX_ATTRIBUTE_ID (0x0102)
+#define ZCL_DC_CURRENT_ATTRIBUTE_ID (0x0103)
+#define ZCL_DC_CURRENT_MIN_ATTRIBUTE_ID (0x0104)
+#define ZCL_DC_CURRENT_MAX_ATTRIBUTE_ID (0x0105)
+#define ZCL_DC_POWER_ATTRIBUTE_ID (0x0106)
+#define ZCL_DC_POWER_MIN_ATTRIBUTE_ID (0x0107)
+#define ZCL_DC_POWER_MAX_ATTRIBUTE_ID (0x0108)
+#define ZCL_DC_VOLTAGE_MULTIPLIER_ATTRIBUTE_ID (0x0200)
+#define ZCL_DC_VOLTAGE_DIVISOR_ATTRIBUTE_ID (0x0201)
+#define ZCL_DC_CURRENT_MULTIPLIER_ATTRIBUTE_ID (0x0202)
+#define ZCL_DC_CURRENT_DIVISOR_ATTRIBUTE_ID (0x0203)
+#define ZCL_DC_POWER_MULTIPLIER_ATTRIBUTE_ID (0x0204)
+#define ZCL_DC_POWER_DIVISOR_ATTRIBUTE_ID (0x0205)
+#define ZCL_AC_FREQUENCY_ATTRIBUTE_ID (0x0300)
+#define ZCL_AC_FREQUENCY_MIN_ATTRIBUTE_ID (0x0301)
+#define ZCL_AC_FREQUENCY_MAX_ATTRIBUTE_ID (0x0302)
+#define ZCL_NEUTRAL_CURRENT_ATTRIBUTE_ID (0x0303)
+#define ZCL_TOTAL_ACTIVE_POWER_ATTRIBUTE_ID (0x0304)
+#define ZCL_TOTAL_REACTIVE_POWER_ATTRIBUTE_ID (0x0305)
+#define ZCL_TOTAL_APPARENT_POWER_ATTRIBUTE_ID (0x0306)
+#define ZCL_MEASURED_1_ST_HARMONIC_CURRENT_ATTRIBUTE_ID (0x0307)
+#define ZCL_MEASURED_3_RD_HARMONIC_CURRENT_ATTRIBUTE_ID (0x0308)
+#define ZCL_MEASURED_5_TH_HARMONIC_CURRENT_ATTRIBUTE_ID (0x0309)
+#define ZCL_MEASURED_7_TH_HARMONIC_CURRENT_ATTRIBUTE_ID (0x030A)
+#define ZCL_MEASURED_9_TH_HARMONIC_CURRENT_ATTRIBUTE_ID (0x030B)
+#define ZCL_MEASURED_11_TH_HARMONIC_CURRENT_ATTRIBUTE_ID (0x030C)
+#define ZCL_MEASURED_PHASE_1_ST_HARMONIC_CURRENT_ATTRIBUTE_ID (0x030D)
+#define ZCL_MEASURED_PHASE_3_RD_HARMONIC_CURRENT_ATTRIBUTE_ID (0x030E)
+#define ZCL_MEASURED_PHASE_5_TH_HARMONIC_CURRENT_ATTRIBUTE_ID (0x030F)
+#define ZCL_MEASURED_PHASE_7_TH_HARMONIC_CURRENT_ATTRIBUTE_ID (0x0310)
+#define ZCL_MEASURED_PHASE_9_TH_HARMONIC_CURRENT_ATTRIBUTE_ID (0x0311)
+#define ZCL_MEASURED_PHASE_11_TH_HARMONIC_CURRENT_ATTRIBUTE_ID (0x0312)
+#define ZCL_AC_FREQUENCY_MULTIPLIER_ATTRIBUTE_ID (0x0400)
+#define ZCL_AC_FREQUENCY_DIVISOR_ATTRIBUTE_ID (0x0401)
+#define ZCL_POWER_MULTIPLIER_ATTRIBUTE_ID (0x0402)
+#define ZCL_POWER_DIVISOR_ATTRIBUTE_ID (0x0403)
+#define ZCL_HARMONIC_CURRENT_MULTIPLIER_ATTRIBUTE_ID (0x0404)
+#define ZCL_PHASE_HARMONIC_CURRENT_MULTIPLIER_ATTRIBUTE_ID (0x0405)
+#define ZCL_INSTANTANEOUS_VOLTAGE_ATTRIBUTE_ID (0x0500)
+#define ZCL_INSTANTANEOUS_LINE_CURRENT_ATTRIBUTE_ID (0x0501)
+#define ZCL_INSTANTANEOUS_ACTIVE_CURRENT_ATTRIBUTE_ID (0x0502)
+#define ZCL_INSTANTANEOUS_REACTIVE_CURRENT_ATTRIBUTE_ID (0x0503)
+#define ZCL_INSTANTANEOUS_POWER_ATTRIBUTE_ID (0x0504)
+#define ZCL_RMS_VOLTAGE_ATTRIBUTE_ID (0x0505)
+#define ZCL_RMS_VOLTAGE_MIN_ATTRIBUTE_ID (0x0506)
+#define ZCL_RMS_VOLTAGE_MAX_ATTRIBUTE_ID (0x0507)
+#define ZCL_RMS_CURRENT_ATTRIBUTE_ID (0x0508)
+#define ZCL_RMS_CURRENT_MIN_ATTRIBUTE_ID (0x0509)
+#define ZCL_RMS_CURRENT_MAX_ATTRIBUTE_ID (0x050A)
+#define ZCL_ACTIVE_POWER_ATTRIBUTE_ID (0x050B)
+#define ZCL_ACTIVE_POWER_MIN_ATTRIBUTE_ID (0x050C)
+#define ZCL_ACTIVE_POWER_MAX_ATTRIBUTE_ID (0x050D)
+#define ZCL_REACTIVE_POWER_ATTRIBUTE_ID (0x050E)
+#define ZCL_APPARENT_POWER_ATTRIBUTE_ID (0x050F)
+#define ZCL_AC_POWER_FACTOR_ATTRIBUTE_ID (0x0510)
+#define ZCL_AVERAGE_RMS_VOLTAGE_MEASUREMENT_PERIOD_ATTRIBUTE_ID (0x0511)
+#define ZCL_AVERAGE_RMS_UNDER_VOLTAGE_COUNTER_ATTRIBUTE_ID (0x0513)
+#define ZCL_RMS_EXTREME_OVER_VOLTAGE_PERIOD_ATTRIBUTE_ID (0x0514)
+#define ZCL_RMS_EXTREME_UNDER_VOLTAGE_PERIOD_ATTRIBUTE_ID (0x0515)
+#define ZCL_RMS_VOLTAGE_SAG_PERIOD_ATTRIBUTE_ID (0x0516)
+#define ZCL_RMS_VOLTAGE_SWELL_PERIOD_ATTRIBUTE_ID (0x0517)
+#define ZCL_AC_VOLTAGE_MULTIPLIER_ATTRIBUTE_ID (0x0600)
+#define ZCL_AC_VOLTAGE_DIVISOR_ATTRIBUTE_ID (0x0601)
+#define ZCL_AC_CURRENT_MULTIPLIER_ATTRIBUTE_ID (0x0602)
+#define ZCL_AC_CURRENT_DIVISOR_ATTRIBUTE_ID (0x0603)
+#define ZCL_AC_POWER_MULTIPLIER_ATTRIBUTE_ID (0x0604)
+#define ZCL_AC_POWER_DIVISOR_ATTRIBUTE_ID (0x0605)
+#define ZCL_DC_OVERLOAD_ALARMS_MASK_ATTRIBUTE_ID (0x0700)
+#define ZCL_DC_VOLTAGE_OVERLOAD_ATTRIBUTE_ID (0x0701)
+#define ZCL_DC_CURRENT_OVERLOAD_ATTRIBUTE_ID (0x0702)
+#define ZCL_AC_OVERLOAD_ALARMS_MASK_ATTRIBUTE_ID (0x0800)
+#define ZCL_AC_VOLTAGE_OVERLOAD_ATTRIBUTE_ID (0x0801)
+#define ZCL_AC_CURRENT_OVERLOAD_ATTRIBUTE_ID (0x0802)
+#define ZCL_AC_POWER_OVERLOAD_ATTRIBUTE_ID (0x0803)
+#define ZCL_AC_REACTIVE_POWER_OVERLOAD_ATTRIBUTE_ID (0x0804)
+#define ZCL_AVERAGE_RMS_OVER_VOLTAGE_ATTRIBUTE_ID (0x0805)
+#define ZCL_AVERAGE_RMS_UNDER_VOLTAGE_ATTRIBUTE_ID (0x0806)
+#define ZCL_RMS_EXTREME_OVER_VOLTAGE_ATTRIBUTE_ID (0x0807)
+#define ZCL_RMS_EXTREME_UNDER_VOLTAGE_ATTRIBUTE_ID (0x0808)
+#define ZCL_RMS_VOLTAGE_SAG_ATTRIBUTE_ID (0x0809)
+#define ZCL_RMS_VOLTAGE_SWELL_ATTRIBUTE_ID (0x080A)
+#define ZCL_LINE_CURRENT_PHASE_B_ATTRIBUTE_ID (0x0901)
+#define ZCL_ACTIVE_CURRENT_PHASE_B_ATTRIBUTE_ID (0x0902)
+#define ZCL_REACTIVE_CURRENT_PHASE_B_ATTRIBUTE_ID (0x0903)
+#define ZCL_RMS_VOLTAGE_PHASE_B_ATTRIBUTE_ID (0x0905)
+#define ZCL_RMS_VOLTAGE_MIN_PHASE_B_ATTRIBUTE_ID (0x0906)
+#define ZCL_RMS_VOLTAGE_MAX_PHASE_B_ATTRIBUTE_ID (0x0907)
+#define ZCL_RMS_CURRENT_PHASE_B_ATTRIBUTE_ID (0x0908)
+#define ZCL_RMS_CURRENT_MIN_PHASE_B_ATTRIBUTE_ID (0x0909)
+#define ZCL_RMS_CURRENT_MAX_PHASE_B_ATTRIBUTE_ID (0x090A)
+#define ZCL_ACTIVE_POWER_PHASE_B_ATTRIBUTE_ID (0x090B)
+#define ZCL_ACTIVE_POWER_MIN_PHASE_B_ATTRIBUTE_ID (0x090C)
+#define ZCL_ACTIVE_POWER_MAX_PHASE_B_ATTRIBUTE_ID (0x090D)
+#define ZCL_REACTIVE_POWER_PHASE_B_ATTRIBUTE_ID (0x090E)
+#define ZCL_APPARENT_POWER_PHASE_B_ATTRIBUTE_ID (0x090F)
+#define ZCL_POWER_FACTOR_PHASE_B_ATTRIBUTE_ID (0x0910)
+#define ZCL_AVERAGE_RMS_VOLTAGE_MEASUREMENT_PERIOD_PHASE_B_ATTRIBUTE_ID (0x0911)
+#define ZCL_AVERAGE_RMS_OVER_VOLTAGE_COUNTER_PHASE_B_ATTRIBUTE_ID (0x0912)
+#define ZCL_AVERAGE_RMS_UNDER_VOLTAGE_COUNTER_PHASE_B_ATTRIBUTE_ID (0x0913)
+#define ZCL_RMS_EXTREME_OVER_VOLTAGE_PERIOD_PHASE_B_ATTRIBUTE_ID (0x0914)
+#define ZCL_RMS_EXTREME_UNDER_VOLTAGE_PERIOD_PHASE_B_ATTRIBUTE_ID (0x0915)
+#define ZCL_RMS_VOLTAGE_SAG_PERIOD_PHASE_B_ATTRIBUTE_ID (0x0916)
+#define ZCL_RMS_VOLTAGE_SWELL_PERIOD_PHASE_B_ATTRIBUTE_ID (0x0917)
+#define ZCL_LINE_CURRENT_PHASE_C_ATTRIBUTE_ID (0x0A01)
+#define ZCL_ACTIVE_CURRENT_PHASE_C_ATTRIBUTE_ID (0x0A02)
+#define ZCL_REACTIVE_CURRENT_PHASE_C_ATTRIBUTE_ID (0x0A03)
+#define ZCL_RMS_VOLTAGE_PHASE_C_ATTRIBUTE_ID (0x0A05)
+#define ZCL_RMS_VOLTAGE_MIN_PHASE_C_ATTRIBUTE_ID (0x0A06)
+#define ZCL_RMS_VOLTAGE_MAX_PHASE_C_ATTRIBUTE_ID (0x0A07)
+#define ZCL_RMS_CURRENT_PHASE_C_ATTRIBUTE_ID (0x0A08)
+#define ZCL_RMS_CURRENT_MIN_PHASE_C_ATTRIBUTE_ID (0x0A09)
+#define ZCL_RMS_CURRENT_MAX_PHASE_C_ATTRIBUTE_ID (0x0A0A)
+#define ZCL_ACTIVE_POWER_PHASE_C_ATTRIBUTE_ID (0x0A0B)
+#define ZCL_ACTIVE_POWER_MIN_PHASE_C_ATTRIBUTE_ID (0x0A0C)
+#define ZCL_ACTIVE_POWER_MAX_PHASE_C_ATTRIBUTE_ID (0x0A0D)
+#define ZCL_REACTIVE_POWER_PHASE_C_ATTRIBUTE_ID (0x0A0E)
+#define ZCL_APPARENT_POWER_PHASE_C_ATTRIBUTE_ID (0x0A0F)
+#define ZCL_POWER_FACTOR_PHASE_C_ATTRIBUTE_ID (0x0A10)
+#define ZCL_AVERAGE_RMS_VOLTAGE_MEASUREMENT_PERIOD_PHASE_C_ATTRIBUTE_ID (0x0A11)
+#define ZCL_AVERAGE_RMS_OVER_VOLTAGE_COUNTER_PHASE_C_ATTRIBUTE_ID (0x0A12)
+#define ZCL_AVERAGE_RMS_UNDER_VOLTAGE_COUNTER_PHASE_C_ATTRIBUTE_ID (0x0A13)
+#define ZCL_RMS_EXTREME_OVER_VOLTAGE_PERIOD_PHASE_C_ATTRIBUTE_ID (0x0A14)
+#define ZCL_RMS_EXTREME_UNDER_VOLTAGE_PERIOD_PHASE_C_ATTRIBUTE_ID (0x0A15)
+#define ZCL_RMS_VOLTAGE_SAG_PERIOD_PHASE_C_ATTRIBUTE_ID (0x0A16)
+#define ZCL_RMS_VOLTAGE_SWELL_PERIOD_PHASE_C_ATTRIBUTE_ID (0x0A17)
+
+// Attribute ids for cluster: Diagnostics
+
+// Client attributes
+
+// Server attributes
+#define ZCL_NUMBER_OF_RESETS_ATTRIBUTE_ID (0x0000)
+#define ZCL_PERSISTENT_MEMORY_WRITES_ATTRIBUTE_ID (0x0001)
+#define ZCL_MAC_RX_BCAST_ATTRIBUTE_ID (0x0100)
+#define ZCL_MAC_TX_BCAST_ATTRIBUTE_ID (0x0101)
+#define ZCL_MAC_RX_UCAST_ATTRIBUTE_ID (0x0102)
+#define ZCL_MAC_TX_UCAST_ATTRIBUTE_ID (0x0103)
+#define ZCL_MAC_TX_UCAST_RETRY_ATTRIBUTE_ID (0x0104)
+#define ZCL_MAC_TX_UCAST_FAIL_ATTRIBUTE_ID (0x0105)
+#define ZCL_APS_RX_BCAST_ATTRIBUTE_ID (0x0106)
+#define ZCL_APS_TX_BCAST_ATTRIBUTE_ID (0x0107)
+#define ZCL_APS_RX_UCAST_ATTRIBUTE_ID (0x0108)
+#define ZCL_APS_UCAST_SUCCESS_ATTRIBUTE_ID (0x0109)
+#define ZCL_APS_TX_UCAST_RETRY_ATTRIBUTE_ID (0x010A)
+#define ZCL_APS_TX_UCAST_FAIL_ATTRIBUTE_ID (0x010B)
+#define ZCL_ROUTE_DISC_INITIATED_ATTRIBUTE_ID (0x010C)
+#define ZCL_NEIGHBOR_ADDED_ATTRIBUTE_ID (0x010D)
+#define ZCL_NEIGHBOR_REMOVED_ATTRIBUTE_ID (0x010E)
+#define ZCL_NEIGHBOR_STALE_ATTRIBUTE_ID (0x010F)
+#define ZCL_JOIN_INDICATION_ATTRIBUTE_ID (0x0110)
+#define ZCL_CHILD_MOVED_ATTRIBUTE_ID (0x0111)
+#define ZCL_NWK_FC_FAILURE_ATTRIBUTE_ID (0x0112)
+#define ZCL_APS_FC_FAILURE_ATTRIBUTE_ID (0x0113)
+#define ZCL_APS_UNAUTHORIZED_KEY_ATTRIBUTE_ID (0x0114)
+#define ZCL_NWK_DECRYPT_FAILURE_ATTRIBUTE_ID (0x0115)
+#define ZCL_APS_DECRYPT_FAILURE_ATTRIBUTE_ID (0x0116)
+#define ZCL_PACKET_BUFFER_ALLOC_FAILURES_ATTRIBUTE_ID (0x0117)
+#define ZCL_RELAYED_UNICAST_ATTRIBUTE_ID (0x0118)
+#define ZCL_PHY_TO_MAC_QUEUE_LIMIT_REACHED_ATTRIBUTE_ID (0x0119)
+#define ZCL_PACKET_VALIDATE_DROP_COUNT_ATTRIBUTE_ID (0x011A)
+#define ZCL_AVERAGE_MAC_RETRY_PER_APS_MSG_SENT_ATTRIBUTE_ID (0x011B)
+#define ZCL_LAST_MESSAGE_LQI_ATTRIBUTE_ID (0x011C)
+#define ZCL_LAST_MESSAGE_RSSI_ATTRIBUTE_ID (0x011D)
+
+// Attribute ids for cluster: ZLL Commissioning
+
+// Client attributes
+
+// Server attributes
+
+// Attribute ids for cluster: Binding
+
+// Client attributes
+
+// Server attributes
+
+// Attribute ids for cluster: Sample Mfg Specific Cluster
+
+// Client attributes
+
+// Server attributes
+#define ZCL_ATTRIBUTE_ONE_ATTRIBUTE_ID (0x0000)
+#define ZCL_ATTRIBUTE_TWO_ATTRIBUTE_ID (0x0001)
+
+// Attribute ids for cluster: Sample Mfg Specific Cluster 2
+
+// Client attributes
+
+// Server attributes
+#define ZCL_ATTRIBUTE_THREE_ATTRIBUTE_ID (0x0000)
+#define ZCL_ATTRIBUTE_FOUR_ATTRIBUTE_ID (0x0001)
+
+// Attribute ids for cluster: Configuration Cluster
+
+// Client attributes
+
+// Server attributes
+#define ZCL_TOKENS_LOCKED_ATTRIBUTE_ID (0x0000)
+
+// Attribute ids for cluster: MFGLIB Cluster
+
+// Client attributes
+
+// Server attributes
+#define ZCL_PACKETS_RECEIVED_ATTRIBUTE_ID (0x0000)
+#define ZCL_SAVED_RSSI_ATTRIBUTE_ID (0x0001)
+#define ZCL_SAVED_LQI_ATTRIBUTE_ID (0x0002)
+
+// Attribute ids for cluster: SL Works With All Hubs
+
+// Client attributes
+
+// Server attributes
+#define ZCL_SL_DISABLE_OTA_DOWNGRADES_ATTRIBUTE_ID (0x0002)
+#define ZCL_SL_MGMT_LEAVE_WITHOUT_REJOIN_ENABLED_ATTRIBUTE_ID (0x0003)
+#define ZCL_SL_NWK_RETRY_COUNT_ATTRIBUTE_ID (0x0004)
+#define ZCL_SL_MAC_RETRY_COUNT_ATTRIBUTE_ID (0x0005)
+#define ZCL_SL_ROUTER_CHECKIN_ENABLED_ATTRIBUTE_ID (0x0006)
+#define ZCL_SL_TOUCHLINK_INTERPAN_ENABLED_ATTRIBUTE_ID (0x0007)
+#define ZCL_SL_WWAH_PARENT_CLASSIFICATION_ENABLED_ATTRIBUTE_ID (0x0008)
+#define ZCL_SL_WWAH_APP_EVENT_RETRY_ENABLED_ATTRIBUTE_ID (0x0009)
+#define ZCL_SL_WWAH_APP_EVENT_RETRY_QUEUE_SIZE_ATTRIBUTE_ID (0x000A)
+#define ZCL_SL_WWAH_REJOIN_ENABLED_ATTRIBUTE_ID (0x000B)
+#define ZCL_SL_MAC_POLL_FAILURE_WAIT_TIME_ATTRIBUTE_ID (0x000C)
+#define ZCL_SL_CONFIGURATION_MODE_ENABLED_ATTRIBUTE_ID (0x000D)
+#define ZCL_SL_CURRENT_DEBUG_REPORT_ID_ATTRIBUTE_ID (0x000E)
+#define ZCL_SL_TC_SECURITY_ON_NTWK_KEY_ROTATION_ENABLED_ATTRIBUTE_ID (0x000F)
+#define ZCL_SL_WWAH_BAD_PARENT_RECOVERY_ENABLED_ATTRIBUTE_ID (0x0010)
+#define ZCL_SL_PENDING_NETWORK_UPDATE_CHANNEL_ATTRIBUTE_ID (0x0011)
+#define ZCL_SL_PENDING_NETWORK_UPDATE_PANID_ATTRIBUTE_ID (0x0012)
+#define ZCL_SL_OTA_MAX_OFFLINE_DURATION_ATTRIBUTE_ID (0x0013)
diff --git a/src/darwin/Framework/CHIP/gen/attribute-size.h b/src/darwin/Framework/CHIP/gen/attribute-size.h
new file mode 100644
index 0000000..a6caf3a
--- /dev/null
+++ b/src/darwin/Framework/CHIP/gen/attribute-size.h
@@ -0,0 +1,37 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+// Prevent multiple inclusion
+#pragma once
+
+// ZCL attribute sizes
+ZCL_DATA8_ATTRIBUTE_TYPE, 1, ZCL_DATA16_ATTRIBUTE_TYPE, 2, ZCL_DATA24_ATTRIBUTE_TYPE, 3, ZCL_DATA32_ATTRIBUTE_TYPE, 4,
+    ZCL_DATA40_ATTRIBUTE_TYPE, 5, ZCL_DATA48_ATTRIBUTE_TYPE, 6, ZCL_DATA56_ATTRIBUTE_TYPE, 7, ZCL_DATA64_ATTRIBUTE_TYPE, 8,
+    ZCL_BOOLEAN_ATTRIBUTE_TYPE, 1, ZCL_BITMAP8_ATTRIBUTE_TYPE, 1, ZCL_BITMAP16_ATTRIBUTE_TYPE, 2, ZCL_BITMAP24_ATTRIBUTE_TYPE, 3,
+    ZCL_BITMAP32_ATTRIBUTE_TYPE, 4, ZCL_BITMAP40_ATTRIBUTE_TYPE, 5, ZCL_BITMAP48_ATTRIBUTE_TYPE, 6, ZCL_BITMAP56_ATTRIBUTE_TYPE, 7,
+    ZCL_BITMAP64_ATTRIBUTE_TYPE, 8, ZCL_INT8U_ATTRIBUTE_TYPE, 1, ZCL_INT16U_ATTRIBUTE_TYPE, 2, ZCL_INT24U_ATTRIBUTE_TYPE, 3,
+    ZCL_INT32U_ATTRIBUTE_TYPE, 4, ZCL_INT40U_ATTRIBUTE_TYPE, 5, ZCL_INT48U_ATTRIBUTE_TYPE, 6, ZCL_INT56U_ATTRIBUTE_TYPE, 7,
+    ZCL_INT64U_ATTRIBUTE_TYPE, 8, ZCL_INT8S_ATTRIBUTE_TYPE, 1, ZCL_INT16S_ATTRIBUTE_TYPE, 2, ZCL_INT24S_ATTRIBUTE_TYPE, 3,
+    ZCL_INT32S_ATTRIBUTE_TYPE, 4, ZCL_INT40S_ATTRIBUTE_TYPE, 5, ZCL_INT48S_ATTRIBUTE_TYPE, 6, ZCL_INT56S_ATTRIBUTE_TYPE, 7,
+    ZCL_INT64S_ATTRIBUTE_TYPE, 8, ZCL_ENUM8_ATTRIBUTE_TYPE, 1, ZCL_ENUM16_ATTRIBUTE_TYPE, 2, ZCL_FLOAT_SEMI_ATTRIBUTE_TYPE, 2,
+    ZCL_FLOAT_SINGLE_ATTRIBUTE_TYPE, 4, ZCL_FLOAT_DOUBLE_ATTRIBUTE_TYPE, 8, ZCL_TIME_OF_DAY_ATTRIBUTE_TYPE, 4,
+    ZCL_DATE_ATTRIBUTE_TYPE, 4, ZCL_UTC_TIME_ATTRIBUTE_TYPE, 4, ZCL_CLUSTER_ID_ATTRIBUTE_TYPE, 2, ZCL_ATTRIBUTE_ID_ATTRIBUTE_TYPE,
+    2, ZCL_BACNET_OID_ATTRIBUTE_TYPE, 4, ZCL_IEEE_ADDRESS_ATTRIBUTE_TYPE, 8, ZCL_SECURITY_KEY_ATTRIBUTE_TYPE, 16,
+    ZCL_ENDPOINT_ID_ATTRIBUTE_TYPE, 1, ZCL_GROUP_ID_ATTRIBUTE_TYPE, 2, ZCL_COMMAND_ID_ATTRIBUTE_TYPE, 1, ZCL_NODE_ID_ATTRIBUTE_TYPE,
+    8,
diff --git a/src/darwin/Framework/CHIP/gen/attribute-type.h b/src/darwin/Framework/CHIP/gen/attribute-type.h
new file mode 100644
index 0000000..56900dc
--- /dev/null
+++ b/src/darwin/Framework/CHIP/gen/attribute-type.h
@@ -0,0 +1,86 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+// Prevent multiple inclusion
+#pragma once
+
+// ZCL attribute types
+enum
+{
+    ZCL_NO_DATA_ATTRIBUTE_TYPE           = 0x00, // No data
+    ZCL_DATA8_ATTRIBUTE_TYPE             = 0x08, // 8-bit data
+    ZCL_DATA16_ATTRIBUTE_TYPE            = 0x09, // 16-bit data
+    ZCL_DATA24_ATTRIBUTE_TYPE            = 0x0A, // 24-bit data
+    ZCL_DATA32_ATTRIBUTE_TYPE            = 0x0B, // 32-bit data
+    ZCL_DATA40_ATTRIBUTE_TYPE            = 0x0C, // 40-bit data
+    ZCL_DATA48_ATTRIBUTE_TYPE            = 0x0D, // 48-bit data
+    ZCL_DATA56_ATTRIBUTE_TYPE            = 0x0E, // 56-bit data
+    ZCL_DATA64_ATTRIBUTE_TYPE            = 0x0F, // 64-bit data
+    ZCL_BOOLEAN_ATTRIBUTE_TYPE           = 0x10, // Boolean
+    ZCL_BITMAP8_ATTRIBUTE_TYPE           = 0x18, // 8-bit bitmap
+    ZCL_BITMAP16_ATTRIBUTE_TYPE          = 0x19, // 16-bit bitmap
+    ZCL_BITMAP24_ATTRIBUTE_TYPE          = 0x1A, // 24-bit bitmap
+    ZCL_BITMAP32_ATTRIBUTE_TYPE          = 0x1B, // 32-bit bitmap
+    ZCL_BITMAP40_ATTRIBUTE_TYPE          = 0x1C, // 40-bit bitmap
+    ZCL_BITMAP48_ATTRIBUTE_TYPE          = 0x1D, // 48-bit bitmap
+    ZCL_BITMAP56_ATTRIBUTE_TYPE          = 0x1E, // 56-bit bitmap
+    ZCL_BITMAP64_ATTRIBUTE_TYPE          = 0x1F, // 64-bit bitmap
+    ZCL_INT8U_ATTRIBUTE_TYPE             = 0x20, // Unsigned 8-bit integer
+    ZCL_INT16U_ATTRIBUTE_TYPE            = 0x21, // Unsigned 16-bit integer
+    ZCL_INT24U_ATTRIBUTE_TYPE            = 0x22, // Unsigned 24-bit integer
+    ZCL_INT32U_ATTRIBUTE_TYPE            = 0x23, // Unsigned 32-bit integer
+    ZCL_INT40U_ATTRIBUTE_TYPE            = 0x24, // Unsigned 40-bit integer
+    ZCL_INT48U_ATTRIBUTE_TYPE            = 0x25, // Unsigned 48-bit integer
+    ZCL_INT56U_ATTRIBUTE_TYPE            = 0x26, // Unsigned 56-bit integer
+    ZCL_INT64U_ATTRIBUTE_TYPE            = 0x27, // Unsigned 64-bit integer
+    ZCL_INT8S_ATTRIBUTE_TYPE             = 0x28, // Signed 8-bit integer
+    ZCL_INT16S_ATTRIBUTE_TYPE            = 0x29, // Signed 16-bit integer
+    ZCL_INT24S_ATTRIBUTE_TYPE            = 0x2A, // Signed 24-bit integer
+    ZCL_INT32S_ATTRIBUTE_TYPE            = 0x2B, // Signed 32-bit integer
+    ZCL_INT40S_ATTRIBUTE_TYPE            = 0x2C, // Signed 40-bit integer
+    ZCL_INT48S_ATTRIBUTE_TYPE            = 0x2D, // Signed 48-bit integer
+    ZCL_INT56S_ATTRIBUTE_TYPE            = 0x2E, // Signed 56-bit integer
+    ZCL_INT64S_ATTRIBUTE_TYPE            = 0x2F, // Signed 64-bit integer
+    ZCL_ENUM8_ATTRIBUTE_TYPE             = 0x30, // 8-bit enumeration
+    ZCL_ENUM16_ATTRIBUTE_TYPE            = 0x31, // 16-bit enumeration
+    ZCL_FLOAT_SEMI_ATTRIBUTE_TYPE        = 0x38, // Semi-precision
+    ZCL_FLOAT_SINGLE_ATTRIBUTE_TYPE      = 0x39, // Single precision
+    ZCL_FLOAT_DOUBLE_ATTRIBUTE_TYPE      = 0x3A, // Double precision
+    ZCL_OCTET_STRING_ATTRIBUTE_TYPE      = 0x41, // Octet string
+    ZCL_CHAR_STRING_ATTRIBUTE_TYPE       = 0x42, // Character string
+    ZCL_LONG_OCTET_STRING_ATTRIBUTE_TYPE = 0x43, // Long octet string
+    ZCL_LONG_CHAR_STRING_ATTRIBUTE_TYPE  = 0x44, // Long character string
+    ZCL_ARRAY_ATTRIBUTE_TYPE             = 0x48, // Array
+    ZCL_STRUCT_ATTRIBUTE_TYPE            = 0x4C, // Structure
+    ZCL_SET_ATTRIBUTE_TYPE               = 0x50, // Set
+    ZCL_BAG_ATTRIBUTE_TYPE               = 0x51, // Bag
+    ZCL_TIME_OF_DAY_ATTRIBUTE_TYPE       = 0xE0, // Time of day
+    ZCL_DATE_ATTRIBUTE_TYPE              = 0xE1, // Date
+    ZCL_UTC_TIME_ATTRIBUTE_TYPE          = 0xE2, // UTC Time
+    ZCL_CLUSTER_ID_ATTRIBUTE_TYPE        = 0xE8, // Cluster ID
+    ZCL_ATTRIBUTE_ID_ATTRIBUTE_TYPE      = 0xE9, // Attribute ID
+    ZCL_BACNET_OID_ATTRIBUTE_TYPE        = 0xEA, // BACnet OID
+    ZCL_IEEE_ADDRESS_ATTRIBUTE_TYPE      = 0xF0, // IEEE address
+    ZCL_SECURITY_KEY_ATTRIBUTE_TYPE      = 0xF1, // 128-bit security key
+    ZCL_ENDPOINT_ID_ATTRIBUTE_TYPE       = 0xF2, // Endpoint Id
+    ZCL_GROUP_ID_ATTRIBUTE_TYPE          = 0xF3, // Group Id
+    ZCL_COMMAND_ID_ATTRIBUTE_TYPE        = 0xF4, // Command Id
+    ZCL_NODE_ID_ATTRIBUTE_TYPE           = 0xF5, // Node Id
+    ZCL_UNKNOWN_ATTRIBUTE_TYPE           = 0xFF, // Unknown
+};
diff --git a/src/darwin/Framework/CHIP/gen/call-command-handler.cpp b/src/darwin/Framework/CHIP/gen/call-command-handler.cpp
new file mode 100644
index 0000000..ed3fae9
--- /dev/null
+++ b/src/darwin/Framework/CHIP/gen/call-command-handler.cpp
@@ -0,0 +1,1015 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+#include <stdint.h>
+
+#include "af-structs.h"
+#include "call-command-handler.h"
+#include "callback.h"
+#include "cluster-id.h"
+#include "command-id.h"
+#include "util.h"
+
+using namespace chip;
+
+EmberAfStatus emberAfBarrierControlClusterClientCommandParse(EmberAfClusterCommand * cmd);
+EmberAfStatus emberAfBasicClusterClientCommandParse(EmberAfClusterCommand * cmd);
+EmberAfStatus emberAfBindingClusterClientCommandParse(EmberAfClusterCommand * cmd);
+EmberAfStatus emberAfColorControlClusterClientCommandParse(EmberAfClusterCommand * cmd);
+EmberAfStatus emberAfDoorLockClusterClientCommandParse(EmberAfClusterCommand * cmd);
+EmberAfStatus emberAfGroupsClusterClientCommandParse(EmberAfClusterCommand * cmd);
+EmberAfStatus emberAfIdentifyClusterClientCommandParse(EmberAfClusterCommand * cmd);
+EmberAfStatus emberAfLevelControlClusterClientCommandParse(EmberAfClusterCommand * cmd);
+EmberAfStatus emberAfOnOffClusterClientCommandParse(EmberAfClusterCommand * cmd);
+EmberAfStatus emberAfScenesClusterClientCommandParse(EmberAfClusterCommand * cmd);
+EmberAfStatus emberAfTemperatureMeasurementClusterClientCommandParse(EmberAfClusterCommand * cmd);
+
+static EmberAfStatus status(bool wasHandled, bool clusterExists, bool mfgSpecific)
+{
+    if (wasHandled)
+    {
+        return EMBER_ZCL_STATUS_SUCCESS;
+    }
+    else if (mfgSpecific)
+    {
+        return EMBER_ZCL_STATUS_UNSUP_MANUF_CLUSTER_COMMAND;
+    }
+    else if (clusterExists)
+    {
+        return EMBER_ZCL_STATUS_UNSUP_COMMAND;
+    }
+    else
+    {
+        return EMBER_ZCL_STATUS_UNSUPPORTED_CLUSTER;
+    }
+}
+
+// Main command parsing controller.
+EmberAfStatus emberAfClusterSpecificCommandParse(EmberAfClusterCommand * cmd)
+{
+    EmberAfStatus result = status(false, false, cmd->mfgSpecific);
+    if (cmd->direction == (uint8_t) ZCL_DIRECTION_SERVER_TO_CLIENT &&
+        emberAfContainsClientWithMfgCode(cmd->apsFrame->destinationEndpoint, cmd->apsFrame->clusterId, cmd->mfgCode))
+    {
+        switch (cmd->apsFrame->clusterId)
+        {
+        case ZCL_BARRIER_CONTROL_CLUSTER_ID:
+            // No commands are enabled for cluster Barrier Control
+            result = status(false, true, cmd->mfgSpecific);
+            break;
+        case ZCL_BASIC_CLUSTER_ID:
+            // No commands are enabled for cluster Basic
+            result = status(false, true, cmd->mfgSpecific);
+            break;
+        case ZCL_BINDING_CLUSTER_ID:
+            // No commands are enabled for cluster Binding
+            result = status(false, true, cmd->mfgSpecific);
+            break;
+        case ZCL_COLOR_CONTROL_CLUSTER_ID:
+            // No commands are enabled for cluster Color Control
+            result = status(false, true, cmd->mfgSpecific);
+            break;
+        case ZCL_DOOR_LOCK_CLUSTER_ID:
+            result = emberAfDoorLockClusterClientCommandParse(cmd);
+            break;
+        case ZCL_GROUPS_CLUSTER_ID:
+            result = emberAfGroupsClusterClientCommandParse(cmd);
+            break;
+        case ZCL_IDENTIFY_CLUSTER_ID:
+            result = emberAfIdentifyClusterClientCommandParse(cmd);
+            break;
+        case ZCL_LEVEL_CONTROL_CLUSTER_ID:
+            // No commands are enabled for cluster Level Control
+            result = status(false, true, cmd->mfgSpecific);
+            break;
+        case ZCL_ON_OFF_CLUSTER_ID:
+            // No commands are enabled for cluster On/off
+            result = status(false, true, cmd->mfgSpecific);
+            break;
+        case ZCL_SCENES_CLUSTER_ID:
+            result = emberAfScenesClusterClientCommandParse(cmd);
+            break;
+        case ZCL_TEMP_MEASUREMENT_CLUSTER_ID:
+            // No commands are enabled for cluster Temperature Measurement
+            result = status(false, true, cmd->mfgSpecific);
+            break;
+        default:
+            // Unrecognized cluster ID, error status will apply.
+            break;
+        }
+    }
+    else if (cmd->direction == (uint8_t) ZCL_DIRECTION_CLIENT_TO_SERVER &&
+             emberAfContainsServerWithMfgCode(cmd->apsFrame->destinationEndpoint, cmd->apsFrame->clusterId, cmd->mfgCode))
+    {
+        switch (cmd->apsFrame->clusterId)
+        {
+        default:
+            // Unrecognized cluster ID, error status will apply.
+            break;
+        }
+    }
+    return result;
+}
+
+// Cluster specific command parsing
+
+EmberAfStatus emberAfDoorLockClusterClientCommandParse(EmberAfClusterCommand * cmd)
+{
+    bool wasHandled = false;
+
+    if (!cmd->mfgSpecific)
+    {
+        switch (cmd->commandId)
+        {
+        case ZCL_CLEAR_ALL_PINS_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t status;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfDoorLockClusterClearAllPinsResponseCallback(status);
+            break;
+        }
+        case ZCL_CLEAR_ALL_RFIDS_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t status;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfDoorLockClusterClearAllRfidsResponseCallback(status);
+            break;
+        }
+        case ZCL_CLEAR_HOLIDAY_SCHEDULE_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t status;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfDoorLockClusterClearHolidayScheduleResponseCallback(status);
+            break;
+        }
+        case ZCL_CLEAR_PIN_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t status;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfDoorLockClusterClearPinResponseCallback(status);
+            break;
+        }
+        case ZCL_CLEAR_RFID_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t status;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfDoorLockClusterClearRfidResponseCallback(status);
+            break;
+        }
+        case ZCL_CLEAR_WEEKDAY_SCHEDULE_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t status;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfDoorLockClusterClearWeekdayScheduleResponseCallback(status);
+            break;
+        }
+        case ZCL_CLEAR_YEARDAY_SCHEDULE_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t status;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfDoorLockClusterClearYeardayScheduleResponseCallback(status);
+            break;
+        }
+        case ZCL_GET_HOLIDAY_SCHEDULE_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t scheduleId;
+            uint8_t status;
+            uint32_t localStartTime;
+            uint32_t localEndTime;
+            uint8_t operatingModeDuringHoliday;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            scheduleId    = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status        = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 4)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            localStartTime = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset  = static_cast<uint16_t>(payloadOffset + 4);
+            if (cmd->bufLen < payloadOffset + 4)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            localEndTime  = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 4);
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            operatingModeDuringHoliday = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfDoorLockClusterGetHolidayScheduleResponseCallback(scheduleId, status, localStartTime, localEndTime,
+                                                                                  operatingModeDuringHoliday);
+            break;
+        }
+        case ZCL_GET_LOG_RECORD_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint16_t logEntryId;
+            uint32_t timestamp;
+            uint8_t eventType;
+            uint8_t source;
+            uint8_t eventIdOrAlarmCode;
+            uint16_t userId;
+            uint8_t * pin;
+
+            if (cmd->bufLen < payloadOffset + 2)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            logEntryId    = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
+            if (cmd->bufLen < payloadOffset + 4)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            timestamp     = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 4);
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            eventType     = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            source        = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            eventIdOrAlarmCode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset      = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 2)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            userId        = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
+            if (cmd->bufLen < payloadOffset + 1u)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            pin = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfDoorLockClusterGetLogRecordResponseCallback(logEntryId, timestamp, eventType, source,
+                                                                            eventIdOrAlarmCode, userId, pin);
+            break;
+        }
+        case ZCL_GET_PIN_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint16_t userId;
+            uint8_t userStatus;
+            uint8_t userType;
+            uint8_t * pin;
+
+            if (cmd->bufLen < payloadOffset + 2)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            userId        = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            userStatus    = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            userType      = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 1u)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            pin = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfDoorLockClusterGetPinResponseCallback(userId, userStatus, userType, pin);
+            break;
+        }
+        case ZCL_GET_RFID_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint16_t userId;
+            uint8_t userStatus;
+            uint8_t userType;
+            uint8_t * rfid;
+
+            if (cmd->bufLen < payloadOffset + 2)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            userId        = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            userStatus    = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            userType      = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 1u)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            rfid = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfDoorLockClusterGetRfidResponseCallback(userId, userStatus, userType, rfid);
+            break;
+        }
+        case ZCL_GET_USER_TYPE_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint16_t userId;
+            uint8_t userType;
+
+            if (cmd->bufLen < payloadOffset + 2)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            userId        = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            userType = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfDoorLockClusterGetUserTypeResponseCallback(userId, userType);
+            break;
+        }
+        case ZCL_GET_WEEKDAY_SCHEDULE_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t scheduleId;
+            uint16_t userId;
+            uint8_t status;
+            uint8_t daysMask;
+            uint8_t startHour;
+            uint8_t startMinute;
+            uint8_t endHour;
+            uint8_t endMinute;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            scheduleId    = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 2)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            userId        = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status        = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            daysMask      = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            startHour     = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            startMinute   = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            endHour       = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            endMinute = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfDoorLockClusterGetWeekdayScheduleResponseCallback(scheduleId, userId, status, daysMask, startHour,
+                                                                                  startMinute, endHour, endMinute);
+            break;
+        }
+        case ZCL_GET_YEARDAY_SCHEDULE_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t scheduleId;
+            uint16_t userId;
+            uint8_t status;
+            uint32_t localStartTime;
+            uint32_t localEndTime;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            scheduleId    = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 2)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            userId        = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status        = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 4)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            localStartTime = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset  = static_cast<uint16_t>(payloadOffset + 4);
+            if (cmd->bufLen < payloadOffset + 4)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            localEndTime = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled =
+                emberAfDoorLockClusterGetYeardayScheduleResponseCallback(scheduleId, userId, status, localStartTime, localEndTime);
+            break;
+        }
+        case ZCL_LOCK_DOOR_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t status;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfDoorLockClusterLockDoorResponseCallback(status);
+            break;
+        }
+        case ZCL_SET_HOLIDAY_SCHEDULE_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t status;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfDoorLockClusterSetHolidayScheduleResponseCallback(status);
+            break;
+        }
+        case ZCL_SET_PIN_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t status;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfDoorLockClusterSetPinResponseCallback(status);
+            break;
+        }
+        case ZCL_SET_RFID_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t status;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfDoorLockClusterSetRfidResponseCallback(status);
+            break;
+        }
+        case ZCL_SET_USER_TYPE_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t status;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfDoorLockClusterSetUserTypeResponseCallback(status);
+            break;
+        }
+        case ZCL_SET_WEEKDAY_SCHEDULE_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t status;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfDoorLockClusterSetWeekdayScheduleResponseCallback(status);
+            break;
+        }
+        case ZCL_SET_YEARDAY_SCHEDULE_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t status;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfDoorLockClusterSetYeardayScheduleResponseCallback(status);
+            break;
+        }
+        case ZCL_UNLOCK_DOOR_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t status;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfDoorLockClusterUnlockDoorResponseCallback(status);
+            break;
+        }
+        case ZCL_UNLOCK_WITH_TIMEOUT_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t status;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfDoorLockClusterUnlockWithTimeoutResponseCallback(status);
+            break;
+        }
+        default: {
+            // Unrecognized command ID, error status will apply.
+            break;
+        }
+        }
+    }
+    return status(wasHandled, true, cmd->mfgSpecific);
+}
+EmberAfStatus emberAfGroupsClusterClientCommandParse(EmberAfClusterCommand * cmd)
+{
+    bool wasHandled = false;
+
+    if (!cmd->mfgSpecific)
+    {
+        switch (cmd->commandId)
+        {
+        case ZCL_ADD_GROUP_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t status;
+            uint16_t groupId;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status        = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 2)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfGroupsClusterAddGroupResponseCallback(status, groupId);
+            break;
+        }
+        case ZCL_GET_GROUP_MEMBERSHIP_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t capacity;
+            uint8_t groupCount;
+            /* TYPE WARNING: array array defaults to */ uint8_t * groupList;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            capacity      = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            groupCount    = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            groupList     = cmd->buffer + payloadOffset;
+
+            wasHandled = emberAfGroupsClusterGetGroupMembershipResponseCallback(capacity, groupCount, groupList);
+            break;
+        }
+        case ZCL_REMOVE_GROUP_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t status;
+            uint16_t groupId;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status        = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 2)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfGroupsClusterRemoveGroupResponseCallback(status, groupId);
+            break;
+        }
+        case ZCL_VIEW_GROUP_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t status;
+            uint16_t groupId;
+            uint8_t * groupName;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status        = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 2)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            groupId       = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
+            if (cmd->bufLen < payloadOffset + 1u)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            groupName = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfGroupsClusterViewGroupResponseCallback(status, groupId, groupName);
+            break;
+        }
+        default: {
+            // Unrecognized command ID, error status will apply.
+            break;
+        }
+        }
+    }
+    return status(wasHandled, true, cmd->mfgSpecific);
+}
+EmberAfStatus emberAfIdentifyClusterClientCommandParse(EmberAfClusterCommand * cmd)
+{
+    bool wasHandled = false;
+
+    if (!cmd->mfgSpecific)
+    {
+        switch (cmd->commandId)
+        {
+        case ZCL_IDENTIFY_QUERY_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint16_t timeout;
+
+            if (cmd->bufLen < payloadOffset + 2)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            timeout = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfIdentifyClusterIdentifyQueryResponseCallback(timeout);
+            break;
+        }
+        default: {
+            // Unrecognized command ID, error status will apply.
+            break;
+        }
+        }
+    }
+    return status(wasHandled, true, cmd->mfgSpecific);
+}
+EmberAfStatus emberAfScenesClusterClientCommandParse(EmberAfClusterCommand * cmd)
+{
+    bool wasHandled = false;
+
+    if (!cmd->mfgSpecific)
+    {
+        switch (cmd->commandId)
+        {
+        case ZCL_ADD_SCENE_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t status;
+            uint16_t groupId;
+            uint8_t sceneId;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status        = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 2)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            groupId       = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            sceneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfScenesClusterAddSceneResponseCallback(status, groupId, sceneId);
+            break;
+        }
+        case ZCL_GET_SCENE_MEMBERSHIP_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t status;
+            uint8_t capacity;
+            uint16_t groupId;
+            uint8_t sceneCount;
+            /* TYPE WARNING: array array defaults to */ uint8_t * sceneList;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status        = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            capacity      = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 2)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            groupId       = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
+            if (status == 0)
+            {
+                if (cmd->bufLen < payloadOffset + 1)
+                {
+                    return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+                }
+                sceneCount    = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+                payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            }
+            else
+            {
+                sceneCount = UINT8_MAX;
+            }
+            if (status == 0)
+            {
+                sceneList = cmd->buffer + payloadOffset;
+            }
+            else
+            {
+                sceneList = NULL;
+            }
+
+            wasHandled = emberAfScenesClusterGetSceneMembershipResponseCallback(status, capacity, groupId, sceneCount, sceneList);
+            break;
+        }
+        case ZCL_REMOVE_ALL_SCENES_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t status;
+            uint16_t groupId;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status        = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 2)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfScenesClusterRemoveAllScenesResponseCallback(status, groupId);
+            break;
+        }
+        case ZCL_REMOVE_SCENE_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t status;
+            uint16_t groupId;
+            uint8_t sceneId;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status        = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 2)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            groupId       = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            sceneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfScenesClusterRemoveSceneResponseCallback(status, groupId, sceneId);
+            break;
+        }
+        case ZCL_STORE_SCENE_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t status;
+            uint16_t groupId;
+            uint8_t sceneId;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status        = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 2)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            groupId       = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            sceneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+            wasHandled = emberAfScenesClusterStoreSceneResponseCallback(status, groupId, sceneId);
+            break;
+        }
+        case ZCL_VIEW_SCENE_RESPONSE_COMMAND_ID: {
+            uint16_t payloadOffset = cmd->payloadStartIndex;
+            uint8_t status;
+            uint16_t groupId;
+            uint8_t sceneId;
+            uint16_t transitionTime;
+            uint8_t * sceneName;
+            /* TYPE WARNING: array array defaults to */ uint8_t * extensionFieldSets;
+
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            status        = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (cmd->bufLen < payloadOffset + 2)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            groupId       = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
+            if (cmd->bufLen < payloadOffset + 1)
+            {
+                return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+            }
+            sceneId       = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+            payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
+            if (status == 0)
+            {
+                if (cmd->bufLen < payloadOffset + 2)
+                {
+                    return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+                }
+                transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+                payloadOffset  = static_cast<uint16_t>(payloadOffset + 2);
+            }
+            else
+            {
+                transitionTime = UINT16_MAX;
+            }
+            if (status == 0)
+            {
+                if (cmd->bufLen < payloadOffset + 1u)
+                {
+                    return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+                }
+                sceneName     = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+                payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(sceneName) + 1u);
+            }
+            else
+            {
+                sceneName = NULL;
+            }
+            if (status == 0)
+            {
+                extensionFieldSets = cmd->buffer + payloadOffset;
+            }
+            else
+            {
+                extensionFieldSets = NULL;
+            }
+
+            wasHandled = emberAfScenesClusterViewSceneResponseCallback(status, groupId, sceneId, transitionTime, sceneName,
+                                                                       extensionFieldSets);
+            break;
+        }
+        default: {
+            // Unrecognized command ID, error status will apply.
+            break;
+        }
+        }
+    }
+    return status(wasHandled, true, cmd->mfgSpecific);
+}
diff --git a/src/darwin/Framework/CHIP/CHIPDeviceCallback.h b/src/darwin/Framework/CHIP/gen/call-command-handler.h
similarity index 73%
copy from src/darwin/Framework/CHIP/CHIPDeviceCallback.h
copy to src/darwin/Framework/CHIP/gen/call-command-handler.h
index 6406069..16314d8 100644
--- a/src/darwin/Framework/CHIP/CHIPDeviceCallback.h
+++ b/src/darwin/Framework/CHIP/gen/call-command-handler.h
@@ -1,6 +1,6 @@
-/**
+/*
  *
- *    Copyright (c) 2020 Project CHIP Authors
+ *    Copyright (c) 2021 Project CHIP Authors
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -15,12 +15,9 @@
  *    limitations under the License.
  */
 
-#import <Foundation/Foundation.h>
+// THIS FILE IS GENERATED BY ZAP
 
-#import <CHIP/CHIPError.h>
+// Prevent multiple inclusion
+#pragma once
 
-NS_ASSUME_NONNULL_BEGIN
-
-typedef void (^CHIPDeviceCallback)(NSError * error);
-
-NS_ASSUME_NONNULL_END
+#include "af-types.h"
diff --git a/src/darwin/Framework/CHIP/gen/callback-stub.cpp b/src/darwin/Framework/CHIP/gen/callback-stub.cpp
new file mode 100644
index 0000000..c5dde30
--- /dev/null
+++ b/src/darwin/Framework/CHIP/gen/callback-stub.cpp
@@ -0,0 +1,684 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+#include "callback.h"
+#include "cluster-id.h"
+
+using namespace chip;
+
+// Cluster Init Functions
+void emberAfClusterInitCallback(EndpointId endpoint, ClusterId clusterId)
+{
+    switch (clusterId)
+    {
+    case ZCL_BARRIER_CONTROL_CLUSTER_ID:
+        emberAfBarrierControlClusterInitCallback(endpoint);
+        break;
+    case ZCL_BASIC_CLUSTER_ID:
+        emberAfBasicClusterInitCallback(endpoint);
+        break;
+    case ZCL_BINDING_CLUSTER_ID:
+        emberAfBindingClusterInitCallback(endpoint);
+        break;
+    case ZCL_COLOR_CONTROL_CLUSTER_ID:
+        emberAfColorControlClusterInitCallback(endpoint);
+        break;
+    case ZCL_DOOR_LOCK_CLUSTER_ID:
+        emberAfDoorLockClusterInitCallback(endpoint);
+        break;
+    case ZCL_GROUPS_CLUSTER_ID:
+        emberAfGroupsClusterInitCallback(endpoint);
+        break;
+    case ZCL_IDENTIFY_CLUSTER_ID:
+        emberAfIdentifyClusterInitCallback(endpoint);
+        break;
+    case ZCL_LEVEL_CONTROL_CLUSTER_ID:
+        emberAfLevelControlClusterInitCallback(endpoint);
+        break;
+    case ZCL_ON_OFF_CLUSTER_ID:
+        emberAfOnOffClusterInitCallback(endpoint);
+        break;
+    case ZCL_SCENES_CLUSTER_ID:
+        emberAfScenesClusterInitCallback(endpoint);
+        break;
+    case ZCL_TEMP_MEASUREMENT_CLUSTER_ID:
+        emberAfTemperatureMeasurementClusterInitCallback(endpoint);
+        break;
+    default:
+        // Unrecognized cluster ID
+        break;
+    }
+}
+
+void __attribute__((weak)) emberAfBarrierControlClusterInitCallback(EndpointId endpoint)
+{
+    // To prevent warning
+    (void) endpoint;
+}
+void __attribute__((weak)) emberAfBasicClusterInitCallback(EndpointId endpoint)
+{
+    // To prevent warning
+    (void) endpoint;
+}
+void __attribute__((weak)) emberAfBindingClusterInitCallback(EndpointId endpoint)
+{
+    // To prevent warning
+    (void) endpoint;
+}
+void __attribute__((weak)) emberAfColorControlClusterInitCallback(EndpointId endpoint)
+{
+    // To prevent warning
+    (void) endpoint;
+}
+void __attribute__((weak)) emberAfDoorLockClusterInitCallback(EndpointId endpoint)
+{
+    // To prevent warning
+    (void) endpoint;
+}
+void __attribute__((weak)) emberAfGroupsClusterInitCallback(EndpointId endpoint)
+{
+    // To prevent warning
+    (void) endpoint;
+}
+void __attribute__((weak)) emberAfIdentifyClusterInitCallback(EndpointId endpoint)
+{
+    // To prevent warning
+    (void) endpoint;
+}
+void __attribute__((weak)) emberAfLevelControlClusterInitCallback(EndpointId endpoint)
+{
+    // To prevent warning
+    (void) endpoint;
+}
+void __attribute__((weak)) emberAfOnOffClusterInitCallback(EndpointId endpoint)
+{
+    // To prevent warning
+    (void) endpoint;
+}
+void __attribute__((weak)) emberAfScenesClusterInitCallback(EndpointId endpoint)
+{
+    // To prevent warning
+    (void) endpoint;
+}
+void __attribute__((weak)) emberAfTemperatureMeasurementClusterInitCallback(EndpointId endpoint)
+{
+    // To prevent warning
+    (void) endpoint;
+}
+
+//
+// Non-Cluster Related Callbacks
+//
+
+/** @brief Add To Current App Tasks
+ *
+ * This function is only useful to sleepy end devices.  This function will note
+ * the passed item as part of a set of tasks the application has outstanding
+ * (e.g. message sent requiring APS acknwoledgement).  This will affect how the
+ * application behaves with regard to sleeping and polling.  Until the
+ * outstanding task is completed, the device may poll more frequently and sleep
+ * less often.
+ *
+ * @param tasks   Ver.: always
+ */
+void __attribute__((weak)) emberAfAddToCurrentAppTasksCallback(EmberAfApplicationTask tasks) {}
+
+/** @brief Remove From Current App Tasks
+ *
+ * This function is only useful to sleepy end devices.  This function will
+ * remove the passed item from the set of tasks the application has outstanding
+ * (e.g. message sent requiring APS acknwoledgement).  This will affect how the
+ * application behaves with regard to sleeping and polling.  Removing the item
+ * from the list of outstanding tasks may allow the device to sleep longer and
+ * poll less frequently.  If there are other outstanding tasks the system may
+ * still have to stay away and poll more often.
+ *
+ * @param tasks   Ver.: always
+ */
+void __attribute__((weak)) emberAfRemoveFromCurrentAppTasksCallback(EmberAfApplicationTask tasks) {}
+
+/** @brief Allow Network Write Attribute
+ *
+ * This function is called by the application framework before it writes an
+ * attribute in response to a write attribute request from an external device.
+ * The value passed into this callback is the value to which the attribute is to
+ * be set by the framework.
+        Example:	In mirroring simple metering data
+ * on an Energy Services Interface (ESI) (formerly called Energy Service Portal
+ * (ESP) in SE 1.0).), a mirrored simple meter needs to write read-only
+ * attributes on its mirror. The-meter-mirror sample application, located in
+ * app/framework/sample-apps, uses this callback to allow the mirrored device to
+ * write simple metering attributes on the mirror regardless of the fact that
+ * most simple metering attributes are defined as read-only by the ZigBee
+ * specification.
+        Note:	The ZCL specification does not (as of this
+ * writing) specify any permission-level security for writing writeable
+ * attributes. As far as the ZCL specification is concerned, if an attribute is
+ * writeable, any device that has a link key for the device should be able to
+ * write that attribute. Furthermore if an attribute is read only, it should not
+ * be written over the air. Thus, if you implement permissions for writing
+ * attributes as a feature, you MAY be operating outside the specification. This
+ * is unlikely to be a problem for writing read-only attributes, but it may be a
+ * problem for attributes that are writeable according to the specification but
+ * restricted by the application implementing this callback.
+ *
+ * @param endpoint   Ver.: always
+ * @param clusterId   Ver.: always
+ * @param attributeId   Ver.: always
+ * @param mask   Ver.: always
+ * @param manufacturerCode   Ver.: always
+ * @param value   Ver.: always
+ * @param type   Ver.: always
+ */
+EmberAfAttributeWritePermission __attribute__((weak))
+emberAfAllowNetworkWriteAttributeCallback(EndpointId endpoint, ClusterId clusterId, AttributeId attributeId, uint8_t mask,
+                                          uint16_t manufacturerCode, uint8_t * value, uint8_t type)
+{
+    return EMBER_ZCL_ATTRIBUTE_WRITE_PERMISSION_ALLOW_WRITE_NORMAL; // Default
+}
+
+/** @brief Attribute Read Access
+ *
+ * This function is called whenever the Application Framework needs to check
+ * access permission for an attribute read.
+ *
+ * @param endpoint   Ver.: always
+ * @param clusterId   Ver.: always
+ * @param manufacturerCode   Ver.: always
+ * @param attributeId   Ver.: always
+ */
+bool __attribute__((weak))
+emberAfAttributeReadAccessCallback(EndpointId endpoint, ClusterId clusterId, uint16_t manufacturerCode, AttributeId attributeId)
+{
+    return true;
+}
+
+/** @brief Attribute Write Access
+ *
+ * This function is called whenever the Application Framework needs to check
+ * access permission for an attribute write.
+ *
+ * @param endpoint   Ver.: always
+ * @param clusterId   Ver.: always
+ * @param manufacturerCode   Ver.: always
+ * @param attributeId   Ver.: always
+ */
+bool __attribute__((weak))
+emberAfAttributeWriteAccessCallback(EndpointId endpoint, ClusterId clusterId, uint16_t manufacturerCode, AttributeId attributeId)
+{
+    return true;
+}
+
+/** @brief Default Response
+ *
+ * This function is called by the application framework when a Default Response
+ * command is received from an external device.  The application should return
+ * true if the message was processed or false if it was not.
+ *
+ * @param clusterId The cluster identifier of this response.  Ver.: always
+ * @param commandId The command identifier to which this is a response.  Ver.:
+ * always
+ * @param status Specifies either SUCCESS or the nature of the error that was
+ * detected in the received command.  Ver.: always
+ */
+bool __attribute__((weak)) emberAfDefaultResponseCallback(ClusterId clusterId, CommandId commandId, EmberAfStatus status)
+{
+    return false;
+}
+
+/** @brief Configure Reporting Response
+ *
+ * This function is called by the application framework when a Configure
+ * Reporting Response command is received from an external device.  The
+ * application should return true if the message was processed or false if it
+ * was not.
+ *
+ * @param clusterId The cluster identifier of this response.  Ver.: always
+ * @param buffer Buffer containing the list of attribute status records.  Ver.:
+ * always
+ * @param bufLen The length in bytes of the list.  Ver.: always
+ */
+bool __attribute__((weak)) emberAfConfigureReportingResponseCallback(ClusterId clusterId, uint8_t * buffer, uint16_t bufLen)
+{
+    return false;
+}
+
+/** @brief Read Reporting Configuration Response
+ *
+ * This function is called by the application framework when a Read Reporting
+ * Configuration Response command is received from an external device.  The
+ * application should return true if the message was processed or false if it
+ * was not.
+ *
+ * @param clusterId The cluster identifier of this response.  Ver.: always
+ * @param buffer Buffer containing the list of attribute reporting configuration
+ * records.  Ver.: always
+ * @param bufLen The length in bytes of the list.  Ver.: always
+ */
+bool __attribute__((weak)) emberAfReadReportingConfigurationResponseCallback(ClusterId clusterId, uint8_t * buffer, uint16_t bufLen)
+{
+    return false;
+}
+
+/** @brief Discover Attributes Response
+ *
+ * This function is called by the application framework when a Discover
+ * Attributes Response or Discover Attributes Extended Response command is
+ * received from an external device.  The Discover Attributes Response command
+ * contains a bool indicating if discovery is complete and a list of zero or
+ * more attribute identifier/type records. The final argument indicates whether
+ * the response is in the extended format or not.  The application should return
+ * true if the message was processed or false if it was not.
+ *
+ * @param clusterId The cluster identifier of this response.  Ver.: always
+ * @param discoveryComplete Indicates whether there are more attributes to be
+ * discovered.  true if there are no more attributes to be discovered.  Ver.:
+ * always
+ * @param buffer Buffer containing the list of attribute identifier/type
+ * records.  Ver.: always
+ * @param bufLen The length in bytes of the list.  Ver.: always
+ * @param extended Indicates whether the response is in the extended format or
+ * not.  Ver.: always
+ */
+bool __attribute__((weak)) emberAfDiscoverAttributesResponseCallback(ClusterId clusterId, bool discoveryComplete, uint8_t * buffer,
+                                                                     uint16_t bufLen, bool extended)
+{
+    return false;
+}
+
+/** @brief Discover Commands Generated Response
+ *
+ * This function is called by the framework when Discover Commands Generated
+ * Response is received.
+ *
+ * @param clusterId The cluster identifier of this response.  Ver.: always
+ * @param manufacturerCode Manufacturer code  Ver.: always
+ * @param discoveryComplete Indicates whether there are more commands to be
+ * discovered.  Ver.: always
+ * @param commandIds Buffer containing the list of command identifiers.  Ver.:
+ * always
+ * @param commandIdCount The length of bytes of the list, whish is the same as
+ * the number of identifiers.  Ver.: always
+ */
+bool __attribute__((weak))
+emberAfDiscoverCommandsGeneratedResponseCallback(ClusterId clusterId, uint16_t manufacturerCode, bool discoveryComplete,
+                                                 CommandId * commandIds, uint16_t commandIdCount)
+{
+    return false;
+}
+
+/** @brief Discover Commands Received Response
+ *
+ * This function is called by the framework when Discover Commands Received
+ * Response is received.
+ *
+ * @param clusterId The cluster identifier of this response.  Ver.: always
+ * @param manufacturerCode Manufacturer code  Ver.: always
+ * @param discoveryComplete Indicates whether there are more commands to be
+ * discovered.  Ver.: always
+ * @param commandIds Buffer containing the list of command identifiers.  Ver.:
+ * always
+ * @param commandIdCount The length of bytes of the list, whish is the same as
+ * the number of identifiers.  Ver.: always
+ */
+bool __attribute__((weak))
+emberAfDiscoverCommandsReceivedResponseCallback(ClusterId clusterId, uint16_t manufacturerCode, bool discoveryComplete,
+                                                CommandId * commandIds, uint16_t commandIdCount)
+{
+    return false;
+}
+
+/** @brief Pre Command Received
+ *
+ * This callback is the second in the Application Framework's message processing
+ * chain. At this point in the processing of incoming over-the-air messages, the
+ * application has determined that the incoming message is a ZCL command. It
+ * parses enough of the message to populate an EmberAfClusterCommand struct. The
+ * Application Framework defines this struct value in a local scope to the
+ * command processing but also makes it available through a global pointer
+ * called emberAfCurrentCommand, in app/framework/util/util.c. When command
+ * processing is complete, this pointer is cleared.
+ *
+ * @param cmd   Ver.: always
+ */
+bool __attribute__((weak)) emberAfPreCommandReceivedCallback(EmberAfClusterCommand * cmd)
+{
+    return false;
+}
+
+/** @brief Pre Message Send
+ *
+ * This function is called by the framework when it is about to pass a message
+ * to the stack primitives for sending.   This message may or may not be ZCL,
+ * ZDO, or some other protocol.  This is called prior to
+        any ZigBee
+ * fragmentation that may be done.  If the function returns true it is assumed
+ * the callback has consumed and processed the message.  The callback must also
+ * set the EmberStatus status code to be passed back to the caller.  The
+ * framework will do no further processing on the message.
+        If the
+ * function returns false then it is assumed that the callback has not processed
+ * the mesasge and the framework will continue to process accordingly.
+ *
+ * @param messageStruct The structure containing the parameters of the APS
+ * message to be sent.  Ver.: always
+ * @param status A pointer to the status code value that will be returned to the
+ * caller.  Ver.: always
+ */
+bool __attribute__((weak)) emberAfPreMessageSendCallback(EmberAfMessageStruct * messageStruct, EmberStatus * status)
+{
+    return false;
+}
+
+/** @brief Message Sent
+ *
+ * This function is called by the application framework from the message sent
+ * handler, when it is informed by the stack regarding the message sent status.
+ * All of the values passed to the emberMessageSentHandler are passed on to this
+ * callback. This provides an opportunity for the application to verify that its
+ * message has been sent successfully and take the appropriate action. This
+ * callback should return a bool value of true or false. A value of true
+ * indicates that the message sent notification has been handled and should not
+ * be handled by the application framework.
+ *
+ * @param type   Ver.: always
+ * @param indexOrDestination   Ver.: always
+ * @param apsFrame   Ver.: always
+ * @param msgLen   Ver.: always
+ * @param message   Ver.: always
+ * @param status   Ver.: always
+ */
+bool __attribute__((weak))
+emberAfMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination, EmberApsFrame * apsFrame, uint16_t msgLen,
+                           uint8_t * message, EmberStatus status)
+{
+    return false;
+}
+
+/** @brief Pre Attribute Change
+ *
+ * This function is called by the application framework before it changes an
+ * attribute value.  The value passed into this callback is the value to which
+ * the attribute is to be set by the framework.  The application should return
+ * ::EMBER_ZCL_STATUS_SUCCESS to permit the change or any other ::EmberAfStatus
+ * to reject it.
+ *
+ * @param endpoint   Ver.: always
+ * @param clusterId   Ver.: always
+ * @param attributeId   Ver.: always
+ * @param mask   Ver.: always
+ * @param manufacturerCode   Ver.: always
+ * @param type   Ver.: always
+ * @param size   Ver.: always
+ * @param value   Ver.: always
+ */
+EmberAfStatus __attribute__((weak))
+emberAfPreAttributeChangeCallback(EndpointId endpoint, ClusterId clusterId, AttributeId attributeId, uint8_t mask,
+                                  uint16_t manufacturerCode, uint8_t type, uint8_t size, uint8_t * value)
+{
+    return EMBER_ZCL_STATUS_SUCCESS;
+}
+
+/** @brief Post Attribute Change
+ *
+ * This function is called by the application framework after it changes an
+ * attribute value. The value passed into this callback is the value to which
+ * the attribute was set by the framework.
+ *
+ * @param endpoint   Ver.: always
+ * @param clusterId   Ver.: always
+ * @param attributeId   Ver.: always
+ * @param mask   Ver.: always
+ * @param manufacturerCode   Ver.: always
+ * @param type   Ver.: always
+ * @param size   Ver.: always
+ * @param value   Ver.: always
+ */
+void __attribute__((weak))
+emberAfPostAttributeChangeCallback(EndpointId endpoint, ClusterId clusterId, AttributeId attributeId, uint8_t mask,
+                                   uint16_t manufacturerCode, uint8_t type, uint8_t size, uint8_t * value)
+{}
+
+/** @brief Read Attributes Response
+ *
+ * This function is called by the application framework when a Read Attributes
+ * Response command is received from an external device.  The application should
+ * return true if the message was processed or false if it was not.
+ *
+ * @param clusterId The cluster identifier of this response.  Ver.: always
+ * @param buffer Buffer containing the list of read attribute status records.
+ * Ver.: always
+ * @param bufLen The length in bytes of the list.  Ver.: always
+ */
+bool __attribute__((weak)) emberAfReadAttributesResponseCallback(ClusterId clusterId, uint8_t * buffer, uint16_t bufLen)
+{
+    return false;
+}
+
+/** @brief External Attribute Read
+ *
+ * Like emberAfExternalAttributeWriteCallback above, this function is called
+ * when the framework needs to read an attribute that is not stored within the
+ * Application Framework's data structures.
+        All of the important
+ * information about the attribute itself is passed as a pointer to an
+ * EmberAfAttributeMetadata struct, which is stored within the application and
+ * used to manage the attribute. A complete description of the
+ * EmberAfAttributeMetadata struct is provided in
+ * app/framework/include/af-types.h
+        This function assumes that the
+ * application is able to read the attribute, write it into the passed buffer,
+ * and return immediately. Any attributes that require a state machine for
+ * reading and writing are not really candidates for externalization at the
+ * present time. The Application Framework does not currently include a state
+ * machine for reading or writing attributes that must take place across a
+ * series of application ticks. Attributes that cannot be read in a timely
+ * manner should be stored within the Application Framework and updated
+ * occasionally by the application code from within the
+ * emberAfMainTickCallback.
+        If the application was successfully able to
+ * read the attribute and write it into the passed buffer, it should return a
+ * value of EMBER_ZCL_STATUS_SUCCESS. Ensure that the size of the externally
+ * managed attribute value is smaller than what the buffer can hold. In the case
+ * of a buffer overflow throw an appropriate error such as
+ * EMBER_ZCL_STATUS_INSUFFICIENT_SPACE. Any other return value indicates the
+ * application was not able to read the attribute.
+ *
+ * @param endpoint   Ver.: always
+ * @param clusterId   Ver.: always
+ * @param attributeMetadata   Ver.: always
+ * @param manufacturerCode   Ver.: always
+ * @param buffer   Ver.: always
+ * @param maxReadLength   Ver.: always
+ */
+EmberAfStatus __attribute__((weak))
+emberAfExternalAttributeReadCallback(EndpointId endpoint, ClusterId clusterId, EmberAfAttributeMetadata * attributeMetadata,
+                                     uint16_t manufacturerCode, uint8_t * buffer, uint16_t maxReadLength)
+{
+    return EMBER_ZCL_STATUS_FAILURE;
+}
+
+/** @brief Write Attributes Response
+ *
+ * This function is called by the application framework when a Write Attributes
+ * Response command is received from an external device.  The application should
+ * return true if the message was processed or false if it was not.
+ *
+ * @param clusterId The cluster identifier of this response.  Ver.: always
+ * @param buffer Buffer containing the list of write attribute status records.
+ * Ver.: always
+ * @param bufLen The length in bytes of the list.  Ver.: always
+ */
+bool __attribute__((weak)) emberAfWriteAttributesResponseCallback(ClusterId clusterId, uint8_t * buffer, uint16_t bufLen)
+{
+    return false;
+}
+
+/** @brief External Attribute Write
+ *
+ * This function is called whenever the Application Framework needs to write an
+ * attribute which is not stored within the data structures of the Application
+ * Framework itself. One of the new features in Version 2 is the ability to
+ * store attributes outside the Framework. This is particularly useful for
+ * attributes that do not need to be stored because they can be read off the
+ * hardware when they are needed, or are stored in some central location used by
+ * many modules within the system. In this case, you can indicate that the
+ * attribute is stored externally. When the framework needs to write an external
+ * attribute, it makes a call to this callback.
+        This callback is very
+ * useful for host micros which need to store attributes in persistent memory.
+ * Because each host micro (used with an Ember NCP) has its own type of
+ * persistent memory storage, the Application Framework does not include the
+ * ability to mark attributes as stored in flash the way that it does for Ember
+ * SoCs like the EM35x. On a host micro, any attributes that need to be stored
+ * in persistent memory should be marked as external and accessed through the
+ * external read and write callbacks. Any host code associated with the
+ * persistent storage should be implemented within this callback.
+        All of
+ * the important information about the attribute itself is passed as a pointer
+ * to an EmberAfAttributeMetadata struct, which is stored within the application
+ * and used to manage the attribute. A complete description of the
+ * EmberAfAttributeMetadata struct is provided in
+ * app/framework/include/af-types.h.
+        This function assumes that the
+ * application is able to write the attribute and return immediately. Any
+ * attributes that require a state machine for reading and writing are not
+ * candidates for externalization at the present time. The Application Framework
+ * does not currently include a state machine for reading or writing attributes
+ * that must take place across a series of application ticks. Attributes that
+ * cannot be written immediately should be stored within the Application
+ * Framework and updated occasionally by the application code from within the
+ * emberAfMainTickCallback.
+        If the application was successfully able to
+ * write the attribute, it returns a value of EMBER_ZCL_STATUS_SUCCESS. Any
+ * other return value indicates the application was not able to write the
+ * attribute.
+ *
+ * @param endpoint   Ver.: always
+ * @param clusterId   Ver.: always
+ * @param attributeMetadata   Ver.: always
+ * @param manufacturerCode   Ver.: always
+ * @param buffer   Ver.: always
+ */
+EmberAfStatus __attribute__((weak))
+emberAfExternalAttributeWriteCallback(EndpointId endpoint, ClusterId clusterId, EmberAfAttributeMetadata * attributeMetadata,
+                                      uint16_t manufacturerCode, uint8_t * buffer)
+{
+    return EMBER_ZCL_STATUS_FAILURE;
+}
+
+/** @brief Report Attributes
+ *
+ * This function is called by the application framework when a Report Attributes
+ * command is received from an external device.  The application should return
+ * true if the message was processed or false if it was not.
+ *
+ * @param clusterId The cluster identifier of this command.  Ver.: always
+ * @param buffer Buffer containing the list of attribute report records.  Ver.:
+ * always
+ * @param bufLen The length in bytes of the list.  Ver.: always
+ */
+bool __attribute__((weak)) emberAfReportAttributesCallback(ClusterId clusterId, uint8_t * buffer, uint16_t bufLen)
+{
+    return false;
+}
+
+/** @brief Get Current Time
+ *
+ * This callback is called when device attempts to get current time from the
+ * hardware. If this device has means to retrieve exact time, then this method
+ * should implement it. If the callback can't provide the exact time it should
+ * return 0 to indicate failure. Default action is to return 0, which indicates
+ * that device does not have access to real time.
+ *
+ */
+uint32_t __attribute__((weak)) emberAfGetCurrentTimeCallback()
+{
+    return 0;
+}
+
+/** @brief Get Endpoint Info
+ *
+ * This function is a callback to an application implemented endpoint that
+ * operates outside the normal application framework.  When the framework wishes
+ * to perform operations with that endpoint it uses this callback to retrieve
+ * the endpoint's information.  If the endpoint exists and the application can
+ * provide data then true shall be returned.  Otherwise the callback must return
+ * false.
+ *
+ * @param endpoint The endpoint to retrieve data for.  Ver.: always
+ * @param returnNetworkIndex The index corresponding to the ZigBee network the
+ * endpoint belongs to.  If not using a multi-network device, 0 must be
+ * returned.  Otherwise on a multi-network device the stack will switch to this
+ * network before sending the message.  Ver.: always
+ * @param returnEndpointInfo A pointer to a data struct that will be written
+ * with information about the endpoint.  Ver.: always
+ */
+bool __attribute__((weak))
+emberAfGetEndpointInfoCallback(EndpointId endpoint, uint8_t * returnNetworkIndex, EmberAfEndpointInfoStruct * returnEndpointInfo)
+{
+    return false;
+}
+
+/** @brief Get Source Route Overhead
+ *
+ * This function is called by the framework to determine the overhead required
+ * in the network frame for source routing to a particular destination.
+ *
+ * @param destination The node id of the destination  Ver.: always
+ */
+uint8_t __attribute__((weak)) emberAfGetSourceRouteOverheadCallback(chip::NodeId destination)
+{
+    return 0;
+}
+
+/** @brief Registration Abort
+ *
+ * This callback is called when the device should abort the registration
+ * process.
+ *
+ */
+void __attribute__((weak)) emberAfRegistrationAbortCallback() {}
+
+/** @brief Interpan Send Message
+ *
+ * This function will send a raw MAC message with interpan frame format using
+ * the passed parameters.
+ *
+ * @param header Interpan header info  Ver.: always
+ * @param messageLength The length of the message received or to send  Ver.:
+ * always
+ * @param message The message data received or to send.  Ver.: always
+ */
+EmberStatus __attribute__((weak))
+emberAfInterpanSendMessageCallback(EmberAfInterpanHeader * header, uint16_t messageLength, uint8_t * message)
+{
+    return EMBER_LIBRARY_NOT_PRESENT;
+}
+
+/** @brief Start Move
+ *
+ * This function is called to initiate the process for a device to move (rejoin)
+ * to a new parent.
+ *
+ */
+bool __attribute__((weak)) emberAfStartMoveCallback()
+{
+    return false;
+}
diff --git a/src/darwin/Framework/CHIP/gen/callback.h b/src/darwin/Framework/CHIP/gen/callback.h
new file mode 100644
index 0000000..9dc9bcf
--- /dev/null
+++ b/src/darwin/Framework/CHIP/gen/callback.h
@@ -0,0 +1,1681 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+// Prevent multiple inclusion
+#pragma once
+
+#include "af-structs.h"
+#include "af-types.h"
+#include "basic-types.h"
+
+/** @brief Cluster Init
+ *
+ * This function is called when a specific cluster is initialized. It gives the
+ * application an opportunity to take care of cluster initialization procedures.
+ * It is called exactly once for each endpoint where cluster is present.
+ *
+ * @param endpoint   Ver.: always
+ * @param clusterId   Ver.: always
+ */
+void emberAfClusterInitCallback(chip::EndpointId endpoint, chip::ClusterId clusterId);
+
+// Cluster Init Functions
+
+/** @brief Barrier Control Cluster Init
+ *
+ * Cluster Init
+ *
+ * @param endpoint    Endpoint that is being initialized
+ */
+void emberAfBarrierControlClusterInitCallback(chip::EndpointId endpoint);
+
+/** @brief Basic Cluster Init
+ *
+ * Cluster Init
+ *
+ * @param endpoint    Endpoint that is being initialized
+ */
+void emberAfBasicClusterInitCallback(chip::EndpointId endpoint);
+
+/** @brief Binding Cluster Init
+ *
+ * Cluster Init
+ *
+ * @param endpoint    Endpoint that is being initialized
+ */
+void emberAfBindingClusterInitCallback(chip::EndpointId endpoint);
+
+/** @brief Color Control Cluster Init
+ *
+ * Cluster Init
+ *
+ * @param endpoint    Endpoint that is being initialized
+ */
+void emberAfColorControlClusterInitCallback(chip::EndpointId endpoint);
+
+/** @brief Door Lock Cluster Init
+ *
+ * Cluster Init
+ *
+ * @param endpoint    Endpoint that is being initialized
+ */
+void emberAfDoorLockClusterInitCallback(chip::EndpointId endpoint);
+
+/** @brief Groups Cluster Init
+ *
+ * Cluster Init
+ *
+ * @param endpoint    Endpoint that is being initialized
+ */
+void emberAfGroupsClusterInitCallback(chip::EndpointId endpoint);
+
+/** @brief Identify Cluster Init
+ *
+ * Cluster Init
+ *
+ * @param endpoint    Endpoint that is being initialized
+ */
+void emberAfIdentifyClusterInitCallback(chip::EndpointId endpoint);
+
+/** @brief Level Control Cluster Init
+ *
+ * Cluster Init
+ *
+ * @param endpoint    Endpoint that is being initialized
+ */
+void emberAfLevelControlClusterInitCallback(chip::EndpointId endpoint);
+
+/** @brief On/off Cluster Init
+ *
+ * Cluster Init
+ *
+ * @param endpoint    Endpoint that is being initialized
+ */
+void emberAfOnOffClusterInitCallback(chip::EndpointId endpoint);
+
+/** @brief Scenes Cluster Init
+ *
+ * Cluster Init
+ *
+ * @param endpoint    Endpoint that is being initialized
+ */
+void emberAfScenesClusterInitCallback(chip::EndpointId endpoint);
+
+/** @brief Temperature Measurement Cluster Init
+ *
+ * Cluster Init
+ *
+ * @param endpoint    Endpoint that is being initialized
+ */
+void emberAfTemperatureMeasurementClusterInitCallback(chip::EndpointId endpoint);
+
+// Cluster Server/Client Init Functions
+
+//
+// Barrier Control Cluster client
+//
+
+/** @brief Barrier Control Cluster Client Init
+ *
+ * Client Init
+ *
+ * @param endpoint    Endpoint that is being initialized
+ */
+void emberAfBarrierControlClusterClientInitCallback(chip::EndpointId endpoint);
+
+/** @brief Barrier Control Cluster Client Attribute Changed
+ *
+ * Client Attribute Changed
+ *
+ * @param endpoint    Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ */
+void emberAfBarrierControlClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
+
+/** @brief Barrier Control Cluster Client Manufacturer Specific Attribute Changed
+ *
+ * Client Manufacturer Specific Attribute Changed
+ *
+ * @param endpoint          Endpoint that is being initialized
+ * @param attributeId       Attribute that changed
+ * @param manufacturerCode  Manufacturer Code of the attribute that changed
+ */
+void emberAfBarrierControlClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
+                                                                                    chip::AttributeId attributeId,
+                                                                                    uint16_t manufacturerCode);
+
+/** @brief Barrier Control Cluster Client Message Sent
+ *
+ * Client Message Sent
+ *
+ * @param type               The type of message sent
+ * @param indexOrDestination The destination or address to which the message was sent
+ * @param apsFrame           The APS frame for the message
+ * @param msgLen             The length of the message
+ * @param message            The message that was sent
+ * @param status             The status of the sent message
+ */
+void emberAfBarrierControlClusterClientMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
+                                                           EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
+                                                           EmberStatus status);
+
+/** @brief Barrier Control Cluster Client Pre Attribute Changed
+ *
+ * client Pre Attribute Changed
+ *
+ * @param endpoint      Endpoint that is being initialized
+ * @param attributeId   Attribute to be changed
+ * @param attributeType Attribute type
+ * @param size          Attribute size
+ * @param value         Attribute value
+ */
+EmberAfStatus emberAfBarrierControlClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint,
+                                                                            chip::AttributeId attributeId,
+                                                                            EmberAfAttributeType attributeType, uint8_t size,
+                                                                            uint8_t * value);
+
+/** @brief Barrier Control Cluster Client Tick
+ *
+ * client Tick
+ *
+ * @param endpoint  Endpoint that is being served
+ */
+void emberAfBarrierControlClusterClientTickCallback(chip::EndpointId endpoint);
+
+//
+// Basic Cluster client
+//
+
+/** @brief Basic Cluster Client Init
+ *
+ * Client Init
+ *
+ * @param endpoint    Endpoint that is being initialized
+ */
+void emberAfBasicClusterClientInitCallback(chip::EndpointId endpoint);
+
+/** @brief Basic Cluster Client Attribute Changed
+ *
+ * Client Attribute Changed
+ *
+ * @param endpoint    Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ */
+void emberAfBasicClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
+
+/** @brief Basic Cluster Client Manufacturer Specific Attribute Changed
+ *
+ * Client Manufacturer Specific Attribute Changed
+ *
+ * @param endpoint          Endpoint that is being initialized
+ * @param attributeId       Attribute that changed
+ * @param manufacturerCode  Manufacturer Code of the attribute that changed
+ */
+void emberAfBasicClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
+                                                                           uint16_t manufacturerCode);
+
+/** @brief Basic Cluster Client Message Sent
+ *
+ * Client Message Sent
+ *
+ * @param type               The type of message sent
+ * @param indexOrDestination The destination or address to which the message was sent
+ * @param apsFrame           The APS frame for the message
+ * @param msgLen             The length of the message
+ * @param message            The message that was sent
+ * @param status             The status of the sent message
+ */
+void emberAfBasicClusterClientMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
+                                                  EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message, EmberStatus status);
+
+/** @brief Basic Cluster Client Pre Attribute Changed
+ *
+ * client Pre Attribute Changed
+ *
+ * @param endpoint      Endpoint that is being initialized
+ * @param attributeId   Attribute to be changed
+ * @param attributeType Attribute type
+ * @param size          Attribute size
+ * @param value         Attribute value
+ */
+EmberAfStatus emberAfBasicClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
+                                                                   EmberAfAttributeType attributeType, uint8_t size,
+                                                                   uint8_t * value);
+
+/** @brief Basic Cluster Client Tick
+ *
+ * client Tick
+ *
+ * @param endpoint  Endpoint that is being served
+ */
+void emberAfBasicClusterClientTickCallback(chip::EndpointId endpoint);
+
+//
+// Binding Cluster client
+//
+
+/** @brief Binding Cluster Client Init
+ *
+ * Client Init
+ *
+ * @param endpoint    Endpoint that is being initialized
+ */
+void emberAfBindingClusterClientInitCallback(chip::EndpointId endpoint);
+
+/** @brief Binding Cluster Client Attribute Changed
+ *
+ * Client Attribute Changed
+ *
+ * @param endpoint    Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ */
+void emberAfBindingClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
+
+/** @brief Binding Cluster Client Manufacturer Specific Attribute Changed
+ *
+ * Client Manufacturer Specific Attribute Changed
+ *
+ * @param endpoint          Endpoint that is being initialized
+ * @param attributeId       Attribute that changed
+ * @param manufacturerCode  Manufacturer Code of the attribute that changed
+ */
+void emberAfBindingClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
+                                                                             chip::AttributeId attributeId,
+                                                                             uint16_t manufacturerCode);
+
+/** @brief Binding Cluster Client Message Sent
+ *
+ * Client Message Sent
+ *
+ * @param type               The type of message sent
+ * @param indexOrDestination The destination or address to which the message was sent
+ * @param apsFrame           The APS frame for the message
+ * @param msgLen             The length of the message
+ * @param message            The message that was sent
+ * @param status             The status of the sent message
+ */
+void emberAfBindingClusterClientMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
+                                                    EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
+                                                    EmberStatus status);
+
+/** @brief Binding Cluster Client Pre Attribute Changed
+ *
+ * client Pre Attribute Changed
+ *
+ * @param endpoint      Endpoint that is being initialized
+ * @param attributeId   Attribute to be changed
+ * @param attributeType Attribute type
+ * @param size          Attribute size
+ * @param value         Attribute value
+ */
+EmberAfStatus emberAfBindingClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
+                                                                     EmberAfAttributeType attributeType, uint8_t size,
+                                                                     uint8_t * value);
+
+/** @brief Binding Cluster Client Tick
+ *
+ * client Tick
+ *
+ * @param endpoint  Endpoint that is being served
+ */
+void emberAfBindingClusterClientTickCallback(chip::EndpointId endpoint);
+
+//
+// Color Control Cluster client
+//
+
+/** @brief Color Control Cluster Client Init
+ *
+ * Client Init
+ *
+ * @param endpoint    Endpoint that is being initialized
+ */
+void emberAfColorControlClusterClientInitCallback(chip::EndpointId endpoint);
+
+/** @brief Color Control Cluster Client Attribute Changed
+ *
+ * Client Attribute Changed
+ *
+ * @param endpoint    Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ */
+void emberAfColorControlClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
+
+/** @brief Color Control Cluster Client Manufacturer Specific Attribute Changed
+ *
+ * Client Manufacturer Specific Attribute Changed
+ *
+ * @param endpoint          Endpoint that is being initialized
+ * @param attributeId       Attribute that changed
+ * @param manufacturerCode  Manufacturer Code of the attribute that changed
+ */
+void emberAfColorControlClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
+                                                                                  chip::AttributeId attributeId,
+                                                                                  uint16_t manufacturerCode);
+
+/** @brief Color Control Cluster Client Message Sent
+ *
+ * Client Message Sent
+ *
+ * @param type               The type of message sent
+ * @param indexOrDestination The destination or address to which the message was sent
+ * @param apsFrame           The APS frame for the message
+ * @param msgLen             The length of the message
+ * @param message            The message that was sent
+ * @param status             The status of the sent message
+ */
+void emberAfColorControlClusterClientMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
+                                                         EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
+                                                         EmberStatus status);
+
+/** @brief Color Control Cluster Client Pre Attribute Changed
+ *
+ * client Pre Attribute Changed
+ *
+ * @param endpoint      Endpoint that is being initialized
+ * @param attributeId   Attribute to be changed
+ * @param attributeType Attribute type
+ * @param size          Attribute size
+ * @param value         Attribute value
+ */
+EmberAfStatus emberAfColorControlClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
+                                                                          EmberAfAttributeType attributeType, uint8_t size,
+                                                                          uint8_t * value);
+
+/** @brief Color Control Cluster Client Tick
+ *
+ * client Tick
+ *
+ * @param endpoint  Endpoint that is being served
+ */
+void emberAfColorControlClusterClientTickCallback(chip::EndpointId endpoint);
+
+//
+// Door Lock Cluster client
+//
+
+/** @brief Door Lock Cluster Client Init
+ *
+ * Client Init
+ *
+ * @param endpoint    Endpoint that is being initialized
+ */
+void emberAfDoorLockClusterClientInitCallback(chip::EndpointId endpoint);
+
+/** @brief Door Lock Cluster Client Attribute Changed
+ *
+ * Client Attribute Changed
+ *
+ * @param endpoint    Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ */
+void emberAfDoorLockClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
+
+/** @brief Door Lock Cluster Client Manufacturer Specific Attribute Changed
+ *
+ * Client Manufacturer Specific Attribute Changed
+ *
+ * @param endpoint          Endpoint that is being initialized
+ * @param attributeId       Attribute that changed
+ * @param manufacturerCode  Manufacturer Code of the attribute that changed
+ */
+void emberAfDoorLockClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
+                                                                              chip::AttributeId attributeId,
+                                                                              uint16_t manufacturerCode);
+
+/** @brief Door Lock Cluster Client Message Sent
+ *
+ * Client Message Sent
+ *
+ * @param type               The type of message sent
+ * @param indexOrDestination The destination or address to which the message was sent
+ * @param apsFrame           The APS frame for the message
+ * @param msgLen             The length of the message
+ * @param message            The message that was sent
+ * @param status             The status of the sent message
+ */
+void emberAfDoorLockClusterClientMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
+                                                     EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
+                                                     EmberStatus status);
+
+/** @brief Door Lock Cluster Client Pre Attribute Changed
+ *
+ * client Pre Attribute Changed
+ *
+ * @param endpoint      Endpoint that is being initialized
+ * @param attributeId   Attribute to be changed
+ * @param attributeType Attribute type
+ * @param size          Attribute size
+ * @param value         Attribute value
+ */
+EmberAfStatus emberAfDoorLockClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
+                                                                      EmberAfAttributeType attributeType, uint8_t size,
+                                                                      uint8_t * value);
+
+/** @brief Door Lock Cluster Client Tick
+ *
+ * client Tick
+ *
+ * @param endpoint  Endpoint that is being served
+ */
+void emberAfDoorLockClusterClientTickCallback(chip::EndpointId endpoint);
+
+//
+// Groups Cluster client
+//
+
+/** @brief Groups Cluster Client Init
+ *
+ * Client Init
+ *
+ * @param endpoint    Endpoint that is being initialized
+ */
+void emberAfGroupsClusterClientInitCallback(chip::EndpointId endpoint);
+
+/** @brief Groups Cluster Client Attribute Changed
+ *
+ * Client Attribute Changed
+ *
+ * @param endpoint    Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ */
+void emberAfGroupsClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
+
+/** @brief Groups Cluster Client Manufacturer Specific Attribute Changed
+ *
+ * Client Manufacturer Specific Attribute Changed
+ *
+ * @param endpoint          Endpoint that is being initialized
+ * @param attributeId       Attribute that changed
+ * @param manufacturerCode  Manufacturer Code of the attribute that changed
+ */
+void emberAfGroupsClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
+                                                                            chip::AttributeId attributeId,
+                                                                            uint16_t manufacturerCode);
+
+/** @brief Groups Cluster Client Message Sent
+ *
+ * Client Message Sent
+ *
+ * @param type               The type of message sent
+ * @param indexOrDestination The destination or address to which the message was sent
+ * @param apsFrame           The APS frame for the message
+ * @param msgLen             The length of the message
+ * @param message            The message that was sent
+ * @param status             The status of the sent message
+ */
+void emberAfGroupsClusterClientMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
+                                                   EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
+                                                   EmberStatus status);
+
+/** @brief Groups Cluster Client Pre Attribute Changed
+ *
+ * client Pre Attribute Changed
+ *
+ * @param endpoint      Endpoint that is being initialized
+ * @param attributeId   Attribute to be changed
+ * @param attributeType Attribute type
+ * @param size          Attribute size
+ * @param value         Attribute value
+ */
+EmberAfStatus emberAfGroupsClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
+                                                                    EmberAfAttributeType attributeType, uint8_t size,
+                                                                    uint8_t * value);
+
+/** @brief Groups Cluster Client Tick
+ *
+ * client Tick
+ *
+ * @param endpoint  Endpoint that is being served
+ */
+void emberAfGroupsClusterClientTickCallback(chip::EndpointId endpoint);
+
+//
+// Identify Cluster client
+//
+
+/** @brief Identify Cluster Client Init
+ *
+ * Client Init
+ *
+ * @param endpoint    Endpoint that is being initialized
+ */
+void emberAfIdentifyClusterClientInitCallback(chip::EndpointId endpoint);
+
+/** @brief Identify Cluster Client Attribute Changed
+ *
+ * Client Attribute Changed
+ *
+ * @param endpoint    Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ */
+void emberAfIdentifyClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
+
+/** @brief Identify Cluster Client Manufacturer Specific Attribute Changed
+ *
+ * Client Manufacturer Specific Attribute Changed
+ *
+ * @param endpoint          Endpoint that is being initialized
+ * @param attributeId       Attribute that changed
+ * @param manufacturerCode  Manufacturer Code of the attribute that changed
+ */
+void emberAfIdentifyClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
+                                                                              chip::AttributeId attributeId,
+                                                                              uint16_t manufacturerCode);
+
+/** @brief Identify Cluster Client Message Sent
+ *
+ * Client Message Sent
+ *
+ * @param type               The type of message sent
+ * @param indexOrDestination The destination or address to which the message was sent
+ * @param apsFrame           The APS frame for the message
+ * @param msgLen             The length of the message
+ * @param message            The message that was sent
+ * @param status             The status of the sent message
+ */
+void emberAfIdentifyClusterClientMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
+                                                     EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
+                                                     EmberStatus status);
+
+/** @brief Identify Cluster Client Pre Attribute Changed
+ *
+ * client Pre Attribute Changed
+ *
+ * @param endpoint      Endpoint that is being initialized
+ * @param attributeId   Attribute to be changed
+ * @param attributeType Attribute type
+ * @param size          Attribute size
+ * @param value         Attribute value
+ */
+EmberAfStatus emberAfIdentifyClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
+                                                                      EmberAfAttributeType attributeType, uint8_t size,
+                                                                      uint8_t * value);
+
+/** @brief Identify Cluster Client Tick
+ *
+ * client Tick
+ *
+ * @param endpoint  Endpoint that is being served
+ */
+void emberAfIdentifyClusterClientTickCallback(chip::EndpointId endpoint);
+
+//
+// Level Control Cluster client
+//
+
+/** @brief Level Control Cluster Client Init
+ *
+ * Client Init
+ *
+ * @param endpoint    Endpoint that is being initialized
+ */
+void emberAfLevelControlClusterClientInitCallback(chip::EndpointId endpoint);
+
+/** @brief Level Control Cluster Client Attribute Changed
+ *
+ * Client Attribute Changed
+ *
+ * @param endpoint    Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ */
+void emberAfLevelControlClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
+
+/** @brief Level Control Cluster Client Manufacturer Specific Attribute Changed
+ *
+ * Client Manufacturer Specific Attribute Changed
+ *
+ * @param endpoint          Endpoint that is being initialized
+ * @param attributeId       Attribute that changed
+ * @param manufacturerCode  Manufacturer Code of the attribute that changed
+ */
+void emberAfLevelControlClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
+                                                                                  chip::AttributeId attributeId,
+                                                                                  uint16_t manufacturerCode);
+
+/** @brief Level Control Cluster Client Message Sent
+ *
+ * Client Message Sent
+ *
+ * @param type               The type of message sent
+ * @param indexOrDestination The destination or address to which the message was sent
+ * @param apsFrame           The APS frame for the message
+ * @param msgLen             The length of the message
+ * @param message            The message that was sent
+ * @param status             The status of the sent message
+ */
+void emberAfLevelControlClusterClientMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
+                                                         EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
+                                                         EmberStatus status);
+
+/** @brief Level Control Cluster Client Pre Attribute Changed
+ *
+ * client Pre Attribute Changed
+ *
+ * @param endpoint      Endpoint that is being initialized
+ * @param attributeId   Attribute to be changed
+ * @param attributeType Attribute type
+ * @param size          Attribute size
+ * @param value         Attribute value
+ */
+EmberAfStatus emberAfLevelControlClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
+                                                                          EmberAfAttributeType attributeType, uint8_t size,
+                                                                          uint8_t * value);
+
+/** @brief Level Control Cluster Client Tick
+ *
+ * client Tick
+ *
+ * @param endpoint  Endpoint that is being served
+ */
+void emberAfLevelControlClusterClientTickCallback(chip::EndpointId endpoint);
+
+//
+// On/off Cluster client
+//
+
+/** @brief On/off Cluster Client Init
+ *
+ * Client Init
+ *
+ * @param endpoint    Endpoint that is being initialized
+ */
+void emberAfOnOffClusterClientInitCallback(chip::EndpointId endpoint);
+
+/** @brief On/off Cluster Client Attribute Changed
+ *
+ * Client Attribute Changed
+ *
+ * @param endpoint    Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ */
+void emberAfOnOffClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
+
+/** @brief On/off Cluster Client Manufacturer Specific Attribute Changed
+ *
+ * Client Manufacturer Specific Attribute Changed
+ *
+ * @param endpoint          Endpoint that is being initialized
+ * @param attributeId       Attribute that changed
+ * @param manufacturerCode  Manufacturer Code of the attribute that changed
+ */
+void emberAfOnOffClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
+                                                                           uint16_t manufacturerCode);
+
+/** @brief On/off Cluster Client Message Sent
+ *
+ * Client Message Sent
+ *
+ * @param type               The type of message sent
+ * @param indexOrDestination The destination or address to which the message was sent
+ * @param apsFrame           The APS frame for the message
+ * @param msgLen             The length of the message
+ * @param message            The message that was sent
+ * @param status             The status of the sent message
+ */
+void emberAfOnOffClusterClientMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
+                                                  EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message, EmberStatus status);
+
+/** @brief On/off Cluster Client Pre Attribute Changed
+ *
+ * client Pre Attribute Changed
+ *
+ * @param endpoint      Endpoint that is being initialized
+ * @param attributeId   Attribute to be changed
+ * @param attributeType Attribute type
+ * @param size          Attribute size
+ * @param value         Attribute value
+ */
+EmberAfStatus emberAfOnOffClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
+                                                                   EmberAfAttributeType attributeType, uint8_t size,
+                                                                   uint8_t * value);
+
+/** @brief On/off Cluster Client Tick
+ *
+ * client Tick
+ *
+ * @param endpoint  Endpoint that is being served
+ */
+void emberAfOnOffClusterClientTickCallback(chip::EndpointId endpoint);
+
+//
+// Scenes Cluster client
+//
+
+/** @brief Scenes Cluster Client Init
+ *
+ * Client Init
+ *
+ * @param endpoint    Endpoint that is being initialized
+ */
+void emberAfScenesClusterClientInitCallback(chip::EndpointId endpoint);
+
+/** @brief Scenes Cluster Client Attribute Changed
+ *
+ * Client Attribute Changed
+ *
+ * @param endpoint    Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ */
+void emberAfScenesClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
+
+/** @brief Scenes Cluster Client Manufacturer Specific Attribute Changed
+ *
+ * Client Manufacturer Specific Attribute Changed
+ *
+ * @param endpoint          Endpoint that is being initialized
+ * @param attributeId       Attribute that changed
+ * @param manufacturerCode  Manufacturer Code of the attribute that changed
+ */
+void emberAfScenesClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
+                                                                            chip::AttributeId attributeId,
+                                                                            uint16_t manufacturerCode);
+
+/** @brief Scenes Cluster Client Message Sent
+ *
+ * Client Message Sent
+ *
+ * @param type               The type of message sent
+ * @param indexOrDestination The destination or address to which the message was sent
+ * @param apsFrame           The APS frame for the message
+ * @param msgLen             The length of the message
+ * @param message            The message that was sent
+ * @param status             The status of the sent message
+ */
+void emberAfScenesClusterClientMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
+                                                   EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
+                                                   EmberStatus status);
+
+/** @brief Scenes Cluster Client Pre Attribute Changed
+ *
+ * client Pre Attribute Changed
+ *
+ * @param endpoint      Endpoint that is being initialized
+ * @param attributeId   Attribute to be changed
+ * @param attributeType Attribute type
+ * @param size          Attribute size
+ * @param value         Attribute value
+ */
+EmberAfStatus emberAfScenesClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
+                                                                    EmberAfAttributeType attributeType, uint8_t size,
+                                                                    uint8_t * value);
+
+/** @brief Scenes Cluster Client Tick
+ *
+ * client Tick
+ *
+ * @param endpoint  Endpoint that is being served
+ */
+void emberAfScenesClusterClientTickCallback(chip::EndpointId endpoint);
+
+//
+// Temperature Measurement Cluster client
+//
+
+/** @brief Temperature Measurement Cluster Client Init
+ *
+ * Client Init
+ *
+ * @param endpoint    Endpoint that is being initialized
+ */
+void emberAfTemperatureMeasurementClusterClientInitCallback(chip::EndpointId endpoint);
+
+/** @brief Temperature Measurement Cluster Client Attribute Changed
+ *
+ * Client Attribute Changed
+ *
+ * @param endpoint    Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ */
+void emberAfTemperatureMeasurementClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
+
+/** @brief Temperature Measurement Cluster Client Manufacturer Specific Attribute Changed
+ *
+ * Client Manufacturer Specific Attribute Changed
+ *
+ * @param endpoint          Endpoint that is being initialized
+ * @param attributeId       Attribute that changed
+ * @param manufacturerCode  Manufacturer Code of the attribute that changed
+ */
+void emberAfTemperatureMeasurementClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
+                                                                                            chip::AttributeId attributeId,
+                                                                                            uint16_t manufacturerCode);
+
+/** @brief Temperature Measurement Cluster Client Message Sent
+ *
+ * Client Message Sent
+ *
+ * @param type               The type of message sent
+ * @param indexOrDestination The destination or address to which the message was sent
+ * @param apsFrame           The APS frame for the message
+ * @param msgLen             The length of the message
+ * @param message            The message that was sent
+ * @param status             The status of the sent message
+ */
+void emberAfTemperatureMeasurementClusterClientMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
+                                                                   EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
+                                                                   EmberStatus status);
+
+/** @brief Temperature Measurement Cluster Client Pre Attribute Changed
+ *
+ * client Pre Attribute Changed
+ *
+ * @param endpoint      Endpoint that is being initialized
+ * @param attributeId   Attribute to be changed
+ * @param attributeType Attribute type
+ * @param size          Attribute size
+ * @param value         Attribute value
+ */
+EmberAfStatus emberAfTemperatureMeasurementClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint,
+                                                                                    chip::AttributeId attributeId,
+                                                                                    EmberAfAttributeType attributeType,
+                                                                                    uint8_t size, uint8_t * value);
+
+/** @brief Temperature Measurement Cluster Client Tick
+ *
+ * client Tick
+ *
+ * @param endpoint  Endpoint that is being served
+ */
+void emberAfTemperatureMeasurementClusterClientTickCallback(chip::EndpointId endpoint);
+
+// Cluster Commands Callback
+
+/**
+ * @brief Door Lock Cluster ClearAllPinsResponse Command callback
+ * @param status
+ */
+
+bool emberAfDoorLockClusterClearAllPinsResponseCallback(uint8_t status);
+
+/**
+ * @brief Door Lock Cluster ClearAllRfidsResponse Command callback
+ * @param status
+ */
+
+bool emberAfDoorLockClusterClearAllRfidsResponseCallback(uint8_t status);
+
+/**
+ * @brief Door Lock Cluster ClearHolidayScheduleResponse Command callback
+ * @param status
+ */
+
+bool emberAfDoorLockClusterClearHolidayScheduleResponseCallback(uint8_t status);
+
+/**
+ * @brief Door Lock Cluster ClearPinResponse Command callback
+ * @param status
+ */
+
+bool emberAfDoorLockClusterClearPinResponseCallback(uint8_t status);
+
+/**
+ * @brief Door Lock Cluster ClearRfidResponse Command callback
+ * @param status
+ */
+
+bool emberAfDoorLockClusterClearRfidResponseCallback(uint8_t status);
+
+/**
+ * @brief Door Lock Cluster ClearWeekdayScheduleResponse Command callback
+ * @param status
+ */
+
+bool emberAfDoorLockClusterClearWeekdayScheduleResponseCallback(uint8_t status);
+
+/**
+ * @brief Door Lock Cluster ClearYeardayScheduleResponse Command callback
+ * @param status
+ */
+
+bool emberAfDoorLockClusterClearYeardayScheduleResponseCallback(uint8_t status);
+
+/**
+ * @brief Door Lock Cluster GetHolidayScheduleResponse Command callback
+ * @param scheduleId
+ * @param status
+ * @param localStartTime
+ * @param localEndTime
+ * @param operatingModeDuringHoliday
+ */
+
+bool emberAfDoorLockClusterGetHolidayScheduleResponseCallback(uint8_t scheduleId, uint8_t status, uint32_t localStartTime,
+                                                              uint32_t localEndTime, uint8_t operatingModeDuringHoliday);
+
+/**
+ * @brief Door Lock Cluster GetLogRecordResponse Command callback
+ * @param logEntryId
+ * @param timestamp
+ * @param eventType
+ * @param source
+ * @param eventIdOrAlarmCode
+ * @param userId
+ * @param pin
+ */
+
+bool emberAfDoorLockClusterGetLogRecordResponseCallback(uint16_t logEntryId, uint32_t timestamp, uint8_t eventType, uint8_t source,
+                                                        uint8_t eventIdOrAlarmCode, uint16_t userId, uint8_t * pin);
+
+/**
+ * @brief Door Lock Cluster GetPinResponse Command callback
+ * @param userId
+ * @param userStatus
+ * @param userType
+ * @param pin
+ */
+
+bool emberAfDoorLockClusterGetPinResponseCallback(uint16_t userId, uint8_t userStatus, uint8_t userType, uint8_t * pin);
+
+/**
+ * @brief Door Lock Cluster GetRfidResponse Command callback
+ * @param userId
+ * @param userStatus
+ * @param userType
+ * @param rfid
+ */
+
+bool emberAfDoorLockClusterGetRfidResponseCallback(uint16_t userId, uint8_t userStatus, uint8_t userType, uint8_t * rfid);
+
+/**
+ * @brief Door Lock Cluster GetUserTypeResponse Command callback
+ * @param userId
+ * @param userType
+ */
+
+bool emberAfDoorLockClusterGetUserTypeResponseCallback(uint16_t userId, uint8_t userType);
+
+/**
+ * @brief Door Lock Cluster GetWeekdayScheduleResponse Command callback
+ * @param scheduleId
+ * @param userId
+ * @param status
+ * @param daysMask
+ * @param startHour
+ * @param startMinute
+ * @param endHour
+ * @param endMinute
+ */
+
+bool emberAfDoorLockClusterGetWeekdayScheduleResponseCallback(uint8_t scheduleId, uint16_t userId, uint8_t status, uint8_t daysMask,
+                                                              uint8_t startHour, uint8_t startMinute, uint8_t endHour,
+                                                              uint8_t endMinute);
+
+/**
+ * @brief Door Lock Cluster GetYeardayScheduleResponse Command callback
+ * @param scheduleId
+ * @param userId
+ * @param status
+ * @param localStartTime
+ * @param localEndTime
+ */
+
+bool emberAfDoorLockClusterGetYeardayScheduleResponseCallback(uint8_t scheduleId, uint16_t userId, uint8_t status,
+                                                              uint32_t localStartTime, uint32_t localEndTime);
+
+/**
+ * @brief Door Lock Cluster LockDoorResponse Command callback
+ * @param status
+ */
+
+bool emberAfDoorLockClusterLockDoorResponseCallback(uint8_t status);
+
+/**
+ * @brief Door Lock Cluster SetHolidayScheduleResponse Command callback
+ * @param status
+ */
+
+bool emberAfDoorLockClusterSetHolidayScheduleResponseCallback(uint8_t status);
+
+/**
+ * @brief Door Lock Cluster SetPinResponse Command callback
+ * @param status
+ */
+
+bool emberAfDoorLockClusterSetPinResponseCallback(uint8_t status);
+
+/**
+ * @brief Door Lock Cluster SetRfidResponse Command callback
+ * @param status
+ */
+
+bool emberAfDoorLockClusterSetRfidResponseCallback(uint8_t status);
+
+/**
+ * @brief Door Lock Cluster SetUserTypeResponse Command callback
+ * @param status
+ */
+
+bool emberAfDoorLockClusterSetUserTypeResponseCallback(uint8_t status);
+
+/**
+ * @brief Door Lock Cluster SetWeekdayScheduleResponse Command callback
+ * @param status
+ */
+
+bool emberAfDoorLockClusterSetWeekdayScheduleResponseCallback(uint8_t status);
+
+/**
+ * @brief Door Lock Cluster SetYeardayScheduleResponse Command callback
+ * @param status
+ */
+
+bool emberAfDoorLockClusterSetYeardayScheduleResponseCallback(uint8_t status);
+
+/**
+ * @brief Door Lock Cluster UnlockDoorResponse Command callback
+ * @param status
+ */
+
+bool emberAfDoorLockClusterUnlockDoorResponseCallback(uint8_t status);
+
+/**
+ * @brief Door Lock Cluster UnlockWithTimeoutResponse Command callback
+ * @param status
+ */
+
+bool emberAfDoorLockClusterUnlockWithTimeoutResponseCallback(uint8_t status);
+
+/**
+ * @brief Groups Cluster AddGroupResponse Command callback
+ * @param status
+ * @param groupId
+ */
+
+bool emberAfGroupsClusterAddGroupResponseCallback(uint8_t status, uint16_t groupId);
+
+/**
+ * @brief Groups Cluster GetGroupMembershipResponse Command callback
+ * @param capacity
+ * @param groupCount
+ * @param groupList
+ */
+
+bool emberAfGroupsClusterGetGroupMembershipResponseCallback(uint8_t capacity, uint8_t groupCount,
+                                                            /* TYPE WARNING: array array defaults to */ uint8_t * groupList);
+
+/**
+ * @brief Groups Cluster RemoveGroupResponse Command callback
+ * @param status
+ * @param groupId
+ */
+
+bool emberAfGroupsClusterRemoveGroupResponseCallback(uint8_t status, uint16_t groupId);
+
+/**
+ * @brief Groups Cluster ViewGroupResponse Command callback
+ * @param status
+ * @param groupId
+ * @param groupName
+ */
+
+bool emberAfGroupsClusterViewGroupResponseCallback(uint8_t status, uint16_t groupId, uint8_t * groupName);
+
+/**
+ * @brief Identify Cluster IdentifyQueryResponse Command callback
+ * @param timeout
+ */
+
+bool emberAfIdentifyClusterIdentifyQueryResponseCallback(uint16_t timeout);
+
+/**
+ * @brief Scenes Cluster AddSceneResponse Command callback
+ * @param status
+ * @param groupId
+ * @param sceneId
+ */
+
+bool emberAfScenesClusterAddSceneResponseCallback(uint8_t status, uint16_t groupId, uint8_t sceneId);
+
+/**
+ * @brief Scenes Cluster GetSceneMembershipResponse Command callback
+ * @param status
+ * @param capacity
+ * @param groupId
+ * @param sceneCount
+ * @param sceneList
+ */
+
+bool emberAfScenesClusterGetSceneMembershipResponseCallback(uint8_t status, uint8_t capacity, uint16_t groupId, uint8_t sceneCount,
+                                                            /* TYPE WARNING: array array defaults to */ uint8_t * sceneList);
+
+/**
+ * @brief Scenes Cluster RemoveAllScenesResponse Command callback
+ * @param status
+ * @param groupId
+ */
+
+bool emberAfScenesClusterRemoveAllScenesResponseCallback(uint8_t status, uint16_t groupId);
+
+/**
+ * @brief Scenes Cluster RemoveSceneResponse Command callback
+ * @param status
+ * @param groupId
+ * @param sceneId
+ */
+
+bool emberAfScenesClusterRemoveSceneResponseCallback(uint8_t status, uint16_t groupId, uint8_t sceneId);
+
+/**
+ * @brief Scenes Cluster StoreSceneResponse Command callback
+ * @param status
+ * @param groupId
+ * @param sceneId
+ */
+
+bool emberAfScenesClusterStoreSceneResponseCallback(uint8_t status, uint16_t groupId, uint8_t sceneId);
+
+/**
+ * @brief Scenes Cluster ViewSceneResponse Command callback
+ * @param status
+ * @param groupId
+ * @param sceneId
+ * @param transitionTime
+ * @param sceneName
+ * @param extensionFieldSets
+ */
+
+bool emberAfScenesClusterViewSceneResponseCallback(uint8_t status, uint16_t groupId, uint8_t sceneId, uint16_t transitionTime,
+                                                   uint8_t * sceneName,
+                                                   /* TYPE WARNING: array array defaults to */ uint8_t * extensionFieldSets);
+
+//
+// Non-Cluster Related Callbacks
+//
+
+/** @brief Add To Current App Tasks
+ *
+ * This function is only useful to sleepy end devices.  This function will note
+ * the passed item as part of a set of tasks the application has outstanding
+ * (e.g. message sent requiring APS acknwoledgement).  This will affect how the
+ * application behaves with regard to sleeping and polling.  Until the
+ * outstanding task is completed, the device may poll more frequently and sleep
+ * less often.
+ *
+ * @param tasks   Ver.: always
+ */
+void emberAfAddToCurrentAppTasksCallback(EmberAfApplicationTask tasks);
+
+/** @brief Remove From Current App Tasks
+ *
+ * This function is only useful to sleepy end devices.  This function will
+ * remove the passed item from the set of tasks the application has outstanding
+ * (e.g. message sent requiring APS acknwoledgement).  This will affect how the
+ * application behaves with regard to sleeping and polling.  Removing the item
+ * from the list of outstanding tasks may allow the device to sleep longer and
+ * poll less frequently.  If there are other outstanding tasks the system may
+ * still have to stay away and poll more often.
+ *
+ * @param tasks   Ver.: always
+ */
+void emberAfRemoveFromCurrentAppTasksCallback(EmberAfApplicationTask tasks);
+
+/** @brief Allow Network Write Attribute
+ *
+ * This function is called by the application framework before it writes an
+ * attribute in response to a write attribute request from an external device.
+ * The value passed into this callback is the value to which the attribute is to
+ * be set by the framework.
+        Example:	In mirroring simple metering data
+ * on an Energy Services Interface (ESI) (formerly called Energy Service Portal
+ * (ESP) in SE 1.0).), a mirrored simple meter needs to write read-only
+ * attributes on its mirror. The-meter-mirror sample application, located in
+ * app/framework/sample-apps, uses this callback to allow the mirrored device to
+ * write simple metering attributes on the mirror regardless of the fact that
+ * most simple metering attributes are defined as read-only by the ZigBee
+ * specification.
+        Note:	The ZCL specification does not (as of this
+ * writing) specify any permission-level security for writing writeable
+ * attributes. As far as the ZCL specification is concerned, if an attribute is
+ * writeable, any device that has a link key for the device should be able to
+ * write that attribute. Furthermore if an attribute is read only, it should not
+ * be written over the air. Thus, if you implement permissions for writing
+ * attributes as a feature, you MAY be operating outside the specification. This
+ * is unlikely to be a problem for writing read-only attributes, but it may be a
+ * problem for attributes that are writeable according to the specification but
+ * restricted by the application implementing this callback.
+ *
+ * @param endpoint   Ver.: always
+ * @param clusterId   Ver.: always
+ * @param attributeId   Ver.: always
+ * @param mask   Ver.: always
+ * @param manufacturerCode   Ver.: always
+ * @param value   Ver.: always
+ * @param type   Ver.: always
+ */
+EmberAfAttributeWritePermission emberAfAllowNetworkWriteAttributeCallback(chip::EndpointId endpoint, chip::ClusterId clusterId,
+                                                                          chip::AttributeId attributeId, uint8_t mask,
+                                                                          uint16_t manufacturerCode, uint8_t * value, uint8_t type);
+
+/** @brief Attribute Read Access
+ *
+ * This function is called whenever the Application Framework needs to check
+ * access permission for an attribute read.
+ *
+ * @param endpoint   Ver.: always
+ * @param clusterId   Ver.: always
+ * @param manufacturerCode   Ver.: always
+ * @param attributeId   Ver.: always
+ */
+bool emberAfAttributeReadAccessCallback(chip::EndpointId endpoint, chip::ClusterId clusterId, uint16_t manufacturerCode,
+                                        chip::AttributeId attributeId);
+
+/** @brief Attribute Write Access
+ *
+ * This function is called whenever the Application Framework needs to check
+ * access permission for an attribute write.
+ *
+ * @param endpoint   Ver.: always
+ * @param clusterId   Ver.: always
+ * @param manufacturerCode   Ver.: always
+ * @param attributeId   Ver.: always
+ */
+bool emberAfAttributeWriteAccessCallback(chip::EndpointId endpoint, chip::ClusterId clusterId, uint16_t manufacturerCode,
+                                         chip::AttributeId attributeId);
+
+/** @brief Default Response
+ *
+ * This function is called by the application framework when a Default Response
+ * command is received from an external device.  The application should return
+ * true if the message was processed or false if it was not.
+ *
+ * @param clusterId The cluster identifier of this response.  Ver.: always
+ * @param commandId The command identifier to which this is a response.  Ver.:
+ * always
+ * @param status Specifies either SUCCESS or the nature of the error that was
+ * detected in the received command.  Ver.: always
+ */
+bool emberAfDefaultResponseCallback(chip::ClusterId clusterId, chip::CommandId commandId, EmberAfStatus status);
+
+/** @brief Configure Reporting Response
+ *
+ * This function is called by the application framework when a Configure
+ * Reporting Response command is received from an external device.  The
+ * application should return true if the message was processed or false if it
+ * was not.
+ *
+ * @param clusterId The cluster identifier of this response.  Ver.: always
+ * @param buffer Buffer containing the list of attribute status records.  Ver.:
+ * always
+ * @param bufLen The length in bytes of the list.  Ver.: always
+ */
+bool emberAfConfigureReportingResponseCallback(chip::ClusterId clusterId, uint8_t * buffer, uint16_t bufLen);
+
+/** @brief Read Reporting Configuration Response
+ *
+ * This function is called by the application framework when a Read Reporting
+ * Configuration Response command is received from an external device.  The
+ * application should return true if the message was processed or false if it
+ * was not.
+ *
+ * @param clusterId The cluster identifier of this response.  Ver.: always
+ * @param buffer Buffer containing the list of attribute reporting configuration
+ * records.  Ver.: always
+ * @param bufLen The length in bytes of the list.  Ver.: always
+ */
+bool emberAfReadReportingConfigurationResponseCallback(chip::ClusterId clusterId, uint8_t * buffer, uint16_t bufLen);
+
+/** @brief Discover Attributes Response
+ *
+ * This function is called by the application framework when a Discover
+ * Attributes Response or Discover Attributes Extended Response command is
+ * received from an external device.  The Discover Attributes Response command
+ * contains a bool indicating if discovery is complete and a list of zero or
+ * more attribute identifier/type records. The final argument indicates whether
+ * the response is in the extended format or not.  The application should return
+ * true if the message was processed or false if it was not.
+ *
+ * @param clusterId The cluster identifier of this response.  Ver.: always
+ * @param discoveryComplete Indicates whether there are more attributes to be
+ * discovered.  true if there are no more attributes to be discovered.  Ver.:
+ * always
+ * @param buffer Buffer containing the list of attribute identifier/type
+ * records.  Ver.: always
+ * @param bufLen The length in bytes of the list.  Ver.: always
+ * @param extended Indicates whether the response is in the extended format or
+ * not.  Ver.: always
+ */
+bool emberAfDiscoverAttributesResponseCallback(chip::ClusterId clusterId, bool discoveryComplete, uint8_t * buffer, uint16_t bufLen,
+                                               bool extended);
+
+/** @brief Discover Commands Generated Response
+ *
+ * This function is called by the framework when Discover Commands Generated
+ * Response is received.
+ *
+ * @param clusterId The cluster identifier of this response.  Ver.: always
+ * @param manufacturerCode Manufacturer code  Ver.: always
+ * @param discoveryComplete Indicates whether there are more commands to be
+ * discovered.  Ver.: always
+ * @param commandIds Buffer containing the list of command identifiers.  Ver.:
+ * always
+ * @param commandIdCount The length of bytes of the list, whish is the same as
+ * the number of identifiers.  Ver.: always
+ */
+bool emberAfDiscoverCommandsGeneratedResponseCallback(chip::ClusterId clusterId, uint16_t manufacturerCode, bool discoveryComplete,
+                                                      chip::CommandId * commandIds, uint16_t commandIdCount);
+
+/** @brief Discover Commands Received Response
+ *
+ * This function is called by the framework when Discover Commands Received
+ * Response is received.
+ *
+ * @param clusterId The cluster identifier of this response.  Ver.: always
+ * @param manufacturerCode Manufacturer code  Ver.: always
+ * @param discoveryComplete Indicates whether there are more commands to be
+ * discovered.  Ver.: always
+ * @param commandIds Buffer containing the list of command identifiers.  Ver.:
+ * always
+ * @param commandIdCount The length of bytes of the list, whish is the same as
+ * the number of identifiers.  Ver.: always
+ */
+bool emberAfDiscoverCommandsReceivedResponseCallback(chip::ClusterId clusterId, uint16_t manufacturerCode, bool discoveryComplete,
+                                                     chip::CommandId * commandIds, uint16_t commandIdCount);
+
+/** @brief Pre Command Received
+ *
+ * This callback is the second in the Application Framework's message processing
+ * chain. At this point in the processing of incoming over-the-air messages, the
+ * application has determined that the incoming message is a ZCL command. It
+ * parses enough of the message to populate an EmberAfClusterCommand struct. The
+ * Application Framework defines this struct value in a local scope to the
+ * command processing but also makes it available through a global pointer
+ * called emberAfCurrentCommand, in app/framework/util/util.c. When command
+ * processing is complete, this pointer is cleared.
+ *
+ * @param cmd   Ver.: always
+ */
+bool emberAfPreCommandReceivedCallback(EmberAfClusterCommand * cmd);
+
+/** @brief Pre Message Send
+ *
+ * This function is called by the framework when it is about to pass a message
+ * to the stack primitives for sending.   This message may or may not be ZCL,
+ * ZDO, or some other protocol.  This is called prior to
+        any ZigBee
+ * fragmentation that may be done.  If the function returns true it is assumed
+ * the callback has consumed and processed the message.  The callback must also
+ * set the EmberStatus status code to be passed back to the caller.  The
+ * framework will do no further processing on the message.
+        If the
+ * function returns false then it is assumed that the callback has not processed
+ * the mesasge and the framework will continue to process accordingly.
+ *
+ * @param messageStruct The structure containing the parameters of the APS
+ * message to be sent.  Ver.: always
+ * @param status A pointer to the status code value that will be returned to the
+ * caller.  Ver.: always
+ */
+bool emberAfPreMessageSendCallback(EmberAfMessageStruct * messageStruct, EmberStatus * status);
+
+/** @brief Message Sent
+ *
+ * This function is called by the application framework from the message sent
+ * handler, when it is informed by the stack regarding the message sent status.
+ * All of the values passed to the emberMessageSentHandler are passed on to this
+ * callback. This provides an opportunity for the application to verify that its
+ * message has been sent successfully and take the appropriate action. This
+ * callback should return a bool value of true or false. A value of true
+ * indicates that the message sent notification has been handled and should not
+ * be handled by the application framework.
+ *
+ * @param type   Ver.: always
+ * @param indexOrDestination   Ver.: always
+ * @param apsFrame   Ver.: always
+ * @param msgLen   Ver.: always
+ * @param message   Ver.: always
+ * @param status   Ver.: always
+ */
+bool emberAfMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination, EmberApsFrame * apsFrame,
+                                uint16_t msgLen, uint8_t * message, EmberStatus status);
+
+/** @brief Pre Attribute Change
+ *
+ * This function is called by the application framework before it changes an
+ * attribute value.  The value passed into this callback is the value to which
+ * the attribute is to be set by the framework.  The application should return
+ * ::EMBER_ZCL_STATUS_SUCCESS to permit the change or any other ::EmberAfStatus
+ * to reject it.
+ *
+ * @param endpoint   Ver.: always
+ * @param clusterId   Ver.: always
+ * @param attributeId   Ver.: always
+ * @param mask   Ver.: always
+ * @param manufacturerCode   Ver.: always
+ * @param type   Ver.: always
+ * @param size   Ver.: always
+ * @param value   Ver.: always
+ */
+EmberAfStatus emberAfPreAttributeChangeCallback(chip::EndpointId endpoint, chip::ClusterId clusterId, chip::AttributeId attributeId,
+                                                uint8_t mask, uint16_t manufacturerCode, uint8_t type, uint8_t size,
+                                                uint8_t * value);
+
+/** @brief Post Attribute Change
+ *
+ * This function is called by the application framework after it changes an
+ * attribute value. The value passed into this callback is the value to which
+ * the attribute was set by the framework.
+ *
+ * @param endpoint   Ver.: always
+ * @param clusterId   Ver.: always
+ * @param attributeId   Ver.: always
+ * @param mask   Ver.: always
+ * @param manufacturerCode   Ver.: always
+ * @param type   Ver.: always
+ * @param size   Ver.: always
+ * @param value   Ver.: always
+ */
+void emberAfPostAttributeChangeCallback(chip::EndpointId endpoint, chip::ClusterId clusterId, chip::AttributeId attributeId,
+                                        uint8_t mask, uint16_t manufacturerCode, uint8_t type, uint8_t size, uint8_t * value);
+
+/** @brief Read Attributes Response
+ *
+ * This function is called by the application framework when a Read Attributes
+ * Response command is received from an external device.  The application should
+ * return true if the message was processed or false if it was not.
+ *
+ * @param clusterId The cluster identifier of this response.  Ver.: always
+ * @param buffer Buffer containing the list of read attribute status records.
+ * Ver.: always
+ * @param bufLen The length in bytes of the list.  Ver.: always
+ */
+bool emberAfReadAttributesResponseCallback(chip::ClusterId clusterId, uint8_t * buffer, uint16_t bufLen);
+
+/** @brief External Attribute Read
+ *
+ * Like emberAfExternalAttributeWriteCallback above, this function is called
+ * when the framework needs to read an attribute that is not stored within the
+ * Application Framework's data structures.
+        All of the important
+ * information about the attribute itself is passed as a pointer to an
+ * EmberAfAttributeMetadata struct, which is stored within the application and
+ * used to manage the attribute. A complete description of the
+ * EmberAfAttributeMetadata struct is provided in
+ * app/framework/include/af-types.h
+        This function assumes that the
+ * application is able to read the attribute, write it into the passed buffer,
+ * and return immediately. Any attributes that require a state machine for
+ * reading and writing are not really candidates for externalization at the
+ * present time. The Application Framework does not currently include a state
+ * machine for reading or writing attributes that must take place across a
+ * series of application ticks. Attributes that cannot be read in a timely
+ * manner should be stored within the Application Framework and updated
+ * occasionally by the application code from within the
+ * emberAfMainTickCallback.
+        If the application was successfully able to
+ * read the attribute and write it into the passed buffer, it should return a
+ * value of EMBER_ZCL_STATUS_SUCCESS. Ensure that the size of the externally
+ * managed attribute value is smaller than what the buffer can hold. In the case
+ * of a buffer overflow throw an appropriate error such as
+ * EMBER_ZCL_STATUS_INSUFFICIENT_SPACE. Any other return value indicates the
+ * application was not able to read the attribute.
+ *
+ * @param endpoint   Ver.: always
+ * @param clusterId   Ver.: always
+ * @param attributeMetadata   Ver.: always
+ * @param manufacturerCode   Ver.: always
+ * @param buffer   Ver.: always
+ * @param maxReadLength   Ver.: always
+ */
+EmberAfStatus emberAfExternalAttributeReadCallback(chip::EndpointId endpoint, chip::ClusterId clusterId,
+                                                   EmberAfAttributeMetadata * attributeMetadata, uint16_t manufacturerCode,
+                                                   uint8_t * buffer, uint16_t maxReadLength);
+
+/** @brief Write Attributes Response
+ *
+ * This function is called by the application framework when a Write Attributes
+ * Response command is received from an external device.  The application should
+ * return true if the message was processed or false if it was not.
+ *
+ * @param clusterId The cluster identifier of this response.  Ver.: always
+ * @param buffer Buffer containing the list of write attribute status records.
+ * Ver.: always
+ * @param bufLen The length in bytes of the list.  Ver.: always
+ */
+bool emberAfWriteAttributesResponseCallback(chip::ClusterId clusterId, uint8_t * buffer, uint16_t bufLen);
+
+/** @brief External Attribute Write
+ *
+ * This function is called whenever the Application Framework needs to write an
+ * attribute which is not stored within the data structures of the Application
+ * Framework itself. One of the new features in Version 2 is the ability to
+ * store attributes outside the Framework. This is particularly useful for
+ * attributes that do not need to be stored because they can be read off the
+ * hardware when they are needed, or are stored in some central location used by
+ * many modules within the system. In this case, you can indicate that the
+ * attribute is stored externally. When the framework needs to write an external
+ * attribute, it makes a call to this callback.
+        This callback is very
+ * useful for host micros which need to store attributes in persistent memory.
+ * Because each host micro (used with an Ember NCP) has its own type of
+ * persistent memory storage, the Application Framework does not include the
+ * ability to mark attributes as stored in flash the way that it does for Ember
+ * SoCs like the EM35x. On a host micro, any attributes that need to be stored
+ * in persistent memory should be marked as external and accessed through the
+ * external read and write callbacks. Any host code associated with the
+ * persistent storage should be implemented within this callback.
+        All of
+ * the important information about the attribute itself is passed as a pointer
+ * to an EmberAfAttributeMetadata struct, which is stored within the application
+ * and used to manage the attribute. A complete description of the
+ * EmberAfAttributeMetadata struct is provided in
+ * app/framework/include/af-types.h.
+        This function assumes that the
+ * application is able to write the attribute and return immediately. Any
+ * attributes that require a state machine for reading and writing are not
+ * candidates for externalization at the present time. The Application Framework
+ * does not currently include a state machine for reading or writing attributes
+ * that must take place across a series of application ticks. Attributes that
+ * cannot be written immediately should be stored within the Application
+ * Framework and updated occasionally by the application code from within the
+ * emberAfMainTickCallback.
+        If the application was successfully able to
+ * write the attribute, it returns a value of EMBER_ZCL_STATUS_SUCCESS. Any
+ * other return value indicates the application was not able to write the
+ * attribute.
+ *
+ * @param endpoint   Ver.: always
+ * @param clusterId   Ver.: always
+ * @param attributeMetadata   Ver.: always
+ * @param manufacturerCode   Ver.: always
+ * @param buffer   Ver.: always
+ */
+EmberAfStatus emberAfExternalAttributeWriteCallback(chip::EndpointId endpoint, chip::ClusterId clusterId,
+                                                    EmberAfAttributeMetadata * attributeMetadata, uint16_t manufacturerCode,
+                                                    uint8_t * buffer);
+
+/** @brief Report Attributes
+ *
+ * This function is called by the application framework when a Report Attributes
+ * command is received from an external device.  The application should return
+ * true if the message was processed or false if it was not.
+ *
+ * @param clusterId The cluster identifier of this command.  Ver.: always
+ * @param buffer Buffer containing the list of attribute report records.  Ver.:
+ * always
+ * @param bufLen The length in bytes of the list.  Ver.: always
+ */
+bool emberAfReportAttributesCallback(chip::ClusterId clusterId, uint8_t * buffer, uint16_t bufLen);
+
+/** @brief Get Current Time
+ *
+ * This callback is called when device attempts to get current time from the
+ * hardware. If this device has means to retrieve exact time, then this method
+ * should implement it. If the callback can't provide the exact time it should
+ * return 0 to indicate failure. Default action is to return 0, which indicates
+ * that device does not have access to real time.
+ *
+ */
+uint32_t emberAfGetCurrentTimeCallback();
+
+/** @brief Get Endpoint Info
+ *
+ * This function is a callback to an application implemented endpoint that
+ * operates outside the normal application framework.  When the framework wishes
+ * to perform operations with that endpoint it uses this callback to retrieve
+ * the endpoint's information.  If the endpoint exists and the application can
+ * provide data then true shall be returned.  Otherwise the callback must return
+ * false.
+ *
+ * @param endpoint The endpoint to retrieve data for.  Ver.: always
+ * @param returnNetworkIndex The index corresponding to the ZigBee network the
+ * endpoint belongs to.  If not using a multi-network device, 0 must be
+ * returned.  Otherwise on a multi-network device the stack will switch to this
+ * network before sending the message.  Ver.: always
+ * @param returnEndpointInfo A pointer to a data struct that will be written
+ * with information about the endpoint.  Ver.: always
+ */
+bool emberAfGetEndpointInfoCallback(chip::EndpointId endpoint, uint8_t * returnNetworkIndex,
+                                    EmberAfEndpointInfoStruct * returnEndpointInfo);
+
+/** @brief Get Source Route Overhead
+ *
+ * This function is called by the framework to determine the overhead required
+ * in the network frame for source routing to a particular destination.
+ *
+ * @param destination The node id of the destination  Ver.: always
+ */
+uint8_t emberAfGetSourceRouteOverheadCallback(chip::NodeId destination);
+
+/** @brief Registration Abort
+ *
+ * This callback is called when the device should abort the registration
+ * process.
+ *
+ */
+void emberAfRegistrationAbortCallback();
+
+/** @brief Interpan Send Message
+ *
+ * This function will send a raw MAC message with interpan frame format using
+ * the passed parameters.
+ *
+ * @param header Interpan header info  Ver.: always
+ * @param messageLength The length of the message received or to send  Ver.:
+ * always
+ * @param message The message data received or to send.  Ver.: always
+ */
+EmberStatus emberAfInterpanSendMessageCallback(EmberAfInterpanHeader * header, uint16_t messageLength, uint8_t * message);
+
+/** @brief Start Move
+ *
+ * This function is called to initiate the process for a device to move (rejoin)
+ * to a new parent.
+ *
+ */
+bool emberAfStartMoveCallback();
diff --git a/src/darwin/Framework/CHIP/gen/client-command-macro.h b/src/darwin/Framework/CHIP/gen/client-command-macro.h
new file mode 100644
index 0000000..0cdc542
--- /dev/null
+++ b/src/darwin/Framework/CHIP/gen/client-command-macro.h
@@ -0,0 +1,6192 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+// Prevent multiple inclusion
+#pragma once
+
+/** @brief Command description for ReadAttributes
+ *
+ * Command: ReadAttributes
+ * @param attributeIds ATTRIBUTE_ID []
+ * @param attributeIdsLen int
+ */
+#define emberAfFillCommandGlobalReadAttributes(clusterId, attributeIds, attributeIdsLen)                                           \
+    emberAfFillExternalBuffer(mask, clusterId, ZCL_READ_ATTRIBUTES_COMMAND_ID, "b", attributeIds, attributeIdsLen);
+
+/** @brief Command description for ReadAttributesResponse
+ *
+ * Command: ReadAttributesResponse
+ * @param readAttributeStatusRecords ReadAttributeStatusRecord []
+ * @param readAttributeStatusRecordsLen int
+ */
+#define emberAfFillCommandGlobalReadAttributesResponse(clusterId, readAttributeStatusRecords, readAttributeStatusRecordsLen)       \
+    emberAfFillExternalBuffer(mask, clusterId, ZCL_READ_ATTRIBUTES_RESPONSE_COMMAND_ID, "b", readAttributeStatusRecords,           \
+                              readAttributeStatusRecordsLen);
+
+/** @brief Command description for WriteAttributes
+ *
+ * Command: WriteAttributes
+ * @param writeAttributeRecords WriteAttributeRecord []
+ * @param writeAttributeRecordsLen int
+ */
+#define emberAfFillCommandGlobalWriteAttributes(clusterId, writeAttributeRecords, writeAttributeRecordsLen)                        \
+    emberAfFillExternalBuffer(mask, clusterId, ZCL_WRITE_ATTRIBUTES_COMMAND_ID, "b", writeAttributeRecords,                        \
+                              writeAttributeRecordsLen);
+
+/** @brief Command description for WriteAttributesUndivided
+ *
+ * Command: WriteAttributesUndivided
+ * @param writeAttributeRecords WriteAttributeRecord []
+ * @param writeAttributeRecordsLen int
+ */
+#define emberAfFillCommandGlobalWriteAttributesUndivided(clusterId, writeAttributeRecords, writeAttributeRecordsLen)               \
+    emberAfFillExternalBuffer(mask, clusterId, ZCL_WRITE_ATTRIBUTES_UNDIVIDED_COMMAND_ID, "b", writeAttributeRecords,              \
+                              writeAttributeRecordsLen);
+
+/** @brief Command description for WriteAttributesResponse
+ *
+ * Command: WriteAttributesResponse
+ * @param writeAttributeStatusRecords WriteAttributeStatusRecord []
+ * @param writeAttributeStatusRecordsLen int
+ */
+#define emberAfFillCommandGlobalWriteAttributesResponse(clusterId, writeAttributeStatusRecords, writeAttributeStatusRecordsLen)    \
+    emberAfFillExternalBuffer(mask, clusterId, ZCL_WRITE_ATTRIBUTES_RESPONSE_COMMAND_ID, "b", writeAttributeStatusRecords,         \
+                              writeAttributeStatusRecordsLen);
+
+/** @brief Command description for WriteAttributesNoResponse
+ *
+ * Command: WriteAttributesNoResponse
+ * @param writeAttributeRecords WriteAttributeRecord []
+ * @param writeAttributeRecordsLen int
+ */
+#define emberAfFillCommandGlobalWriteAttributesNoResponse(clusterId, writeAttributeRecords, writeAttributeRecordsLen)              \
+    emberAfFillExternalBuffer(mask, clusterId, ZCL_WRITE_ATTRIBUTES_NO_RESPONSE_COMMAND_ID, "b", writeAttributeRecords,            \
+                              writeAttributeRecordsLen);
+
+/** @brief Command description for ConfigureReporting
+ *
+ * Command: ConfigureReporting
+ * @param configureReportingRecords ConfigureReportingRecord []
+ * @param configureReportingRecordsLen int
+ */
+#define emberAfFillCommandGlobalConfigureReporting(clusterId, configureReportingRecords, configureReportingRecordsLen)             \
+    emberAfFillExternalBuffer(mask, clusterId, ZCL_CONFIGURE_REPORTING_COMMAND_ID, "b", configureReportingRecords,                 \
+                              configureReportingRecordsLen);
+
+/** @brief Command description for ConfigureReportingResponse
+ *
+ * Command: ConfigureReportingResponse
+ * @param configureReportingStatusRecords ConfigureReportingStatusRecord []
+ * @param configureReportingStatusRecordsLen int
+ */
+#define emberAfFillCommandGlobalConfigureReportingResponse(clusterId, configureReportingStatusRecords,                             \
+                                                           configureReportingStatusRecordsLen)                                     \
+    emberAfFillExternalBuffer(mask, clusterId, ZCL_CONFIGURE_REPORTING_RESPONSE_COMMAND_ID, "b", configureReportingStatusRecords,  \
+                              configureReportingStatusRecordsLen);
+
+/** @brief Command description for ReadReportingConfiguration
+ *
+ * Command: ReadReportingConfiguration
+ * @param readReportingConfigurationAttributeRecords ReadReportingConfigurationAttributeRecord []
+ * @param readReportingConfigurationAttributeRecordsLen int
+ */
+#define emberAfFillCommandGlobalReadReportingConfiguration(clusterId, readReportingConfigurationAttributeRecords,                  \
+                                                           readReportingConfigurationAttributeRecordsLen)                          \
+    emberAfFillExternalBuffer(mask, clusterId, ZCL_READ_REPORTING_CONFIGURATION_COMMAND_ID, "b",                                   \
+                              readReportingConfigurationAttributeRecords, readReportingConfigurationAttributeRecordsLen);
+
+/** @brief Command description for ReadReportingConfigurationResponse
+ *
+ * Command: ReadReportingConfigurationResponse
+ * @param readReportingConfigurationRecords ReadReportingConfigurationRecord []
+ * @param readReportingConfigurationRecordsLen int
+ */
+#define emberAfFillCommandGlobalReadReportingConfigurationResponse(clusterId, readReportingConfigurationRecords,                   \
+                                                                   readReportingConfigurationRecordsLen)                           \
+    emberAfFillExternalBuffer(mask, clusterId, ZCL_READ_REPORTING_CONFIGURATION_RESPONSE_COMMAND_ID, "b",                          \
+                              readReportingConfigurationRecords, readReportingConfigurationRecordsLen);
+
+/** @brief Command description for ReportAttributes
+ *
+ * Command: ReportAttributes
+ * @param reportAttributeRecords ReportAttributeRecord []
+ * @param reportAttributeRecordsLen int
+ */
+#define emberAfFillCommandGlobalReportAttributes(clusterId, reportAttributeRecords, reportAttributeRecordsLen)                     \
+    emberAfFillExternalBuffer(mask, clusterId, ZCL_REPORT_ATTRIBUTES_COMMAND_ID, "b", reportAttributeRecords,                      \
+                              reportAttributeRecordsLen);
+
+/** @brief Command description for DefaultResponse
+ *
+ * Command: DefaultResponse
+ * @param commandId INT8U
+ * @param status Status
+ */
+#define emberAfFillCommandGlobalDefaultResponse(clusterId, commandId, status)                                                      \
+    emberAfFillExternalBuffer(mask, clusterId, ZCL_DEFAULT_RESPONSE_COMMAND_ID, "uu", commandId, status);
+
+/** @brief Command description for DiscoverAttributes
+ *
+ * Command: DiscoverAttributes
+ * @param startId ATTRIBUTE_ID
+ * @param maxAttributeIds INT8U
+ */
+#define emberAfFillCommandGlobalDiscoverAttributes(clusterId, startId, maxAttributeIds)                                            \
+    emberAfFillExternalBuffer(mask, clusterId, ZCL_DISCOVER_ATTRIBUTES_COMMAND_ID, "uu", startId, maxAttributeIds);
+
+/** @brief Command description for DiscoverAttributesResponse
+ *
+ * Command: DiscoverAttributesResponse
+ * @param discoveryComplete INT8U
+ * @param discoverAttributesInfoRecords DiscoverAttributesInfoRecord []
+ * @param discoverAttributesInfoRecordsLen int
+ */
+#define emberAfFillCommandGlobalDiscoverAttributesResponse(clusterId, discoveryComplete, discoverAttributesInfoRecords,            \
+                                                           discoverAttributesInfoRecordsLen)                                       \
+    emberAfFillExternalBuffer(mask, clusterId, ZCL_DISCOVER_ATTRIBUTES_RESPONSE_COMMAND_ID, "ub", discoveryComplete,               \
+                              discoverAttributesInfoRecords, discoverAttributesInfoRecordsLen);
+
+/** @brief Command description for ReadAttributesStructured
+ *
+ * Command: ReadAttributesStructured
+ * @param readStructuredAttributeRecords ReadStructuredAttributeRecord []
+ * @param readStructuredAttributeRecordsLen int
+ */
+#define emberAfFillCommandGlobalReadAttributesStructured(clusterId, readStructuredAttributeRecords,                                \
+                                                         readStructuredAttributeRecordsLen)                                        \
+    emberAfFillExternalBuffer(mask, clusterId, ZCL_READ_ATTRIBUTES_STRUCTURED_COMMAND_ID, "b", readStructuredAttributeRecords,     \
+                              readStructuredAttributeRecordsLen);
+
+/** @brief Command description for WriteAttributesStructured
+ *
+ * Command: WriteAttributesStructured
+ * @param writeStructuredAttributeRecords WriteStructuredAttributeRecord []
+ * @param writeStructuredAttributeRecordsLen int
+ */
+#define emberAfFillCommandGlobalWriteAttributesStructured(clusterId, writeStructuredAttributeRecords,                              \
+                                                          writeStructuredAttributeRecordsLen)                                      \
+    emberAfFillExternalBuffer(mask, clusterId, ZCL_WRITE_ATTRIBUTES_STRUCTURED_COMMAND_ID, "b", writeStructuredAttributeRecords,   \
+                              writeStructuredAttributeRecordsLen);
+
+/** @brief Command description for WriteAttributesStructuredResponse
+ *
+ * Command: WriteAttributesStructuredResponse
+ * @param writeStructuredAttributeStatusRecords WriteStructuredAttributeStatusRecord []
+ * @param writeStructuredAttributeStatusRecordsLen int
+ */
+#define emberAfFillCommandGlobalWriteAttributesStructuredResponse(clusterId, writeStructuredAttributeStatusRecords,                \
+                                                                  writeStructuredAttributeStatusRecordsLen)                        \
+    emberAfFillExternalBuffer(mask, clusterId, ZCL_WRITE_ATTRIBUTES_STRUCTURED_RESPONSE_COMMAND_ID, "b",                           \
+                              writeStructuredAttributeStatusRecords, writeStructuredAttributeStatusRecordsLen);
+
+/** @brief Command description for DiscoverCommandsReceived
+ *
+ * Command: DiscoverCommandsReceived
+ * @param startCommandId INT8U
+ * @param maxCommandIds INT8U
+ */
+#define emberAfFillCommandGlobalDiscoverCommandsReceived(clusterId, startCommandId, maxCommandIds)                                 \
+    emberAfFillExternalBuffer(mask, clusterId, ZCL_DISCOVER_COMMANDS_RECEIVED_COMMAND_ID, "uu", startCommandId, maxCommandIds);
+
+/** @brief Command description for DiscoverCommandsReceivedResponse
+ *
+ * Command: DiscoverCommandsReceivedResponse
+ * @param discoveryComplete INT8U
+ * @param commandIds INT8U []
+ * @param commandIdsLen int
+ */
+#define emberAfFillCommandGlobalDiscoverCommandsReceivedResponse(clusterId, discoveryComplete, commandIds, commandIdsLen)          \
+    emberAfFillExternalBuffer(mask, clusterId, ZCL_DISCOVER_COMMANDS_RECEIVED_RESPONSE_COMMAND_ID, "ub", discoveryComplete,        \
+                              commandIds, commandIdsLen);
+
+/** @brief Command description for DiscoverCommandsGenerated
+ *
+ * Command: DiscoverCommandsGenerated
+ * @param startCommandId INT8U
+ * @param maxCommandIds INT8U
+ */
+#define emberAfFillCommandGlobalDiscoverCommandsGenerated(clusterId, startCommandId, maxCommandIds)                                \
+    emberAfFillExternalBuffer(mask, clusterId, ZCL_DISCOVER_COMMANDS_GENERATED_COMMAND_ID, "uu", startCommandId, maxCommandIds);
+
+/** @brief Command description for DiscoverCommandsGeneratedResponse
+ *
+ * Command: DiscoverCommandsGeneratedResponse
+ * @param discoveryComplete INT8U
+ * @param commandIds INT8U []
+ * @param commandIdsLen int
+ */
+#define emberAfFillCommandGlobalDiscoverCommandsGeneratedResponse(clusterId, discoveryComplete, commandIds, commandIdsLen)         \
+    emberAfFillExternalBuffer(mask, clusterId, ZCL_DISCOVER_COMMANDS_GENERATED_RESPONSE_COMMAND_ID, "ub", discoveryComplete,       \
+                              commandIds, commandIdsLen);
+
+/** @brief Command description for DiscoverAttributesExtended
+ *
+ * Command: DiscoverAttributesExtended
+ * @param startId ATTRIBUTE_ID
+ * @param maxAttributeIds INT8U
+ */
+#define emberAfFillCommandGlobalDiscoverAttributesExtended(clusterId, startId, maxAttributeIds)                                    \
+    emberAfFillExternalBuffer(mask, clusterId, ZCL_DISCOVER_ATTRIBUTES_EXTENDED_COMMAND_ID, "uu", startId, maxAttributeIds);
+
+/** @brief Command description for DiscoverAttributesExtendedResponse
+ *
+ * Command: DiscoverAttributesExtendedResponse
+ * @param discoveryComplete INT8U
+ * @param extendedDiscoverAttributesInfoRecords ExtendedDiscoverAttributesInfoRecord []
+ * @param extendedDiscoverAttributesInfoRecordsLen int
+ */
+#define emberAfFillCommandGlobalDiscoverAttributesExtendedResponse(                                                                \
+    clusterId, discoveryComplete, extendedDiscoverAttributesInfoRecords, extendedDiscoverAttributesInfoRecordsLen)                 \
+    emberAfFillExternalBuffer(mask, clusterId, ZCL_DISCOVER_ATTRIBUTES_EXTENDED_RESPONSE_COMMAND_ID, "ub", discoveryComplete,      \
+                              extendedDiscoverAttributesInfoRecords, extendedDiscoverAttributesInfoRecordsLen);
+
+/** @brief Command description for ResetToFactoryDefaults
+ *
+ * Command: ResetToFactoryDefaults
+ */
+#define emberAfFillCommandBasicClusterResetToFactoryDefaults()                                                                     \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_RESET_TO_FACTORY_DEFAULTS_COMMAND_ID, "", );
+
+/** @brief Command description for Identify
+ *
+ * Command: Identify
+ * @param identifyTime INT16U
+ * @param timeout INT16U
+ */
+#define emberAfFillCommandIdentifyClusterIdentify(identifyTime, timeout)                                                           \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_IDENTIFY_COMMAND_ID, "uu", identifyTime, timeout);
+
+/** @brief Command description for IdentifyQuery
+ *
+ * Command: IdentifyQuery
+ */
+#define emberAfFillCommandIdentifyClusterIdentifyQuery()                                                                           \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_IDENTIFY_QUERY_COMMAND_ID, "", );
+
+/** @brief Command description for EZModeInvoke
+ *
+ * Command: EZModeInvoke
+ * @param action BITMAP8
+ */
+#define emberAfFillCommandIdentifyClusterEZModeInvoke(action)                                                                      \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_EZ_MODE_INVOKE_COMMAND_ID, "u", action);
+
+/** @brief Command description for UpdateCommissionState
+ *
+ * Command: UpdateCommissionState
+ * @param action ENUM8
+ * @param commissionStateMask BITMAP8
+ */
+#define emberAfFillCommandIdentifyClusterUpdateCommissionState(action, commissionStateMask)                                        \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_UPDATE_COMMISSION_STATE_COMMAND_ID, "uu", action, commissionStateMask);
+
+/** @brief Command description for TriggerEffect
+ *
+ * Command: TriggerEffect
+ * @param effectId IdentifyEffectIdentifier
+ * @param effectVariant IdentifyEffectVariant
+ */
+#define emberAfFillCommandIdentifyClusterTriggerEffect(effectId, effectVariant)                                                    \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_TRIGGER_EFFECT_COMMAND_ID, "uu", effectId, effectVariant);
+
+/** @brief Command description for AddGroup
+ *
+ * Command: AddGroup
+ * @param groupId INT16U
+ * @param status Status
+ * @param groupName CHAR_STRING
+ * @param groupId INT16U
+ */
+#define emberAfFillCommandGroupsClusterAddGroup(groupId, status, groupName, groupId)                                               \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_ADD_GROUP_COMMAND_ID, "uuuu", groupId, status, groupName, groupId);
+
+/** @brief Command description for ViewGroup
+ *
+ * Command: ViewGroup
+ * @param groupId INT16U
+ * @param status Status
+ * @param groupId INT16U
+ * @param groupName CHAR_STRING
+ */
+#define emberAfFillCommandGroupsClusterViewGroup(groupId, status, groupId, groupName)                                              \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_VIEW_GROUP_COMMAND_ID, "uuuu", groupId, status, groupId, groupName);
+
+/** @brief Command description for GetGroupMembership
+ *
+ * Command: GetGroupMembership
+ * @param groupCount INT8U
+ * @param capacity INT8U
+ * @param groupList INT16U []
+ * @param groupListLen int
+ * @param groupCount INT8U
+ * @param groupList INT16U []
+ * @param groupListLen int
+ */
+#define emberAfFillCommandGroupsClusterGetGroupMembership(groupCount, capacity, groupList, groupListLen, groupCount, groupList,    \
+                                                          groupListLen)                                                            \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_GET_GROUP_MEMBERSHIP_COMMAND_ID, "uubub", groupCount, capacity, groupList, groupListLen,         \
+                              groupCount, groupList, groupListLen);
+
+/** @brief Command description for RemoveGroup
+ *
+ * Command: RemoveGroup
+ * @param groupId INT16U
+ * @param status Status
+ * @param groupId INT16U
+ */
+#define emberAfFillCommandGroupsClusterRemoveGroup(groupId, status, groupId)                                                       \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_REMOVE_GROUP_COMMAND_ID, "uuu", groupId, status, groupId);
+
+/** @brief Command description for RemoveAllGroups
+ *
+ * Command: RemoveAllGroups
+ */
+#define emberAfFillCommandGroupsClusterRemoveAllGroups()                                                                           \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_REMOVE_ALL_GROUPS_COMMAND_ID, "", );
+
+/** @brief Command description for AddGroupIfIdentifying
+ *
+ * Command: AddGroupIfIdentifying
+ * @param groupId INT16U
+ * @param groupName CHAR_STRING
+ */
+#define emberAfFillCommandGroupsClusterAddGroupIfIdentifying(groupId, groupName)                                                   \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_ADD_GROUP_IF_IDENTIFYING_COMMAND_ID, "uu", groupId, groupName);
+
+/** @brief Command description for AddScene
+ *
+ * Command: AddScene
+ * @param groupId INT16U
+ * @param status Status
+ * @param sceneId INT8U
+ * @param groupId INT16U
+ * @param transitionTime INT16U
+ * @param sceneId INT8U
+ * @param sceneName CHAR_STRING
+ * @param extensionFieldSets SceneExtensionFieldSet []
+ * @param extensionFieldSetsLen int
+ */
+#define emberAfFillCommandScenesClusterAddScene(groupId, status, sceneId, groupId, transitionTime, sceneId, sceneName,             \
+                                                extensionFieldSets, extensionFieldSetsLen)                                         \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_ADD_SCENE_COMMAND_ID, "uuuuuuub", groupId, status, sceneId, groupId, transitionTime, sceneId,    \
+                              sceneName, extensionFieldSets, extensionFieldSetsLen);
+
+/** @brief Command description for ViewScene
+ *
+ * Command: ViewScene
+ * @param groupId INT16U
+ * @param status Status
+ * @param sceneId INT8U
+ * @param groupId INT16U
+ * @param sceneId INT8U
+ * @param transitionTime INT16U
+ * @param sceneName CHAR_STRING
+ * @param extensionFieldSets SceneExtensionFieldSet []
+ * @param extensionFieldSetsLen int
+ */
+#define emberAfFillCommandScenesClusterViewScene(groupId, status, sceneId, groupId, sceneId, transitionTime, sceneName,            \
+                                                 extensionFieldSets, extensionFieldSetsLen)                                        \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_VIEW_SCENE_COMMAND_ID, "uuuuuuub", groupId, status, sceneId, groupId, sceneId, transitionTime,   \
+                              sceneName, extensionFieldSets, extensionFieldSetsLen);
+
+/** @brief Command description for RemoveScene
+ *
+ * Command: RemoveScene
+ * @param groupId INT16U
+ * @param status Status
+ * @param sceneId INT8U
+ * @param groupId INT16U
+ * @param sceneId INT8U
+ */
+#define emberAfFillCommandScenesClusterRemoveScene(groupId, status, sceneId, groupId, sceneId)                                     \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_REMOVE_SCENE_COMMAND_ID, "uuuuu", groupId, status, sceneId, groupId, sceneId);
+
+/** @brief Command description for RemoveAllScenes
+ *
+ * Command: RemoveAllScenes
+ * @param groupId INT16U
+ * @param status Status
+ * @param groupId INT16U
+ */
+#define emberAfFillCommandScenesClusterRemoveAllScenes(groupId, status, groupId)                                                   \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_REMOVE_ALL_SCENES_COMMAND_ID, "uuu", groupId, status, groupId);
+
+/** @brief Command description for StoreScene
+ *
+ * Command: StoreScene
+ * @param groupId INT16U
+ * @param status Status
+ * @param sceneId INT8U
+ * @param groupId INT16U
+ * @param sceneId INT8U
+ */
+#define emberAfFillCommandScenesClusterStoreScene(groupId, status, sceneId, groupId, sceneId)                                      \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_STORE_SCENE_COMMAND_ID, "uuuuu", groupId, status, sceneId, groupId, sceneId);
+
+/** @brief Command description for RecallScene
+ *
+ * Command: RecallScene
+ * @param groupId INT16U
+ * @param sceneId INT8U
+ * @param transitionTime INT16U
+ */
+#define emberAfFillCommandScenesClusterRecallScene(groupId, sceneId, transitionTime)                                               \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_RECALL_SCENE_COMMAND_ID, "uuu", groupId, sceneId, transitionTime);
+
+/** @brief Command description for GetSceneMembership
+ *
+ * Command: GetSceneMembership
+ * @param groupId INT16U
+ * @param status Status
+ * @param capacity INT8U
+ * @param groupId INT16U
+ * @param sceneCount INT8U
+ * @param sceneList INT8U []
+ * @param sceneListLen int
+ */
+#define emberAfFillCommandScenesClusterGetSceneMembership(groupId, status, capacity, groupId, sceneCount, sceneList, sceneListLen) \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_GET_SCENE_MEMBERSHIP_COMMAND_ID, "uuuuub", groupId, status, capacity, groupId, sceneCount,       \
+                              sceneList, sceneListLen);
+
+/** @brief Command description for EnhancedAddScene
+ *
+ * Command: EnhancedAddScene
+ * @param groupId INT16U
+ * @param status Status
+ * @param sceneId INT8U
+ * @param groupId INT16U
+ * @param transitionTime INT16U
+ * @param sceneId INT8U
+ * @param sceneName CHAR_STRING
+ * @param extensionFieldSets SceneExtensionFieldSet []
+ * @param extensionFieldSetsLen int
+ */
+#define emberAfFillCommandScenesClusterEnhancedAddScene(groupId, status, sceneId, groupId, transitionTime, sceneId, sceneName,     \
+                                                        extensionFieldSets, extensionFieldSetsLen)                                 \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_ENHANCED_ADD_SCENE_COMMAND_ID, "uuuuuuub", groupId, status, sceneId, groupId, transitionTime,    \
+                              sceneId, sceneName, extensionFieldSets, extensionFieldSetsLen);
+
+/** @brief Command description for EnhancedViewScene
+ *
+ * Command: EnhancedViewScene
+ * @param groupId INT16U
+ * @param status Status
+ * @param sceneId INT8U
+ * @param groupId INT16U
+ * @param sceneId INT8U
+ * @param transitionTime INT16U
+ * @param sceneName CHAR_STRING
+ * @param extensionFieldSets SceneExtensionFieldSet []
+ * @param extensionFieldSetsLen int
+ */
+#define emberAfFillCommandScenesClusterEnhancedViewScene(groupId, status, sceneId, groupId, sceneId, transitionTime, sceneName,    \
+                                                         extensionFieldSets, extensionFieldSetsLen)                                \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_ENHANCED_VIEW_SCENE_COMMAND_ID, "uuuuuuub", groupId, status, sceneId, groupId, sceneId,          \
+                              transitionTime, sceneName, extensionFieldSets, extensionFieldSetsLen);
+
+/** @brief Command description for CopyScene
+ *
+ * Command: CopyScene
+ * @param mode ScenesCopyMode
+ * @param status Status
+ * @param groupIdFrom INT16U
+ * @param groupIdFrom INT16U
+ * @param sceneIdFrom INT8U
+ * @param sceneIdFrom INT8U
+ * @param groupIdTo INT16U
+ * @param sceneIdTo INT8U
+ */
+#define emberAfFillCommandScenesClusterCopyScene(mode, status, groupIdFrom, groupIdFrom, sceneIdFrom, sceneIdFrom, groupIdTo,      \
+                                                 sceneIdTo)                                                                        \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_COPY_SCENE_COMMAND_ID, "uuuuuuuu", mode, status, groupIdFrom, groupIdFrom, sceneIdFrom,          \
+                              sceneIdFrom, groupIdTo, sceneIdTo);
+
+/** @brief Command description for Off
+ *
+ * Command: Off
+ */
+#define emberAfFillCommandOn                                                                                                       \
+    /                                                                                                                              \
+        offClusterOff() emberAfFillExternalBuffer(mask,                                                                            \
+                                                                                                                                   \
+                                                  ZCL_OFF_COMMAND_ID, "", );
+
+/** @brief Command description for On
+ *
+ * Command: On
+ */
+#define emberAfFillCommandOn                                                                                                       \
+    /                                                                                                                              \
+        offClusterOn() emberAfFillExternalBuffer(mask,                                                                             \
+                                                                                                                                   \
+                                                 ZCL_ON_COMMAND_ID, "", );
+
+/** @brief Command description for Toggle
+ *
+ * Command: Toggle
+ */
+#define emberAfFillCommandOn                                                                                                       \
+    /                                                                                                                              \
+        offClusterToggle() emberAfFillExternalBuffer(mask,                                                                         \
+                                                                                                                                   \
+                                                     ZCL_TOGGLE_COMMAND_ID, "", );
+
+/** @brief Command description for OffWithEffect
+ *
+ * Command: OffWithEffect
+ * @param effectId OnOffEffectIdentifier
+ * @param effectVariant ENUM8
+ */
+#define emberAfFillCommandOn                                                                                                       \
+    /                                                                                                                              \
+        offClusterOffWithEffect(effectId, effectVariant)                                                                           \
+            emberAfFillExternalBuffer(mask,                                                                                        \
+                                                                                                                                   \
+                                      ZCL_OFF_WITH_EFFECT_COMMAND_ID, "uu", effectId, effectVariant);
+
+/** @brief Command description for OnWithRecallGlobalScene
+ *
+ * Command: OnWithRecallGlobalScene
+ */
+#define emberAfFillCommandOn                                                                                                       \
+    /                                                                                                                              \
+        offClusterOnWithRecallGlobalScene() emberAfFillExternalBuffer(mask,                                                        \
+                                                                                                                                   \
+                                                                      ZCL_ON_WITH_RECALL_GLOBAL_SCENE_COMMAND_ID, "", );
+
+/** @brief Command description for OnWithTimedOff
+ *
+ * Command: OnWithTimedOff
+ * @param onOffControl OnOffControl
+ * @param onTime INT16U
+ * @param offWaitTime INT16U
+ */
+#define emberAfFillCommandOn                                                                                                       \
+    /                                                                                                                              \
+        offClusterOnWithTimedOff(onOffControl, onTime, offWaitTime)                                                                \
+            emberAfFillExternalBuffer(mask,                                                                                        \
+                                                                                                                                   \
+                                      ZCL_ON_WITH_TIMED_OFF_COMMAND_ID, "uuu", onOffControl, onTime, offWaitTime);
+
+/** @brief Command description for MoveToLevel
+ *
+ * Command: MoveToLevel
+ * @param level INT8U
+ * @param transitionTime INT16U
+ * @param optionMask BITMAP8
+ * @param optionOverride BITMAP8
+ */
+#define emberAfFillCommandLevel                                                                                                    \
+    ControlClusterMoveToLevel(level, transitionTime, optionMask, optionOverride)                                                   \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_MOVE_TO_LEVEL_COMMAND_ID, "uuuu", level, transitionTime, optionMask, optionOverride);
+
+/** @brief Command description for Move
+ *
+ * Command: Move
+ * @param moveMode MoveMode
+ * @param rate INT8U
+ * @param optionMask BITMAP8
+ * @param optionOverride BITMAP8
+ */
+#define emberAfFillCommandLevel                                                                                                    \
+    ControlClusterMove(moveMode, rate, optionMask, optionOverride)                                                                 \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_MOVE_COMMAND_ID, "uuuu", moveMode, rate, optionMask, optionOverride);
+
+/** @brief Command description for Step
+ *
+ * Command: Step
+ * @param stepMode StepMode
+ * @param stepSize INT8U
+ * @param transitionTime INT16U
+ * @param optionMask BITMAP8
+ * @param optionOverride BITMAP8
+ */
+#define emberAfFillCommandLevel                                                                                                    \
+    ControlClusterStep(stepMode, stepSize, transitionTime, optionMask, optionOverride)                                             \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_STEP_COMMAND_ID, "uuuuu", stepMode, stepSize, transitionTime, optionMask, optionOverride);
+
+/** @brief Command description for Stop
+ *
+ * Command: Stop
+ * @param optionMask BITMAP8
+ * @param optionOverride BITMAP8
+ */
+#define emberAfFillCommandLevel                                                                                                    \
+    ControlClusterStop(optionMask, optionOverride)                                                                                 \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_STOP_COMMAND_ID, "uu", optionMask, optionOverride);
+
+/** @brief Command description for MoveToLevelWithOnOff
+ *
+ * Command: MoveToLevelWithOnOff
+ * @param level INT8U
+ * @param transitionTime INT16U
+ */
+#define emberAfFillCommandLevel                                                                                                    \
+    ControlClusterMoveToLevelWithOnOff(level, transitionTime)                                                                      \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_MOVE_TO_LEVEL_WITH_ON_OFF_COMMAND_ID, "uu", level, transitionTime);
+
+/** @brief Command description for MoveWithOnOff
+ *
+ * Command: MoveWithOnOff
+ * @param moveMode MoveMode
+ * @param rate INT8U
+ */
+#define emberAfFillCommandLevel                                                                                                    \
+    ControlClusterMoveWithOnOff(moveMode, rate) emberAfFillExternalBuffer(mask,                                                    \
+                                                                                                                                   \
+                                                                          ZCL_MOVE_WITH_ON_OFF_COMMAND_ID, "uu", moveMode, rate);
+
+/** @brief Command description for StepWithOnOff
+ *
+ * Command: StepWithOnOff
+ * @param stepMode StepMode
+ * @param stepSize INT8U
+ * @param transitionTime INT16U
+ */
+#define emberAfFillCommandLevel                                                                                                    \
+    ControlClusterStepWithOnOff(stepMode, stepSize, transitionTime)                                                                \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_STEP_WITH_ON_OFF_COMMAND_ID, "uuu", stepMode, stepSize, transitionTime);
+
+/** @brief Command description for StopWithOnOff
+ *
+ * Command: StopWithOnOff
+ */
+#define emberAfFillCommandLevel                                                                                                    \
+    ControlClusterStopWithOnOff() emberAfFillExternalBuffer(mask,                                                                  \
+                                                                                                                                   \
+                                                            ZCL_STOP_WITH_ON_OFF_COMMAND_ID, "", );
+
+/** @brief Command description for ResetAlarm
+ *
+ * Command: ResetAlarm
+ * @param alarmCode ENUM8
+ * @param alarmCode ENUM8
+ * @param clusterId CLUSTER_ID
+ * @param clusterId CLUSTER_ID
+ */
+#define emberAfFillCommandAlarmsClusterResetAlarm(alarmCode, alarmCode, clusterId, clusterId)                                      \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_RESET_ALARM_COMMAND_ID, "uuuu", alarmCode, alarmCode, clusterId, clusterId);
+
+/** @brief Command description for ResetAllAlarms
+ *
+ * Command: ResetAllAlarms
+ * @param status Status
+ * @param alarmCode ENUM8
+ * @param clusterId CLUSTER_ID
+ * @param timeStamp INT32U
+ */
+#define emberAfFillCommandAlarmsClusterResetAllAlarms(status, alarmCode, clusterId, timeStamp)                                     \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_RESET_ALL_ALARMS_COMMAND_ID, "uuuu", status, alarmCode, clusterId, timeStamp);
+
+/** @brief Command description for GetAlarm
+ *
+ * Command: GetAlarm
+ */
+#define emberAfFillCommandAlarmsClusterGetAlarm()                                                                                  \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_GET_ALARM_COMMAND_ID, "", );
+
+/** @brief Command description for ResetAlarmLog
+ *
+ * Command: ResetAlarmLog
+ */
+#define emberAfFillCommandAlarmsClusterResetAlarmLog()                                                                             \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_RESET_ALARM_LOG_COMMAND_ID, "", );
+
+/** @brief Command description for SetAbsoluteLocation
+ *
+ * Command: SetAbsoluteLocation
+ * @param coordinate1 INT16S
+ * @param status Status
+ * @param coordinate2 INT16S
+ * @param power INT16S
+ * @param coordinate3 INT16S
+ * @param pathLossExponent INT16U
+ * @param power INT16S
+ * @param calculationPeriod INT16U
+ * @param pathLossExponent INT16U
+ * @param numberRssiMeasurements INT8U
+ * @param reportingPeriod INT16U
+ */
+#define emberAfFillCommandRSSI                                                                                                     \
+    LocationClusterSetAbsoluteLocation(coordinate1, status, coordinate2, power, coordinate3, pathLossExponent, power,              \
+                                       calculationPeriod, pathLossExponent, numberRssiMeasurements, reportingPeriod)               \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_SET_ABSOLUTE_LOCATION_COMMAND_ID, "uuuuuuuuuuu", coordinate1, status, coordinate2, power,    \
+                                  coordinate3, pathLossExponent, power, calculationPeriod, pathLossExponent,                       \
+                                  numberRssiMeasurements, reportingPeriod);
+
+/** @brief Command description for SetDeviceConfiguration
+ *
+ * Command: SetDeviceConfiguration
+ * @param power INT16S
+ * @param status Status
+ * @param pathLossExponent INT16U
+ * @param locationType LocationType
+ * @param calculationPeriod INT16U
+ * @param coordinate1 INT16S
+ * @param numberRssiMeasurements INT8U
+ * @param coordinate2 INT16S
+ * @param reportingPeriod INT16U
+ * @param coordinate3 INT16S
+ * @param power INT16S
+ * @param pathLossExponent INT16U
+ * @param locationMethod LocationMethod
+ * @param qualityMeasure INT8U
+ * @param locationAge INT16U
+ */
+#define emberAfFillCommandRSSI                                                                                                     \
+    LocationClusterSetDeviceConfiguration(power, status, pathLossExponent, locationType, calculationPeriod, coordinate1,           \
+                                          numberRssiMeasurements, coordinate2, reportingPeriod, coordinate3, power,                \
+                                          pathLossExponent, locationMethod, qualityMeasure, locationAge)                           \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_SET_DEVICE_CONFIGURATION_COMMAND_ID, "uuuuuuuuuuuuuuu", power, status, pathLossExponent,     \
+                                  locationType, calculationPeriod, coordinate1, numberRssiMeasurements, coordinate2,               \
+                                  reportingPeriod, coordinate3, power, pathLossExponent, locationMethod, qualityMeasure,           \
+                                  locationAge);
+
+/** @brief Command description for GetDeviceConfiguration
+ *
+ * Command: GetDeviceConfiguration
+ * @param targetAddress IEEE_ADDRESS
+ * @param locationType LocationType
+ * @param coordinate1 INT16S
+ * @param coordinate2 INT16S
+ * @param coordinate3 INT16S
+ * @param power INT16S
+ * @param pathLossExponent INT16U
+ * @param locationMethod LocationMethod
+ * @param qualityMeasure INT8U
+ * @param locationAge INT16U
+ */
+#define emberAfFillCommandRSSI                                                                                                     \
+    LocationClusterGetDeviceConfiguration(targetAddress, locationType, coordinate1, coordinate2, coordinate3, power,               \
+                                          pathLossExponent, locationMethod, qualityMeasure, locationAge)                           \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_DEVICE_CONFIGURATION_COMMAND_ID, "uuuuuuuuuu", targetAddress, locationType, coordinate1, \
+                                  coordinate2, coordinate3, power, pathLossExponent, locationMethod, qualityMeasure, locationAge);
+
+/** @brief Command description for GetLocationData
+ *
+ * Command: GetLocationData
+ * @param flags GetLocationDataFlags
+ * @param locationType LocationType
+ * @param numberResponses INT8U
+ * @param coordinate1 INT16S
+ * @param targetAddress IEEE_ADDRESS
+ * @param coordinate2 INT16S
+ * @param coordinate3 INT16S
+ * @param qualityMeasure INT8U
+ * @param locationAge INT16U
+ */
+#define emberAfFillCommandRSSI                                                                                                     \
+    LocationClusterGetLocationData(flags, locationType, numberResponses, coordinate1, targetAddress, coordinate2, coordinate3,     \
+                                   qualityMeasure, locationAge)                                                                    \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_LOCATION_DATA_COMMAND_ID, "uuuuuuuuu", flags, locationType, numberResponses,             \
+                                  coordinate1, targetAddress, coordinate2, coordinate3, qualityMeasure, locationAge);
+
+/** @brief Command description for RssiResponse
+ *
+ * Command: RssiResponse
+ * @param replyingDevice IEEE_ADDRESS
+ * @param locationType LocationType
+ * @param coordinate1 INT16S
+ * @param coordinate2 INT16S
+ * @param coordinate3 INT16S
+ * @param rssi INT8S
+ * @param numberRssiMeasurements INT8U
+ */
+#define emberAfFillCommandRSSI                                                                                                     \
+    LocationClusterRssiResponse(replyingDevice, locationType, coordinate1, coordinate2, coordinate3, rssi, numberRssiMeasurements) \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_RSSI_RESPONSE_COMMAND_ID, "uuuuuuu", replyingDevice, locationType, coordinate1, coordinate2, \
+                                  coordinate3, rssi, numberRssiMeasurements);
+
+/** @brief Command description for RssiRequest
+ *
+ * Command: RssiRequest
+ * @param targetAddress IEEE_ADDRESS
+ * @param numberRssiMeasurements INT8U
+ * @param calculationPeriod INT16U
+ */
+#define emberAfFillCommandRSSI                                                                                                     \
+    LocationClusterRssiRequest(targetAddress, numberRssiMeasurements, calculationPeriod)                                           \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_RSSI_REQUEST_COMMAND_ID, "uuu", targetAddress, numberRssiMeasurements, calculationPeriod);
+
+/** @brief Command description for AnchorNodeAnnounce
+ *
+ * Command: AnchorNodeAnnounce
+ * @param anchorNodeIeeeAddress IEEE_ADDRESS
+ * @param measuringDevice IEEE_ADDRESS
+ * @param coordinate1 INT16S
+ * @param neighbors INT8U
+ * @param coordinate2 INT16S
+ * @param neighborsInfo NeighborInfo []
+ * @param neighborsInfoLen int
+ * @param coordinate3 INT16S
+ */
+#define emberAfFillCommandRSSI                                                                                                     \
+    LocationClusterAnchorNodeAnnounce(anchorNodeIeeeAddress, measuringDevice, coordinate1, neighbors, coordinate2, neighborsInfo,  \
+                                      neighborsInfoLen, coordinate3)                                                               \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_ANCHOR_NODE_ANNOUNCE_COMMAND_ID, "uuuuubu", anchorNodeIeeeAddress, measuringDevice,          \
+                                  coordinate1, neighbors, coordinate2, neighborsInfo, neighborsInfoLen, coordinate3);
+
+/** @brief Command description for RequestOwnLocation
+ *
+ * Command: RequestOwnLocation
+ * @param blindNode IEEE_ADDRESS
+ */
+#define emberAfFillCommandRSSI                                                                                                     \
+    LocationClusterRequestOwnLocation(blindNode) emberAfFillExternalBuffer(mask,                                                   \
+                                                                                                                                   \
+                                                                           ZCL_REQUEST_OWN_LOCATION_COMMAND_ID, "u", blindNode);
+
+/** @brief Command description for RestartDevice
+ *
+ * Command: RestartDevice
+ * @param options RestartOptions
+ * @param status ENUM8
+ * @param delay INT8U
+ * @param jitter INT8U
+ */
+#define emberAfFillCommandCommissioningClusterRestartDevice(options, status, delay, jitter)                                        \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_RESTART_DEVICE_COMMAND_ID, "uuuu", options, status, delay, jitter);
+
+/** @brief Command description for SaveStartupParameters
+ *
+ * Command: SaveStartupParameters
+ * @param options BITMAP8
+ * @param status ENUM8
+ * @param index INT8U
+ */
+#define emberAfFillCommandCommissioningClusterSaveStartupParameters(options, status, index)                                        \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_SAVE_STARTUP_PARAMETERS_COMMAND_ID, "uuu", options, status, index);
+
+/** @brief Command description for RestoreStartupParameters
+ *
+ * Command: RestoreStartupParameters
+ * @param options BITMAP8
+ * @param status ENUM8
+ * @param index INT8U
+ */
+#define emberAfFillCommandCommissioningClusterRestoreStartupParameters(options, status, index)                                     \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_RESTORE_STARTUP_PARAMETERS_COMMAND_ID, "uuu", options, status, index);
+
+/** @brief Command description for ResetStartupParameters
+ *
+ * Command: ResetStartupParameters
+ * @param options ResetOptions
+ * @param status ENUM8
+ * @param index INT8U
+ */
+#define emberAfFillCommandCommissioningClusterResetStartupParameters(options, status, index)                                       \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_RESET_STARTUP_PARAMETERS_COMMAND_ID, "uuu", options, status, index);
+
+/** @brief Command description for TransferPartitionedFrame
+ *
+ * Command: TransferPartitionedFrame
+ * @param fragmentationOptions BITMAP8
+ * @param ackOptions BITMAP8
+ * @param partitionedIndicatorAndFrame INT8U []
+ * @param partitionedIndicatorAndFrameLen int
+ * @param firstFrameIdAndNackList INT8U []
+ * @param firstFrameIdAndNackListLen int
+ */
+#define emberAfFillCommandPartitionClusterTransferPartitionedFrame(fragmentationOptions, ackOptions, partitionedIndicatorAndFrame, \
+                                                                   partitionedIndicatorAndFrameLen, firstFrameIdAndNackList,       \
+                                                                   firstFrameIdAndNackListLen)                                     \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_TRANSFER_PARTITIONED_FRAME_COMMAND_ID, "uubb", fragmentationOptions, ackOptions,                 \
+                              partitionedIndicatorAndFrame, partitionedIndicatorAndFrameLen, firstFrameIdAndNackList,              \
+                              firstFrameIdAndNackListLen);
+
+/** @brief Command description for ReadHandshakeParam
+ *
+ * Command: ReadHandshakeParam
+ * @param partitionedClusterId CLUSTER_ID
+ * @param partitionedClusterId CLUSTER_ID
+ * @param attributeList ATTRIBUTE_ID []
+ * @param attributeListLen int
+ * @param readAttributeStatusRecords ReadAttributeStatusRecord []
+ * @param readAttributeStatusRecordsLen int
+ */
+#define emberAfFillCommandPartitionClusterReadHandshakeParam(partitionedClusterId, partitionedClusterId, attributeList,            \
+                                                             attributeListLen, readAttributeStatusRecords,                         \
+                                                             readAttributeStatusRecordsLen)                                        \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_READ_HANDSHAKE_PARAM_COMMAND_ID, "uubb", partitionedClusterId, partitionedClusterId,             \
+                              attributeList, attributeListLen, readAttributeStatusRecords, readAttributeStatusRecordsLen);
+
+/** @brief Command description for WriteHandshakeParam
+ *
+ * Command: WriteHandshakeParam
+ * @param partitionedClusterId CLUSTER_ID
+ * @param writeAttributeRecords WriteAttributeRecord []
+ * @param writeAttributeRecordsLen int
+ */
+#define emberAfFillCommandPartitionClusterWriteHandshakeParam(partitionedClusterId, writeAttributeRecords,                         \
+                                                              writeAttributeRecordsLen)                                            \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_WRITE_HANDSHAKE_PARAM_COMMAND_ID, "ub", partitionedClusterId, writeAttributeRecords,             \
+                              writeAttributeRecordsLen);
+
+/** @brief Command description for ImageNotify
+ *
+ * Command: ImageNotify
+ * @param payloadType ENUM8
+ * @param queryJitter INT8U
+ * @param manufacturerId INT16U
+ * @param imageType INT16U
+ * @param newFileVersion INT32U
+ */
+#define emberAfFillCommandOver                                                                                                     \
+    the Air BootloadingClusterImageNotify(payloadType, queryJitter, manufacturerId, imageType, newFileVersion)                     \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_IMAGE_NOTIFY_COMMAND_ID, "uuuuu", payloadType, queryJitter, manufacturerId, imageType,       \
+                                  newFileVersion);
+
+/** @brief Command description for QueryNextImageRequest
+ *
+ * Command: QueryNextImageRequest
+ * @param fieldControl INT8U
+ * @param manufacturerId INT16U
+ * @param imageType INT16U
+ * @param currentFileVersion INT32U
+ * @param hardwareVersion INT16U
+ */
+#define emberAfFillCommandOver                                                                                                     \
+    the Air BootloadingClusterQueryNextImageRequest(fieldControl, manufacturerId, imageType, currentFileVersion, hardwareVersion)  \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_QUERY_NEXT_IMAGE_REQUEST_COMMAND_ID, "uuuuu", fieldControl, manufacturerId, imageType,       \
+                                  currentFileVersion, hardwareVersion);
+
+/** @brief Command description for QueryNextImageResponse
+ *
+ * Command: QueryNextImageResponse
+ * @param status Status
+ * @param manufacturerId INT16U
+ * @param imageType INT16U
+ * @param fileVersion INT32U
+ * @param imageSize INT32U
+ */
+#define emberAfFillCommandOver                                                                                                     \
+    the Air BootloadingClusterQueryNextImageResponse(status, manufacturerId, imageType, fileVersion, imageSize)                    \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_QUERY_NEXT_IMAGE_RESPONSE_COMMAND_ID, "uuuuu", status, manufacturerId, imageType,            \
+                                  fileVersion, imageSize);
+
+/** @brief Command description for ImageBlockRequest
+ *
+ * Command: ImageBlockRequest
+ * @param fieldControl INT8U
+ * @param manufacturerId INT16U
+ * @param imageType INT16U
+ * @param fileVersion INT32U
+ * @param fileOffset INT32U
+ * @param maxDataSize INT8U
+ * @param requestNodeAddress IEEE_ADDRESS
+ */
+#define emberAfFillCommandOver                                                                                                     \
+    the Air BootloadingClusterImageBlockRequest(fieldControl, manufacturerId, imageType, fileVersion, fileOffset, maxDataSize,     \
+                                                requestNodeAddress)                                                                \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_IMAGE_BLOCK_REQUEST_COMMAND_ID, "uuuuuuu", fieldControl, manufacturerId, imageType,          \
+                                  fileVersion, fileOffset, maxDataSize, requestNodeAddress);
+
+/** @brief Command description for ImagePageRequest
+ *
+ * Command: ImagePageRequest
+ * @param fieldControl INT8U
+ * @param manufacturerId INT16U
+ * @param imageType INT16U
+ * @param fileVersion INT32U
+ * @param fileOffset INT32U
+ * @param maxDataSize INT8U
+ * @param pageSize INT16U
+ * @param responseSpacing INT16U
+ * @param requestNodeAddress IEEE_ADDRESS
+ */
+#define emberAfFillCommandOver                                                                                                     \
+    the Air BootloadingClusterImagePageRequest(fieldControl, manufacturerId, imageType, fileVersion, fileOffset, maxDataSize,      \
+                                               pageSize, responseSpacing, requestNodeAddress)                                      \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_IMAGE_PAGE_REQUEST_COMMAND_ID, "uuuuuuuuu", fieldControl, manufacturerId, imageType,         \
+                                  fileVersion, fileOffset, maxDataSize, pageSize, responseSpacing, requestNodeAddress);
+
+/** @brief Command description for ImageBlockResponse
+ *
+ * Command: ImageBlockResponse
+ * @param status Status
+ * @param manufacturerId INT16U
+ * @param imageType INT16U
+ * @param fileVersion INT32U
+ * @param fileOffset INT32U
+ * @param dataSize INT8U
+ * @param imageData INT8U []
+ * @param imageDataLen int
+ */
+#define emberAfFillCommandOver                                                                                                     \
+    the Air BootloadingClusterImageBlockResponse(status, manufacturerId, imageType, fileVersion, fileOffset, dataSize, imageData,  \
+                                                 imageDataLen)                                                                     \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_IMAGE_BLOCK_RESPONSE_COMMAND_ID, "uuuuuub", status, manufacturerId, imageType, fileVersion,  \
+                                  fileOffset, dataSize, imageData, imageDataLen);
+
+/** @brief Command description for UpgradeEndRequest
+ *
+ * Command: UpgradeEndRequest
+ * @param status Status
+ * @param manufacturerId INT16U
+ * @param imageType INT16U
+ * @param fileVersion INT32U
+ */
+#define emberAfFillCommandOver                                                                                                     \
+    the Air BootloadingClusterUpgradeEndRequest(status, manufacturerId, imageType, fileVersion)                                    \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_UPGRADE_END_REQUEST_COMMAND_ID, "uuuu", status, manufacturerId, imageType, fileVersion);
+
+/** @brief Command description for UpgradeEndResponse
+ *
+ * Command: UpgradeEndResponse
+ * @param manufacturerId INT16U
+ * @param imageType INT16U
+ * @param fileVersion INT32U
+ * @param currentTime UTC_TIME
+ * @param upgradeTime UTC_TIME
+ */
+#define emberAfFillCommandOver                                                                                                     \
+    the Air BootloadingClusterUpgradeEndResponse(manufacturerId, imageType, fileVersion, currentTime, upgradeTime)                 \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_UPGRADE_END_RESPONSE_COMMAND_ID, "uuuuu", manufacturerId, imageType, fileVersion,            \
+                                  currentTime, upgradeTime);
+
+/** @brief Command description for QuerySpecificFileRequest
+ *
+ * Command: QuerySpecificFileRequest
+ * @param requestNodeAddress IEEE_ADDRESS
+ * @param manufacturerId INT16U
+ * @param imageType INT16U
+ * @param fileVersion INT32U
+ * @param currentZigbeeStackVersion INT16U
+ */
+#define emberAfFillCommandOver                                                                                                     \
+    the Air BootloadingClusterQuerySpecificFileRequest(requestNodeAddress, manufacturerId, imageType, fileVersion,                 \
+                                                       currentZigbeeStackVersion)                                                  \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_QUERY_SPECIFIC_FILE_REQUEST_COMMAND_ID, "uuuuu", requestNodeAddress, manufacturerId,         \
+                                  imageType, fileVersion, currentZigbeeStackVersion);
+
+/** @brief Command description for QuerySpecificFileResponse
+ *
+ * Command: QuerySpecificFileResponse
+ * @param status Status
+ * @param manufacturerId INT16U
+ * @param imageType INT16U
+ * @param fileVersion INT32U
+ * @param imageSize INT32U
+ */
+#define emberAfFillCommandOver                                                                                                     \
+    the Air BootloadingClusterQuerySpecificFileResponse(status, manufacturerId, imageType, fileVersion, imageSize)                 \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_QUERY_SPECIFIC_FILE_RESPONSE_COMMAND_ID, "uuuuu", status, manufacturerId, imageType,         \
+                                  fileVersion, imageSize);
+
+/** @brief Command description for PowerProfileRequest
+ *
+ * Command: PowerProfileRequest
+ * @param powerProfileId INT8U
+ * @param totalProfileNum INT8U
+ * @param powerProfileId INT8U
+ * @param numOfTransferredPhases INT8U
+ * @param transferredPhases TransferredPhase []
+ * @param transferredPhasesLen int
+ */
+#define emberAfFillCommandPower                                                                                                    \
+    ProfileClusterPowerProfileRequest(powerProfileId, totalProfileNum, powerProfileId, numOfTransferredPhases, transferredPhases,  \
+                                      transferredPhasesLen)                                                                        \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_POWER_PROFILE_REQUEST_COMMAND_ID, "uuuub", powerProfileId, totalProfileNum, powerProfileId,  \
+                                  numOfTransferredPhases, transferredPhases, transferredPhasesLen);
+
+/** @brief Command description for PowerProfileStateRequest
+ *
+ * Command: PowerProfileStateRequest
+ * @param totalProfileNum INT8U
+ * @param powerProfileId INT8U
+ * @param numOfTransferredPhases INT8U
+ * @param transferredPhases TransferredPhase []
+ * @param transferredPhasesLen int
+ */
+#define emberAfFillCommandPower                                                                                                    \
+    ProfileClusterPowerProfileStateRequest(totalProfileNum, powerProfileId, numOfTransferredPhases, transferredPhases,             \
+                                           transferredPhasesLen)                                                                   \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_POWER_PROFILE_STATE_REQUEST_COMMAND_ID, "uuub", totalProfileNum, powerProfileId,             \
+                                  numOfTransferredPhases, transferredPhases, transferredPhasesLen);
+
+/** @brief Command description for GetPowerProfilePriceResponse
+ *
+ * Command: GetPowerProfilePriceResponse
+ * @param powerProfileId INT8U
+ * @param powerProfileCount INT8U
+ * @param currency INT16U
+ * @param powerProfileRecords PowerProfileRecord []
+ * @param powerProfileRecordsLen int
+ * @param price INT32U
+ * @param priceTrailingDigit INT8U
+ */
+#define emberAfFillCommandPower                                                                                                    \
+    ProfileClusterGetPowerProfilePriceResponse(powerProfileId, powerProfileCount, currency, powerProfileRecords,                   \
+                                               powerProfileRecordsLen, price, priceTrailingDigit)                                  \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_POWER_PROFILE_PRICE_RESPONSE_COMMAND_ID, "uuubuu", powerProfileId, powerProfileCount,    \
+                                  currency, powerProfileRecords, powerProfileRecordsLen, price, priceTrailingDigit);
+
+/** @brief Command description for GetOverallSchedulePriceResponse
+ *
+ * Command: GetOverallSchedulePriceResponse
+ * @param currency INT16U
+ * @param powerProfileId INT8U
+ * @param price INT32U
+ * @param priceTrailingDigit INT8U
+ */
+#define emberAfFillCommandPower                                                                                                    \
+    ProfileClusterGetOverallSchedulePriceResponse(currency, powerProfileId, price, priceTrailingDigit) emberAfFillExternalBuffer(  \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_GET_OVERALL_SCHEDULE_PRICE_RESPONSE_COMMAND_ID, "uuuu", currency, powerProfileId, price, priceTrailingDigit);
+
+/** @brief Command description for EnergyPhasesScheduleNotification
+ *
+ * Command: EnergyPhasesScheduleNotification
+ * @param powerProfileId INT8U
+ * @param powerProfileCount INT8U
+ * @param numOfScheduledPhases INT8U
+ * @param powerProfileRecords PowerProfileRecord []
+ * @param powerProfileRecordsLen int
+ * @param scheduledPhases ScheduledPhase []
+ * @param scheduledPhasesLen int
+ */
+#define emberAfFillCommandPower                                                                                                    \
+    ProfileClusterEnergyPhasesScheduleNotification(powerProfileId, powerProfileCount, numOfScheduledPhases, powerProfileRecords,   \
+                                                   powerProfileRecordsLen, scheduledPhases, scheduledPhasesLen)                    \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_ENERGY_PHASES_SCHEDULE_NOTIFICATION_COMMAND_ID, "uuubb", powerProfileId, powerProfileCount,  \
+                                  numOfScheduledPhases, powerProfileRecords, powerProfileRecordsLen, scheduledPhases,              \
+                                  scheduledPhasesLen);
+
+/** @brief Command description for GetOverallSchedulePrice
+ *
+ * Command: GetOverallSchedulePrice
+ * @param powerProfileId INT8U
+ * @param numOfScheduledPhases INT8U
+ * @param scheduledPhases ScheduledPhase []
+ * @param scheduledPhasesLen int
+ */
+#define emberAfFillCommandPower                                                                                                    \
+    ProfileClusterGetOverallSchedulePrice(powerProfileId, numOfScheduledPhases, scheduledPhases, scheduledPhasesLen)               \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_OVERALL_SCHEDULE_PRICE_COMMAND_ID, "uub", powerProfileId, numOfScheduledPhases,          \
+                                  scheduledPhases, scheduledPhasesLen);
+
+/** @brief Command description for PowerProfileScheduleConstraintsRequest
+ *
+ * Command: PowerProfileScheduleConstraintsRequest
+ * @param powerProfileId INT8U
+ * @param powerProfileId INT8U
+ */
+#define emberAfFillCommandPower                                                                                                    \
+    ProfileClusterPowerProfileScheduleConstraintsRequest(powerProfileId, powerProfileId) emberAfFillExternalBuffer(                \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_POWER_PROFILE_SCHEDULE_CONSTRAINTS_REQUEST_COMMAND_ID, "uu", powerProfileId, powerProfileId);
+
+/** @brief Command description for EnergyPhasesScheduleStateRequest
+ *
+ * Command: EnergyPhasesScheduleStateRequest
+ * @param powerProfileId INT8U
+ * @param powerProfileId INT8U
+ * @param numOfScheduledPhases INT8U
+ * @param scheduledPhases ScheduledPhase []
+ * @param scheduledPhasesLen int
+ */
+#define emberAfFillCommandPower                                                                                                    \
+    ProfileClusterEnergyPhasesScheduleStateRequest(powerProfileId, powerProfileId, numOfScheduledPhases, scheduledPhases,          \
+                                                   scheduledPhasesLen)                                                             \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_ENERGY_PHASES_SCHEDULE_STATE_REQUEST_COMMAND_ID, "uuub", powerProfileId, powerProfileId,     \
+                                  numOfScheduledPhases, scheduledPhases, scheduledPhasesLen);
+
+/** @brief Command description for GetPowerProfilePriceExtendedResponse
+ *
+ * Command: GetPowerProfilePriceExtendedResponse
+ * @param powerProfileId INT8U
+ * @param powerProfileId INT8U
+ * @param currency INT16U
+ * @param numOfScheduledPhases INT8U
+ * @param price INT32U
+ * @param scheduledPhases ScheduledPhase []
+ * @param scheduledPhasesLen int
+ * @param priceTrailingDigit INT8U
+ */
+#define emberAfFillCommandPower                                                                                                    \
+    ProfileClusterGetPowerProfilePriceExtendedResponse(powerProfileId, powerProfileId, currency, numOfScheduledPhases, price,      \
+                                                       scheduledPhases, scheduledPhasesLen, priceTrailingDigit)                    \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_POWER_PROFILE_PRICE_EXTENDED_RESPONSE_COMMAND_ID, "uuuuubu", powerProfileId,             \
+                                  powerProfileId, currency, numOfScheduledPhases, price, scheduledPhases, scheduledPhasesLen,      \
+                                  priceTrailingDigit);
+
+/** @brief Command description for PowerProfileScheduleConstraintsNotification
+ *
+ * Command: PowerProfileScheduleConstraintsNotification
+ * @param powerProfileId INT8U
+ * @param startAfter INT16U
+ * @param stopBefore INT16U
+ */
+#define emberAfFillCommandPower                                                                                                    \
+    ProfileClusterPowerProfileScheduleConstraintsNotification(powerProfileId, startAfter, stopBefore) emberAfFillExternalBuffer(   \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_POWER_PROFILE_SCHEDULE_CONSTRAINTS_NOTIFICATION_COMMAND_ID, "uuu", powerProfileId, startAfter, stopBefore);
+
+/** @brief Command description for PowerProfileScheduleConstraintsResponse
+ *
+ * Command: PowerProfileScheduleConstraintsResponse
+ * @param powerProfileId INT8U
+ * @param startAfter INT16U
+ * @param stopBefore INT16U
+ */
+#define emberAfFillCommandPower                                                                                                    \
+    ProfileClusterPowerProfileScheduleConstraintsResponse(powerProfileId, startAfter, stopBefore) emberAfFillExternalBuffer(       \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_POWER_PROFILE_SCHEDULE_CONSTRAINTS_RESPONSE_COMMAND_ID, "uuu", powerProfileId, startAfter, stopBefore);
+
+/** @brief Command description for GetPowerProfilePriceExtended
+ *
+ * Command: GetPowerProfilePriceExtended
+ * @param options BITMAP8
+ * @param powerProfileId INT8U
+ * @param powerProfileStartTime INT16U
+ */
+#define emberAfFillCommandPower                                                                                                    \
+    ProfileClusterGetPowerProfilePriceExtended(options, powerProfileId, powerProfileStartTime) emberAfFillExternalBuffer(          \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_GET_POWER_PROFILE_PRICE_EXTENDED_COMMAND_ID, "uuu", options, powerProfileId, powerProfileStartTime);
+
+/** @brief Command description for ExecutionOfACommand
+ *
+ * Command: ExecutionOfACommand
+ * @param commandId CommandIdentification
+ * @param applianceStatus ApplianceStatus
+ * @param remoteEnableFlagsAndDeviceStatus2 RemoteEnableFlagsAndDeviceStatus2
+ * @param applianceStatus2 INT24U
+ */
+#define emberAfFillCommandAppliance                                                                                                \
+    ControlClusterExecutionOfACommand(commandId, applianceStatus, remoteEnableFlagsAndDeviceStatus2, applianceStatus2)             \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_EXECUTION_OF_A_COMMAND_COMMAND_ID, "uuuu", commandId, applianceStatus,                       \
+                                  remoteEnableFlagsAndDeviceStatus2, applianceStatus2);
+
+/** @brief Command description for SignalState
+ *
+ * Command: SignalState
+ * @param applianceStatus ApplianceStatus
+ * @param remoteEnableFlagsAndDeviceStatus2 RemoteEnableFlagsAndDeviceStatus2
+ * @param applianceStatus2 INT24U
+ */
+#define emberAfFillCommandAppliance                                                                                                \
+    ControlClusterSignalState(applianceStatus, remoteEnableFlagsAndDeviceStatus2, applianceStatus2) emberAfFillExternalBuffer(     \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_SIGNAL_STATE_COMMAND_ID, "uuu", applianceStatus, remoteEnableFlagsAndDeviceStatus2, applianceStatus2);
+
+/** @brief Command description for WriteFunctions
+ *
+ * Command: WriteFunctions
+ * @param functionId INT16U
+ * @param functionDataType ENUM8
+ * @param functionData INT8U []
+ * @param functionDataLen int
+ */
+#define emberAfFillCommandAppliance                                                                                                \
+    ControlClusterWriteFunctions(functionId, functionDataType, functionData, functionDataLen) emberAfFillExternalBuffer(           \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_WRITE_FUNCTIONS_COMMAND_ID, "uub", functionId, functionDataType, functionData, functionDataLen);
+
+/** @brief Command description for OverloadPauseResume
+ *
+ * Command: OverloadPauseResume
+ */
+#define emberAfFillCommandAppliance                                                                                                \
+    ControlClusterOverloadPauseResume() emberAfFillExternalBuffer(mask,                                                            \
+                                                                                                                                   \
+                                                                  ZCL_OVERLOAD_PAUSE_RESUME_COMMAND_ID, "", );
+
+/** @brief Command description for OverloadPause
+ *
+ * Command: OverloadPause
+ */
+#define emberAfFillCommandAppliance                                                                                                \
+    ControlClusterOverloadPause() emberAfFillExternalBuffer(mask,                                                                  \
+                                                                                                                                   \
+                                                            ZCL_OVERLOAD_PAUSE_COMMAND_ID, "", );
+
+/** @brief Command description for OverloadWarning
+ *
+ * Command: OverloadWarning
+ * @param warningEvent WarningEvent
+ */
+#define emberAfFillCommandAppliance                                                                                                \
+    ControlClusterOverloadWarning(warningEvent) emberAfFillExternalBuffer(mask,                                                    \
+                                                                                                                                   \
+                                                                          ZCL_OVERLOAD_WARNING_COMMAND_ID, "u", warningEvent);
+
+/** @brief Command description for CheckIn
+ *
+ * Command: CheckIn
+ * @param startFastPolling BOOLEAN
+ * @param fastPollTimeout INT16U
+ */
+#define emberAfFillCommandPoll                                                                                                     \
+    ControlClusterCheckIn(startFastPolling, fastPollTimeout)                                                                       \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_CHECK_IN_COMMAND_ID, "uu", startFastPolling, fastPollTimeout);
+
+/** @brief Command description for FastPollStop
+ *
+ * Command: FastPollStop
+ */
+#define emberAfFillCommandPoll                                                                                                     \
+    ControlClusterFastPollStop() emberAfFillExternalBuffer(mask,                                                                   \
+                                                                                                                                   \
+                                                           ZCL_FAST_POLL_STOP_COMMAND_ID, "", );
+
+/** @brief Command description for SetLongPollInterval
+ *
+ * Command: SetLongPollInterval
+ * @param newLongPollInterval INT32U
+ */
+#define emberAfFillCommandPoll                                                                                                     \
+    ControlClusterSetLongPollInterval(newLongPollInterval)                                                                         \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_SET_LONG_POLL_INTERVAL_COMMAND_ID, "u", newLongPollInterval);
+
+/** @brief Command description for SetShortPollInterval
+ *
+ * Command: SetShortPollInterval
+ * @param newShortPollInterval INT16U
+ */
+#define emberAfFillCommandPoll                                                                                                     \
+    ControlClusterSetShortPollInterval(newShortPollInterval)                                                                       \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_SET_SHORT_POLL_INTERVAL_COMMAND_ID, "u", newShortPollInterval);
+
+/** @brief Command description for GpNotification
+ *
+ * Command: GpNotification
+ * @param options GpNotificationOption
+ * @param options GpNotificationResponseOption
+ * @param gpdSrcId INT32U
+ * @param gpdSrcId INT32U
+ * @param gpdIeee IEEE_ADDRESS
+ * @param gpdIeee IEEE_ADDRESS
+ * @param gpdEndpoint INT8U
+ * @param endpoint INT8U
+ * @param gpdSecurityFrameCounter INT32U
+ * @param gpdSecurityFrameCounter INT32U
+ * @param gpdCommandId INT8U
+ * @param gpdCommandPayload OCTET_STRING
+ * @param gppShortAddress INT16U
+ * @param gppDistance INT8U
+ */
+#define emberAfFillCommandGreen                                                                                                    \
+    PowerClusterGpNotification(options, options, gpdSrcId, gpdSrcId, gpdIeee, gpdIeee, gpdEndpoint, endpoint,                      \
+                               gpdSecurityFrameCounter, gpdSecurityFrameCounter, gpdCommandId, gpdCommandPayload, gppShortAddress, \
+                               gppDistance)                                                                                        \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GP_NOTIFICATION_COMMAND_ID, "uuuuuuuuuuuuuu", options, options, gpdSrcId, gpdSrcId, gpdIeee, \
+                                  gpdIeee, gpdEndpoint, endpoint, gpdSecurityFrameCounter, gpdSecurityFrameCounter, gpdCommandId,  \
+                                  gpdCommandPayload, gppShortAddress, gppDistance);
+
+/** @brief Command description for GpPairingSearch
+ *
+ * Command: GpPairingSearch
+ * @param options GpPairingSearchOption
+ * @param options GpPairingOption
+ * @param gpdSrcId INT32U
+ * @param gpdSrcId INT32U
+ * @param gpdIeee IEEE_ADDRESS
+ * @param gpdIeee IEEE_ADDRESS
+ * @param endpoint INT8U
+ * @param endpoint INT8U
+ * @param sinkIeeeAddress IEEE_ADDRESS
+ * @param sinkNwkAddress INT16U
+ * @param sinkGroupId INT16U
+ * @param deviceId GpDeviceId
+ * @param gpdSecurityFrameCounter INT32U
+ * @param gpdKey SECURITY_KEY
+ * @param assignedAlias INT16U
+ * @param groupcastRadius INT8U
+ */
+#define emberAfFillCommandGreen                                                                                                    \
+    PowerClusterGpPairingSearch(options, options, gpdSrcId, gpdSrcId, gpdIeee, gpdIeee, endpoint, endpoint, sinkIeeeAddress,       \
+                                sinkNwkAddress, sinkGroupId, deviceId, gpdSecurityFrameCounter, gpdKey, assignedAlias,             \
+                                groupcastRadius)                                                                                   \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GP_PAIRING_SEARCH_COMMAND_ID, "uuuuuuuuuuuuuuuu", options, options, gpdSrcId, gpdSrcId,      \
+                                  gpdIeee, gpdIeee, endpoint, endpoint, sinkIeeeAddress, sinkNwkAddress, sinkGroupId, deviceId,    \
+                                  gpdSecurityFrameCounter, gpdKey, assignedAlias, groupcastRadius);
+
+/** @brief Command description for GpProxyCommissioningMode
+ *
+ * Command: GpProxyCommissioningMode
+ * @param options GpProxyCommissioningModeOption
+ * @param commissioningWindow INT16U
+ * @param channel INT8U
+ */
+#define emberAfFillCommandGreen                                                                                                    \
+    PowerClusterGpProxyCommissioningMode(options, commissioningWindow, channel)                                                    \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GP_PROXY_COMMISSIONING_MODE_COMMAND_ID, "uuu", options, commissioningWindow, channel);
+
+/** @brief Command description for GpTunnelingStop
+ *
+ * Command: GpTunnelingStop
+ * @param options GpTunnelingStopOption
+ * @param gpdSrcId INT32U
+ * @param gpdIeee IEEE_ADDRESS
+ * @param endpoint INT8U
+ * @param gpdSecurityFrameCounter INT32U
+ * @param gppShortAddress INT16U
+ * @param gppDistance INT8S
+ */
+#define emberAfFillCommandGreen                                                                                                    \
+    PowerClusterGpTunnelingStop(options, gpdSrcId, gpdIeee, endpoint, gpdSecurityFrameCounter, gppShortAddress, gppDistance)       \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GP_TUNNELING_STOP_COMMAND_ID, "uuuuuuu", options, gpdSrcId, gpdIeee, endpoint,               \
+                                  gpdSecurityFrameCounter, gppShortAddress, gppDistance);
+
+/** @brief Command description for GpCommissioningNotification
+ *
+ * Command: GpCommissioningNotification
+ * @param options GpCommissioningNotificationOption
+ * @param gpdSrcId INT32U
+ * @param gpdIeee IEEE_ADDRESS
+ * @param endpoint INT8U
+ * @param gpdSecurityFrameCounter INT32U
+ * @param gpdCommandId INT8U
+ * @param gpdCommandPayload OCTET_STRING
+ * @param gppShortAddress INT16U
+ * @param gppLink INT8U
+ * @param mic INT32U
+ */
+#define emberAfFillCommandGreen                                                                                                    \
+    PowerClusterGpCommissioningNotification(options, gpdSrcId, gpdIeee, endpoint, gpdSecurityFrameCounter, gpdCommandId,           \
+                                            gpdCommandPayload, gppShortAddress, gppLink, mic)                                      \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GP_COMMISSIONING_NOTIFICATION_COMMAND_ID, "uuuuuuuuuu", options, gpdSrcId, gpdIeee,          \
+                                  endpoint, gpdSecurityFrameCounter, gpdCommandId, gpdCommandPayload, gppShortAddress, gppLink,    \
+                                  mic);
+
+/** @brief Command description for GpSinkCommissioningMode
+ *
+ * Command: GpSinkCommissioningMode
+ * @param options GpSinkCommissioningModeOptions
+ * @param gpmAddrForSecurity INT16U
+ * @param gpmAddrForPairing INT16U
+ * @param sinkEndpoint INT8U
+ */
+#define emberAfFillCommandGreen                                                                                                    \
+    PowerClusterGpSinkCommissioningMode(options, gpmAddrForSecurity, gpmAddrForPairing, sinkEndpoint) emberAfFillExternalBuffer(   \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_GP_SINK_COMMISSIONING_MODE_COMMAND_ID, "uuuu", options, gpmAddrForSecurity, gpmAddrForPairing, sinkEndpoint);
+
+/** @brief Command description for GpResponse
+ *
+ * Command: GpResponse
+ * @param options GpResponseOption
+ * @param tempMasterShortAddress INT16U
+ * @param tempMasterTxChannel BITMAP8
+ * @param gpdSrcId INT32U
+ * @param gpdIeee IEEE_ADDRESS
+ * @param endpoint INT8U
+ * @param gpdCommandId INT8U
+ * @param gpdCommandPayload OCTET_STRING
+ */
+#define emberAfFillCommandGreen                                                                                                    \
+    PowerClusterGpResponse(options, tempMasterShortAddress, tempMasterTxChannel, gpdSrcId, gpdIeee, endpoint, gpdCommandId,        \
+                           gpdCommandPayload)                                                                                      \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GP_RESPONSE_COMMAND_ID, "uuuuuuuu", options, tempMasterShortAddress, tempMasterTxChannel,    \
+                                  gpdSrcId, gpdIeee, endpoint, gpdCommandId, gpdCommandPayload);
+
+/** @brief Command description for GpTranslationTableUpdate
+ *
+ * Command: GpTranslationTableUpdate
+ * @param options GpTranslationTableUpdateOption
+ * @param gpdSrcId INT32U
+ * @param gpdIeee IEEE_ADDRESS
+ * @param endpoint INT8U
+ * @param translations GpTranslationTableUpdateTranslation []
+ * @param translationsLen int
+ */
+#define emberAfFillCommandGreen                                                                                                    \
+    PowerClusterGpTranslationTableUpdate(options, gpdSrcId, gpdIeee, endpoint, translations, translationsLen)                      \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GP_TRANSLATION_TABLE_UPDATE_COMMAND_ID, "uuuub", options, gpdSrcId, gpdIeee, endpoint,       \
+                                  translations, translationsLen);
+
+/** @brief Command description for GpTranslationTableRequest
+ *
+ * Command: GpTranslationTableRequest
+ * @param startIndex INT8U
+ * @param status GpTranslationTableResponseStatus
+ * @param options GpTranslationTableResponseOption
+ * @param totalNumberOfEntries INT8U
+ * @param startIndex INT8U
+ * @param entriesCount INT8U
+ * @param translationTableList INT8U []
+ * @param translationTableListLen int
+ */
+#define emberAfFillCommandGreen                                                                                                    \
+    PowerClusterGpTranslationTableRequest(startIndex, status, options, totalNumberOfEntries, startIndex, entriesCount,             \
+                                          translationTableList, translationTableListLen)                                           \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GP_TRANSLATION_TABLE_REQUEST_COMMAND_ID, "uuuuuub", startIndex, status, options,             \
+                                  totalNumberOfEntries, startIndex, entriesCount, translationTableList, translationTableListLen);
+
+/** @brief Command description for GpPairingConfiguration
+ *
+ * Command: GpPairingConfiguration
+ * @param actions GpPairingConfigurationActions
+ * @param options GpPairingConfigurationOption
+ * @param gpdSrcId INT32U
+ * @param gpdIeee IEEE_ADDRESS
+ * @param endpoint INT8U
+ * @param deviceId INT8U
+ * @param groupListCount INT8U
+ * @param groupList GpPairingConfigurationGroupList []
+ * @param groupListLen int
+ * @param gpdAssignedAlias INT16U
+ * @param groupcastRadius INT8U
+ * @param securityOptions INT8U
+ * @param gpdSecurityFrameCounter INT32U
+ * @param gpdSecurityKey SECURITY_KEY
+ * @param numberOfPairedEndpoints INT8U
+ * @param pairedEndpoints INT8U []
+ * @param pairedEndpointsLen int
+ * @param applicationInformation GpApplicationInformation
+ * @param manufacturerId INT16U
+ * @param modeId INT16U
+ * @param numberOfGpdCommands INT8U
+ * @param gpdCommandIdList INT8U []
+ * @param gpdCommandIdListLen int
+ * @param clusterIdListCount INT8U
+ * @param clusterListServer INT16U []
+ * @param clusterListServerLen int
+ * @param clusterListClient INT16U []
+ * @param clusterListClientLen int
+ * @param switchInformationLength INT8U
+ * @param switchConfiguration INT8U
+ * @param currentContactStatus INT8U
+ * @param totalNumberOfReports INT8U
+ * @param numberOfReports INT8U
+ * @param reportDescriptor INT8U []
+ * @param reportDescriptorLen int
+ */
+#define emberAfFillCommandGreen                                                                                                    \
+    PowerClusterGpPairingConfiguration(                                                                                            \
+        actions, options, gpdSrcId, gpdIeee, endpoint, deviceId, groupListCount, groupList, groupListLen, gpdAssignedAlias,        \
+        groupcastRadius, securityOptions, gpdSecurityFrameCounter, gpdSecurityKey, numberOfPairedEndpoints, pairedEndpoints,       \
+        pairedEndpointsLen, applicationInformation, manufacturerId, modeId, numberOfGpdCommands, gpdCommandIdList,                 \
+        gpdCommandIdListLen, clusterIdListCount, clusterListServer, clusterListServerLen, clusterListClient, clusterListClientLen, \
+        switchInformationLength, switchConfiguration, currentContactStatus, totalNumberOfReports, numberOfReports,                 \
+        reportDescriptor, reportDescriptorLen)                                                                                     \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GP_PAIRING_CONFIGURATION_COMMAND_ID, "uuuuuuubuuuuuubuuuububbuuuuub", actions, options,      \
+                                  gpdSrcId, gpdIeee, endpoint, deviceId, groupListCount, groupList, groupListLen,                  \
+                                  gpdAssignedAlias, groupcastRadius, securityOptions, gpdSecurityFrameCounter, gpdSecurityKey,     \
+                                  numberOfPairedEndpoints, pairedEndpoints, pairedEndpointsLen, applicationInformation,            \
+                                  manufacturerId, modeId, numberOfGpdCommands, gpdCommandIdList, gpdCommandIdListLen,              \
+                                  clusterIdListCount, clusterListServer, clusterListServerLen, clusterListClient,                  \
+                                  clusterListClientLen, switchInformationLength, switchConfiguration, currentContactStatus,        \
+                                  totalNumberOfReports, numberOfReports, reportDescriptor, reportDescriptorLen);
+
+/** @brief Command description for GpSinkTableRequest
+ *
+ * Command: GpSinkTableRequest
+ * @param options GpSinkTableRequestOptions
+ * @param status ENUM8
+ * @param gpdSrcId INT32U
+ * @param totalNumberofNonEmptySinkTableEntries INT8U
+ * @param gpdIeee INT64U
+ * @param startIndex INT8U
+ * @param endpoint INT8U
+ * @param sinkTableEntriesCount INT8U
+ * @param index INT8U
+ * @param sinkTableEntries INT8U []
+ * @param sinkTableEntriesLen int
+ */
+#define emberAfFillCommandGreen                                                                                                    \
+    PowerClusterGpSinkTableRequest(options, status, gpdSrcId, totalNumberofNonEmptySinkTableEntries, gpdIeee, startIndex,          \
+                                   endpoint, sinkTableEntriesCount, index, sinkTableEntries, sinkTableEntriesLen)                  \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GP_SINK_TABLE_REQUEST_COMMAND_ID, "uuuuuuuuub", options, status, gpdSrcId,                   \
+                                  totalNumberofNonEmptySinkTableEntries, gpdIeee, startIndex, endpoint, sinkTableEntriesCount,     \
+                                  index, sinkTableEntries, sinkTableEntriesLen);
+
+/** @brief Command description for GpProxyTableResponse
+ *
+ * Command: GpProxyTableResponse
+ * @param status GpProxyTableResponseStatus
+ * @param options GpProxyTableRequestOptions
+ * @param totalNumberOfNonEmptyProxyTableEntries INT8U
+ * @param gpdSrcId INT32U
+ * @param startIndex INT8U
+ * @param gpdIeee INT64U
+ * @param entriesCount INT8U
+ * @param endpoint INT8U
+ * @param proxyTableEntries INT8U []
+ * @param proxyTableEntriesLen int
+ * @param index INT8U
+ */
+#define emberAfFillCommandGreen                                                                                                    \
+    PowerClusterGpProxyTableResponse(status, options, totalNumberOfNonEmptyProxyTableEntries, gpdSrcId, startIndex, gpdIeee,       \
+                                     entriesCount, endpoint, proxyTableEntries, proxyTableEntriesLen, index)                       \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GP_PROXY_TABLE_RESPONSE_COMMAND_ID, "uuuuuuuubu", status, options,                           \
+                                  totalNumberOfNonEmptyProxyTableEntries, gpdSrcId, startIndex, gpdIeee, entriesCount, endpoint,   \
+                                  proxyTableEntries, proxyTableEntriesLen, index);
+
+/** @brief Command description for LockDoor
+ *
+ * Command: LockDoor
+ * @param PIN CHAR_STRING
+ * @param status INT8U
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterLockDoor(PIN, status) emberAfFillExternalBuffer(mask,                                                               \
+                                                                                                                                   \
+                                                               ZCL_LOCK_DOOR_COMMAND_ID, "uu", PIN, status);
+
+/** @brief Command description for UnlockDoor
+ *
+ * Command: UnlockDoor
+ * @param PIN CHAR_STRING
+ * @param status INT8U
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterUnlockDoor(PIN, status) emberAfFillExternalBuffer(mask,                                                             \
+                                                                                                                                   \
+                                                                 ZCL_UNLOCK_DOOR_COMMAND_ID, "uu", PIN, status);
+
+/** @brief Command description for Toggle
+ *
+ * Command: Toggle
+ * @param pin CHAR_STRING
+ * @param status INT8U
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterToggle(pin, status) emberAfFillExternalBuffer(mask,                                                                 \
+                                                                                                                                   \
+                                                             ZCL_TOGGLE_COMMAND_ID, "uu", pin, status);
+
+/** @brief Command description for UnlockWithTimeout
+ *
+ * Command: UnlockWithTimeout
+ * @param timeoutInSeconds INT16U
+ * @param status INT8U
+ * @param pin CHAR_STRING
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterUnlockWithTimeout(timeoutInSeconds, status, pin)                                                                    \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_UNLOCK_WITH_TIMEOUT_COMMAND_ID, "uuu", timeoutInSeconds, status, pin);
+
+/** @brief Command description for GetLogRecord
+ *
+ * Command: GetLogRecord
+ * @param logIndex INT16U
+ * @param logEntryId INT16U
+ * @param timestamp INT32U
+ * @param eventType ENUM8
+ * @param source INT8U
+ * @param eventIdOrAlarmCode INT8U
+ * @param userId INT16U
+ * @param pin CHAR_STRING
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterGetLogRecord(logIndex, logEntryId, timestamp, eventType, source, eventIdOrAlarmCode, userId, pin)                   \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_LOG_RECORD_COMMAND_ID, "uuuuuuuu", logIndex, logEntryId, timestamp, eventType, source,   \
+                                  eventIdOrAlarmCode, userId, pin);
+
+/** @brief Command description for SetPin
+ *
+ * Command: SetPin
+ * @param userId INT16U
+ * @param status DoorLockSetPinOrIdStatus
+ * @param userStatus DoorLockUserStatus
+ * @param userType DoorLockUserType
+ * @param pin CHAR_STRING
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterSetPin(userId, status, userStatus, userType, pin)                                                                   \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_SET_PIN_COMMAND_ID, "uuuuu", userId, status, userStatus, userType, pin);
+
+/** @brief Command description for GetPin
+ *
+ * Command: GetPin
+ * @param userId INT16U
+ * @param userId INT16U
+ * @param userStatus DoorLockUserStatus
+ * @param userType DoorLockUserType
+ * @param pin CHAR_STRING
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterGetPin(userId, userId, userStatus, userType, pin)                                                                   \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_PIN_COMMAND_ID, "uuuuu", userId, userId, userStatus, userType, pin);
+
+/** @brief Command description for ClearPin
+ *
+ * Command: ClearPin
+ * @param userId INT16U
+ * @param status INT8U
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterClearPin(userId, status) emberAfFillExternalBuffer(mask,                                                            \
+                                                                                                                                   \
+                                                                  ZCL_CLEAR_PIN_COMMAND_ID, "uu", userId, status);
+
+/** @brief Command description for ClearAllPins
+ *
+ * Command: ClearAllPins
+ * @param status INT8U
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterClearAllPins(status) emberAfFillExternalBuffer(mask,                                                                \
+                                                                                                                                   \
+                                                              ZCL_CLEAR_ALL_PINS_COMMAND_ID, "u", status);
+
+/** @brief Command description for SetUserStatus
+ *
+ * Command: SetUserStatus
+ * @param userId INT16U
+ * @param status INT8U
+ * @param userStatus INT8U
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterSetUserStatus(userId, status, userStatus)                                                                           \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_SET_USER_STATUS_COMMAND_ID, "uuu", userId, status, userStatus);
+
+/** @brief Command description for GetUserStatus
+ *
+ * Command: GetUserStatus
+ * @param userId INT16U
+ * @param userId INT16U
+ * @param status INT8U
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterGetUserStatus(userId, userId, status)                                                                               \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_USER_STATUS_COMMAND_ID, "uuu", userId, userId, status);
+
+/** @brief Command description for SetWeekdaySchedule
+ *
+ * Command: SetWeekdaySchedule
+ * @param scheduleId INT8U
+ * @param status INT8U
+ * @param userId INT16U
+ * @param daysMask DoorLockDayOfWeek
+ * @param startHour INT8U
+ * @param startMinute INT8U
+ * @param endHour INT8U
+ * @param endMinute INT8U
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterSetWeekdaySchedule(scheduleId, status, userId, daysMask, startHour, startMinute, endHour, endMinute)                \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_SET_WEEKDAY_SCHEDULE_COMMAND_ID, "uuuuuuuu", scheduleId, status, userId, daysMask,           \
+                                  startHour, startMinute, endHour, endMinute);
+
+/** @brief Command description for GetWeekdaySchedule
+ *
+ * Command: GetWeekdaySchedule
+ * @param scheduleId INT8U
+ * @param scheduleId INT8U
+ * @param userId INT16U
+ * @param userId INT16U
+ * @param status INT8U
+ * @param daysMask INT8U
+ * @param startHour INT8U
+ * @param startMinute INT8U
+ * @param endHour INT8U
+ * @param endMinute INT8U
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterGetWeekdaySchedule(scheduleId, scheduleId, userId, userId, status, daysMask, startHour, startMinute, endHour,       \
+                                  endMinute)                                                                                       \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_WEEKDAY_SCHEDULE_COMMAND_ID, "uuuuuuuuuu", scheduleId, scheduleId, userId, userId,       \
+                                  status, daysMask, startHour, startMinute, endHour, endMinute);
+
+/** @brief Command description for ClearWeekdaySchedule
+ *
+ * Command: ClearWeekdaySchedule
+ * @param scheduleId INT8U
+ * @param status INT8U
+ * @param userId INT16U
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterClearWeekdaySchedule(scheduleId, status, userId)                                                                    \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_CLEAR_WEEKDAY_SCHEDULE_COMMAND_ID, "uuu", scheduleId, status, userId);
+
+/** @brief Command description for SetYeardaySchedule
+ *
+ * Command: SetYeardaySchedule
+ * @param scheduleId INT8U
+ * @param status INT8U
+ * @param userId INT16U
+ * @param localStartTime INT32U
+ * @param localEndTime INT32U
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterSetYeardaySchedule(scheduleId, status, userId, localStartTime, localEndTime) emberAfFillExternalBuffer(             \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_SET_YEARDAY_SCHEDULE_COMMAND_ID, "uuuuu", scheduleId, status, userId, localStartTime, localEndTime);
+
+/** @brief Command description for GetYeardaySchedule
+ *
+ * Command: GetYeardaySchedule
+ * @param scheduleId INT8U
+ * @param scheduleId INT8U
+ * @param userId INT16U
+ * @param userId INT16U
+ * @param status INT8U
+ * @param localStartTime INT32U
+ * @param localEndTime INT32U
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterGetYeardaySchedule(scheduleId, scheduleId, userId, userId, status, localStartTime, localEndTime)                    \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_YEARDAY_SCHEDULE_COMMAND_ID, "uuuuuuu", scheduleId, scheduleId, userId, userId, status,  \
+                                  localStartTime, localEndTime);
+
+/** @brief Command description for ClearYeardaySchedule
+ *
+ * Command: ClearYeardaySchedule
+ * @param scheduleId INT8U
+ * @param status INT8U
+ * @param userId INT16U
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterClearYeardaySchedule(scheduleId, status, userId)                                                                    \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_CLEAR_YEARDAY_SCHEDULE_COMMAND_ID, "uuu", scheduleId, status, userId);
+
+/** @brief Command description for SetHolidaySchedule
+ *
+ * Command: SetHolidaySchedule
+ * @param scheduleId INT8U
+ * @param status INT8U
+ * @param localStartTime INT32U
+ * @param localEndTime INT32U
+ * @param operatingModeDuringHoliday ENUM8
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterSetHolidaySchedule(scheduleId, status, localStartTime, localEndTime, operatingModeDuringHoliday)                    \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_SET_HOLIDAY_SCHEDULE_COMMAND_ID, "uuuuu", scheduleId, status, localStartTime, localEndTime,  \
+                                  operatingModeDuringHoliday);
+
+/** @brief Command description for GetHolidaySchedule
+ *
+ * Command: GetHolidaySchedule
+ * @param scheduleId INT8U
+ * @param scheduleId INT8U
+ * @param status INT8U
+ * @param localStartTime INT32U
+ * @param localEndTime INT32U
+ * @param operatingModeDuringHoliday ENUM8
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterGetHolidaySchedule(scheduleId, scheduleId, status, localStartTime, localEndTime, operatingModeDuringHoliday)        \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_HOLIDAY_SCHEDULE_COMMAND_ID, "uuuuuu", scheduleId, scheduleId, status, localStartTime,   \
+                                  localEndTime, operatingModeDuringHoliday);
+
+/** @brief Command description for ClearHolidaySchedule
+ *
+ * Command: ClearHolidaySchedule
+ * @param scheduleId INT8U
+ * @param status INT8U
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterClearHolidaySchedule(scheduleId, status)                                                                            \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_CLEAR_HOLIDAY_SCHEDULE_COMMAND_ID, "uu", scheduleId, status);
+
+/** @brief Command description for SetUserType
+ *
+ * Command: SetUserType
+ * @param userId INT16U
+ * @param status INT8U
+ * @param userType DoorLockUserType
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterSetUserType(userId, status, userType)                                                                               \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_SET_USER_TYPE_COMMAND_ID, "uuu", userId, status, userType);
+
+/** @brief Command description for GetUserType
+ *
+ * Command: GetUserType
+ * @param userId INT16U
+ * @param userId INT16U
+ * @param userType DoorLockUserType
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterGetUserType(userId, userId, userType)                                                                               \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_USER_TYPE_COMMAND_ID, "uuu", userId, userId, userType);
+
+/** @brief Command description for SetRfid
+ *
+ * Command: SetRfid
+ * @param userId INT16U
+ * @param status DoorLockSetPinOrIdStatus
+ * @param userStatus DoorLockUserStatus
+ * @param userType DoorLockUserType
+ * @param id CHAR_STRING
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterSetRfid(userId, status, userStatus, userType, id)                                                                   \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_SET_RFID_COMMAND_ID, "uuuuu", userId, status, userStatus, userType, id);
+
+/** @brief Command description for GetRfid
+ *
+ * Command: GetRfid
+ * @param userId INT16U
+ * @param userId INT16U
+ * @param userStatus DoorLockUserStatus
+ * @param userType DoorLockUserType
+ * @param rfid CHAR_STRING
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterGetRfid(userId, userId, userStatus, userType, rfid)                                                                 \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_RFID_COMMAND_ID, "uuuuu", userId, userId, userStatus, userType, rfid);
+
+/** @brief Command description for ClearRfid
+ *
+ * Command: ClearRfid
+ * @param userId INT16U
+ * @param status INT8U
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterClearRfid(userId, status) emberAfFillExternalBuffer(mask,                                                           \
+                                                                                                                                   \
+                                                                   ZCL_CLEAR_RFID_COMMAND_ID, "uu", userId, status);
+
+/** @brief Command description for ClearAllRfids
+ *
+ * Command: ClearAllRfids
+ * @param status INT8U
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterClearAllRfids(status) emberAfFillExternalBuffer(mask,                                                               \
+                                                                                                                                   \
+                                                               ZCL_CLEAR_ALL_RFIDS_COMMAND_ID, "u", status);
+
+/** @brief Command description for OperationEventNotification
+ *
+ * Command: OperationEventNotification
+ * @param source INT8U
+ * @param eventCode DoorLockOperationEventCode
+ * @param userId INT16U
+ * @param pin CHAR_STRING
+ * @param timeStamp INT32U
+ * @param data CHAR_STRING
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterOperationEventNotification(source, eventCode, userId, pin, timeStamp, data) emberAfFillExternalBuffer(              \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_OPERATION_EVENT_NOTIFICATION_COMMAND_ID, "uuuuuu", source, eventCode, userId, pin, timeStamp, data);
+
+/** @brief Command description for ProgrammingEventNotification
+ *
+ * Command: ProgrammingEventNotification
+ * @param source INT8U
+ * @param eventCode DoorLockProgrammingEventCode
+ * @param userId INT16U
+ * @param pin CHAR_STRING
+ * @param userType DoorLockUserType
+ * @param userStatus DoorLockUserStatus
+ * @param timeStamp INT32U
+ * @param data CHAR_STRING
+ */
+#define emberAfFillCommandDoor                                                                                                     \
+    LockClusterProgrammingEventNotification(source, eventCode, userId, pin, userType, userStatus, timeStamp, data)                 \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_PROGRAMMING_EVENT_NOTIFICATION_COMMAND_ID, "uuuuuuuu", source, eventCode, userId, pin,       \
+                                  userType, userStatus, timeStamp, data);
+
+/** @brief Command description for WindowCoveringUpOpen
+ *
+ * Command: WindowCoveringUpOpen
+ */
+#define emberAfFillCommandWindow                                                                                                   \
+    CoveringClusterWindowCoveringUpOpen() emberAfFillExternalBuffer(mask,                                                          \
+                                                                                                                                   \
+                                                                    ZCL_WINDOW_COVERING_UP_OPEN_COMMAND_ID, "", );
+
+/** @brief Command description for WindowCoveringDownClose
+ *
+ * Command: WindowCoveringDownClose
+ */
+#define emberAfFillCommandWindow                                                                                                   \
+    CoveringClusterWindowCoveringDownClose() emberAfFillExternalBuffer(mask,                                                       \
+                                                                                                                                   \
+                                                                       ZCL_WINDOW_COVERING_DOWN_CLOSE_COMMAND_ID, "", );
+
+/** @brief Command description for WindowCoveringStop
+ *
+ * Command: WindowCoveringStop
+ */
+#define emberAfFillCommandWindow                                                                                                   \
+    CoveringClusterWindowCoveringStop() emberAfFillExternalBuffer(mask,                                                            \
+                                                                                                                                   \
+                                                                  ZCL_WINDOW_COVERING_STOP_COMMAND_ID, "", );
+
+/** @brief Command description for WindowCoveringGoToLiftValue
+ *
+ * Command: WindowCoveringGoToLiftValue
+ * @param liftValue INT16U
+ */
+#define emberAfFillCommandWindow                                                                                                   \
+    CoveringClusterWindowCoveringGoToLiftValue(liftValue)                                                                          \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_WINDOW_COVERING_GO_TO_LIFT_VALUE_COMMAND_ID, "u", liftValue);
+
+/** @brief Command description for WindowCoveringGoToLiftPercentage
+ *
+ * Command: WindowCoveringGoToLiftPercentage
+ * @param percentageLiftValue INT8U
+ */
+#define emberAfFillCommandWindow                                                                                                   \
+    CoveringClusterWindowCoveringGoToLiftPercentage(percentageLiftValue)                                                           \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_WINDOW_COVERING_GO_TO_LIFT_PERCENTAGE_COMMAND_ID, "u", percentageLiftValue);
+
+/** @brief Command description for WindowCoveringGoToTiltValue
+ *
+ * Command: WindowCoveringGoToTiltValue
+ * @param tiltValue INT16U
+ */
+#define emberAfFillCommandWindow                                                                                                   \
+    CoveringClusterWindowCoveringGoToTiltValue(tiltValue)                                                                          \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_WINDOW_COVERING_GO_TO_TILT_VALUE_COMMAND_ID, "u", tiltValue);
+
+/** @brief Command description for WindowCoveringGoToTiltPercentage
+ *
+ * Command: WindowCoveringGoToTiltPercentage
+ * @param percentageTiltValue INT8U
+ */
+#define emberAfFillCommandWindow                                                                                                   \
+    CoveringClusterWindowCoveringGoToTiltPercentage(percentageTiltValue)                                                           \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_WINDOW_COVERING_GO_TO_TILT_PERCENTAGE_COMMAND_ID, "u", percentageTiltValue);
+
+/** @brief Command description for BarrierControlGoToPercent
+ *
+ * Command: BarrierControlGoToPercent
+ * @param percentOpen INT8U
+ */
+#define emberAfFillCommandBarrier                                                                                                  \
+    ControlClusterBarrierControlGoToPercent(percentOpen)                                                                           \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_BARRIER_CONTROL_GO_TO_PERCENT_COMMAND_ID, "u", percentOpen);
+
+/** @brief Command description for BarrierControlStop
+ *
+ * Command: BarrierControlStop
+ */
+#define emberAfFillCommandBarrier                                                                                                  \
+    ControlClusterBarrierControlStop() emberAfFillExternalBuffer(mask,                                                             \
+                                                                                                                                   \
+                                                                 ZCL_BARRIER_CONTROL_STOP_COMMAND_ID, "", );
+
+/** @brief Command description for SetpointRaiseLower
+ *
+ * Command: SetpointRaiseLower
+ * @param mode SetpointAdjustMode
+ * @param numberOfTransitionsForSequence ENUM8
+ * @param amount INT8S
+ * @param dayOfWeekForSequence DayOfWeek
+ * @param modeForSequence ModeForSequence
+ * @param payload INT8U []
+ * @param payloadLen int
+ */
+#define emberAfFillCommandThermostatClusterSetpointRaiseLower(mode, numberOfTransitionsForSequence, amount, dayOfWeekForSequence,  \
+                                                              modeForSequence, payload, payloadLen)                                \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_SETPOINT_RAISE_LOWER_COMMAND_ID, "uuuuub", mode, numberOfTransitionsForSequence, amount,         \
+                              dayOfWeekForSequence, modeForSequence, payload, payloadLen);
+
+/** @brief Command description for SetWeeklySchedule
+ *
+ * Command: SetWeeklySchedule
+ * @param numberOfTransitionsForSequence ENUM8
+ * @param timeOfDay INT16U
+ * @param dayOfWeekForSequence DayOfWeek
+ * @param relayStatus BITMAP16
+ * @param modeForSequence ModeForSequence
+ * @param localTemperature INT16S
+ * @param payload INT8U []
+ * @param payloadLen int
+ * @param humidityInPercentage INT8U
+ * @param setpoint INT16S
+ * @param unreadEntries INT16U
+ */
+#define emberAfFillCommandThermostatClusterSetWeeklySchedule(numberOfTransitionsForSequence, timeOfDay, dayOfWeekForSequence,      \
+                                                             relayStatus, modeForSequence, localTemperature, payload, payloadLen,  \
+                                                             humidityInPercentage, setpoint, unreadEntries)                        \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_SET_WEEKLY_SCHEDULE_COMMAND_ID, "uuuuuubuuu", numberOfTransitionsForSequence, timeOfDay,         \
+                              dayOfWeekForSequence, relayStatus, modeForSequence, localTemperature, payload, payloadLen,           \
+                              humidityInPercentage, setpoint, unreadEntries);
+
+/** @brief Command description for GetWeeklySchedule
+ *
+ * Command: GetWeeklySchedule
+ * @param daysToReturn DayOfWeek
+ * @param modeToReturn ModeForSequence
+ */
+#define emberAfFillCommandThermostatClusterGetWeeklySchedule(daysToReturn, modeToReturn)                                           \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_GET_WEEKLY_SCHEDULE_COMMAND_ID, "uu", daysToReturn, modeToReturn);
+
+/** @brief Command description for ClearWeeklySchedule
+ *
+ * Command: ClearWeeklySchedule
+ */
+#define emberAfFillCommandThermostatClusterClearWeeklySchedule()                                                                   \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_CLEAR_WEEKLY_SCHEDULE_COMMAND_ID, "", );
+
+/** @brief Command description for GetRelayStatusLog
+ *
+ * Command: GetRelayStatusLog
+ */
+#define emberAfFillCommandThermostatClusterGetRelayStatusLog()                                                                     \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_GET_RELAY_STATUS_LOG_COMMAND_ID, "", );
+
+/** @brief Command description for MoveToHue
+ *
+ * Command: MoveToHue
+ * @param hue INT8U
+ * @param direction HueDirection
+ * @param transitionTime INT16U
+ * @param optionsMask BITMAP8
+ * @param optionsOverride BITMAP8
+ */
+#define emberAfFillCommandColor                                                                                                    \
+    ControlClusterMoveToHue(hue, direction, transitionTime, optionsMask, optionsOverride) emberAfFillExternalBuffer(               \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_MOVE_TO_HUE_COMMAND_ID, "uuuuu", hue, direction, transitionTime, optionsMask, optionsOverride);
+
+/** @brief Command description for MoveHue
+ *
+ * Command: MoveHue
+ * @param moveMode HueMoveMode
+ * @param rate INT8U
+ * @param optionsMask BITMAP8
+ * @param optionsOverride BITMAP8
+ */
+#define emberAfFillCommandColor                                                                                                    \
+    ControlClusterMoveHue(moveMode, rate, optionsMask, optionsOverride)                                                            \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_MOVE_HUE_COMMAND_ID, "uuuu", moveMode, rate, optionsMask, optionsOverride);
+
+/** @brief Command description for StepHue
+ *
+ * Command: StepHue
+ * @param stepMode HueStepMode
+ * @param stepSize INT8U
+ * @param transitionTime INT8U
+ * @param optionsMask BITMAP8
+ * @param optionsOverride BITMAP8
+ */
+#define emberAfFillCommandColor                                                                                                    \
+    ControlClusterStepHue(stepMode, stepSize, transitionTime, optionsMask, optionsOverride) emberAfFillExternalBuffer(             \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_STEP_HUE_COMMAND_ID, "uuuuu", stepMode, stepSize, transitionTime, optionsMask, optionsOverride);
+
+/** @brief Command description for MoveToSaturation
+ *
+ * Command: MoveToSaturation
+ * @param saturation INT8U
+ * @param transitionTime INT16U
+ * @param optionsMask BITMAP8
+ * @param optionsOverride BITMAP8
+ */
+#define emberAfFillCommandColor                                                                                                    \
+    ControlClusterMoveToSaturation(saturation, transitionTime, optionsMask, optionsOverride) emberAfFillExternalBuffer(            \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_MOVE_TO_SATURATION_COMMAND_ID, "uuuu", saturation, transitionTime, optionsMask, optionsOverride);
+
+/** @brief Command description for MoveSaturation
+ *
+ * Command: MoveSaturation
+ * @param moveMode SaturationMoveMode
+ * @param rate INT8U
+ * @param optionsMask BITMAP8
+ * @param optionsOverride BITMAP8
+ */
+#define emberAfFillCommandColor                                                                                                    \
+    ControlClusterMoveSaturation(moveMode, rate, optionsMask, optionsOverride)                                                     \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_MOVE_SATURATION_COMMAND_ID, "uuuu", moveMode, rate, optionsMask, optionsOverride);
+
+/** @brief Command description for StepSaturation
+ *
+ * Command: StepSaturation
+ * @param stepMode SaturationStepMode
+ * @param stepSize INT8U
+ * @param transitionTime INT8U
+ * @param optionsMask BITMAP8
+ * @param optionsOverride BITMAP8
+ */
+#define emberAfFillCommandColor                                                                                                    \
+    ControlClusterStepSaturation(stepMode, stepSize, transitionTime, optionsMask, optionsOverride) emberAfFillExternalBuffer(      \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_STEP_SATURATION_COMMAND_ID, "uuuuu", stepMode, stepSize, transitionTime, optionsMask, optionsOverride);
+
+/** @brief Command description for MoveToHueAndSaturation
+ *
+ * Command: MoveToHueAndSaturation
+ * @param hue INT8U
+ * @param saturation INT8U
+ * @param transitionTime INT16U
+ * @param optionsMask BITMAP8
+ * @param optionsOverride BITMAP8
+ */
+#define emberAfFillCommandColor                                                                                                    \
+    ControlClusterMoveToHueAndSaturation(hue, saturation, transitionTime, optionsMask, optionsOverride) emberAfFillExternalBuffer( \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_MOVE_TO_HUE_AND_SATURATION_COMMAND_ID, "uuuuu", hue, saturation, transitionTime, optionsMask, optionsOverride);
+
+/** @brief Command description for MoveToColor
+ *
+ * Command: MoveToColor
+ * @param colorX INT16U
+ * @param colorY INT16U
+ * @param transitionTime INT16U
+ * @param optionsMask BITMAP8
+ * @param optionsOverride BITMAP8
+ */
+#define emberAfFillCommandColor                                                                                                    \
+    ControlClusterMoveToColor(colorX, colorY, transitionTime, optionsMask, optionsOverride) emberAfFillExternalBuffer(             \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_MOVE_TO_COLOR_COMMAND_ID, "uuuuu", colorX, colorY, transitionTime, optionsMask, optionsOverride);
+
+/** @brief Command description for MoveColor
+ *
+ * Command: MoveColor
+ * @param rateX INT16S
+ * @param rateY INT16S
+ * @param optionsMask BITMAP8
+ * @param optionsOverride BITMAP8
+ */
+#define emberAfFillCommandColor                                                                                                    \
+    ControlClusterMoveColor(rateX, rateY, optionsMask, optionsOverride)                                                            \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_MOVE_COLOR_COMMAND_ID, "uuuu", rateX, rateY, optionsMask, optionsOverride);
+
+/** @brief Command description for StepColor
+ *
+ * Command: StepColor
+ * @param stepX INT16S
+ * @param stepY INT16S
+ * @param transitionTime INT16U
+ * @param optionsMask BITMAP8
+ * @param optionsOverride BITMAP8
+ */
+#define emberAfFillCommandColor                                                                                                    \
+    ControlClusterStepColor(stepX, stepY, transitionTime, optionsMask, optionsOverride)                                            \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_STEP_COLOR_COMMAND_ID, "uuuuu", stepX, stepY, transitionTime, optionsMask, optionsOverride);
+
+/** @brief Command description for MoveToColorTemperature
+ *
+ * Command: MoveToColorTemperature
+ * @param colorTemperature INT16U
+ * @param transitionTime INT16U
+ * @param optionsMask BITMAP8
+ * @param optionsOverride BITMAP8
+ */
+#define emberAfFillCommandColor                                                                                                    \
+    ControlClusterMoveToColorTemperature(colorTemperature, transitionTime, optionsMask, optionsOverride)                           \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_MOVE_TO_COLOR_TEMPERATURE_COMMAND_ID, "uuuu", colorTemperature, transitionTime, optionsMask, \
+                                  optionsOverride);
+
+/** @brief Command description for EnhancedMoveToHue
+ *
+ * Command: EnhancedMoveToHue
+ * @param enhancedHue INT16U
+ * @param direction HueDirection
+ * @param transitionTime INT16U
+ */
+#define emberAfFillCommandColor                                                                                                    \
+    ControlClusterEnhancedMoveToHue(enhancedHue, direction, transitionTime)                                                        \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_ENHANCED_MOVE_TO_HUE_COMMAND_ID, "uuu", enhancedHue, direction, transitionTime);
+
+/** @brief Command description for EnhancedMoveHue
+ *
+ * Command: EnhancedMoveHue
+ * @param moveMode HueMoveMode
+ * @param rate INT16U
+ */
+#define emberAfFillCommandColor                                                                                                    \
+    ControlClusterEnhancedMoveHue(moveMode, rate)                                                                                  \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_ENHANCED_MOVE_HUE_COMMAND_ID, "uu", moveMode, rate);
+
+/** @brief Command description for EnhancedStepHue
+ *
+ * Command: EnhancedStepHue
+ * @param stepMode HueStepMode
+ * @param stepSize INT16U
+ * @param transitionTime INT16U
+ */
+#define emberAfFillCommandColor                                                                                                    \
+    ControlClusterEnhancedStepHue(stepMode, stepSize, transitionTime)                                                              \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_ENHANCED_STEP_HUE_COMMAND_ID, "uuu", stepMode, stepSize, transitionTime);
+
+/** @brief Command description for EnhancedMoveToHueAndSaturation
+ *
+ * Command: EnhancedMoveToHueAndSaturation
+ * @param enhancedHue INT16U
+ * @param saturation INT8U
+ * @param transitionTime INT16U
+ */
+#define emberAfFillCommandColor                                                                                                    \
+    ControlClusterEnhancedMoveToHueAndSaturation(enhancedHue, saturation, transitionTime) emberAfFillExternalBuffer(               \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_ENHANCED_MOVE_TO_HUE_AND_SATURATION_COMMAND_ID, "uuu", enhancedHue, saturation, transitionTime);
+
+/** @brief Command description for ColorLoopSet
+ *
+ * Command: ColorLoopSet
+ * @param updateFlags ColorLoopUpdateFlags
+ * @param action ColorLoopAction
+ * @param direction ColorLoopDirection
+ * @param time INT16U
+ * @param startHue INT16U
+ */
+#define emberAfFillCommandColor                                                                                                    \
+    ControlClusterColorLoopSet(updateFlags, action, direction, time, startHue)                                                     \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_COLOR_LOOP_SET_COMMAND_ID, "uuuuu", updateFlags, action, direction, time, startHue);
+
+/** @brief Command description for StopMoveStep
+ *
+ * Command: StopMoveStep
+ * @param optionsMask BITMAP8
+ * @param optionsOverride BITMAP8
+ */
+#define emberAfFillCommandColor                                                                                                    \
+    ControlClusterStopMoveStep(optionsMask, optionsOverride)                                                                       \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_STOP_MOVE_STEP_COMMAND_ID, "uu", optionsMask, optionsOverride);
+
+/** @brief Command description for MoveColorTemperature
+ *
+ * Command: MoveColorTemperature
+ * @param moveMode HueMoveMode
+ * @param rate INT16U
+ * @param colorTemperatureMinimum INT16U
+ * @param colorTemperatureMaximum INT16U
+ * @param optionsMask BITMAP8
+ * @param optionsOverride BITMAP8
+ */
+#define emberAfFillCommandColor                                                                                                    \
+    ControlClusterMoveColorTemperature(moveMode, rate, colorTemperatureMinimum, colorTemperatureMaximum, optionsMask,              \
+                                       optionsOverride)                                                                            \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_MOVE_COLOR_TEMPERATURE_COMMAND_ID, "uuuuuu", moveMode, rate, colorTemperatureMinimum,        \
+                                  colorTemperatureMaximum, optionsMask, optionsOverride);
+
+/** @brief Command description for StepColorTemperature
+ *
+ * Command: StepColorTemperature
+ * @param stepMode HueStepMode
+ * @param stepSize INT16U
+ * @param transitionTime INT16U
+ * @param colorTemperatureMinimum INT16U
+ * @param colorTemperatureMaximum INT16U
+ * @param optionsMask BITMAP8
+ * @param optionsOverride BITMAP8
+ */
+#define emberAfFillCommandColor                                                                                                    \
+    ControlClusterStepColorTemperature(stepMode, stepSize, transitionTime, colorTemperatureMinimum, colorTemperatureMaximum,       \
+                                       optionsMask, optionsOverride)                                                               \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_STEP_COLOR_TEMPERATURE_COMMAND_ID, "uuuuuuu", stepMode, stepSize, transitionTime,            \
+                                  colorTemperatureMinimum, colorTemperatureMaximum, optionsMask, optionsOverride);
+
+/** @brief Command description for ZoneEnrollResponse
+ *
+ * Command: ZoneEnrollResponse
+ * @param enrollResponseCode IasEnrollResponseCode
+ * @param zoneStatus IasZoneStatus
+ * @param zoneId INT8U
+ * @param extendedStatus BITMAP8
+ * @param zoneId INT8U
+ * @param delay INT16U
+ */
+#define emberAfFillCommandIAS                                                                                                      \
+    ZoneClusterZoneEnrollResponse(enrollResponseCode, zoneStatus, zoneId, extendedStatus, zoneId, delay)                           \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_ZONE_ENROLL_RESPONSE_COMMAND_ID, "uuuuuu", enrollResponseCode, zoneStatus, zoneId,           \
+                                  extendedStatus, zoneId, delay);
+
+/** @brief Command description for InitiateNormalOperationMode
+ *
+ * Command: InitiateNormalOperationMode
+ * @param zoneType IasZoneType
+ * @param manufacturerCode INT16U
+ */
+#define emberAfFillCommandIAS                                                                                                      \
+    ZoneClusterInitiateNormalOperationMode(zoneType, manufacturerCode)                                                             \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_INITIATE_NORMAL_OPERATION_MODE_COMMAND_ID, "uu", zoneType, manufacturerCode);
+
+/** @brief Command description for InitiateNormalOperationModeResponse
+ *
+ * Command: InitiateNormalOperationModeResponse
+ * @param testModeDuration INT8U
+ * @param currentZoneSensitivityLevel INT8U
+ */
+#define emberAfFillCommandIAS                                                                                                      \
+    ZoneClusterInitiateNormalOperationModeResponse(testModeDuration, currentZoneSensitivityLevel) emberAfFillExternalBuffer(       \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_INITIATE_NORMAL_OPERATION_MODE_RESPONSE_COMMAND_ID, "uu", testModeDuration, currentZoneSensitivityLevel);
+
+/** @brief Command description for InitiateTestModeResponse
+ *
+ * Command: InitiateTestModeResponse
+ */
+#define emberAfFillCommandIAS                                                                                                      \
+    ZoneClusterInitiateTestModeResponse() emberAfFillExternalBuffer(mask,                                                          \
+                                                                                                                                   \
+                                                                    ZCL_INITIATE_TEST_MODE_RESPONSE_COMMAND_ID, "", );
+
+/** @brief Command description for Arm
+ *
+ * Command: Arm
+ * @param armMode IasAceArmMode
+ * @param armNotification IasAceArmNotification
+ * @param armDisarmCode CHAR_STRING
+ * @param zoneId INT8U
+ */
+#define emberAfFillCommandIAS                                                                                                      \
+    ACEClusterArm(armMode, armNotification, armDisarmCode, zoneId)                                                                 \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_ARM_COMMAND_ID, "uuuu", armMode, armNotification, armDisarmCode, zoneId);
+
+/** @brief Command description for Bypass
+ *
+ * Command: Bypass
+ * @param numberOfZones INT8U
+ * @param section0 BITMAP16
+ * @param zoneIds INT8U []
+ * @param zoneIdsLen int
+ * @param section1 BITMAP16
+ * @param armDisarmCode CHAR_STRING
+ * @param section2 BITMAP16
+ * @param section3 BITMAP16
+ * @param section4 BITMAP16
+ * @param section5 BITMAP16
+ * @param section6 BITMAP16
+ * @param section7 BITMAP16
+ * @param section8 BITMAP16
+ * @param section9 BITMAP16
+ * @param section10 BITMAP16
+ * @param section11 BITMAP16
+ * @param section12 BITMAP16
+ * @param section13 BITMAP16
+ * @param section14 BITMAP16
+ * @param section15 BITMAP16
+ */
+#define emberAfFillCommandIAS                                                                                                      \
+    ACEClusterBypass(numberOfZones, section0, zoneIds, zoneIdsLen, section1, armDisarmCode, section2, section3, section4,          \
+                     section5, section6, section7, section8, section9, section10, section11, section12, section13, section14,      \
+                     section15)                                                                                                    \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_BYPASS_COMMAND_ID, "uubuuuuuuuuuuuuuuuu", numberOfZones, section0, zoneIds, zoneIdsLen,      \
+                                  section1, armDisarmCode, section2, section3, section4, section5, section6, section7, section8,   \
+                                  section9, section10, section11, section12, section13, section14, section15);
+
+/** @brief Command description for Emergency
+ *
+ * Command: Emergency
+ * @param zoneId INT8U
+ * @param zoneType IasZoneType
+ * @param ieeeAddress IEEE_ADDRESS
+ * @param zoneLabel CHAR_STRING
+ */
+#define emberAfFillCommandIAS                                                                                                      \
+    ACEClusterEmergency(zoneId, zoneType, ieeeAddress, zoneLabel)                                                                  \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_EMERGENCY_COMMAND_ID, "uuuu", zoneId, zoneType, ieeeAddress, zoneLabel);
+
+/** @brief Command description for Fire
+ *
+ * Command: Fire
+ * @param zoneId INT8U
+ * @param zoneStatus ENUM16
+ * @param audibleNotification IasAceAudibleNotification
+ * @param zoneLabel CHAR_STRING
+ */
+#define emberAfFillCommandIAS                                                                                                      \
+    ACEClusterFire(zoneId, zoneStatus, audibleNotification, zoneLabel)                                                             \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_FIRE_COMMAND_ID, "uuuu", zoneId, zoneStatus, audibleNotification, zoneLabel);
+
+/** @brief Command description for Panic
+ *
+ * Command: Panic
+ * @param panelStatus IasAcePanelStatus
+ * @param secondsRemaining INT8U
+ * @param audibleNotification IasAceAudibleNotification
+ * @param alarmStatus IasAceAlarmStatus
+ */
+#define emberAfFillCommandIAS                                                                                                      \
+    ACEClusterPanic(panelStatus, secondsRemaining, audibleNotification, alarmStatus)                                               \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_PANIC_COMMAND_ID, "uuuu", panelStatus, secondsRemaining, audibleNotification, alarmStatus);
+
+/** @brief Command description for GetZoneIdMap
+ *
+ * Command: GetZoneIdMap
+ * @param panelStatus IasAcePanelStatus
+ * @param secondsRemaining INT8U
+ * @param audibleNotification IasAceAudibleNotification
+ * @param alarmStatus IasAceAlarmStatus
+ */
+#define emberAfFillCommandIAS                                                                                                      \
+    ACEClusterGetZoneIdMap(panelStatus, secondsRemaining, audibleNotification, alarmStatus) emberAfFillExternalBuffer(             \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_GET_ZONE_ID_MAP_COMMAND_ID, "uuuu", panelStatus, secondsRemaining, audibleNotification, alarmStatus);
+
+/** @brief Command description for GetZoneInformation
+ *
+ * Command: GetZoneInformation
+ * @param zoneId INT8U
+ * @param numberOfZones INT8U
+ * @param zoneIds INT8U []
+ * @param zoneIdsLen int
+ */
+#define emberAfFillCommandIAS                                                                                                      \
+    ACEClusterGetZoneInformation(zoneId, numberOfZones, zoneIds, zoneIdsLen)                                                       \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_ZONE_INFORMATION_COMMAND_ID, "uub", zoneId, numberOfZones, zoneIds, zoneIdsLen);
+
+/** @brief Command description for GetPanelStatus
+ *
+ * Command: GetPanelStatus
+ * @param numberOfZones INT8U
+ * @param bypassResult IasAceBypassResult []
+ * @param bypassResultLen int
+ */
+#define emberAfFillCommandIAS                                                                                                      \
+    ACEClusterGetPanelStatus(numberOfZones, bypassResult, bypassResultLen)                                                         \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_PANEL_STATUS_COMMAND_ID, "ub", numberOfZones, bypassResult, bypassResultLen);
+
+/** @brief Command description for GetBypassedZoneList
+ *
+ * Command: GetBypassedZoneList
+ * @param zoneStatusComplete BOOLEAN
+ * @param numberOfZones INT8U
+ * @param zoneStatusResult IasAceZoneStatusResult []
+ * @param zoneStatusResultLen int
+ */
+#define emberAfFillCommandIAS                                                                                                      \
+    ACEClusterGetBypassedZoneList(zoneStatusComplete, numberOfZones, zoneStatusResult, zoneStatusResultLen)                        \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_BYPASSED_ZONE_LIST_COMMAND_ID, "uub", zoneStatusComplete, numberOfZones,                 \
+                                  zoneStatusResult, zoneStatusResultLen);
+
+/** @brief Command description for GetZoneStatus
+ *
+ * Command: GetZoneStatus
+ * @param startingZoneId INT8U
+ * @param maxNumberOfZoneIds INT8U
+ * @param zoneStatusMaskFlag BOOLEAN
+ * @param zoneStatusMask BITMAP16
+ */
+#define emberAfFillCommandIAS                                                                                                      \
+    ACEClusterGetZoneStatus(startingZoneId, maxNumberOfZoneIds, zoneStatusMaskFlag, zoneStatusMask) emberAfFillExternalBuffer(     \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_GET_ZONE_STATUS_COMMAND_ID, "uuuu", startingZoneId, maxNumberOfZoneIds, zoneStatusMaskFlag, zoneStatusMask);
+
+/** @brief Command description for StartWarning
+ *
+ * Command: StartWarning
+ * @param warningInfo WarningInfo
+ * @param warningDuration INT16U
+ * @param strobeDutyCycle INT8U
+ * @param strobeLevel ENUM8
+ */
+#define emberAfFillCommandIAS                                                                                                      \
+    WDClusterStartWarning(warningInfo, warningDuration, strobeDutyCycle, strobeLevel) emberAfFillExternalBuffer(                   \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_START_WARNING_COMMAND_ID, "uuuu", warningInfo, warningDuration, strobeDutyCycle, strobeLevel);
+
+/** @brief Command description for Squawk
+ *
+ * Command: Squawk
+ * @param squawkInfo SquawkInfo
+ */
+#define emberAfFillCommandIAS                                                                                                      \
+    WDClusterSquawk(squawkInfo) emberAfFillExternalBuffer(mask,                                                                    \
+                                                                                                                                   \
+                                                          ZCL_SQUAWK_COMMAND_ID, "u", squawkInfo);
+
+/** @brief Command description for MatchProtocolAddress
+ *
+ * Command: MatchProtocolAddress
+ * @param protocolAddress OCTET_STRING
+ * @param deviceIeeeAddress IEEE_ADDRESS
+ * @param protocolAddress OCTET_STRING
+ */
+#define emberAfFillCommandGeneric                                                                                                  \
+    TunnelClusterMatchProtocolAddress(protocolAddress, deviceIeeeAddress, protocolAddress) emberAfFillExternalBuffer(              \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_MATCH_PROTOCOL_ADDRESS_COMMAND_ID, "uuu", protocolAddress, deviceIeeeAddress, protocolAddress);
+
+/** @brief Command description for AdvertiseProtocolAddress
+ *
+ * Command: AdvertiseProtocolAddress
+ * @param protocolAddress OCTET_STRING
+ */
+#define emberAfFillCommandGeneric                                                                                                  \
+    TunnelClusterAdvertiseProtocolAddress(protocolAddress)                                                                         \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_ADVERTISE_PROTOCOL_ADDRESS_COMMAND_ID, "u", protocolAddress);
+
+/** @brief Command description for TransferNpdu
+ *
+ * Command: TransferNpdu
+ * @param npdu DATA8 []
+ * @param npduLen int
+ */
+#define emberAfFillCommandBACnet                                                                                                   \
+    Protocol TunnelClusterTransferNpdu(npdu, npduLen) emberAfFillExternalBuffer(mask,                                              \
+                                                                                                                                   \
+                                                                                ZCL_TRANSFER_NPDU_COMMAND_ID, "b", npdu, npduLen);
+
+/** @brief Command description for TransferAPDU
+ *
+ * Command: TransferAPDU
+ * @param apdu OCTET_STRING
+ */
+#define emberAfFillCommand11073                                                                                                    \
+    Protocol TunnelClusterTransferAPDU(apdu) emberAfFillExternalBuffer(mask,                                                       \
+                                                                                                                                   \
+                                                                       ZCL_TRANSFER_APDU_COMMAND_ID, "u", apdu);
+
+/** @brief Command description for ConnectRequest
+ *
+ * Command: ConnectRequest
+ * @param connectControl 11073ConnectRequestConnectControl
+ * @param idleTimeout INT16U
+ * @param managerTarget IEEE_ADDRESS
+ * @param managerEndpoint INT8U
+ */
+#define emberAfFillCommand11073                                                                                                    \
+    Protocol TunnelClusterConnectRequest(connectControl, idleTimeout, managerTarget, managerEndpoint) emberAfFillExternalBuffer(   \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_CONNECT_REQUEST_COMMAND_ID, "uuuu", connectControl, idleTimeout, managerTarget, managerEndpoint);
+
+/** @brief Command description for DisconnectRequest
+ *
+ * Command: DisconnectRequest
+ * @param managerIEEEAddress IEEE_ADDRESS
+ */
+#define emberAfFillCommand11073                                                                                                    \
+    Protocol TunnelClusterDisconnectRequest(managerIEEEAddress)                                                                    \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_DISCONNECT_REQUEST_COMMAND_ID, "u", managerIEEEAddress);
+
+/** @brief Command description for ConnectStatusNotification
+ *
+ * Command: ConnectStatusNotification
+ * @param connectStatus 11073TunnelConnectionStatus
+ */
+#define emberAfFillCommand11073                                                                                                    \
+    Protocol TunnelClusterConnectStatusNotification(connectStatus)                                                                 \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_CONNECT_STATUS_NOTIFICATION_COMMAND_ID, "u", connectStatus);
+
+/** @brief Command description for TransferApdu
+ *
+ * Command: TransferApdu
+ * @param apdu OCTET_STRING
+ */
+#define emberAfFillCommandISO                                                                                                      \
+    7816 Protocol TunnelClusterTransferApdu(apdu) emberAfFillExternalBuffer(mask,                                                  \
+                                                                                                                                   \
+                                                                            ZCL_TRANSFER_APDU_COMMAND_ID, "u", apdu);
+
+/** @brief Command description for InsertSmartCard
+ *
+ * Command: InsertSmartCard
+ */
+#define emberAfFillCommandISO                                                                                                      \
+    7816 Protocol TunnelClusterInsertSmartCard() emberAfFillExternalBuffer(mask,                                                   \
+                                                                                                                                   \
+                                                                           ZCL_INSERT_SMART_CARD_COMMAND_ID, "", );
+
+/** @brief Command description for ExtractSmartCard
+ *
+ * Command: ExtractSmartCard
+ */
+#define emberAfFillCommandISO                                                                                                      \
+    7816 Protocol TunnelClusterExtractSmartCard() emberAfFillExternalBuffer(mask,                                                  \
+                                                                                                                                   \
+                                                                            ZCL_EXTRACT_SMART_CARD_COMMAND_ID, "", );
+
+/** @brief Command description for PublishPrice
+ *
+ * Command: PublishPrice
+ * @param providerId INT32U
+ * @param commandOptions AmiCommandOptions
+ * @param rateLabel OCTET_STRING
+ * @param issuerEventId INT32U
+ * @param currentTime UTC_TIME
+ * @param unitOfMeasure AmiUnitOfMeasure
+ * @param currency INT16U
+ * @param priceTrailingDigitAndPriceTier PriceTrailingDigitAndPriceTier
+ * @param numberOfPriceTiersAndRegisterTier PriceNumberOfPriceTiersAndRegisterTier
+ * @param startTime UTC_TIME
+ * @param durationInMinutes INT16U
+ * @param price INT32U
+ * @param priceRatio INT8U
+ * @param generationPrice INT32U
+ * @param generationPriceRatio INT8U
+ * @param alternateCostDelivered INT32U
+ * @param alternateCostUnit AlternateCostUnit
+ * @param alternateCostTrailingDigit AlternateCostTrailingDigit
+ * @param numberOfBlockThresholds INT8U
+ * @param priceControl PriceControlMask
+ * @param numberOfGenerationTiers INT8U
+ * @param generationTier GenerationTier
+ * @param extendedNumberOfPriceTiers ExtendedNumberOfPriceTiers
+ * @param extendedPriceTier ExtendedPriceTier
+ * @param extendedRegisterTier ExtendedRegisterTier
+ */
+#define emberAfFillCommandPriceClusterPublishPrice(                                                                                \
+    providerId, commandOptions, rateLabel, issuerEventId, currentTime, unitOfMeasure, currency, priceTrailingDigitAndPriceTier,    \
+    numberOfPriceTiersAndRegisterTier, startTime, durationInMinutes, price, priceRatio, generationPrice, generationPriceRatio,     \
+    alternateCostDelivered, alternateCostUnit, alternateCostTrailingDigit, numberOfBlockThresholds, priceControl,                  \
+    numberOfGenerationTiers, generationTier, extendedNumberOfPriceTiers, extendedPriceTier, extendedRegisterTier)                  \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_PUBLISH_PRICE_COMMAND_ID, "uuuuuuuuuuuuuuuuuuuuuuuuu", providerId, commandOptions, rateLabel,    \
+                              issuerEventId, currentTime, unitOfMeasure, currency, priceTrailingDigitAndPriceTier,                 \
+                              numberOfPriceTiersAndRegisterTier, startTime, durationInMinutes, price, priceRatio, generationPrice, \
+                              generationPriceRatio, alternateCostDelivered, alternateCostUnit, alternateCostTrailingDigit,         \
+                              numberOfBlockThresholds, priceControl, numberOfGenerationTiers, generationTier,                      \
+                              extendedNumberOfPriceTiers, extendedPriceTier, extendedRegisterTier);
+
+/** @brief Command description for PublishBlockPeriod
+ *
+ * Command: PublishBlockPeriod
+ * @param providerId INT32U
+ * @param startTime UTC_TIME
+ * @param issuerEventId INT32U
+ * @param numberOfEvents INT8U
+ * @param blockPeriodStartTime UTC_TIME
+ * @param blockPeriodDuration INT24U
+ * @param numberOfPriceTiersAndNumberOfBlockThresholds BITMAP8
+ * @param blockPeriodControl BlockPeriodControl
+ * @param blockPeriodDurationType BlockPeriodDurationType
+ * @param tariffType TariffType
+ * @param tariffResolutionPeriod TariffResolutionPeriod
+ */
+#define emberAfFillCommandPriceClusterPublishBlockPeriod(                                                                          \
+    providerId, startTime, issuerEventId, numberOfEvents, blockPeriodStartTime, blockPeriodDuration,                               \
+    numberOfPriceTiersAndNumberOfBlockThresholds, blockPeriodControl, blockPeriodDurationType, tariffType, tariffResolutionPeriod) \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_PUBLISH_BLOCK_PERIOD_COMMAND_ID, "uuuuuuuuuuu", providerId, startTime, issuerEventId,            \
+                              numberOfEvents, blockPeriodStartTime, blockPeriodDuration,                                           \
+                              numberOfPriceTiersAndNumberOfBlockThresholds, blockPeriodControl, blockPeriodDurationType,           \
+                              tariffType, tariffResolutionPeriod);
+
+/** @brief Command description for PublishConversionFactor
+ *
+ * Command: PublishConversionFactor
+ * @param issuerEventId INT32U
+ * @param providerId INT32U
+ * @param startTime UTC_TIME
+ * @param issuerEventId INT32U
+ * @param conversionFactor INT32U
+ * @param priceAckTime UTC_TIME
+ * @param conversionFactorTrailingDigit ConversionFactorTrailingDigit
+ * @param control PriceControlMask
+ */
+#define emberAfFillCommandPriceClusterPublishConversionFactor(                                                                     \
+    issuerEventId, providerId, startTime, issuerEventId, conversionFactor, priceAckTime, conversionFactorTrailingDigit, control)   \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_PUBLISH_CONVERSION_FACTOR_COMMAND_ID, "uuuuuuuu", issuerEventId, providerId, startTime,          \
+                              issuerEventId, conversionFactor, priceAckTime, conversionFactorTrailingDigit, control);
+
+/** @brief Command description for PublishCalorificValue
+ *
+ * Command: PublishCalorificValue
+ * @param issuerEventId INT32U
+ * @param startTime UTC_TIME
+ * @param startTime UTC_TIME
+ * @param numberOfEvents INT8U
+ * @param calorificValue INT32U
+ * @param tariffType TariffType
+ * @param calorificValueUnit CalorificValueUnit
+ * @param calorificValueTrailingDigit CalorificValueTrailingDigit
+ */
+#define emberAfFillCommandPriceClusterPublishCalorificValue(issuerEventId, startTime, startTime, numberOfEvents, calorificValue,   \
+                                                            tariffType, calorificValueUnit, calorificValueTrailingDigit)           \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_PUBLISH_CALORIFIC_VALUE_COMMAND_ID, "uuuuuuuu", issuerEventId, startTime, startTime,             \
+                              numberOfEvents, calorificValue, tariffType, calorificValueUnit, calorificValueTrailingDigit);
+
+/** @brief Command description for PublishTariffInformation
+ *
+ * Command: PublishTariffInformation
+ * @param providerId INT32U
+ * @param earliestStartTime UTC_TIME
+ * @param issuerEventId INT32U
+ * @param minIssuerEventId INT32U
+ * @param issuerTariffId INT32U
+ * @param numberOfCommands INT8U
+ * @param startTime UTC_TIME
+ * @param tariffTypeChargingScheme TariffTypeChargingScheme
+ * @param tariffLabel OCTET_STRING
+ * @param numberOfPriceTiersInUse INT8U
+ * @param numberOfBlockThresholdsInUse INT8U
+ * @param unitOfMeasure AmiUnitOfMeasure
+ * @param currency INT16U
+ * @param priceTrailingDigit PriceTrailingDigit
+ * @param standingCharge INT32U
+ * @param tierBlockMode TierBlockMode
+ * @param blockThresholdMultiplier INT24U
+ * @param blockThresholdDivisor INT24U
+ */
+#define emberAfFillCommandPriceClusterPublishTariffInformation(                                                                    \
+    providerId, earliestStartTime, issuerEventId, minIssuerEventId, issuerTariffId, numberOfCommands, startTime,                   \
+    tariffTypeChargingScheme, tariffLabel, numberOfPriceTiersInUse, numberOfBlockThresholdsInUse, unitOfMeasure, currency,         \
+    priceTrailingDigit, standingCharge, tierBlockMode, blockThresholdMultiplier, blockThresholdDivisor)                            \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_PUBLISH_TARIFF_INFORMATION_COMMAND_ID, "uuuuuuuuuuuuuuuuuu", providerId, earliestStartTime,      \
+                              issuerEventId, minIssuerEventId, issuerTariffId, numberOfCommands, startTime,                        \
+                              tariffTypeChargingScheme, tariffLabel, numberOfPriceTiersInUse, numberOfBlockThresholdsInUse,        \
+                              unitOfMeasure, currency, priceTrailingDigit, standingCharge, tierBlockMode,                          \
+                              blockThresholdMultiplier, blockThresholdDivisor);
+
+/** @brief Command description for PublishPriceMatrix
+ *
+ * Command: PublishPriceMatrix
+ * @param providerId INT32U
+ * @param earliestStartTime UTC_TIME
+ * @param issuerEventId INT32U
+ * @param minIssuerEventId INT32U
+ * @param startTime UTC_TIME
+ * @param numberOfCommands INT8U
+ * @param issuerTariffId INT32U
+ * @param commandIndex INT8U
+ * @param numberOfCommands INT8U
+ * @param subPayloadControl PriceMatrixSubPayloadControl
+ * @param payload PriceMatrixSubPayload []
+ * @param payloadLen int
+ */
+#define emberAfFillCommandPriceClusterPublishPriceMatrix(providerId, earliestStartTime, issuerEventId, minIssuerEventId,           \
+                                                         startTime, numberOfCommands, issuerTariffId, commandIndex,                \
+                                                         numberOfCommands, subPayloadControl, payload, payloadLen)                 \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_PUBLISH_PRICE_MATRIX_COMMAND_ID, "uuuuuuuuuub", providerId, earliestStartTime, issuerEventId,    \
+                              minIssuerEventId, startTime, numberOfCommands, issuerTariffId, commandIndex, numberOfCommands,       \
+                              subPayloadControl, payload, payloadLen);
+
+/** @brief Command description for PublishBlockThresholds
+ *
+ * Command: PublishBlockThresholds
+ * @param providerId INT32U
+ * @param earliestStartTime UTC_TIME
+ * @param issuerEventId INT32U
+ * @param minIssuerEventId INT32U
+ * @param startTime UTC_TIME
+ * @param numberOfCommands INT8U
+ * @param issuerTariffId INT32U
+ * @param tariffType TariffType
+ * @param commandIndex INT8U
+ * @param numberOfCommands INT8U
+ * @param subPayloadControl BlockThresholdSubPayloadControl
+ * @param payload BlockThresholdSubPayload []
+ * @param payloadLen int
+ */
+#define emberAfFillCommandPriceClusterPublishBlockThresholds(                                                                      \
+    providerId, earliestStartTime, issuerEventId, minIssuerEventId, startTime, numberOfCommands, issuerTariffId, tariffType,       \
+    commandIndex, numberOfCommands, subPayloadControl, payload, payloadLen)                                                        \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_PUBLISH_BLOCK_THRESHOLDS_COMMAND_ID, "uuuuuuuuuuub", providerId, earliestStartTime,              \
+                              issuerEventId, minIssuerEventId, startTime, numberOfCommands, issuerTariffId, tariffType,            \
+                              commandIndex, numberOfCommands, subPayloadControl, payload, payloadLen);
+
+/** @brief Command description for PublishCO2Value
+ *
+ * Command: PublishCO2Value
+ * @param providerId INT32U
+ * @param issuerTariffId INT32U
+ * @param issuerEventId INT32U
+ * @param startTime UTC_TIME
+ * @param tariffType TariffType
+ * @param cO2Value INT32U
+ * @param cO2ValueUnit CO2Unit
+ * @param cO2ValueTrailingDigit CO2TrailingDigit
+ */
+#define emberAfFillCommandPriceClusterPublishCO2Value(providerId, issuerTariffId, issuerEventId, startTime, tariffType, cO2Value,  \
+                                                      cO2ValueUnit, cO2ValueTrailingDigit)                                         \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_PUBLISH_CO2_VALUE_COMMAND_ID, "uuuuuuuu", providerId, issuerTariffId, issuerEventId, startTime,  \
+                              tariffType, cO2Value, cO2ValueUnit, cO2ValueTrailingDigit);
+
+/** @brief Command description for PublishTierLabels
+ *
+ * Command: PublishTierLabels
+ * @param providerId INT32U
+ * @param issuerTariffId INT32U
+ * @param issuerEventId INT32U
+ * @param issuerTariffId INT32U
+ * @param commandIndex INT8U
+ * @param numberOfCommands INT8U
+ * @param numberOfLabels INT8U
+ * @param tierLabelsPayload INT8U []
+ * @param tierLabelsPayloadLen int
+ */
+#define emberAfFillCommandPriceClusterPublishTierLabels(providerId, issuerTariffId, issuerEventId, issuerTariffId, commandIndex,   \
+                                                        numberOfCommands, numberOfLabels, tierLabelsPayload, tierLabelsPayloadLen) \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_PUBLISH_TIER_LABELS_COMMAND_ID, "uuuuuuub", providerId, issuerTariffId, issuerEventId,           \
+                              issuerTariffId, commandIndex, numberOfCommands, numberOfLabels, tierLabelsPayload,                   \
+                              tierLabelsPayloadLen);
+
+/** @brief Command description for PublishBillingPeriod
+ *
+ * Command: PublishBillingPeriod
+ * @param providerId INT32U
+ * @param earliestStartTime UTC_TIME
+ * @param issuerEventId INT32U
+ * @param minIssuerEventId INT32U
+ * @param billingPeriodStartTime UTC_TIME
+ * @param numberOfCommands INT8U
+ * @param billingPeriodDuration BillingPeriodDuration
+ * @param tariffType TariffType
+ * @param billingPeriodDurationType BillingPeriodDurationType
+ * @param tariffType TariffType
+ */
+#define emberAfFillCommandPriceClusterPublishBillingPeriod(providerId, earliestStartTime, issuerEventId, minIssuerEventId,         \
+                                                           billingPeriodStartTime, numberOfCommands, billingPeriodDuration,        \
+                                                           tariffType, billingPeriodDurationType, tariffType)                      \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_PUBLISH_BILLING_PERIOD_COMMAND_ID, "uuuuuuuuuu", providerId, earliestStartTime, issuerEventId,   \
+                              minIssuerEventId, billingPeriodStartTime, numberOfCommands, billingPeriodDuration, tariffType,       \
+                              billingPeriodDurationType, tariffType);
+
+/** @brief Command description for PublishConsolidatedBill
+ *
+ * Command: PublishConsolidatedBill
+ * @param providerId INT32U
+ * @param issuerTariffId INT32U
+ * @param issuerEventId INT32U
+ * @param billingPeriodStartTime UTC_TIME
+ * @param billingPeriodDuration BillingPeriodDuration
+ * @param billingPeriodDurationType BillingPeriodDurationType
+ * @param tariffType TariffType
+ * @param consolidatedBill INT32U
+ * @param currency INT16U
+ * @param billTrailingDigit BillTrailingDigit
+ */
+#define emberAfFillCommandPriceClusterPublishConsolidatedBill(providerId, issuerTariffId, issuerEventId, billingPeriodStartTime,   \
+                                                              billingPeriodDuration, billingPeriodDurationType, tariffType,        \
+                                                              consolidatedBill, currency, billTrailingDigit)                       \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_PUBLISH_CONSOLIDATED_BILL_COMMAND_ID, "uuuuuuuuuu", providerId, issuerTariffId, issuerEventId,   \
+                              billingPeriodStartTime, billingPeriodDuration, billingPeriodDurationType, tariffType,                \
+                              consolidatedBill, currency, billTrailingDigit);
+
+/** @brief Command description for PublishCppEvent
+ *
+ * Command: PublishCppEvent
+ * @param providerId INT32U
+ * @param earliestStartTime UTC_TIME
+ * @param issuerEventId INT32U
+ * @param minIssuerEventId INT32U
+ * @param startTime UTC_TIME
+ * @param numberOfCommands INT8U
+ * @param durationInMinutes INT16U
+ * @param tariffType TariffType
+ * @param tariffType TariffType
+ * @param cppPriceTier CppPriceTier
+ * @param cppAuth PublishCppEventCppAuth
+ */
+#define emberAfFillCommandPriceClusterPublishCppEvent(providerId, earliestStartTime, issuerEventId, minIssuerEventId, startTime,   \
+                                                      numberOfCommands, durationInMinutes, tariffType, tariffType, cppPriceTier,   \
+                                                      cppAuth)                                                                     \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_PUBLISH_CPP_EVENT_COMMAND_ID, "uuuuuuuuuuu", providerId, earliestStartTime, issuerEventId,       \
+                              minIssuerEventId, startTime, numberOfCommands, durationInMinutes, tariffType, tariffType,            \
+                              cppPriceTier, cppAuth);
+
+/** @brief Command description for PublishCreditPayment
+ *
+ * Command: PublishCreditPayment
+ * @param providerId INT32U
+ * @param earliestStartTime UTC_TIME
+ * @param issuerEventId INT32U
+ * @param minIssuerEventId INT32U
+ * @param creditPaymentDueDate UTC_TIME
+ * @param numberOfCommands INT8U
+ * @param creditPaymentOverDueAmount INT32U
+ * @param tariffType TariffType
+ * @param creditPaymentStatus CreditPaymentStatus
+ * @param creditPayment INT32U
+ * @param creditPaymentDate UTC_TIME
+ * @param creditPaymentRef OCTET_STRING
+ */
+#define emberAfFillCommandPriceClusterPublishCreditPayment(                                                                        \
+    providerId, earliestStartTime, issuerEventId, minIssuerEventId, creditPaymentDueDate, numberOfCommands,                        \
+    creditPaymentOverDueAmount, tariffType, creditPaymentStatus, creditPayment, creditPaymentDate, creditPaymentRef)               \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_PUBLISH_CREDIT_PAYMENT_COMMAND_ID, "uuuuuuuuuuuu", providerId, earliestStartTime, issuerEventId, \
+                              minIssuerEventId, creditPaymentDueDate, numberOfCommands, creditPaymentOverDueAmount, tariffType,    \
+                              creditPaymentStatus, creditPayment, creditPaymentDate, creditPaymentRef);
+
+/** @brief Command description for PublishCurrencyConversion
+ *
+ * Command: PublishCurrencyConversion
+ * @param providerId INT32U
+ * @param issuerEventId INT32U
+ * @param issuerEventId INT32U
+ * @param cppAuth CppEventResponseCppAuth
+ * @param startTime UTC_TIME
+ * @param oldCurrency INT16U
+ * @param newCurrency INT16U
+ * @param conversionFactor INT32U
+ * @param conversionFactorTrailingDigit ConversionFactorTrailingDigit
+ * @param currencyChangeControlFlags CurrencyChangeControl
+ */
+#define emberAfFillCommandPriceClusterPublishCurrencyConversion(providerId, issuerEventId, issuerEventId, cppAuth, startTime,      \
+                                                                oldCurrency, newCurrency, conversionFactor,                        \
+                                                                conversionFactorTrailingDigit, currencyChangeControlFlags)         \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_PUBLISH_CURRENCY_CONVERSION_COMMAND_ID, "uuuuuuuuuu", providerId, issuerEventId, issuerEventId,  \
+                              cppAuth, startTime, oldCurrency, newCurrency, conversionFactor, conversionFactorTrailingDigit,       \
+                              currencyChangeControlFlags);
+
+/** @brief Command description for CancelTariff
+ *
+ * Command: CancelTariff
+ * @param providerId INT32U
+ * @param latestEndTime UTC_TIME
+ * @param issuerTariffId INT32U
+ * @param numberOfRecords INT8U
+ * @param tariffType TariffType
+ */
+#define emberAfFillCommandPriceClusterCancelTariff(providerId, latestEndTime, issuerTariffId, numberOfRecords, tariffType)         \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_CANCEL_TARIFF_COMMAND_ID, "uuuuu", providerId, latestEndTime, issuerTariffId, numberOfRecords,   \
+                              tariffType);
+
+/** @brief Command description for GetCurrencyConversionCommand
+ *
+ * Command: GetCurrencyConversionCommand
+ */
+#define emberAfFillCommandPriceClusterGetCurrencyConversionCommand()                                                               \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_GET_CURRENCY_CONVERSION_COMMAND_COMMAND_ID, "", );
+
+/** @brief Command description for GetTariffCancellation
+ *
+ * Command: GetTariffCancellation
+ */
+#define emberAfFillCommandPriceClusterGetTariffCancellation()                                                                      \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_GET_TARIFF_CANCELLATION_COMMAND_ID, "", );
+
+/** @brief Command description for LoadControlEvent
+ *
+ * Command: LoadControlEvent
+ * @param issuerEventId INT32U
+ * @param issuerEventId INT32U
+ * @param deviceClass AmiDeviceClass
+ * @param eventStatus AmiEventStatus
+ * @param utilityEnrollmentGroup INT8U
+ * @param eventStatusTime UTC_TIME
+ * @param startTime UTC_TIME
+ * @param criticalityLevelApplied AmiCriticalityLevel
+ * @param durationInMinutes INT16U
+ * @param coolingTemperatureSetPointApplied INT16U
+ * @param criticalityLevel AmiCriticalityLevel
+ * @param heatingTemperatureSetPointApplied INT16U
+ * @param coolingTemperatureOffset INT8U
+ * @param averageLoadAdjustmentPercentageApplied INT8S
+ * @param heatingTemperatureOffset INT8U
+ * @param dutyCycleApplied INT8U
+ * @param coolingTemperatureSetPoint INT16S
+ * @param eventControl AmiEventControl
+ * @param heatingTemperatureSetPoint INT16S
+ * @param signatureType SignatureType
+ * @param averageLoadAdjustmentPercentage INT8S
+ * @param signature Signature
+ * @param dutyCycle INT8U
+ * @param eventControl AmiEventControl
+ */
+#define emberAfFillCommandDemand                                                                                                   \
+    Response and Load ControlClusterLoadControlEvent(                                                                              \
+        issuerEventId, issuerEventId, deviceClass, eventStatus, utilityEnrollmentGroup, eventStatusTime, startTime,                \
+        criticalityLevelApplied, durationInMinutes, coolingTemperatureSetPointApplied, criticalityLevel,                           \
+        heatingTemperatureSetPointApplied, coolingTemperatureOffset, averageLoadAdjustmentPercentageApplied,                       \
+        heatingTemperatureOffset, dutyCycleApplied, coolingTemperatureSetPoint, eventControl, heatingTemperatureSetPoint,          \
+        signatureType, averageLoadAdjustmentPercentage, signature, dutyCycle, eventControl)                                        \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_LOAD_CONTROL_EVENT_COMMAND_ID, "uuuuuuuuuuuuuuuuuuuuuuuu", issuerEventId, issuerEventId,     \
+                                  deviceClass, eventStatus, utilityEnrollmentGroup, eventStatusTime, startTime,                    \
+                                  criticalityLevelApplied, durationInMinutes, coolingTemperatureSetPointApplied, criticalityLevel, \
+                                  heatingTemperatureSetPointApplied, coolingTemperatureOffset,                                     \
+                                  averageLoadAdjustmentPercentageApplied, heatingTemperatureOffset, dutyCycleApplied,              \
+                                  coolingTemperatureSetPoint, eventControl, heatingTemperatureSetPoint, signatureType,             \
+                                  averageLoadAdjustmentPercentage, signature, dutyCycle, eventControl);
+
+/** @brief Command description for CancelLoadControlEvent
+ *
+ * Command: CancelLoadControlEvent
+ * @param issuerEventId INT32U
+ * @param startTime UTC_TIME
+ * @param deviceClass AmiDeviceClass
+ * @param numberOfEvents INT8U
+ * @param utilityEnrollmentGroup INT8U
+ * @param issuerEventId INT32U
+ * @param cancelControl AmiCancelControl
+ * @param effectiveTime UTC_TIME
+ */
+#define emberAfFillCommandDemand                                                                                                   \
+    Response and Load ControlClusterCancelLoadControlEvent(issuerEventId, startTime, deviceClass, numberOfEvents,                  \
+                                                           utilityEnrollmentGroup, issuerEventId, cancelControl, effectiveTime)    \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_CANCEL_LOAD_CONTROL_EVENT_COMMAND_ID, "uuuuuuuu", issuerEventId, startTime, deviceClass,     \
+                                  numberOfEvents, utilityEnrollmentGroup, issuerEventId, cancelControl, effectiveTime);
+
+/** @brief Command description for CancelAllLoadControlEvents
+ *
+ * Command: CancelAllLoadControlEvents
+ * @param cancelControl AmiCancelControl
+ */
+#define emberAfFillCommandDemand                                                                                                   \
+    Response and Load ControlClusterCancelAllLoadControlEvents(cancelControl)                                                      \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_CANCEL_ALL_LOAD_CONTROL_EVENTS_COMMAND_ID, "u", cancelControl);
+
+/** @brief Command description for GetProfileResponse
+ *
+ * Command: GetProfileResponse
+ * @param endTime UTC_TIME
+ * @param intervalChannel AmiIntervalChannel
+ * @param status AmiGetProfileStatus
+ * @param endTime UTC_TIME
+ * @param profileIntervalPeriod AmiIntervalPeriod
+ * @param numberOfPeriods INT8U
+ * @param numberOfPeriodsDelivered INT8U
+ * @param intervals INT24U []
+ * @param intervalsLen int
+ */
+#define emberAfFillCommandSimple                                                                                                   \
+    MeteringClusterGetProfileResponse(endTime, intervalChannel, status, endTime, profileIntervalPeriod, numberOfPeriods,           \
+                                      numberOfPeriodsDelivered, intervals, intervalsLen)                                           \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_PROFILE_RESPONSE_COMMAND_ID, "uuuuuuub", endTime, intervalChannel, status, endTime,      \
+                                  profileIntervalPeriod, numberOfPeriods, numberOfPeriodsDelivered, intervals, intervalsLen);
+
+/** @brief Command description for RequestMirror
+ *
+ * Command: RequestMirror
+ * @param endpointId INT16U
+ */
+#define emberAfFillCommandSimple                                                                                                   \
+    MeteringClusterRequestMirror(endpointId) emberAfFillExternalBuffer(mask,                                                       \
+                                                                                                                                   \
+                                                                       ZCL_REQUEST_MIRROR_COMMAND_ID, "u", endpointId);
+
+/** @brief Command description for RemoveMirror
+ *
+ * Command: RemoveMirror
+ * @param endpointId INT16U
+ */
+#define emberAfFillCommandSimple                                                                                                   \
+    MeteringClusterRemoveMirror(endpointId) emberAfFillExternalBuffer(mask,                                                        \
+                                                                                                                                   \
+                                                                      ZCL_REMOVE_MIRROR_COMMAND_ID, "u", endpointId);
+
+/** @brief Command description for RequestFastPollModeResponse
+ *
+ * Command: RequestFastPollModeResponse
+ * @param appliedUpdatePeriod INT8U
+ * @param fastPollUpdatePeriod INT8U
+ * @param fastPollModeEndtime UTC_TIME
+ * @param duration INT8U
+ */
+#define emberAfFillCommandSimple                                                                                                   \
+    MeteringClusterRequestFastPollModeResponse(appliedUpdatePeriod, fastPollUpdatePeriod, fastPollModeEndtime, duration)           \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_REQUEST_FAST_POLL_MODE_RESPONSE_COMMAND_ID, "uuuu", appliedUpdatePeriod,                     \
+                                  fastPollUpdatePeriod, fastPollModeEndtime, duration);
+
+/** @brief Command description for ScheduleSnapshotResponse
+ *
+ * Command: ScheduleSnapshotResponse
+ * @param issuerEventId INT32U
+ * @param issuerEventId INT32U
+ * @param snapshotResponsePayload SnapshotResponsePayload []
+ * @param snapshotResponsePayloadLen int
+ * @param commandIndex INT8U
+ * @param commandCount INT8U
+ * @param snapshotSchedulePayload SnapshotSchedulePayload []
+ * @param snapshotSchedulePayloadLen int
+ */
+#define emberAfFillCommandSimple                                                                                                   \
+    MeteringClusterScheduleSnapshotResponse(issuerEventId, issuerEventId, snapshotResponsePayload, snapshotResponsePayloadLen,     \
+                                            commandIndex, commandCount, snapshotSchedulePayload, snapshotSchedulePayloadLen)       \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_SCHEDULE_SNAPSHOT_RESPONSE_COMMAND_ID, "uubuub", issuerEventId, issuerEventId,               \
+                                  snapshotResponsePayload, snapshotResponsePayloadLen, commandIndex, commandCount,                 \
+                                  snapshotSchedulePayload, snapshotSchedulePayloadLen);
+
+/** @brief Command description for TakeSnapshotResponse
+ *
+ * Command: TakeSnapshotResponse
+ * @param snapshotId INT32U
+ * @param snapshotCause SnapshotCause
+ * @param snapshotConfirmation SnapshotConfirmation
+ */
+#define emberAfFillCommandSimple                                                                                                   \
+    MeteringClusterTakeSnapshotResponse(snapshotId, snapshotCause, snapshotConfirmation)                                           \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_TAKE_SNAPSHOT_RESPONSE_COMMAND_ID, "uuu", snapshotId, snapshotCause, snapshotConfirmation);
+
+/** @brief Command description for PublishSnapshot
+ *
+ * Command: PublishSnapshot
+ * @param snapshotId INT32U
+ * @param earliestStartTime UTC_TIME
+ * @param snapshotTime UTC_TIME
+ * @param latestEndTime UTC_TIME
+ * @param totalSnapshotsFound INT8U
+ * @param snapshotOffset INT8U
+ * @param commandIndex INT8U
+ * @param snapshotCause SnapshotCause
+ * @param totalCommands INT8U
+ * @param snapshotCause SnapshotCause
+ * @param snapshotPayloadType SnapshotPayloadType
+ * @param snapshotPayload INT8U []
+ * @param snapshotPayloadLen int
+ */
+#define emberAfFillCommandSimple                                                                                                   \
+    MeteringClusterPublishSnapshot(snapshotId, earliestStartTime, snapshotTime, latestEndTime, totalSnapshotsFound,                \
+                                   snapshotOffset, commandIndex, snapshotCause, totalCommands, snapshotCause, snapshotPayloadType, \
+                                   snapshotPayload, snapshotPayloadLen)                                                            \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_PUBLISH_SNAPSHOT_COMMAND_ID, "uuuuuuuuuuub", snapshotId, earliestStartTime, snapshotTime,    \
+                                  latestEndTime, totalSnapshotsFound, snapshotOffset, commandIndex, snapshotCause, totalCommands,  \
+                                  snapshotCause, snapshotPayloadType, snapshotPayload, snapshotPayloadLen);
+
+/** @brief Command description for GetSampledDataResponse
+ *
+ * Command: GetSampledDataResponse
+ * @param sampleId INT16U
+ * @param issuerEventId INT32U
+ * @param sampleStartTime UTC_TIME
+ * @param startSamplingTime UTC_TIME
+ * @param sampleType SampleType
+ * @param sampleType SampleType
+ * @param sampleRequestInterval INT16U
+ * @param sampleRequestInterval INT16U
+ * @param numberOfSamples INT16U
+ * @param maxNumberOfSamples INT16U
+ * @param samples INT24U []
+ * @param samplesLen int
+ */
+#define emberAfFillCommandSimple                                                                                                   \
+    MeteringClusterGetSampledDataResponse(sampleId, issuerEventId, sampleStartTime, startSamplingTime, sampleType, sampleType,     \
+                                          sampleRequestInterval, sampleRequestInterval, numberOfSamples, maxNumberOfSamples,       \
+                                          samples, samplesLen)                                                                     \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_SAMPLED_DATA_RESPONSE_COMMAND_ID, "uuuuuuuuuub", sampleId, issuerEventId,                \
+                                  sampleStartTime, startSamplingTime, sampleType, sampleType, sampleRequestInterval,               \
+                                  sampleRequestInterval, numberOfSamples, maxNumberOfSamples, samples, samplesLen);
+
+/** @brief Command description for ConfigureMirror
+ *
+ * Command: ConfigureMirror
+ * @param issuerEventId INT32U
+ * @param sampleId INT16U
+ * @param reportingInterval INT24U
+ * @param earliestSampleTime UTC_TIME
+ * @param mirrorNotificationReporting BOOLEAN
+ * @param sampleType SampleType
+ * @param notificationScheme INT8U
+ * @param numberOfSamples INT16U
+ */
+#define emberAfFillCommandSimple                                                                                                   \
+    MeteringClusterConfigureMirror(issuerEventId, sampleId, reportingInterval, earliestSampleTime, mirrorNotificationReporting,    \
+                                   sampleType, notificationScheme, numberOfSamples)                                                \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_CONFIGURE_MIRROR_COMMAND_ID, "uuuuuuuu", issuerEventId, sampleId, reportingInterval,         \
+                                  earliestSampleTime, mirrorNotificationReporting, sampleType, notificationScheme,                 \
+                                  numberOfSamples);
+
+/** @brief Command description for ConfigureNotificationScheme
+ *
+ * Command: ConfigureNotificationScheme
+ * @param issuerEventId INT32U
+ * @param notificationScheme INT8U
+ * @param notificationScheme INT8U
+ * @param notificationFlags BITMAP32 []
+ * @param notificationFlagsLen int
+ * @param notificationFlagOrder BITMAP32
+ */
+#define emberAfFillCommandSimple                                                                                                   \
+    MeteringClusterConfigureNotificationScheme(issuerEventId, notificationScheme, notificationScheme, notificationFlags,           \
+                                               notificationFlagsLen, notificationFlagOrder)                                        \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_CONFIGURE_NOTIFICATION_SCHEME_COMMAND_ID, "uuubu", issuerEventId, notificationScheme,        \
+                                  notificationScheme, notificationFlags, notificationFlagsLen, notificationFlagOrder);
+
+/** @brief Command description for ConfigureNotificationFlags
+ *
+ * Command: ConfigureNotificationFlags
+ * @param issuerEventId INT32U
+ * @param providerId INT32U
+ * @param notificationScheme INT8U
+ * @param issuerEventId INT32U
+ * @param notificationFlagAttributeId INT16U
+ * @param clusterId INT16U
+ * @param manufacturerCode INT16U
+ * @param numberOfCommands INT8U
+ * @param commandIds INT8U []
+ * @param commandIdsLen int
+ */
+#define emberAfFillCommandSimple                                                                                                   \
+    MeteringClusterConfigureNotificationFlags(issuerEventId, providerId, notificationScheme, issuerEventId,                        \
+                                              notificationFlagAttributeId, clusterId, manufacturerCode, numberOfCommands,          \
+                                              commandIds, commandIdsLen)                                                           \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_CONFIGURE_NOTIFICATION_FLAGS_COMMAND_ID, "uuuuuuuub", issuerEventId, providerId,             \
+                                  notificationScheme, issuerEventId, notificationFlagAttributeId, clusterId, manufacturerCode,     \
+                                  numberOfCommands, commandIds, commandIdsLen);
+
+/** @brief Command description for GetNotifiedMessage
+ *
+ * Command: GetNotifiedMessage
+ * @param notificationScheme INT8U
+ * @param providerId INT32U
+ * @param notificationFlagAttributeId INT16U
+ * @param issuerEventId INT32U
+ * @param notificationFlagsN BITMAP32
+ * @param requestDateTime UTC_TIME
+ * @param implementationDateTime UTC_TIME
+ * @param proposedSupplyStatus MeteringSupplyStatus
+ * @param supplyControlBits SupplyControlBits
+ */
+#define emberAfFillCommandSimple                                                                                                   \
+    MeteringClusterGetNotifiedMessage(notificationScheme, providerId, notificationFlagAttributeId, issuerEventId,                  \
+                                      notificationFlagsN, requestDateTime, implementationDateTime, proposedSupplyStatus,           \
+                                      supplyControlBits)                                                                           \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_NOTIFIED_MESSAGE_COMMAND_ID, "uuuuuuuuu", notificationScheme, providerId,                \
+                                  notificationFlagAttributeId, issuerEventId, notificationFlagsN, requestDateTime,                 \
+                                  implementationDateTime, proposedSupplyStatus, supplyControlBits);
+
+/** @brief Command description for SupplyStatusResponse
+ *
+ * Command: SupplyStatusResponse
+ * @param providerId INT32U
+ * @param proposedSupplyStatus ProposedSupplyStatus
+ * @param issuerEventId INT32U
+ * @param implementationDateTime UTC_TIME
+ * @param supplyStatus MeteringSupplyStatus
+ */
+#define emberAfFillCommandSimple                                                                                                   \
+    MeteringClusterSupplyStatusResponse(providerId, proposedSupplyStatus, issuerEventId, implementationDateTime, supplyStatus)     \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_SUPPLY_STATUS_RESPONSE_COMMAND_ID, "uuuuu", providerId, proposedSupplyStatus, issuerEventId, \
+                                  implementationDateTime, supplyStatus);
+
+/** @brief Command description for StartSamplingResponse
+ *
+ * Command: StartSamplingResponse
+ * @param sampleId INT16U
+ * @param issuerEventId INT32U
+ * @param supplyTamperState SupplyStatus
+ * @param supplyDepletionState SupplyStatus
+ * @param supplyUncontrolledFlowState SupplyStatus
+ * @param loadLimitSupplyState SupplyStatus
+ */
+#define emberAfFillCommandSimple                                                                                                   \
+    MeteringClusterStartSamplingResponse(sampleId, issuerEventId, supplyTamperState, supplyDepletionState,                         \
+                                         supplyUncontrolledFlowState, loadLimitSupplyState)                                        \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_START_SAMPLING_RESPONSE_COMMAND_ID, "uuuuuu", sampleId, issuerEventId, supplyTamperState,    \
+                                  supplyDepletionState, supplyUncontrolledFlowState, loadLimitSupplyState);
+
+/** @brief Command description for SetUncontrolledFlowThreshold
+ *
+ * Command: SetUncontrolledFlowThreshold
+ * @param providerId INT32U
+ * @param issuerEventId INT32U
+ * @param uncontrolledFlowThreshold INT16U
+ * @param unitOfMeasure AmiUnitOfMeasure
+ * @param multiplier INT16U
+ * @param divisor INT16U
+ * @param stabilisationPeriod INT8U
+ * @param measurementPeriod INT16U
+ */
+#define emberAfFillCommandSimple                                                                                                   \
+    MeteringClusterSetUncontrolledFlowThreshold(providerId, issuerEventId, uncontrolledFlowThreshold, unitOfMeasure, multiplier,   \
+                                                divisor, stabilisationPeriod, measurementPeriod)                                   \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_SET_UNCONTROLLED_FLOW_THRESHOLD_COMMAND_ID, "uuuuuuuu", providerId, issuerEventId,           \
+                                  uncontrolledFlowThreshold, unitOfMeasure, multiplier, divisor, stabilisationPeriod,              \
+                                  measurementPeriod);
+
+/** @brief Command description for GetLastMessage
+ *
+ * Command: GetLastMessage
+ * @param messageId INT32U
+ * @param messageControl MessagingControlMask
+ * @param startTime UTC_TIME
+ * @param durationInMinutes INT16U
+ * @param message CHAR_STRING
+ * @param optionalExtendedMessageControl MessagingExtendedControlMask
+ */
+#define emberAfFillCommandMessagingClusterGetLastMessage(messageId, messageControl, startTime, durationInMinutes, message,         \
+                                                         optionalExtendedMessageControl)                                           \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_GET_LAST_MESSAGE_COMMAND_ID, "uuuuuu", messageId, messageControl, startTime, durationInMinutes,  \
+                              message, optionalExtendedMessageControl);
+
+/** @brief Command description for CancelMessage
+ *
+ * Command: CancelMessage
+ * @param messageId INT32U
+ * @param messageId INT32U
+ * @param messageControl MessagingControlMask
+ * @param confirmationTime UTC_TIME
+ * @param messageConfirmationControl BITMAP8
+ * @param messageResponse OCTET_STRING
+ */
+#define emberAfFillCommandMessagingClusterCancelMessage(messageId, messageId, messageControl, confirmationTime,                    \
+                                                        messageConfirmationControl, messageResponse)                               \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_CANCEL_MESSAGE_COMMAND_ID, "uuuuuu", messageId, messageId, messageControl, confirmationTime,     \
+                              messageConfirmationControl, messageResponse);
+
+/** @brief Command description for DisplayProtectedMessage
+ *
+ * Command: DisplayProtectedMessage
+ * @param messageId INT32U
+ * @param earliestImplementationTime UTC_TIME
+ * @param messageControl MessagingControlMask
+ * @param startTime UTC_TIME
+ * @param durationInMinutes INT16U
+ * @param message CHAR_STRING
+ * @param optionalExtendedMessageControl MessagingExtendedControlMask
+ */
+#define emberAfFillCommandMessagingClusterDisplayProtectedMessage(                                                                 \
+    messageId, earliestImplementationTime, messageControl, startTime, durationInMinutes, message, optionalExtendedMessageControl)  \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_DISPLAY_PROTECTED_MESSAGE_COMMAND_ID, "uuuuuuu", messageId, earliestImplementationTime,          \
+                              messageControl, startTime, durationInMinutes, message, optionalExtendedMessageControl);
+
+/** @brief Command description for CancelAllMessages
+ *
+ * Command: CancelAllMessages
+ * @param implementationDateTime UTC_TIME
+ */
+#define emberAfFillCommandMessagingClusterCancelAllMessages(implementationDateTime)                                                \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_CANCEL_ALL_MESSAGES_COMMAND_ID, "u", implementationDateTime);
+
+/** @brief Command description for RequestTunnel
+ *
+ * Command: RequestTunnel
+ * @param protocolId INT8U
+ * @param tunnelId INT16U
+ * @param manufacturerCode INT16U
+ * @param tunnelStatus TunnelingTunnelStatus
+ * @param flowControlSupport BOOLEAN
+ * @param maximumIncomingTransferSize INT16U
+ * @param maximumIncomingTransferSize INT16U
+ */
+#define emberAfFillCommandTunnelingClusterRequestTunnel(protocolId, tunnelId, manufacturerCode, tunnelStatus, flowControlSupport,  \
+                                                        maximumIncomingTransferSize, maximumIncomingTransferSize)                  \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_REQUEST_TUNNEL_COMMAND_ID, "uuuuuuu", protocolId, tunnelId, manufacturerCode, tunnelStatus,      \
+                              flowControlSupport, maximumIncomingTransferSize, maximumIncomingTransferSize);
+
+/** @brief Command description for CloseTunnel
+ *
+ * Command: CloseTunnel
+ * @param tunnelId INT16U
+ * @param tunnelId INT16U
+ * @param data INT8U []
+ * @param dataLen int
+ */
+#define emberAfFillCommandTunnelingClusterCloseTunnel(tunnelId, tunnelId, data, dataLen)                                           \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_CLOSE_TUNNEL_COMMAND_ID, "uub", tunnelId, tunnelId, data, dataLen);
+
+/** @brief Command description for TransferDataClientToServer
+ *
+ * Command: TransferDataClientToServer
+ * @param tunnelId INT16U
+ * @param tunnelId INT16U
+ * @param data INT8U []
+ * @param dataLen int
+ * @param transferDataStatus TunnelingTransferDataStatus
+ */
+#define emberAfFillCommandTunnelingClusterTransferDataClientToServer(tunnelId, tunnelId, data, dataLen, transferDataStatus)        \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_TRANSFER_DATA_CLIENT_TO_SERVER_COMMAND_ID, "uubu", tunnelId, tunnelId, data, dataLen,            \
+                              transferDataStatus);
+
+/** @brief Command description for TransferDataErrorClientToServer
+ *
+ * Command: TransferDataErrorClientToServer
+ * @param tunnelId INT16U
+ * @param tunnelId INT16U
+ * @param transferDataStatus TunnelingTransferDataStatus
+ * @param numberOfBytesLeft INT16U
+ */
+#define emberAfFillCommandTunnelingClusterTransferDataErrorClientToServer(tunnelId, tunnelId, transferDataStatus,                  \
+                                                                          numberOfBytesLeft)                                       \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_TRANSFER_DATA_ERROR_CLIENT_TO_SERVER_COMMAND_ID, "uuuu", tunnelId, tunnelId, transferDataStatus, \
+                              numberOfBytesLeft);
+
+/** @brief Command description for AckTransferDataClientToServer
+ *
+ * Command: AckTransferDataClientToServer
+ * @param tunnelId INT16U
+ * @param tunnelId INT16U
+ * @param numberOfBytesLeft INT16U
+ * @param numberOfOctetsLeft INT16U
+ */
+#define emberAfFillCommandTunnelingClusterAckTransferDataClientToServer(tunnelId, tunnelId, numberOfBytesLeft, numberOfOctetsLeft) \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_ACK_TRANSFER_DATA_CLIENT_TO_SERVER_COMMAND_ID, "uuuu", tunnelId, tunnelId, numberOfBytesLeft,    \
+                              numberOfOctetsLeft);
+
+/** @brief Command description for ReadyDataClientToServer
+ *
+ * Command: ReadyDataClientToServer
+ * @param tunnelId INT16U
+ * @param protocolListComplete BOOLEAN
+ * @param numberOfOctetsLeft INT16U
+ * @param protocolCount INT8U
+ * @param protocolList Protocol []
+ * @param protocolListLen int
+ */
+#define emberAfFillCommandTunnelingClusterReadyDataClientToServer(tunnelId, protocolListComplete, numberOfOctetsLeft,              \
+                                                                  protocolCount, protocolList, protocolListLen)                    \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_READY_DATA_CLIENT_TO_SERVER_COMMAND_ID, "uuuub", tunnelId, protocolListComplete,                 \
+                              numberOfOctetsLeft, protocolCount, protocolList, protocolListLen);
+
+/** @brief Command description for GetSupportedTunnelProtocols
+ *
+ * Command: GetSupportedTunnelProtocols
+ * @param protocolOffset INT8U
+ * @param tunnelId INT16U
+ */
+#define emberAfFillCommandTunnelingClusterGetSupportedTunnelProtocols(protocolOffset, tunnelId)                                    \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_GET_SUPPORTED_TUNNEL_PROTOCOLS_COMMAND_ID, "uu", protocolOffset, tunnelId);
+
+/** @brief Command description for SelectAvailableEmergencyCredit
+ *
+ * Command: SelectAvailableEmergencyCredit
+ * @param commandIssueDateTime UTC_TIME
+ * @param originatingDevice OriginatingDevice
+ * @param siteId OCTET_STRING
+ * @param meterSerialNumber OCTET_STRING
+ */
+#define emberAfFillCommandPrepaymentClusterSelectAvailableEmergencyCredit(commandIssueDateTime, originatingDevice, siteId,         \
+                                                                          meterSerialNumber)                                       \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_SELECT_AVAILABLE_EMERGENCY_CREDIT_COMMAND_ID, "uuuu", commandIssueDateTime, originatingDevice,   \
+                              siteId, meterSerialNumber);
+
+/** @brief Command description for PublishPrepaySnapshot
+ *
+ * Command: PublishPrepaySnapshot
+ * @param snapshotId INT32U
+ * @param snapshotTime UTC_TIME
+ * @param totalSnapshotsFound INT8U
+ * @param commandIndex INT8U
+ * @param totalNumberOfCommands INT8U
+ * @param snapshotCause PrepaySnapshotPayloadCause
+ * @param snapshotPayloadType PrepaySnapshotPayloadType
+ * @param snapshotPayload INT8U []
+ * @param snapshotPayloadLen int
+ */
+#define emberAfFillCommandPrepaymentClusterPublishPrepaySnapshot(snapshotId, snapshotTime, totalSnapshotsFound, commandIndex,      \
+                                                                 totalNumberOfCommands, snapshotCause, snapshotPayloadType,        \
+                                                                 snapshotPayload, snapshotPayloadLen)                              \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_PUBLISH_PREPAY_SNAPSHOT_COMMAND_ID, "uuuuuuub", snapshotId, snapshotTime, totalSnapshotsFound,   \
+                              commandIndex, totalNumberOfCommands, snapshotCause, snapshotPayloadType, snapshotPayload,            \
+                              snapshotPayloadLen);
+
+/** @brief Command description for ChangeDebt
+ *
+ * Command: ChangeDebt
+ * @param issuerEventId INT32U
+ * @param friendlyCredit FriendlyCredit
+ * @param debtLabel OCTET_STRING
+ * @param friendlyCreditCalendarId INT32U
+ * @param debtAmount INT32U
+ * @param emergencyCreditLimit INT32U
+ * @param debtRecoveryMethod DebtRecoveryMethod
+ * @param emergencyCreditThreshold INT32U
+ * @param debtAmountType DebtAmountType
+ * @param debtRecoveryStartTime UTC_TIME
+ * @param debtRecoveryCollectionTime INT16U
+ * @param debtRecoveryFrequency DebtRecoveryFrequency
+ * @param debtRecoveryAmount INT32U
+ * @param debtRecoveryBalancePercentage INT16U
+ */
+#define emberAfFillCommandPrepaymentClusterChangeDebt(                                                                             \
+    issuerEventId, friendlyCredit, debtLabel, friendlyCreditCalendarId, debtAmount, emergencyCreditLimit, debtRecoveryMethod,      \
+    emergencyCreditThreshold, debtAmountType, debtRecoveryStartTime, debtRecoveryCollectionTime, debtRecoveryFrequency,            \
+    debtRecoveryAmount, debtRecoveryBalancePercentage)                                                                             \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_CHANGE_DEBT_COMMAND_ID, "uuuuuuuuuuuuuu", issuerEventId, friendlyCredit, debtLabel,              \
+                              friendlyCreditCalendarId, debtAmount, emergencyCreditLimit, debtRecoveryMethod,                      \
+                              emergencyCreditThreshold, debtAmountType, debtRecoveryStartTime, debtRecoveryCollectionTime,         \
+                              debtRecoveryFrequency, debtRecoveryAmount, debtRecoveryBalancePercentage);
+
+/** @brief Command description for EmergencyCreditSetup
+ *
+ * Command: EmergencyCreditSetup
+ * @param issuerEventId INT32U
+ * @param resultType ResultType
+ * @param startTime UTC_TIME
+ * @param topUpValue INT32U
+ * @param emergencyCreditLimit INT32U
+ * @param sourceOfTopUp OriginatingDevice
+ * @param emergencyCreditThreshold INT32U
+ * @param creditRemaining INT32U
+ */
+#define emberAfFillCommandPrepaymentClusterEmergencyCreditSetup(issuerEventId, resultType, startTime, topUpValue,                  \
+                                                                emergencyCreditLimit, sourceOfTopUp, emergencyCreditThreshold,     \
+                                                                creditRemaining)                                                   \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_EMERGENCY_CREDIT_SETUP_COMMAND_ID, "uuuuuuuu", issuerEventId, resultType, startTime, topUpValue, \
+                              emergencyCreditLimit, sourceOfTopUp, emergencyCreditThreshold, creditRemaining);
+
+/** @brief Command description for ConsumerTopUp
+ *
+ * Command: ConsumerTopUp
+ * @param originatingDevice OriginatingDevice
+ * @param topUpCode OCTET_STRING
+ */
+#define emberAfFillCommandPrepaymentClusterConsumerTopUp(originatingDevice, topUpCode)                                             \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_CONSUMER_TOP_UP_COMMAND_ID, "uu", originatingDevice, topUpCode);
+
+/** @brief Command description for CreditAdjustment
+ *
+ * Command: CreditAdjustment
+ * @param issuerEventId INT32U
+ * @param commandIndex INT8U
+ * @param startTime UTC_TIME
+ * @param totalNumberOfCommands INT8U
+ * @param creditAdjustmentType CreditAdjustmentType
+ * @param topUpPayload TopUpPayload []
+ * @param topUpPayloadLen int
+ * @param creditAdjustmentValue INT32U
+ */
+#define emberAfFillCommandPrepaymentClusterCreditAdjustment(issuerEventId, commandIndex, startTime, totalNumberOfCommands,         \
+                                                            creditAdjustmentType, topUpPayload, topUpPayloadLen,                   \
+                                                            creditAdjustmentValue)                                                 \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_CREDIT_ADJUSTMENT_COMMAND_ID, "uuuuubu", issuerEventId, commandIndex, startTime,                 \
+                              totalNumberOfCommands, creditAdjustmentType, topUpPayload, topUpPayloadLen, creditAdjustmentValue);
+
+/** @brief Command description for ChangePaymentMode
+ *
+ * Command: ChangePaymentMode
+ * @param providerId INT32U
+ * @param commandIndex INT8U
+ * @param issuerEventId INT32U
+ * @param totalNumberOfCommands INT8U
+ * @param implementationDateTime UTC_TIME
+ * @param debtPayload DebtPayload []
+ * @param debtPayloadLen int
+ * @param proposedPaymentControlConfiguration PaymentControlConfiguration
+ * @param cutOffValue INT32U
+ */
+#define emberAfFillCommandPrepaymentClusterChangePaymentMode(providerId, commandIndex, issuerEventId, totalNumberOfCommands,       \
+                                                             implementationDateTime, debtPayload, debtPayloadLen,                  \
+                                                             proposedPaymentControlConfiguration, cutOffValue)                     \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_CHANGE_PAYMENT_MODE_COMMAND_ID, "uuuuubuu", providerId, commandIndex, issuerEventId,             \
+                              totalNumberOfCommands, implementationDateTime, debtPayload, debtPayloadLen,                          \
+                              proposedPaymentControlConfiguration, cutOffValue);
+
+/** @brief Command description for GetPrepaySnapshot
+ *
+ * Command: GetPrepaySnapshot
+ * @param earliestStartTime UTC_TIME
+ * @param latestEndTime UTC_TIME
+ * @param snapshotOffset INT8U
+ * @param snapshotCause PrepaySnapshotPayloadCause
+ */
+#define emberAfFillCommandPrepaymentClusterGetPrepaySnapshot(earliestStartTime, latestEndTime, snapshotOffset, snapshotCause)      \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_GET_PREPAY_SNAPSHOT_COMMAND_ID, "uuuu", earliestStartTime, latestEndTime, snapshotOffset,        \
+                              snapshotCause);
+
+/** @brief Command description for GetTopUpLog
+ *
+ * Command: GetTopUpLog
+ * @param latestEndTime UTC_TIME
+ * @param numberOfRecords INT8U
+ */
+#define emberAfFillCommandPrepaymentClusterGetTopUpLog(latestEndTime, numberOfRecords)                                             \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_GET_TOP_UP_LOG_COMMAND_ID, "uu", latestEndTime, numberOfRecords);
+
+/** @brief Command description for SetLowCreditWarningLevel
+ *
+ * Command: SetLowCreditWarningLevel
+ * @param lowCreditWarningLevel INT32U
+ */
+#define emberAfFillCommandPrepaymentClusterSetLowCreditWarningLevel(lowCreditWarningLevel)                                         \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_SET_LOW_CREDIT_WARNING_LEVEL_COMMAND_ID, "u", lowCreditWarningLevel);
+
+/** @brief Command description for GetDebtRepaymentLog
+ *
+ * Command: GetDebtRepaymentLog
+ * @param latestEndTime UTC_TIME
+ * @param numberOfDebts INT8U
+ * @param debtType RepaymentDebtType
+ */
+#define emberAfFillCommandPrepaymentClusterGetDebtRepaymentLog(latestEndTime, numberOfDebts, debtType)                             \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_GET_DEBT_REPAYMENT_LOG_COMMAND_ID, "uuu", latestEndTime, numberOfDebts, debtType);
+
+/** @brief Command description for SetMaximumCreditLimit
+ *
+ * Command: SetMaximumCreditLimit
+ * @param providerId INT32U
+ * @param issuerEventId INT32U
+ * @param implementationDateTime UTC_TIME
+ * @param maximumCreditLevel INT32U
+ * @param maximumCreditPerTopUp INT32U
+ */
+#define emberAfFillCommandPrepaymentClusterSetMaximumCreditLimit(providerId, issuerEventId, implementationDateTime,                \
+                                                                 maximumCreditLevel, maximumCreditPerTopUp)                        \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_SET_MAXIMUM_CREDIT_LIMIT_COMMAND_ID, "uuuuu", providerId, issuerEventId, implementationDateTime, \
+                              maximumCreditLevel, maximumCreditPerTopUp);
+
+/** @brief Command description for SetOverallDebtCap
+ *
+ * Command: SetOverallDebtCap
+ * @param providerId INT32U
+ * @param issuerEventId INT32U
+ * @param implementationDateTime UTC_TIME
+ * @param overallDebtCap INT32U
+ */
+#define emberAfFillCommandPrepaymentClusterSetOverallDebtCap(providerId, issuerEventId, implementationDateTime, overallDebtCap)    \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_SET_OVERALL_DEBT_CAP_COMMAND_ID, "uuuu", providerId, issuerEventId, implementationDateTime,      \
+                              overallDebtCap);
+
+/** @brief Command description for ReportEventStatus
+ *
+ * Command: ReportEventStatus
+ * @param issuerEventId INT32U
+ * @param issuerEventId INT32U
+ * @param eventStatus AmiEventStatus
+ * @param deviceClass AmiDeviceClass
+ * @param eventStatusTime UTC_TIME
+ * @param utilityEnrollmentGroup INT8U
+ * @param criticalityLevelApplied AmiCriticalityLevel
+ * @param actionRequired INT8U
+ * @param coolingTemperatureSetPointApplied INT16U
+ * @param heatingTemperatureSetPointApplied INT16U
+ * @param averageLoadAdjustmentPercentageApplied INT8S
+ * @param dutyCycleApplied INT8U
+ * @param eventControl AmiEventControl
+ */
+#define emberAfFillCommandEnergy                                                                                                   \
+    ManagementClusterReportEventStatus(issuerEventId, issuerEventId, eventStatus, deviceClass, eventStatusTime,                    \
+                                       utilityEnrollmentGroup, criticalityLevelApplied, actionRequired,                            \
+                                       coolingTemperatureSetPointApplied, heatingTemperatureSetPointApplied,                       \
+                                       averageLoadAdjustmentPercentageApplied, dutyCycleApplied, eventControl)                     \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_REPORT_EVENT_STATUS_COMMAND_ID, "uuuuuuuuuuuuu", issuerEventId, issuerEventId, eventStatus,  \
+                                  deviceClass, eventStatusTime, utilityEnrollmentGroup, criticalityLevelApplied, actionRequired,   \
+                                  coolingTemperatureSetPointApplied, heatingTemperatureSetPointApplied,                            \
+                                  averageLoadAdjustmentPercentageApplied, dutyCycleApplied, eventControl);
+
+/** @brief Command description for PublishCalendar
+ *
+ * Command: PublishCalendar
+ * @param providerId INT32U
+ * @param earliestStartTime UTC_TIME
+ * @param issuerEventId INT32U
+ * @param minIssuerEventId INT32U
+ * @param issuerCalendarId INT32U
+ * @param numberOfCalendars INT8U
+ * @param startTime UTC_TIME
+ * @param calendarType CalendarType
+ * @param calendarType CalendarType
+ * @param providerId INT32U
+ * @param calendarTimeReference CalendarTimeReference
+ * @param calendarName OCTET_STRING
+ * @param numberOfSeasons INT8U
+ * @param numberOfWeekProfiles INT8U
+ * @param numberOfDayProfiles INT8U
+ */
+#define emberAfFillCommandCalendarClusterPublishCalendar(                                                                          \
+    providerId, earliestStartTime, issuerEventId, minIssuerEventId, issuerCalendarId, numberOfCalendars, startTime, calendarType,  \
+    calendarType, providerId, calendarTimeReference, calendarName, numberOfSeasons, numberOfWeekProfiles, numberOfDayProfiles)     \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_PUBLISH_CALENDAR_COMMAND_ID, "uuuuuuuuuuuuuuu", providerId, earliestStartTime, issuerEventId,    \
+                              minIssuerEventId, issuerCalendarId, numberOfCalendars, startTime, calendarType, calendarType,        \
+                              providerId, calendarTimeReference, calendarName, numberOfSeasons, numberOfWeekProfiles,              \
+                              numberOfDayProfiles);
+
+/** @brief Command description for PublishDayProfile
+ *
+ * Command: PublishDayProfile
+ * @param providerId INT32U
+ * @param providerId INT32U
+ * @param issuerEventId INT32U
+ * @param issuerCalendarId INT32U
+ * @param issuerCalendarId INT32U
+ * @param startDayId INT8U
+ * @param dayId INT8U
+ * @param numberOfDays INT8U
+ * @param totalNumberOfScheduleEntries INT8U
+ * @param commandIndex INT8U
+ * @param totalNumberOfCommands INT8U
+ * @param calendarType CalendarType
+ * @param dayScheduleEntries ScheduleEntry []
+ * @param dayScheduleEntriesLen int
+ */
+#define emberAfFillCommandCalendarClusterPublishDayProfile(                                                                        \
+    providerId, providerId, issuerEventId, issuerCalendarId, issuerCalendarId, startDayId, dayId, numberOfDays,                    \
+    totalNumberOfScheduleEntries, commandIndex, totalNumberOfCommands, calendarType, dayScheduleEntries, dayScheduleEntriesLen)    \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_PUBLISH_DAY_PROFILE_COMMAND_ID, "uuuuuuuuuuuub", providerId, providerId, issuerEventId,          \
+                              issuerCalendarId, issuerCalendarId, startDayId, dayId, numberOfDays, totalNumberOfScheduleEntries,   \
+                              commandIndex, totalNumberOfCommands, calendarType, dayScheduleEntries, dayScheduleEntriesLen);
+
+/** @brief Command description for PublishWeekProfile
+ *
+ * Command: PublishWeekProfile
+ * @param providerId INT32U
+ * @param providerId INT32U
+ * @param issuerEventId INT32U
+ * @param issuerCalendarId INT32U
+ * @param issuerCalendarId INT32U
+ * @param startWeekId INT8U
+ * @param weekId INT8U
+ * @param numberOfWeeks INT8U
+ * @param dayIdRefMonday INT8U
+ * @param dayIdRefTuesday INT8U
+ * @param dayIdRefWednesday INT8U
+ * @param dayIdRefThursday INT8U
+ * @param dayIdRefFriday INT8U
+ * @param dayIdRefSaturday INT8U
+ * @param dayIdRefSunday INT8U
+ */
+#define emberAfFillCommandCalendarClusterPublishWeekProfile(                                                                       \
+    providerId, providerId, issuerEventId, issuerCalendarId, issuerCalendarId, startWeekId, weekId, numberOfWeeks, dayIdRefMonday, \
+    dayIdRefTuesday, dayIdRefWednesday, dayIdRefThursday, dayIdRefFriday, dayIdRefSaturday, dayIdRefSunday)                        \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_PUBLISH_WEEK_PROFILE_COMMAND_ID, "uuuuuuuuuuuuuuu", providerId, providerId, issuerEventId,       \
+                              issuerCalendarId, issuerCalendarId, startWeekId, weekId, numberOfWeeks, dayIdRefMonday,              \
+                              dayIdRefTuesday, dayIdRefWednesday, dayIdRefThursday, dayIdRefFriday, dayIdRefSaturday,              \
+                              dayIdRefSunday);
+
+/** @brief Command description for PublishSeasons
+ *
+ * Command: PublishSeasons
+ * @param providerId INT32U
+ * @param providerId INT32U
+ * @param issuerEventId INT32U
+ * @param issuerCalendarId INT32U
+ * @param issuerCalendarId INT32U
+ * @param commandIndex INT8U
+ * @param totalNumberOfCommands INT8U
+ * @param seasonEntries SeasonEntry []
+ * @param seasonEntriesLen int
+ */
+#define emberAfFillCommandCalendarClusterPublishSeasons(providerId, providerId, issuerEventId, issuerCalendarId, issuerCalendarId, \
+                                                        commandIndex, totalNumberOfCommands, seasonEntries, seasonEntriesLen)      \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_PUBLISH_SEASONS_COMMAND_ID, "uuuuuuub", providerId, providerId, issuerEventId, issuerCalendarId, \
+                              issuerCalendarId, commandIndex, totalNumberOfCommands, seasonEntries, seasonEntriesLen);
+
+/** @brief Command description for PublishSpecialDays
+ *
+ * Command: PublishSpecialDays
+ * @param providerId INT32U
+ * @param startTime UTC_TIME
+ * @param issuerEventId INT32U
+ * @param numberOfEvents INT8U
+ * @param issuerCalendarId INT32U
+ * @param calendarType CalendarType
+ * @param startTime UTC_TIME
+ * @param providerId INT32U
+ * @param calendarType CalendarType
+ * @param issuerCalendarId INT32U
+ * @param totalNumberOfSpecialDays INT8U
+ * @param commandIndex INT8U
+ * @param totalNumberOfCommands INT8U
+ * @param specialDayEntries SpecialDay []
+ * @param specialDayEntriesLen int
+ */
+#define emberAfFillCommandCalendarClusterPublishSpecialDays(                                                                       \
+    providerId, startTime, issuerEventId, numberOfEvents, issuerCalendarId, calendarType, startTime, providerId, calendarType,     \
+    issuerCalendarId, totalNumberOfSpecialDays, commandIndex, totalNumberOfCommands, specialDayEntries, specialDayEntriesLen)      \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_PUBLISH_SPECIAL_DAYS_COMMAND_ID, "uuuuuuuuuuuuub", providerId, startTime, issuerEventId,         \
+                              numberOfEvents, issuerCalendarId, calendarType, startTime, providerId, calendarType,                 \
+                              issuerCalendarId, totalNumberOfSpecialDays, commandIndex, totalNumberOfCommands, specialDayEntries,  \
+                              specialDayEntriesLen);
+
+/** @brief Command description for GetCalendarCancellation
+ *
+ * Command: GetCalendarCancellation
+ * @param providerId INT32U
+ * @param issuerCalendarId INT32U
+ * @param calendarType CalendarType
+ */
+#define emberAfFillCommandCalendarClusterGetCalendarCancellation(providerId, issuerCalendarId, calendarType)                       \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_GET_CALENDAR_CANCELLATION_COMMAND_ID, "uuu", providerId, issuerCalendarId, calendarType);
+
+/** @brief Command description for GetChangeOfTenancy
+ *
+ * Command: GetChangeOfTenancy
+ * @param providerId INT32U
+ * @param issuerEventId INT32U
+ * @param tariffType TariffType
+ * @param implementationDateTime UTC_TIME
+ * @param proposedTenancyChangeControl ProposedChangeControl
+ */
+#define emberAfFillCommandDevice                                                                                                   \
+    ManagementClusterGetChangeOfTenancy(providerId, issuerEventId, tariffType, implementationDateTime,                             \
+                                        proposedTenancyChangeControl)                                                              \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_CHANGE_OF_TENANCY_COMMAND_ID, "uuuuu", providerId, issuerEventId, tariffType,            \
+                                  implementationDateTime, proposedTenancyChangeControl);
+
+/** @brief Command description for GetChangeOfSupplier
+ *
+ * Command: GetChangeOfSupplier
+ * @param currentProviderId INT32U
+ * @param issuerEventId INT32U
+ * @param tariffType TariffType
+ * @param proposedProviderId INT32U
+ * @param providerChangeImplementationTime UTC_TIME
+ * @param providerChangeControl ProposedChangeControl
+ * @param proposedProviderName OCTET_STRING
+ * @param proposedProviderContactDetails OCTET_STRING
+ */
+#define emberAfFillCommandDevice                                                                                                   \
+    ManagementClusterGetChangeOfSupplier(currentProviderId, issuerEventId, tariffType, proposedProviderId,                         \
+                                         providerChangeImplementationTime, providerChangeControl, proposedProviderName,            \
+                                         proposedProviderContactDetails)                                                           \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_CHANGE_OF_SUPPLIER_COMMAND_ID, "uuuuuuuu", currentProviderId, issuerEventId, tariffType, \
+                                  proposedProviderId, providerChangeImplementationTime, providerChangeControl,                     \
+                                  proposedProviderName, proposedProviderContactDetails);
+
+/** @brief Command description for RequestNewPassword
+ *
+ * Command: RequestNewPassword
+ * @param passwordType PasswordType
+ * @param issuerEventId INT32U
+ * @param implementationDateTime UTC_TIME
+ * @param durationInMinutes INT16U
+ * @param passwordType PasswordType
+ * @param password OCTET_STRING
+ */
+#define emberAfFillCommandDevice                                                                                                   \
+    ManagementClusterRequestNewPassword(passwordType, issuerEventId, implementationDateTime, durationInMinutes, passwordType,      \
+                                        password)                                                                                  \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_REQUEST_NEW_PASSWORD_COMMAND_ID, "uuuuuu", passwordType, issuerEventId,                      \
+                                  implementationDateTime, durationInMinutes, passwordType, password);
+
+/** @brief Command description for GetSiteId
+ *
+ * Command: GetSiteId
+ * @param issuerEventId INT32U
+ * @param siteIdTime UTC_TIME
+ * @param providerId INT32U
+ * @param siteId OCTET_STRING
+ */
+#define emberAfFillCommandDevice                                                                                                   \
+    ManagementClusterGetSiteId(issuerEventId, siteIdTime, providerId, siteId)                                                      \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_SITE_ID_COMMAND_ID, "uuuu", issuerEventId, siteIdTime, providerId, siteId);
+
+/** @brief Command description for ReportEventConfiguration
+ *
+ * Command: ReportEventConfiguration
+ * @param commandIndex INT8U
+ * @param issuerEventId INT32U
+ * @param totalCommands INT8U
+ * @param startDateTime UTC_TIME
+ * @param eventConfigurationPayload EventConfigurationPayload []
+ * @param eventConfigurationPayloadLen int
+ * @param eventConfiguration EventConfiguration
+ * @param configurationControl EventConfigurationControl
+ * @param eventConfigurationPayload INT8U []
+ * @param eventConfigurationPayloadLen int
+ */
+#define emberAfFillCommandDevice                                                                                                   \
+    ManagementClusterReportEventConfiguration(commandIndex, issuerEventId, totalCommands, startDateTime,                           \
+                                              eventConfigurationPayload, eventConfigurationPayloadLen, eventConfiguration,         \
+                                              configurationControl, eventConfigurationPayload, eventConfigurationPayloadLen)       \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_REPORT_EVENT_CONFIGURATION_COMMAND_ID, "uuuubuub", commandIndex, issuerEventId,              \
+                                  totalCommands, startDateTime, eventConfigurationPayload, eventConfigurationPayloadLen,           \
+                                  eventConfiguration, configurationControl, eventConfigurationPayload,                             \
+                                  eventConfigurationPayloadLen);
+
+/** @brief Command description for GetCIN
+ *
+ * Command: GetCIN
+ * @param eventId INT16U
+ */
+#define emberAfFillCommandDevice                                                                                                   \
+    ManagementClusterGetCIN(eventId) emberAfFillExternalBuffer(mask,                                                               \
+                                                                                                                                   \
+                                                               ZCL_GET_CIN_COMMAND_ID, "u", eventId);
+
+/** @brief Command description for UpdateCIN
+ *
+ * Command: UpdateCIN
+ * @param issuerEventId INT32U
+ * @param implementationTime UTC_TIME
+ * @param providerId INT32U
+ * @param customerIdNumber OCTET_STRING
+ */
+#define emberAfFillCommandDevice                                                                                                   \
+    ManagementClusterUpdateCIN(issuerEventId, implementationTime, providerId, customerIdNumber) emberAfFillExternalBuffer(         \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_UPDATE_CIN_COMMAND_ID, "uuuu", issuerEventId, implementationTime, providerId, customerIdNumber);
+
+/** @brief Command description for GetEventLog
+ *
+ * Command: GetEventLog
+ * @param eventControlLogId EventControlLogId
+ * @param logId EventLogId
+ * @param eventId INT16U
+ * @param eventId INT16U
+ * @param startTime UTC_TIME
+ * @param eventTime UTC_TIME
+ * @param endTime UTC_TIME
+ * @param eventControl EventActionControl
+ * @param numberOfEvents INT8U
+ * @param eventData OCTET_STRING
+ * @param eventOffset INT16U
+ */
+#define emberAfFillCommandEventsClusterGetEventLog(eventControlLogId, logId, eventId, eventId, startTime, eventTime, endTime,      \
+                                                   eventControl, numberOfEvents, eventData, eventOffset)                           \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_GET_EVENT_LOG_COMMAND_ID, "uuuuuuuuuuu", eventControlLogId, logId, eventId, eventId, startTime,  \
+                              eventTime, endTime, eventControl, numberOfEvents, eventData, eventOffset);
+
+/** @brief Command description for ClearEventLogRequest
+ *
+ * Command: ClearEventLogRequest
+ * @param logId EventLogId
+ * @param totalNumberOfEvents INT16U
+ * @param commandIndex INT8U
+ * @param totalCommands INT8U
+ * @param logPayloadControl NumberOfEventsLogPayloadControl
+ * @param logPayload EventLogPayload []
+ * @param logPayloadLen int
+ */
+#define emberAfFillCommandEventsClusterClearEventLogRequest(logId, totalNumberOfEvents, commandIndex, totalCommands,               \
+                                                            logPayloadControl, logPayload, logPayloadLen)                          \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_CLEAR_EVENT_LOG_REQUEST_COMMAND_ID, "uuuuub", logId, totalNumberOfEvents, commandIndex,          \
+                              totalCommands, logPayloadControl, logPayload, logPayloadLen);
+
+/** @brief Command description for ClearEventLogResponse
+ *
+ * Command: ClearEventLogResponse
+ * @param clearedEventsLogs ClearedEventsLogs
+ */
+#define emberAfFillCommandEventsClusterClearEventLogResponse(clearedEventsLogs)                                                    \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_CLEAR_EVENT_LOG_RESPONSE_COMMAND_ID, "u", clearedEventsLogs);
+
+/** @brief Command description for PairingResponse
+ *
+ * Command: PairingResponse
+ * @param pairingInformationVersion INT32U
+ * @param localPairingInformationVersion INT32U
+ * @param totalNumberOfDevices INT8U
+ * @param eui64OfRequestingDevice IEEE_ADDRESS
+ * @param commandIndex INT8U
+ * @param totalNumberOfCommands INT8U
+ * @param eui64s IEEE_ADDRESS []
+ * @param eui64sLen int
+ */
+#define emberAfFillCommandMDU                                                                                                      \
+    PairingClusterPairingResponse(pairingInformationVersion, localPairingInformationVersion, totalNumberOfDevices,                 \
+                                  eui64OfRequestingDevice, commandIndex, totalNumberOfCommands, eui64s, eui64sLen)                 \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_PAIRING_RESPONSE_COMMAND_ID, "uuuuuub", pairingInformationVersion,                           \
+                                  localPairingInformationVersion, totalNumberOfDevices, eui64OfRequestingDevice, commandIndex,     \
+                                  totalNumberOfCommands, eui64s, eui64sLen);
+
+/** @brief Command description for GetSuspendZclMessagesStatus
+ *
+ * Command: GetSuspendZclMessagesStatus
+ * @param period INT8U
+ */
+#define emberAfFillCommandSub                                                                                                      \
+    -GHzClusterGetSuspendZclMessagesStatus(period)                                                                                 \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_SUSPEND_ZCL_MESSAGES_STATUS_COMMAND_ID, "u", period);
+
+/** @brief Command description for InitiateKeyEstablishmentRequest
+ *
+ * Command: InitiateKeyEstablishmentRequest
+ * @param keyEstablishmentSuite BITMAP16
+ * @param requestedKeyEstablishmentSuite BITMAP16
+ * @param ephemeralDataGenerateTime INT8U
+ * @param ephemeralDataGenerateTime INT8U
+ * @param confirmKeyGenerateTime INT8U
+ * @param confirmKeyGenerateTime INT8U
+ * @param identity Identity
+ * @param identity Identity
+ */
+#define emberAfFillCommandKey                                                                                                      \
+    EstablishmentClusterInitiateKeyEstablishmentRequest(keyEstablishmentSuite, requestedKeyEstablishmentSuite,                     \
+                                                        ephemeralDataGenerateTime, ephemeralDataGenerateTime,                      \
+                                                        confirmKeyGenerateTime, confirmKeyGenerateTime, identity, identity)        \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_INITIATE_KEY_ESTABLISHMENT_REQUEST_COMMAND_ID, "uuuuuuuu", keyEstablishmentSuite,            \
+                                  requestedKeyEstablishmentSuite, ephemeralDataGenerateTime, ephemeralDataGenerateTime,            \
+                                  confirmKeyGenerateTime, confirmKeyGenerateTime, identity, identity);
+
+/** @brief Command description for EphemeralDataRequest
+ *
+ * Command: EphemeralDataRequest
+ * @param ephemeralData EphemeralData
+ * @param ephemeralData EphemeralData
+ */
+#define emberAfFillCommandKey                                                                                                      \
+    EstablishmentClusterEphemeralDataRequest(ephemeralData, ephemeralData)                                                         \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_EPHEMERAL_DATA_REQUEST_COMMAND_ID, "uu", ephemeralData, ephemeralData);
+
+/** @brief Command description for ConfirmKeyDataRequest
+ *
+ * Command: ConfirmKeyDataRequest
+ * @param secureMessageAuthenticationCode Smac
+ * @param secureMessageAuthenticationCode Smac
+ */
+#define emberAfFillCommandKey                                                                                                      \
+    EstablishmentClusterConfirmKeyDataRequest(secureMessageAuthenticationCode, secureMessageAuthenticationCode)                    \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_CONFIRM_KEY_DATA_REQUEST_COMMAND_ID, "uu", secureMessageAuthenticationCode,                  \
+                                  secureMessageAuthenticationCode);
+
+/** @brief Command description for TerminateKeyEstablishment
+ *
+ * Command: TerminateKeyEstablishment
+ * @param statusCode AmiKeyEstablishmentStatus
+ * @param waitTime INT8U
+ * @param keyEstablishmentSuite BITMAP16
+ */
+#define emberAfFillCommandKey                                                                                                      \
+    EstablishmentClusterTerminateKeyEstablishment(statusCode, waitTime, keyEstablishmentSuite)                                     \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_TERMINATE_KEY_ESTABLISHMENT_COMMAND_ID, "uuu", statusCode, waitTime, keyEstablishmentSuite);
+
+/** @brief Command description for RequestInformation
+ *
+ * Command: RequestInformation
+ * @param inquiryId ENUM8
+ * @param number INT8U
+ * @param dataTypeId BITMAP8
+ * @param buffer INT8U []
+ * @param bufferLen int
+ * @param requestInformationPayload INT8U []
+ * @param requestInformationPayloadLen int
+ */
+#define emberAfFillCommandInformationClusterRequestInformation(inquiryId, number, dataTypeId, buffer, bufferLen,                   \
+                                                               requestInformationPayload, requestInformationPayloadLen)            \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_REQUEST_INFORMATION_COMMAND_ID, "uuubb", inquiryId, number, dataTypeId, buffer, bufferLen,       \
+                              requestInformationPayload, requestInformationPayloadLen);
+
+/** @brief Command description for PushInformationResponse
+ *
+ * Command: PushInformationResponse
+ * @param notificationList Notification []
+ * @param notificationListLen int
+ * @param contents INT8U []
+ * @param contentsLen int
+ */
+#define emberAfFillCommandInformationClusterPushInformationResponse(notificationList, notificationListLen, contents, contentsLen)  \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_PUSH_INFORMATION_RESPONSE_COMMAND_ID, "bb", notificationList, notificationListLen, contents,     \
+                              contentsLen);
+
+/** @brief Command description for SendPreference
+ *
+ * Command: SendPreference
+ * @param preferenceType INT16U
+ * @param statusFeedbackList Status []
+ * @param statusFeedbackListLen int
+ * @param preferencePayload INT8U []
+ * @param preferencePayloadLen int
+ */
+#define emberAfFillCommandInformationClusterSendPreference(preferenceType, statusFeedbackList, statusFeedbackListLen,              \
+                                                           preferencePayload, preferencePayloadLen)                                \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_SEND_PREFERENCE_COMMAND_ID, "ubb", preferenceType, statusFeedbackList, statusFeedbackListLen,    \
+                              preferencePayload, preferencePayloadLen);
+
+/** @brief Command description for ServerRequestPreference
+ *
+ * Command: ServerRequestPreference
+ * @param statusFeedback Status
+ * @param preferenceType INT16U
+ * @param preferencePayload INT8U []
+ * @param preferencePayloadLen int
+ */
+#define emberAfFillCommandInformationClusterServerRequestPreference(statusFeedback, preferenceType, preferencePayload,             \
+                                                                    preferencePayloadLen)                                          \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_SERVER_REQUEST_PREFERENCE_COMMAND_ID, "uub", statusFeedback, preferenceType, preferencePayload,  \
+                              preferencePayloadLen);
+
+/** @brief Command description for Update
+ *
+ * Command: Update
+ * @param accessControl ENUM8
+ * @param statusFeedbackList Status []
+ * @param statusFeedbackListLen int
+ * @param option BITMAP8
+ * @param contents INT8U []
+ * @param contentsLen int
+ */
+#define emberAfFillCommandInformationClusterUpdate(accessControl, statusFeedbackList, statusFeedbackListLen, option, contents,     \
+                                                   contentsLen)                                                                    \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_UPDATE_COMMAND_ID, "ubub", accessControl, statusFeedbackList, statusFeedbackListLen, option,     \
+                              contents, contentsLen);
+
+/** @brief Command description for Delete
+ *
+ * Command: Delete
+ * @param deletionOptions BITMAP8
+ * @param notificationList Notification []
+ * @param notificationListLen int
+ * @param contentIds INT16U []
+ * @param contentIdsLen int
+ */
+#define emberAfFillCommandInformationClusterDelete(deletionOptions, notificationList, notificationListLen, contentIds,             \
+                                                   contentIdsLen)                                                                  \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_DELETE_COMMAND_ID, "ubb", deletionOptions, notificationList, notificationListLen, contentIds,    \
+                              contentIdsLen);
+
+/** @brief Command description for ConfigureNodeDescription
+ *
+ * Command: ConfigureNodeDescription
+ * @param description CHAR_STRING
+ * @param notificationList Notification []
+ * @param notificationListLen int
+ */
+#define emberAfFillCommandInformationClusterConfigureNodeDescription(description, notificationList, notificationListLen)           \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_CONFIGURE_NODE_DESCRIPTION_COMMAND_ID, "ub", description, notificationList,                      \
+                              notificationListLen);
+
+/** @brief Command description for ConfigureDeliveryEnable
+ *
+ * Command: ConfigureDeliveryEnable
+ * @param enable BOOLEAN
+ */
+#define emberAfFillCommandInformationClusterConfigureDeliveryEnable(enable)                                                        \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_CONFIGURE_DELIVERY_ENABLE_COMMAND_ID, "u", enable);
+
+/** @brief Command description for ConfigurePushInformationTimer
+ *
+ * Command: ConfigurePushInformationTimer
+ * @param timer INT32U
+ */
+#define emberAfFillCommandInformationClusterConfigurePushInformationTimer(timer)                                                   \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_CONFIGURE_PUSH_INFORMATION_TIMER_COMMAND_ID, "u", timer);
+
+/** @brief Command description for ConfigureSetRootId
+ *
+ * Command: ConfigureSetRootId
+ * @param rootId INT16U
+ */
+#define emberAfFillCommandInformationClusterConfigureSetRootId(rootId)                                                             \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_CONFIGURE_SET_ROOT_ID_COMMAND_ID, "u", rootId);
+
+/** @brief Command description for ReadFileRequest
+ *
+ * Command: ReadFileRequest
+ * @param fileIndex INT16U
+ * @param writeOptions BITMAP8
+ * @param fileStartPositionAndRequestedOctetCount INT8U []
+ * @param fileStartPositionAndRequestedOctetCountLen int
+ * @param fileSize INT8U []
+ * @param fileSizeLen int
+ */
+#define emberAfFillCommandData                                                                                                     \
+    SharingClusterReadFileRequest(fileIndex, writeOptions, fileStartPositionAndRequestedOctetCount,                                \
+                                  fileStartPositionAndRequestedOctetCountLen, fileSize, fileSizeLen)                               \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_READ_FILE_REQUEST_COMMAND_ID, "uubb", fileIndex, writeOptions,                               \
+                                  fileStartPositionAndRequestedOctetCount, fileStartPositionAndRequestedOctetCountLen, fileSize,   \
+                                  fileSizeLen);
+
+/** @brief Command description for ReadRecordRequest
+ *
+ * Command: ReadRecordRequest
+ * @param fileIndex INT16U
+ * @param fileIndex INT16U
+ * @param fileStartRecordAndRequestedRecordCount INT8U []
+ * @param fileStartRecordAndRequestedRecordCountLen int
+ * @param fileStartPosition INT32U
+ * @param octetCount INT32U
+ */
+#define emberAfFillCommandData                                                                                                     \
+    SharingClusterReadRecordRequest(fileIndex, fileIndex, fileStartRecordAndRequestedRecordCount,                                  \
+                                    fileStartRecordAndRequestedRecordCountLen, fileStartPosition, octetCount)                      \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_READ_RECORD_REQUEST_COMMAND_ID, "uubuu", fileIndex, fileIndex,                               \
+                                  fileStartRecordAndRequestedRecordCount, fileStartRecordAndRequestedRecordCountLen,               \
+                                  fileStartPosition, octetCount);
+
+/** @brief Command description for WriteFileResponse
+ *
+ * Command: WriteFileResponse
+ * @param status ENUM8
+ * @param fileIndex INT16U
+ * @param fileIndex INT8U []
+ * @param fileIndexLen int
+ * @param fileStartRecord INT16U
+ * @param recordCount INT16U
+ */
+#define emberAfFillCommandData                                                                                                     \
+    SharingClusterWriteFileResponse(status, fileIndex, fileIndex, fileIndexLen, fileStartRecord, recordCount)                      \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_WRITE_FILE_RESPONSE_COMMAND_ID, "uubuu", status, fileIndex, fileIndex, fileIndexLen,         \
+                                  fileStartRecord, recordCount);
+
+/** @brief Command description for FileTransmission
+ *
+ * Command: FileTransmission
+ * @param transmitOptions BITMAP8
+ * @param buffer INT8U []
+ * @param bufferLen int
+ */
+#define emberAfFillCommandData                                                                                                     \
+    SharingClusterFileTransmission(transmitOptions, buffer, bufferLen)                                                             \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_FILE_TRANSMISSION_COMMAND_ID, "ub", transmitOptions, buffer, bufferLen);
+
+/** @brief Command description for RecordTransmission
+ *
+ * Command: RecordTransmission
+ * @param transmitOptions BITMAP8
+ * @param buffer INT8U []
+ * @param bufferLen int
+ */
+#define emberAfFillCommandData                                                                                                     \
+    SharingClusterRecordTransmission(transmitOptions, buffer, bufferLen)                                                           \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_RECORD_TRANSMISSION_COMMAND_ID, "ub", transmitOptions, buffer, bufferLen);
+
+/** @brief Command description for SearchGame
+ *
+ * Command: SearchGame
+ * @param specificGame ENUM8
+ * @param gameId INT16U
+ * @param gameId INT16U
+ * @param gameMaster BOOLEAN
+ * @param listOfGame CHAR_STRING
+ */
+#define emberAfFillCommandGamingClusterSearchGame(specificGame, gameId, gameId, gameMaster, listOfGame)                            \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_SEARCH_GAME_COMMAND_ID, "uuuuu", specificGame, gameId, gameId, gameMaster, listOfGame);
+
+/** @brief Command description for JoinGame
+ *
+ * Command: JoinGame
+ * @param gameId INT16U
+ * @param commandId INT8U
+ * @param joinAsMaster BOOLEAN
+ * @param status BITMAP8
+ * @param nameOfGame CHAR_STRING
+ * @param message CHAR_STRING
+ */
+#define emberAfFillCommandGamingClusterJoinGame(gameId, commandId, joinAsMaster, status, nameOfGame, message)                      \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_JOIN_GAME_COMMAND_ID, "uuuuuu", gameId, commandId, joinAsMaster, status, nameOfGame, message);
+
+/** @brief Command description for StartGame
+ *
+ * Command: StartGame
+ */
+#define emberAfFillCommandGamingClusterStartGame()                                                                                 \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_START_GAME_COMMAND_ID, "", );
+
+/** @brief Command description for PauseGame
+ *
+ * Command: PauseGame
+ */
+#define emberAfFillCommandGamingClusterPauseGame()                                                                                 \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_PAUSE_GAME_COMMAND_ID, "", );
+
+/** @brief Command description for ResumeGame
+ *
+ * Command: ResumeGame
+ */
+#define emberAfFillCommandGamingClusterResumeGame()                                                                                \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_RESUME_GAME_COMMAND_ID, "", );
+
+/** @brief Command description for QuitGame
+ *
+ * Command: QuitGame
+ */
+#define emberAfFillCommandGamingClusterQuitGame()                                                                                  \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_QUIT_GAME_COMMAND_ID, "", );
+
+/** @brief Command description for EndGame
+ *
+ * Command: EndGame
+ */
+#define emberAfFillCommandGamingClusterEndGame()                                                                                   \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_END_GAME_COMMAND_ID, "", );
+
+/** @brief Command description for StartOver
+ *
+ * Command: StartOver
+ */
+#define emberAfFillCommandGamingClusterStartOver()                                                                                 \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_START_OVER_COMMAND_ID, "", );
+
+/** @brief Command description for ActionControl
+ *
+ * Command: ActionControl
+ * @param actions BITMAP32
+ */
+#define emberAfFillCommandGamingClusterActionControl(actions)                                                                      \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_ACTION_CONTROL_COMMAND_ID, "u", actions);
+
+/** @brief Command description for DownloadGame
+ *
+ * Command: DownloadGame
+ */
+#define emberAfFillCommandGamingClusterDownloadGame()                                                                              \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_DOWNLOAD_GAME_COMMAND_ID, "", );
+
+/** @brief Command description for PathCreation
+ *
+ * Command: PathCreation
+ * @param originatorAddress DATA16
+ * @param originatorAddress DATA16
+ * @param destinationAddress DATA16
+ * @param destinationAddress DATA16
+ * @param dataRate INT8U
+ * @param dataRate INT8U
+ */
+#define emberAfFillCommandData                                                                                                     \
+    Rate ControlClusterPathCreation(originatorAddress, originatorAddress, destinationAddress, destinationAddress, dataRate,        \
+                                    dataRate)                                                                                      \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_PATH_CREATION_COMMAND_ID, "uuuuuu", originatorAddress, originatorAddress,                    \
+                                  destinationAddress, destinationAddress, dataRate, dataRate);
+
+/** @brief Command description for DataRateNotification
+ *
+ * Command: DataRateNotification
+ * @param originatorAddress DATA16
+ * @param destinationAddress DATA16
+ * @param dataRate INT8U
+ */
+#define emberAfFillCommandData                                                                                                     \
+    Rate ControlClusterDataRateNotification(originatorAddress, destinationAddress, dataRate)                                       \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_DATA_RATE_NOTIFICATION_COMMAND_ID, "uuu", originatorAddress, destinationAddress, dataRate);
+
+/** @brief Command description for PathDeletion
+ *
+ * Command: PathDeletion
+ * @param originatorAddress DATA16
+ * @param destinationAddress DATA16
+ */
+#define emberAfFillCommandData                                                                                                     \
+    Rate ControlClusterPathDeletion(originatorAddress, destinationAddress)                                                         \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_PATH_DELETION_COMMAND_ID, "uu", originatorAddress, destinationAddress);
+
+/** @brief Command description for EstablishmentRequest
+ *
+ * Command: EstablishmentRequest
+ * @param flag BITMAP8
+ * @param ackNack ENUM8
+ * @param codecType ENUM8
+ * @param codecType ENUM8
+ * @param sampFreq ENUM8
+ * @param codecRate ENUM8
+ * @param serviceType ENUM8
+ * @param buffer INT8U []
+ * @param bufferLen int
+ */
+#define emberAfFillCommandVoice                                                                                                    \
+    over ZigBeeClusterEstablishmentRequest(flag, ackNack, codecType, codecType, sampFreq, codecRate, serviceType, buffer,          \
+                                           bufferLen)                                                                              \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_ESTABLISHMENT_REQUEST_COMMAND_ID, "uuuuuuub", flag, ackNack, codecType, codecType, sampFreq, \
+                                  codecRate, serviceType, buffer, bufferLen);
+
+/** @brief Command description for VoiceTransmission
+ *
+ * Command: VoiceTransmission
+ * @param voiceData INT8U []
+ * @param voiceDataLen int
+ * @param sequenceNumber INT8U
+ * @param errorFlag ENUM8
+ */
+#define emberAfFillCommandVoice                                                                                                    \
+    over ZigBeeClusterVoiceTransmission(voiceData, voiceDataLen, sequenceNumber, errorFlag)                                        \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_VOICE_TRANSMISSION_COMMAND_ID, "buu", voiceData, voiceDataLen, sequenceNumber, errorFlag);
+
+/** @brief Command description for VoiceTransmissionCompletion
+ *
+ * Command: VoiceTransmissionCompletion
+ * @param controlType ENUM8
+ */
+#define emberAfFillCommandVoice                                                                                                    \
+    over ZigBeeClusterVoiceTransmissionCompletion(controlType)                                                                     \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_VOICE_TRANSMISSION_COMPLETION_COMMAND_ID, "u", controlType);
+
+/** @brief Command description for ControlResponse
+ *
+ * Command: ControlResponse
+ * @param ackNack ENUM8
+ */
+#define emberAfFillCommandVoice                                                                                                    \
+    over ZigBeeClusterControlResponse(ackNack) emberAfFillExternalBuffer(mask,                                                     \
+                                                                                                                                   \
+                                                                         ZCL_CONTROL_RESPONSE_COMMAND_ID, "u", ackNack);
+
+/** @brief Command description for JoinChatRequest
+ *
+ * Command: JoinChatRequest
+ * @param uid INT16U
+ * @param status ENUM8
+ * @param nickname CHAR_STRING
+ * @param cid INT16U
+ * @param cid INT16U
+ */
+#define emberAfFillCommandChattingClusterJoinChatRequest(uid, status, nickname, cid, cid)                                          \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_JOIN_CHAT_REQUEST_COMMAND_ID, "uuuuu", uid, status, nickname, cid, cid);
+
+/** @brief Command description for LeaveChatRequest
+ *
+ * Command: LeaveChatRequest
+ * @param cid INT16U
+ * @param status ENUM8
+ * @param uid INT16U
+ * @param cid INT16U
+ * @param chatParticipantList ChatParticipant []
+ * @param chatParticipantListLen int
+ */
+#define emberAfFillCommandChattingClusterLeaveChatRequest(cid, status, uid, cid, chatParticipantList, chatParticipantListLen)      \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_LEAVE_CHAT_REQUEST_COMMAND_ID, "uuuub", cid, status, uid, cid, chatParticipantList,              \
+                              chatParticipantListLen);
+
+/** @brief Command description for SearchChatRequest
+ *
+ * Command: SearchChatRequest
+ * @param cid INT16U
+ * @param uid INT16U
+ * @param nickname CHAR_STRING
+ */
+#define emberAfFillCommandChattingClusterSearchChatRequest(cid, uid, nickname)                                                     \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_SEARCH_CHAT_REQUEST_COMMAND_ID, "uuu", cid, uid, nickname);
+
+/** @brief Command description for SwitchChairmanResponse
+ *
+ * Command: SwitchChairmanResponse
+ * @param cid INT16U
+ * @param cid INT16U
+ * @param uid INT16U
+ * @param uid INT16U
+ * @param nickname CHAR_STRING
+ */
+#define emberAfFillCommandChattingClusterSwitchChairmanResponse(cid, cid, uid, uid, nickname)                                      \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_SWITCH_CHAIRMAN_RESPONSE_COMMAND_ID, "uuuuu", cid, cid, uid, uid, nickname);
+
+/** @brief Command description for StartChatRequest
+ *
+ * Command: StartChatRequest
+ * @param name CHAR_STRING
+ * @param options BITMAP8
+ * @param uid INT16U
+ * @param chatRoomList ChatRoom []
+ * @param chatRoomListLen int
+ * @param nickname CHAR_STRING
+ */
+#define emberAfFillCommandChattingClusterStartChatRequest(name, options, uid, chatRoomList, chatRoomListLen, nickname)             \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_START_CHAT_REQUEST_COMMAND_ID, "uuubu", name, options, uid, chatRoomList, chatRoomListLen,       \
+                              nickname);
+
+/** @brief Command description for ChatMessage
+ *
+ * Command: ChatMessage
+ * @param destinationUid INT16U
+ * @param cid INT16U
+ * @param sourceUid INT16U
+ * @param cid INT16U
+ * @param nickname CHAR_STRING
+ * @param message CHAR_STRING
+ */
+#define emberAfFillCommandChattingClusterChatMessage(destinationUid, cid, sourceUid, cid, nickname, message)                       \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_CHAT_MESSAGE_COMMAND_ID, "uuuuuu", destinationUid, cid, sourceUid, cid, nickname, message);
+
+/** @brief Command description for GetNodeInformationRequest
+ *
+ * Command: GetNodeInformationRequest
+ * @param cid INT16U
+ * @param cid INT16U
+ * @param uid INT16U
+ * @param nodeInformationList NodeInformation []
+ * @param nodeInformationListLen int
+ */
+#define emberAfFillCommandChattingClusterGetNodeInformationRequest(cid, cid, uid, nodeInformationList, nodeInformationListLen)     \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_GET_NODE_INFORMATION_REQUEST_COMMAND_ID, "uuub", cid, cid, uid, nodeInformationList,             \
+                              nodeInformationListLen);
+
+/** @brief Command description for SwitchChairmanNotification
+ *
+ * Command: SwitchChairmanNotification
+ * @param cid INT16U
+ * @param uid INT16U
+ * @param address DATA16
+ * @param endpoint INT8U
+ */
+#define emberAfFillCommandChattingClusterSwitchChairmanNotification(cid, uid, address, endpoint)                                   \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_SWITCH_CHAIRMAN_NOTIFICATION_COMMAND_ID, "uuuu", cid, uid, address, endpoint);
+
+/** @brief Command description for GetNodeInformationResponse
+ *
+ * Command: GetNodeInformationResponse
+ * @param status ENUM8
+ * @param cid INT16U
+ * @param uid INT16U
+ * @param addressEndpointAndNickname INT8U []
+ * @param addressEndpointAndNicknameLen int
+ */
+#define emberAfFillCommandChattingClusterGetNodeInformationResponse(status, cid, uid, addressEndpointAndNickname,                  \
+                                                                    addressEndpointAndNicknameLen)                                 \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_GET_NODE_INFORMATION_RESPONSE_COMMAND_ID, "uuub", status, cid, uid, addressEndpointAndNickname,  \
+                              addressEndpointAndNicknameLen);
+
+/** @brief Command description for BuyRequest
+ *
+ * Command: BuyRequest
+ * @param userId OCTET_STRING
+ * @param serialNumber OCTET_STRING
+ * @param userType INT16U
+ * @param currency INT32U
+ * @param serviceId INT16U
+ * @param priceTrailingDigit INT8U
+ * @param goodId OCTET_STRING
+ * @param price INT32U
+ * @param timestamp OCTET_STRING
+ * @param transId INT16U
+ * @param transStatus ENUM8
+ */
+#define emberAfFillCommandPaymentClusterBuyRequest(userId, serialNumber, userType, currency, serviceId, priceTrailingDigit,        \
+                                                   goodId, price, timestamp, transId, transStatus)                                 \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_BUY_REQUEST_COMMAND_ID, "uuuuuuuuuuu", userId, serialNumber, userType, currency, serviceId,      \
+                              priceTrailingDigit, goodId, price, timestamp, transId, transStatus);
+
+/** @brief Command description for AcceptPayment
+ *
+ * Command: AcceptPayment
+ * @param userId OCTET_STRING
+ * @param serialNumber OCTET_STRING
+ * @param userType INT16U
+ * @param currency INT32U
+ * @param serviceId INT16U
+ * @param priceTrailingDigit INT8U
+ * @param goodId OCTET_STRING
+ * @param price INT32U
+ * @param timestamp OCTET_STRING
+ */
+#define emberAfFillCommandPaymentClusterAcceptPayment(userId, serialNumber, userType, currency, serviceId, priceTrailingDigit,     \
+                                                      goodId, price, timestamp)                                                    \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_ACCEPT_PAYMENT_COMMAND_ID, "uuuuuuuuu", userId, serialNumber, userType, currency, serviceId,     \
+                              priceTrailingDigit, goodId, price, timestamp);
+
+/** @brief Command description for PaymentConfirm
+ *
+ * Command: PaymentConfirm
+ * @param serialNumber OCTET_STRING
+ * @param serialNumber OCTET_STRING
+ * @param transId INT16U
+ * @param status ENUM8
+ * @param transStatus ENUM8
+ */
+#define emberAfFillCommandPaymentClusterPaymentConfirm(serialNumber, serialNumber, transId, status, transStatus)                   \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_PAYMENT_CONFIRM_COMMAND_ID, "uuuuu", serialNumber, serialNumber, transId, status, transStatus);
+
+/** @brief Command description for Subscribe
+ *
+ * Command: Subscribe
+ * @param userId OCTET_STRING
+ * @param userId OCTET_STRING
+ * @param serviceId INT16U
+ * @param serviceId INT16U
+ * @param serviceProviderId INT16U
+ * @param serviceProviderId INT16U
+ */
+#define emberAfFillCommandBillingClusterSubscribe(userId, userId, serviceId, serviceId, serviceProviderId, serviceProviderId)      \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_SUBSCRIBE_COMMAND_ID, "uuuuuu", userId, userId, serviceId, serviceId, serviceProviderId,         \
+                              serviceProviderId);
+
+/** @brief Command description for Unsubscribe
+ *
+ * Command: Unsubscribe
+ * @param userId OCTET_STRING
+ * @param userId OCTET_STRING
+ * @param serviceId INT16U
+ * @param serviceId INT16U
+ * @param serviceProviderId INT16U
+ * @param serviceProviderId INT16U
+ * @param timestamp OCTET_STRING
+ * @param duration INT16U
+ */
+#define emberAfFillCommandBillingClusterUnsubscribe(userId, userId, serviceId, serviceId, serviceProviderId, serviceProviderId,    \
+                                                    timestamp, duration)                                                           \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_UNSUBSCRIBE_COMMAND_ID, "uuuuuuuu", userId, userId, serviceId, serviceId, serviceProviderId,     \
+                              serviceProviderId, timestamp, duration);
+
+/** @brief Command description for StartBillingSession
+ *
+ * Command: StartBillingSession
+ * @param userId OCTET_STRING
+ * @param serviceId INT16U
+ * @param serviceProviderId INT16U
+ */
+#define emberAfFillCommandBillingClusterStartBillingSession(userId, serviceId, serviceProviderId)                                  \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_START_BILLING_SESSION_COMMAND_ID, "uuu", userId, serviceId, serviceProviderId);
+
+/** @brief Command description for StopBillingSession
+ *
+ * Command: StopBillingSession
+ * @param userId OCTET_STRING
+ * @param serviceId INT16U
+ * @param serviceProviderId INT16U
+ */
+#define emberAfFillCommandBillingClusterStopBillingSession(userId, serviceId, serviceProviderId)                                   \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_STOP_BILLING_SESSION_COMMAND_ID, "uuu", userId, serviceId, serviceProviderId);
+
+/** @brief Command description for BillStatusNotification
+ *
+ * Command: BillStatusNotification
+ * @param userId OCTET_STRING
+ * @param status ENUM8
+ */
+#define emberAfFillCommandBillingClusterBillStatusNotification(userId, status)                                                     \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_BILL_STATUS_NOTIFICATION_COMMAND_ID, "uu", userId, status);
+
+/** @brief Command description for SessionKeepAlive
+ *
+ * Command: SessionKeepAlive
+ * @param userId OCTET_STRING
+ * @param serviceId INT16U
+ * @param serviceProviderId INT16U
+ */
+#define emberAfFillCommandBillingClusterSessionKeepAlive(userId, serviceId, serviceProviderId)                                     \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_SESSION_KEEP_ALIVE_COMMAND_ID, "uuu", userId, serviceId, serviceProviderId);
+
+/** @brief Command description for GetAlerts
+ *
+ * Command: GetAlerts
+ * @param alertsCount AlertCount
+ * @param alertStructures AlertStructure []
+ * @param alertStructuresLen int
+ */
+#define emberAfFillCommandAppliance                                                                                                \
+    Events and AlertClusterGetAlerts(alertsCount, alertStructures, alertStructuresLen)                                             \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_ALERTS_COMMAND_ID, "ub", alertsCount, alertStructures, alertStructuresLen);
+
+/** @brief Command description for AlertsNotification
+ *
+ * Command: AlertsNotification
+ * @param alertsCount AlertCount
+ * @param alertStructures AlertStructure []
+ * @param alertStructuresLen int
+ */
+#define emberAfFillCommandAppliance                                                                                                \
+    Events and AlertClusterAlertsNotification(alertsCount, alertStructures, alertStructuresLen)                                    \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_ALERTS_NOTIFICATION_COMMAND_ID, "ub", alertsCount, alertStructures, alertStructuresLen);
+
+/** @brief Command description for EventsNotification
+ *
+ * Command: EventsNotification
+ * @param eventHeader INT8U
+ * @param eventId EventIdentification
+ */
+#define emberAfFillCommandAppliance                                                                                                \
+    Events and AlertClusterEventsNotification(eventHeader, eventId)                                                                \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_EVENTS_NOTIFICATION_COMMAND_ID, "uu", eventHeader, eventId);
+
+/** @brief Command description for LogNotification
+ *
+ * Command: LogNotification
+ * @param timeStamp TIME_OF_DAY
+ * @param logId INT32U
+ * @param logId INT32U
+ * @param logLength INT32U
+ * @param logPayload INT8U []
+ * @param logPayloadLen int
+ */
+#define emberAfFillCommandAppliance                                                                                                \
+    StatisticsClusterLogNotification(timeStamp, logId, logId, logLength, logPayload, logPayloadLen) emberAfFillExternalBuffer(     \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_LOG_NOTIFICATION_COMMAND_ID, "uuuub", timeStamp, logId, logId, logLength, logPayload, logPayloadLen);
+
+/** @brief Command description for LogQueueRequest
+ *
+ * Command: LogQueueRequest
+ * @param timeStamp TIME_OF_DAY
+ * @param logId INT32U
+ * @param logLength INT32U
+ * @param logPayload INT8U []
+ * @param logPayloadLen int
+ */
+#define emberAfFillCommandAppliance                                                                                                \
+    StatisticsClusterLogQueueRequest(timeStamp, logId, logLength, logPayload, logPayloadLen) emberAfFillExternalBuffer(            \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_LOG_QUEUE_REQUEST_COMMAND_ID, "uuub", timeStamp, logId, logLength, logPayload, logPayloadLen);
+
+/** @brief Command description for LogQueueResponse
+ *
+ * Command: LogQueueResponse
+ * @param logQueueSize INT8U
+ * @param logIds INT32U []
+ * @param logIdsLen int
+ */
+#define emberAfFillCommandAppliance                                                                                                \
+    StatisticsClusterLogQueueResponse(logQueueSize, logIds, logIdsLen)                                                             \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_LOG_QUEUE_RESPONSE_COMMAND_ID, "ub", logQueueSize, logIds, logIdsLen);
+
+/** @brief Command description for StatisticsAvailable
+ *
+ * Command: StatisticsAvailable
+ * @param logQueueSize INT8U
+ * @param logIds INT32U []
+ * @param logIdsLen int
+ */
+#define emberAfFillCommandAppliance                                                                                                \
+    StatisticsClusterStatisticsAvailable(logQueueSize, logIds, logIdsLen)                                                          \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_STATISTICS_AVAILABLE_COMMAND_ID, "ub", logQueueSize, logIds, logIdsLen);
+
+/** @brief Command description for GetProfileInfoCommand
+ *
+ * Command: GetProfileInfoCommand
+ * @param profileCount INT8U
+ * @param profileIntervalPeriod ENUM8
+ * @param maxNumberOfIntervals INT8U
+ * @param listOfAttributes INT16U []
+ * @param listOfAttributesLen int
+ */
+#define emberAfFillCommandElectrical                                                                                               \
+    MeasurementClusterGetProfileInfoCommand(profileCount, profileIntervalPeriod, maxNumberOfIntervals, listOfAttributes,           \
+                                            listOfAttributesLen)                                                                   \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_PROFILE_INFO_COMMAND_COMMAND_ID, "uuub", profileCount, profileIntervalPeriod,            \
+                                  maxNumberOfIntervals, listOfAttributes, listOfAttributesLen);
+
+/** @brief Command description for GetMeasurementProfileResponseCommand
+ *
+ * Command: GetMeasurementProfileResponseCommand
+ * @param startTime INT32U
+ * @param attributeId INT16U
+ * @param status ENUM8
+ * @param startTime INT32U
+ * @param profileIntervalPeriod ENUM8
+ * @param numberOfIntervals ENUM8
+ * @param numberOfIntervalsDelivered INT8U
+ * @param attributeId INT16U
+ * @param intervals INT8U []
+ * @param intervalsLen int
+ */
+#define emberAfFillCommandElectrical                                                                                               \
+    MeasurementClusterGetMeasurementProfileResponseCommand(startTime, attributeId, status, startTime, profileIntervalPeriod,       \
+                                                           numberOfIntervals, numberOfIntervalsDelivered, attributeId, intervals,  \
+                                                           intervalsLen)                                                           \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_MEASUREMENT_PROFILE_RESPONSE_COMMAND_COMMAND_ID, "uuuuuuuub", startTime, attributeId,    \
+                                  status, startTime, profileIntervalPeriod, numberOfIntervals, numberOfIntervalsDelivered,         \
+                                  attributeId, intervals, intervalsLen);
+
+/** @brief Command description for ScanRequest
+ *
+ * Command: ScanRequest
+ * @param transaction INT32U
+ * @param zigbeeInformation ZigbeeInformation
+ * @param zllInformation ZllInformation
+ */
+#define emberAfFillCommandZLL                                                                                                      \
+    CommissioningClusterScanRequest(transaction, zigbeeInformation, zllInformation)                                                \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_SCAN_REQUEST_COMMAND_ID, "uuu", transaction, zigbeeInformation, zllInformation);
+
+/** @brief Command description for ScanResponse
+ *
+ * Command: ScanResponse
+ * @param transaction INT32U
+ * @param rssiCorrection INT8U
+ * @param zigbeeInformation ZigbeeInformation
+ * @param zllInformation ZllInformation
+ * @param keyBitmask KeyBitmask
+ * @param responseId INT32U
+ * @param extendedPanId IEEE_ADDRESS
+ * @param networkUpdateId INT8U
+ * @param logicalChannel INT8U
+ * @param panId INT16U
+ * @param networkAddress INT16U
+ * @param numberOfSubDevices INT8U
+ * @param totalGroupIds INT8U
+ * @param endpointId INT8U
+ * @param profileId INT16U
+ * @param deviceId INT16U
+ * @param version INT8U
+ * @param groupIdCount INT8U
+ */
+#define emberAfFillCommandZLL                                                                                                      \
+    CommissioningClusterScanResponse(transaction, rssiCorrection, zigbeeInformation, zllInformation, keyBitmask, responseId,       \
+                                     extendedPanId, networkUpdateId, logicalChannel, panId, networkAddress, numberOfSubDevices,    \
+                                     totalGroupIds, endpointId, profileId, deviceId, version, groupIdCount)                        \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_SCAN_RESPONSE_COMMAND_ID, "uuuuuuuuuuuuuuuuuu", transaction, rssiCorrection,                 \
+                                  zigbeeInformation, zllInformation, keyBitmask, responseId, extendedPanId, networkUpdateId,       \
+                                  logicalChannel, panId, networkAddress, numberOfSubDevices, totalGroupIds, endpointId, profileId, \
+                                  deviceId, version, groupIdCount);
+
+/** @brief Command description for DeviceInformationRequest
+ *
+ * Command: DeviceInformationRequest
+ * @param transaction INT32U
+ * @param startIndex INT8U
+ */
+#define emberAfFillCommandZLL                                                                                                      \
+    CommissioningClusterDeviceInformationRequest(transaction, startIndex)                                                          \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_DEVICE_INFORMATION_REQUEST_COMMAND_ID, "uu", transaction, startIndex);
+
+/** @brief Command description for DeviceInformationResponse
+ *
+ * Command: DeviceInformationResponse
+ * @param transaction INT32U
+ * @param numberOfSubDevices INT8U
+ * @param startIndex INT8U
+ * @param deviceInformationRecordCount INT8U
+ * @param deviceInformationRecordList DeviceInformationRecord []
+ * @param deviceInformationRecordListLen int
+ */
+#define emberAfFillCommandZLL                                                                                                      \
+    CommissioningClusterDeviceInformationResponse(transaction, numberOfSubDevices, startIndex, deviceInformationRecordCount,       \
+                                                  deviceInformationRecordList, deviceInformationRecordListLen)                     \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_DEVICE_INFORMATION_RESPONSE_COMMAND_ID, "uuuub", transaction, numberOfSubDevices,            \
+                                  startIndex, deviceInformationRecordCount, deviceInformationRecordList,                           \
+                                  deviceInformationRecordListLen);
+
+/** @brief Command description for IdentifyRequest
+ *
+ * Command: IdentifyRequest
+ * @param transaction INT32U
+ * @param identifyDuration INT16U
+ */
+#define emberAfFillCommandZLL                                                                                                      \
+    CommissioningClusterIdentifyRequest(transaction, identifyDuration)                                                             \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_IDENTIFY_REQUEST_COMMAND_ID, "uu", transaction, identifyDuration);
+
+/** @brief Command description for ResetToFactoryNewRequest
+ *
+ * Command: ResetToFactoryNewRequest
+ * @param transaction INT32U
+ */
+#define emberAfFillCommandZLL                                                                                                      \
+    CommissioningClusterResetToFactoryNewRequest(transaction)                                                                      \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_RESET_TO_FACTORY_NEW_REQUEST_COMMAND_ID, "u", transaction);
+
+/** @brief Command description for NetworkStartRequest
+ *
+ * Command: NetworkStartRequest
+ * @param transaction INT32U
+ * @param extendedPanId IEEE_ADDRESS
+ * @param keyIndex KeyIndex
+ * @param encryptedNetworkKey SECURITY_KEY
+ * @param logicalChannel INT8U
+ * @param panId INT16U
+ * @param networkAddress INT16U
+ * @param groupIdentifiersBegin INT16U
+ * @param groupIdentifiersEnd INT16U
+ * @param freeNetworkAddressRangeBegin INT16U
+ * @param freeNetworkAddressRangeEnd INT16U
+ * @param freeGroupIdentifierRangeBegin INT16U
+ * @param freeGroupIdentifierRangeEnd INT16U
+ * @param initiatorIeeeAddress IEEE_ADDRESS
+ * @param initiatorNetworkAddress INT16U
+ */
+#define emberAfFillCommandZLL                                                                                                      \
+    CommissioningClusterNetworkStartRequest(                                                                                       \
+        transaction, extendedPanId, keyIndex, encryptedNetworkKey, logicalChannel, panId, networkAddress, groupIdentifiersBegin,   \
+        groupIdentifiersEnd, freeNetworkAddressRangeBegin, freeNetworkAddressRangeEnd, freeGroupIdentifierRangeBegin,              \
+        freeGroupIdentifierRangeEnd, initiatorIeeeAddress, initiatorNetworkAddress)                                                \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_NETWORK_START_REQUEST_COMMAND_ID, "uuuuuuuuuuuuuuu", transaction, extendedPanId, keyIndex,   \
+                                  encryptedNetworkKey, logicalChannel, panId, networkAddress, groupIdentifiersBegin,               \
+                                  groupIdentifiersEnd, freeNetworkAddressRangeBegin, freeNetworkAddressRangeEnd,                   \
+                                  freeGroupIdentifierRangeBegin, freeGroupIdentifierRangeEnd, initiatorIeeeAddress,                \
+                                  initiatorNetworkAddress);
+
+/** @brief Command description for NetworkStartResponse
+ *
+ * Command: NetworkStartResponse
+ * @param transaction INT32U
+ * @param status ZllStatus
+ * @param extendedPanId IEEE_ADDRESS
+ * @param networkUpdateId INT8U
+ * @param logicalChannel INT8U
+ * @param panId INT16U
+ */
+#define emberAfFillCommandZLL                                                                                                      \
+    CommissioningClusterNetworkStartResponse(transaction, status, extendedPanId, networkUpdateId, logicalChannel, panId)           \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_NETWORK_START_RESPONSE_COMMAND_ID, "uuuuuu", transaction, status, extendedPanId,             \
+                                  networkUpdateId, logicalChannel, panId);
+
+/** @brief Command description for NetworkJoinRouterRequest
+ *
+ * Command: NetworkJoinRouterRequest
+ * @param transaction INT32U
+ * @param extendedPanId IEEE_ADDRESS
+ * @param keyIndex KeyIndex
+ * @param encryptedNetworkKey SECURITY_KEY
+ * @param networkUpdateId INT8U
+ * @param logicalChannel INT8U
+ * @param panId INT16U
+ * @param networkAddress INT16U
+ * @param groupIdentifiersBegin INT16U
+ * @param groupIdentifiersEnd INT16U
+ * @param freeNetworkAddressRangeBegin INT16U
+ * @param freeNetworkAddressRangeEnd INT16U
+ * @param freeGroupIdentifierRangeBegin INT16U
+ * @param freeGroupIdentifierRangeEnd INT16U
+ */
+#define emberAfFillCommandZLL                                                                                                      \
+    CommissioningClusterNetworkJoinRouterRequest(transaction, extendedPanId, keyIndex, encryptedNetworkKey, networkUpdateId,       \
+                                                 logicalChannel, panId, networkAddress, groupIdentifiersBegin,                     \
+                                                 groupIdentifiersEnd, freeNetworkAddressRangeBegin, freeNetworkAddressRangeEnd,    \
+                                                 freeGroupIdentifierRangeBegin, freeGroupIdentifierRangeEnd)                       \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_NETWORK_JOIN_ROUTER_REQUEST_COMMAND_ID, "uuuuuuuuuuuuuu", transaction, extendedPanId,        \
+                                  keyIndex, encryptedNetworkKey, networkUpdateId, logicalChannel, panId, networkAddress,           \
+                                  groupIdentifiersBegin, groupIdentifiersEnd, freeNetworkAddressRangeBegin,                        \
+                                  freeNetworkAddressRangeEnd, freeGroupIdentifierRangeBegin, freeGroupIdentifierRangeEnd);
+
+/** @brief Command description for NetworkJoinRouterResponse
+ *
+ * Command: NetworkJoinRouterResponse
+ * @param transaction INT32U
+ * @param status ZllStatus
+ */
+#define emberAfFillCommandZLL                                                                                                      \
+    CommissioningClusterNetworkJoinRouterResponse(transaction, status)                                                             \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_NETWORK_JOIN_ROUTER_RESPONSE_COMMAND_ID, "uu", transaction, status);
+
+/** @brief Command description for NetworkJoinEndDeviceRequest
+ *
+ * Command: NetworkJoinEndDeviceRequest
+ * @param transaction INT32U
+ * @param extendedPanId IEEE_ADDRESS
+ * @param keyIndex KeyIndex
+ * @param encryptedNetworkKey SECURITY_KEY
+ * @param networkUpdateId INT8U
+ * @param logicalChannel INT8U
+ * @param panId INT16U
+ * @param networkAddress INT16U
+ * @param groupIdentifiersBegin INT16U
+ * @param groupIdentifiersEnd INT16U
+ * @param freeNetworkAddressRangeBegin INT16U
+ * @param freeNetworkAddressRangeEnd INT16U
+ * @param freeGroupIdentifierRangeBegin INT16U
+ * @param freeGroupIdentifierRangeEnd INT16U
+ */
+#define emberAfFillCommandZLL                                                                                                      \
+    CommissioningClusterNetworkJoinEndDeviceRequest(transaction, extendedPanId, keyIndex, encryptedNetworkKey, networkUpdateId,    \
+                                                    logicalChannel, panId, networkAddress, groupIdentifiersBegin,                  \
+                                                    groupIdentifiersEnd, freeNetworkAddressRangeBegin, freeNetworkAddressRangeEnd, \
+                                                    freeGroupIdentifierRangeBegin, freeGroupIdentifierRangeEnd)                    \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_NETWORK_JOIN_END_DEVICE_REQUEST_COMMAND_ID, "uuuuuuuuuuuuuu", transaction, extendedPanId,    \
+                                  keyIndex, encryptedNetworkKey, networkUpdateId, logicalChannel, panId, networkAddress,           \
+                                  groupIdentifiersBegin, groupIdentifiersEnd, freeNetworkAddressRangeBegin,                        \
+                                  freeNetworkAddressRangeEnd, freeGroupIdentifierRangeBegin, freeGroupIdentifierRangeEnd);
+
+/** @brief Command description for NetworkJoinEndDeviceResponse
+ *
+ * Command: NetworkJoinEndDeviceResponse
+ * @param transaction INT32U
+ * @param status ZllStatus
+ */
+#define emberAfFillCommandZLL                                                                                                      \
+    CommissioningClusterNetworkJoinEndDeviceResponse(transaction, status)                                                          \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_NETWORK_JOIN_END_DEVICE_RESPONSE_COMMAND_ID, "uu", transaction, status);
+
+/** @brief Command description for NetworkUpdateRequest
+ *
+ * Command: NetworkUpdateRequest
+ * @param transaction INT32U
+ * @param extendedPanId IEEE_ADDRESS
+ * @param networkUpdateId INT8U
+ * @param logicalChannel INT8U
+ * @param panId INT16U
+ * @param networkAddress INT16U
+ */
+#define emberAfFillCommandZLL                                                                                                      \
+    CommissioningClusterNetworkUpdateRequest(transaction, extendedPanId, networkUpdateId, logicalChannel, panId, networkAddress)   \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_NETWORK_UPDATE_REQUEST_COMMAND_ID, "uuuuuu", transaction, extendedPanId, networkUpdateId,    \
+                                  logicalChannel, panId, networkAddress);
+
+/** @brief Command description for EndpointInformation
+ *
+ * Command: EndpointInformation
+ * @param ieeeAddress IEEE_ADDRESS
+ * @param networkAddress INT16U
+ * @param endpointId INT8U
+ * @param profileId INT16U
+ * @param deviceId INT16U
+ * @param version INT8U
+ */
+#define emberAfFillCommandZLL                                                                                                      \
+    CommissioningClusterEndpointInformation(ieeeAddress, networkAddress, endpointId, profileId, deviceId, version)                 \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_ENDPOINT_INFORMATION_COMMAND_ID, "uuuuuu", ieeeAddress, networkAddress, endpointId,          \
+                                  profileId, deviceId, version);
+
+/** @brief Command description for GetGroupIdentifiersRequest
+ *
+ * Command: GetGroupIdentifiersRequest
+ * @param startIndex INT8U
+ * @param total INT8U
+ * @param startIndex INT8U
+ * @param count INT8U
+ * @param groupInformationRecordList GroupInformationRecord []
+ * @param groupInformationRecordListLen int
+ */
+#define emberAfFillCommandZLL                                                                                                      \
+    CommissioningClusterGetGroupIdentifiersRequest(startIndex, total, startIndex, count, groupInformationRecordList,               \
+                                                   groupInformationRecordListLen)                                                  \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_GROUP_IDENTIFIERS_REQUEST_COMMAND_ID, "uuuub", startIndex, total, startIndex, count,     \
+                                  groupInformationRecordList, groupInformationRecordListLen);
+
+/** @brief Command description for GetEndpointListRequest
+ *
+ * Command: GetEndpointListRequest
+ * @param startIndex INT8U
+ * @param total INT8U
+ * @param startIndex INT8U
+ * @param count INT8U
+ * @param endpointInformationRecordList EndpointInformationRecord []
+ * @param endpointInformationRecordListLen int
+ */
+#define emberAfFillCommandZLL                                                                                                      \
+    CommissioningClusterGetEndpointListRequest(startIndex, total, startIndex, count, endpointInformationRecordList,                \
+                                               endpointInformationRecordListLen)                                                   \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_GET_ENDPOINT_LIST_REQUEST_COMMAND_ID, "uuuub", startIndex, total, startIndex, count,         \
+                                  endpointInformationRecordList, endpointInformationRecordListLen);
+
+/** @brief Command description for Bind
+ *
+ * Command: Bind
+ * @param nodeId NODE_ID
+ * @param groupId GROUP_ID
+ * @param endpointId ENDPOINT_ID
+ * @param clusterId CLUSTER_ID
+ */
+#define emberAfFillCommandBindingClusterBind(nodeId, groupId, endpointId, clusterId)                                               \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_BIND_COMMAND_ID, "uuuu", nodeId, groupId, endpointId, clusterId);
+
+/** @brief Command description for Unbind
+ *
+ * Command: Unbind
+ * @param nodeId NODE_ID
+ * @param groupId GROUP_ID
+ * @param endpointId ENDPOINT_ID
+ * @param clusterId CLUSTER_ID
+ */
+#define emberAfFillCommandBindingClusterUnbind(nodeId, groupId, endpointId, clusterId)                                             \
+    emberAfFillExternalBuffer(mask,                                                                                                \
+                                                                                                                                   \
+                              ZCL_UNBIND_COMMAND_ID, "uuuu", nodeId, groupId, endpointId, clusterId);
+
+/** @brief Command description for CommandOne
+ *
+ * Command: CommandOne
+ * @param argOne INT8U
+ * @param argOne INT8U
+ */
+#define emberAfFillCommandSample                                                                                                   \
+    Mfg Specific ClusterClusterCommandOne(argOne, argOne)                                                                          \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_COMMAND_ONE_COMMAND_ID, "uu", argOne, argOne);
+
+/** @brief Command description for SetToken
+ *
+ * Command: SetToken
+ * @param token INT16U
+ * @param token INT16U
+ * @param data OCTET_STRING
+ * @param data OCTET_STRING
+ */
+#define emberAfFillCommandConfiguration                                                                                            \
+    ClusterClusterSetToken(token, token, data, data)                                                                               \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_SET_TOKEN_COMMAND_ID, "uuuu", token, token, data, data);
+
+/** @brief Command description for LockTokens
+ *
+ * Command: LockTokens
+ */
+#define emberAfFillCommandConfiguration                                                                                            \
+    ClusterClusterLockTokens() emberAfFillExternalBuffer(mask,                                                                     \
+                                                                                                                                   \
+                                                         ZCL_LOCK_TOKENS_COMMAND_ID, "", );
+
+/** @brief Command description for ReadTokens
+ *
+ * Command: ReadTokens
+ * @param token INT16U
+ */
+#define emberAfFillCommandConfiguration                                                                                            \
+    ClusterClusterReadTokens(token) emberAfFillExternalBuffer(mask,                                                                \
+                                                                                                                                   \
+                                                              ZCL_READ_TOKENS_COMMAND_ID, "u", token);
+
+/** @brief Command description for UnlockTokens
+ *
+ * Command: UnlockTokens
+ * @param data OCTET_STRING
+ */
+#define emberAfFillCommandConfiguration                                                                                            \
+    ClusterClusterUnlockTokens(data) emberAfFillExternalBuffer(mask,                                                               \
+                                                                                                                                   \
+                                                               ZCL_UNLOCK_TOKENS_COMMAND_ID, "u", data);
+
+/** @brief Command description for stream
+ *
+ * Command: stream
+ * @param channel INT8U
+ * @param power INT8S
+ * @param time INT16U
+ */
+#define emberAfFillCommandMFGLIB                                                                                                   \
+    ClusterClusterstream(channel, power, time) emberAfFillExternalBuffer(mask,                                                     \
+                                                                                                                                   \
+                                                                         ZCL_STREAM_COMMAND_ID, "uuu", channel, power, time);
+
+/** @brief Command description for tone
+ *
+ * Command: tone
+ * @param channel INT8U
+ * @param power INT8S
+ * @param time INT16U
+ */
+#define emberAfFillCommandMFGLIB                                                                                                   \
+    ClusterClustertone(channel, power, time) emberAfFillExternalBuffer(mask,                                                       \
+                                                                                                                                   \
+                                                                       ZCL_TONE_COMMAND_ID, "uuu", channel, power, time);
+
+/** @brief Command description for rxMode
+ *
+ * Command: rxMode
+ * @param channel INT8U
+ * @param power INT8S
+ * @param time INT16U
+ */
+#define emberAfFillCommandMFGLIB                                                                                                   \
+    ClusterClusterrxMode(channel, power, time) emberAfFillExternalBuffer(mask,                                                     \
+                                                                                                                                   \
+                                                                         ZCL_RX_MODE_COMMAND_ID, "uuu", channel, power, time);
+
+/** @brief Command description for EnableApsLinkKeyAuthorization
+ *
+ * Command: EnableApsLinkKeyAuthorization
+ * @param numberExemptClusters INT8U
+ * @param clusterId CLUSTER_ID
+ * @param clusterId CLUSTER_ID []
+ * @param clusterIdLen int
+ * @param apsLinkKeyAuthStatus BOOLEAN
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterEnableApsLinkKeyAuthorization(numberExemptClusters, clusterId, clusterId, clusterIdLen,              \
+                                                            apsLinkKeyAuthStatus)                                                  \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_ENABLE_APS_LINK_KEY_AUTHORIZATION_COMMAND_ID, "uubu", numberExemptClusters, clusterId,       \
+                                  clusterId, clusterIdLen, apsLinkKeyAuthStatus);
+
+/** @brief Command description for DisableApsLinkKeyAuthorization
+ *
+ * Command: DisableApsLinkKeyAuthorization
+ * @param numberExemptClusters INT8U
+ * @param powerNotificationReason WwahPowerNotificationReason
+ * @param clusterId CLUSTER_ID []
+ * @param clusterIdLen int
+ * @param manufacturerId INT16U
+ * @param manufacturerReasonLength INT8U
+ * @param manufacturerReason INT8U []
+ * @param manufacturerReasonLen int
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterDisableApsLinkKeyAuthorization(numberExemptClusters, powerNotificationReason, clusterId,             \
+                                                             clusterIdLen, manufacturerId, manufacturerReasonLength,               \
+                                                             manufacturerReason, manufacturerReasonLen)                            \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_DISABLE_APS_LINK_KEY_AUTHORIZATION_COMMAND_ID, "uubuub", numberExemptClusters,               \
+                                  powerNotificationReason, clusterId, clusterIdLen, manufacturerId, manufacturerReasonLength,      \
+                                  manufacturerReason, manufacturerReasonLen);
+
+/** @brief Command description for ApsLinkKeyAuthorizationQuery
+ *
+ * Command: ApsLinkKeyAuthorizationQuery
+ * @param clusterId CLUSTER_ID
+ * @param powerNotificationReason WwahPowerNotificationReason
+ * @param manufacturerId INT16U
+ * @param manufacturerReasonLength INT8U
+ * @param manufacturerReason INT8U []
+ * @param manufacturerReasonLen int
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterApsLinkKeyAuthorizationQuery(clusterId, powerNotificationReason, manufacturerId,                     \
+                                                           manufacturerReasonLength, manufacturerReason, manufacturerReasonLen)    \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_APS_LINK_KEY_AUTHORIZATION_QUERY_COMMAND_ID, "uuuub", clusterId, powerNotificationReason,    \
+                                  manufacturerId, manufacturerReasonLength, manufacturerReason, manufacturerReasonLen);
+
+/** @brief Command description for RequestNewApsLinkKey
+ *
+ * Command: RequestNewApsLinkKey
+ * @param deviceEui64 IEEE_ADDRESS
+ * @param deviceShort INT16U
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterRequestNewApsLinkKey(deviceEui64, deviceShort)                                                       \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_REQUEST_NEW_APS_LINK_KEY_COMMAND_ID, "uu", deviceEui64, deviceShort);
+
+/** @brief Command description for EnableWwahAppEventRetryAlgorithm
+ *
+ * Command: EnableWwahAppEventRetryAlgorithm
+ * @param firstBackoffTimeSeconds INT8U
+ * @param numberExemptClusters INT8U
+ * @param backoffSeqCommonRatio INT8U
+ * @param clusterId CLUSTER_ID []
+ * @param clusterIdLen int
+ * @param maxBackoffTimeSeconds INT32U
+ * @param maxRedeliveryAttempts INT8U
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterEnableWwahAppEventRetryAlgorithm(                                                                    \
+        firstBackoffTimeSeconds, numberExemptClusters, backoffSeqCommonRatio, clusterId, clusterIdLen, maxBackoffTimeSeconds,      \
+        maxRedeliveryAttempts) emberAfFillExternalBuffer(mask,                                                                     \
+                                                                                                                                   \
+                                                         ZCL_ENABLE_WWAH_APP_EVENT_RETRY_ALGORITHM_COMMAND_ID, "uuubuu",           \
+                                                         firstBackoffTimeSeconds, numberExemptClusters, backoffSeqCommonRatio,     \
+                                                         clusterId, clusterIdLen, maxBackoffTimeSeconds, maxRedeliveryAttempts);
+
+/** @brief Command description for DisableWwahAppEventRetryAlgorithm
+ *
+ * Command: DisableWwahAppEventRetryAlgorithm
+ * @param currentPowerMode INT32U
+ * @param availablePowerSources INT32U
+ * @param currentPowerSource INT32U
+ * @param currentPowerSourceLevel INT32U
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterDisableWwahAppEventRetryAlgorithm(currentPowerMode, availablePowerSources, currentPowerSource,       \
+                                                                currentPowerSourceLevel)                                           \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_DISABLE_WWAH_APP_EVENT_RETRY_ALGORITHM_COMMAND_ID, "uuuu", currentPowerMode,                 \
+                                  availablePowerSources, currentPowerSource, currentPowerSourceLevel);
+
+/** @brief Command description for RequestTime
+ *
+ * Command: RequestTime
+ * @param debugReportId INT8U
+ * @param debugReportSize INT32U
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterRequestTime(debugReportId, debugReportSize)                                                          \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_REQUEST_TIME_COMMAND_ID, "uu", debugReportId, debugReportSize);
+
+/** @brief Command description for EnableWwahRejoinAlgorithm
+ *
+ * Command: EnableWwahRejoinAlgorithm
+ * @param fastRejoinTimeoutSeconds INT16U
+ * @param debugReportId INT8U
+ * @param durationBetweenRejoinsSeconds INT16U
+ * @param debugReportData INT8U []
+ * @param debugReportDataLen int
+ * @param fastRejoinFirstBackoffSeconds INT16U
+ * @param maxBackoffTimeSeconds INT16U
+ * @param maxBackoffIterations INT16U
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterEnableWwahRejoinAlgorithm(fastRejoinTimeoutSeconds, debugReportId, durationBetweenRejoinsSeconds,    \
+                                                        debugReportData, debugReportDataLen, fastRejoinFirstBackoffSeconds,        \
+                                                        maxBackoffTimeSeconds, maxBackoffIterations)                               \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_ENABLE_WWAH_REJOIN_ALGORITHM_COMMAND_ID, "uuubuuu", fastRejoinTimeoutSeconds, debugReportId, \
+                                  durationBetweenRejoinsSeconds, debugReportData, debugReportDataLen,                              \
+                                  fastRejoinFirstBackoffSeconds, maxBackoffTimeSeconds, maxBackoffIterations);
+
+/** @brief Command description for DisableWwahRejoinAlgorithm
+ *
+ * Command: DisableWwahRejoinAlgorithm
+ * @param numberOfClusters INT8U
+ * @param clusterId CLUSTER_ID []
+ * @param clusterIdLen int
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterDisableWwahRejoinAlgorithm(numberOfClusters, clusterId, clusterIdLen)                                \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_DISABLE_WWAH_REJOIN_ALGORITHM_COMMAND_ID, "ub", numberOfClusters, clusterId, clusterIdLen);
+
+/** @brief Command description for SetIasZoneEnrollmentMethod
+ *
+ * Command: SetIasZoneEnrollmentMethod
+ * @param enrollmentMode WwahIasZoneEnrollmentMode
+ * @param numberOfBeacons INT8U
+ * @param beacon WwahBeaconSurvey []
+ * @param beaconLen int
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterSetIasZoneEnrollmentMethod(enrollmentMode, numberOfBeacons, beacon, beaconLen)                       \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_SET_IAS_ZONE_ENROLLMENT_METHOD_COMMAND_ID, "uub", enrollmentMode, numberOfBeacons, beacon,   \
+                                  beaconLen);
+
+/** @brief Command description for ClearBindingTable
+ *
+ * Command: ClearBindingTable
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterClearBindingTable() emberAfFillExternalBuffer(mask,                                                  \
+                                                                                                                                   \
+                                                                            ZCL_CLEAR_BINDING_TABLE_COMMAND_ID, "", );
+
+/** @brief Command description for EnablePeriodicRouterCheckIns
+ *
+ * Command: EnablePeriodicRouterCheckIns
+ * @param checkInInterval INT16U
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterEnablePeriodicRouterCheckIns(checkInInterval)                                                        \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_ENABLE_PERIODIC_ROUTER_CHECK_INS_COMMAND_ID, "u", checkInInterval);
+
+/** @brief Command description for DisablePeriodicRouterCheckIns
+ *
+ * Command: DisablePeriodicRouterCheckIns
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterDisablePeriodicRouterCheckIns()                                                                      \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_DISABLE_PERIODIC_ROUTER_CHECK_INS_COMMAND_ID, "", );
+
+/** @brief Command description for SetMacPollFailureWaitTime
+ *
+ * Command: SetMacPollFailureWaitTime
+ * @param waitTime INT8U
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterSetMacPollFailureWaitTime(waitTime)                                                                  \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_SET_MAC_POLL_FAILURE_WAIT_TIME_COMMAND_ID, "u", waitTime);
+
+/** @brief Command description for SetPendingNetworkUpdate
+ *
+ * Command: SetPendingNetworkUpdate
+ * @param channel INT8U
+ * @param panId INT16U
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterSetPendingNetworkUpdate(channel, panId)                                                              \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_SET_PENDING_NETWORK_UPDATE_COMMAND_ID, "uu", channel, panId);
+
+/** @brief Command description for RequireApsAcksOnUnicasts
+ *
+ * Command: RequireApsAcksOnUnicasts
+ * @param numberExemptClusters INT8U
+ * @param clusterId CLUSTER_ID []
+ * @param clusterIdLen int
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterRequireApsAcksOnUnicasts(numberExemptClusters, clusterId, clusterIdLen) emberAfFillExternalBuffer(   \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_REQUIRE_APS_ACKS_ON_UNICASTS_COMMAND_ID, "ub", numberExemptClusters, clusterId, clusterIdLen);
+
+/** @brief Command description for RemoveApsAcksOnUnicastsRequirement
+ *
+ * Command: RemoveApsAcksOnUnicastsRequirement
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterRemoveApsAcksOnUnicastsRequirement()                                                                 \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_REMOVE_APS_ACKS_ON_UNICASTS_REQUIREMENT_COMMAND_ID, "", );
+
+/** @brief Command description for ApsAckRequirementQuery
+ *
+ * Command: ApsAckRequirementQuery
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterApsAckRequirementQuery() emberAfFillExternalBuffer(mask,                                             \
+                                                                                                                                   \
+                                                                                 ZCL_APS_ACK_REQUIREMENT_QUERY_COMMAND_ID, "", );
+
+/** @brief Command description for DebugReportQuery
+ *
+ * Command: DebugReportQuery
+ * @param debugReportId INT8U
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterDebugReportQuery(debugReportId)                                                                      \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_DEBUG_REPORT_QUERY_COMMAND_ID, "u", debugReportId);
+
+/** @brief Command description for SurveyBeacons
+ *
+ * Command: SurveyBeacons
+ * @param standardBeacons BOOLEAN
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterSurveyBeacons(standardBeacons)                                                                       \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_SURVEY_BEACONS_COMMAND_ID, "u", standardBeacons);
+
+/** @brief Command description for DisableOtaDowngrades
+ *
+ * Command: DisableOtaDowngrades
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterDisableOtaDowngrades() emberAfFillExternalBuffer(mask,                                               \
+                                                                                                                                   \
+                                                                               ZCL_DISABLE_OTA_DOWNGRADES_COMMAND_ID, "", );
+
+/** @brief Command description for DisableMgmtLeaveWithoutRejoin
+ *
+ * Command: DisableMgmtLeaveWithoutRejoin
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterDisableMgmtLeaveWithoutRejoin()                                                                      \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_DISABLE_MGMT_LEAVE_WITHOUT_REJOIN_COMMAND_ID, "", );
+
+/** @brief Command description for DisableTouchlinkInterpanMessageSupport
+ *
+ * Command: DisableTouchlinkInterpanMessageSupport
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterDisableTouchlinkInterpanMessageSupport()                                                             \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_DISABLE_TOUCHLINK_INTERPAN_MESSAGE_SUPPORT_COMMAND_ID, "", );
+
+/** @brief Command description for EnableWwahParentClassification
+ *
+ * Command: EnableWwahParentClassification
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterEnableWwahParentClassification()                                                                     \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_ENABLE_WWAH_PARENT_CLASSIFICATION_COMMAND_ID, "", );
+
+/** @brief Command description for DisableWwahParentClassification
+ *
+ * Command: DisableWwahParentClassification
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterDisableWwahParentClassification()                                                                    \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_DISABLE_WWAH_PARENT_CLASSIFICATION_COMMAND_ID, "", );
+
+/** @brief Command description for EnableTcSecurityOnNtwkKeyRotation
+ *
+ * Command: EnableTcSecurityOnNtwkKeyRotation
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterEnableTcSecurityOnNtwkKeyRotation()                                                                  \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_ENABLE_TC_SECURITY_ON_NTWK_KEY_ROTATION_COMMAND_ID, "", );
+
+/** @brief Command description for EnableWwahBadParentRecovery
+ *
+ * Command: EnableWwahBadParentRecovery
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterEnableWwahBadParentRecovery()                                                                        \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_ENABLE_WWAH_BAD_PARENT_RECOVERY_COMMAND_ID, "", );
+
+/** @brief Command description for DisableWwahBadParentRecovery
+ *
+ * Command: DisableWwahBadParentRecovery
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterDisableWwahBadParentRecovery()                                                                       \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_DISABLE_WWAH_BAD_PARENT_RECOVERY_COMMAND_ID, "", );
+
+/** @brief Command description for EnableConfigurationMode
+ *
+ * Command: EnableConfigurationMode
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterEnableConfigurationMode() emberAfFillExternalBuffer(mask,                                            \
+                                                                                                                                   \
+                                                                                  ZCL_ENABLE_CONFIGURATION_MODE_COMMAND_ID, "", );
+
+/** @brief Command description for DisableConfigurationMode
+ *
+ * Command: DisableConfigurationMode
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterDisableConfigurationMode()                                                                           \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_DISABLE_CONFIGURATION_MODE_COMMAND_ID, "", );
+
+/** @brief Command description for UseTrustCenterForClusterServer
+ *
+ * Command: UseTrustCenterForClusterServer
+ * @param numberOfClusters INT8U
+ * @param clusterId CLUSTER_ID []
+ * @param clusterIdLen int
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterUseTrustCenterForClusterServer(numberOfClusters, clusterId, clusterIdLen) emberAfFillExternalBuffer( \
+        mask,                                                                                                                      \
+                                                                                                                                   \
+        ZCL_USE_TRUST_CENTER_FOR_CLUSTER_SERVER_COMMAND_ID, "ub", numberOfClusters, clusterId, clusterIdLen);
+
+/** @brief Command description for TrustCenterForClusterServerQuery
+ *
+ * Command: TrustCenterForClusterServerQuery
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterTrustCenterForClusterServerQuery()                                                                   \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_TRUST_CENTER_FOR_CLUSTER_SERVER_QUERY_COMMAND_ID, "", );
+
+/** @brief Command description for UseTrustCenterForClusterServerResponse
+ *
+ * Command: UseTrustCenterForClusterServerResponse
+ * @param status Status
+ * @param clusterStatusLength INT8U
+ * @param clusterStatus WwahClusterStatusToUseTC []
+ * @param clusterStatusLen int
+ */
+#define emberAfFillCommandSL                                                                                                       \
+    Works With All HubsClusterUseTrustCenterForClusterServerResponse(status, clusterStatusLength, clusterStatus, clusterStatusLen) \
+        emberAfFillExternalBuffer(mask,                                                                                            \
+                                                                                                                                   \
+                                  ZCL_USE_TRUST_CENTER_FOR_CLUSTER_SERVER_RESPONSE_COMMAND_ID, "uub", status, clusterStatusLength, \
+                                  clusterStatus, clusterStatusLen);
diff --git a/src/darwin/Framework/CHIP/gen/cluster-id.h b/src/darwin/Framework/CHIP/gen/cluster-id.h
new file mode 100644
index 0000000..262de53
--- /dev/null
+++ b/src/darwin/Framework/CHIP/gen/cluster-id.h
@@ -0,0 +1,351 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+// Prevent multiple inclusion
+#pragma once
+
+// Definitions for cluster: Basic
+#define ZCL_BASIC_CLUSTER_ID (0x0000)
+
+// Definitions for cluster: Power Configuration
+#define ZCL_POWER_CONFIG_CLUSTER_ID (0x0001)
+
+// Definitions for cluster: Device Temperature Configuration
+#define ZCL_DEVICE_TEMP_CLUSTER_ID (0x0002)
+
+// Definitions for cluster: Identify
+#define ZCL_IDENTIFY_CLUSTER_ID (0x0003)
+
+// Definitions for cluster: Groups
+#define ZCL_GROUPS_CLUSTER_ID (0x0004)
+
+// Definitions for cluster: Scenes
+#define ZCL_SCENES_CLUSTER_ID (0x0005)
+
+// Definitions for cluster: On/off
+#define ZCL_ON_OFF_CLUSTER_ID (0x0006)
+
+// Definitions for cluster: On/off Switch Configuration
+#define ZCL_ON_OFF_SWITCH_CONFIG_CLUSTER_ID (0x0007)
+
+// Definitions for cluster: Level Control
+#define ZCL_LEVEL_CONTROL_CLUSTER_ID (0x0008)
+
+// Definitions for cluster: Alarms
+#define ZCL_ALARM_CLUSTER_ID (0x0009)
+
+// Definitions for cluster: Time
+#define ZCL_TIME_CLUSTER_ID (0x000A)
+
+// Definitions for cluster: RSSI Location
+#define ZCL_RSSI_LOCATION_CLUSTER_ID (0x000B)
+
+// Definitions for cluster: Binary Input (Basic)
+#define ZCL_BINARY_INPUT_BASIC_CLUSTER_ID (0x000F)
+
+// Definitions for cluster: Commissioning
+#define ZCL_COMMISSIONING_CLUSTER_ID (0x0015)
+
+// Definitions for cluster: Partition
+#define ZCL_PARTITION_CLUSTER_ID (0x0016)
+
+// Definitions for cluster: Over the Air Bootloading
+#define ZCL_OTA_BOOTLOAD_CLUSTER_ID (0x0019)
+
+// Definitions for cluster: Power Profile
+#define ZCL_POWER_PROFILE_CLUSTER_ID (0x001A)
+
+// Definitions for cluster: Appliance Control
+#define ZCL_APPLIANCE_CONTROL_CLUSTER_ID (0x001B)
+
+// Definitions for cluster: Poll Control
+#define ZCL_POLL_CONTROL_CLUSTER_ID (0x0020)
+
+// Definitions for cluster: Green Power
+#define ZCL_GREEN_POWER_CLUSTER_ID (0x0021)
+
+// Definitions for cluster: Keep-Alive
+#define ZCL_KEEPALIVE_CLUSTER_ID (0x0025)
+
+// Definitions for cluster: Shade Configuration
+#define ZCL_SHADE_CONFIG_CLUSTER_ID (0x0100)
+
+// Definitions for cluster: Door Lock
+#define ZCL_DOOR_LOCK_CLUSTER_ID (0x0101)
+
+// Definitions for cluster: Window Covering
+#define ZCL_WINDOW_COVERING_CLUSTER_ID (0x0102)
+
+// Definitions for cluster: Barrier Control
+#define ZCL_BARRIER_CONTROL_CLUSTER_ID (0x0103)
+
+// Definitions for cluster: Pump Configuration and Control
+#define ZCL_PUMP_CONFIG_CONTROL_CLUSTER_ID (0x0200)
+
+// Definitions for cluster: Thermostat
+#define ZCL_THERMOSTAT_CLUSTER_ID (0x0201)
+
+// Definitions for cluster: Fan Control
+#define ZCL_FAN_CONTROL_CLUSTER_ID (0x0202)
+
+// Definitions for cluster: Dehumidification Control
+#define ZCL_DEHUMID_CONTROL_CLUSTER_ID (0x0203)
+
+// Definitions for cluster: Thermostat User Interface Configuration
+#define ZCL_THERMOSTAT_UI_CONFIG_CLUSTER_ID (0x0204)
+
+// Definitions for cluster: Color Control
+#define ZCL_COLOR_CONTROL_CLUSTER_ID (0x0300)
+
+// Definitions for cluster: Ballast Configuration
+#define ZCL_BALLAST_CONFIGURATION_CLUSTER_ID (0x0301)
+
+// Definitions for cluster: Illuminance Measurement
+#define ZCL_ILLUM_MEASUREMENT_CLUSTER_ID (0x0400)
+
+// Definitions for cluster: Illuminance Level Sensing
+#define ZCL_ILLUM_LEVEL_SENSING_CLUSTER_ID (0x0401)
+
+// Definitions for cluster: Temperature Measurement
+#define ZCL_TEMP_MEASUREMENT_CLUSTER_ID (0x0402)
+
+// Definitions for cluster: Pressure Measurement
+#define ZCL_PRESSURE_MEASUREMENT_CLUSTER_ID (0x0403)
+
+// Definitions for cluster: Flow Measurement
+#define ZCL_FLOW_MEASUREMENT_CLUSTER_ID (0x0404)
+
+// Definitions for cluster: Relative Humidity Measurement
+#define ZCL_RELATIVE_HUMIDITY_MEASUREMENT_CLUSTER_ID (0x0405)
+
+// Definitions for cluster: Occupancy Sensing
+#define ZCL_OCCUPANCY_SENSING_CLUSTER_ID (0x0406)
+
+// Definitions for cluster: Carbon Monoxide Concentration Measurement
+#define ZCL_CARBON_MONOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x040C)
+
+// Definitions for cluster: Carbon Dioxide Concentration Measurement
+#define ZCL_CARBON_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x040D)
+
+// Definitions for cluster: Ethylene Concentration Measurement
+#define ZCL_ETHYLENE_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x040E)
+
+// Definitions for cluster: Ethylene Oxide Concentration Measurement
+#define ZCL_ETHYLENE_OXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x040F)
+
+// Definitions for cluster: Hydrogen Concentration Measurement
+#define ZCL_HYDROGEN_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0410)
+
+// Definitions for cluster: Hydrogen Sulphide Concentration Measurement
+#define ZCL_HYDROGEN_SULPHIDE_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0411)
+
+// Definitions for cluster: Nitric Oxide Concentration Measurement
+#define ZCL_NITRIC_OXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0412)
+
+// Definitions for cluster: Nitrogen Dioxide Concentration Measurement
+#define ZCL_NITROGEN_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0413)
+
+// Definitions for cluster: Oxygen Concentration Measurement
+#define ZCL_OXYGEN_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0414)
+
+// Definitions for cluster: Ozone Concentration Measurement
+#define ZCL_OZONE_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0415)
+
+// Definitions for cluster: Sulfur Dioxide Concentration Measurement
+#define ZCL_SULFUR_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0416)
+
+// Definitions for cluster: Dissolved Oxygen Concentration Measurement
+#define ZCL_DISSOLVED_OXYGEN_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0417)
+
+// Definitions for cluster: Bromate Concentration Measurement
+#define ZCL_BROMATE_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0418)
+
+// Definitions for cluster: Chloramines Concentration Measurement
+#define ZCL_CHLORAMINES_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0419)
+
+// Definitions for cluster: Chlorine Concentration Measurement
+#define ZCL_CHLORINE_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x041A)
+
+// Definitions for cluster: Fecal coliform and E. Coli Concentration Measurement
+#define ZCL_FECAL_COLIFORM_AND_E_COLI_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x041B)
+
+// Definitions for cluster: Fluoride Concentration Measurement
+#define ZCL_FLUORIDE_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x041C)
+
+// Definitions for cluster: Haloacetic Acids Concentration Measurement
+#define ZCL_HALOACETIC_ACIDS_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x041D)
+
+// Definitions for cluster: Total Trihalomethanes Concentration Measurement
+#define ZCL_TOTAL_TRIHALOMETHANES_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x041E)
+
+// Definitions for cluster: Total Coliform Bacteria Concentration Measurement
+#define ZCL_TOTAL_COLIFORM_BACTERIA_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x041F)
+
+// Definitions for cluster: Turbidity Concentration Measurement
+#define ZCL_TURBIDITY_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0420)
+
+// Definitions for cluster: Copper Concentration Measurement
+#define ZCL_COPPER_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0421)
+
+// Definitions for cluster: Lead Concentration Measurement
+#define ZCL_LEAD_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0422)
+
+// Definitions for cluster: Manganese Concentration Measurement
+#define ZCL_MANGANESE_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0423)
+
+// Definitions for cluster: Sulfate Concentration Measurement
+#define ZCL_SULFATE_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0424)
+
+// Definitions for cluster: Bromodichloromethane Concentration Measurement
+#define ZCL_BROMODICHLOROMETHANE_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0425)
+
+// Definitions for cluster: Bromoform Concentration Measurement
+#define ZCL_BROMOFORM_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0426)
+
+// Definitions for cluster: Chlorodibromomethane Concentration Measurement
+#define ZCL_CHLORODIBROMOMETHANE_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0427)
+
+// Definitions for cluster: Chloroform Concentration Measurement
+#define ZCL_CHLOROFORM_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0428)
+
+// Definitions for cluster: Sodium Concentration Measurement
+#define ZCL_SODIUM_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0429)
+
+// Definitions for cluster: IAS Zone
+#define ZCL_IAS_ZONE_CLUSTER_ID (0x0500)
+
+// Definitions for cluster: IAS ACE
+#define ZCL_IAS_ACE_CLUSTER_ID (0x0501)
+
+// Definitions for cluster: IAS WD
+#define ZCL_IAS_WD_CLUSTER_ID (0x0502)
+
+// Definitions for cluster: Generic Tunnel
+#define ZCL_GENERIC_TUNNEL_CLUSTER_ID (0x0600)
+
+// Definitions for cluster: BACnet Protocol Tunnel
+#define ZCL_BACNET_PROTOCOL_TUNNEL_CLUSTER_ID (0x0601)
+
+// Definitions for cluster: 11073 Protocol Tunnel
+#define ZCL_11073_PROTOCOL_TUNNEL_CLUSTER_ID (0x0614)
+
+// Definitions for cluster: ISO 7816 Protocol Tunnel
+#define ZCL_ISO7816_PROTOCOL_TUNNEL_CLUSTER_ID (0x0615)
+
+// Definitions for cluster: Price
+#define ZCL_PRICE_CLUSTER_ID (0x0700)
+
+// Definitions for cluster: Demand Response and Load Control
+#define ZCL_DEMAND_RESPONSE_LOAD_CONTROL_CLUSTER_ID (0x0701)
+
+// Definitions for cluster: Simple Metering
+#define ZCL_SIMPLE_METERING_CLUSTER_ID (0x0702)
+
+// Definitions for cluster: Messaging
+#define ZCL_MESSAGING_CLUSTER_ID (0x0703)
+
+// Definitions for cluster: Tunneling
+#define ZCL_TUNNELING_CLUSTER_ID (0x0704)
+
+// Definitions for cluster: Prepayment
+#define ZCL_PREPAYMENT_CLUSTER_ID (0x0705)
+
+// Definitions for cluster: Energy Management
+#define ZCL_ENERGY_MANAGEMENT_CLUSTER_ID (0x0706)
+
+// Definitions for cluster: Calendar
+#define ZCL_CALENDAR_CLUSTER_ID (0x0707)
+
+// Definitions for cluster: Device Management
+#define ZCL_DEVICE_MANAGEMENT_CLUSTER_ID (0x0708)
+
+// Definitions for cluster: Events
+#define ZCL_EVENTS_CLUSTER_ID (0x0709)
+
+// Definitions for cluster: MDU Pairing
+#define ZCL_MDU_PAIRING_CLUSTER_ID (0x070A)
+
+// Definitions for cluster: Sub-GHz
+#define ZCL_SUB_GHZ_CLUSTER_ID (0x070B)
+
+// Definitions for cluster: Key Establishment
+#define ZCL_KEY_ESTABLISHMENT_CLUSTER_ID (0x0800)
+
+// Definitions for cluster: Information
+#define ZCL_INFORMATION_CLUSTER_ID (0x0900)
+
+// Definitions for cluster: Data Sharing
+#define ZCL_DATA_SHARING_CLUSTER_ID (0x0901)
+
+// Definitions for cluster: Gaming
+#define ZCL_GAMING_CLUSTER_ID (0x0902)
+
+// Definitions for cluster: Data Rate Control
+#define ZCL_DATA_RATE_CONTROL_CLUSTER_ID (0x0903)
+
+// Definitions for cluster: Voice over ZigBee
+#define ZCL_VOICE_OVER_ZIGBEE_CLUSTER_ID (0x0904)
+
+// Definitions for cluster: Chatting
+#define ZCL_CHATTING_CLUSTER_ID (0x0905)
+
+// Definitions for cluster: Payment
+#define ZCL_PAYMENT_CLUSTER_ID (0x0A01)
+
+// Definitions for cluster: Billing
+#define ZCL_BILLING_CLUSTER_ID (0x0A02)
+
+// Definitions for cluster: Appliance Identification
+#define ZCL_APPLIANCE_IDENTIFICATION_CLUSTER_ID (0x0B00)
+
+// Definitions for cluster: Meter Identification
+#define ZCL_METER_IDENTIFICATION_CLUSTER_ID (0x0B01)
+
+// Definitions for cluster: Appliance Events and Alert
+#define ZCL_APPLIANCE_EVENTS_AND_ALERT_CLUSTER_ID (0x0B02)
+
+// Definitions for cluster: Appliance Statistics
+#define ZCL_APPLIANCE_STATISTICS_CLUSTER_ID (0x0B03)
+
+// Definitions for cluster: Electrical Measurement
+#define ZCL_ELECTRICAL_MEASUREMENT_CLUSTER_ID (0x0B04)
+
+// Definitions for cluster: Diagnostics
+#define ZCL_DIAGNOSTICS_CLUSTER_ID (0x0B05)
+
+// Definitions for cluster: ZLL Commissioning
+#define ZCL_ZLL_COMMISSIONING_CLUSTER_ID (0x1000)
+
+// Definitions for cluster: Binding
+#define ZCL_BINDING_CLUSTER_ID (0xF000)
+
+// Definitions for cluster: Sample Mfg Specific Cluster
+#define ZCL_SAMPLE_MFG_SPECIFIC_CLUSTER_ID (0xFC00)
+
+// Definitions for cluster: Sample Mfg Specific Cluster 2
+#define ZCL_SAMPLE_MFG_SPECIFIC_CLUSTER_2_ID (0xFC00)
+
+// Definitions for cluster: Configuration Cluster
+#define ZCL_OTA_CONFIGURATION_CLUSTER_ID (0xFC01)
+
+// Definitions for cluster: MFGLIB Cluster
+#define ZCL_MFGLIB_CLUSTER_ID (0xFC02)
+
+// Definitions for cluster: SL Works With All Hubs
+#define ZCL_SL_WWAH_CLUSTER_ID (0xFC57)
diff --git a/src/darwin/Framework/CHIP/gen/command-id.h b/src/darwin/Framework/CHIP/gen/command-id.h
new file mode 100644
index 0000000..9e60862
--- /dev/null
+++ b/src/darwin/Framework/CHIP/gen/command-id.h
@@ -0,0 +1,753 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+// Prevent multiple inclusion
+#pragma once
+
+// Global, non-cluster-specific commands
+#define ZCL_READ_ATTRIBUTES_COMMAND_ID (0x00)
+#define ZCL_READ_ATTRIBUTES_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_WRITE_ATTRIBUTES_COMMAND_ID (0x02)
+#define ZCL_WRITE_ATTRIBUTES_UNDIVIDED_COMMAND_ID (0x03)
+#define ZCL_WRITE_ATTRIBUTES_RESPONSE_COMMAND_ID (0x04)
+#define ZCL_WRITE_ATTRIBUTES_NO_RESPONSE_COMMAND_ID (0x05)
+#define ZCL_CONFIGURE_REPORTING_COMMAND_ID (0x06)
+#define ZCL_CONFIGURE_REPORTING_RESPONSE_COMMAND_ID (0x07)
+#define ZCL_READ_REPORTING_CONFIGURATION_COMMAND_ID (0x08)
+#define ZCL_READ_REPORTING_CONFIGURATION_RESPONSE_COMMAND_ID (0x09)
+#define ZCL_REPORT_ATTRIBUTES_COMMAND_ID (0x0A)
+#define ZCL_DEFAULT_RESPONSE_COMMAND_ID (0x0B)
+#define ZCL_DISCOVER_ATTRIBUTES_COMMAND_ID (0x0C)
+#define ZCL_DISCOVER_ATTRIBUTES_RESPONSE_COMMAND_ID (0x0D)
+#define ZCL_READ_ATTRIBUTES_STRUCTURED_COMMAND_ID (0x0E)
+#define ZCL_WRITE_ATTRIBUTES_STRUCTURED_COMMAND_ID (0x0F)
+#define ZCL_WRITE_ATTRIBUTES_STRUCTURED_RESPONSE_COMMAND_ID (0x10)
+#define ZCL_DISCOVER_COMMANDS_RECEIVED_COMMAND_ID (0x11)
+#define ZCL_DISCOVER_COMMANDS_RECEIVED_RESPONSE_COMMAND_ID (0x12)
+#define ZCL_DISCOVER_COMMANDS_GENERATED_COMMAND_ID (0x13)
+#define ZCL_DISCOVER_COMMANDS_GENERATED_RESPONSE_COMMAND_ID (0x14)
+#define ZCL_DISCOVER_ATTRIBUTES_EXTENDED_COMMAND_ID (0x15)
+#define ZCL_DISCOVER_ATTRIBUTES_EXTENDED_RESPONSE_COMMAND_ID (0x16)
+
+// Commands for cluster: Basic
+#define ZCL_RESET_TO_FACTORY_DEFAULTS_COMMAND_ID (0x00)
+#define ZCL_MFG_SPECIFIC_PING_COMMAND_ID (0x00)
+
+// Commands for cluster: Identify
+#define ZCL_IDENTIFY_COMMAND_ID (0x00)
+#define ZCL_IDENTIFY_QUERY_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_IDENTIFY_QUERY_COMMAND_ID (0x01)
+#define ZCL_EZ_MODE_INVOKE_COMMAND_ID (0x02)
+#define ZCL_UPDATE_COMMISSION_STATE_COMMAND_ID (0x03)
+#define ZCL_TRIGGER_EFFECT_COMMAND_ID (0x40)
+
+// Commands for cluster: Groups
+#define ZCL_ADD_GROUP_COMMAND_ID (0x00)
+#define ZCL_ADD_GROUP_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_VIEW_GROUP_COMMAND_ID (0x01)
+#define ZCL_VIEW_GROUP_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_GET_GROUP_MEMBERSHIP_COMMAND_ID (0x02)
+#define ZCL_GET_GROUP_MEMBERSHIP_RESPONSE_COMMAND_ID (0x02)
+#define ZCL_REMOVE_GROUP_COMMAND_ID (0x03)
+#define ZCL_REMOVE_GROUP_RESPONSE_COMMAND_ID (0x03)
+#define ZCL_REMOVE_ALL_GROUPS_COMMAND_ID (0x04)
+#define ZCL_ADD_GROUP_IF_IDENTIFYING_COMMAND_ID (0x05)
+
+// Commands for cluster: Scenes
+#define ZCL_ADD_SCENE_COMMAND_ID (0x00)
+#define ZCL_ADD_SCENE_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_VIEW_SCENE_COMMAND_ID (0x01)
+#define ZCL_VIEW_SCENE_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_REMOVE_SCENE_COMMAND_ID (0x02)
+#define ZCL_REMOVE_SCENE_RESPONSE_COMMAND_ID (0x02)
+#define ZCL_REMOVE_ALL_SCENES_COMMAND_ID (0x03)
+#define ZCL_REMOVE_ALL_SCENES_RESPONSE_COMMAND_ID (0x03)
+#define ZCL_STORE_SCENE_COMMAND_ID (0x04)
+#define ZCL_STORE_SCENE_RESPONSE_COMMAND_ID (0x04)
+#define ZCL_RECALL_SCENE_COMMAND_ID (0x05)
+#define ZCL_GET_SCENE_MEMBERSHIP_COMMAND_ID (0x06)
+#define ZCL_GET_SCENE_MEMBERSHIP_RESPONSE_COMMAND_ID (0x06)
+#define ZCL_ENHANCED_ADD_SCENE_COMMAND_ID (0x40)
+#define ZCL_ENHANCED_ADD_SCENE_RESPONSE_COMMAND_ID (0x40)
+#define ZCL_ENHANCED_VIEW_SCENE_COMMAND_ID (0x41)
+#define ZCL_ENHANCED_VIEW_SCENE_RESPONSE_COMMAND_ID (0x41)
+#define ZCL_COPY_SCENE_COMMAND_ID (0x42)
+#define ZCL_COPY_SCENE_RESPONSE_COMMAND_ID (0x42)
+
+// Commands for cluster: On/off
+#define ZCL_OFF_COMMAND_ID (0x00)
+#define ZCL_SAMPLE_MFG_SPECIFIC_OFF_WITH_TRANSITION_COMMAND_ID (0x00)
+#define ZCL_ON_COMMAND_ID (0x01)
+#define ZCL_SAMPLE_MFG_SPECIFIC_ON_WITH_TRANSITION_COMMAND_ID (0x01)
+#define ZCL_SAMPLE_MFG_SPECIFIC_ON_WITH_TRANSITION2_COMMAND_ID (0x01)
+#define ZCL_TOGGLE_COMMAND_ID (0x02)
+#define ZCL_SAMPLE_MFG_SPECIFIC_TOGGLE_WITH_TRANSITION_COMMAND_ID (0x02)
+#define ZCL_SAMPLE_MFG_SPECIFIC_TOGGLE_WITH_TRANSITION2_COMMAND_ID (0x02)
+#define ZCL_OFF_WITH_EFFECT_COMMAND_ID (0x40)
+#define ZCL_ON_WITH_RECALL_GLOBAL_SCENE_COMMAND_ID (0x41)
+#define ZCL_ON_WITH_TIMED_OFF_COMMAND_ID (0x42)
+
+// Commands for cluster: Level Control
+#define ZCL_MOVE_TO_LEVEL_COMMAND_ID (0x00)
+#define ZCL_MOVE_COMMAND_ID (0x01)
+#define ZCL_STEP_COMMAND_ID (0x02)
+#define ZCL_STOP_COMMAND_ID (0x03)
+#define ZCL_MOVE_TO_LEVEL_WITH_ON_OFF_COMMAND_ID (0x04)
+#define ZCL_MOVE_WITH_ON_OFF_COMMAND_ID (0x05)
+#define ZCL_STEP_WITH_ON_OFF_COMMAND_ID (0x06)
+#define ZCL_STOP_WITH_ON_OFF_COMMAND_ID (0x07)
+
+// Commands for cluster: Alarms
+#define ZCL_RESET_ALARM_COMMAND_ID (0x00)
+#define ZCL_ALARM_COMMAND_ID (0x00)
+#define ZCL_RESET_ALL_ALARMS_COMMAND_ID (0x01)
+#define ZCL_GET_ALARM_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_GET_ALARM_COMMAND_ID (0x02)
+#define ZCL_RESET_ALARM_LOG_COMMAND_ID (0x03)
+
+// Commands for cluster: RSSI Location
+#define ZCL_SET_ABSOLUTE_LOCATION_COMMAND_ID (0x00)
+#define ZCL_DEVICE_CONFIGURATION_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_SET_DEVICE_CONFIGURATION_COMMAND_ID (0x01)
+#define ZCL_LOCATION_DATA_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_GET_DEVICE_CONFIGURATION_COMMAND_ID (0x02)
+#define ZCL_LOCATION_DATA_NOTIFICATION_COMMAND_ID (0x02)
+#define ZCL_GET_LOCATION_DATA_COMMAND_ID (0x03)
+#define ZCL_COMPACT_LOCATION_DATA_NOTIFICATION_COMMAND_ID (0x03)
+#define ZCL_RSSI_RESPONSE_COMMAND_ID (0x04)
+#define ZCL_RSSI_PING_COMMAND_ID (0x04)
+#define ZCL_SEND_PINGS_COMMAND_ID (0x05)
+#define ZCL_RSSI_REQUEST_COMMAND_ID (0x05)
+#define ZCL_ANCHOR_NODE_ANNOUNCE_COMMAND_ID (0x06)
+#define ZCL_REPORT_RSSI_MEASUREMENTS_COMMAND_ID (0x06)
+#define ZCL_REQUEST_OWN_LOCATION_COMMAND_ID (0x07)
+
+// Commands for cluster: Commissioning
+#define ZCL_RESTART_DEVICE_COMMAND_ID (0x00)
+#define ZCL_RESTART_DEVICE_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_SAVE_STARTUP_PARAMETERS_COMMAND_ID (0x01)
+#define ZCL_SAVE_STARTUP_PARAMETERS_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_RESTORE_STARTUP_PARAMETERS_COMMAND_ID (0x02)
+#define ZCL_RESTORE_STARTUP_PARAMETERS_RESPONSE_COMMAND_ID (0x02)
+#define ZCL_RESET_STARTUP_PARAMETERS_COMMAND_ID (0x03)
+#define ZCL_RESET_STARTUP_PARAMETERS_RESPONSE_COMMAND_ID (0x03)
+
+// Commands for cluster: Partition
+#define ZCL_TRANSFER_PARTITIONED_FRAME_COMMAND_ID (0x00)
+#define ZCL_MULTIPLE_ACK_COMMAND_ID (0x00)
+#define ZCL_READ_HANDSHAKE_PARAM_COMMAND_ID (0x01)
+#define ZCL_READ_HANDSHAKE_PARAM_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_WRITE_HANDSHAKE_PARAM_COMMAND_ID (0x02)
+
+// Commands for cluster: Over the Air Bootloading
+#define ZCL_IMAGE_NOTIFY_COMMAND_ID (0x00)
+#define ZCL_QUERY_NEXT_IMAGE_REQUEST_COMMAND_ID (0x01)
+#define ZCL_QUERY_NEXT_IMAGE_RESPONSE_COMMAND_ID (0x02)
+#define ZCL_IMAGE_BLOCK_REQUEST_COMMAND_ID (0x03)
+#define ZCL_IMAGE_PAGE_REQUEST_COMMAND_ID (0x04)
+#define ZCL_IMAGE_BLOCK_RESPONSE_COMMAND_ID (0x05)
+#define ZCL_UPGRADE_END_REQUEST_COMMAND_ID (0x06)
+#define ZCL_UPGRADE_END_RESPONSE_COMMAND_ID (0x07)
+#define ZCL_QUERY_SPECIFIC_FILE_REQUEST_COMMAND_ID (0x08)
+#define ZCL_QUERY_SPECIFIC_FILE_RESPONSE_COMMAND_ID (0x09)
+
+// Commands for cluster: Power Profile
+#define ZCL_POWER_PROFILE_REQUEST_COMMAND_ID (0x00)
+#define ZCL_POWER_PROFILE_NOTIFICATION_COMMAND_ID (0x00)
+#define ZCL_POWER_PROFILE_STATE_REQUEST_COMMAND_ID (0x01)
+#define ZCL_POWER_PROFILE_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_GET_POWER_PROFILE_PRICE_RESPONSE_COMMAND_ID (0x02)
+#define ZCL_POWER_PROFILE_STATE_RESPONSE_COMMAND_ID (0x02)
+#define ZCL_GET_OVERALL_SCHEDULE_PRICE_RESPONSE_COMMAND_ID (0x03)
+#define ZCL_GET_POWER_PROFILE_PRICE_COMMAND_ID (0x03)
+#define ZCL_ENERGY_PHASES_SCHEDULE_NOTIFICATION_COMMAND_ID (0x04)
+#define ZCL_POWER_PROFILES_STATE_NOTIFICATION_COMMAND_ID (0x04)
+#define ZCL_ENERGY_PHASES_SCHEDULE_RESPONSE_COMMAND_ID (0x05)
+#define ZCL_GET_OVERALL_SCHEDULE_PRICE_COMMAND_ID (0x05)
+#define ZCL_POWER_PROFILE_SCHEDULE_CONSTRAINTS_REQUEST_COMMAND_ID (0x06)
+#define ZCL_ENERGY_PHASES_SCHEDULE_REQUEST_COMMAND_ID (0x06)
+#define ZCL_ENERGY_PHASES_SCHEDULE_STATE_REQUEST_COMMAND_ID (0x07)
+#define ZCL_ENERGY_PHASES_SCHEDULE_STATE_RESPONSE_COMMAND_ID (0x07)
+#define ZCL_GET_POWER_PROFILE_PRICE_EXTENDED_RESPONSE_COMMAND_ID (0x08)
+#define ZCL_ENERGY_PHASES_SCHEDULE_STATE_NOTIFICATION_COMMAND_ID (0x08)
+#define ZCL_POWER_PROFILE_SCHEDULE_CONSTRAINTS_NOTIFICATION_COMMAND_ID (0x09)
+#define ZCL_POWER_PROFILE_SCHEDULE_CONSTRAINTS_RESPONSE_COMMAND_ID (0x0A)
+#define ZCL_GET_POWER_PROFILE_PRICE_EXTENDED_COMMAND_ID (0x0B)
+
+// Commands for cluster: Appliance Control
+#define ZCL_EXECUTION_OF_A_COMMAND_COMMAND_ID (0x00)
+#define ZCL_SIGNAL_STATE_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_SIGNAL_STATE_COMMAND_ID (0x01)
+#define ZCL_SIGNAL_STATE_NOTIFICATION_COMMAND_ID (0x01)
+#define ZCL_WRITE_FUNCTIONS_COMMAND_ID (0x02)
+#define ZCL_OVERLOAD_PAUSE_RESUME_COMMAND_ID (0x03)
+#define ZCL_OVERLOAD_PAUSE_COMMAND_ID (0x04)
+#define ZCL_OVERLOAD_WARNING_COMMAND_ID (0x05)
+
+// Commands for cluster: Poll Control
+#define ZCL_CHECK_IN_COMMAND_ID (0x00)
+#define ZCL_CHECK_IN_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_FAST_POLL_STOP_COMMAND_ID (0x01)
+#define ZCL_SET_LONG_POLL_INTERVAL_COMMAND_ID (0x02)
+#define ZCL_SET_SHORT_POLL_INTERVAL_COMMAND_ID (0x03)
+
+// Commands for cluster: Green Power
+#define ZCL_GP_NOTIFICATION_COMMAND_ID (0x00)
+#define ZCL_GP_NOTIFICATION_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_GP_PAIRING_SEARCH_COMMAND_ID (0x01)
+#define ZCL_GP_PAIRING_COMMAND_ID (0x01)
+#define ZCL_GP_PROXY_COMMISSIONING_MODE_COMMAND_ID (0x02)
+#define ZCL_GP_TUNNELING_STOP_COMMAND_ID (0x03)
+#define ZCL_GP_COMMISSIONING_NOTIFICATION_COMMAND_ID (0x04)
+#define ZCL_GP_SINK_COMMISSIONING_MODE_COMMAND_ID (0x05)
+#define ZCL_GP_RESPONSE_COMMAND_ID (0x06)
+#define ZCL_GP_TRANSLATION_TABLE_UPDATE_COMMAND_ID (0x07)
+#define ZCL_GP_TRANSLATION_TABLE_REQUEST_COMMAND_ID (0x08)
+#define ZCL_GP_TRANSLATION_TABLE_RESPONSE_COMMAND_ID (0x08)
+#define ZCL_GP_PAIRING_CONFIGURATION_COMMAND_ID (0x09)
+#define ZCL_GP_SINK_TABLE_REQUEST_COMMAND_ID (0x0A)
+#define ZCL_GP_SINK_TABLE_RESPONSE_COMMAND_ID (0x0A)
+#define ZCL_GP_PROXY_TABLE_RESPONSE_COMMAND_ID (0x0B)
+#define ZCL_GP_PROXY_TABLE_REQUEST_COMMAND_ID (0x0B)
+
+// Commands for cluster: Door Lock
+#define ZCL_LOCK_DOOR_COMMAND_ID (0x00)
+#define ZCL_LOCK_DOOR_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_UNLOCK_DOOR_COMMAND_ID (0x01)
+#define ZCL_UNLOCK_DOOR_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_TOGGLE_COMMAND_ID (0x02)
+#define ZCL_TOGGLE_RESPONSE_COMMAND_ID (0x02)
+#define ZCL_UNLOCK_WITH_TIMEOUT_COMMAND_ID (0x03)
+#define ZCL_UNLOCK_WITH_TIMEOUT_RESPONSE_COMMAND_ID (0x03)
+#define ZCL_GET_LOG_RECORD_COMMAND_ID (0x04)
+#define ZCL_GET_LOG_RECORD_RESPONSE_COMMAND_ID (0x04)
+#define ZCL_SET_PIN_COMMAND_ID (0x05)
+#define ZCL_SET_PIN_RESPONSE_COMMAND_ID (0x05)
+#define ZCL_GET_PIN_COMMAND_ID (0x06)
+#define ZCL_GET_PIN_RESPONSE_COMMAND_ID (0x06)
+#define ZCL_CLEAR_PIN_COMMAND_ID (0x07)
+#define ZCL_CLEAR_PIN_RESPONSE_COMMAND_ID (0x07)
+#define ZCL_CLEAR_ALL_PINS_COMMAND_ID (0x08)
+#define ZCL_CLEAR_ALL_PINS_RESPONSE_COMMAND_ID (0x08)
+#define ZCL_SET_USER_STATUS_COMMAND_ID (0x09)
+#define ZCL_SET_USER_STATUS_RESPONSE_COMMAND_ID (0x09)
+#define ZCL_GET_USER_STATUS_COMMAND_ID (0x0A)
+#define ZCL_GET_USER_STATUS_RESPONSE_COMMAND_ID (0x0A)
+#define ZCL_SET_WEEKDAY_SCHEDULE_COMMAND_ID (0x0B)
+#define ZCL_SET_WEEKDAY_SCHEDULE_RESPONSE_COMMAND_ID (0x0B)
+#define ZCL_GET_WEEKDAY_SCHEDULE_COMMAND_ID (0x0C)
+#define ZCL_GET_WEEKDAY_SCHEDULE_RESPONSE_COMMAND_ID (0x0C)
+#define ZCL_CLEAR_WEEKDAY_SCHEDULE_COMMAND_ID (0x0D)
+#define ZCL_CLEAR_WEEKDAY_SCHEDULE_RESPONSE_COMMAND_ID (0x0D)
+#define ZCL_SET_YEARDAY_SCHEDULE_COMMAND_ID (0x0E)
+#define ZCL_SET_YEARDAY_SCHEDULE_RESPONSE_COMMAND_ID (0x0E)
+#define ZCL_GET_YEARDAY_SCHEDULE_COMMAND_ID (0x0F)
+#define ZCL_GET_YEARDAY_SCHEDULE_RESPONSE_COMMAND_ID (0x0F)
+#define ZCL_CLEAR_YEARDAY_SCHEDULE_COMMAND_ID (0x10)
+#define ZCL_CLEAR_YEARDAY_SCHEDULE_RESPONSE_COMMAND_ID (0x10)
+#define ZCL_SET_HOLIDAY_SCHEDULE_COMMAND_ID (0x11)
+#define ZCL_SET_HOLIDAY_SCHEDULE_RESPONSE_COMMAND_ID (0x11)
+#define ZCL_GET_HOLIDAY_SCHEDULE_COMMAND_ID (0x12)
+#define ZCL_GET_HOLIDAY_SCHEDULE_RESPONSE_COMMAND_ID (0x12)
+#define ZCL_CLEAR_HOLIDAY_SCHEDULE_COMMAND_ID (0x13)
+#define ZCL_CLEAR_HOLIDAY_SCHEDULE_RESPONSE_COMMAND_ID (0x13)
+#define ZCL_SET_USER_TYPE_COMMAND_ID (0x14)
+#define ZCL_SET_USER_TYPE_RESPONSE_COMMAND_ID (0x14)
+#define ZCL_GET_USER_TYPE_COMMAND_ID (0x15)
+#define ZCL_GET_USER_TYPE_RESPONSE_COMMAND_ID (0x15)
+#define ZCL_SET_RFID_COMMAND_ID (0x16)
+#define ZCL_SET_RFID_RESPONSE_COMMAND_ID (0x16)
+#define ZCL_GET_RFID_COMMAND_ID (0x17)
+#define ZCL_GET_RFID_RESPONSE_COMMAND_ID (0x17)
+#define ZCL_CLEAR_RFID_COMMAND_ID (0x18)
+#define ZCL_CLEAR_RFID_RESPONSE_COMMAND_ID (0x18)
+#define ZCL_CLEAR_ALL_RFIDS_COMMAND_ID (0x19)
+#define ZCL_CLEAR_ALL_RFIDS_RESPONSE_COMMAND_ID (0x19)
+#define ZCL_OPERATION_EVENT_NOTIFICATION_COMMAND_ID (0x20)
+#define ZCL_PROGRAMMING_EVENT_NOTIFICATION_COMMAND_ID (0x21)
+
+// Commands for cluster: Window Covering
+#define ZCL_WINDOW_COVERING_UP_OPEN_COMMAND_ID (0x00)
+#define ZCL_WINDOW_COVERING_DOWN_CLOSE_COMMAND_ID (0x01)
+#define ZCL_WINDOW_COVERING_STOP_COMMAND_ID (0x02)
+#define ZCL_WINDOW_COVERING_GO_TO_LIFT_VALUE_COMMAND_ID (0x04)
+#define ZCL_WINDOW_COVERING_GO_TO_LIFT_PERCENTAGE_COMMAND_ID (0x05)
+#define ZCL_WINDOW_COVERING_GO_TO_TILT_VALUE_COMMAND_ID (0x07)
+#define ZCL_WINDOW_COVERING_GO_TO_TILT_PERCENTAGE_COMMAND_ID (0x08)
+
+// Commands for cluster: Barrier Control
+#define ZCL_BARRIER_CONTROL_GO_TO_PERCENT_COMMAND_ID (0x00)
+#define ZCL_BARRIER_CONTROL_STOP_COMMAND_ID (0x01)
+
+// Commands for cluster: Thermostat
+#define ZCL_SETPOINT_RAISE_LOWER_COMMAND_ID (0x00)
+#define ZCL_CURRENT_WEEKLY_SCHEDULE_COMMAND_ID (0x00)
+#define ZCL_SET_WEEKLY_SCHEDULE_COMMAND_ID (0x01)
+#define ZCL_RELAY_STATUS_LOG_COMMAND_ID (0x01)
+#define ZCL_GET_WEEKLY_SCHEDULE_COMMAND_ID (0x02)
+#define ZCL_CLEAR_WEEKLY_SCHEDULE_COMMAND_ID (0x03)
+#define ZCL_GET_RELAY_STATUS_LOG_COMMAND_ID (0x04)
+
+// Commands for cluster: Color Control
+#define ZCL_MOVE_TO_HUE_COMMAND_ID (0x00)
+#define ZCL_MOVE_HUE_COMMAND_ID (0x01)
+#define ZCL_STEP_HUE_COMMAND_ID (0x02)
+#define ZCL_MOVE_TO_SATURATION_COMMAND_ID (0x03)
+#define ZCL_MOVE_SATURATION_COMMAND_ID (0x04)
+#define ZCL_STEP_SATURATION_COMMAND_ID (0x05)
+#define ZCL_MOVE_TO_HUE_AND_SATURATION_COMMAND_ID (0x06)
+#define ZCL_MOVE_TO_COLOR_COMMAND_ID (0x07)
+#define ZCL_MOVE_COLOR_COMMAND_ID (0x08)
+#define ZCL_STEP_COLOR_COMMAND_ID (0x09)
+#define ZCL_MOVE_TO_COLOR_TEMPERATURE_COMMAND_ID (0x0A)
+#define ZCL_ENHANCED_MOVE_TO_HUE_COMMAND_ID (0x40)
+#define ZCL_ENHANCED_MOVE_HUE_COMMAND_ID (0x41)
+#define ZCL_ENHANCED_STEP_HUE_COMMAND_ID (0x42)
+#define ZCL_ENHANCED_MOVE_TO_HUE_AND_SATURATION_COMMAND_ID (0x43)
+#define ZCL_COLOR_LOOP_SET_COMMAND_ID (0x44)
+#define ZCL_STOP_MOVE_STEP_COMMAND_ID (0x47)
+#define ZCL_MOVE_COLOR_TEMPERATURE_COMMAND_ID (0x4B)
+#define ZCL_STEP_COLOR_TEMPERATURE_COMMAND_ID (0x4C)
+
+// Commands for cluster: IAS Zone
+#define ZCL_ZONE_ENROLL_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_ZONE_STATUS_CHANGE_NOTIFICATION_COMMAND_ID (0x00)
+#define ZCL_INITIATE_NORMAL_OPERATION_MODE_COMMAND_ID (0x01)
+#define ZCL_ZONE_ENROLL_REQUEST_COMMAND_ID (0x01)
+#define ZCL_INITIATE_TEST_MODE_COMMAND_ID (0x02)
+#define ZCL_INITIATE_NORMAL_OPERATION_MODE_RESPONSE_COMMAND_ID (0x02)
+#define ZCL_INITIATE_TEST_MODE_RESPONSE_COMMAND_ID (0x03)
+
+// Commands for cluster: IAS ACE
+#define ZCL_ARM_COMMAND_ID (0x00)
+#define ZCL_ARM_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_BYPASS_COMMAND_ID (0x01)
+#define ZCL_GET_ZONE_ID_MAP_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_EMERGENCY_COMMAND_ID (0x02)
+#define ZCL_GET_ZONE_INFORMATION_RESPONSE_COMMAND_ID (0x02)
+#define ZCL_FIRE_COMMAND_ID (0x03)
+#define ZCL_ZONE_STATUS_CHANGED_COMMAND_ID (0x03)
+#define ZCL_PANIC_COMMAND_ID (0x04)
+#define ZCL_PANEL_STATUS_CHANGED_COMMAND_ID (0x04)
+#define ZCL_GET_ZONE_ID_MAP_COMMAND_ID (0x05)
+#define ZCL_GET_PANEL_STATUS_RESPONSE_COMMAND_ID (0x05)
+#define ZCL_GET_ZONE_INFORMATION_COMMAND_ID (0x06)
+#define ZCL_SET_BYPASSED_ZONE_LIST_COMMAND_ID (0x06)
+#define ZCL_GET_PANEL_STATUS_COMMAND_ID (0x07)
+#define ZCL_BYPASS_RESPONSE_COMMAND_ID (0x07)
+#define ZCL_GET_BYPASSED_ZONE_LIST_COMMAND_ID (0x08)
+#define ZCL_GET_ZONE_STATUS_RESPONSE_COMMAND_ID (0x08)
+#define ZCL_GET_ZONE_STATUS_COMMAND_ID (0x09)
+
+// Commands for cluster: IAS WD
+#define ZCL_START_WARNING_COMMAND_ID (0x00)
+#define ZCL_SQUAWK_COMMAND_ID (0x01)
+
+// Commands for cluster: Generic Tunnel
+#define ZCL_MATCH_PROTOCOL_ADDRESS_COMMAND_ID (0x00)
+#define ZCL_MATCH_PROTOCOL_ADDRESS_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_ADVERTISE_PROTOCOL_ADDRESS_COMMAND_ID (0x01)
+
+// Commands for cluster: BACnet Protocol Tunnel
+#define ZCL_TRANSFER_NPDU_COMMAND_ID (0x00)
+
+// Commands for cluster: 11073 Protocol Tunnel
+#define ZCL_TRANSFER_APDU_COMMAND_ID (0x00)
+#define ZCL_CONNECT_REQUEST_COMMAND_ID (0x01)
+#define ZCL_DISCONNECT_REQUEST_COMMAND_ID (0x02)
+#define ZCL_CONNECT_STATUS_NOTIFICATION_COMMAND_ID (0x03)
+
+// Commands for cluster: ISO 7816 Protocol Tunnel
+#define ZCL_TRANSFER_APDU_COMMAND_ID (0x00)
+#define ZCL_INSERT_SMART_CARD_COMMAND_ID (0x01)
+#define ZCL_EXTRACT_SMART_CARD_COMMAND_ID (0x02)
+
+// Commands for cluster: Price
+#define ZCL_PUBLISH_PRICE_COMMAND_ID (0x00)
+#define ZCL_GET_CURRENT_PRICE_COMMAND_ID (0x00)
+#define ZCL_PUBLISH_BLOCK_PERIOD_COMMAND_ID (0x01)
+#define ZCL_GET_SCHEDULED_PRICES_COMMAND_ID (0x01)
+#define ZCL_PUBLISH_CONVERSION_FACTOR_COMMAND_ID (0x02)
+#define ZCL_PRICE_ACKNOWLEDGEMENT_COMMAND_ID (0x02)
+#define ZCL_PUBLISH_CALORIFIC_VALUE_COMMAND_ID (0x03)
+#define ZCL_GET_BLOCK_PERIODS_COMMAND_ID (0x03)
+#define ZCL_PUBLISH_TARIFF_INFORMATION_COMMAND_ID (0x04)
+#define ZCL_GET_CONVERSION_FACTOR_COMMAND_ID (0x04)
+#define ZCL_PUBLISH_PRICE_MATRIX_COMMAND_ID (0x05)
+#define ZCL_GET_CALORIFIC_VALUE_COMMAND_ID (0x05)
+#define ZCL_PUBLISH_BLOCK_THRESHOLDS_COMMAND_ID (0x06)
+#define ZCL_GET_TARIFF_INFORMATION_COMMAND_ID (0x06)
+#define ZCL_PUBLISH_CO2_VALUE_COMMAND_ID (0x07)
+#define ZCL_GET_PRICE_MATRIX_COMMAND_ID (0x07)
+#define ZCL_PUBLISH_TIER_LABELS_COMMAND_ID (0x08)
+#define ZCL_GET_BLOCK_THRESHOLDS_COMMAND_ID (0x08)
+#define ZCL_PUBLISH_BILLING_PERIOD_COMMAND_ID (0x09)
+#define ZCL_GET_CO2_VALUE_COMMAND_ID (0x09)
+#define ZCL_PUBLISH_CONSOLIDATED_BILL_COMMAND_ID (0x0A)
+#define ZCL_GET_TIER_LABELS_COMMAND_ID (0x0A)
+#define ZCL_PUBLISH_CPP_EVENT_COMMAND_ID (0x0B)
+#define ZCL_GET_BILLING_PERIOD_COMMAND_ID (0x0B)
+#define ZCL_PUBLISH_CREDIT_PAYMENT_COMMAND_ID (0x0C)
+#define ZCL_GET_CONSOLIDATED_BILL_COMMAND_ID (0x0C)
+#define ZCL_PUBLISH_CURRENCY_CONVERSION_COMMAND_ID (0x0D)
+#define ZCL_CPP_EVENT_RESPONSE_COMMAND_ID (0x0D)
+#define ZCL_CANCEL_TARIFF_COMMAND_ID (0x0E)
+#define ZCL_GET_CREDIT_PAYMENT_COMMAND_ID (0x0E)
+#define ZCL_GET_CURRENCY_CONVERSION_COMMAND_COMMAND_ID (0x0F)
+#define ZCL_GET_TARIFF_CANCELLATION_COMMAND_ID (0x10)
+
+// Commands for cluster: Demand Response and Load Control
+#define ZCL_LOAD_CONTROL_EVENT_COMMAND_ID (0x00)
+#define ZCL_REPORT_EVENT_STATUS_COMMAND_ID (0x00)
+#define ZCL_CANCEL_LOAD_CONTROL_EVENT_COMMAND_ID (0x01)
+#define ZCL_GET_SCHEDULED_EVENTS_COMMAND_ID (0x01)
+#define ZCL_CANCEL_ALL_LOAD_CONTROL_EVENTS_COMMAND_ID (0x02)
+
+// Commands for cluster: Simple Metering
+#define ZCL_GET_PROFILE_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_GET_PROFILE_COMMAND_ID (0x00)
+#define ZCL_REQUEST_MIRROR_COMMAND_ID (0x01)
+#define ZCL_REQUEST_MIRROR_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_REMOVE_MIRROR_COMMAND_ID (0x02)
+#define ZCL_MIRROR_REMOVED_COMMAND_ID (0x02)
+#define ZCL_REQUEST_FAST_POLL_MODE_RESPONSE_COMMAND_ID (0x03)
+#define ZCL_REQUEST_FAST_POLL_MODE_COMMAND_ID (0x03)
+#define ZCL_SCHEDULE_SNAPSHOT_RESPONSE_COMMAND_ID (0x04)
+#define ZCL_SCHEDULE_SNAPSHOT_COMMAND_ID (0x04)
+#define ZCL_TAKE_SNAPSHOT_RESPONSE_COMMAND_ID (0x05)
+#define ZCL_TAKE_SNAPSHOT_COMMAND_ID (0x05)
+#define ZCL_PUBLISH_SNAPSHOT_COMMAND_ID (0x06)
+#define ZCL_GET_SNAPSHOT_COMMAND_ID (0x06)
+#define ZCL_GET_SAMPLED_DATA_RESPONSE_COMMAND_ID (0x07)
+#define ZCL_START_SAMPLING_COMMAND_ID (0x07)
+#define ZCL_CONFIGURE_MIRROR_COMMAND_ID (0x08)
+#define ZCL_GET_SAMPLED_DATA_COMMAND_ID (0x08)
+#define ZCL_CONFIGURE_NOTIFICATION_SCHEME_COMMAND_ID (0x09)
+#define ZCL_MIRROR_REPORT_ATTRIBUTE_RESPONSE_COMMAND_ID (0x09)
+#define ZCL_CONFIGURE_NOTIFICATION_FLAGS_COMMAND_ID (0x0A)
+#define ZCL_RESET_LOAD_LIMIT_COUNTER_COMMAND_ID (0x0A)
+#define ZCL_GET_NOTIFIED_MESSAGE_COMMAND_ID (0x0B)
+#define ZCL_CHANGE_SUPPLY_COMMAND_ID (0x0B)
+#define ZCL_SUPPLY_STATUS_RESPONSE_COMMAND_ID (0x0C)
+#define ZCL_LOCAL_CHANGE_SUPPLY_COMMAND_ID (0x0C)
+#define ZCL_START_SAMPLING_RESPONSE_COMMAND_ID (0x0D)
+#define ZCL_SET_SUPPLY_STATUS_COMMAND_ID (0x0D)
+#define ZCL_SET_UNCONTROLLED_FLOW_THRESHOLD_COMMAND_ID (0x0E)
+
+// Commands for cluster: Messaging
+#define ZCL_DISPLAY_MESSAGE_COMMAND_ID (0x00)
+#define ZCL_GET_LAST_MESSAGE_COMMAND_ID (0x00)
+#define ZCL_CANCEL_MESSAGE_COMMAND_ID (0x01)
+#define ZCL_MESSAGE_CONFIRMATION_COMMAND_ID (0x01)
+#define ZCL_DISPLAY_PROTECTED_MESSAGE_COMMAND_ID (0x02)
+#define ZCL_GET_MESSAGE_CANCELLATION_COMMAND_ID (0x02)
+#define ZCL_CANCEL_ALL_MESSAGES_COMMAND_ID (0x03)
+
+// Commands for cluster: Tunneling
+#define ZCL_REQUEST_TUNNEL_COMMAND_ID (0x00)
+#define ZCL_REQUEST_TUNNEL_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_CLOSE_TUNNEL_COMMAND_ID (0x01)
+#define ZCL_TRANSFER_DATA_SERVER_TO_CLIENT_COMMAND_ID (0x01)
+#define ZCL_TRANSFER_DATA_CLIENT_TO_SERVER_COMMAND_ID (0x02)
+#define ZCL_TRANSFER_DATA_ERROR_SERVER_TO_CLIENT_COMMAND_ID (0x02)
+#define ZCL_TRANSFER_DATA_ERROR_CLIENT_TO_SERVER_COMMAND_ID (0x03)
+#define ZCL_ACK_TRANSFER_DATA_SERVER_TO_CLIENT_COMMAND_ID (0x03)
+#define ZCL_ACK_TRANSFER_DATA_CLIENT_TO_SERVER_COMMAND_ID (0x04)
+#define ZCL_READY_DATA_SERVER_TO_CLIENT_COMMAND_ID (0x04)
+#define ZCL_READY_DATA_CLIENT_TO_SERVER_COMMAND_ID (0x05)
+#define ZCL_SUPPORTED_TUNNEL_PROTOCOLS_RESPONSE_COMMAND_ID (0x05)
+#define ZCL_GET_SUPPORTED_TUNNEL_PROTOCOLS_COMMAND_ID (0x06)
+#define ZCL_TUNNEL_CLOSURE_NOTIFICATION_COMMAND_ID (0x06)
+
+// Commands for cluster: Prepayment
+#define ZCL_SELECT_AVAILABLE_EMERGENCY_CREDIT_COMMAND_ID (0x00)
+#define ZCL_PUBLISH_PREPAY_SNAPSHOT_COMMAND_ID (0x01)
+#define ZCL_CHANGE_DEBT_COMMAND_ID (0x02)
+#define ZCL_CHANGE_PAYMENT_MODE_RESPONSE_COMMAND_ID (0x02)
+#define ZCL_EMERGENCY_CREDIT_SETUP_COMMAND_ID (0x03)
+#define ZCL_CONSUMER_TOP_UP_RESPONSE_COMMAND_ID (0x03)
+#define ZCL_CONSUMER_TOP_UP_COMMAND_ID (0x04)
+#define ZCL_CREDIT_ADJUSTMENT_COMMAND_ID (0x05)
+#define ZCL_PUBLISH_TOP_UP_LOG_COMMAND_ID (0x05)
+#define ZCL_CHANGE_PAYMENT_MODE_COMMAND_ID (0x06)
+#define ZCL_PUBLISH_DEBT_LOG_COMMAND_ID (0x06)
+#define ZCL_GET_PREPAY_SNAPSHOT_COMMAND_ID (0x07)
+#define ZCL_GET_TOP_UP_LOG_COMMAND_ID (0x08)
+#define ZCL_SET_LOW_CREDIT_WARNING_LEVEL_COMMAND_ID (0x09)
+#define ZCL_GET_DEBT_REPAYMENT_LOG_COMMAND_ID (0x0A)
+#define ZCL_SET_MAXIMUM_CREDIT_LIMIT_COMMAND_ID (0x0B)
+#define ZCL_SET_OVERALL_DEBT_CAP_COMMAND_ID (0x0C)
+
+// Commands for cluster: Energy Management
+#define ZCL_REPORT_EVENT_STATUS_COMMAND_ID (0x00)
+#define ZCL_MANAGE_EVENT_COMMAND_ID (0x00)
+
+// Commands for cluster: Calendar
+#define ZCL_PUBLISH_CALENDAR_COMMAND_ID (0x00)
+#define ZCL_GET_CALENDAR_COMMAND_ID (0x00)
+#define ZCL_PUBLISH_DAY_PROFILE_COMMAND_ID (0x01)
+#define ZCL_GET_DAY_PROFILES_COMMAND_ID (0x01)
+#define ZCL_PUBLISH_WEEK_PROFILE_COMMAND_ID (0x02)
+#define ZCL_GET_WEEK_PROFILES_COMMAND_ID (0x02)
+#define ZCL_PUBLISH_SEASONS_COMMAND_ID (0x03)
+#define ZCL_GET_SEASONS_COMMAND_ID (0x03)
+#define ZCL_PUBLISH_SPECIAL_DAYS_COMMAND_ID (0x04)
+#define ZCL_GET_SPECIAL_DAYS_COMMAND_ID (0x04)
+#define ZCL_CANCEL_CALENDAR_COMMAND_ID (0x05)
+#define ZCL_GET_CALENDAR_CANCELLATION_COMMAND_ID (0x05)
+
+// Commands for cluster: Device Management
+#define ZCL_GET_CHANGE_OF_TENANCY_COMMAND_ID (0x00)
+#define ZCL_PUBLISH_CHANGE_OF_TENANCY_COMMAND_ID (0x00)
+#define ZCL_GET_CHANGE_OF_SUPPLIER_COMMAND_ID (0x01)
+#define ZCL_PUBLISH_CHANGE_OF_SUPPLIER_COMMAND_ID (0x01)
+#define ZCL_REQUEST_NEW_PASSWORD_COMMAND_ID (0x02)
+#define ZCL_REQUEST_NEW_PASSWORD_RESPONSE_COMMAND_ID (0x02)
+#define ZCL_GET_SITE_ID_COMMAND_ID (0x03)
+#define ZCL_UPDATE_SITE_ID_COMMAND_ID (0x03)
+#define ZCL_REPORT_EVENT_CONFIGURATION_COMMAND_ID (0x04)
+#define ZCL_SET_EVENT_CONFIGURATION_COMMAND_ID (0x04)
+#define ZCL_GET_CIN_COMMAND_ID (0x05)
+#define ZCL_GET_EVENT_CONFIGURATION_COMMAND_ID (0x05)
+#define ZCL_UPDATE_CIN_COMMAND_ID (0x06)
+
+// Commands for cluster: Events
+#define ZCL_GET_EVENT_LOG_COMMAND_ID (0x00)
+#define ZCL_PUBLISH_EVENT_COMMAND_ID (0x00)
+#define ZCL_CLEAR_EVENT_LOG_REQUEST_COMMAND_ID (0x01)
+#define ZCL_PUBLISH_EVENT_LOG_COMMAND_ID (0x01)
+#define ZCL_CLEAR_EVENT_LOG_RESPONSE_COMMAND_ID (0x02)
+
+// Commands for cluster: MDU Pairing
+#define ZCL_PAIRING_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_PAIRING_REQUEST_COMMAND_ID (0x00)
+
+// Commands for cluster: Sub-GHz
+#define ZCL_SUSPEND_ZCL_MESSAGES_COMMAND_ID (0x00)
+#define ZCL_GET_SUSPEND_ZCL_MESSAGES_STATUS_COMMAND_ID (0x00)
+
+// Commands for cluster: Key Establishment
+#define ZCL_INITIATE_KEY_ESTABLISHMENT_REQUEST_COMMAND_ID (0x00)
+#define ZCL_INITIATE_KEY_ESTABLISHMENT_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_EPHEMERAL_DATA_REQUEST_COMMAND_ID (0x01)
+#define ZCL_EPHEMERAL_DATA_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_CONFIRM_KEY_DATA_REQUEST_COMMAND_ID (0x02)
+#define ZCL_CONFIRM_KEY_DATA_RESPONSE_COMMAND_ID (0x02)
+#define ZCL_TERMINATE_KEY_ESTABLISHMENT_COMMAND_ID (0x03)
+
+// Commands for cluster: Information
+#define ZCL_REQUEST_INFORMATION_COMMAND_ID (0x00)
+#define ZCL_REQUEST_INFORMATION_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_PUSH_INFORMATION_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_PUSH_INFORMATION_COMMAND_ID (0x01)
+#define ZCL_SEND_PREFERENCE_COMMAND_ID (0x02)
+#define ZCL_SEND_PREFERENCE_RESPONSE_COMMAND_ID (0x02)
+#define ZCL_REQUEST_PREFERENCE_RESPONSE_COMMAND_ID (0x03)
+#define ZCL_SERVER_REQUEST_PREFERENCE_COMMAND_ID (0x03)
+#define ZCL_UPDATE_COMMAND_ID (0x04)
+#define ZCL_REQUEST_PREFERENCE_CONFIRMATION_COMMAND_ID (0x04)
+#define ZCL_DELETE_COMMAND_ID (0x05)
+#define ZCL_UPDATE_RESPONSE_COMMAND_ID (0x05)
+#define ZCL_CONFIGURE_NODE_DESCRIPTION_COMMAND_ID (0x06)
+#define ZCL_DELETE_RESPONSE_COMMAND_ID (0x06)
+#define ZCL_CONFIGURE_DELIVERY_ENABLE_COMMAND_ID (0x07)
+#define ZCL_CONFIGURE_PUSH_INFORMATION_TIMER_COMMAND_ID (0x08)
+#define ZCL_CONFIGURE_SET_ROOT_ID_COMMAND_ID (0x09)
+
+// Commands for cluster: Data Sharing
+#define ZCL_READ_FILE_REQUEST_COMMAND_ID (0x00)
+#define ZCL_WRITE_FILE_REQUEST_COMMAND_ID (0x00)
+#define ZCL_READ_RECORD_REQUEST_COMMAND_ID (0x01)
+#define ZCL_MODIFY_FILE_REQUEST_COMMAND_ID (0x01)
+#define ZCL_WRITE_FILE_RESPONSE_COMMAND_ID (0x02)
+#define ZCL_MODIFY_RECORD_REQUEST_COMMAND_ID (0x02)
+#define ZCL_FILE_TRANSMISSION_COMMAND_ID (0x03)
+#define ZCL_RECORD_TRANSMISSION_COMMAND_ID (0x04)
+
+// Commands for cluster: Gaming
+#define ZCL_SEARCH_GAME_COMMAND_ID (0x00)
+#define ZCL_GAME_ANNOUNCEMENT_COMMAND_ID (0x00)
+#define ZCL_JOIN_GAME_COMMAND_ID (0x01)
+#define ZCL_GENERAL_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_START_GAME_COMMAND_ID (0x02)
+#define ZCL_PAUSE_GAME_COMMAND_ID (0x03)
+#define ZCL_RESUME_GAME_COMMAND_ID (0x04)
+#define ZCL_QUIT_GAME_COMMAND_ID (0x05)
+#define ZCL_END_GAME_COMMAND_ID (0x06)
+#define ZCL_START_OVER_COMMAND_ID (0x07)
+#define ZCL_ACTION_CONTROL_COMMAND_ID (0x08)
+#define ZCL_DOWNLOAD_GAME_COMMAND_ID (0x09)
+
+// Commands for cluster: Data Rate Control
+#define ZCL_PATH_CREATION_COMMAND_ID (0x00)
+#define ZCL_DATA_RATE_CONTROL_COMMAND_ID (0x00)
+#define ZCL_DATA_RATE_NOTIFICATION_COMMAND_ID (0x01)
+#define ZCL_PATH_DELETION_COMMAND_ID (0x02)
+
+// Commands for cluster: Voice over ZigBee
+#define ZCL_ESTABLISHMENT_REQUEST_COMMAND_ID (0x00)
+#define ZCL_ESTABLISHMENT_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_VOICE_TRANSMISSION_COMMAND_ID (0x01)
+#define ZCL_VOICE_TRANSMISSION_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_VOICE_TRANSMISSION_COMPLETION_COMMAND_ID (0x02)
+#define ZCL_CONTROL_COMMAND_ID (0x02)
+#define ZCL_CONTROL_RESPONSE_COMMAND_ID (0x03)
+
+// Commands for cluster: Chatting
+#define ZCL_JOIN_CHAT_REQUEST_COMMAND_ID (0x00)
+#define ZCL_START_CHAT_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_LEAVE_CHAT_REQUEST_COMMAND_ID (0x01)
+#define ZCL_JOIN_CHAT_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_SEARCH_CHAT_REQUEST_COMMAND_ID (0x02)
+#define ZCL_USER_LEFT_COMMAND_ID (0x02)
+#define ZCL_SWITCH_CHAIRMAN_RESPONSE_COMMAND_ID (0x03)
+#define ZCL_USER_JOINED_COMMAND_ID (0x03)
+#define ZCL_START_CHAT_REQUEST_COMMAND_ID (0x04)
+#define ZCL_SEARCH_CHAT_RESPONSE_COMMAND_ID (0x04)
+#define ZCL_CHAT_MESSAGE_COMMAND_ID (0x05)
+#define ZCL_SWITCH_CHAIRMAN_REQUEST_COMMAND_ID (0x05)
+#define ZCL_GET_NODE_INFORMATION_REQUEST_COMMAND_ID (0x06)
+#define ZCL_SWITCH_CHAIRMAN_CONFIRM_COMMAND_ID (0x06)
+#define ZCL_SWITCH_CHAIRMAN_NOTIFICATION_COMMAND_ID (0x07)
+#define ZCL_GET_NODE_INFORMATION_RESPONSE_COMMAND_ID (0x08)
+
+// Commands for cluster: Payment
+#define ZCL_BUY_REQUEST_COMMAND_ID (0x00)
+#define ZCL_BUY_CONFIRM_COMMAND_ID (0x00)
+#define ZCL_ACCEPT_PAYMENT_COMMAND_ID (0x01)
+#define ZCL_RECEIPT_DELIVERY_COMMAND_ID (0x01)
+#define ZCL_PAYMENT_CONFIRM_COMMAND_ID (0x02)
+#define ZCL_TRANSACTION_END_COMMAND_ID (0x02)
+
+// Commands for cluster: Billing
+#define ZCL_SUBSCRIBE_COMMAND_ID (0x00)
+#define ZCL_CHECK_BILL_STATUS_COMMAND_ID (0x00)
+#define ZCL_UNSUBSCRIBE_COMMAND_ID (0x01)
+#define ZCL_SEND_BILL_RECORD_COMMAND_ID (0x01)
+#define ZCL_START_BILLING_SESSION_COMMAND_ID (0x02)
+#define ZCL_STOP_BILLING_SESSION_COMMAND_ID (0x03)
+#define ZCL_BILL_STATUS_NOTIFICATION_COMMAND_ID (0x04)
+#define ZCL_SESSION_KEEP_ALIVE_COMMAND_ID (0x05)
+
+// Commands for cluster: Appliance Events and Alert
+#define ZCL_GET_ALERTS_COMMAND_ID (0x00)
+#define ZCL_GET_ALERTS_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_ALERTS_NOTIFICATION_COMMAND_ID (0x01)
+#define ZCL_EVENTS_NOTIFICATION_COMMAND_ID (0x02)
+
+// Commands for cluster: Appliance Statistics
+#define ZCL_LOG_NOTIFICATION_COMMAND_ID (0x00)
+#define ZCL_LOG_REQUEST_COMMAND_ID (0x00)
+#define ZCL_LOG_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_LOG_QUEUE_REQUEST_COMMAND_ID (0x01)
+#define ZCL_LOG_QUEUE_RESPONSE_COMMAND_ID (0x02)
+#define ZCL_STATISTICS_AVAILABLE_COMMAND_ID (0x03)
+
+// Commands for cluster: Electrical Measurement
+#define ZCL_GET_PROFILE_INFO_RESPONSE_COMMAND_COMMAND_ID (0x00)
+#define ZCL_GET_PROFILE_INFO_COMMAND_COMMAND_ID (0x00)
+#define ZCL_GET_MEASUREMENT_PROFILE_RESPONSE_COMMAND_COMMAND_ID (0x01)
+#define ZCL_GET_MEASUREMENT_PROFILE_COMMAND_COMMAND_ID (0x01)
+
+// Commands for cluster: ZLL Commissioning
+#define ZCL_SCAN_REQUEST_COMMAND_ID (0x00)
+#define ZCL_SCAN_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_DEVICE_INFORMATION_REQUEST_COMMAND_ID (0x02)
+#define ZCL_DEVICE_INFORMATION_RESPONSE_COMMAND_ID (0x03)
+#define ZCL_IDENTIFY_REQUEST_COMMAND_ID (0x06)
+#define ZCL_RESET_TO_FACTORY_NEW_REQUEST_COMMAND_ID (0x07)
+#define ZCL_NETWORK_START_REQUEST_COMMAND_ID (0x10)
+#define ZCL_NETWORK_START_RESPONSE_COMMAND_ID (0x11)
+#define ZCL_NETWORK_JOIN_ROUTER_REQUEST_COMMAND_ID (0x12)
+#define ZCL_NETWORK_JOIN_ROUTER_RESPONSE_COMMAND_ID (0x13)
+#define ZCL_NETWORK_JOIN_END_DEVICE_REQUEST_COMMAND_ID (0x14)
+#define ZCL_NETWORK_JOIN_END_DEVICE_RESPONSE_COMMAND_ID (0x15)
+#define ZCL_NETWORK_UPDATE_REQUEST_COMMAND_ID (0x16)
+#define ZCL_ENDPOINT_INFORMATION_COMMAND_ID (0x40)
+#define ZCL_GET_GROUP_IDENTIFIERS_REQUEST_COMMAND_ID (0x41)
+#define ZCL_GET_GROUP_IDENTIFIERS_RESPONSE_COMMAND_ID (0x41)
+#define ZCL_GET_ENDPOINT_LIST_REQUEST_COMMAND_ID (0x42)
+#define ZCL_GET_ENDPOINT_LIST_RESPONSE_COMMAND_ID (0x42)
+
+// Commands for cluster: Binding
+#define ZCL_BIND_COMMAND_ID (0x00)
+#define ZCL_UNBIND_COMMAND_ID (0x01)
+
+// Commands for cluster: Sample Mfg Specific Cluster
+#define ZCL_COMMAND_ONE_COMMAND_ID (0x00)
+
+// Commands for cluster: Sample Mfg Specific Cluster 2
+#define ZCL_COMMAND_TWO_COMMAND_ID (0x00)
+
+// Commands for cluster: Configuration Cluster
+#define ZCL_SET_TOKEN_COMMAND_ID (0x00)
+#define ZCL_RETURN_TOKEN_COMMAND_ID (0x00)
+#define ZCL_LOCK_TOKENS_COMMAND_ID (0x01)
+#define ZCL_READ_TOKENS_COMMAND_ID (0x02)
+#define ZCL_UNLOCK_TOKENS_COMMAND_ID (0x03)
+
+// Commands for cluster: MFGLIB Cluster
+#define ZCL_STREAM_COMMAND_ID (0x00)
+#define ZCL_TONE_COMMAND_ID (0x01)
+#define ZCL_RX_MODE_COMMAND_ID (0x02)
+
+// Commands for cluster: SL Works With All Hubs
+#define ZCL_ENABLE_APS_LINK_KEY_AUTHORIZATION_COMMAND_ID (0x00)
+#define ZCL_APS_LINK_KEY_AUTHORIZATION_QUERY_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_DISABLE_APS_LINK_KEY_AUTHORIZATION_COMMAND_ID (0x01)
+#define ZCL_POWERING_OFF_NOTIFICATION_COMMAND_ID (0x01)
+#define ZCL_APS_LINK_KEY_AUTHORIZATION_QUERY_COMMAND_ID (0x02)
+#define ZCL_POWERING_ON_NOTIFICATION_COMMAND_ID (0x02)
+#define ZCL_REQUEST_NEW_APS_LINK_KEY_COMMAND_ID (0x03)
+#define ZCL_SHORT_ADDRESS_CHANGE_COMMAND_ID (0x03)
+#define ZCL_ENABLE_WWAH_APP_EVENT_RETRY_ALGORITHM_COMMAND_ID (0x04)
+#define ZCL_APS_ACK_ENABLEMENT_QUERY_RESPONSE_COMMAND_ID (0x04)
+#define ZCL_DISABLE_WWAH_APP_EVENT_RETRY_ALGORITHM_COMMAND_ID (0x05)
+#define ZCL_POWER_DESCRIPTOR_CHANGE_COMMAND_ID (0x05)
+#define ZCL_REQUEST_TIME_COMMAND_ID (0x06)
+#define ZCL_NEW_DEBUG_REPORT_NOTIFICATION_COMMAND_ID (0x06)
+#define ZCL_ENABLE_WWAH_REJOIN_ALGORITHM_COMMAND_ID (0x07)
+#define ZCL_DEBUG_REPORT_QUERY_RESPONSE_COMMAND_ID (0x07)
+#define ZCL_DISABLE_WWAH_REJOIN_ALGORITHM_COMMAND_ID (0x08)
+#define ZCL_TRUST_CENTER_FOR_CLUSTER_SERVER_QUERY_RESPONSE_COMMAND_ID (0x08)
+#define ZCL_SET_IAS_ZONE_ENROLLMENT_METHOD_COMMAND_ID (0x09)
+#define ZCL_SURVEY_BEACONS_RESPONSE_COMMAND_ID (0x09)
+#define ZCL_CLEAR_BINDING_TABLE_COMMAND_ID (0x0A)
+#define ZCL_ENABLE_PERIODIC_ROUTER_CHECK_INS_COMMAND_ID (0x0B)
+#define ZCL_DISABLE_PERIODIC_ROUTER_CHECK_INS_COMMAND_ID (0x0C)
+#define ZCL_SET_MAC_POLL_FAILURE_WAIT_TIME_COMMAND_ID (0x0D)
+#define ZCL_SET_PENDING_NETWORK_UPDATE_COMMAND_ID (0x0E)
+#define ZCL_REQUIRE_APS_ACKS_ON_UNICASTS_COMMAND_ID (0x0F)
+#define ZCL_REMOVE_APS_ACKS_ON_UNICASTS_REQUIREMENT_COMMAND_ID (0x10)
+#define ZCL_APS_ACK_REQUIREMENT_QUERY_COMMAND_ID (0x11)
+#define ZCL_DEBUG_REPORT_QUERY_COMMAND_ID (0x12)
+#define ZCL_SURVEY_BEACONS_COMMAND_ID (0x13)
+#define ZCL_DISABLE_OTA_DOWNGRADES_COMMAND_ID (0x14)
+#define ZCL_DISABLE_MGMT_LEAVE_WITHOUT_REJOIN_COMMAND_ID (0x15)
+#define ZCL_DISABLE_TOUCHLINK_INTERPAN_MESSAGE_SUPPORT_COMMAND_ID (0x16)
+#define ZCL_ENABLE_WWAH_PARENT_CLASSIFICATION_COMMAND_ID (0x17)
+#define ZCL_DISABLE_WWAH_PARENT_CLASSIFICATION_COMMAND_ID (0x18)
+#define ZCL_ENABLE_TC_SECURITY_ON_NTWK_KEY_ROTATION_COMMAND_ID (0x19)
+#define ZCL_ENABLE_WWAH_BAD_PARENT_RECOVERY_COMMAND_ID (0x1A)
+#define ZCL_DISABLE_WWAH_BAD_PARENT_RECOVERY_COMMAND_ID (0x1B)
+#define ZCL_ENABLE_CONFIGURATION_MODE_COMMAND_ID (0x1C)
+#define ZCL_DISABLE_CONFIGURATION_MODE_COMMAND_ID (0x1D)
+#define ZCL_USE_TRUST_CENTER_FOR_CLUSTER_SERVER_COMMAND_ID (0x1E)
+#define ZCL_TRUST_CENTER_FOR_CLUSTER_SERVER_QUERY_COMMAND_ID (0x1F)
+#define ZCL_USE_TRUST_CENTER_FOR_CLUSTER_SERVER_RESPONSE_COMMAND_ID (0x9E)
diff --git a/src/darwin/Framework/CHIP/gen/endpoint_config.h b/src/darwin/Framework/CHIP/gen/endpoint_config.h
new file mode 100644
index 0000000..2d57360
--- /dev/null
+++ b/src/darwin/Framework/CHIP/gen/endpoint_config.h
@@ -0,0 +1,428 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+// Prevent multiple inclusion
+#pragma once
+
+// Default values for the attributes longer than a pointer,
+// in a form of a binary blob
+// Separate block is generated for big-endian and little-endian cases.
+#if BIGENDIAN_CPU
+#define GENERATED_DEFAULTS                                                                                                         \
+    {                                                                                                                              \
+    }
+
+#else // !BIGENDIAN_CPU
+#define GENERATED_DEFAULTS                                                                                                         \
+    {                                                                                                                              \
+    }
+
+#endif // BIGENDIAN_CPU
+
+#define GENERATED_DEFAULTS_COUNT (0)
+
+#define ZAP_TYPE(type) ZCL_##type##_ATTRIBUTE_TYPE
+#define ZAP_LONG_DEFAULTS_INDEX(index)                                                                                             \
+    {                                                                                                                              \
+        (uint8_t *) (&generatedDefaults[index])                                                                                    \
+    }
+#define ZAP_MIN_MAX_DEFAULTS_INDEX(index)                                                                                          \
+    {                                                                                                                              \
+        (uint8_t *) (&minMaxDefault[index])                                                                                        \
+    }
+
+// This is an array of EmberAfAttributeMinMaxValue structures.
+#define GENERATED_MIN_MAX_DEFAULT_COUNT 0
+#define GENERATED_MIN_MAX_DEFAULTS                                                                                                 \
+    {                                                                                                                              \
+    }
+
+#define ZAP_ATTRIBUTE_MASK(mask) ATTRIBUTE_MASK_##mask
+// This is an array of EmberAfAttributeMetadata structures.
+#define GENERATED_ATTRIBUTE_COUNT 11
+#define GENERATED_ATTRIBUTES                                                                                                       \
+    {                                                                                                                              \
+        { 0xFFFD, ZAP_TYPE(INT16U), 2, ZAP_ATTRIBUTE_MASK(CLIENT), { (uint8_t *) 3 } }, /* Basic (client): cluster revision */     \
+            {                                                                                                                      \
+                0xFFFD, ZAP_TYPE(INT16U), 2, ZAP_ATTRIBUTE_MASK(CLIENT), { (uint8_t *) 2 }                                         \
+            }, /* Identify (client): cluster revision */                                                                           \
+            {                                                                                                                      \
+                0xFFFD, ZAP_TYPE(INT16U), 2, ZAP_ATTRIBUTE_MASK(CLIENT), { (uint8_t *) 3 }                                         \
+            }, /* Groups (client): cluster revision */                                                                             \
+            {                                                                                                                      \
+                0xFFFD, ZAP_TYPE(INT16U), 2, ZAP_ATTRIBUTE_MASK(CLIENT), { (uint8_t *) 3 }                                         \
+            }, /* Scenes (client): cluster revision */                                                                             \
+            {                                                                                                                      \
+                0xFFFD, ZAP_TYPE(INT16U), 2, ZAP_ATTRIBUTE_MASK(CLIENT), { (uint8_t *) 2 }                                         \
+            }, /* On/off (client): cluster revision */                                                                             \
+            {                                                                                                                      \
+                0xFFFD, ZAP_TYPE(INT16U), 2, ZAP_ATTRIBUTE_MASK(CLIENT), { (uint8_t *) 3 }                                         \
+            }, /* Level Control (client): cluster revision */                                                                      \
+            {                                                                                                                      \
+                0xFFFD, ZAP_TYPE(INT16U), 2, ZAP_ATTRIBUTE_MASK(CLIENT), { (uint8_t *) 3 }                                         \
+            }, /* Door Lock (client): cluster revision */                                                                          \
+            {                                                                                                                      \
+                0xFFFD, ZAP_TYPE(INT16U), 2, ZAP_ATTRIBUTE_MASK(CLIENT), { (uint8_t *) 0x0001 }                                    \
+            }, /* Barrier Control (client): cluster revision */                                                                    \
+            {                                                                                                                      \
+                0xFFFD, ZAP_TYPE(INT16U), 2, ZAP_ATTRIBUTE_MASK(CLIENT), { (uint8_t *) 3 }                                         \
+            }, /* Color Control (client): cluster revision */                                                                      \
+            {                                                                                                                      \
+                0xFFFD, ZAP_TYPE(INT16U), 2, ZAP_ATTRIBUTE_MASK(CLIENT), { (uint8_t *) 3 }                                         \
+            }, /* Temperature Measurement (client): cluster revision */                                                            \
+            {                                                                                                                      \
+                0xFFFD, ZAP_TYPE(INT16U), 2, ZAP_ATTRIBUTE_MASK(CLIENT), { (uint8_t *) 0x0001 }                                    \
+            }, /* Binding (client): cluster revision */                                                                            \
+    }
+
+// This is an array of EmberAfCluster structures.
+#define ZAP_ATTRIBUTE_INDEX(index) ((EmberAfAttributeMetadata *) (&generatedAttributes[index]))
+
+// Cluster function static arrays
+#define GENERATED_FUNCTION_ARRAYS
+
+#define ZAP_CLUSTER_MASK(mask) CLUSTER_MASK_##mask
+#define GENERATED_CLUSTER_COUNT 11
+#define GENERATED_CLUSTERS                                                                                                         \
+    {                                                                                                                              \
+        { 0x0000, ZAP_ATTRIBUTE_INDEX(0), 1, 2, ZAP_CLUSTER_MASK(CLIENT), NULL }, /* Endpoint: 1, Cluster: Basic (client) */       \
+            {                                                                                                                      \
+                0x0003, ZAP_ATTRIBUTE_INDEX(1), 1, 2, ZAP_CLUSTER_MASK(CLIENT), NULL                                               \
+            }, /* Endpoint: 1, Cluster: Identify (client) */                                                                       \
+            { 0x0004, ZAP_ATTRIBUTE_INDEX(2), 1, 2, ZAP_CLUSTER_MASK(CLIENT), NULL }, /* Endpoint: 1, Cluster: Groups (client) */  \
+            { 0x0005, ZAP_ATTRIBUTE_INDEX(3), 1, 2, ZAP_CLUSTER_MASK(CLIENT), NULL }, /* Endpoint: 1, Cluster: Scenes (client) */  \
+            { 0x0006, ZAP_ATTRIBUTE_INDEX(4), 1, 2, ZAP_CLUSTER_MASK(CLIENT), NULL }, /* Endpoint: 1, Cluster: On/off (client) */  \
+            {                                                                                                                      \
+                0x0008, ZAP_ATTRIBUTE_INDEX(5), 1, 2, ZAP_CLUSTER_MASK(CLIENT), NULL                                               \
+            }, /* Endpoint: 1, Cluster: Level Control (client) */                                                                  \
+            {                                                                                                                      \
+                0x0101, ZAP_ATTRIBUTE_INDEX(6), 1, 2, ZAP_CLUSTER_MASK(CLIENT), NULL                                               \
+            }, /* Endpoint: 1, Cluster: Door Lock (client) */                                                                      \
+            {                                                                                                                      \
+                0x0103, ZAP_ATTRIBUTE_INDEX(7), 1, 2, ZAP_CLUSTER_MASK(CLIENT), NULL                                               \
+            }, /* Endpoint: 1, Cluster: Barrier Control (client) */                                                                \
+            {                                                                                                                      \
+                0x0300, ZAP_ATTRIBUTE_INDEX(8), 1, 2, ZAP_CLUSTER_MASK(CLIENT), NULL                                               \
+            }, /* Endpoint: 1, Cluster: Color Control (client) */                                                                  \
+            {                                                                                                                      \
+                0x0402, ZAP_ATTRIBUTE_INDEX(9), 1, 2, ZAP_CLUSTER_MASK(CLIENT), NULL                                               \
+            }, /* Endpoint: 1, Cluster: Temperature Measurement (client) */                                                        \
+            {                                                                                                                      \
+                0xF000, ZAP_ATTRIBUTE_INDEX(10), 1, 2, ZAP_CLUSTER_MASK(CLIENT), NULL                                              \
+            }, /* Endpoint: 1, Cluster: Binding (client) */                                                                        \
+    }
+
+#define ZAP_CLUSTER_INDEX(index) ((EmberAfCluster *) (&generatedClusters[index]))
+
+// This is an array of EmberAfEndpointType structures.
+#define GENERATED_ENDPOINT_TYPES                                                                                                   \
+    {                                                                                                                              \
+        { ZAP_CLUSTER_INDEX(0), 11, 22 },                                                                                          \
+    }
+
+// Largest attribute size is needed for various buffers
+#define ATTRIBUTE_LARGEST (2)
+
+// Total size of singleton attributes
+#define ATTRIBUTE_SINGLETONS_SIZE (0)
+
+// Total size of attribute storage
+#define ATTRIBUTE_MAX_SIZE (22)
+
+// Number of fixed endpoints
+#define FIXED_ENDPOINT_COUNT (1)
+
+// Array of endpoints that are supported, the data inside
+// the array is the endpoint number.
+#define FIXED_ENDPOINT_ARRAY                                                                                                       \
+    {                                                                                                                              \
+        0x0001                                                                                                                     \
+    }
+
+// Array of profile ids
+#define FIXED_PROFILE_IDS                                                                                                          \
+    {                                                                                                                              \
+        0x0103                                                                                                                     \
+    }
+
+// Array of device ids
+#define FIXED_DEVICE_IDS                                                                                                           \
+    {                                                                                                                              \
+        0                                                                                                                          \
+    }
+
+// Array of device versions
+#define FIXED_DEVICE_VERSIONS                                                                                                      \
+    {                                                                                                                              \
+        1                                                                                                                          \
+    }
+
+// Array of endpoint types supported on each endpoint
+#define FIXED_ENDPOINT_TYPES                                                                                                       \
+    {                                                                                                                              \
+        0                                                                                                                          \
+    }
+
+// Array of networks supported on each endpoint
+#define FIXED_NETWORKS                                                                                                             \
+    {                                                                                                                              \
+        0                                                                                                                          \
+    }
+
+// Array of EmberAfCommandMetadata structs.
+#define ZAP_COMMAND_MASK(mask) COMMAND_MASK_##mask
+#define EMBER_AF_GENERATED_COMMAND_COUNT (105)
+#define GENERATED_COMMANDS                                                                                                         \
+    {                                                                                                                              \
+        { 0x0000, 0x00,                                                                                                            \
+          ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Basic (client): MfgSpecificPing */           \
+            {                                                                                                                      \
+                0x0000, 0x00, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            },                                                   /* Basic (client): ResetToFactoryDefaults */                      \
+            { 0x0003, 0x00, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Identify (client): Identify */                                 \
+            { 0x0003, 0x00, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Identify (client): IdentifyQueryResponse */                    \
+            { 0x0003, 0x01, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Identify (client): IdentifyQuery */                            \
+            { 0x0004, 0x00, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Groups (client): AddGroup */                                   \
+            { 0x0004, 0x00, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Groups (client): AddGroupResponse */                           \
+            { 0x0004, 0x01, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Groups (client): ViewGroup */                                  \
+            { 0x0004, 0x01, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Groups (client): ViewGroupResponse */                          \
+            { 0x0004, 0x02, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Groups (client): GetGroupMembership */                         \
+            { 0x0004, 0x02, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Groups (client): GetGroupMembershipResponse */                 \
+            { 0x0004, 0x03, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Groups (client): RemoveGroup */                                \
+            { 0x0004, 0x03, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Groups (client): RemoveGroupResponse */                        \
+            { 0x0004, 0x04, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Groups (client): RemoveAllGroups */                            \
+            { 0x0004, 0x05, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Groups (client): AddGroupIfIdentifying */                      \
+            { 0x0005, 0x00, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Scenes (client): AddScene */                                   \
+            { 0x0005, 0x00, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Scenes (client): AddSceneResponse */                           \
+            { 0x0005, 0x01, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Scenes (client): ViewScene */                                  \
+            { 0x0005, 0x01, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Scenes (client): ViewSceneResponse */                          \
+            { 0x0005, 0x02, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Scenes (client): RemoveScene */                                \
+            { 0x0005, 0x02, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Scenes (client): RemoveSceneResponse */                        \
+            { 0x0005, 0x03, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Scenes (client): RemoveAllScenes */                            \
+            { 0x0005, 0x03, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Scenes (client): RemoveAllScenesResponse */                    \
+            { 0x0005, 0x04, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Scenes (client): StoreScene */                                 \
+            { 0x0005, 0x04, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Scenes (client): StoreSceneResponse */                         \
+            { 0x0005, 0x05, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Scenes (client): RecallScene */                                \
+            { 0x0005, 0x06, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Scenes (client): GetSceneMembership */                         \
+            { 0x0005, 0x06, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Scenes (client): GetSceneMembershipResponse */                 \
+            { 0x0006, 0x00, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* On/off (client): Off */                                        \
+            { 0x0006, 0x01, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* On/off (client): On */                                         \
+            { 0x0006, 0x02, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* On/off (client): Toggle */                                     \
+            { 0x0008, 0x00, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Level Control (client): MoveToLevel */                         \
+            { 0x0008, 0x01, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Level Control (client): Move */                                \
+            { 0x0008, 0x02, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Level Control (client): Step */                                \
+            { 0x0008, 0x03, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Level Control (client): Stop */                                \
+            { 0x0008, 0x04, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Level Control (client): MoveToLevelWithOnOff */                \
+            { 0x0008, 0x05, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Level Control (client): MoveWithOnOff */                       \
+            { 0x0008, 0x06, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Level Control (client): StepWithOnOff */                       \
+            { 0x0008, 0x07, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Level Control (client): StopWithOnOff */                       \
+            { 0x0101, 0x00, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Door Lock (client): LockDoor */                                \
+            { 0x0101, 0x00, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Door Lock (client): LockDoorResponse */                        \
+            { 0x0101, 0x01, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Door Lock (client): UnlockDoor */                              \
+            { 0x0101, 0x01, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Door Lock (client): UnlockDoorResponse */                      \
+            { 0x0101, 0x03,                                                                                                        \
+              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Door Lock (client): UnlockWithTimeout */ \
+            {                                                                                                                      \
+                0x0101, 0x03, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Door Lock (client): UnlockWithTimeoutResponse */                                                                 \
+            { 0x0101, 0x04,                                                                                                        \
+              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Door Lock (client): GetLogRecord */      \
+            {                                                                                                                      \
+                0x0101, 0x04, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Door Lock (client): GetLogRecordResponse */                                                                      \
+            { 0x0101, 0x05,                                                                                                        \
+              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Door Lock (client): SetPin */            \
+            { 0x0101, 0x05,                                                                                                        \
+              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Door Lock (client): SetPinResponse */    \
+            { 0x0101, 0x06,                                                                                                        \
+              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Door Lock (client): GetPin */            \
+            { 0x0101, 0x06,                                                                                                        \
+              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Door Lock (client): GetPinResponse */    \
+            { 0x0101, 0x07,                                                                                                        \
+              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Door Lock (client): ClearPin */          \
+            { 0x0101, 0x07,                                                                                                        \
+              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Door Lock (client): ClearPinResponse */  \
+            { 0x0101, 0x08,                                                                                                        \
+              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Door Lock (client): ClearAllPins */      \
+            {                                                                                                                      \
+                0x0101, 0x08, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            },                   /* Door Lock (client): ClearAllPinsResponse */                                                    \
+            { 0x0101, 0x09, 0 }, /* Door Lock (client): SetUserStatusResponse */                                                   \
+            { 0x0101, 0x0A, 0 }, /* Door Lock (client): GetUserStatusResponse */                                                   \
+            {                                                                                                                      \
+                0x0101, 0x0B, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Door Lock (client): SetWeekdaySchedule */                                                                        \
+            {                                                                                                                      \
+                0x0101, 0x0B, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Door Lock (client): SetWeekdayScheduleResponse */                                                                \
+            {                                                                                                                      \
+                0x0101, 0x0C, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Door Lock (client): GetWeekdaySchedule */                                                                        \
+            {                                                                                                                      \
+                0x0101, 0x0C, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Door Lock (client): GetWeekdayScheduleResponse */                                                                \
+            {                                                                                                                      \
+                0x0101, 0x0D, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Door Lock (client): ClearWeekdaySchedule */                                                                      \
+            {                                                                                                                      \
+                0x0101, 0x0D, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Door Lock (client): ClearWeekdayScheduleResponse */                                                              \
+            {                                                                                                                      \
+                0x0101, 0x0E, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Door Lock (client): SetYeardaySchedule */                                                                        \
+            {                                                                                                                      \
+                0x0101, 0x0E, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Door Lock (client): SetYeardayScheduleResponse */                                                                \
+            {                                                                                                                      \
+                0x0101, 0x0F, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Door Lock (client): GetYeardaySchedule */                                                                        \
+            {                                                                                                                      \
+                0x0101, 0x0F, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Door Lock (client): GetYeardayScheduleResponse */                                                                \
+            {                                                                                                                      \
+                0x0101, 0x10, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Door Lock (client): ClearYeardaySchedule */                                                                      \
+            {                                                                                                                      \
+                0x0101, 0x10, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Door Lock (client): ClearYeardayScheduleResponse */                                                              \
+            {                                                                                                                      \
+                0x0101, 0x11, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Door Lock (client): SetHolidaySchedule */                                                                        \
+            {                                                                                                                      \
+                0x0101, 0x11, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Door Lock (client): SetHolidayScheduleResponse */                                                                \
+            {                                                                                                                      \
+                0x0101, 0x12, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Door Lock (client): GetHolidaySchedule */                                                                        \
+            {                                                                                                                      \
+                0x0101, 0x12, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Door Lock (client): GetHolidayScheduleResponse */                                                                \
+            {                                                                                                                      \
+                0x0101, 0x13, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Door Lock (client): ClearHolidaySchedule */                                                                      \
+            {                                                                                                                      \
+                0x0101, 0x13, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Door Lock (client): ClearHolidayScheduleResponse */                                                              \
+            { 0x0101, 0x14,                                                                                                        \
+              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Door Lock (client): SetUserType */       \
+            {                                                                                                                      \
+                0x0101, 0x14, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Door Lock (client): SetUserTypeResponse */                                                                       \
+            { 0x0101, 0x15,                                                                                                        \
+              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Door Lock (client): GetUserType */       \
+            {                                                                                                                      \
+                0x0101, 0x15, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Door Lock (client): GetUserTypeResponse */                                                                       \
+            { 0x0101, 0x16,                                                                                                        \
+              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Door Lock (client): SetRfid */           \
+            { 0x0101, 0x16,                                                                                                        \
+              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Door Lock (client): SetRfidResponse */   \
+            { 0x0101, 0x17,                                                                                                        \
+              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Door Lock (client): GetRfid */           \
+            { 0x0101, 0x17,                                                                                                        \
+              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Door Lock (client): GetRfidResponse */   \
+            { 0x0101, 0x18,                                                                                                        \
+              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Door Lock (client): ClearRfid */         \
+            { 0x0101, 0x18,                                                                                                        \
+              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Door Lock (client): ClearRfidResponse */ \
+            { 0x0101, 0x19,                                                                                                        \
+              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Door Lock (client): ClearAllRfids */     \
+            {                                                                                                                      \
+                0x0101, 0x19, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            },                                                   /* Door Lock (client): ClearAllRfidsResponse */                   \
+            { 0x0103, 0x00, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Barrier Control (client): BarrierControlGoToPercent */         \
+            { 0x0103, 0x01, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Barrier Control (client): BarrierControlStop */                \
+            { 0x0300, 0x00,                                                                                                        \
+              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Color Control (client): MoveToHue */     \
+            { 0x0300, 0x01,                                                                                                        \
+              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Color Control (client): MoveHue */       \
+            { 0x0300, 0x02,                                                                                                        \
+              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Color Control (client): StepHue */       \
+            {                                                                                                                      \
+                0x0300, 0x03, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Color Control (client): MoveToSaturation */                                                                      \
+            {                                                                                                                      \
+                0x0300, 0x04, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Color Control (client): MoveSaturation */                                                                        \
+            {                                                                                                                      \
+                0x0300, 0x05, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Color Control (client): StepSaturation */                                                                        \
+            {                                                                                                                      \
+                0x0300, 0x06, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            },                                                   /* Color Control (client): MoveToHueAndSaturation */              \
+            { 0x0300, 0x07, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Color Control (client): MoveToColor */                         \
+            { 0x0300, 0x08, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Color Control (client): MoveColor */                           \
+            { 0x0300, 0x09, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Color Control (client): StepColor */                           \
+            {                                                                                                                      \
+                0x0300, 0x0A, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Color Control (client): MoveToColorTemperature */                                                                \
+            { 0x0300, 0x47,                                                                                                        \
+              ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT) }, /* Color Control (client): StopMoveStep */  \
+            {                                                                                                                      \
+                0x0300, 0x4B, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            }, /* Color Control (client): MoveColorTemperature */                                                                  \
+            {                                                                                                                      \
+                0x0300, 0x4C, ZAP_COMMAND_MASK(INCOMING_CLIENT) | ZAP_COMMAND_MASK(OUTGOING_CLIENT)                                \
+            },                                                   /* Color Control (client): StepColorTemperature */                \
+            { 0xF000, 0x00, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Binding (client): Bind */                                      \
+            { 0xF000, 0x01, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Binding (client): Unbind */                                    \
+    }
+
+// Array of EmberAfManufacturerCodeEntry structures for commands.
+#define GENERATED_COMMAND_MANUFACTURER_CODE_COUNT (1)
+#define GENERATED_COMMAND_MANUFACTURER_CODES                                                                                       \
+    {                                                                                                                              \
+        { 0, 0x1002 },                                                                                                             \
+    }
+
+// This is an array of EmberAfManufacturerCodeEntry structures for clusters.
+#define GENERATED_CLUSTER_MANUFACTURER_CODE_COUNT (0)
+#define GENERATED_CLUSTER_MANUFACTURER_CODES                                                                                       \
+    {                                                                                                                              \
+        {                                                                                                                          \
+            0x00, 0x00                                                                                                             \
+        }                                                                                                                          \
+    }
+
+// This is an array of EmberAfManufacturerCodeEntry structures for attributes.
+#define GENERATED_ATTRIBUTE_MANUFACTURER_CODE_COUNT (0)
+#define GENERATED_ATTRIBUTE_MANUFACTURER_CODES                                                                                     \
+    {                                                                                                                              \
+        {                                                                                                                          \
+            0x00, 0x00                                                                                                             \
+        }                                                                                                                          \
+    }
+
+// Array of EmberAfPluginReportingEntry structures.
+#define ZRD(x) EMBER_ZCL_REPORTING_DIRECTION_##x
+#define ZAP_REPORT_DIRECTION(x) ZRD(x)
+
+// Use this macro to check if Reporting plugin is included
+#define EMBER_AF_PLUGIN_REPORTING
+// User options for plugin Reporting
+#define EMBER_AF_PLUGIN_REPORTING_TABLE_SIZE (1)
+#define EMBER_AF_PLUGIN_REPORTING_ENABLE_GROUP_BOUND_REPORTS
+
+#define EMBER_AF_GENERATED_REPORTING_CONFIG_DEFAULTS_TABLE_SIZE (1)
+#define EMBER_AF_GENERATED_REPORTING_CONFIG_DEFAULTS                                                                               \
+    {                                                                                                                              \
+        {                                                                                                                          \
+            ZAP_REPORT_DIRECTION(REPORTED), 0x0001, 0x0000, 0xFFFD, ZAP_CLUSTER_MASK(CLIENT), 0x0000, { { 0, 65344, 0 } }          \
+        }, /* Reporting for cluster: "Basic", attribute: "cluster revision". side: client */                                       \
+    }
diff --git a/src/darwin/Framework/CHIP/gen/enums.h b/src/darwin/Framework/CHIP/gen/enums.h
new file mode 100644
index 0000000..7cf4c5c
--- /dev/null
+++ b/src/darwin/Framework/CHIP/gen/enums.h
@@ -0,0 +1,4007 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+// Prevent multiple inclusion
+#pragma once
+
+// ZCL enums
+
+// Enum for 11073ConnectRequestConnectControl
+typedef enum
+{
+    EMBER_ZCL_11073_CONNECT_REQUEST_CONNECT_CONTROL_PREEMPTIBLE = 1,
+} EmberAf11073ConnectRequestConnectControl;
+
+// Enum for 11073TunnelConnectionStatus
+typedef enum
+{
+    EMBER_ZCL_11073_TUNNEL_CONNECTION_STATUS_DISCONNECTED      = 0,
+    EMBER_ZCL_11073_TUNNEL_CONNECTION_STATUS_CONNECTED         = 1,
+    EMBER_ZCL_11073_TUNNEL_CONNECTION_STATUS_NOT_AUTHORIZED    = 2,
+    EMBER_ZCL_11073_TUNNEL_CONNECTION_STATUS_RECONNECT_REQUEST = 3,
+    EMBER_ZCL_11073_TUNNEL_CONNECTION_STATUS_ALREADY_CONNECTED = 4,
+} EmberAf11073TunnelConnectionStatus;
+
+// Enum for AlertCountType
+typedef enum
+{
+    EMBER_ZCL_ALERT_COUNT_TYPE_UNSTRUCTURED = 0,
+} EmberAfAlertCountType;
+
+// Enum for AlertStructureCategory
+typedef enum
+{
+    EMBER_ZCL_ALERT_STRUCTURE_CATEGORY_WARNING = 256,
+    EMBER_ZCL_ALERT_STRUCTURE_CATEGORY_DANGER  = 512,
+    EMBER_ZCL_ALERT_STRUCTURE_CATEGORY_FAILURE = 768,
+} EmberAfAlertStructureCategory;
+
+// Enum for AlertStructurePresenceRecovery
+typedef enum
+{
+    EMBER_ZCL_ALERT_STRUCTURE_PRESENCE_RECOVERY_RECOVERY = 0,
+    EMBER_ZCL_ALERT_STRUCTURE_PRESENCE_RECOVERY_PRESENCE = 4096,
+} EmberAfAlertStructurePresenceRecovery;
+
+// Enum for AlternateCostUnit
+typedef enum
+{
+    EMBER_ZCL_ALTERNATE_COST_UNIT_KG_OF_CO2_PER_UNIT_OF_MEASURE = 2,
+} EmberAfAlternateCostUnit;
+
+// Enum for AmiCriticalityLevel
+typedef enum
+{
+    EMBER_ZCL_AMI_CRITICALITY_LEVEL_RESERVED           = 0,
+    EMBER_ZCL_AMI_CRITICALITY_LEVEL_GREEN              = 1,
+    EMBER_ZCL_AMI_CRITICALITY_LEVEL_1                  = 2,
+    EMBER_ZCL_AMI_CRITICALITY_LEVEL_2                  = 3,
+    EMBER_ZCL_AMI_CRITICALITY_LEVEL_3                  = 4,
+    EMBER_ZCL_AMI_CRITICALITY_LEVEL_4                  = 5,
+    EMBER_ZCL_AMI_CRITICALITY_LEVEL_5                  = 6,
+    EMBER_ZCL_AMI_CRITICALITY_LEVEL_EMERGENCY          = 7,
+    EMBER_ZCL_AMI_CRITICALITY_LEVEL_PLANNED_OUTAGE     = 8,
+    EMBER_ZCL_AMI_CRITICALITY_LEVEL_SERVICE_DISCONNECT = 9,
+    EMBER_ZCL_AMI_CRITICALITY_LEVEL_UTILITY_DEFINED1   = 10,
+    EMBER_ZCL_AMI_CRITICALITY_LEVEL_UTILITY_DEFINED2   = 11,
+    EMBER_ZCL_AMI_CRITICALITY_LEVEL_UTILITY_DEFINED3   = 12,
+    EMBER_ZCL_AMI_CRITICALITY_LEVEL_UTILITY_DEFINED4   = 13,
+    EMBER_ZCL_AMI_CRITICALITY_LEVEL_UTILITY_DEFINED5   = 14,
+    EMBER_ZCL_AMI_CRITICALITY_LEVEL_UTILITY_DEFINED6   = 15,
+} EmberAfAmiCriticalityLevel;
+
+// Enum for AmiEventStatus
+typedef enum
+{
+    EMBER_ZCL_AMI_EVENT_STATUS_LOAD_CONTROL_EVENT_COMMAND_RX                          = 1,
+    EMBER_ZCL_AMI_EVENT_STATUS_EVENT_STARTED                                          = 2,
+    EMBER_ZCL_AMI_EVENT_STATUS_EVENT_COMPLETED                                        = 3,
+    EMBER_ZCL_AMI_EVENT_STATUS_USER_HAS_CHOOSE_TO_OPT_OUT                             = 4,
+    EMBER_ZCL_AMI_EVENT_STATUS_USER_HAS_CHOOSE_TO_OPT_IN                              = 5,
+    EMBER_ZCL_AMI_EVENT_STATUS_THE_EVENT_HAS_BEEN_CANCELED                            = 6,
+    EMBER_ZCL_AMI_EVENT_STATUS_THE_EVENT_HAS_BEEN_SUPERSEDED                          = 7,
+    EMBER_ZCL_AMI_EVENT_STATUS_EVENT_PARTIALLY_COMPLETED_WITH_USER_OPT_OUT            = 8,
+    EMBER_ZCL_AMI_EVENT_STATUS_EVENT_PARTIALLY_COMPLETED_DUE_TO_USER_OPT_IN           = 9,
+    EMBER_ZCL_AMI_EVENT_STATUS_EVENT_COMPLETED_NO_USER_PARTICIPATION_PREVIOUS_OPT_OUT = 10,
+    EMBER_ZCL_AMI_EVENT_STATUS_INVALID_OPT_OUT                                        = 246,
+    EMBER_ZCL_AMI_EVENT_STATUS_EVENT_NOT_FOUND                                        = 247,
+    EMBER_ZCL_AMI_EVENT_STATUS_REJECTED_INVALID_CANCEL_COMMAND                        = 248,
+    EMBER_ZCL_AMI_EVENT_STATUS_REJECTED_INVALID_CANCEL_COMMAND_INVALID_EFFECTIVE_TIME = 249,
+    EMBER_ZCL_AMI_EVENT_STATUS_REJECTED_EVENT_EXPIRED                                 = 251,
+    EMBER_ZCL_AMI_EVENT_STATUS_REJECTED_INVALID_CANCEL_UNDEFINED_EVENT                = 253,
+    EMBER_ZCL_AMI_EVENT_STATUS_LOAD_CONTROL_EVENT_COMMAND_REJECTED                    = 254,
+} EmberAfAmiEventStatus;
+
+// Enum for AmiGetProfileStatus
+typedef enum
+{
+    EMBER_ZCL_AMI_GET_PROFILE_STATUS_SUCCESS                                       = 0,
+    EMBER_ZCL_AMI_GET_PROFILE_STATUS_UNDEFINED_INTERVAL_CHANNEL_REQUESTED          = 1,
+    EMBER_ZCL_AMI_GET_PROFILE_STATUS_INTERVAL_CHANNEL_NOT_SUPPORTED                = 2,
+    EMBER_ZCL_AMI_GET_PROFILE_STATUS_INVALID_END_TIME                              = 3,
+    EMBER_ZCL_AMI_GET_PROFILE_STATUS_MORE_PERIODS_REQUESTED_THAN_CAN_BE_RETURNED   = 4,
+    EMBER_ZCL_AMI_GET_PROFILE_STATUS_NO_INTERVALS_AVAILABLE_FOR_THE_REQUESTED_TIME = 5,
+} EmberAfAmiGetProfileStatus;
+
+// Enum for AmiIntervalChannel
+typedef enum
+{
+    EMBER_ZCL_AMI_INTERVAL_CHANNEL_CONSUMPTION_DELIVERED = 0,
+    EMBER_ZCL_AMI_INTERVAL_CHANNEL_CONSUMPTION_RECEIVED  = 1,
+} EmberAfAmiIntervalChannel;
+
+// Enum for AmiIntervalPeriod
+typedef enum
+{
+    EMBER_ZCL_AMI_INTERVAL_PERIOD_DAILY      = 0,
+    EMBER_ZCL_AMI_INTERVAL_PERIOD_MINUTES60  = 1,
+    EMBER_ZCL_AMI_INTERVAL_PERIOD_MINUTES30  = 2,
+    EMBER_ZCL_AMI_INTERVAL_PERIOD_MINUTES15  = 3,
+    EMBER_ZCL_AMI_INTERVAL_PERIOD_MINUTES10  = 4,
+    EMBER_ZCL_AMI_INTERVAL_PERIOD_MINUTES7P5 = 5,
+    EMBER_ZCL_AMI_INTERVAL_PERIOD_MINUTES5   = 6,
+    EMBER_ZCL_AMI_INTERVAL_PERIOD_MINUTES2P5 = 7,
+} EmberAfAmiIntervalPeriod;
+
+// Enum for AmiKeyEstablishmentStatus
+typedef enum
+{
+    EMBER_ZCL_AMI_KEY_ESTABLISHMENT_STATUS_SUCCESS           = 0,
+    EMBER_ZCL_AMI_KEY_ESTABLISHMENT_STATUS_UNKNOWN_ISSUER    = 1,
+    EMBER_ZCL_AMI_KEY_ESTABLISHMENT_STATUS_BAD_KEY_CONFIRM   = 2,
+    EMBER_ZCL_AMI_KEY_ESTABLISHMENT_STATUS_BAD_MESSAGE       = 3,
+    EMBER_ZCL_AMI_KEY_ESTABLISHMENT_STATUS_NO_RESOURCES      = 4,
+    EMBER_ZCL_AMI_KEY_ESTABLISHMENT_STATUS_UNSUPPORTED_SUITE = 5,
+    EMBER_ZCL_AMI_KEY_ESTABLISHMENT_STATUS_INVALID_KEY_USAGE = 6,
+} EmberAfAmiKeyEstablishmentStatus;
+
+// Enum for AmiRegistrationState
+typedef enum
+{
+    EMBER_ZCL_AMI_REGISTRATION_STATE_UNREGISTERED                   = 0,
+    EMBER_ZCL_AMI_REGISTRATION_STATE_JOINING_NETWORK                = 1,
+    EMBER_ZCL_AMI_REGISTRATION_STATE_JOINED_NETWORK                 = 2,
+    EMBER_ZCL_AMI_REGISTRATION_STATE_SUBMITTED_REGISTRATION_REQUEST = 3,
+    EMBER_ZCL_AMI_REGISTRATION_STATE_REGISTRATION_REJECTED          = 4,
+    EMBER_ZCL_AMI_REGISTRATION_STATE_REGISTERED                     = 5,
+    EMBER_ZCL_AMI_REGISTRATION_STATE_REGISTERATION_NOT_POSSIBLE     = 6,
+} EmberAfAmiRegistrationState;
+
+// Enum for AmiUnitOfMeasure
+typedef enum
+{
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_KILO_WATT_HOURS                = 0,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_CUBIC_METER_PER_HOUR           = 1,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_CUBIC_FEET_PER_HOUR            = 2,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_CENTUM_CUBIC_FEET_PER_HOUR     = 3,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_US_GALLONS_PER_HOUR            = 4,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_IMPERIAL_GALLONS_PER_HOUR      = 5,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_BT_US_OR_BTU_PER_HOUR          = 6,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_LITERS_OR_LITERS_PER_HOUR      = 7,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_KPA_GAUGE                      = 8,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_KPA_ABSOLUTE                   = 9,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_MCF_OR_MCF_PER_SECOND          = 10,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_UNITLESS                       = 11,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_MJ_OR_MJ_PER_SECOND            = 12,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_K_VAR_OR_K_VAR_HOURS           = 13,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_KILO_WATT_HOURS_BCD            = 128,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_CUBIC_METER_PER_HOUR_BCD       = 129,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_CUBIC_FEET_PER_HOUR_BCD        = 130,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_CENTUM_CUBIC_FEET_PER_HOUR_BCD = 131,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_US_GALLONS_PER_HOUR_BCD        = 132,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_IMPERIAL_GALLONS_PER_HOUR_BCD  = 133,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_BT_US_OR_BTU_PER_HOUR_BCD      = 134,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_LITERS_OR_LITERS_PER_HOUR_BCD  = 135,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_KPA_GUAGE_BCD                  = 136,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_KPA_ABSOLUTE_BCD               = 137,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_MCF_OR_MCF_PER_SECOND_BCD      = 138,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_UNITLESS_BCD                   = 139,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_MJ_OR_MJ_PER_SECOND_BCD        = 140,
+    EMBER_ZCL_AMI_UNIT_OF_MEASURE_K_VAR_OR_K_VAR_HOURS_BCD       = 141,
+} EmberAfAmiUnitOfMeasure;
+
+// Enum for AnonymousDataState
+typedef enum
+{
+    EMBER_ZCL_ANONYMOUS_DATA_STATE_NO_SOURCE_FOUND = 0,
+    EMBER_ZCL_ANONYMOUS_DATA_STATE_SOURCE_FOUND    = 1,
+} EmberAfAnonymousDataState;
+
+// Enum for ApplianceStatus
+typedef enum
+{
+    EMBER_ZCL_APPLIANCE_STATUS_OFF                         = 1,
+    EMBER_ZCL_APPLIANCE_STATUS_STAND_BY                    = 2,
+    EMBER_ZCL_APPLIANCE_STATUS_PROGRAMMED                  = 3,
+    EMBER_ZCL_APPLIANCE_STATUS_PROGRAMMED_WAITING_TO_START = 4,
+    EMBER_ZCL_APPLIANCE_STATUS_RUNNING                     = 5,
+    EMBER_ZCL_APPLIANCE_STATUS_PAUSE                       = 6,
+    EMBER_ZCL_APPLIANCE_STATUS_END_PROGRAMMED              = 7,
+    EMBER_ZCL_APPLIANCE_STATUS_FAILURE                     = 8,
+    EMBER_ZCL_APPLIANCE_STATUS_PROGRAMME_INTERRUPTED       = 9,
+    EMBER_ZCL_APPLIANCE_STATUS_IDLE                        = 10,
+    EMBER_ZCL_APPLIANCE_STATUS_RINSE_HOLD                  = 11,
+    EMBER_ZCL_APPLIANCE_STATUS_SERVICE                     = 12,
+    EMBER_ZCL_APPLIANCE_STATUS_SUPERFREEZING               = 13,
+    EMBER_ZCL_APPLIANCE_STATUS_SUPERCOOLING                = 14,
+    EMBER_ZCL_APPLIANCE_STATUS_SUPERHEATING                = 15,
+} EmberAfApplianceStatus;
+
+// Enum for AttributeReportingStatus
+typedef enum
+{
+    EMBER_ZCL_ATTRIBUTE_REPORTING_STATUS_PENDING                      = 0,
+    EMBER_ZCL_ATTRIBUTE_REPORTING_STATUS_ATTRIBUTE_REPORTING_COMPLETE = 1,
+} EmberAfAttributeReportingStatus;
+
+// Enum for AttributeWritePermission
+typedef enum
+{
+    EMBER_ZCL_ATTRIBUTE_WRITE_PERMISSION_DENY_WRITE               = 0,
+    EMBER_ZCL_ATTRIBUTE_WRITE_PERMISSION_ALLOW_WRITE_NORMAL       = 1,
+    EMBER_ZCL_ATTRIBUTE_WRITE_PERMISSION_ALLOW_WRITE_OF_READ_ONLY = 2,
+    EMBER_ZCL_ATTRIBUTE_WRITE_PERMISSION_UNSUPPORTED_ATTRIBUTE    = 134,
+    EMBER_ZCL_ATTRIBUTE_WRITE_PERMISSION_INVALID_VALUE            = 135,
+    EMBER_ZCL_ATTRIBUTE_WRITE_PERMISSION_READ_ONLY                = 136,
+    EMBER_ZCL_ATTRIBUTE_WRITE_PERMISSION_INVALID_DATA_TYPE        = 141,
+} EmberAfAttributeWritePermission;
+
+// Enum for BarrierControlBarrierPosition
+typedef enum
+{
+    EMBER_ZCL_BARRIER_CONTROL_BARRIER_POSITION_CLOSED  = 0,
+    EMBER_ZCL_BARRIER_CONTROL_BARRIER_POSITION_OPEN    = 100,
+    EMBER_ZCL_BARRIER_CONTROL_BARRIER_POSITION_UNKNOWN = 255,
+} EmberAfBarrierControlBarrierPosition;
+
+// Enum for BarrierControlMovingState
+typedef enum
+{
+    EMBER_ZCL_BARRIER_CONTROL_MOVING_STATE_STOPPED = 0,
+    EMBER_ZCL_BARRIER_CONTROL_MOVING_STATE_CLOSING = 1,
+    EMBER_ZCL_BARRIER_CONTROL_MOVING_STATE_OPENING = 2,
+} EmberAfBarrierControlMovingState;
+
+// Enum for BatterySize
+typedef enum
+{
+    EMBER_ZCL_BATTERY_SIZE_NO_BATTERY = 0,
+    EMBER_ZCL_BATTERY_SIZE_BUILT_IN   = 1,
+    EMBER_ZCL_BATTERY_SIZE_OTHER      = 2,
+    EMBER_ZCL_BATTERY_SIZE_AA         = 3,
+    EMBER_ZCL_BATTERY_SIZE_AAA        = 4,
+    EMBER_ZCL_BATTERY_SIZE_C          = 5,
+    EMBER_ZCL_BATTERY_SIZE_D          = 6,
+    EMBER_ZCL_BATTERY_SIZE_UNKNOWN    = 255,
+} EmberAfBatterySize;
+
+// Enum for BillingPeriodDurationUnits
+typedef enum
+{
+    EMBER_ZCL_BILLING_PERIOD_DURATION_UNITS_MINUTES = 0,
+    EMBER_ZCL_BILLING_PERIOD_DURATION_UNITS_DAYS    = 4194304,
+    EMBER_ZCL_BILLING_PERIOD_DURATION_UNITS_WEEKS   = 8388608,
+    EMBER_ZCL_BILLING_PERIOD_DURATION_UNITS_MONTHS  = 12582912,
+} EmberAfBillingPeriodDurationUnits;
+
+// Enum for Block
+typedef enum
+{
+    EMBER_ZCL_BLOCK_NO_BLOCKS_IN_USE = 0,
+    EMBER_ZCL_BLOCK_BLOCK1           = 1,
+    EMBER_ZCL_BLOCK_BLOCK2           = 2,
+    EMBER_ZCL_BLOCK_BLOCK3           = 3,
+    EMBER_ZCL_BLOCK_BLOCK4           = 4,
+    EMBER_ZCL_BLOCK_BLOCK5           = 5,
+    EMBER_ZCL_BLOCK_BLOCK6           = 6,
+    EMBER_ZCL_BLOCK_BLOCK7           = 7,
+    EMBER_ZCL_BLOCK_BLOCK8           = 8,
+    EMBER_ZCL_BLOCK_BLOCK9           = 9,
+    EMBER_ZCL_BLOCK_BLOCK10          = 10,
+    EMBER_ZCL_BLOCK_BLOCK11          = 11,
+    EMBER_ZCL_BLOCK_BLOCK12          = 12,
+    EMBER_ZCL_BLOCK_BLOCK13          = 13,
+    EMBER_ZCL_BLOCK_BLOCK14          = 14,
+    EMBER_ZCL_BLOCK_BLOCK15          = 15,
+    EMBER_ZCL_BLOCK_BLOCK16          = 16,
+} EmberAfBlock;
+
+// Enum for BlockPeriodDurationTypeControl
+typedef enum
+{
+    EMBER_ZCL_BLOCK_PERIOD_DURATION_TYPE_CONTROL_START_OF_TIMEBASE = 0,
+    EMBER_ZCL_BLOCK_PERIOD_DURATION_TYPE_CONTROL_END_OF_TIMEBASE   = 16,
+    EMBER_ZCL_BLOCK_PERIOD_DURATION_TYPE_CONTROL_NOT_SPECIFIED     = 32,
+} EmberAfBlockPeriodDurationTypeControl;
+
+// Enum for BlockPeriodDurationTypeTimebase
+typedef enum
+{
+    EMBER_ZCL_BLOCK_PERIOD_DURATION_TYPE_TIMEBASE_MINUTES = 0,
+    EMBER_ZCL_BLOCK_PERIOD_DURATION_TYPE_TIMEBASE_DAYS    = 1,
+    EMBER_ZCL_BLOCK_PERIOD_DURATION_TYPE_TIMEBASE_WEEKS   = 2,
+    EMBER_ZCL_BLOCK_PERIOD_DURATION_TYPE_TIMEBASE_MONTHS  = 3,
+} EmberAfBlockPeriodDurationTypeTimebase;
+
+// Enum for CO2Unit
+typedef enum
+{
+    EMBER_ZCL_CO2_UNIT_KILOGRAM_PER_KILOWATT_HOUR        = 1,
+    EMBER_ZCL_CO2_UNIT_KILOGRAM_PER_GALLON_OF_GASOLINE   = 2,
+    EMBER_ZCL_CO2_UNIT_KILOGRAM_PER_THERM_OF_NATURAL_GAS = 3,
+} EmberAfCO2Unit;
+
+// Enum for CalendarTimeReference
+typedef enum
+{
+    EMBER_ZCL_CALENDAR_TIME_REFERENCE_UTC_TIME      = 0,
+    EMBER_ZCL_CALENDAR_TIME_REFERENCE_STANDARD_TIME = 1,
+    EMBER_ZCL_CALENDAR_TIME_REFERENCE_LOCAL_TIME    = 2,
+} EmberAfCalendarTimeReference;
+
+// Enum for CalendarType
+typedef enum
+{
+    EMBER_ZCL_CALENDAR_TYPE_DELIVERED_CALENDAR              = 0,
+    EMBER_ZCL_CALENDAR_TYPE_RECEIVED_CALENDAR               = 1,
+    EMBER_ZCL_CALENDAR_TYPE_DELIVERED_AND_RECEIVED_CALENDAR = 2,
+    EMBER_ZCL_CALENDAR_TYPE_FRIENDLY_CREDIT_CALENDAR        = 3,
+    EMBER_ZCL_CALENDAR_TYPE_AUXILLIARY_LOAD_SWITCH_CALENDAR = 4,
+} EmberAfCalendarType;
+
+// Enum for CalorificValueUnit
+typedef enum
+{
+    EMBER_ZCL_CALORIFIC_VALUE_UNIT_MEGAJOULE_PER_CUBIC_METER = 1,
+    EMBER_ZCL_CALORIFIC_VALUE_UNIT_MEGAJOULE_PER_KILOGRAM    = 2,
+} EmberAfCalorificValueUnit;
+
+// Enum for CecedSpecificationVersion
+typedef enum
+{
+    EMBER_ZCL_CECED_SPECIFICATION_VERSION_COMPLIANT_WITH_V10_NOT_CERTIFIED = 16,
+    EMBER_ZCL_CECED_SPECIFICATION_VERSION_COMPLIANT_WITH_V10_CERTIFIED     = 26,
+} EmberAfCecedSpecificationVersion;
+
+// Enum for ColorControlOptions
+typedef enum
+{
+    EMBER_ZCL_COLOR_CONTROL_OPTIONS_EXECUTE_IF_OFF = 1,
+} EmberAfColorControlOptions;
+
+// Enum for ColorLoopAction
+typedef enum
+{
+    EMBER_ZCL_COLOR_LOOP_ACTION_DEACTIVATE                                  = 0,
+    EMBER_ZCL_COLOR_LOOP_ACTION_ACTIVATE_FROM_COLOR_LOOP_START_ENHANCED_HUE = 1,
+    EMBER_ZCL_COLOR_LOOP_ACTION_ACTIVATE_FROM_ENHANCED_CURRENT_HUE          = 2,
+} EmberAfColorLoopAction;
+
+// Enum for ColorLoopDirection
+typedef enum
+{
+    EMBER_ZCL_COLOR_LOOP_DIRECTION_DECREMENT_HUE = 0,
+    EMBER_ZCL_COLOR_LOOP_DIRECTION_INCREMENT_HUE = 1,
+} EmberAfColorLoopDirection;
+
+// Enum for ColorMode
+typedef enum
+{
+    EMBER_ZCL_COLOR_MODE_CURRENT_HUE_AND_CURRENT_SATURATION = 0,
+    EMBER_ZCL_COLOR_MODE_CURRENT_X_AND_CURRENT_Y            = 1,
+    EMBER_ZCL_COLOR_MODE_COLOR_TEMPERATURE                  = 2,
+} EmberAfColorMode;
+
+// Enum for CommandIdentification
+typedef enum
+{
+    EMBER_ZCL_COMMAND_IDENTIFICATION_START                  = 1,
+    EMBER_ZCL_COMMAND_IDENTIFICATION_STOP                   = 2,
+    EMBER_ZCL_COMMAND_IDENTIFICATION_PAUSE                  = 3,
+    EMBER_ZCL_COMMAND_IDENTIFICATION_START_SUPERFREEZING    = 4,
+    EMBER_ZCL_COMMAND_IDENTIFICATION_STOP_SUPERFREEZING     = 5,
+    EMBER_ZCL_COMMAND_IDENTIFICATION_START_SUPERCOOLING     = 6,
+    EMBER_ZCL_COMMAND_IDENTIFICATION_STOP_SUPERCOOLING      = 7,
+    EMBER_ZCL_COMMAND_IDENTIFICATION_DISABLE_GAS            = 8,
+    EMBER_ZCL_COMMAND_IDENTIFICATION_ENABLE_GAS             = 9,
+    EMBER_ZCL_COMMAND_IDENTIFICATION_ENABLE_ENERGY_CONTROL  = 10,
+    EMBER_ZCL_COMMAND_IDENTIFICATION_DISABLE_ENERGY_CONTROL = 11,
+} EmberAfCommandIdentification;
+
+// Enum for CommissioningStartupControl
+typedef enum
+{
+    EMBER_ZCL_COMMISSIONING_STARTUP_CONTROL_NO_ACTION          = 0,
+    EMBER_ZCL_COMMISSIONING_STARTUP_CONTROL_FORM_NETWORK       = 1,
+    EMBER_ZCL_COMMISSIONING_STARTUP_CONTROL_REJOIN_NETWORK     = 2,
+    EMBER_ZCL_COMMISSIONING_STARTUP_CONTROL_START_FROM_SCRATCH = 3,
+} EmberAfCommissioningStartupControl;
+
+// Enum for CommodityType
+typedef enum
+{
+    EMBER_ZCL_COMMODITY_TYPE_ELECTRIC_METERING                   = 0,
+    EMBER_ZCL_COMMODITY_TYPE_GAS_METERING                        = 1,
+    EMBER_ZCL_COMMODITY_TYPE_WATER_METERING                      = 2,
+    EMBER_ZCL_COMMODITY_TYPE_THERMAL_METERING                    = 3,
+    EMBER_ZCL_COMMODITY_TYPE_PRESSURE_METERING                   = 4,
+    EMBER_ZCL_COMMODITY_TYPE_HEAT_METERING                       = 5,
+    EMBER_ZCL_COMMODITY_TYPE_COOLING_METERING                    = 6,
+    EMBER_ZCL_COMMODITY_TYPE_ELECTRIC_VEHICLE_CHARGING_METERING  = 7,
+    EMBER_ZCL_COMMODITY_TYPE_PV_GENERATION_METERING              = 8,
+    EMBER_ZCL_COMMODITY_TYPE_WIND_TURBINE_GENERATION_METERING    = 9,
+    EMBER_ZCL_COMMODITY_TYPE_WATER_TURBINE_GENERATION_METERING   = 10,
+    EMBER_ZCL_COMMODITY_TYPE_MICRO_GENERATION_METERING           = 11,
+    EMBER_ZCL_COMMODITY_TYPE_SOLAR_HOT_WATER_GENERATION_METERING = 12,
+    EMBER_ZCL_COMMODITY_TYPE_ELECTRIC_METERING_ELEMENT1          = 13,
+    EMBER_ZCL_COMMODITY_TYPE_ELECTRIC_METERING_ELEMENT2          = 14,
+    EMBER_ZCL_COMMODITY_TYPE_ELECTRIC_METERING_ELEMENT3          = 15,
+} EmberAfCommodityType;
+
+// Enum for CppEventResponseCppAuth
+typedef enum
+{
+    EMBER_ZCL_CPP_EVENT_RESPONSE_CPP_AUTH_ACCEPTED = 1,
+    EMBER_ZCL_CPP_EVENT_RESPONSE_CPP_AUTH_REJECTED = 2,
+} EmberAfCppEventResponseCppAuth;
+
+// Enum for CppPriceTier
+typedef enum
+{
+    EMBER_ZCL_CPP_PRICE_TIER_CPP1 = 0,
+    EMBER_ZCL_CPP_PRICE_TIER_CPP2 = 1,
+} EmberAfCppPriceTier;
+
+// Enum for CreditAdjustmentType
+typedef enum
+{
+    EMBER_ZCL_CREDIT_ADJUSTMENT_TYPE_CREDIT_INCREMENTAL = 0,
+    EMBER_ZCL_CREDIT_ADJUSTMENT_TYPE_CREDIT_ABSOLUTE    = 1,
+} EmberAfCreditAdjustmentType;
+
+// Enum for CreditPaymentStatus
+typedef enum
+{
+    EMBER_ZCL_CREDIT_PAYMENT_STATUS_PENDING            = 0,
+    EMBER_ZCL_CREDIT_PAYMENT_STATUS_RECEIVED_PAID      = 1,
+    EMBER_ZCL_CREDIT_PAYMENT_STATUS_OVERDUE            = 2,
+    EMBER_ZCL_CREDIT_PAYMENT_STATUS_2_PAYMENTS_OVERDUE = 3,
+    EMBER_ZCL_CREDIT_PAYMENT_STATUS_3_PAYMENTS_OVERDUE = 4,
+} EmberAfCreditPaymentStatus;
+
+// Enum for DataQualityId
+typedef enum
+{
+    EMBER_ZCL_DATA_QUALITY_ID_ALL_DATA_CERTIFIED                       = 0,
+    EMBER_ZCL_DATA_QUALITY_ID_ONLY_INSTANTANEOUS_POWER_NOT_CERTIFIED   = 1,
+    EMBER_ZCL_DATA_QUALITY_ID_ONLY_CUMULATED_CONSUMPTION_NOT_CERTIFIED = 2,
+    EMBER_ZCL_DATA_QUALITY_ID_NOT_CERTIFIED_DATA                       = 3,
+} EmberAfDataQualityId;
+
+// Enum for DebtAmountType
+typedef enum
+{
+    EMBER_ZCL_DEBT_AMOUNT_TYPE_TYPE1_ABSOLUTE    = 0,
+    EMBER_ZCL_DEBT_AMOUNT_TYPE_TYPE1_INCREMENTAL = 1,
+    EMBER_ZCL_DEBT_AMOUNT_TYPE_TYPE2_ABSOLUTE    = 2,
+    EMBER_ZCL_DEBT_AMOUNT_TYPE_TYPE2_INCREMENTAL = 3,
+    EMBER_ZCL_DEBT_AMOUNT_TYPE_TYPE3_ABSOLUTE    = 4,
+    EMBER_ZCL_DEBT_AMOUNT_TYPE_TYPE3_INCREMENTAL = 5,
+} EmberAfDebtAmountType;
+
+// Enum for DebtRecoveryFrequency
+typedef enum
+{
+    EMBER_ZCL_DEBT_RECOVERY_FREQUENCY_PER_HOUR    = 0,
+    EMBER_ZCL_DEBT_RECOVERY_FREQUENCY_PER_DAY     = 1,
+    EMBER_ZCL_DEBT_RECOVERY_FREQUENCY_PER_WEEK    = 2,
+    EMBER_ZCL_DEBT_RECOVERY_FREQUENCY_PER_MONTH   = 3,
+    EMBER_ZCL_DEBT_RECOVERY_FREQUENCY_PER_QUARTER = 4,
+} EmberAfDebtRecoveryFrequency;
+
+// Enum for DebtRecoveryMethod
+typedef enum
+{
+    EMBER_ZCL_DEBT_RECOVERY_METHOD_TIME_BASED       = 0,
+    EMBER_ZCL_DEBT_RECOVERY_METHOD_PERCENTAGE_BASED = 1,
+    EMBER_ZCL_DEBT_RECOVERY_METHOD_CATCH_UP_BASED   = 2,
+} EmberAfDebtRecoveryMethod;
+
+// Enum for DehumidifcationLockout
+typedef enum
+{
+    EMBER_ZCL_DEHUMIDIFCATION_LOCKOUT_NOT_ALLOWED = 0,
+    EMBER_ZCL_DEHUMIDIFCATION_LOCKOUT_ALLOWED     = 1,
+} EmberAfDehumidifcationLockout;
+
+// Enum for DeviceInformationRecordSort
+typedef enum
+{
+    EMBER_ZCL_DEVICE_INFORMATION_RECORD_SORT_NOT_SORTED      = 0,
+    EMBER_ZCL_DEVICE_INFORMATION_RECORD_SORT_TOP_OF_THE_LIST = 1,
+} EmberAfDeviceInformationRecordSort;
+
+// Enum for DeviceStatus2Structure
+typedef enum
+{
+    EMBER_ZCL_DEVICE_STATUS2_STRUCTURE_IRIS_SYMPTOM_CODE = 32,
+} EmberAfDeviceStatus2Structure;
+
+// Enum for DoorLockEventSource
+typedef enum
+{
+    EMBER_ZCL_DOOR_LOCK_EVENT_SOURCE_KEYPAD        = 0,
+    EMBER_ZCL_DOOR_LOCK_EVENT_SOURCE_RF            = 1,
+    EMBER_ZCL_DOOR_LOCK_EVENT_SOURCE_MANUAL        = 2,
+    EMBER_ZCL_DOOR_LOCK_EVENT_SOURCE_RFID          = 3,
+    EMBER_ZCL_DOOR_LOCK_EVENT_SOURCE_INDETERMINATE = 255,
+} EmberAfDoorLockEventSource;
+
+// Enum for DoorLockEventType
+typedef enum
+{
+    EMBER_ZCL_DOOR_LOCK_EVENT_TYPE_OPERATION   = 0,
+    EMBER_ZCL_DOOR_LOCK_EVENT_TYPE_PROGRAMMING = 1,
+    EMBER_ZCL_DOOR_LOCK_EVENT_TYPE_ALARM       = 2,
+} EmberAfDoorLockEventType;
+
+// Enum for DoorLockOperatingMode
+typedef enum
+{
+    EMBER_ZCL_DOOR_LOCK_OPERATING_MODE_NORMAL_MODE            = 0,
+    EMBER_ZCL_DOOR_LOCK_OPERATING_MODE_VACATION_MODE          = 1,
+    EMBER_ZCL_DOOR_LOCK_OPERATING_MODE_PRIVACY_MODE           = 2,
+    EMBER_ZCL_DOOR_LOCK_OPERATING_MODE_NO_RF_LOCK_OR_UNLOCK   = 3,
+    EMBER_ZCL_DOOR_LOCK_OPERATING_MODE_LOCAL_PROGRAMMING_MODE = 4,
+    EMBER_ZCL_DOOR_LOCK_OPERATING_MODE_PASSAGE_MODE           = 5,
+} EmberAfDoorLockOperatingMode;
+
+// Enum for DoorLockOperationEventCode
+typedef enum
+{
+    EMBER_ZCL_DOOR_LOCK_OPERATION_EVENT_CODE_UNKNOWN_OR_MFG_SPECIFIC  = 0,
+    EMBER_ZCL_DOOR_LOCK_OPERATION_EVENT_CODE_LOCK                     = 1,
+    EMBER_ZCL_DOOR_LOCK_OPERATION_EVENT_CODE_UNLOCK                   = 2,
+    EMBER_ZCL_DOOR_LOCK_OPERATION_EVENT_CODE_LOCK_INVALID_PIN_OR_ID   = 3,
+    EMBER_ZCL_DOOR_LOCK_OPERATION_EVENT_CODE_LOCK_INVALID_SCHEDULE    = 4,
+    EMBER_ZCL_DOOR_LOCK_OPERATION_EVENT_CODE_UNLOCK_INVALID_PIN_OR_ID = 5,
+    EMBER_ZCL_DOOR_LOCK_OPERATION_EVENT_CODE_UNLOCK_INVALID_SCHEDULE  = 6,
+    EMBER_ZCL_DOOR_LOCK_OPERATION_EVENT_CODE_ONE_TOUCH_LOCK           = 7,
+    EMBER_ZCL_DOOR_LOCK_OPERATION_EVENT_CODE_KEY_LOCK                 = 8,
+    EMBER_ZCL_DOOR_LOCK_OPERATION_EVENT_CODE_KEY_UNLOCK               = 9,
+    EMBER_ZCL_DOOR_LOCK_OPERATION_EVENT_CODE_AUTO_LOCK                = 10,
+    EMBER_ZCL_DOOR_LOCK_OPERATION_EVENT_CODE_SCHEDULE_LOCK            = 11,
+    EMBER_ZCL_DOOR_LOCK_OPERATION_EVENT_CODE_SCHEDULE_UNLOCK          = 12,
+    EMBER_ZCL_DOOR_LOCK_OPERATION_EVENT_CODE_MANUAL_LOCK              = 13,
+    EMBER_ZCL_DOOR_LOCK_OPERATION_EVENT_CODE_MANUAL_UNLOCK            = 14,
+} EmberAfDoorLockOperationEventCode;
+
+// Enum for DoorLockProgrammingEventCode
+typedef enum
+{
+    EMBER_ZCL_DOOR_LOCK_PROGRAMMING_EVENT_CODE_UNKNOWN_OR_MFG_SPECIFIC = 0,
+    EMBER_ZCL_DOOR_LOCK_PROGRAMMING_EVENT_CODE_MASTER_CODE_CHANGED     = 1,
+    EMBER_ZCL_DOOR_LOCK_PROGRAMMING_EVENT_CODE_PIN_ADDED               = 2,
+    EMBER_ZCL_DOOR_LOCK_PROGRAMMING_EVENT_CODE_PIN_DELETED             = 3,
+    EMBER_ZCL_DOOR_LOCK_PROGRAMMING_EVENT_CODE_PIN_CHANGED             = 4,
+    EMBER_ZCL_DOOR_LOCK_PROGRAMMING_EVENT_CODE_ID_ADDED                = 5,
+    EMBER_ZCL_DOOR_LOCK_PROGRAMMING_EVENT_CODE_ID_DELETED              = 6,
+} EmberAfDoorLockProgrammingEventCode;
+
+// Enum for DoorLockSecurityLevel
+typedef enum
+{
+    EMBER_ZCL_DOOR_LOCK_SECURITY_LEVEL_NETWORK_SECURITY = 0,
+    EMBER_ZCL_DOOR_LOCK_SECURITY_LEVEL_APS_SECURITY     = 1,
+} EmberAfDoorLockSecurityLevel;
+
+// Enum for DoorLockSetPinOrIdStatus
+typedef enum
+{
+    EMBER_ZCL_DOOR_LOCK_SET_PIN_OR_ID_STATUS_SUCCESS              = 0,
+    EMBER_ZCL_DOOR_LOCK_SET_PIN_OR_ID_STATUS_GENERAL_FAILURE      = 1,
+    EMBER_ZCL_DOOR_LOCK_SET_PIN_OR_ID_STATUS_MEMORY_FULL          = 2,
+    EMBER_ZCL_DOOR_LOCK_SET_PIN_OR_ID_STATUS_DUPLICATE_CODE_ERROR = 3,
+} EmberAfDoorLockSetPinOrIdStatus;
+
+// Enum for DoorLockSoundVolume
+typedef enum
+{
+    EMBER_ZCL_DOOR_LOCK_SOUND_VOLUME_SILENT = 0,
+    EMBER_ZCL_DOOR_LOCK_SOUND_VOLUME_LOW    = 1,
+    EMBER_ZCL_DOOR_LOCK_SOUND_VOLUME_HIGH   = 2,
+} EmberAfDoorLockSoundVolume;
+
+// Enum for DoorLockState
+typedef enum
+{
+    EMBER_ZCL_DOOR_LOCK_STATE_NOT_FULLY_LOCKED = 0,
+    EMBER_ZCL_DOOR_LOCK_STATE_LOCKED           = 1,
+    EMBER_ZCL_DOOR_LOCK_STATE_UNLOCKED         = 2,
+} EmberAfDoorLockState;
+
+// Enum for DoorLockType
+typedef enum
+{
+    EMBER_ZCL_DOOR_LOCK_TYPE_DEAD_BOLT      = 0,
+    EMBER_ZCL_DOOR_LOCK_TYPE_MAGNETIC       = 1,
+    EMBER_ZCL_DOOR_LOCK_TYPE_MORTISE        = 2,
+    EMBER_ZCL_DOOR_LOCK_TYPE_RIM            = 3,
+    EMBER_ZCL_DOOR_LOCK_TYPE_LATCH_BOLT     = 4,
+    EMBER_ZCL_DOOR_LOCK_TYPE_CYLINDRICAL    = 5,
+    EMBER_ZCL_DOOR_LOCK_TYPE_TUBULAR        = 6,
+    EMBER_ZCL_DOOR_LOCK_TYPE_INTERCONNECTED = 7,
+    EMBER_ZCL_DOOR_LOCK_TYPE_DEAD_LATCH     = 8,
+    EMBER_ZCL_DOOR_LOCK_TYPE_OTHER          = 9,
+} EmberAfDoorLockType;
+
+// Enum for DoorLockUserStatus
+typedef enum
+{
+    EMBER_ZCL_DOOR_LOCK_USER_STATUS_AVAILABLE         = 0,
+    EMBER_ZCL_DOOR_LOCK_USER_STATUS_OCCUPIED_ENABLED  = 1,
+    EMBER_ZCL_DOOR_LOCK_USER_STATUS_OCCUPIED_DISABLED = 3,
+    EMBER_ZCL_DOOR_LOCK_USER_STATUS_NOT_SUPPORTED     = 255,
+} EmberAfDoorLockUserStatus;
+
+// Enum for DoorLockUserType
+typedef enum
+{
+    EMBER_ZCL_DOOR_LOCK_USER_TYPE_UNRESTRICTED           = 0,
+    EMBER_ZCL_DOOR_LOCK_USER_TYPE_YEAR_DAY_SCHEDULE_USER = 1,
+    EMBER_ZCL_DOOR_LOCK_USER_TYPE_WEEK_DAY_SCHEDULE_USER = 2,
+    EMBER_ZCL_DOOR_LOCK_USER_TYPE_MASTER_USER            = 3,
+    EMBER_ZCL_DOOR_LOCK_USER_TYPE_NON_ACCESS_USER        = 4,
+    EMBER_ZCL_DOOR_LOCK_USER_TYPE_NOT_SUPPORTED          = 255,
+} EmberAfDoorLockUserType;
+
+// Enum for DoorState
+typedef enum
+{
+    EMBER_ZCL_DOOR_STATE_OPEN              = 0,
+    EMBER_ZCL_DOOR_STATE_CLOSED            = 1,
+    EMBER_ZCL_DOOR_STATE_ERROR_JAMMED      = 2,
+    EMBER_ZCL_DOOR_STATE_ERROR_FORCED_OPEN = 3,
+    EMBER_ZCL_DOOR_STATE_ERROR_UNSPECIFIED = 4,
+} EmberAfDoorState;
+
+// Enum for ElectricityAlarmGroups
+typedef enum
+{
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_LOW_VOLTAGE_L1         = 16,
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_HIGH_VOLTAGE_L1        = 17,
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_LOW_VOLTAGE_L2         = 18,
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_HIGH_VOLTAGE_L2        = 19,
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_LOW_VOLTAGE_L3         = 20,
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_HIGH_VOLTAGE_L3        = 21,
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_OVER_CURRENT_L1        = 22,
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_OVER_CURRENT_L2        = 23,
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_OVER_CURRENT_L3        = 24,
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_FREQUENCY_TOO_LOW_L1   = 25,
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_FREQUENCY_TOO_HIGH_L1  = 26,
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_FREQUENCY_TOO_LOW_L2   = 27,
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_FREQUENCY_TOO_HIGH_L2  = 28,
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_FREQUENCY_TOO_LOW_L3   = 29,
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_FREQUENCY_TOO_HIGH_L3  = 30,
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_GROUND_FAULT           = 31,
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_ELECTRIC_TAMPER_DETECT = 32,
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_INCORRECT_POLARITY     = 33,
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_CURRENT_NO_VOLTAGE     = 34,
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_UNDER_VOLTAGE          = 35,
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_OVER_VOLTAGE           = 36,
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_NORMAL_VOLTAGE         = 37,
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_PF_BELOW_THRESHOLD     = 38,
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_PF_ABOVE_THRESHOLD     = 39,
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_TERMINAL_COVER_REMOVED = 40,
+    EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_TERMINAL_COVER_CLOSED  = 41,
+} EmberAfElectricityAlarmGroups;
+
+// Enum for EnhancedColorMode
+typedef enum
+{
+    EMBER_ZCL_ENHANCED_COLOR_MODE_CURRENT_HUE_AND_CURRENT_SATURATION          = 0,
+    EMBER_ZCL_ENHANCED_COLOR_MODE_CURRENT_X_AND_CURRENT_Y                     = 1,
+    EMBER_ZCL_ENHANCED_COLOR_MODE_COLOR_TEMPERATURE                           = 2,
+    EMBER_ZCL_ENHANCED_COLOR_MODE_ENHANCED_CURRENT_HUE_AND_CURRENT_SATURATION = 3,
+} EmberAfEnhancedColorMode;
+
+// Enum for EventConfigurationControl
+typedef enum
+{
+    EMBER_ZCL_EVENT_CONFIGURATION_CONTROL_APPLY_BY_LIST                = 0,
+    EMBER_ZCL_EVENT_CONFIGURATION_CONTROL_APPLY_BY_EVENT_GROUP         = 1,
+    EMBER_ZCL_EVENT_CONFIGURATION_CONTROL_APPLY_BY_LOG_TYPE            = 2,
+    EMBER_ZCL_EVENT_CONFIGURATION_CONTROL_APPLY_BY_CONFIGURATION_MATCH = 3,
+} EmberAfEventConfigurationControl;
+
+// Enum for EventConfigurationLogAction
+typedef enum
+{
+    EMBER_ZCL_EVENT_CONFIGURATION_LOG_ACTION_DO_NOT_LOG            = 0,
+    EMBER_ZCL_EVENT_CONFIGURATION_LOG_ACTION_LOG_AS_TAMPER         = 1,
+    EMBER_ZCL_EVENT_CONFIGURATION_LOG_ACTION_LOG_AS_FAULT          = 2,
+    EMBER_ZCL_EVENT_CONFIGURATION_LOG_ACTION_LOG_AS_GENERAL_EVENT  = 3,
+    EMBER_ZCL_EVENT_CONFIGURATION_LOG_ACTION_LOG_AS_SECURITY_EVENT = 4,
+    EMBER_ZCL_EVENT_CONFIGURATION_LOG_ACTION_LOG_AS_NETWORK_EVENT  = 5,
+} EmberAfEventConfigurationLogAction;
+
+// Enum for EventControl
+typedef enum
+{
+    EMBER_ZCL_EVENT_CONTROL_RETRIEVE_MINIMAL_INFORMATION = 0,
+    EMBER_ZCL_EVENT_CONTROL_RETRIEVE_FULL_INFORMATION    = 16,
+} EmberAfEventControl;
+
+// Enum for EventId
+typedef enum
+{
+    EMBER_ZCL_EVENT_ID_METER_COVER_REMOVED                   = 0,
+    EMBER_ZCL_EVENT_ID_METER_COVER_CLOSED                    = 1,
+    EMBER_ZCL_EVENT_ID_STRONG_MAGNETIC_FIELD                 = 2,
+    EMBER_ZCL_EVENT_ID_NO_STRONG_MAGNETIC_FIELD              = 3,
+    EMBER_ZCL_EVENT_ID_BATTERY_FAILURE                       = 4,
+    EMBER_ZCL_EVENT_ID_LOW_BATTERY                           = 5,
+    EMBER_ZCL_EVENT_ID_PROGRAM_MEMORY_ERROR                  = 6,
+    EMBER_ZCL_EVENT_ID_RAM_ERROR                             = 7,
+    EMBER_ZCL_EVENT_ID_NV_MEMORY_ERROR                       = 8,
+    EMBER_ZCL_EVENT_ID_MEASUREMENT_SYSTEM_ERROR              = 9,
+    EMBER_ZCL_EVENT_ID_WATCHDOG_ERROR                        = 10,
+    EMBER_ZCL_EVENT_ID_SUPPLY_DISCONNECT_FAILURE             = 11,
+    EMBER_ZCL_EVENT_ID_SUPPLY_CONNECT_FAILURE                = 12,
+    EMBER_ZCL_EVENT_ID_MEASURMENT_SOFTWARE_CHANGED           = 13,
+    EMBER_ZCL_EVENT_ID_DST_ENABLED                           = 14,
+    EMBER_ZCL_EVENT_ID_DST_DISABLED                          = 15,
+    EMBER_ZCL_EVENT_ID_CLOCK_ADJ_BACKWARD                    = 16,
+    EMBER_ZCL_EVENT_ID_CLOCK_ADJ_FORWARD                     = 17,
+    EMBER_ZCL_EVENT_ID_CLOCK_INVALID                         = 18,
+    EMBER_ZCL_EVENT_ID_COMMS_ERROR_HAN                       = 19,
+    EMBER_ZCL_EVENT_ID_COMMS_OK_HAN                          = 20,
+    EMBER_ZCL_EVENT_ID_FRAUD_ATTEMPT                         = 21,
+    EMBER_ZCL_EVENT_ID_POWER_LOSS                            = 22,
+    EMBER_ZCL_EVENT_ID_INCORRECT_PROTOCOL                    = 23,
+    EMBER_ZCL_EVENT_ID_UNUSUAL_HAN_TRAFFIC                   = 24,
+    EMBER_ZCL_EVENT_ID_UNEXPECTED_CLOCK_CHANGE               = 25,
+    EMBER_ZCL_EVENT_ID_COMMS_USING_UNAUTHENTICATED_COMPONENT = 26,
+    EMBER_ZCL_EVENT_ID_ERROR_REG_CLEAR                       = 27,
+    EMBER_ZCL_EVENT_ID_ALARM_REG_CLEAR                       = 28,
+    EMBER_ZCL_EVENT_ID_UNEXPECTED_HW_RESET                   = 29,
+    EMBER_ZCL_EVENT_ID_UNEXPECTED_PROGRAM_EXECUTION          = 30,
+    EMBER_ZCL_EVENT_ID_EVENT_LOG_CLEARED                     = 31,
+    EMBER_ZCL_EVENT_ID_MANUAL_DISCONNECT                     = 32,
+    EMBER_ZCL_EVENT_ID_MANUAL_CONNECT                        = 33,
+    EMBER_ZCL_EVENT_ID_REMOTE_DISCONNECTION                  = 34,
+    EMBER_ZCL_EVENT_ID_LOCAL_DISCONNECTION                   = 35,
+    EMBER_ZCL_EVENT_ID_LIMIT_THRESHOLD_EXCEEDED              = 36,
+    EMBER_ZCL_EVENT_ID_LIMIT_THRESHOLD_OK                    = 37,
+    EMBER_ZCL_EVENT_ID_LIMIT_THRESHOLD_CHANGED               = 38,
+    EMBER_ZCL_EVENT_ID_MAXIMUM_DEMAND_EXCEEDED               = 39,
+    EMBER_ZCL_EVENT_ID_PROFILE_CLEARED                       = 40,
+    EMBER_ZCL_EVENT_ID_FIRMWARE_READY_FOR_ACTIVATION         = 41,
+    EMBER_ZCL_EVENT_ID_FIRMWARE_ACTIVATED                    = 42,
+    EMBER_ZCL_EVENT_ID_PATCH_FAILURE                         = 43,
+    EMBER_ZCL_EVENT_ID_TOU_TARIFF_ACTIVATION                 = 44,
+    EMBER_ZCL_EVENT_ID_8X8_TARIFFACTIVATED                   = 45,
+    EMBER_ZCL_EVENT_ID_SINGLE_TARIFF_RATE_ACTIVATED          = 46,
+    EMBER_ZCL_EVENT_ID_ASYNCHRONOUS_BILLING_OCCURRED         = 47,
+    EMBER_ZCL_EVENT_ID_SYNCHRONOUS_BILLING_OCCURRED          = 48,
+    EMBER_ZCL_EVENT_ID_INCORRECT_POLARITY                    = 128,
+    EMBER_ZCL_EVENT_ID_CURRENT_NO_VOLTAGE                    = 129,
+    EMBER_ZCL_EVENT_ID_UNDER_VOLTAGE                         = 130,
+    EMBER_ZCL_EVENT_ID_OVER_VOLTAGE                          = 131,
+    EMBER_ZCL_EVENT_ID_NORMAL_VOLTAGE                        = 132,
+    EMBER_ZCL_EVENT_ID_PF_BELOW_THRESHOLD                    = 133,
+    EMBER_ZCL_EVENT_ID_PF_ABOVE_THRESHOLD                    = 134,
+    EMBER_ZCL_EVENT_ID_TERMINAL_COVER_REMOVED                = 135,
+    EMBER_ZCL_EVENT_ID_TERMINAL_COVER_CLOSED                 = 136,
+    EMBER_ZCL_EVENT_ID_REVERSE_FLOW                          = 160,
+    EMBER_ZCL_EVENT_ID_TILT_TAMPER                           = 161,
+    EMBER_ZCL_EVENT_ID_BATTERY_COVER_REMOVED                 = 162,
+    EMBER_ZCL_EVENT_ID_BATTERY_COVER_CLOSED                  = 163,
+    EMBER_ZCL_EVENT_ID_EXCESS_FLOW                           = 164,
+    EMBER_ZCL_EVENT_ID_CREDIT_OK                             = 192,
+    EMBER_ZCL_EVENT_ID_LOW_CREDIT                            = 193,
+    EMBER_ZCL_EVENT_ID_EMERGENCY_CREDIT_IN_USE               = 192,
+    EMBER_ZCL_EVENT_ID_EMERGENCY_CREDIT_EXHAUSTED            = 193,
+    EMBER_ZCL_EVENT_ID_ZERO_CREDIT_EC_NOT_SELECTED           = 194,
+    EMBER_ZCL_EVENT_ID_SUPPLY_ON                             = 195,
+    EMBER_ZCL_EVENT_ID_SUPPLY_OFF_AARMED                     = 196,
+    EMBER_ZCL_EVENT_ID_SUPPLY_OFF                            = 197,
+    EMBER_ZCL_EVENT_ID_DISCOUNT_APPLIED                      = 198,
+    EMBER_ZCL_EVENT_ID_MANUFACTURER_SPECIFIC_A               = 224,
+    EMBER_ZCL_EVENT_ID_MANUFACTURER_SPECIFIC_B               = 225,
+    EMBER_ZCL_EVENT_ID_MANUFACTURER_SPECIFIC_C               = 226,
+    EMBER_ZCL_EVENT_ID_MANUFACTURER_SPECIFIC_D               = 227,
+    EMBER_ZCL_EVENT_ID_MANUFACTURER_SPECIFIC_E               = 228,
+    EMBER_ZCL_EVENT_ID_MANUFACTURER_SPECIFIC_F               = 229,
+    EMBER_ZCL_EVENT_ID_MANUFACTURER_SPECIFIC_G               = 230,
+    EMBER_ZCL_EVENT_ID_MANUFACTURER_SPECIFIC_H               = 231,
+    EMBER_ZCL_EVENT_ID_MANUFACTURER_SPECIFIC_I               = 232,
+} EmberAfEventId;
+
+// Enum for EventIdentification
+typedef enum
+{
+    EMBER_ZCL_EVENT_IDENTIFICATION_END_OF_CYCLE        = 1,
+    EMBER_ZCL_EVENT_IDENTIFICATION_TEMPERATURE_REACHED = 4,
+    EMBER_ZCL_EVENT_IDENTIFICATION_END_OF_COOKING      = 5,
+    EMBER_ZCL_EVENT_IDENTIFICATION_SWITCHING_OFF       = 6,
+    EMBER_ZCL_EVENT_IDENTIFICATION_WRONG_DATA          = 7,
+} EmberAfEventIdentification;
+
+// Enum for EventLogId
+typedef enum
+{
+    EMBER_ZCL_EVENT_LOG_ID_ALL_LOGS                = 0,
+    EMBER_ZCL_EVENT_LOG_ID_TAMPER_LOG              = 1,
+    EMBER_ZCL_EVENT_LOG_ID_FAULT_LOG               = 2,
+    EMBER_ZCL_EVENT_LOG_ID_GENERAL_EVENT_LOG       = 3,
+    EMBER_ZCL_EVENT_LOG_ID_SECURITY_EVENT_LOG      = 4,
+    EMBER_ZCL_EVENT_LOG_ID_NETWORK_EVENT_LOG       = 5,
+    EMBER_ZCL_EVENT_LOG_ID_GBCS_GENERAL_EVENT_LOG  = 6,
+    EMBER_ZCL_EVENT_LOG_ID_GBCS_SECURITY_EVENT_LOG = 7,
+} EmberAfEventLogId;
+
+// Enum for EventLogPayloadControl
+typedef enum
+{
+    EMBER_ZCL_EVENT_LOG_PAYLOAD_CONTROL_EVENTS_DO_NOT_CROSS_FRAME_BOUNDARY = 0,
+    EMBER_ZCL_EVENT_LOG_PAYLOAD_CONTROL_EVENT_CROSSES_FRAME_BOUNDARY       = 1,
+} EmberAfEventLogPayloadControl;
+
+// Enum for ExtendedGenericAlarmGroups
+typedef enum
+{
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_MEASUREMENT_SYSTEM_ERROR                     = 112,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_WATCHDOG_ERROR                               = 113,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_SUPPLY_DISCONNECT_FAILURE                    = 114,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_SUPPLY_CONNECT_FAILURE                       = 115,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_MEASURMENT_SOFTWARE_CHANGED                  = 116,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_DST_ENABLED                                  = 117,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_DST_DISABLED                                 = 118,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_CLOCK_ADJ_BACKWARD                           = 119,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_CLOCK_ADJ_FORWARD                            = 120,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_CLOCK_INVALID                                = 121,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_COMMUNICATION_ERROR_HAN                      = 122,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_COMMUNICATION_OK_H_AN                        = 123,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_METER_FRAUD_ATTEMPT                          = 124,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_POWER_LOSS                                   = 125,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_UNUSUAL_HAN_TRAFFIC                          = 126,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_UNEXPECTED_CLOCK_CHANGE                      = 127,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_COMMS_USING_UNAUTHENTICATED_COMPONENT        = 128,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_ERROR_REG_CLEAR                              = 129,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_ALARM_REG_CLEAR                              = 130,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_UNEXPECTED_HW_RESET                          = 131,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_UNEXPECTED_PROGRAM_EXECUTION                 = 132,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_EVENT_LOG_CLEARED                            = 133,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_LIMIT_THRESHOLD_EXCEEDED                     = 134,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_LIMIT_THRESHOLD_OK                           = 135,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_LIMIT_THRESHOLD_CHANGED                      = 136,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_MAXIMUM_DEMAND_EXCEEDED                      = 137,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_PROFILE_CLEARED                              = 138,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_SAMPLING_BUFFERCLEARED                       = 139,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_BATTERY_WARNING                              = 140,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_WRONG_SIGNATURE                              = 141,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_NO_SIGNATURE                                 = 142,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_UNAUTHORISED_ACTIONFROM_HAN                  = 143,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_FAST_POLLING_START                           = 144,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_FAST_POLLING_END                             = 145,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_METER_REPORTING_INTERVAL_CHANGED             = 146,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_DISCONNECT_DUETO_LOAD_LIMIT                  = 147,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_METER_SUPPLY_STATUS_REGISTER_CHANGED         = 148,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_METER_ALARM_STATUS_REGISTER_CHANGED          = 149,
+    EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_EXTENDED_METER_ALARM_STATUS_REGISTER_CHANGED = 150,
+} EmberAfExtendedGenericAlarmGroups;
+
+// Enum for ExtendedNumberOfPriceTiers
+typedef enum
+{
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_REFER_TO_NUMBER_OF_PRICE_TIERS_FIELD = 0,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS16              = 1,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS17              = 2,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS18              = 3,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS19              = 4,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS20              = 5,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS21              = 6,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS22              = 7,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS23              = 8,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS24              = 9,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS25              = 10,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS26              = 11,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS27              = 12,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS28              = 13,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS29              = 14,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS30              = 15,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS31              = 16,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS32              = 17,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS33              = 18,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS34              = 19,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS35              = 20,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS36              = 21,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS37              = 22,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS38              = 23,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS39              = 24,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS40              = 25,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS41              = 26,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS42              = 27,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS43              = 28,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS44              = 29,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS45              = 30,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS46              = 31,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS47              = 32,
+    EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS48              = 33,
+} EmberAfExtendedNumberOfPriceTiers;
+
+// Enum for ExtendedPriceTier
+typedef enum
+{
+    EMBER_ZCL_EXTENDED_PRICE_TIER_REFER_TO_PRICE_TIER_FIELD = 0,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER16_PRICE_LABEL        = 1,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER17_PRICE_LABEL        = 2,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER18_PRICE_LABEL        = 3,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER19_PRICE_LABEL        = 4,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER20_PRICE_LABEL        = 5,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER21_PRICE_LABEL        = 6,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER22_PRICE_LABEL        = 7,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER23_PRICE_LABEL        = 8,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER24_PRICE_LABEL        = 9,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER25_PRICE_LABEL        = 10,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER26_PRICE_LABEL        = 11,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER27_PRICE_LABEL        = 12,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER28_PRICE_LABEL        = 13,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER29_PRICE_LABEL        = 14,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER30_PRICE_LABEL        = 15,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER31_PRICE_LABEL        = 16,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER32_PRICE_LABEL        = 17,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER33_PRICE_LABEL        = 18,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER34_PRICE_LABEL        = 19,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER35_PRICE_LABEL        = 20,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER36_PRICE_LABEL        = 21,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER37_PRICE_LABEL        = 22,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER38_PRICE_LABEL        = 23,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER39_PRICE_LABEL        = 24,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER40_PRICE_LABEL        = 25,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER41_PRICE_LABEL        = 26,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER42_PRICE_LABEL        = 27,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER43_PRICE_LABEL        = 28,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER44_PRICE_LABEL        = 29,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER45_PRICE_LABEL        = 30,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER46_PRICE_LABEL        = 31,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER47_PRICE_LABEL        = 32,
+    EMBER_ZCL_EXTENDED_PRICE_TIER_TIER48_PRICE_LABEL        = 33,
+} EmberAfExtendedPriceTier;
+
+// Enum for ExtendedRegisterTier
+typedef enum
+{
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_REFER_TO_REGISTER_TIER_FIELD                 = 0,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER16_SUMMATION_DELIVERED_ATTRIBUTE = 1,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER17_SUMMATION_DELIVERED_ATTRIBUTE = 2,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER18_SUMMATION_DELIVERED_ATTRIBUTE = 3,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER19_SUMMATION_DELIVERED_ATTRIBUTE = 4,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER20_SUMMATION_DELIVERED_ATTRIBUTE = 5,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER21_SUMMATION_DELIVERED_ATTRIBUTE = 6,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER22_SUMMATION_DELIVERED_ATTRIBUTE = 7,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER23_SUMMATION_DELIVERED_ATTRIBUTE = 8,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER24_SUMMATION_DELIVERED_ATTRIBUTE = 9,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER25_SUMMATION_DELIVERED_ATTRIBUTE = 10,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER26_SUMMATION_DELIVERED_ATTRIBUTE = 11,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER27_SUMMATION_DELIVERED_ATTRIBUTE = 12,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER28_SUMMATION_DELIVERED_ATTRIBUTE = 13,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER29_SUMMATION_DELIVERED_ATTRIBUTE = 14,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER30_SUMMATION_DELIVERED_ATTRIBUTE = 15,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER31_SUMMATION_DELIVERED_ATTRIBUTE = 16,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER32_SUMMATION_DELIVERED_ATTRIBUTE = 17,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER33_SUMMATION_DELIVERED_ATTRIBUTE = 18,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER34_SUMMATION_DELIVERED_ATTRIBUTE = 19,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER35_SUMMATION_DELIVERED_ATTRIBUTE = 20,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER36_SUMMATION_DELIVERED_ATTRIBUTE = 21,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER37_SUMMATION_DELIVERED_ATTRIBUTE = 22,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER38_SUMMATION_DELIVERED_ATTRIBUTE = 23,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER39_SUMMATION_DELIVERED_ATTRIBUTE = 24,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER40_SUMMATION_DELIVERED_ATTRIBUTE = 25,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER41_SUMMATION_DELIVERED_ATTRIBUTE = 26,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER42_SUMMATION_DELIVERED_ATTRIBUTE = 27,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER43_SUMMATION_DELIVERED_ATTRIBUTE = 28,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER44_SUMMATION_DELIVERED_ATTRIBUTE = 29,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER45_SUMMATION_DELIVERED_ATTRIBUTE = 30,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER46_SUMMATION_DELIVERED_ATTRIBUTE = 31,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER47_SUMMATION_DELIVERED_ATTRIBUTE = 32,
+    EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER48_SUMMATION_DELIVERED_ATTRIBUTE = 33,
+} EmberAfExtendedRegisterTier;
+
+// Enum for EzModeCommissioningClusterType
+typedef enum
+{
+    EMBER_ZCL_EZ_MODE_COMMISSIONING_CLUSTER_TYPE_SERVER = 0,
+    EMBER_ZCL_EZ_MODE_COMMISSIONING_CLUSTER_TYPE_CLIENT = 1,
+} EmberAfEzModeCommissioningClusterType;
+
+// Enum for FanMode
+typedef enum
+{
+    EMBER_ZCL_FAN_MODE_OFF    = 0,
+    EMBER_ZCL_FAN_MODE_LOW    = 1,
+    EMBER_ZCL_FAN_MODE_MEDIUM = 2,
+    EMBER_ZCL_FAN_MODE_HIGH   = 3,
+    EMBER_ZCL_FAN_MODE_ON     = 4,
+    EMBER_ZCL_FAN_MODE_AUTO   = 5,
+    EMBER_ZCL_FAN_MODE_SMART  = 6,
+} EmberAfFanMode;
+
+// Enum for FanModeSequence
+typedef enum
+{
+    EMBER_ZCL_FAN_MODE_SEQUENCE_LOW_MED_HIGH      = 0,
+    EMBER_ZCL_FAN_MODE_SEQUENCE_LOW_HIGH          = 1,
+    EMBER_ZCL_FAN_MODE_SEQUENCE_LOW_MED_HIGH_AUTO = 2,
+    EMBER_ZCL_FAN_MODE_SEQUENCE_LOW_HIGH_AUTO     = 3,
+    EMBER_ZCL_FAN_MODE_SEQUENCE_ON_AUTO           = 4,
+} EmberAfFanModeSequence;
+
+// Enum for GasSpecificAlarmGroups
+typedef enum
+{
+    EMBER_ZCL_GAS_SPECIFIC_ALARM_GROUPS_TILT_TAMPER           = 96,
+    EMBER_ZCL_GAS_SPECIFIC_ALARM_GROUPS_BATTERY_COVER_REMOVED = 97,
+    EMBER_ZCL_GAS_SPECIFIC_ALARM_GROUPS_BATTERY_COVER_CLOSED  = 98,
+    EMBER_ZCL_GAS_SPECIFIC_ALARM_GROUPS_EXCESS_FLOW           = 99,
+    EMBER_ZCL_GAS_SPECIFIC_ALARM_GROUPS_TILT_TAMPER_ENDED     = 100,
+} EmberAfGasSpecificAlarmGroups;
+
+// Enum for GenerationTier
+typedef enum
+{
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER1_SUMMATION_RECEIVED_ATTRIBUTE  = 1,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER2_SUMMATION_RECEIVED_ATTRIBUTE  = 2,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER3_SUMMATION_RECEIVED_ATTRIBUTE  = 3,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER4_SUMMATION_RECEIVED_ATTRIBUTE  = 4,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER5_SUMMATION_RECEIVED_ATTRIBUTE  = 5,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER6_SUMMATION_RECEIVED_ATTRIBUTE  = 6,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER7_SUMMATION_RECEIVED_ATTRIBUTE  = 7,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER8_SUMMATION_RECEIVED_ATTRIBUTE  = 8,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER9_SUMMATION_RECEIVED_ATTRIBUTE  = 9,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER10_SUMMATION_RECEIVED_ATTRIBUTE = 10,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER11_SUMMATION_RECEIVED_ATTRIBUTE = 11,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER12_SUMMATION_RECEIVED_ATTRIBUTE = 12,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER13_SUMMATION_RECEIVED_ATTRIBUTE = 13,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER14_SUMMATION_RECEIVED_ATTRIBUTE = 14,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER15_SUMMATION_RECEIVED_ATTRIBUTE = 15,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER16_SUMMATION_RECEIVED_ATTRIBUTE = 16,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER17_SUMMATION_RECEIVED_ATTRIBUTE = 17,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER18_SUMMATION_RECEIVED_ATTRIBUTE = 18,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER19_SUMMATION_RECEIVED_ATTRIBUTE = 19,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER20_SUMMATION_RECEIVED_ATTRIBUTE = 20,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER21_SUMMATION_RECEIVED_ATTRIBUTE = 21,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER22_SUMMATION_RECEIVED_ATTRIBUTE = 22,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER23_SUMMATION_RECEIVED_ATTRIBUTE = 23,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER24_SUMMATION_RECEIVED_ATTRIBUTE = 24,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER25_SUMMATION_RECEIVED_ATTRIBUTE = 25,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER26_SUMMATION_RECEIVED_ATTRIBUTE = 26,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER27_SUMMATION_RECEIVED_ATTRIBUTE = 27,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER28_SUMMATION_RECEIVED_ATTRIBUTE = 28,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER29_SUMMATION_RECEIVED_ATTRIBUTE = 29,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER30_SUMMATION_RECEIVED_ATTRIBUTE = 30,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER31_SUMMATION_RECEIVED_ATTRIBUTE = 31,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER32_SUMMATION_RECEIVED_ATTRIBUTE = 32,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER33_SUMMATION_RECEIVED_ATTRIBUTE = 33,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER34_SUMMATION_RECEIVED_ATTRIBUTE = 34,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER35_SUMMATION_RECEIVED_ATTRIBUTE = 35,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER36_SUMMATION_RECEIVED_ATTRIBUTE = 36,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER37_SUMMATION_RECEIVED_ATTRIBUTE = 37,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER38_SUMMATION_RECEIVED_ATTRIBUTE = 38,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER39_SUMMATION_RECEIVED_ATTRIBUTE = 39,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER40_SUMMATION_RECEIVED_ATTRIBUTE = 40,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER41_SUMMATION_RECEIVED_ATTRIBUTE = 41,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER42_SUMMATION_RECEIVED_ATTRIBUTE = 42,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER43_SUMMATION_RECEIVED_ATTRIBUTE = 43,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER44_SUMMATION_RECEIVED_ATTRIBUTE = 44,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER45_SUMMATION_RECEIVED_ATTRIBUTE = 45,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER46_SUMMATION_RECEIVED_ATTRIBUTE = 46,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER47_SUMMATION_RECEIVED_ATTRIBUTE = 47,
+    EMBER_ZCL_GENERATION_TIER_CURRENT_TIER48_SUMMATION_RECEIVED_ATTRIBUTE = 48,
+} EmberAfGenerationTier;
+
+// Enum for GenericAlarmGroups
+typedef enum
+{
+    EMBER_ZCL_GENERIC_ALARM_GROUPS_CHECK_METER              = 0,
+    EMBER_ZCL_GENERIC_ALARM_GROUPS_LOW_BATTERY              = 1,
+    EMBER_ZCL_GENERIC_ALARM_GROUPS_TAMPER_DETECT            = 2,
+    EMBER_ZCL_GENERIC_ALARM_GROUPS_LEAK_DETECT              = 5,
+    EMBER_ZCL_GENERIC_ALARM_GROUPS_SERVICE_DISCONNECT       = 6,
+    EMBER_ZCL_GENERIC_ALARM_GROUPS_METER_COVER_REMOVED      = 8,
+    EMBER_ZCL_GENERIC_ALARM_GROUPS_METER_COVER_CLOSED       = 9,
+    EMBER_ZCL_GENERIC_ALARM_GROUPS_STRONG_MAGNETIC_FIELD    = 10,
+    EMBER_ZCL_GENERIC_ALARM_GROUPS_NO_STRONG_MAGNETIC_FIELD = 11,
+    EMBER_ZCL_GENERIC_ALARM_GROUPS_BATTERY_FAILURE          = 12,
+    EMBER_ZCL_GENERIC_ALARM_GROUPS_PROGRAM_MEMORY_ERROR     = 13,
+    EMBER_ZCL_GENERIC_ALARM_GROUPS_RAM_ERROR                = 14,
+    EMBER_ZCL_GENERIC_ALARM_GROUPS_NV_MEMORY_ERROR          = 15,
+} EmberAfGenericAlarmGroups;
+
+// Enum for GenericAlarmGroupsElectricity
+typedef enum
+{
+    EMBER_ZCL_GENERIC_ALARM_GROUPS_ELECTRICITY_POWER_FAILURE = 3,
+    EMBER_ZCL_GENERIC_ALARM_GROUPS_ELECTRICITY_POWER_QUALITY = 4,
+} EmberAfGenericAlarmGroupsElectricity;
+
+// Enum for GenericAlarmGroupsGas
+typedef enum
+{
+    EMBER_ZCL_GENERIC_ALARM_GROUPS_GAS_LOW_PRESSURE = 4,
+    EMBER_ZCL_GENERIC_ALARM_GROUPS_GAS_REVERSE_FLOW = 7,
+} EmberAfGenericAlarmGroupsGas;
+
+// Enum for GenericAlarmGroupsHeatCooling
+typedef enum
+{
+    EMBER_ZCL_GENERIC_ALARM_GROUPS_HEAT_COOLING_TEMPERATURE_SENSOR = 3,
+    EMBER_ZCL_GENERIC_ALARM_GROUPS_HEAT_COOLING_BURST_DETECT       = 4,
+    EMBER_ZCL_GENERIC_ALARM_GROUPS_HEAT_COOLING_FLOW_SENSOR        = 7,
+} EmberAfGenericAlarmGroupsHeatCooling;
+
+// Enum for GenericAlarmGroupsWater
+typedef enum
+{
+    EMBER_ZCL_GENERIC_ALARM_GROUPS_WATER_WATER_PIPE_EMPTY   = 3,
+    EMBER_ZCL_GENERIC_ALARM_GROUPS_WATER_WATER_LOW_PRESSURE = 4,
+    EMBER_ZCL_GENERIC_ALARM_GROUPS_WATER_WATER_REVERSE_FLOW = 7,
+} EmberAfGenericAlarmGroupsWater;
+
+// Enum for GenericDeviceClass
+typedef enum
+{
+    EMBER_ZCL_GENERIC_DEVICE_CLASS_LIGHTING = 0,
+} EmberAfGenericDeviceClass;
+
+// Enum for GenericDeviceType
+typedef enum
+{
+    EMBER_ZCL_GENERIC_DEVICE_TYPE_INCANDESCENT               = 0,
+    EMBER_ZCL_GENERIC_DEVICE_TYPE_SPOTLIGHT_HALOGEN          = 1,
+    EMBER_ZCL_GENERIC_DEVICE_TYPE_HALOGEN_BULB               = 2,
+    EMBER_ZCL_GENERIC_DEVICE_TYPE_CFL                        = 3,
+    EMBER_ZCL_GENERIC_DEVICE_TYPE_LINEAR_FLOURESCENT         = 4,
+    EMBER_ZCL_GENERIC_DEVICE_TYPE_LED_BULB                   = 5,
+    EMBER_ZCL_GENERIC_DEVICE_TYPE_SPOTLIGHT_LED              = 6,
+    EMBER_ZCL_GENERIC_DEVICE_TYPE_LED_STRIP                  = 7,
+    EMBER_ZCL_GENERIC_DEVICE_TYPE_LED_TUBE                   = 8,
+    EMBER_ZCL_GENERIC_DEVICE_TYPE_GENERIC_INDOOR_FIXTURE     = 9,
+    EMBER_ZCL_GENERIC_DEVICE_TYPE_GENERIC_OUTDOOR_FIXTURE    = 10,
+    EMBER_ZCL_GENERIC_DEVICE_TYPE_PENDANT_FIXTURE            = 11,
+    EMBER_ZCL_GENERIC_DEVICE_TYPE_FLOOR_STANDING_FIXTURE     = 12,
+    EMBER_ZCL_GENERIC_DEVICE_TYPE_GENERIC_CONTROLLER         = 224,
+    EMBER_ZCL_GENERIC_DEVICE_TYPE_WALL_SWITCH                = 225,
+    EMBER_ZCL_GENERIC_DEVICE_TYPE_PORTABLE_REMOTE_CONTROLLER = 226,
+    EMBER_ZCL_GENERIC_DEVICE_TYPE_MOTION_OR_LIGHT_SENSOR     = 227,
+    EMBER_ZCL_GENERIC_DEVICE_TYPE_GENERIC_ACTUATOR           = 240,
+    EMBER_ZCL_GENERIC_DEVICE_TYPE_PLUGIN_UNIT                = 241,
+    EMBER_ZCL_GENERIC_DEVICE_TYPE_RETROFIT_ACTUATOR          = 242,
+    EMBER_ZCL_GENERIC_DEVICE_TYPE_UNSPECIFIED                = 255,
+} EmberAfGenericDeviceType;
+
+// Enum for GenericFlowPressureAlarmGroups
+typedef enum
+{
+    EMBER_ZCL_GENERIC_FLOW_PRESSURE_ALARM_GROUPS_BURST_DETECT                    = 48,
+    EMBER_ZCL_GENERIC_FLOW_PRESSURE_ALARM_GROUPS_PRESSURE_TOO_LOW                = 49,
+    EMBER_ZCL_GENERIC_FLOW_PRESSURE_ALARM_GROUPS_PRESSURE_TOO_HIGH               = 50,
+    EMBER_ZCL_GENERIC_FLOW_PRESSURE_ALARM_GROUPS_FLOW_SENSOR_COMMUNICATION_ERROR = 51,
+    EMBER_ZCL_GENERIC_FLOW_PRESSURE_ALARM_GROUPS_FLOW_SENSOR_MEASUREMENT_FAULT   = 52,
+    EMBER_ZCL_GENERIC_FLOW_PRESSURE_ALARM_GROUPS_FLOW_SENSOR_REVERSE_FLOW        = 53,
+    EMBER_ZCL_GENERIC_FLOW_PRESSURE_ALARM_GROUPS_FLOW_SENSOR_AIR_DETECT          = 54,
+    EMBER_ZCL_GENERIC_FLOW_PRESSURE_ALARM_GROUPS_PIPE_EMPTY                      = 55,
+} EmberAfGenericFlowPressureAlarmGroups;
+
+// Enum for GpDeviceId
+typedef enum
+{
+    EMBER_ZCL_GP_DEVICE_ID_GP_SIMPLE_GENERIC_ONE_STATE_SWITCH   = 0,
+    EMBER_ZCL_GP_DEVICE_ID_GP_SIMPLE_GENERIC_TWO_STATE_SWITCH   = 0,
+    EMBER_ZCL_GP_DEVICE_ID_GP_ON_OFF_SWITCH                     = 8,
+    EMBER_ZCL_GP_DEVICE_ID_GP_LEVEL_CONTROL_SWITCH              = 16,
+    EMBER_ZCL_GP_DEVICE_ID_GP_SIMPLE_SENSOR                     = 24,
+    EMBER_ZCL_GP_DEVICE_ID_GP_ADVANCED_GENERIC_ONE_STATE_SWITCH = 24,
+    EMBER_ZCL_GP_DEVICE_ID_GP_ADVANCED_GENERIC_TWO_STATE_SWITCH = 24,
+    EMBER_ZCL_GP_DEVICE_ID_GP_COLOR_DIMMER_SWITCH               = 24,
+    EMBER_ZCL_GP_DEVICE_ID_GP_LIGHT_SENSOR                      = 24,
+    EMBER_ZCL_GP_DEVICE_ID_GP_OCCPANCY_SENSOR                   = 24,
+    EMBER_ZCL_GP_DEVICE_ID_GP_DOOR_LOCK_CONTROLLER              = 24,
+    EMBER_ZCL_GP_DEVICE_ID_GP_TEMPERATURE_SENSOR                = 24,
+    EMBER_ZCL_GP_DEVICE_ID_GP_PRESSURE_SENSOR                   = 24,
+    EMBER_ZCL_GP_DEVICE_ID_GP_FLOW_SENSOR                       = 24,
+    EMBER_ZCL_GP_DEVICE_ID_GP_INDOOR_ENVIRONMENT_SNESOR         = 24,
+} EmberAfGpDeviceId;
+
+// Enum for GpGpdf
+typedef enum
+{
+    EMBER_ZCL_GP_GPDF_IDENTIFY                    = 0,
+    EMBER_ZCL_GP_GPDF_MATCH_ONLY_ON_GPD_ADDRESS   = 2,
+    EMBER_ZCL_GP_GPDF_RECALL_SCENE0               = 16,
+    EMBER_ZCL_GP_GPDF_RECALL_SCENE1               = 17,
+    EMBER_ZCL_GP_GPDF_RECALL_SCENE2               = 18,
+    EMBER_ZCL_GP_GPDF_RECALL_SCENE3               = 19,
+    EMBER_ZCL_GP_GPDF_RECALL_SCENE4               = 20,
+    EMBER_ZCL_GP_GPDF_RECALL_SCENE5               = 21,
+    EMBER_ZCL_GP_GPDF_RECALL_SCENE6               = 22,
+    EMBER_ZCL_GP_GPDF_RECALL_SCENE7               = 23,
+    EMBER_ZCL_GP_GPDF_STORE_SCENE0                = 24,
+    EMBER_ZCL_GP_GPDF_STORE_SCENE1                = 25,
+    EMBER_ZCL_GP_GPDF_STORE_SCENE2                = 26,
+    EMBER_ZCL_GP_GPDF_STORE_SCENE3                = 27,
+    EMBER_ZCL_GP_GPDF_STORE_SCENE4                = 28,
+    EMBER_ZCL_GP_GPDF_STORE_SCENE5                = 29,
+    EMBER_ZCL_GP_GPDF_STORE_SCENE6                = 30,
+    EMBER_ZCL_GP_GPDF_STORE_SCENE7                = 31,
+    EMBER_ZCL_GP_GPDF_OFF                         = 32,
+    EMBER_ZCL_GP_GPDF_ON                          = 33,
+    EMBER_ZCL_GP_GPDF_TOGGLE                      = 34,
+    EMBER_ZCL_GP_GPDF_RELEASE                     = 35,
+    EMBER_ZCL_GP_GPDF_MOVE_UP                     = 48,
+    EMBER_ZCL_GP_GPDF_MOVE_DOWN                   = 49,
+    EMBER_ZCL_GP_GPDF_STEP_UP                     = 50,
+    EMBER_ZCL_GP_GPDF_STEP_DOWN                   = 51,
+    EMBER_ZCL_GP_GPDF_LEVEL_CONTROL_STOP          = 52,
+    EMBER_ZCL_GP_GPDF_MOVE_UP_WITH_ON_OFF         = 53,
+    EMBER_ZCL_GP_GPDF_MOVE_DOWN_WITH_ON_OFF       = 54,
+    EMBER_ZCL_GP_GPDF_STEP_UP_WITH_ON_OFF         = 55,
+    EMBER_ZCL_GP_GPDF_STEP_DOWN_WITH_ON_OFF       = 56,
+    EMBER_ZCL_GP_GPDF_MOVE_HUE_STOP               = 64,
+    EMBER_ZCL_GP_GPDF_MOVE_HUE_UP                 = 65,
+    EMBER_ZCL_GP_GPDF_MOVE_HUE_DOWN               = 66,
+    EMBER_ZCL_GP_GPDF_STEP_HUE_UP                 = 67,
+    EMBER_ZCL_GP_GPDF_STEP_HUE_DOWN               = 68,
+    EMBER_ZCL_GP_GPDF_MOVE_SATURATION_STOP        = 69,
+    EMBER_ZCL_GP_GPDF_MOVE_SATURATION_UP          = 70,
+    EMBER_ZCL_GP_GPDF_MOVE_SATURATION_DOWN        = 71,
+    EMBER_ZCL_GP_GPDF_STEP_SATURATION_UP          = 72,
+    EMBER_ZCL_GP_GPDF_STEP_SATURATION_DOWN        = 73,
+    EMBER_ZCL_GP_GPDF_MOVE_COLOR                  = 74,
+    EMBER_ZCL_GP_GPDF_STEP_COLOR                  = 75,
+    EMBER_ZCL_GP_GPDF_LOCK_DOOR                   = 80,
+    EMBER_ZCL_GP_GPDF_UNLOCK_DOOR                 = 81,
+    EMBER_ZCL_GP_GPDF_PRESS1_OF1                  = 96,
+    EMBER_ZCL_GP_GPDF_RELEASE1_OF1                = 97,
+    EMBER_ZCL_GP_GPDF_PRESS1_OF2                  = 98,
+    EMBER_ZCL_GP_GPDF_RELEASE1_OF2                = 99,
+    EMBER_ZCL_GP_GPDF_PRESS2_OF2                  = 100,
+    EMBER_ZCL_GP_GPDF_RELEASE2_OF2                = 101,
+    EMBER_ZCL_GP_GPDF_SHORT_PRESS1_OF1            = 102,
+    EMBER_ZCL_GP_GPDF_SHORT_PRESS1_OF2            = 103,
+    EMBER_ZCL_GP_GPDF_SHORT_PRESS2_OF2            = 104,
+    EMBER_ZCL_GP_GPDF_8BITS_VECTOR_PRESS          = 105,
+    EMBER_ZCL_GP_GPDF_8BITS_VECTOR_RELEASE        = 106,
+    EMBER_ZCL_GP_GPDF_ATTRIBUTE_REPORTING         = 160,
+    EMBER_ZCL_GP_GPDF_MFR_SP_ATTR_RPTG            = 161,
+    EMBER_ZCL_GP_GPDF_MULTI_CLUSTER_RPTG          = 162,
+    EMBER_ZCL_GP_GPDF_MFR_SP_MULTI_CLUSTER_RPTG   = 163,
+    EMBER_ZCL_GP_GPDF_REQUEST_ATTRIBUTE           = 164,
+    EMBER_ZCL_GP_GPDF_READ_ATTR_RESPONSE          = 165,
+    EMBER_ZCL_GP_GPDF_ZCL_TUNNELING_WITH_PAYLOAD  = 166,
+    EMBER_ZCL_GP_GPDF_COMPACT_ATTRIBUTE_REPORTING = 168,
+    EMBER_ZCL_GP_GPDF_ANY_GPD_SENSOR_CMD          = 175,
+    EMBER_ZCL_GP_GPDF_MFR_DEF_GPD_CMD0            = 176,
+    EMBER_ZCL_GP_GPDF_MFR_DEF_GPD_CMD1            = 177,
+    EMBER_ZCL_GP_GPDF_MFR_DEF_GPD_CMD2            = 178,
+    EMBER_ZCL_GP_GPDF_MFR_DEF_GPD_CMD3            = 179,
+    EMBER_ZCL_GP_GPDF_MFR_DEF_GPD_CMD4            = 180,
+    EMBER_ZCL_GP_GPDF_MFR_DEF_GPD_CMD5            = 181,
+    EMBER_ZCL_GP_GPDF_MFR_DEF_GPD_CMD6            = 182,
+    EMBER_ZCL_GP_GPDF_MFR_DEF_GPD_CMD7            = 183,
+    EMBER_ZCL_GP_GPDF_MFR_DEF_GPD_CMD8            = 184,
+    EMBER_ZCL_GP_GPDF_MFR_DEF_GPD_CMD9            = 185,
+    EMBER_ZCL_GP_GPDF_MFR_DEF_GPD_CMD_A           = 186,
+    EMBER_ZCL_GP_GPDF_MFR_DEF_GPD_CMD_B           = 187,
+    EMBER_ZCL_GP_GPDF_MFR_DEF_GPD_CMD_C           = 188,
+    EMBER_ZCL_GP_GPDF_MFR_DEF_GPD_CMD_D           = 189,
+    EMBER_ZCL_GP_GPDF_MFR_DEF_GPD_CMD_E           = 190,
+    EMBER_ZCL_GP_GPDF_MFR_DEF_GPD_CMD_F           = 191,
+    EMBER_ZCL_GP_GPDF_COMMISSIONING               = 224,
+    EMBER_ZCL_GP_GPDF_DECOMMISSIONING             = 225,
+    EMBER_ZCL_GP_GPDF_SUCCESS                     = 226,
+    EMBER_ZCL_GP_GPDF_CHANNEL_REQUEST             = 227,
+    EMBER_ZCL_GP_GPDF_APPLICATION_DESCRIPTION     = 228,
+    EMBER_ZCL_GP_GPDF_COMMISSIONING_REPLY         = 240,
+    EMBER_ZCL_GP_GPDF_WRITE_ATTRIBUTES            = 241,
+    EMBER_ZCL_GP_GPDF_READ_ATTRIBUTES             = 242,
+    EMBER_ZCL_GP_GPDF_CHANNEL_CONFIGURATION       = 243,
+    EMBER_ZCL_GP_GPDF_ZCL_TUNNELING               = 246,
+} EmberAfGpGpdf;
+
+// Enum for GpPairingConfigurationAction
+typedef enum
+{
+    EMBER_ZCL_GP_PAIRING_CONFIGURATION_ACTION_NO_ACTION                = 0,
+    EMBER_ZCL_GP_PAIRING_CONFIGURATION_ACTION_EXTEND_SINK_TABLE_ENTRY  = 1,
+    EMBER_ZCL_GP_PAIRING_CONFIGURATION_ACTION_REPLACE_SINK_TABLE_ENTRY = 2,
+    EMBER_ZCL_GP_PAIRING_CONFIGURATION_ACTION_REMOVE_A_PAIRING         = 3,
+    EMBER_ZCL_GP_PAIRING_CONFIGURATION_ACTION_REMOVE_GPD               = 4,
+    EMBER_ZCL_GP_PAIRING_CONFIGURATION_ACTION_APPLICATION_DESCRIPTION  = 5,
+} EmberAfGpPairingConfigurationAction;
+
+// Enum for GpPairingConfigurationOptionCommunicationMode
+typedef enum
+{
+    EMBER_ZCL_GP_PAIRING_CONFIGURATION_OPTION_COMMUNICATION_MODE_UNICAST_FORWARDING                       = 0,
+    EMBER_ZCL_GP_PAIRING_CONFIGURATION_OPTION_COMMUNICATION_MODE_GROUPCAST_FORWARDING_TO_D_GROUP_ID       = 8,
+    EMBER_ZCL_GP_PAIRING_CONFIGURATION_OPTION_COMMUNICATION_MODE_GROUPCAST_FORWARDING_TO_PRE_COMMISSIONED = 16,
+    EMBER_ZCL_GP_PAIRING_CONFIGURATION_OPTION_COMMUNICATION_MODE_UNICAST_FORWARDING_LIGHTWEIGHT           = 24,
+} EmberAfGpPairingConfigurationOptionCommunicationMode;
+
+// Enum for GpPairingOptionsCommunicationMode
+typedef enum
+{
+    EMBER_ZCL_GP_PAIRING_OPTIONS_COMMUNICATION_MODE_FULL_UNICAST_FORWARDING               = 0,
+    EMBER_ZCL_GP_PAIRING_OPTIONS_COMMUNICATION_MODE_GROUPCAST_FORWARDING_TO_D_GROUP_ID    = 1,
+    EMBER_ZCL_GP_PAIRING_OPTIONS_COMMUNICATION_MODE_GROUPCAST_FORWARDING_TO_PRE_COMM_UNIT = 16,
+    EMBER_ZCL_GP_PAIRING_OPTIONS_COMMUNICATION_MODE_UNICAST_FORWARDING_BY_PROX_SUPPORT    = 17,
+} EmberAfGpPairingOptionsCommunicationMode;
+
+// Enum for GpProxyTableRequestOptionsRequestType
+typedef enum
+{
+    EMBER_ZCL_GP_PROXY_TABLE_REQUEST_OPTIONS_REQUEST_TYPE_BY_GPD_ID = 0,
+    EMBER_ZCL_GP_PROXY_TABLE_REQUEST_OPTIONS_REQUEST_TYPE_BY_INDEX  = 1,
+} EmberAfGpProxyTableRequestOptionsRequestType;
+
+// Enum for GpProxyTableResponseStatus
+typedef enum
+{
+    EMBER_ZCL_GP_PROXY_TABLE_RESPONSE_STATUS_SUCCESS   = 0,
+    EMBER_ZCL_GP_PROXY_TABLE_RESPONSE_STATUS_NOT_FOUND = 139,
+} EmberAfGpProxyTableResponseStatus;
+
+// Enum for GpSecurityKeyType
+typedef enum
+{
+    EMBER_ZCL_GP_SECURITY_KEY_TYPE_NONE                       = 0,
+    EMBER_ZCL_GP_SECURITY_KEY_TYPE_ZIGBEE_NETWORK_KEY         = 1,
+    EMBER_ZCL_GP_SECURITY_KEY_TYPE_GPD_GROUP_KEY              = 2,
+    EMBER_ZCL_GP_SECURITY_KEY_TYPE_NETWORK_DERIVED_GROUP_KEY  = 3,
+    EMBER_ZCL_GP_SECURITY_KEY_TYPE_INDIVIDIGUAL_GPD_KEY       = 4,
+    EMBER_ZCL_GP_SECURITY_KEY_TYPE_DERIVED_INDIVIDUAL_GPD_KEY = 7,
+} EmberAfGpSecurityKeyType;
+
+// Enum for GpSinkTableRequestOptions
+typedef enum
+{
+    EMBER_ZCL_GP_SINK_TABLE_REQUEST_OPTIONS_REQUEST_TABLE_ENTRIES_BY_GPD_ID = 0,
+    EMBER_ZCL_GP_SINK_TABLE_REQUEST_OPTIONS_REQUEST_TABLE_ENTRIES_BY_INDEX  = 1,
+} EmberAfGpSinkTableRequestOptions;
+
+// Enum for GpSinkTableResponseStatus
+typedef enum
+{
+    EMBER_ZCL_GP_SINK_TABLE_RESPONSE_STATUS_SUCCESS   = 0,
+    EMBER_ZCL_GP_SINK_TABLE_RESPONSE_STATUS_NOT_FOUND = 139,
+} EmberAfGpSinkTableResponseStatus;
+
+// Enum for GpTranslationTableResponseStatus
+typedef enum
+{
+    EMBER_ZCL_GP_TRANSLATION_TABLE_RESPONSE_STATUS_SUCCESS   = 0,
+    EMBER_ZCL_GP_TRANSLATION_TABLE_RESPONSE_STATUS_NOT_FOUND = 139,
+} EmberAfGpTranslationTableResponseStatus;
+
+// Enum for GpTranslationTableUpdateAction
+typedef enum
+{
+    EMBER_ZCL_GP_TRANSLATION_TABLE_UPDATE_ACTION_ADD_TRANSLATION_TABLE_ENTRY     = 0,
+    EMBER_ZCL_GP_TRANSLATION_TABLE_UPDATE_ACTION_REPLACE_TRANSLATION_TABLE_ENTRY = 8,
+    EMBER_ZCL_GP_TRANSLATION_TABLE_UPDATE_ACTION_REMOVE_TRANSLATION_TABLE_ENTRY  = 16,
+    EMBER_ZCL_GP_TRANSLATION_TABLE_UPDATE_ACTION_RESERVED                        = 24,
+} EmberAfGpTranslationTableUpdateAction;
+
+// Enum for HeatAndCoolingSpecificAlarmGroups
+typedef enum
+{
+    EMBER_ZCL_HEAT_AND_COOLING_SPECIFIC_ALARM_GROUPS_INLET_TEMPERATURE_SENSOR_FAULT  = 80,
+    EMBER_ZCL_HEAT_AND_COOLING_SPECIFIC_ALARM_GROUPS_OUTLET_TEMPERATURE_SENSOR_FAULT = 81,
+} EmberAfHeatAndCoolingSpecificAlarmGroups;
+
+// Enum for HueDirection
+typedef enum
+{
+    EMBER_ZCL_HUE_DIRECTION_SHORTEST_DISTANCE = 0,
+    EMBER_ZCL_HUE_DIRECTION_LONGEST_DISTANCE  = 1,
+    EMBER_ZCL_HUE_DIRECTION_UP                = 2,
+    EMBER_ZCL_HUE_DIRECTION_DOWN              = 3,
+} EmberAfHueDirection;
+
+// Enum for HueMoveMode
+typedef enum
+{
+    EMBER_ZCL_HUE_MOVE_MODE_STOP = 0,
+    EMBER_ZCL_HUE_MOVE_MODE_UP   = 1,
+    EMBER_ZCL_HUE_MOVE_MODE_DOWN = 3,
+} EmberAfHueMoveMode;
+
+// Enum for HueStepMode
+typedef enum
+{
+    EMBER_ZCL_HUE_STEP_MODE_UP   = 1,
+    EMBER_ZCL_HUE_STEP_MODE_DOWN = 3,
+} EmberAfHueStepMode;
+
+// Enum for IasAceAlarmStatus
+typedef enum
+{
+    EMBER_ZCL_IAS_ACE_ALARM_STATUS_NO_ALARM        = 0,
+    EMBER_ZCL_IAS_ACE_ALARM_STATUS_BURGLAR         = 1,
+    EMBER_ZCL_IAS_ACE_ALARM_STATUS_FIRE            = 2,
+    EMBER_ZCL_IAS_ACE_ALARM_STATUS_EMERGENCY       = 3,
+    EMBER_ZCL_IAS_ACE_ALARM_STATUS_POLICE_PANIC    = 4,
+    EMBER_ZCL_IAS_ACE_ALARM_STATUS_FIRE_PANIC      = 5,
+    EMBER_ZCL_IAS_ACE_ALARM_STATUS_EMERGENCY_PANIC = 6,
+} EmberAfIasAceAlarmStatus;
+
+// Enum for IasAceArmMode
+typedef enum
+{
+    EMBER_ZCL_IAS_ACE_ARM_MODE_DISARM                     = 0,
+    EMBER_ZCL_IAS_ACE_ARM_MODE_ARM_DAY_HOME_ZONES_ONLY    = 1,
+    EMBER_ZCL_IAS_ACE_ARM_MODE_ARM_NIGHT_SLEEP_ZONES_ONLY = 2,
+    EMBER_ZCL_IAS_ACE_ARM_MODE_ARM_ALL_ZONES              = 3,
+} EmberAfIasAceArmMode;
+
+// Enum for IasAceArmNotification
+typedef enum
+{
+    EMBER_ZCL_IAS_ACE_ARM_NOTIFICATION_ALL_ZONES_DISARMED           = 0,
+    EMBER_ZCL_IAS_ACE_ARM_NOTIFICATION_ONLY_DAY_HOME_ZONES_ARMED    = 1,
+    EMBER_ZCL_IAS_ACE_ARM_NOTIFICATION_ONLY_NIGHT_SLEEP_ZONES_ARMED = 2,
+    EMBER_ZCL_IAS_ACE_ARM_NOTIFICATION_ALL_ZONES_ARMED              = 3,
+    EMBER_ZCL_IAS_ACE_ARM_NOTIFICATION_INVALID_ARM_DISARM_CODE      = 4,
+    EMBER_ZCL_IAS_ACE_ARM_NOTIFICATION_NOT_READY_TO_ARM             = 5,
+    EMBER_ZCL_IAS_ACE_ARM_NOTIFICATION_ALREADY_DISARMED             = 6,
+} EmberAfIasAceArmNotification;
+
+// Enum for IasAceAudibleNotification
+typedef enum
+{
+    EMBER_ZCL_IAS_ACE_AUDIBLE_NOTIFICATION_MUTE          = 0,
+    EMBER_ZCL_IAS_ACE_AUDIBLE_NOTIFICATION_DEFAULT_SOUND = 1,
+} EmberAfIasAceAudibleNotification;
+
+// Enum for IasAceBypassResult
+typedef enum
+{
+    EMBER_ZCL_IAS_ACE_BYPASS_RESULT_ZONE_BYPASSED           = 0,
+    EMBER_ZCL_IAS_ACE_BYPASS_RESULT_ZONE_NOT_BYPASSED       = 1,
+    EMBER_ZCL_IAS_ACE_BYPASS_RESULT_NOT_ALLOWED             = 2,
+    EMBER_ZCL_IAS_ACE_BYPASS_RESULT_INVALID_ZONE_ID         = 3,
+    EMBER_ZCL_IAS_ACE_BYPASS_RESULT_UNKNOWN_ZONE_ID         = 4,
+    EMBER_ZCL_IAS_ACE_BYPASS_RESULT_INVALID_ARM_DISARM_CODE = 5,
+} EmberAfIasAceBypassResult;
+
+// Enum for IasAcePanelStatus
+typedef enum
+{
+    EMBER_ZCL_IAS_ACE_PANEL_STATUS_PANEL_DISARMED   = 0,
+    EMBER_ZCL_IAS_ACE_PANEL_STATUS_ARMED_STAY       = 1,
+    EMBER_ZCL_IAS_ACE_PANEL_STATUS_ARMED_NIGHT      = 2,
+    EMBER_ZCL_IAS_ACE_PANEL_STATUS_ARMED_AWAY       = 3,
+    EMBER_ZCL_IAS_ACE_PANEL_STATUS_EXIT_DELAY       = 4,
+    EMBER_ZCL_IAS_ACE_PANEL_STATUS_ENTRY_DELAY      = 5,
+    EMBER_ZCL_IAS_ACE_PANEL_STATUS_NOT_READY_TO_ARM = 6,
+    EMBER_ZCL_IAS_ACE_PANEL_STATUS_IN_ALARM         = 7,
+    EMBER_ZCL_IAS_ACE_PANEL_STATUS_ARMING_STAY      = 8,
+    EMBER_ZCL_IAS_ACE_PANEL_STATUS_ARMING_NIGHT     = 9,
+    EMBER_ZCL_IAS_ACE_PANEL_STATUS_ARMING_AWAY      = 10,
+} EmberAfIasAcePanelStatus;
+
+// Enum for IasEnrollResponseCode
+typedef enum
+{
+    EMBER_ZCL_IAS_ENROLL_RESPONSE_CODE_SUCCESS          = 0,
+    EMBER_ZCL_IAS_ENROLL_RESPONSE_CODE_NOT_SUPPORTED    = 1,
+    EMBER_ZCL_IAS_ENROLL_RESPONSE_CODE_NO_ENROLL_PERMIT = 2,
+    EMBER_ZCL_IAS_ENROLL_RESPONSE_CODE_TOO_MANY_ZONES   = 3,
+} EmberAfIasEnrollResponseCode;
+
+// Enum for IasZoneState
+typedef enum
+{
+    EMBER_ZCL_IAS_ZONE_STATE_NOT_ENROLLED = 0,
+    EMBER_ZCL_IAS_ZONE_STATE_ENROLLED     = 1,
+} EmberAfIasZoneState;
+
+// Enum for IasZoneType
+typedef enum
+{
+    EMBER_ZCL_IAS_ZONE_TYPE_STANDARD_CIE              = 0,
+    EMBER_ZCL_IAS_ZONE_TYPE_MOTION_SENSOR             = 13,
+    EMBER_ZCL_IAS_ZONE_TYPE_CONTACT_SWITCH            = 21,
+    EMBER_ZCL_IAS_ZONE_TYPE_FIRE_SENSOR               = 40,
+    EMBER_ZCL_IAS_ZONE_TYPE_WATER_SENSOR              = 42,
+    EMBER_ZCL_IAS_ZONE_TYPE_GAS_SENSOR                = 43,
+    EMBER_ZCL_IAS_ZONE_TYPE_PERSONAL_EMERGENCY_DEVICE = 44,
+    EMBER_ZCL_IAS_ZONE_TYPE_VIBRATION_MOVEMENT_SENSOR = 45,
+    EMBER_ZCL_IAS_ZONE_TYPE_REMOTE_CONTROL            = 271,
+    EMBER_ZCL_IAS_ZONE_TYPE_KEY_FOB                   = 277,
+    EMBER_ZCL_IAS_ZONE_TYPE_KEYPAD                    = 541,
+    EMBER_ZCL_IAS_ZONE_TYPE_STANDARD_WARNING_DEVICE   = 549,
+    EMBER_ZCL_IAS_ZONE_TYPE_GLASS_BREAK_SENSOR        = 550,
+    EMBER_ZCL_IAS_ZONE_TYPE_CARBON_MONOXIDE_SENSOR    = 551,
+    EMBER_ZCL_IAS_ZONE_TYPE_SECURITY_REPEATER         = 553,
+    EMBER_ZCL_IAS_ZONE_TYPE_INVALID_ZONE_TYPE         = 65535,
+} EmberAfIasZoneType;
+
+// Enum for IdentifyEffectIdentifier
+typedef enum
+{
+    EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_BLINK          = 0,
+    EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_BREATHE        = 1,
+    EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_OKAY           = 2,
+    EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_CHANNEL_CHANGE = 11,
+    EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_FINISH_EFFECT  = 254,
+    EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_STOP_EFFECT    = 255,
+} EmberAfIdentifyEffectIdentifier;
+
+// Enum for IdentifyEffectVariant
+typedef enum
+{
+    EMBER_ZCL_IDENTIFY_EFFECT_VARIANT_DEFAULT = 0,
+} EmberAfIdentifyEffectVariant;
+
+// Enum for KeyIndex
+typedef enum
+{
+    EMBER_ZCL_KEY_INDEX_DEVELOPMENT   = 0,
+    EMBER_ZCL_KEY_INDEX_MASTER        = 4,
+    EMBER_ZCL_KEY_INDEX_CERTIFICATION = 15,
+} EmberAfKeyIndex;
+
+// Enum for KeypadLockout
+typedef enum
+{
+    EMBER_ZCL_KEYPAD_LOCKOUT_NO_LOCKOUT          = 0,
+    EMBER_ZCL_KEYPAD_LOCKOUT_LEVEL_ONE_LOCKOUT   = 1,
+    EMBER_ZCL_KEYPAD_LOCKOUT_LEVEL_TWO_LOCKOUT   = 2,
+    EMBER_ZCL_KEYPAD_LOCKOUT_LEVEL_THREE_LOCKOUT = 3,
+    EMBER_ZCL_KEYPAD_LOCKOUT_LEVEL_FOUR_LOCKOUT  = 4,
+    EMBER_ZCL_KEYPAD_LOCKOUT_LEVELFIVE_LOCKOUT   = 5,
+} EmberAfKeypadLockout;
+
+// Enum for LevelControlOptions
+typedef enum
+{
+    EMBER_ZCL_LEVEL_CONTROL_OPTIONS_EXECUTE_IF_OFF             = 1,
+    EMBER_ZCL_LEVEL_CONTROL_OPTIONS_COUPLE_COLOR_TEMP_TO_LEVEL = 2,
+} EmberAfLevelControlOptions;
+
+// Enum for LevelStatus
+typedef enum
+{
+    EMBER_ZCL_LEVEL_STATUS_ON_TARGET    = 0,
+    EMBER_ZCL_LEVEL_STATUS_BELOW_TARGET = 1,
+    EMBER_ZCL_LEVEL_STATUS_ABOVE_TARGET = 2,
+} EmberAfLevelStatus;
+
+// Enum for LocationMethod
+typedef enum
+{
+    EMBER_ZCL_LOCATION_METHOD_LATERATION        = 0,
+    EMBER_ZCL_LOCATION_METHOD_SIGNPOSTING       = 1,
+    EMBER_ZCL_LOCATION_METHOD_RF_FINGERPRINTING = 2,
+    EMBER_ZCL_LOCATION_METHOD_OUT_OF_BAND       = 3,
+} EmberAfLocationMethod;
+
+// Enum for ManufacturerSpecificAlarmGroups
+typedef enum
+{
+    EMBER_ZCL_MANUFACTURER_SPECIFIC_ALARM_GROUPS_MANUFACTURER_SPECIFIC_A = 176,
+    EMBER_ZCL_MANUFACTURER_SPECIFIC_ALARM_GROUPS_MANUFACTURER_SPECIFIC_B = 177,
+    EMBER_ZCL_MANUFACTURER_SPECIFIC_ALARM_GROUPS_MANUFACTURER_SPECIFIC_C = 178,
+    EMBER_ZCL_MANUFACTURER_SPECIFIC_ALARM_GROUPS_MANUFACTURER_SPECIFIC_D = 179,
+    EMBER_ZCL_MANUFACTURER_SPECIFIC_ALARM_GROUPS_MANUFACTURER_SPECIFIC_E = 180,
+    EMBER_ZCL_MANUFACTURER_SPECIFIC_ALARM_GROUPS_MANUFACTURER_SPECIFIC_F = 181,
+    EMBER_ZCL_MANUFACTURER_SPECIFIC_ALARM_GROUPS_MANUFACTURER_SPECIFIC_G = 182,
+    EMBER_ZCL_MANUFACTURER_SPECIFIC_ALARM_GROUPS_MANUFACTURER_SPECIFIC_H = 183,
+    EMBER_ZCL_MANUFACTURER_SPECIFIC_ALARM_GROUPS_MANUFACTURER_SPECIFIC_I = 184,
+} EmberAfManufacturerSpecificAlarmGroups;
+
+// Enum for MeasurementLightSensorType
+typedef enum
+{
+    EMBER_ZCL_MEASUREMENT_LIGHT_SENSOR_TYPE_PHOTODIODE = 0,
+    EMBER_ZCL_MEASUREMENT_LIGHT_SENSOR_TYPE_CMOS       = 1,
+} EmberAfMeasurementLightSensorType;
+
+// Enum for MessagingControlConfirmation
+typedef enum
+{
+    EMBER_ZCL_MESSAGING_CONTROL_CONFIRMATION_NOT_REQUIRED = 0,
+    EMBER_ZCL_MESSAGING_CONTROL_CONFIRMATION_REQUIRED     = 128,
+} EmberAfMessagingControlConfirmation;
+
+// Enum for MessagingControlEnhancedConfirmation
+typedef enum
+{
+    EMBER_ZCL_MESSAGING_CONTROL_ENHANCED_CONFIRMATION_NOT_REQUIRED = 0,
+    EMBER_ZCL_MESSAGING_CONTROL_ENHANCED_CONFIRMATION_REQUIRED     = 32,
+} EmberAfMessagingControlEnhancedConfirmation;
+
+// Enum for MessagingControlImportance
+typedef enum
+{
+    EMBER_ZCL_MESSAGING_CONTROL_IMPORTANCE_LOW      = 0,
+    EMBER_ZCL_MESSAGING_CONTROL_IMPORTANCE_MEDIUM   = 4,
+    EMBER_ZCL_MESSAGING_CONTROL_IMPORTANCE_HIGH     = 8,
+    EMBER_ZCL_MESSAGING_CONTROL_IMPORTANCE_CRITICAL = 12,
+} EmberAfMessagingControlImportance;
+
+// Enum for MessagingControlTransmission
+typedef enum
+{
+    EMBER_ZCL_MESSAGING_CONTROL_TRANSMISSION_NORMAL               = 0,
+    EMBER_ZCL_MESSAGING_CONTROL_TRANSMISSION_NORMAL_AND_ANONYMOUS = 1,
+    EMBER_ZCL_MESSAGING_CONTROL_TRANSMISSION_ANONYMOUS            = 2,
+    EMBER_ZCL_MESSAGING_CONTROL_TRANSMISSION_RESERVED             = 3,
+} EmberAfMessagingControlTransmission;
+
+// Enum for MeterDeviceType
+typedef enum
+{
+    EMBER_ZCL_METER_DEVICE_TYPE_ELECTRIC_METER          = 0,
+    EMBER_ZCL_METER_DEVICE_TYPE_GAS_METER               = 1,
+    EMBER_ZCL_METER_DEVICE_TYPE_WATER_METER             = 2,
+    EMBER_ZCL_METER_DEVICE_TYPE_THERMAL_METER           = 3,
+    EMBER_ZCL_METER_DEVICE_TYPE_PRESSURE_METER          = 4,
+    EMBER_ZCL_METER_DEVICE_TYPE_HEAT_METER              = 5,
+    EMBER_ZCL_METER_DEVICE_TYPE_COOLING_METER           = 6,
+    EMBER_ZCL_METER_DEVICE_TYPE_MIRRORED_GAS_METER      = 128,
+    EMBER_ZCL_METER_DEVICE_TYPE_MIRRORED_WATER_METER    = 129,
+    EMBER_ZCL_METER_DEVICE_TYPE_MIRRORED_THERMAL_METER  = 130,
+    EMBER_ZCL_METER_DEVICE_TYPE_MIRRORED_PRESSURE_METER = 131,
+    EMBER_ZCL_METER_DEVICE_TYPE_MIRRORED_HEAT_METER     = 132,
+    EMBER_ZCL_METER_DEVICE_TYPE_MIRRORED_COOLING_METER  = 133,
+    EMBER_ZCL_METER_DEVICE_TYPE_UNDEFINED_MIRROR_METER  = 254,
+} EmberAfMeterDeviceType;
+
+// Enum for MeterTypeId
+typedef enum
+{
+    EMBER_ZCL_METER_TYPE_ID_UTILITY_PRIMARY_METER    = 0,
+    EMBER_ZCL_METER_TYPE_ID_UTILITY_PRODUCTION_METER = 1,
+    EMBER_ZCL_METER_TYPE_ID_UTILITY_SECONDARY_METER  = 2,
+    EMBER_ZCL_METER_TYPE_ID_PRIVATE_PRIMARY_METER    = 256,
+    EMBER_ZCL_METER_TYPE_ID_PRIVATE_PRODUCTION_METER = 257,
+    EMBER_ZCL_METER_TYPE_ID_PRIVATE_SECONDARY_METERS = 258,
+    EMBER_ZCL_METER_TYPE_ID_GENERIC_METER            = 272,
+} EmberAfMeterTypeId;
+
+// Enum for MeteringAlarmCode
+typedef enum
+{
+    EMBER_ZCL_METERING_ALARM_CODE_CHECK_METER                                  = 0,
+    EMBER_ZCL_METERING_ALARM_CODE_LOW_BATTERY                                  = 1,
+    EMBER_ZCL_METERING_ALARM_CODE_TAMPER_DETECT                                = 2,
+    EMBER_ZCL_METERING_ALARM_CODE_POWER_FAILURE_PIPE_EMPTY_TEMPERATURE_SENSOR  = 3,
+    EMBER_ZCL_METERING_ALARM_CODE_POWER_QUALITY_LOW_PRESSURE_BURST_DETECT      = 4,
+    EMBER_ZCL_METERING_ALARM_CODE_LEAK_DETECT                                  = 5,
+    EMBER_ZCL_METERING_ALARM_CODE_SERVICE_DISCONNECT                           = 6,
+    EMBER_ZCL_METERING_ALARM_CODE_REVERSE_FLOW_FLOW_SENSOR                     = 7,
+    EMBER_ZCL_METERING_ALARM_CODE_METER_COVER_REMOVED                          = 8,
+    EMBER_ZCL_METERING_ALARM_CODE_METER_COVER_CLOSED                           = 9,
+    EMBER_ZCL_METERING_ALARM_CODE_STRONG_MAGNETIC_FIELD                        = 10,
+    EMBER_ZCL_METERING_ALARM_CODE_NO_STRONG_MAGNETIC_FIELD                     = 11,
+    EMBER_ZCL_METERING_ALARM_CODE_BATTERY_FAILURE                              = 12,
+    EMBER_ZCL_METERING_ALARM_CODE_PROGRAM_MEMORY_ERROR                         = 13,
+    EMBER_ZCL_METERING_ALARM_CODE_RAM_ERROR                                    = 14,
+    EMBER_ZCL_METERING_ALARM_CODE_NV_MEMORY_ERROR                              = 15,
+    EMBER_ZCL_METERING_ALARM_CODE_LOW_VOLTAGE_L1                               = 16,
+    EMBER_ZCL_METERING_ALARM_CODE_HIGH_VOLTAGE_L1                              = 17,
+    EMBER_ZCL_METERING_ALARM_CODE_LOW_VOLTAGE_L2                               = 18,
+    EMBER_ZCL_METERING_ALARM_CODE_HIGH_VOLTAGE_L2                              = 19,
+    EMBER_ZCL_METERING_ALARM_CODE_LOW_VOLTAGE_L3                               = 20,
+    EMBER_ZCL_METERING_ALARM_CODE_HIGH_VOLTAGE_L3                              = 21,
+    EMBER_ZCL_METERING_ALARM_CODE_OVER_CURRENT_L1                              = 22,
+    EMBER_ZCL_METERING_ALARM_CODE_OVER_CURRENT_L2                              = 23,
+    EMBER_ZCL_METERING_ALARM_CODE_OVER_CURRENT_L3                              = 24,
+    EMBER_ZCL_METERING_ALARM_CODE_FREQUENCY_TOO_LOW_L1                         = 25,
+    EMBER_ZCL_METERING_ALARM_CODE_FREQUENCY_TOO_HIGH_L1                        = 26,
+    EMBER_ZCL_METERING_ALARM_CODE_FREQUENCY_TOO_LOW_L2                         = 27,
+    EMBER_ZCL_METERING_ALARM_CODE_FREQUENCY_TOO_HIGH_L2                        = 28,
+    EMBER_ZCL_METERING_ALARM_CODE_FREQUENCY_TOO_LOW_L3                         = 29,
+    EMBER_ZCL_METERING_ALARM_CODE_FREQUENCY_TOO_HIGH_L3                        = 30,
+    EMBER_ZCL_METERING_ALARM_CODE_GROUND_FAULT                                 = 31,
+    EMBER_ZCL_METERING_ALARM_CODE_ELECTRIC_TAMPER_DETECT                       = 32,
+    EMBER_ZCL_METERING_ALARM_CODE_INCORRECT_POLARITY                           = 33,
+    EMBER_ZCL_METERING_ALARM_CODE_CURRENT_NO_VOLTAGE                           = 34,
+    EMBER_ZCL_METERING_ALARM_CODE_UNDER_VOLTAGE                                = 35,
+    EMBER_ZCL_METERING_ALARM_CODE_OVER_VOLTAGE                                 = 36,
+    EMBER_ZCL_METERING_ALARM_CODE_NORMAL_VOLTAGE                               = 37,
+    EMBER_ZCL_METERING_ALARM_CODE_PF_BELOW_THRESHOLD                           = 38,
+    EMBER_ZCL_METERING_ALARM_CODE_PF_ABOVE_THRESHOLD                           = 39,
+    EMBER_ZCL_METERING_ALARM_CODE_TERMINAL_COVER_REMOVED                       = 40,
+    EMBER_ZCL_METERING_ALARM_CODE_TERMINAL_COVER_CLOSED                        = 41,
+    EMBER_ZCL_METERING_ALARM_CODE_BURST_DETECT                                 = 48,
+    EMBER_ZCL_METERING_ALARM_CODE_PRESSURE_TOO_LOW                             = 49,
+    EMBER_ZCL_METERING_ALARM_CODE_PRESSURE_TOO_HIGH                            = 50,
+    EMBER_ZCL_METERING_ALARM_CODE_FLOW_SENSOR_COMMUNICATION_ERROR              = 51,
+    EMBER_ZCL_METERING_ALARM_CODE_FLOW_SENSOR_MEASUREMENT_FAULT                = 52,
+    EMBER_ZCL_METERING_ALARM_CODE_FLOW_SENSOR_REVERSE_FLOW                     = 53,
+    EMBER_ZCL_METERING_ALARM_CODE_FLOW_SENSOR_AIR_DETECT                       = 54,
+    EMBER_ZCL_METERING_ALARM_CODE_PIPE_EMPTY                                   = 55,
+    EMBER_ZCL_METERING_ALARM_CODE_INLET_TEMPERATURE_SENSOR_FAULT               = 80,
+    EMBER_ZCL_METERING_ALARM_CODE_OUTLET_TEMPERATURE_SENSOR_FAULT              = 81,
+    EMBER_ZCL_METERING_ALARM_CODE_TILT_TAMPER                                  = 96,
+    EMBER_ZCL_METERING_ALARM_CODE_BATTERY_COVER_REMOVED                        = 97,
+    EMBER_ZCL_METERING_ALARM_CODE_BATTERY_COVER_CLOSED                         = 98,
+    EMBER_ZCL_METERING_ALARM_CODE_EXCESS_FLOW                                  = 99,
+    EMBER_ZCL_METERING_ALARM_CODE_TILT_TAMPER_ENDED                            = 100,
+    EMBER_ZCL_METERING_ALARM_CODE_MEASUREMENT_SYSTEM_ERROR                     = 112,
+    EMBER_ZCL_METERING_ALARM_CODE_WATCHDOG_ERROR                               = 113,
+    EMBER_ZCL_METERING_ALARM_CODE_SUPPLY_DISCONNECT_FAILURE                    = 114,
+    EMBER_ZCL_METERING_ALARM_CODE_SUPPLY_CONNECT_FAILURE                       = 115,
+    EMBER_ZCL_METERING_ALARM_CODE_MEASURMENT_SOFTWARE_CHANGED                  = 116,
+    EMBER_ZCL_METERING_ALARM_CODE_DST_ENABLED                                  = 117,
+    EMBER_ZCL_METERING_ALARM_CODE_DST_DISABLED                                 = 118,
+    EMBER_ZCL_METERING_ALARM_CODE_CLOCK_ADJ_BACKWARD                           = 119,
+    EMBER_ZCL_METERING_ALARM_CODE_CLOCK_ADJ_FORWARD                            = 120,
+    EMBER_ZCL_METERING_ALARM_CODE_CLOCK_INVALID                                = 121,
+    EMBER_ZCL_METERING_ALARM_CODE_COMMUNICATION_ERROR_HAN                      = 122,
+    EMBER_ZCL_METERING_ALARM_CODE_COMMUNICATION_OK_H_AN                        = 123,
+    EMBER_ZCL_METERING_ALARM_CODE_METER_FRAUD_ATTEMPT                          = 124,
+    EMBER_ZCL_METERING_ALARM_CODE_POWER_LOSS                                   = 125,
+    EMBER_ZCL_METERING_ALARM_CODE_UNUSUAL_HAN_TRAFFIC                          = 126,
+    EMBER_ZCL_METERING_ALARM_CODE_UNEXPECTED_CLOCK_CHANGE                      = 127,
+    EMBER_ZCL_METERING_ALARM_CODE_COMMS_USING_UNAUTHENTICATED_COMPONENT        = 128,
+    EMBER_ZCL_METERING_ALARM_CODE_ERROR_REG_CLEAR                              = 129,
+    EMBER_ZCL_METERING_ALARM_CODE_ALARM_REG_CLEAR                              = 130,
+    EMBER_ZCL_METERING_ALARM_CODE_UNEXPECTED_HW_RESET                          = 131,
+    EMBER_ZCL_METERING_ALARM_CODE_UNEXPECTED_PROGRAM_EXECUTION                 = 132,
+    EMBER_ZCL_METERING_ALARM_CODE_EVENT_LOG_CLEARED                            = 133,
+    EMBER_ZCL_METERING_ALARM_CODE_LIMIT_THRESHOLD_EXCEEDED                     = 134,
+    EMBER_ZCL_METERING_ALARM_CODE_LIMIT_THRESHOLD_OK                           = 135,
+    EMBER_ZCL_METERING_ALARM_CODE_LIMIT_THRESHOLD_CHANGED                      = 136,
+    EMBER_ZCL_METERING_ALARM_CODE_MAXIMUM_DEMAND_EXCEEDED                      = 137,
+    EMBER_ZCL_METERING_ALARM_CODE_PROFILE_CLEARED                              = 138,
+    EMBER_ZCL_METERING_ALARM_CODE_SAMPLING_BUFFERCLEARED                       = 139,
+    EMBER_ZCL_METERING_ALARM_CODE_BATTERY_WARNING                              = 140,
+    EMBER_ZCL_METERING_ALARM_CODE_WRONG_SIGNATURE                              = 141,
+    EMBER_ZCL_METERING_ALARM_CODE_NO_SIGNATURE                                 = 142,
+    EMBER_ZCL_METERING_ALARM_CODE_UNAUTHORISED_ACTIONFROM_HAN                  = 143,
+    EMBER_ZCL_METERING_ALARM_CODE_FAST_POLLING_START                           = 144,
+    EMBER_ZCL_METERING_ALARM_CODE_FAST_POLLING_END                             = 145,
+    EMBER_ZCL_METERING_ALARM_CODE_METER_REPORTING_INTERVAL_CHANGED             = 146,
+    EMBER_ZCL_METERING_ALARM_CODE_DISCONNECT_DUETO_LOAD_LIMIT                  = 147,
+    EMBER_ZCL_METERING_ALARM_CODE_METER_SUPPLY_STATUS_REGISTER_CHANGED         = 148,
+    EMBER_ZCL_METERING_ALARM_CODE_METER_ALARM_STATUS_REGISTER_CHANGED          = 149,
+    EMBER_ZCL_METERING_ALARM_CODE_EXTENDED_METER_ALARM_STATUS_REGISTER_CHANGED = 150,
+    EMBER_ZCL_METERING_ALARM_CODE_MANUFACTURER_SPECIFIC_A                      = 176,
+    EMBER_ZCL_METERING_ALARM_CODE_MANUFACTURER_SPECIFIC_B                      = 177,
+    EMBER_ZCL_METERING_ALARM_CODE_MANUFACTURER_SPECIFIC_C                      = 178,
+    EMBER_ZCL_METERING_ALARM_CODE_MANUFACTURER_SPECIFIC_D                      = 179,
+    EMBER_ZCL_METERING_ALARM_CODE_MANUFACTURER_SPECIFIC_E                      = 180,
+    EMBER_ZCL_METERING_ALARM_CODE_MANUFACTURER_SPECIFIC_F                      = 181,
+    EMBER_ZCL_METERING_ALARM_CODE_MANUFACTURER_SPECIFIC_G                      = 182,
+    EMBER_ZCL_METERING_ALARM_CODE_MANUFACTURER_SPECIFIC_H                      = 183,
+    EMBER_ZCL_METERING_ALARM_CODE_MANUFACTURER_SPECIFIC_I                      = 184,
+} EmberAfMeteringAlarmCode;
+
+// Enum for MeteringBlockEnumerations
+typedef enum
+{
+    EMBER_ZCL_METERING_BLOCK_ENUMERATIONS_NO_BLOCKS_IN_USE = 0,
+    EMBER_ZCL_METERING_BLOCK_ENUMERATIONS_BLOCK1           = 1,
+    EMBER_ZCL_METERING_BLOCK_ENUMERATIONS_BLOCK2           = 2,
+    EMBER_ZCL_METERING_BLOCK_ENUMERATIONS_BLOCK3           = 3,
+    EMBER_ZCL_METERING_BLOCK_ENUMERATIONS_BLOCK4           = 4,
+    EMBER_ZCL_METERING_BLOCK_ENUMERATIONS_BLOCK5           = 5,
+    EMBER_ZCL_METERING_BLOCK_ENUMERATIONS_BLOCK6           = 6,
+    EMBER_ZCL_METERING_BLOCK_ENUMERATIONS_BLOCK7           = 7,
+    EMBER_ZCL_METERING_BLOCK_ENUMERATIONS_BLOCK8           = 8,
+    EMBER_ZCL_METERING_BLOCK_ENUMERATIONS_BLOCK9           = 9,
+    EMBER_ZCL_METERING_BLOCK_ENUMERATIONS_BLOCK10          = 10,
+    EMBER_ZCL_METERING_BLOCK_ENUMERATIONS_BLOCK11          = 11,
+    EMBER_ZCL_METERING_BLOCK_ENUMERATIONS_BLOCK12          = 12,
+    EMBER_ZCL_METERING_BLOCK_ENUMERATIONS_BLOCK13          = 13,
+    EMBER_ZCL_METERING_BLOCK_ENUMERATIONS_BLOCK14          = 14,
+    EMBER_ZCL_METERING_BLOCK_ENUMERATIONS_BLOCK15          = 15,
+    EMBER_ZCL_METERING_BLOCK_ENUMERATIONS_BLOCK16          = 16,
+} EmberAfMeteringBlockEnumerations;
+
+// Enum for MeteringConsumptionStatus
+typedef enum
+{
+    EMBER_ZCL_METERING_CONSUMPTION_STATUS_LOW_ENERGY_USAGE    = 0,
+    EMBER_ZCL_METERING_CONSUMPTION_STATUS_MEDIUM_ENERGY_USAGE = 1,
+    EMBER_ZCL_METERING_CONSUMPTION_STATUS_HIGH_ENERGY_USAGE   = 2,
+} EmberAfMeteringConsumptionStatus;
+
+// Enum for MeteringDeviceType
+typedef enum
+{
+    EMBER_ZCL_METERING_DEVICE_TYPE_ELECTRIC_METERING                            = 0,
+    EMBER_ZCL_METERING_DEVICE_TYPE_GAS_METERING                                 = 1,
+    EMBER_ZCL_METERING_DEVICE_TYPE_WATER_METERING                               = 2,
+    EMBER_ZCL_METERING_DEVICE_TYPE_THERMAL_METERING                             = 3,
+    EMBER_ZCL_METERING_DEVICE_TYPE_PRESSURE_METERING                            = 4,
+    EMBER_ZCL_METERING_DEVICE_TYPE_HEAT_METERING                                = 5,
+    EMBER_ZCL_METERING_DEVICE_TYPE_COOLING_METERING                             = 6,
+    EMBER_ZCL_METERING_DEVICE_TYPE_ELECTRIC_VEHICLE_CHARGING_METERING           = 7,
+    EMBER_ZCL_METERING_DEVICE_TYPE_PV_GENERATION_METERING                       = 8,
+    EMBER_ZCL_METERING_DEVICE_TYPE_WIND_TURBINE_GENERATION_METERING             = 9,
+    EMBER_ZCL_METERING_DEVICE_TYPE_WATER_TURBINE_GENERATION_METERING            = 10,
+    EMBER_ZCL_METERING_DEVICE_TYPE_MICRO_GENERATION_METERING                    = 11,
+    EMBER_ZCL_METERING_DEVICE_TYPE_SOLAR_HOT_WATER_GENERATION_METERING          = 12,
+    EMBER_ZCL_METERING_DEVICE_TYPE_ELECTRIC_METERING_ELEMENT1                   = 13,
+    EMBER_ZCL_METERING_DEVICE_TYPE_ELECTRIC_METERING_ELEMENT2                   = 14,
+    EMBER_ZCL_METERING_DEVICE_TYPE_ELECTRIC_METERING_ELEMENT3                   = 15,
+    EMBER_ZCL_METERING_DEVICE_TYPE_MIRRORED_ELECTRIC_METERING                   = 127,
+    EMBER_ZCL_METERING_DEVICE_TYPE_MIRRORED_GAS_METERING                        = 128,
+    EMBER_ZCL_METERING_DEVICE_TYPE_MIRRORED_WATER_METERING                      = 129,
+    EMBER_ZCL_METERING_DEVICE_TYPE_MIRRORED_THERMAL_METERING                    = 130,
+    EMBER_ZCL_METERING_DEVICE_TYPE_MIRRORED_PRESSURE_METERING                   = 131,
+    EMBER_ZCL_METERING_DEVICE_TYPE_MIRRORED_HEAT_METERING                       = 132,
+    EMBER_ZCL_METERING_DEVICE_TYPE_MIRRORED_COOLING_METERING                    = 133,
+    EMBER_ZCL_METERING_DEVICE_TYPE_MIRRORED_ELECTRIC_VEHICLE_CHARGING_METERING  = 134,
+    EMBER_ZCL_METERING_DEVICE_TYPE_MIRRORED_PV_GENERATION_METERING              = 135,
+    EMBER_ZCL_METERING_DEVICE_TYPE_MIRRORED_WIND_TURBINE_GENERATION_METERING    = 136,
+    EMBER_ZCL_METERING_DEVICE_TYPE_MIRRORED_WATER_TURBINE_GENERATION_METERING   = 137,
+    EMBER_ZCL_METERING_DEVICE_TYPE_MIRRORED_MICRO_GENERATION_METERING           = 138,
+    EMBER_ZCL_METERING_DEVICE_TYPE_MIRRORED_SOLAR_HOT_WATER_GENERATION_METERING = 139,
+    EMBER_ZCL_METERING_DEVICE_TYPE_MIRRORED_ELECTRIC_METERING_ELEMENT1          = 140,
+    EMBER_ZCL_METERING_DEVICE_TYPE_MIRRORED_ELECTRIC_METERING_ELEMENT2          = 141,
+    EMBER_ZCL_METERING_DEVICE_TYPE_MIRRORED_ELECTRIC_METERING_ELEMENT3          = 142,
+    EMBER_ZCL_METERING_DEVICE_TYPE_UNDEFINED_MIRROR_METER                       = 254,
+} EmberAfMeteringDeviceType;
+
+// Enum for MeteringSupplyStatus
+typedef enum
+{
+    EMBER_ZCL_METERING_SUPPLY_STATUS_SUPPLY_OFF       = 0,
+    EMBER_ZCL_METERING_SUPPLY_STATUS_SUPPLY_OFF_ARMED = 1,
+    EMBER_ZCL_METERING_SUPPLY_STATUS_SUPPLY_ON        = 2,
+} EmberAfMeteringSupplyStatus;
+
+// Enum for MeteringTemperatureUnitOfMeasure
+typedef enum
+{
+    EMBER_ZCL_METERING_TEMPERATURE_UNIT_OF_MEASURE_KELVIN         = 0,
+    EMBER_ZCL_METERING_TEMPERATURE_UNIT_OF_MEASURE_CELSIUS        = 1,
+    EMBER_ZCL_METERING_TEMPERATURE_UNIT_OF_MEASURE_FAHRENHEIT     = 2,
+    EMBER_ZCL_METERING_TEMPERATURE_UNIT_OF_MEASURE_KELVIN_BCD     = 128,
+    EMBER_ZCL_METERING_TEMPERATURE_UNIT_OF_MEASURE_CELSIUS_BCD    = 129,
+    EMBER_ZCL_METERING_TEMPERATURE_UNIT_OF_MEASURE_FAHRENHEIT_BCD = 130,
+} EmberAfMeteringTemperatureUnitOfMeasure;
+
+// Enum for MoveMode
+typedef enum
+{
+    EMBER_ZCL_MOVE_MODE_UP   = 0,
+    EMBER_ZCL_MOVE_MODE_DOWN = 1,
+} EmberAfMoveMode;
+
+// Enum for NotificationScheme
+typedef enum
+{
+    EMBER_ZCL_NOTIFICATION_SCHEME_NO_NOTIFICATION_SCHEME_DEFINED   = 0,
+    EMBER_ZCL_NOTIFICATION_SCHEME_PREDEFINED_NOTIFICATION_SCHEME_A = 1,
+    EMBER_ZCL_NOTIFICATION_SCHEME_PREDEFINED_NOTIFICATION_SCHEME_B = 2,
+} EmberAfNotificationScheme;
+
+// Enum for OccupancySensorType
+typedef enum
+{
+    EMBER_ZCL_OCCUPANCY_SENSOR_TYPE_PIR                = 0,
+    EMBER_ZCL_OCCUPANCY_SENSOR_TYPE_ULTRASONIC         = 1,
+    EMBER_ZCL_OCCUPANCY_SENSOR_TYPE_PIR_AND_ULTRASONIC = 2,
+    EMBER_ZCL_OCCUPANCY_SENSOR_TYPE_PHYSICAL_CONTACT   = 3,
+} EmberAfOccupancySensorType;
+
+// Enum for OnOffDelayedAllOffEffectVariant
+typedef enum
+{
+    EMBER_ZCL_ON_OFF_DELAYED_ALL_OFF_EFFECT_VARIANT_FADE_TO_OFF_IN_0P8_SECONDS                                        = 0,
+    EMBER_ZCL_ON_OFF_DELAYED_ALL_OFF_EFFECT_VARIANT_NO_FADE                                                           = 1,
+    EMBER_ZCL_ON_OFF_DELAYED_ALL_OFF_EFFECT_VARIANT_50_PERCENT_DIM_DOWN_IN_0P8_SECONDS_THEN_FADE_TO_OFF_IN_12_SECONDS = 2,
+} EmberAfOnOffDelayedAllOffEffectVariant;
+
+// Enum for OnOffDyingLightEffectVariant
+typedef enum
+{
+    EMBER_ZCL_ON_OFF_DYING_LIGHT_EFFECT_VARIANT_20_PERCENTER_DIM_UP_IN_0P5_SECONDS_THEN_FADE_TO_OFF_IN_1_SECOND = 0,
+} EmberAfOnOffDyingLightEffectVariant;
+
+// Enum for OnOffEffectIdentifier
+typedef enum
+{
+    EMBER_ZCL_ON_OFF_EFFECT_IDENTIFIER_DELAYED_ALL_OFF = 0,
+    EMBER_ZCL_ON_OFF_EFFECT_IDENTIFIER_DYING_LIGHT     = 1,
+} EmberAfOnOffEffectIdentifier;
+
+// Enum for OperatingMode
+typedef enum
+{
+    EMBER_ZCL_OPERATING_MODE_NORMAL    = 0,
+    EMBER_ZCL_OPERATING_MODE_CONFIGURE = 1,
+} EmberAfOperatingMode;
+
+// Enum for OriginatingDevice
+typedef enum
+{
+    EMBER_ZCL_ORIGINATING_DEVICE_ENERGY_SERVICE_INTERFACE = 0,
+    EMBER_ZCL_ORIGINATING_DEVICE_METER                    = 1,
+    EMBER_ZCL_ORIGINATING_DEVICE_IN_HOME_DISPLAY_DEVICE   = 2,
+} EmberAfOriginatingDevice;
+
+// Enum for PasswordType
+typedef enum
+{
+    EMBER_ZCL_PASSWORD_TYPE_PASSWORD1_SERVICE_MENU_ACCESS  = 1,
+    EMBER_ZCL_PASSWORD_TYPE_PASSWORD2_CONSUMER_MENU_ACCESS = 2,
+    EMBER_ZCL_PASSWORD_TYPE_PASSWORD3                      = 3,
+    EMBER_ZCL_PASSWORD_TYPE_PASSWORD4                      = 4,
+} EmberAfPasswordType;
+
+// Enum for PaymentDiscountDuration
+typedef enum
+{
+    EMBER_ZCL_PAYMENT_DISCOUNT_DURATION_CURRENT_BILLING_PERIOD    = 0,
+    EMBER_ZCL_PAYMENT_DISCOUNT_DURATION_CURRENT_CONSOLIDATED_BILL = 1,
+    EMBER_ZCL_PAYMENT_DISCOUNT_DURATION_ONE_MONTH                 = 2,
+    EMBER_ZCL_PAYMENT_DISCOUNT_DURATION_ONE_QUARTER               = 3,
+    EMBER_ZCL_PAYMENT_DISCOUNT_DURATION_ONE_YEAR                  = 4,
+} EmberAfPaymentDiscountDuration;
+
+// Enum for PhysicalEnvironment
+typedef enum
+{
+    EMBER_ZCL_PHYSICAL_ENVIRONMENT_UNSPECIFIED                   = 0,
+    EMBER_ZCL_PHYSICAL_ENVIRONMENT_FIRST_PROFILE_SPECIFIED_VALUE = 1,
+    EMBER_ZCL_PHYSICAL_ENVIRONMENT_LAST_PROFILE_SPECIFIED_VALUE  = 127,
+    EMBER_ZCL_PHYSICAL_ENVIRONMENT_UNKNOWN                       = 255,
+} EmberAfPhysicalEnvironment;
+
+// Enum for PowerProfileState
+typedef enum
+{
+    EMBER_ZCL_POWER_PROFILE_STATE_POWER_PROFILE_WAITING_TO_START = 1,
+    EMBER_ZCL_POWER_PROFILE_STATE_POWER_PROFILE_STARTED          = 2,
+    EMBER_ZCL_POWER_PROFILE_STATE_ENERGY_PHASE_RUNNING           = 3,
+    EMBER_ZCL_POWER_PROFILE_STATE_ENERGY_PHASE_ENDED             = 4,
+    EMBER_ZCL_POWER_PROFILE_STATE_ENERGY_PHASE_WAITING_TO_START  = 5,
+    EMBER_ZCL_POWER_PROFILE_STATE_ENERGY_PHASE_STARTED           = 6,
+    EMBER_ZCL_POWER_PROFILE_STATE_POWER_PROFILE_ENDED            = 7,
+    EMBER_ZCL_POWER_PROFILE_STATE_PROFILE_READY_FOR_SCHEDULING   = 8,
+    EMBER_ZCL_POWER_PROFILE_STATE_POWER_PROFILE_SCHEDULED        = 9,
+} EmberAfPowerProfileState;
+
+// Enum for PowerSource
+typedef enum
+{
+    EMBER_ZCL_POWER_SOURCE_UNKNOWN                         = 0,
+    EMBER_ZCL_POWER_SOURCE_SINGLE_PHASE_MAINS              = 1,
+    EMBER_ZCL_POWER_SOURCE_THREE_PHASE_MAINS               = 2,
+    EMBER_ZCL_POWER_SOURCE_BATTERY                         = 3,
+    EMBER_ZCL_POWER_SOURCE_DC_SOURCE                       = 4,
+    EMBER_ZCL_POWER_SOURCE_EMERGENCY_MAINS_CONSTANT_POWER  = 5,
+    EMBER_ZCL_POWER_SOURCE_EMERGENCY_MAINS_TRANSFER_SWITCH = 6,
+    EMBER_ZCL_POWER_SOURCE_BATTERY_BACKUP                  = 128,
+} EmberAfPowerSource;
+
+// Enum for PrePayGenericAlarmGroup
+typedef enum
+{
+    EMBER_ZCL_PRE_PAY_GENERIC_ALARM_GROUP_LOW_CREDIT                 = 0,
+    EMBER_ZCL_PRE_PAY_GENERIC_ALARM_GROUP_NO_CREDIT                  = 1,
+    EMBER_ZCL_PRE_PAY_GENERIC_ALARM_GROUP_CREDIT_EXHAUSTED           = 2,
+    EMBER_ZCL_PRE_PAY_GENERIC_ALARM_GROUP_EMERGENCY_CREDIT_ENABLED   = 3,
+    EMBER_ZCL_PRE_PAY_GENERIC_ALARM_GROUP_EMERGENCY_CREDIT_EXHAUSTED = 4,
+    EMBER_ZCL_PRE_PAY_GENERIC_ALARM_GROUP_IHD_LOW_CREDIT_WARNING     = 5,
+    EMBER_ZCL_PRE_PAY_GENERIC_ALARM_GROUP_EVENT_LOG_CLEARED          = 6,
+} EmberAfPrePayGenericAlarmGroup;
+
+// Enum for PrepayEventAlarmGroup
+typedef enum
+{
+    EMBER_ZCL_PREPAY_EVENT_ALARM_GROUP_PHYSICAL_ATTACK_ON_THE_PREPAY_METER   = 32,
+    EMBER_ZCL_PREPAY_EVENT_ALARM_GROUP_ELECTRONIC_ATTACK_ON_THE_PREPAY_METER = 33,
+    EMBER_ZCL_PREPAY_EVENT_ALARM_GROUP_DISCOUNT_APPLIED                      = 34,
+    EMBER_ZCL_PREPAY_EVENT_ALARM_GROUP_CREDIT_ADJUSTMENT                     = 35,
+    EMBER_ZCL_PREPAY_EVENT_ALARM_GROUP_CREDIT_ADJUSTMENT_FAIL                = 36,
+    EMBER_ZCL_PREPAY_EVENT_ALARM_GROUP_DEBT_ADJUSTMENT                       = 37,
+    EMBER_ZCL_PREPAY_EVENT_ALARM_GROUP_DEBT_ADJUSTMENT_FAIL                  = 38,
+    EMBER_ZCL_PREPAY_EVENT_ALARM_GROUP_MODE_CHANGE                           = 39,
+    EMBER_ZCL_PREPAY_EVENT_ALARM_GROUP_TOPUP_CODE_ERROR                      = 40,
+    EMBER_ZCL_PREPAY_EVENT_ALARM_GROUP_TOPUP_ALREADY_USED                    = 41,
+    EMBER_ZCL_PREPAY_EVENT_ALARM_GROUP_TOPUP_CODE_INVALID                    = 42,
+    EMBER_ZCL_PREPAY_EVENT_ALARM_GROUP_FRIENDLY_CREDIT_IN_USE                = 43,
+    EMBER_ZCL_PREPAY_EVENT_ALARM_GROUP_FRIENDLY_CREDIT_PERIOD_END_WARNING    = 44,
+    EMBER_ZCL_PREPAY_EVENT_ALARM_GROUP_FRIENDLY_CREDIT_PERIOD_END            = 45,
+    EMBER_ZCL_PREPAY_EVENT_ALARM_GROUP_ERROR_REG_CLEAR                       = 48,
+    EMBER_ZCL_PREPAY_EVENT_ALARM_GROUP_ALARM_REG_CLEAR                       = 49,
+    EMBER_ZCL_PREPAY_EVENT_ALARM_GROUP_PREPAY_CLUSTER_NOT_FOUND              = 50,
+    EMBER_ZCL_PREPAY_EVENT_ALARM_GROUP_MODE_CREDIT2_PREPAY                   = 65,
+    EMBER_ZCL_PREPAY_EVENT_ALARM_GROUP_MODE_PREPAY2_CREDIT                   = 66,
+    EMBER_ZCL_PREPAY_EVENT_ALARM_GROUP_MODE_DEFAULT                          = 67,
+} EmberAfPrepayEventAlarmGroup;
+
+// Enum for PrepaySnapshotPayloadType
+typedef enum
+{
+    EMBER_ZCL_PREPAY_SNAPSHOT_PAYLOAD_TYPE_DEBT_CREDIT_STATUS = 0,
+    EMBER_ZCL_PREPAY_SNAPSHOT_PAYLOAD_TYPE_NOT_USED           = 255,
+} EmberAfPrepaySnapshotPayloadType;
+
+// Enum for PrepaySwitchAlarmGroup
+typedef enum
+{
+    EMBER_ZCL_PREPAY_SWITCH_ALARM_GROUP_SUPPLY_ON                           = 16,
+    EMBER_ZCL_PREPAY_SWITCH_ALARM_GROUP_SUPPLY_ARM                          = 17,
+    EMBER_ZCL_PREPAY_SWITCH_ALARM_GROUP_SUPPLY_OFF                          = 18,
+    EMBER_ZCL_PREPAY_SWITCH_ALARM_GROUP_DISCONNECTION_FAILURE               = 19,
+    EMBER_ZCL_PREPAY_SWITCH_ALARM_GROUP_DISCONNECTED_DUE_TO_TAMPER_DETECTED = 20,
+    EMBER_ZCL_PREPAY_SWITCH_ALARM_GROUP_DISCONNECTED_DUE_TO_CUT_OFF_VALUE   = 21,
+    EMBER_ZCL_PREPAY_SWITCH_ALARM_GROUP_REMOTE_DISCONNECTED                 = 22,
+} EmberAfPrepaySwitchAlarmGroup;
+
+// Enum for PriceControlAcknowledgement
+typedef enum
+{
+    EMBER_ZCL_PRICE_CONTROL_ACKNOWLEDGEMENT_NOT_REQUIRED = 0,
+    EMBER_ZCL_PRICE_CONTROL_ACKNOWLEDGEMENT_REQUIRED     = 1,
+} EmberAfPriceControlAcknowledgement;
+
+// Enum for PriceTier
+typedef enum
+{
+    EMBER_ZCL_PRICE_TIER_NO_TIER_RELATED                    = 0,
+    EMBER_ZCL_PRICE_TIER_TIER1_PRICE_LABEL                  = 1,
+    EMBER_ZCL_PRICE_TIER_TIER2_PRICE_LABEL                  = 2,
+    EMBER_ZCL_PRICE_TIER_TIER3_PRICE_LABEL                  = 3,
+    EMBER_ZCL_PRICE_TIER_TIER4_PRICE_LABEL                  = 4,
+    EMBER_ZCL_PRICE_TIER_TIER5_PRICE_LABEL                  = 5,
+    EMBER_ZCL_PRICE_TIER_TIER6_PRICE_LABEL                  = 6,
+    EMBER_ZCL_PRICE_TIER_TIER7_PRICE_LABEL                  = 7,
+    EMBER_ZCL_PRICE_TIER_TIER8_PRICE_LABEL                  = 8,
+    EMBER_ZCL_PRICE_TIER_TIER9_PRICE_LABEL                  = 9,
+    EMBER_ZCL_PRICE_TIER_TIER10_PRICE_LABEL                 = 10,
+    EMBER_ZCL_PRICE_TIER_TIER11_PRICE_LABEL                 = 11,
+    EMBER_ZCL_PRICE_TIER_TIER12_PRICE_LABEL                 = 12,
+    EMBER_ZCL_PRICE_TIER_TIER13_PRICE_LABEL                 = 13,
+    EMBER_ZCL_PRICE_TIER_TIER14_PRICE_LABEL                 = 14,
+    EMBER_ZCL_PRICE_TIER_REFER_TO_EXTENDED_PRICE_TIER_FIELD = 15,
+    EMBER_ZCL_PRICE_TIER_TIER15_PRICE_LABEL                 = 15,
+} EmberAfPriceTier;
+
+// Enum for ProductCode
+typedef enum
+{
+    EMBER_ZCL_PRODUCT_CODE_MANUFACTURER_DEFINED        = 0,
+    EMBER_ZCL_PRODUCT_CODE_ITERNATIONAL_ARTICLE_NUMBER = 1,
+    EMBER_ZCL_PRODUCT_CODE_GLOBAL_TRADE_ITEM_NUMBER    = 2,
+    EMBER_ZCL_PRODUCT_CODE_UNIVERSAL_PRODUCT_CODE      = 3,
+    EMBER_ZCL_PRODUCT_CODE_STOCK_KEEPING_UNIT          = 4,
+} EmberAfProductCode;
+
+// Enum for ProductTypeId
+typedef enum
+{
+    EMBER_ZCL_PRODUCT_TYPE_ID_WHITE_GOODS          = 0,
+    EMBER_ZCL_PRODUCT_TYPE_ID_DISHWASHER           = 22017,
+    EMBER_ZCL_PRODUCT_TYPE_ID_TUMBLE_DRYER         = 22018,
+    EMBER_ZCL_PRODUCT_TYPE_ID_WASHER_DRYER         = 22019,
+    EMBER_ZCL_PRODUCT_TYPE_ID_WASHING_MACHINE      = 22020,
+    EMBER_ZCL_PRODUCT_TYPE_ID_HOBS                 = 24067,
+    EMBER_ZCL_PRODUCT_TYPE_ID_INDUCTION_HOBS       = 24073,
+    EMBER_ZCL_PRODUCT_TYPE_ID_OVEN                 = 24065,
+    EMBER_ZCL_PRODUCT_TYPE_ID_ELECTRICAL_OVEN      = 24070,
+    EMBER_ZCL_PRODUCT_TYPE_ID_REFRIGERATOR_FREEZER = 26113,
+} EmberAfProductTypeId;
+
+// Enum for ProposedSupplyStatus
+typedef enum
+{
+    EMBER_ZCL_PROPOSED_SUPPLY_STATUS_RESERVED         = 0,
+    EMBER_ZCL_PROPOSED_SUPPLY_STATUS_SUPPLY_OFF_ARMED = 1,
+    EMBER_ZCL_PROPOSED_SUPPLY_STATUS_SUPPLY_ON        = 2,
+} EmberAfProposedSupplyStatus;
+
+// Enum for PublishCppEventCppAuth
+typedef enum
+{
+    EMBER_ZCL_PUBLISH_CPP_EVENT_CPP_AUTH_PENDING  = 0,
+    EMBER_ZCL_PUBLISH_CPP_EVENT_CPP_AUTH_ACCEPTED = 1,
+    EMBER_ZCL_PUBLISH_CPP_EVENT_CPP_AUTH_REJECTED = 2,
+    EMBER_ZCL_PUBLISH_CPP_EVENT_CPP_AUTH_FORCED   = 3,
+} EmberAfPublishCppEventCppAuth;
+
+// Enum for PumpControlMode
+typedef enum
+{
+    EMBER_ZCL_PUMP_CONTROL_MODE_CONSTANT_SPEED        = 0,
+    EMBER_ZCL_PUMP_CONTROL_MODE_CONSTANT_PRESSURE     = 1,
+    EMBER_ZCL_PUMP_CONTROL_MODE_PROPORTIONAL_PRESSURE = 2,
+    EMBER_ZCL_PUMP_CONTROL_MODE_CONSTANT_FLOW         = 3,
+    EMBER_ZCL_PUMP_CONTROL_MODE_CONSTANT_TEMPERATURE  = 5,
+    EMBER_ZCL_PUMP_CONTROL_MODE_AUTOMATIC             = 7,
+} EmberAfPumpControlMode;
+
+// Enum for PumpOperationMode
+typedef enum
+{
+    EMBER_ZCL_PUMP_OPERATION_MODE_NORMAL  = 0,
+    EMBER_ZCL_PUMP_OPERATION_MODE_MINIMUM = 1,
+    EMBER_ZCL_PUMP_OPERATION_MODE_MAXIMUM = 2,
+    EMBER_ZCL_PUMP_OPERATION_MODE_LOCAL   = 3,
+} EmberAfPumpOperationMode;
+
+// Enum for PushHistoricalMeteringData
+typedef enum
+{
+    EMBER_ZCL_PUSH_HISTORICAL_METERING_DATA_DAY   = 64,
+    EMBER_ZCL_PUSH_HISTORICAL_METERING_DATA_WEEK  = 128,
+    EMBER_ZCL_PUSH_HISTORICAL_METERING_DATA_MONTH = 384,
+    EMBER_ZCL_PUSH_HISTORICAL_METERING_DATA_YEAR  = 448,
+} EmberAfPushHistoricalMeteringData;
+
+// Enum for PushHistoricalPaymentData
+typedef enum
+{
+    EMBER_ZCL_PUSH_HISTORICAL_PAYMENT_DATA_DAY   = 512,
+    EMBER_ZCL_PUSH_HISTORICAL_PAYMENT_DATA_WEEK  = 1024,
+    EMBER_ZCL_PUSH_HISTORICAL_PAYMENT_DATA_MONTH = 3072,
+    EMBER_ZCL_PUSH_HISTORICAL_PAYMENT_DATA_YEAR  = 3584,
+} EmberAfPushHistoricalPaymentData;
+
+// Enum for RegisterTier
+typedef enum
+{
+    EMBER_ZCL_REGISTER_TIER_NO_TIER_RELATED                              = 0,
+    EMBER_ZCL_REGISTER_TIER_CURRENT_TIER1_SUMMATION_DELIVERED_ATTRIBUTE  = 1,
+    EMBER_ZCL_REGISTER_TIER_CURRENT_TIER2_SUMMATION_DELIVERED_ATTRIBUTE  = 2,
+    EMBER_ZCL_REGISTER_TIER_CURRENT_TIER3_SUMMATION_DELIVERED_ATTRIBUTE  = 3,
+    EMBER_ZCL_REGISTER_TIER_CURRENT_TIER4_SUMMATION_DELIVERED_ATTRIBUTE  = 4,
+    EMBER_ZCL_REGISTER_TIER_CURRENT_TIER5_SUMMATION_DELIVERED_ATTRIBUTE  = 5,
+    EMBER_ZCL_REGISTER_TIER_CURRENT_TIER6_SUMMATION_DELIVERED_ATTRIBUTE  = 6,
+    EMBER_ZCL_REGISTER_TIER_CURRENT_TIER7_SUMMATION_DELIVERED_ATTRIBUTE  = 7,
+    EMBER_ZCL_REGISTER_TIER_CURRENT_TIER8_SUMMATION_DELIVERED_ATTRIBUTE  = 8,
+    EMBER_ZCL_REGISTER_TIER_CURRENT_TIER9_SUMMATION_DELIVERED_ATTRIBUTE  = 9,
+    EMBER_ZCL_REGISTER_TIER_CURRENT_TIER10_SUMMATION_DELIVERED_ATTRIBUTE = 10,
+    EMBER_ZCL_REGISTER_TIER_CURRENT_TIER11_SUMMATION_DELIVERED_ATTRIBUTE = 11,
+    EMBER_ZCL_REGISTER_TIER_CURRENT_TIER12_SUMMATION_DELIVERED_ATTRIBUTE = 12,
+    EMBER_ZCL_REGISTER_TIER_CURRENT_TIER13_SUMMATION_DELIVERED_ATTRIBUTE = 13,
+    EMBER_ZCL_REGISTER_TIER_CURRENT_TIER14_SUMMATION_DELIVERED_ATTRIBUTE = 14,
+    EMBER_ZCL_REGISTER_TIER_REFER_TO_EXTENDED_REGISTER_TIER_FIELD        = 15,
+    EMBER_ZCL_REGISTER_TIER_CURRENT_TIER15_SUMMATION_DELIVERED_ATTRIBUTE = 15,
+} EmberAfRegisterTier;
+
+// Enum for RelativeHumidityDisplay
+typedef enum
+{
+    EMBER_ZCL_RELATIVE_HUMIDITY_DISPLAY_NOT_DISPLAYED = 0,
+    EMBER_ZCL_RELATIVE_HUMIDITY_DISPLAY_DISPLAYED     = 1,
+} EmberAfRelativeHumidityDisplay;
+
+// Enum for RelativeHumidityMode
+typedef enum
+{
+    EMBER_ZCL_RELATIVE_HUMIDITY_MODE_MEASURE_LOCALLY          = 0,
+    EMBER_ZCL_RELATIVE_HUMIDITY_MODE_UPDATED_OVER_THE_NETWORK = 1,
+} EmberAfRelativeHumidityMode;
+
+// Enum for RemoteEnableFlags
+typedef enum
+{
+    EMBER_ZCL_REMOTE_ENABLE_FLAGS_DISABLED                          = 0,
+    EMBER_ZCL_REMOTE_ENABLE_FLAGS_TEMPORARILY_LOCKED_DISABLED       = 7,
+    EMBER_ZCL_REMOTE_ENABLE_FLAGS_ENABLED_REMOTE_CONTROL            = 15,
+    EMBER_ZCL_REMOTE_ENABLE_FLAGS_ENABLED_REMOTE_AND_ENERGY_CONTROL = 1,
+} EmberAfRemoteEnableFlags;
+
+// Enum for RepaymentDebtType
+typedef enum
+{
+    EMBER_ZCL_REPAYMENT_DEBT_TYPE_DEBT1     = 0,
+    EMBER_ZCL_REPAYMENT_DEBT_TYPE_DEBT2     = 1,
+    EMBER_ZCL_REPAYMENT_DEBT_TYPE_DEBT3     = 2,
+    EMBER_ZCL_REPAYMENT_DEBT_TYPE_ALL_DEBTS = 255,
+} EmberAfRepaymentDebtType;
+
+// Enum for ResultType
+typedef enum
+{
+    EMBER_ZCL_RESULT_TYPE_ACCEPTED                        = 0,
+    EMBER_ZCL_RESULT_TYPE_REJECTED_INVALID_TOP_UP         = 1,
+    EMBER_ZCL_RESULT_TYPE_REJECTED_DUPLICATE_TOP_UP       = 2,
+    EMBER_ZCL_RESULT_TYPE_REJECTED_ERROR                  = 3,
+    EMBER_ZCL_RESULT_TYPE_REJECTED_MAX_CREDIT_REACHED     = 4,
+    EMBER_ZCL_RESULT_TYPE_REJECTED_KEYPAD_LOCK            = 5,
+    EMBER_ZCL_RESULT_TYPE_REJECTED_TOP_UP_VALUE_TOO_LARGE = 6,
+    EMBER_ZCL_RESULT_TYPE_ACCEPTED_SUPPLY_ENABLED         = 16,
+    EMBER_ZCL_RESULT_TYPE_ACCEPTED_SUPPLY_DISABLED        = 17,
+    EMBER_ZCL_RESULT_TYPE_ACCEPTED_SUPPLY_ARMED           = 18,
+} EmberAfResultType;
+
+// Enum for SampleType
+typedef enum
+{
+    EMBER_ZCL_SAMPLE_TYPE_CONSUMPTION_DELIVERED = 0,
+} EmberAfSampleType;
+
+// Enum for SaturationMoveMode
+typedef enum
+{
+    EMBER_ZCL_SATURATION_MOVE_MODE_STOP = 0,
+    EMBER_ZCL_SATURATION_MOVE_MODE_UP   = 1,
+    EMBER_ZCL_SATURATION_MOVE_MODE_DOWN = 3,
+} EmberAfSaturationMoveMode;
+
+// Enum for SaturationStepMode
+typedef enum
+{
+    EMBER_ZCL_SATURATION_STEP_MODE_UP   = 1,
+    EMBER_ZCL_SATURATION_STEP_MODE_DOWN = 3,
+} EmberAfSaturationStepMode;
+
+// Enum for SensingLightSensorType
+typedef enum
+{
+    EMBER_ZCL_SENSING_LIGHT_SENSOR_TYPE_PHOTODIODE = 0,
+    EMBER_ZCL_SENSING_LIGHT_SENSOR_TYPE_CMOS       = 1,
+} EmberAfSensingLightSensorType;
+
+// Enum for SetpointAdjustMode
+typedef enum
+{
+    EMBER_ZCL_SETPOINT_ADJUST_MODE_HEAT_SETPOINT           = 0,
+    EMBER_ZCL_SETPOINT_ADJUST_MODE_COOL_SETPOINT           = 1,
+    EMBER_ZCL_SETPOINT_ADJUST_MODE_HEAT_AND_COOL_SETPOINTS = 2,
+} EmberAfSetpointAdjustMode;
+
+// Enum for SignatureType
+typedef enum
+{
+    EMBER_ZCL_SIGNATURE_TYPE_RESERVED = 0,
+    EMBER_ZCL_SIGNATURE_TYPE_ECDSA    = 1,
+} EmberAfSignatureType;
+
+// Enum for SnapshotConfirmation
+typedef enum
+{
+    EMBER_ZCL_SNAPSHOT_CONFIRMATION_ACCEPTED                     = 0,
+    EMBER_ZCL_SNAPSHOT_CONFIRMATION_SNAPSHOT_CAUSE_NOT_SUPPORTED = 1,
+} EmberAfSnapshotConfirmation;
+
+// Enum for SnapshotPayloadType
+typedef enum
+{
+    EMBER_ZCL_SNAPSHOT_PAYLOAD_TYPE_TOU_INFORMATION_SET_DELIVERED_REGISTERS            = 0,
+    EMBER_ZCL_SNAPSHOT_PAYLOAD_TYPE_TOU_INFORMATION_SET_RECEIVED_REGISTERS             = 1,
+    EMBER_ZCL_SNAPSHOT_PAYLOAD_TYPE_BLOCK_TIER_INFORMATION_SET_DELIVERED               = 2,
+    EMBER_ZCL_SNAPSHOT_PAYLOAD_TYPE_BLOCK_TIER_INFORMATION_SET_RECEIVED                = 3,
+    EMBER_ZCL_SNAPSHOT_PAYLOAD_TYPE_TOU_INFORMATION_SET_DELIVERED_REGISTERS_NO_BILLING = 4,
+    EMBER_ZCL_SNAPSHOT_PAYLOAD_TYPE_TOU_INFORMATION_SET_RECEIVED_REGISTER_NO_BILLINGS  = 5,
+    EMBER_ZCL_SNAPSHOT_PAYLOAD_TYPE_BLOCK_TIER_INFORMATION_SET_DELIVERED_NO_BILLING    = 6,
+    EMBER_ZCL_SNAPSHOT_PAYLOAD_TYPE_BLOCK_TIER_INFORMATION_SET_RECEIVED_NO_BILLING     = 7,
+    EMBER_ZCL_SNAPSHOT_PAYLOAD_TYPE_DATA_UNAVAILABLE                                   = 128,
+} EmberAfSnapshotPayloadType;
+
+// Enum for SnapshotScheduleConfirmation
+typedef enum
+{
+    EMBER_ZCL_SNAPSHOT_SCHEDULE_CONFIRMATION_ACCEPTED                                   = 0,
+    EMBER_ZCL_SNAPSHOT_SCHEDULE_CONFIRMATION_SNAPSHOT_TYPE_NOT_SUPPORTED                = 1,
+    EMBER_ZCL_SNAPSHOT_SCHEDULE_CONFIRMATION_SNAPSHOT_CAUSE_NOT_SUPPORTED               = 2,
+    EMBER_ZCL_SNAPSHOT_SCHEDULE_CONFIRMATION_SNAPSHOT_SCHEDULE_NOT_CURRENTLY_AVAILABLE  = 3,
+    EMBER_ZCL_SNAPSHOT_SCHEDULE_CONFIRMATION_SNAPSHOT_SCHEDULES_NOT_SUPPORTED_BY_DEVICE = 4,
+    EMBER_ZCL_SNAPSHOT_SCHEDULE_CONFIRMATION_INSUFFICIENT_SPACE_FOR_SNAPSHOT_SCHEDULE   = 5,
+} EmberAfSnapshotScheduleConfirmation;
+
+// Enum for SquawkLevel
+typedef enum
+{
+    EMBER_ZCL_SQUAWK_LEVEL_LOW_LEVEL       = 0,
+    EMBER_ZCL_SQUAWK_LEVEL_MEDIUM_LEVEL    = 1,
+    EMBER_ZCL_SQUAWK_LEVEL_HIGH_LEVEL      = 2,
+    EMBER_ZCL_SQUAWK_LEVEL_VERY_HIGH_LEVEL = 2,
+} EmberAfSquawkLevel;
+
+// Enum for SquawkMode
+typedef enum
+{
+    EMBER_ZCL_SQUAWK_MODE_SYSTEM_IS_ARMED    = 0,
+    EMBER_ZCL_SQUAWK_MODE_SYSTEM_IS_DISARMED = 1,
+} EmberAfSquawkMode;
+
+// Enum for SquawkStobe
+typedef enum
+{
+    EMBER_ZCL_SQUAWK_STOBE_NO_STROBE  = 0,
+    EMBER_ZCL_SQUAWK_STOBE_USE_STROBE = 1,
+} EmberAfSquawkStobe;
+
+// Enum for StartOfWeek
+typedef enum
+{
+    EMBER_ZCL_START_OF_WEEK_SUNDAY    = 0,
+    EMBER_ZCL_START_OF_WEEK_MONDAY    = 1,
+    EMBER_ZCL_START_OF_WEEK_TUESDAY   = 2,
+    EMBER_ZCL_START_OF_WEEK_WEDNESDAY = 3,
+    EMBER_ZCL_START_OF_WEEK_THURSDAY  = 4,
+    EMBER_ZCL_START_OF_WEEK_FRIDAY    = 5,
+    EMBER_ZCL_START_OF_WEEK_SATURDAY  = 6,
+} EmberAfStartOfWeek;
+
+// Enum for StartUpOnOffValue
+typedef enum
+{
+    EMBER_ZCL_START_UP_ON_OFF_VALUE_SET_TO_OFF      = 0,
+    EMBER_ZCL_START_UP_ON_OFF_VALUE_SET_TO_ON       = 1,
+    EMBER_ZCL_START_UP_ON_OFF_VALUE_SET_TO_TOGGLE   = 2,
+    EMBER_ZCL_START_UP_ON_OFF_VALUE_SET_TO_PREVIOUS = 255,
+} EmberAfStartUpOnOffValue;
+
+// Enum for StepMode
+typedef enum
+{
+    EMBER_ZCL_STEP_MODE_UP   = 0,
+    EMBER_ZCL_STEP_MODE_DOWN = 1,
+} EmberAfStepMode;
+
+// Enum for SupplyStatus
+typedef enum
+{
+    EMBER_ZCL_SUPPLY_STATUS_SUPPLY_OFF       = 0,
+    EMBER_ZCL_SUPPLY_STATUS_SUPPLY_OFF_ARMED = 1,
+    EMBER_ZCL_SUPPLY_STATUS_SUPPLY_ON        = 2,
+    EMBER_ZCL_SUPPLY_STATUS_SUPPLY_UNCHANGED = 3,
+} EmberAfSupplyStatus;
+
+// Enum for SwitchActions
+typedef enum
+{
+    EMBER_ZCL_SWITCH_ACTIONS_ON     = 0,
+    EMBER_ZCL_SWITCH_ACTIONS_OFF    = 1,
+    EMBER_ZCL_SWITCH_ACTIONS_TOGGLE = 2,
+} EmberAfSwitchActions;
+
+// Enum for SwitchType
+typedef enum
+{
+    EMBER_ZCL_SWITCH_TYPE_TOGGLE         = 0,
+    EMBER_ZCL_SWITCH_TYPE_MOMENTARY      = 1,
+    EMBER_ZCL_SWITCH_TYPE_MULTI_FUNCTION = 2,
+} EmberAfSwitchType;
+
+// Enum for TariffChargingScheme
+typedef enum
+{
+    EMBER_ZCL_TARIFF_CHARGING_SCHEME_TOU_TARIFF                                           = 0,
+    EMBER_ZCL_TARIFF_CHARGING_SCHEME_BLOCK_TARIFF                                         = 16,
+    EMBER_ZCL_TARIFF_CHARGING_SCHEME_BLOCK_TOU_TARIFF_WITH_COMMON_THRESHOLDS              = 32,
+    EMBER_ZCL_TARIFF_CHARGING_SCHEME_BLOCK_TOU_TARIFF_WITH_INDIVIDUAL_THRESHOLDS_PER_TIER = 48,
+} EmberAfTariffChargingScheme;
+
+// Enum for TariffResolutionPeriod
+typedef enum
+{
+    EMBER_ZCL_TARIFF_RESOLUTION_PERIOD_NOT_DEFINED  = 0,
+    EMBER_ZCL_TARIFF_RESOLUTION_PERIOD_BLOCK_PERIOD = 1,
+    EMBER_ZCL_TARIFF_RESOLUTION_PERIOD_ONE_DAY      = 2,
+} EmberAfTariffResolutionPeriod;
+
+// Enum for TariffType
+typedef enum
+{
+    EMBER_ZCL_TARIFF_TYPE_DELIVERED_TARIFF              = 0,
+    EMBER_ZCL_TARIFF_TYPE_RECEIVED_TARIFF               = 1,
+    EMBER_ZCL_TARIFF_TYPE_DELIVERED_AND_RECEIVED_TARIFF = 2,
+} EmberAfTariffType;
+
+// Enum for TemperatureDisplayMode
+typedef enum
+{
+    EMBER_ZCL_TEMPERATURE_DISPLAY_MODE_CELSIUS    = 0,
+    EMBER_ZCL_TEMPERATURE_DISPLAY_MODE_FAHRENHEIT = 1,
+} EmberAfTemperatureDisplayMode;
+
+// Enum for TemperatureSetpointHold
+typedef enum
+{
+    EMBER_ZCL_TEMPERATURE_SETPOINT_HOLD_SETPOINT_HOLD_OFF = 0,
+    EMBER_ZCL_TEMPERATURE_SETPOINT_HOLD_SETPOINT_HOLD_ON  = 1,
+} EmberAfTemperatureSetpointHold;
+
+// Enum for ThermostatControlSequence
+typedef enum
+{
+    EMBER_ZCL_THERMOSTAT_CONTROL_SEQUENCE_COOLING_ONLY                    = 0,
+    EMBER_ZCL_THERMOSTAT_CONTROL_SEQUENCE_COOLING_WITH_REHEAT             = 1,
+    EMBER_ZCL_THERMOSTAT_CONTROL_SEQUENCE_HEATING_ONLY                    = 2,
+    EMBER_ZCL_THERMOSTAT_CONTROL_SEQUENCE_HEATING_WITH_REHEAT             = 3,
+    EMBER_ZCL_THERMOSTAT_CONTROL_SEQUENCE_COOLING_AND_HEATING             = 4,
+    EMBER_ZCL_THERMOSTAT_CONTROL_SEQUENCE_COOLING_AND_HEATING_WITH_REHEAT = 5,
+} EmberAfThermostatControlSequence;
+
+// Enum for ThermostatRunningMode
+typedef enum
+{
+    EMBER_ZCL_THERMOSTAT_RUNNING_MODE_OFF  = 0,
+    EMBER_ZCL_THERMOSTAT_RUNNING_MODE_COOL = 3,
+    EMBER_ZCL_THERMOSTAT_RUNNING_MODE_HEAT = 4,
+} EmberAfThermostatRunningMode;
+
+// Enum for ThermostatSystemMode
+typedef enum
+{
+    EMBER_ZCL_THERMOSTAT_SYSTEM_MODE_OFF               = 0,
+    EMBER_ZCL_THERMOSTAT_SYSTEM_MODE_AUTO              = 1,
+    EMBER_ZCL_THERMOSTAT_SYSTEM_MODE_COOL              = 3,
+    EMBER_ZCL_THERMOSTAT_SYSTEM_MODE_HEAT              = 4,
+    EMBER_ZCL_THERMOSTAT_SYSTEM_MODE_EMERGENCY_HEATING = 5,
+    EMBER_ZCL_THERMOSTAT_SYSTEM_MODE_PRECOOLING        = 6,
+    EMBER_ZCL_THERMOSTAT_SYSTEM_MODE_FAN_ONLY          = 7,
+} EmberAfThermostatSystemMode;
+
+// Enum for TierBlockMode
+typedef enum
+{
+    EMBER_ZCL_TIER_BLOCK_MODE_ACTIVE_BLOCK                      = 0,
+    EMBER_ZCL_TIER_BLOCK_MODE_ACTIVE_BLOCK_PRICE_TIER           = 1,
+    EMBER_ZCL_TIER_BLOCK_MODE_ACTIVE_BLOCK_PRICE_TIER_THRESHOLD = 2,
+    EMBER_ZCL_TIER_BLOCK_MODE_NOT_USED                          = 255,
+} EmberAfTierBlockMode;
+
+// Enum for TimeEncoding
+typedef enum
+{
+    EMBER_ZCL_TIME_ENCODING_RELATIVE = 0,
+    EMBER_ZCL_TIME_ENCODING_ABSOLUTE = 64,
+} EmberAfTimeEncoding;
+
+// Enum for TunnelingProtocolId
+typedef enum
+{
+    EMBER_ZCL_TUNNELING_PROTOCOL_ID_DLMS_COSEM   = 0,
+    EMBER_ZCL_TUNNELING_PROTOCOL_ID_IEC_61107    = 1,
+    EMBER_ZCL_TUNNELING_PROTOCOL_ID_ANSI_C12     = 2,
+    EMBER_ZCL_TUNNELING_PROTOCOL_ID_M_BUS        = 3,
+    EMBER_ZCL_TUNNELING_PROTOCOL_ID_SML          = 4,
+    EMBER_ZCL_TUNNELING_PROTOCOL_ID_CLIMATE_TALK = 5,
+    EMBER_ZCL_TUNNELING_PROTOCOL_ID_GB_HRGP      = 6,
+    EMBER_ZCL_TUNNELING_PROTOCOL_ID_IP_V4        = 7,
+    EMBER_ZCL_TUNNELING_PROTOCOL_ID_IP_V6        = 8,
+    EMBER_ZCL_TUNNELING_PROTOCOL_ID_TEST         = 199,
+} EmberAfTunnelingProtocolId;
+
+// Enum for TunnelingTransferDataStatus
+typedef enum
+{
+    EMBER_ZCL_TUNNELING_TRANSFER_DATA_STATUS_NO_SUCH_TUNNEL = 0,
+    EMBER_ZCL_TUNNELING_TRANSFER_DATA_STATUS_WRONG_DEVICE   = 1,
+    EMBER_ZCL_TUNNELING_TRANSFER_DATA_STATUS_DATA_OVERFLOW  = 2,
+} EmberAfTunnelingTransferDataStatus;
+
+// Enum for TunnelingTunnelStatus
+typedef enum
+{
+    EMBER_ZCL_TUNNELING_TUNNEL_STATUS_SUCCESS                    = 0,
+    EMBER_ZCL_TUNNELING_TUNNEL_STATUS_BUSY                       = 1,
+    EMBER_ZCL_TUNNELING_TUNNEL_STATUS_NO_MORE_TUNNEL_IDS         = 2,
+    EMBER_ZCL_TUNNELING_TUNNEL_STATUS_PROTOCOL_NOT_SUPPORTED     = 3,
+    EMBER_ZCL_TUNNELING_TUNNEL_STATUS_FLOW_CONTROL_NOT_SUPPORTED = 4,
+} EmberAfTunnelingTunnelStatus;
+
+// Enum for WanStatus
+typedef enum
+{
+    EMBER_ZCL_WAN_STATUS_CONNECTION_TO_WAN_IS_NOT_AVAILABLE = 0,
+    EMBER_ZCL_WAN_STATUS_CONNECTION_TO_WAN_IS_AVAILABLE     = 1,
+} EmberAfWanStatus;
+
+// Enum for WarningEvent
+typedef enum
+{
+    EMBER_ZCL_WARNING_EVENT_WARNING1_OVERALL_POWER_ABOVE_AVAILABLE_POWER_LEVEL                                             = 0,
+    EMBER_ZCL_WARNING_EVENT_WARNING2_OVERALL_POWER_ABOVE_POWER_THRESHOLD_LEVEL                                             = 1,
+    EMBER_ZCL_WARNING_EVENT_WARNING3_OVERALL_POWER_BACK_BELOW_THE_AVAILABLE_POWER_LEVEL                                    = 2,
+    EMBER_ZCL_WARNING_EVENT_WARNING4_OVERALL_POWER_BACK_BELOW_THE_POWER_THRESHOLD_LEVEL                                    = 3,
+    EMBER_ZCL_WARNING_EVENT_WARNING5_OVERALL_POWER_WILL_BE_POTENTIALLY_ABOVE_AVAILABLE_POWER_LEVEL_IF_THE_APPLIANCE_STARTS = 4,
+} EmberAfWarningEvent;
+
+// Enum for WarningMode
+typedef enum
+{
+    EMBER_ZCL_WARNING_MODE_STOP            = 0,
+    EMBER_ZCL_WARNING_MODE_BURGLAR         = 1,
+    EMBER_ZCL_WARNING_MODE_FIRE            = 2,
+    EMBER_ZCL_WARNING_MODE_EMERGENCY       = 3,
+    EMBER_ZCL_WARNING_MODE_POLICE_PANIC    = 4,
+    EMBER_ZCL_WARNING_MODE_FIRE_PANIC      = 5,
+    EMBER_ZCL_WARNING_MODE_EMERGENCY_PANIC = 6,
+} EmberAfWarningMode;
+
+// Enum for WarningStobe
+typedef enum
+{
+    EMBER_ZCL_WARNING_STOBE_NO_STROBE  = 0,
+    EMBER_ZCL_WARNING_STOBE_USE_STROBE = 1,
+} EmberAfWarningStobe;
+
+// Enum for WwahIasZoneEnrollmentMode
+typedef enum
+{
+    EMBER_ZCL_WWAH_IAS_ZONE_ENROLLMENT_MODE_TRIP_TO_PAIR             = 0,
+    EMBER_ZCL_WWAH_IAS_ZONE_ENROLLMENT_MODE_AUTO_ENROLLMENT_RESPONSE = 1,
+    EMBER_ZCL_WWAH_IAS_ZONE_ENROLLMENT_MODE_REQUEST                  = 2,
+} EmberAfWwahIasZoneEnrollmentMode;
+
+// Enum for WwahPowerNotificationReason
+typedef enum
+{
+    EMBER_ZCL_WWAH_POWER_NOTIFICATION_REASON_UNKNOWN               = 0,
+    EMBER_ZCL_WWAH_POWER_NOTIFICATION_REASON_BATTERY               = 1,
+    EMBER_ZCL_WWAH_POWER_NOTIFICATION_REASON_BROWNOUT              = 2,
+    EMBER_ZCL_WWAH_POWER_NOTIFICATION_REASON_WATCHDOG              = 3,
+    EMBER_ZCL_WWAH_POWER_NOTIFICATION_REASON_RESET_PIN             = 4,
+    EMBER_ZCL_WWAH_POWER_NOTIFICATION_REASON_MEMORY_HARDWARE_FAULT = 5,
+    EMBER_ZCL_WWAH_POWER_NOTIFICATION_REASON_SOFWARE_EXCEPTION     = 6,
+    EMBER_ZCL_WWAH_POWER_NOTIFICATION_REASON_OTA_BOOTLOAD_SUCCESS  = 7,
+    EMBER_ZCL_WWAH_POWER_NOTIFICATION_REASON_SOFTWARE_RESET        = 8,
+    EMBER_ZCL_WWAH_POWER_NOTIFICATION_REASON_POWER_BUTTON          = 9,
+    EMBER_ZCL_WWAH_POWER_NOTIFICATION_REASON_TEMPERATURE           = 10,
+    EMBER_ZCL_WWAH_POWER_NOTIFICATION_REASON_BOOTLOAD_FAILURE      = 11,
+} EmberAfWwahPowerNotificationReason;
+
+// Enum for ZigbeeInformationLogicalType
+typedef enum
+{
+    EMBER_ZCL_ZIGBEE_INFORMATION_LOGICAL_TYPE_COORDINATOR = 0,
+    EMBER_ZCL_ZIGBEE_INFORMATION_LOGICAL_TYPE_ROUTER      = 1,
+    EMBER_ZCL_ZIGBEE_INFORMATION_LOGICAL_TYPE_END_DEVICE  = 2,
+} EmberAfZigbeeInformationLogicalType;
+
+// Enum for ZllStatus
+typedef enum
+{
+    EMBER_ZCL_ZLL_STATUS_SUCCESS = 0,
+    EMBER_ZCL_ZLL_STATUS_FAILURE = 1,
+} EmberAfZllStatus;
+
+#define EMBER_AF_ALARM_MASK_GENERAL_HW_FAULT (1)
+#define EMBER_AF_ALARM_MASK_GENERAL_HW_FAULT_OFFSET (0)
+#define EMBER_AF_ALARM_MASK_GENERAL_SW_FAULT (2)
+#define EMBER_AF_ALARM_MASK_GENERAL_SW_FAULT_OFFSET (1)
+#define EMBER_AF_ALERT_COUNT_NUMBER_OF_ALERTS (15)
+#define EMBER_AF_ALERT_COUNT_NUMBER_OF_ALERTS_OFFSET (0)
+#define EMBER_AF_ALERT_COUNT_TYPE_OF_ALERT (240)
+#define EMBER_AF_ALERT_COUNT_TYPE_OF_ALERT_OFFSET (4)
+#define EMBER_AF_ALERT_STRUCTURE_ALERT_ID (255)
+#define EMBER_AF_ALERT_STRUCTURE_ALERT_ID_OFFSET (0)
+#define EMBER_AF_ALERT_STRUCTURE_CATEGORY (3840)
+#define EMBER_AF_ALERT_STRUCTURE_CATEGORY_OFFSET (8)
+#define EMBER_AF_ALERT_STRUCTURE_PRESENCE_RECOVERY (12288)
+#define EMBER_AF_ALERT_STRUCTURE_PRESENCE_RECOVERY_OFFSET (12)
+#define EMBER_AF_ALTERNATE_COST_TRAILING_DIGIT_TRAILING_DIGIT (240)
+#define EMBER_AF_ALTERNATE_COST_TRAILING_DIGIT_TRAILING_DIGIT_OFFSET (4)
+#define EMBER_AF_AMI_CANCEL_CONTROL_TERMINATE_WITH_RANDOMIZATION (1)
+#define EMBER_AF_AMI_CANCEL_CONTROL_TERMINATE_WITH_RANDOMIZATION_OFFSET (0)
+#define EMBER_AF_AMI_COMMAND_OPTIONS_REQUEST_RX_ON_WHEN_IDLE (1)
+#define EMBER_AF_AMI_COMMAND_OPTIONS_REQUEST_RX_ON_WHEN_IDLE_OFFSET (0)
+#define EMBER_AF_AMI_DEVICE_CLASS_HVAC_COMPRESSOR_OR_FURNACE (1)
+#define EMBER_AF_AMI_DEVICE_CLASS_HVAC_COMPRESSOR_OR_FURNACE_OFFSET (0)
+#define EMBER_AF_AMI_DEVICE_CLASS_STRIP_HEAT_BASEBOARD_HEAT (2)
+#define EMBER_AF_AMI_DEVICE_CLASS_STRIP_HEAT_BASEBOARD_HEAT_OFFSET (1)
+#define EMBER_AF_AMI_DEVICE_CLASS_WATER_HEATER (4)
+#define EMBER_AF_AMI_DEVICE_CLASS_WATER_HEATER_OFFSET (2)
+#define EMBER_AF_AMI_DEVICE_CLASS_POOL_PUMP_SPA_JACUZZI (8)
+#define EMBER_AF_AMI_DEVICE_CLASS_POOL_PUMP_SPA_JACUZZI_OFFSET (3)
+#define EMBER_AF_AMI_DEVICE_CLASS_SMART_APPLIANCES (16)
+#define EMBER_AF_AMI_DEVICE_CLASS_SMART_APPLIANCES_OFFSET (4)
+#define EMBER_AF_AMI_DEVICE_CLASS_IRRIGATION_PUMP (32)
+#define EMBER_AF_AMI_DEVICE_CLASS_IRRIGATION_PUMP_OFFSET (5)
+#define EMBER_AF_AMI_DEVICE_CLASS_MANAGED_C_AND_I_LOADS (64)
+#define EMBER_AF_AMI_DEVICE_CLASS_MANAGED_C_AND_I_LOADS_OFFSET (6)
+#define EMBER_AF_AMI_DEVICE_CLASS_SIMPLE_MISC_LOADS (128)
+#define EMBER_AF_AMI_DEVICE_CLASS_SIMPLE_MISC_LOADS_OFFSET (7)
+#define EMBER_AF_AMI_DEVICE_CLASS_EXTERIOR_LIGHTING (256)
+#define EMBER_AF_AMI_DEVICE_CLASS_EXTERIOR_LIGHTING_OFFSET (8)
+#define EMBER_AF_AMI_DEVICE_CLASS_INTERIOR_LIGHTING (512)
+#define EMBER_AF_AMI_DEVICE_CLASS_INTERIOR_LIGHTING_OFFSET (9)
+#define EMBER_AF_AMI_DEVICE_CLASS_ELECTRIC_VEHICLE (1024)
+#define EMBER_AF_AMI_DEVICE_CLASS_ELECTRIC_VEHICLE_OFFSET (10)
+#define EMBER_AF_AMI_DEVICE_CLASS_GENERATION_SYSTEMS (2048)
+#define EMBER_AF_AMI_DEVICE_CLASS_GENERATION_SYSTEMS_OFFSET (11)
+#define EMBER_AF_AMI_EVENT_CONTROL_RANDOMIZED_START_TIME (1)
+#define EMBER_AF_AMI_EVENT_CONTROL_RANDOMIZED_START_TIME_OFFSET (0)
+#define EMBER_AF_AMI_EVENT_CONTROL_RANDOMIZED_END_TIME (2)
+#define EMBER_AF_AMI_EVENT_CONTROL_RANDOMIZED_END_TIME_OFFSET (1)
+#define EMBER_AF_AMI_METER_STATUS_CHECK_METER (1)
+#define EMBER_AF_AMI_METER_STATUS_CHECK_METER_OFFSET (0)
+#define EMBER_AF_AMI_METER_STATUS_LOW_BATTERY (2)
+#define EMBER_AF_AMI_METER_STATUS_LOW_BATTERY_OFFSET (1)
+#define EMBER_AF_AMI_METER_STATUS_TAMPER_DETECT (4)
+#define EMBER_AF_AMI_METER_STATUS_TAMPER_DETECT_OFFSET (2)
+#define EMBER_AF_AMI_METER_STATUS_POWER_FAILURE (8)
+#define EMBER_AF_AMI_METER_STATUS_POWER_FAILURE_OFFSET (3)
+#define EMBER_AF_AMI_METER_STATUS_POWER_QUALITY (16)
+#define EMBER_AF_AMI_METER_STATUS_POWER_QUALITY_OFFSET (4)
+#define EMBER_AF_AMI_METER_STATUS_LEAK_DETECT (32)
+#define EMBER_AF_AMI_METER_STATUS_LEAK_DETECT_OFFSET (5)
+#define EMBER_AF_AMI_METER_STATUS_SERVICE_DISCONNECT_OPEN (64)
+#define EMBER_AF_AMI_METER_STATUS_SERVICE_DISCONNECT_OPEN_OFFSET (6)
+#define EMBER_AF_AMI_METER_STATUS_RESERVED (128)
+#define EMBER_AF_AMI_METER_STATUS_RESERVED_OFFSET (7)
+#define EMBER_AF_AUXILIARY_LOAD_SWITCH_STATE_AUXILIARY_SWITCH1 (1)
+#define EMBER_AF_AUXILIARY_LOAD_SWITCH_STATE_AUXILIARY_SWITCH1_OFFSET (0)
+#define EMBER_AF_AUXILIARY_LOAD_SWITCH_STATE_AUXILIARY_SWITCH2 (2)
+#define EMBER_AF_AUXILIARY_LOAD_SWITCH_STATE_AUXILIARY_SWITCH2_OFFSET (1)
+#define EMBER_AF_AUXILIARY_LOAD_SWITCH_STATE_AUXILIARY_SWITCH3 (4)
+#define EMBER_AF_AUXILIARY_LOAD_SWITCH_STATE_AUXILIARY_SWITCH3_OFFSET (2)
+#define EMBER_AF_AUXILIARY_LOAD_SWITCH_STATE_AUXILIARY_SWITCH4 (8)
+#define EMBER_AF_AUXILIARY_LOAD_SWITCH_STATE_AUXILIARY_SWITCH4_OFFSET (3)
+#define EMBER_AF_AUXILIARY_LOAD_SWITCH_STATE_AUXILIARY_SWITCH5 (16)
+#define EMBER_AF_AUXILIARY_LOAD_SWITCH_STATE_AUXILIARY_SWITCH5_OFFSET (4)
+#define EMBER_AF_AUXILIARY_LOAD_SWITCH_STATE_AUXILIARY_SWITCH6 (32)
+#define EMBER_AF_AUXILIARY_LOAD_SWITCH_STATE_AUXILIARY_SWITCH6_OFFSET (5)
+#define EMBER_AF_AUXILIARY_LOAD_SWITCH_STATE_AUXILIARY_SWITCH7 (64)
+#define EMBER_AF_AUXILIARY_LOAD_SWITCH_STATE_AUXILIARY_SWITCH7_OFFSET (6)
+#define EMBER_AF_AUXILIARY_LOAD_SWITCH_STATE_AUXILIARY_SWITCH8 (128)
+#define EMBER_AF_AUXILIARY_LOAD_SWITCH_STATE_AUXILIARY_SWITCH8_OFFSET (7)
+#define EMBER_AF_BALLAST_STATUS_NON_OPERATIONAL (1)
+#define EMBER_AF_BALLAST_STATUS_NON_OPERATIONAL_OFFSET (0)
+#define EMBER_AF_BALLAST_STATUS_LAMP_NOT_IN_SOCKET (2)
+#define EMBER_AF_BALLAST_STATUS_LAMP_NOT_IN_SOCKET_OFFSET (1)
+#define EMBER_AF_BARRIER_CONTROL_CAPABILITIES_PARTIAL_BARRIER (1)
+#define EMBER_AF_BARRIER_CONTROL_CAPABILITIES_PARTIAL_BARRIER_OFFSET (0)
+#define EMBER_AF_BARRIER_CONTROL_SAFETY_STATUS_REMOTE_LOCKOUT (1)
+#define EMBER_AF_BARRIER_CONTROL_SAFETY_STATUS_REMOTE_LOCKOUT_OFFSET (0)
+#define EMBER_AF_BARRIER_CONTROL_SAFETY_STATUS_TEMPER_DETECTED (2)
+#define EMBER_AF_BARRIER_CONTROL_SAFETY_STATUS_TEMPER_DETECTED_OFFSET (1)
+#define EMBER_AF_BARRIER_CONTROL_SAFETY_STATUS_FAILED_COMMUNICATION (4)
+#define EMBER_AF_BARRIER_CONTROL_SAFETY_STATUS_FAILED_COMMUNICATION_OFFSET (2)
+#define EMBER_AF_BARRIER_CONTROL_SAFETY_STATUS_POSITION_FAILURE (8)
+#define EMBER_AF_BARRIER_CONTROL_SAFETY_STATUS_POSITION_FAILURE_OFFSET (3)
+#define EMBER_AF_BATTERY_ALARM_MASK_VOLTAGE_TOO_LOW (1)
+#define EMBER_AF_BATTERY_ALARM_MASK_VOLTAGE_TOO_LOW_OFFSET (0)
+#define EMBER_AF_BILL_TRAILING_DIGIT_TRAILING_DIGIT (240)
+#define EMBER_AF_BILL_TRAILING_DIGIT_TRAILING_DIGIT_OFFSET (4)
+#define EMBER_AF_BILLING_PERIOD_DURATION_DURATION (4194303)
+#define EMBER_AF_BILLING_PERIOD_DURATION_DURATION_OFFSET (0)
+#define EMBER_AF_BILLING_PERIOD_DURATION_UNITS (12582912)
+#define EMBER_AF_BILLING_PERIOD_DURATION_UNITS_OFFSET (22)
+#define EMBER_AF_BILLING_PERIOD_DURATION_TYPE_TIMEBASE (15)
+#define EMBER_AF_BILLING_PERIOD_DURATION_TYPE_TIMEBASE_OFFSET (0)
+#define EMBER_AF_BILLING_PERIOD_DURATION_TYPE_CONTROL (240)
+#define EMBER_AF_BILLING_PERIOD_DURATION_TYPE_CONTROL_OFFSET (4)
+#define EMBER_AF_BLOCK_PERIOD_CONTROL_PRICE_ACKNOWLEDGEMENT_REQUIREMENT (1)
+#define EMBER_AF_BLOCK_PERIOD_CONTROL_PRICE_ACKNOWLEDGEMENT_REQUIREMENT_OFFSET (0)
+#define EMBER_AF_BLOCK_PERIOD_CONTROL_REPEATING_BLOCK (2)
+#define EMBER_AF_BLOCK_PERIOD_CONTROL_REPEATING_BLOCK_OFFSET (1)
+#define EMBER_AF_BLOCK_PERIOD_DURATION_TYPE_TIMEBASE (15)
+#define EMBER_AF_BLOCK_PERIOD_DURATION_TYPE_TIMEBASE_OFFSET (0)
+#define EMBER_AF_BLOCK_PERIOD_DURATION_TYPE_CONTROL (240)
+#define EMBER_AF_BLOCK_PERIOD_DURATION_TYPE_CONTROL_OFFSET (4)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER1 (2)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER1_OFFSET (1)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER2 (4)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER2_OFFSET (2)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER3 (8)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER3_OFFSET (3)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER4 (16)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER4_OFFSET (4)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER5 (32)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER5_OFFSET (5)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER6 (64)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER6_OFFSET (6)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER7 (128)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER7_OFFSET (7)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER8 (256)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER8_OFFSET (8)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER9 (512)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER9_OFFSET (9)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER10 (1024)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER10_OFFSET (10)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER11 (2048)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER11_OFFSET (11)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER12 (4096)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER12_OFFSET (12)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER13 (8192)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER13_OFFSET (13)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER14 (16384)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER14_OFFSET (14)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER15 (32768)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER15_OFFSET (15)
+#define EMBER_AF_BLOCK_THRESHOLD_SUB_PAYLOAD_CONTROL_APPLY_TO_ALL_TOU_TIERS_OR_WHEN_BLOCK_ONLY_CHARGING (1)
+#define EMBER_AF_BLOCK_THRESHOLD_SUB_PAYLOAD_CONTROL_APPLY_TO_ALL_TOU_TIERS_OR_WHEN_BLOCK_ONLY_CHARGING_OFFSET (0)
+#define EMBER_AF_CO2_TRAILING_DIGIT_TRAILING_DIGIT (240)
+#define EMBER_AF_CO2_TRAILING_DIGIT_TRAILING_DIGIT_OFFSET (4)
+#define EMBER_AF_CALORIFIC_VALUE_TRAILING_DIGIT_TRAILING_DIGIT (240)
+#define EMBER_AF_CALORIFIC_VALUE_TRAILING_DIGIT_TRAILING_DIGIT_OFFSET (4)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL0 (1)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL0_OFFSET (0)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL0 (1)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL0_OFFSET (0)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL27 (1)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL27_OFFSET (0)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL35 (1)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL35_OFFSET (0)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL0 (1)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL0_OFFSET (0)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL1 (2)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL1_OFFSET (1)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL1 (2)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL1_OFFSET (1)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL28 (2)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL28_OFFSET (1)
+#define EMBER_AF_CHANNEL_MASK_853_CHANNEL36 (2)
+#define EMBER_AF_CHANNEL_MASK_853_CHANNEL36_OFFSET (1)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL1 (2)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL1_OFFSET (1)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL2 (4)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL2_OFFSET (2)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL2 (4)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL2_OFFSET (2)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL29 (4)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL29_OFFSET (2)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL37 (4)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL37_OFFSET (2)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL2 (4)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL2_OFFSET (2)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL3 (8)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL3_OFFSET (3)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL3 (8)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL3_OFFSET (3)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL30 (8)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL30_OFFSET (3)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL38 (8)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL38_OFFSET (3)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL3 (8)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL3_OFFSET (3)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL4 (16)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL4_OFFSET (4)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL4 (16)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL4_OFFSET (4)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL31 (16)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL31_OFFSET (4)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL39 (16)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL39_OFFSET (4)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL4 (16)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL4_OFFSET (4)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL5 (32)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL5_OFFSET (5)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL5 (32)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL5_OFFSET (5)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL32 (32)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL32_OFFSET (5)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL40 (32)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL40_OFFSET (5)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL5 (32)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL5_OFFSET (5)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL6 (64)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL6_OFFSET (6)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL6 (64)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL6_OFFSET (6)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL33 (64)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL33_OFFSET (6)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL41 (64)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL41_OFFSET (6)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL6 (64)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL6_OFFSET (6)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL7 (128)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL7_OFFSET (7)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL7 (128)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL7_OFFSET (7)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL34 (128)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL34_OFFSET (7)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL42 (128)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL42_OFFSET (7)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL7 (128)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL7_OFFSET (7)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL8 (256)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL8_OFFSET (8)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL8 (256)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL8_OFFSET (8)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL62 (256)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL62_OFFSET (8)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL43 (256)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL43_OFFSET (8)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL8 (256)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL8_OFFSET (8)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL9 (512)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL9_OFFSET (9)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL9 (512)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL9_OFFSET (9)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL44 (512)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL44_OFFSET (9)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL9 (512)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL9_OFFSET (9)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL10 (1024)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL10_OFFSET (10)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL10 (1024)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL10_OFFSET (10)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL45 (1024)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL45_OFFSET (10)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL10 (1024)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL10_OFFSET (10)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL11 (2048)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL11_OFFSET (11)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL11 (2048)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL11_OFFSET (11)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL46 (2048)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL46_OFFSET (11)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL11 (2048)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL11_OFFSET (11)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL12 (4096)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL12_OFFSET (12)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL12 (4096)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL12_OFFSET (12)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL47 (4096)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL47_OFFSET (12)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL12 (4096)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL12_OFFSET (12)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL13 (8192)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL13_OFFSET (13)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL13 (8192)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL13_OFFSET (13)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL48 (8192)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL48_OFFSET (13)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL13 (8192)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL13_OFFSET (13)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL14 (16384)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL14_OFFSET (14)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL14 (16384)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL14_OFFSET (14)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL49 (16384)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL49_OFFSET (14)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL14 (16384)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL14_OFFSET (14)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL15 (32768)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL15_OFFSET (15)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL15 (32768)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL15_OFFSET (15)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL50 (32768)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL50_OFFSET (15)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL15 (32768)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL15_OFFSET (15)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL16 (65536)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL16_OFFSET (16)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL16 (65536)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL16_OFFSET (16)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL51 (65536)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL51_OFFSET (16)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL16 (65536)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL16_OFFSET (16)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL17 (131072)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL17_OFFSET (17)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL17 (131072)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL17_OFFSET (17)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL52 (131072)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL52_OFFSET (17)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL17 (131072)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL17_OFFSET (17)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL18 (262144)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL18_OFFSET (18)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL18 (262144)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL18_OFFSET (18)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL53 (262144)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL53_OFFSET (18)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL18 (262144)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL18_OFFSET (18)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL19 (524288)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL19_OFFSET (19)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL19 (524288)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL19_OFFSET (19)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL54 (524288)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL54_OFFSET (19)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL19 (524288)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL19_OFFSET (19)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL20 (1048576)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL20_OFFSET (20)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL20 (1048576)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL20_OFFSET (20)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL55 (1048576)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL55_OFFSET (20)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL20 (1048576)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL20_OFFSET (20)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL21 (2097152)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL21_OFFSET (21)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL21 (2097152)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL21_OFFSET (21)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL56 (2097152)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL56_OFFSET (21)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL21 (2097152)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL21_OFFSET (21)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL22 (4194304)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL22_OFFSET (22)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL22 (4194304)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL22_OFFSET (22)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL57 (4194304)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL57_OFFSET (22)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL22 (4194304)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL22_OFFSET (22)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL23 (8388608)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL23_OFFSET (23)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL23 (8388608)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL23_OFFSET (23)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL58 (8388608)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL58_OFFSET (23)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL23 (8388608)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL23_OFFSET (23)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL24 (16777216)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL24_OFFSET (24)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL24 (16777216)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL24_OFFSET (24)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL59 (16777216)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL59_OFFSET (24)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL24 (16777216)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL24_OFFSET (24)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL25 (33554432)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL25_OFFSET (25)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL25 (33554432)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL25_OFFSET (25)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL60 (33554432)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL60_OFFSET (25)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL25 (33554432)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL25_OFFSET (25)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL26 (67108864)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL26_OFFSET (26)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL26 (67108864)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL26_OFFSET (26)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL61 (67108864)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL61_OFFSET (26)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL26 (67108864)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL26_OFFSET (26)
+#define EMBER_AF_CHANNEL_MASK_PAGE (4160749568)
+#define EMBER_AF_CHANNEL_MASK_PAGE_OFFSET (27)
+#define EMBER_AF_CLEARED_EVENTS_LOGS_ALL_LOGS_CLEARED (1)
+#define EMBER_AF_CLEARED_EVENTS_LOGS_ALL_LOGS_CLEARED_OFFSET (0)
+#define EMBER_AF_CLEARED_EVENTS_LOGS_TAMPER_LOG_CLEARED (2)
+#define EMBER_AF_CLEARED_EVENTS_LOGS_TAMPER_LOG_CLEARED_OFFSET (1)
+#define EMBER_AF_CLEARED_EVENTS_LOGS_FAULT_LOG_CLEARED (4)
+#define EMBER_AF_CLEARED_EVENTS_LOGS_FAULT_LOG_CLEARED_OFFSET (2)
+#define EMBER_AF_CLEARED_EVENTS_LOGS_GENERAL_EVENT_LOG_CLEARED (8)
+#define EMBER_AF_CLEARED_EVENTS_LOGS_GENERAL_EVENT_LOG_CLEARED_OFFSET (3)
+#define EMBER_AF_CLEARED_EVENTS_LOGS_SECURITY_EVENT_LOG_CLEARED (16)
+#define EMBER_AF_CLEARED_EVENTS_LOGS_SECURITY_EVENT_LOG_CLEARED_OFFSET (4)
+#define EMBER_AF_CLEARED_EVENTS_LOGS_NETWORK_EVENT_LOG_CLEARED (32)
+#define EMBER_AF_CLEARED_EVENTS_LOGS_NETWORK_EVENT_LOG_CLEARED_OFFSET (5)
+#define EMBER_AF_COLOR_CAPABILITIES_HUE_SATURATION_SUPPORTED (1)
+#define EMBER_AF_COLOR_CAPABILITIES_HUE_SATURATION_SUPPORTED_OFFSET (0)
+#define EMBER_AF_COLOR_CAPABILITIES_ENHANCED_HUE_SUPPORTED (2)
+#define EMBER_AF_COLOR_CAPABILITIES_ENHANCED_HUE_SUPPORTED_OFFSET (1)
+#define EMBER_AF_COLOR_CAPABILITIES_COLOR_LOOP_SUPPORTED (4)
+#define EMBER_AF_COLOR_CAPABILITIES_COLOR_LOOP_SUPPORTED_OFFSET (2)
+#define EMBER_AF_COLOR_CAPABILITIES_XY_ATTRIBUTES_SUPPORTED (8)
+#define EMBER_AF_COLOR_CAPABILITIES_XY_ATTRIBUTES_SUPPORTED_OFFSET (3)
+#define EMBER_AF_COLOR_CAPABILITIES_COLOR_TEMPERATURE_SUPPORTED (16)
+#define EMBER_AF_COLOR_CAPABILITIES_COLOR_TEMPERATURE_SUPPORTED_OFFSET (4)
+#define EMBER_AF_COLOR_LOOP_UPDATE_FLAGS_UPDATE_ACTION (1)
+#define EMBER_AF_COLOR_LOOP_UPDATE_FLAGS_UPDATE_ACTION_OFFSET (0)
+#define EMBER_AF_COLOR_LOOP_UPDATE_FLAGS_UPDATE_DIRECTION (2)
+#define EMBER_AF_COLOR_LOOP_UPDATE_FLAGS_UPDATE_DIRECTION_OFFSET (1)
+#define EMBER_AF_COLOR_LOOP_UPDATE_FLAGS_UPDATE_TIME (4)
+#define EMBER_AF_COLOR_LOOP_UPDATE_FLAGS_UPDATE_TIME_OFFSET (2)
+#define EMBER_AF_COLOR_LOOP_UPDATE_FLAGS_UPDATE_START_HUE (8)
+#define EMBER_AF_COLOR_LOOP_UPDATE_FLAGS_UPDATE_START_HUE_OFFSET (3)
+#define EMBER_AF_CONVERSION_FACTOR_TRAILING_DIGIT_TRAILING_DIGIT (240)
+#define EMBER_AF_CONVERSION_FACTOR_TRAILING_DIGIT_TRAILING_DIGIT_OFFSET (4)
+#define EMBER_AF_CREDIT_STATUS_CREDIT_OK (1)
+#define EMBER_AF_CREDIT_STATUS_CREDIT_OK_OFFSET (0)
+#define EMBER_AF_CREDIT_STATUS_LOW_CREDIT (2)
+#define EMBER_AF_CREDIT_STATUS_LOW_CREDIT_OFFSET (1)
+#define EMBER_AF_CREDIT_STATUS_EMERGENCY_CREDIT_ENABLED (4)
+#define EMBER_AF_CREDIT_STATUS_EMERGENCY_CREDIT_ENABLED_OFFSET (2)
+#define EMBER_AF_CREDIT_STATUS_EMERGENCY_CREDIT_AVAILABLE (8)
+#define EMBER_AF_CREDIT_STATUS_EMERGENCY_CREDIT_AVAILABLE_OFFSET (3)
+#define EMBER_AF_CREDIT_STATUS_EMERGENCY_CREDIT_SELECTED (16)
+#define EMBER_AF_CREDIT_STATUS_EMERGENCY_CREDIT_SELECTED_OFFSET (4)
+#define EMBER_AF_CREDIT_STATUS_EMERGENCY_CREDIT_IN_USE (32)
+#define EMBER_AF_CREDIT_STATUS_EMERGENCY_CREDIT_IN_USE_OFFSET (5)
+#define EMBER_AF_CREDIT_STATUS_CREDIT_EXHAUSTED (64)
+#define EMBER_AF_CREDIT_STATUS_CREDIT_EXHAUSTED_OFFSET (6)
+#define EMBER_AF_CURRENCY_CHANGE_CONTROL_CLEAR_BILLING_INFO (1)
+#define EMBER_AF_CURRENCY_CHANGE_CONTROL_CLEAR_BILLING_INFO_OFFSET (0)
+#define EMBER_AF_CURRENCY_CHANGE_CONTROL_CONVERT_BILLING_INFO_USING_NEW_CURRENCY (2)
+#define EMBER_AF_CURRENCY_CHANGE_CONTROL_CONVERT_BILLING_INFO_USING_NEW_CURRENCY_OFFSET (1)
+#define EMBER_AF_CURRENCY_CHANGE_CONTROL_CLEAR_OLD_CONSUMPTION_DATA (4)
+#define EMBER_AF_CURRENCY_CHANGE_CONTROL_CLEAR_OLD_CONSUMPTION_DATA_OFFSET (2)
+#define EMBER_AF_CURRENCY_CHANGE_CONTROL_CONVERT_OLD_CONSUMPTION_DATA_USING_NEW_CURRENCY (8)
+#define EMBER_AF_CURRENCY_CHANGE_CONTROL_CONVERT_OLD_CONSUMPTION_DATA_USING_NEW_CURRENCY_OFFSET (3)
+#define EMBER_AF_CURRENT_EVENT_STATUS_RANDOMIZED_START_TIME (1)
+#define EMBER_AF_CURRENT_EVENT_STATUS_RANDOMIZED_START_TIME_OFFSET (0)
+#define EMBER_AF_CURRENT_EVENT_STATUS_RANDOMIZED_DURATION (2)
+#define EMBER_AF_CURRENT_EVENT_STATUS_RANDOMIZED_DURATION_OFFSET (1)
+#define EMBER_AF_CURRENT_EVENT_STATUS_EXTENDED_BITS_PRESENT (4)
+#define EMBER_AF_CURRENT_EVENT_STATUS_EXTENDED_BITS_PRESENT_OFFSET (2)
+#define EMBER_AF_CURRENT_EVENT_STATUS_EVENT_ACTIVE (8)
+#define EMBER_AF_CURRENT_EVENT_STATUS_EVENT_ACTIVE_OFFSET (3)
+#define EMBER_AF_CURRENT_EVENT_STATUS_DEVICE_PARTICIPATING_IN_EVENT (16)
+#define EMBER_AF_CURRENT_EVENT_STATUS_DEVICE_PARTICIPATING_IN_EVENT_OFFSET (4)
+#define EMBER_AF_CURRENT_EVENT_STATUS_REDUCING_LOAD (32)
+#define EMBER_AF_CURRENT_EVENT_STATUS_REDUCING_LOAD_OFFSET (5)
+#define EMBER_AF_CURRENT_EVENT_STATUS_ON_AT_END_OF_EVENT (64)
+#define EMBER_AF_CURRENT_EVENT_STATUS_ON_AT_END_OF_EVENT_OFFSET (6)
+#define EMBER_AF_DAY_OF_WEEK_SUNDAY (1)
+#define EMBER_AF_DAY_OF_WEEK_SUNDAY_OFFSET (0)
+#define EMBER_AF_DAY_OF_WEEK_MONDAY (2)
+#define EMBER_AF_DAY_OF_WEEK_MONDAY_OFFSET (1)
+#define EMBER_AF_DAY_OF_WEEK_TUESDAY (4)
+#define EMBER_AF_DAY_OF_WEEK_TUESDAY_OFFSET (2)
+#define EMBER_AF_DAY_OF_WEEK_WEDNESDAY (8)
+#define EMBER_AF_DAY_OF_WEEK_WEDNESDAY_OFFSET (3)
+#define EMBER_AF_DAY_OF_WEEK_THURSDAY (16)
+#define EMBER_AF_DAY_OF_WEEK_THURSDAY_OFFSET (4)
+#define EMBER_AF_DAY_OF_WEEK_FRIDAY (32)
+#define EMBER_AF_DAY_OF_WEEK_FRIDAY_OFFSET (5)
+#define EMBER_AF_DAY_OF_WEEK_SATURDAY (64)
+#define EMBER_AF_DAY_OF_WEEK_SATURDAY_OFFSET (6)
+#define EMBER_AF_DAY_OF_WEEK_AWAY_OR_VACATION (128)
+#define EMBER_AF_DAY_OF_WEEK_AWAY_OR_VACATION_OFFSET (7)
+#define EMBER_AF_DEVICE_TEMP_ALARM_MASK_TOO_LOW (1)
+#define EMBER_AF_DEVICE_TEMP_ALARM_MASK_TOO_LOW_OFFSET (0)
+#define EMBER_AF_DEVICE_TEMP_ALARM_MASK_TOO_HIGH (2)
+#define EMBER_AF_DEVICE_TEMP_ALARM_MASK_TOO_HIGH_OFFSET (1)
+#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_SUNDAY (1)
+#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_SUNDAY_OFFSET (0)
+#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_MONDAY (2)
+#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_MONDAY_OFFSET (1)
+#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_TUESDAY (4)
+#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_TUESDAY_OFFSET (2)
+#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_WEDNESDAY (8)
+#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_WEDNESDAY_OFFSET (3)
+#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_THURSDAY (16)
+#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_THURSDAY_OFFSET (4)
+#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_FRIDAY (32)
+#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_FRIDAY_OFFSET (5)
+#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_SATURDAY (64)
+#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_SATURDAY_OFFSET (6)
+#define EMBER_AF_ENERGY_FORMATTING_NUMBER_OF_DIGITS_TO_THE_RIGHT_OF_THE_DECIMAL_POINT (7)
+#define EMBER_AF_ENERGY_FORMATTING_NUMBER_OF_DIGITS_TO_THE_RIGHT_OF_THE_DECIMAL_POINT_OFFSET (0)
+#define EMBER_AF_ENERGY_FORMATTING_NUMBER_OF_DIGITS_TO_THE_LEFT_OF_THE_DECIMAL_POINT (120)
+#define EMBER_AF_ENERGY_FORMATTING_NUMBER_OF_DIGITS_TO_THE_LEFT_OF_THE_DECIMAL_POINT_OFFSET (3)
+#define EMBER_AF_ENERGY_FORMATTING_SUPPRESS_LEADING_ZEROS (128)
+#define EMBER_AF_ENERGY_FORMATTING_SUPPRESS_LEADING_ZEROS_OFFSET (7)
+#define EMBER_AF_EVENT_ACTION_CONTROL_REPORT_EVENT_TO_HAN_DEVICES (1)
+#define EMBER_AF_EVENT_ACTION_CONTROL_REPORT_EVENT_TO_HAN_DEVICES_OFFSET (0)
+#define EMBER_AF_EVENT_ACTION_CONTROL_REPORT_EVENT_TO_WAN (2)
+#define EMBER_AF_EVENT_ACTION_CONTROL_REPORT_EVENT_TO_WAN_OFFSET (1)
+#define EMBER_AF_EVENT_CONFIGURATION_LOG_ACTION (7)
+#define EMBER_AF_EVENT_CONFIGURATION_LOG_ACTION_OFFSET (0)
+#define EMBER_AF_EVENT_CONFIGURATION_PUSH_EVENT_TO_WAN (8)
+#define EMBER_AF_EVENT_CONFIGURATION_PUSH_EVENT_TO_WAN_OFFSET (3)
+#define EMBER_AF_EVENT_CONFIGURATION_PUSH_EVENT_TO_HAN (16)
+#define EMBER_AF_EVENT_CONFIGURATION_PUSH_EVENT_TO_HAN_OFFSET (4)
+#define EMBER_AF_EVENT_CONFIGURATION_RAISE_ALARM_ZIG_BEE (32)
+#define EMBER_AF_EVENT_CONFIGURATION_RAISE_ALARM_ZIG_BEE_OFFSET (5)
+#define EMBER_AF_EVENT_CONFIGURATION_RAISE_ALARM_PHYSICAL (64)
+#define EMBER_AF_EVENT_CONFIGURATION_RAISE_ALARM_PHYSICAL_OFFSET (6)
+#define EMBER_AF_EVENT_CONTROL_LOG_ID_LOG_ID (15)
+#define EMBER_AF_EVENT_CONTROL_LOG_ID_LOG_ID_OFFSET (0)
+#define EMBER_AF_EVENT_CONTROL_LOG_ID_EVENT_CONTROL (240)
+#define EMBER_AF_EVENT_CONTROL_LOG_ID_EVENT_CONTROL_OFFSET (4)
+#define EMBER_AF_FRIENDLY_CREDIT_FRIENDLY_CREDIT_ENABLED (1)
+#define EMBER_AF_FRIENDLY_CREDIT_FRIENDLY_CREDIT_ENABLED_OFFSET (0)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_NEW_OTA_FIRMWARE (1)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_NEW_OTA_FIRMWARE_OFFSET (0)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_CBKE_UPDATE_REQUEST (2)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_CBKE_UPDATE_REQUEST_OFFSET (1)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_TIME_SYNC (4)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_TIME_SYNC_OFFSET (2)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_STAY_AWAKE_REQUEST_HAN (16)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_STAY_AWAKE_REQUEST_HAN_OFFSET (4)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_STAY_AWAKE_REQUEST_WAN (32)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_STAY_AWAKE_REQUEST_WAN_OFFSET (5)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_PUSH_HISTORICAL_METERING_DATA_ATTRIBUTE_SET (448)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_PUSH_HISTORICAL_METERING_DATA_ATTRIBUTE_SET_OFFSET (6)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_PUSH_HISTORICAL_PREPAYMENT_DATA_ATTRIBUTE_SET (3584)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_PUSH_HISTORICAL_PREPAYMENT_DATA_ATTRIBUTE_SET_OFFSET (9)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_PUSH_ALL_STATIC_DATA_BASIC_CLUSTER (4096)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_PUSH_ALL_STATIC_DATA_BASIC_CLUSTER_OFFSET (12)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_PUSH_ALL_STATIC_DATA_METERING_CLUSTER (8192)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_PUSH_ALL_STATIC_DATA_METERING_CLUSTER_OFFSET (13)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_PUSH_ALL_STATIC_DATA_PREPAYMENT_CLUSTER (16384)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_PUSH_ALL_STATIC_DATA_PREPAYMENT_CLUSTER_OFFSET (14)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_NETWORK_KEY_ACTIVE (32768)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_NETWORK_KEY_ACTIVE_OFFSET (15)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_DISPLAY_MESSAGE (65536)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_DISPLAY_MESSAGE_OFFSET (16)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_CANCEL_ALL_MESSAGES (131072)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_CANCEL_ALL_MESSAGES_OFFSET (17)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_CHANGE_SUPPLY (262144)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_CHANGE_SUPPLY_OFFSET (18)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_LOCAL_CHANGE_SUPPLY (524288)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_LOCAL_CHANGE_SUPPLY_OFFSET (19)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_SET_UNCONTROLLED_FLOW_THRESHOLD (1048576)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_SET_UNCONTROLLED_FLOW_THRESHOLD_OFFSET (20)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_TUNNEL_MESSAGE_PENDING (2097152)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_TUNNEL_MESSAGE_PENDING_OFFSET (21)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_GET_SNAPSHOT (4194304)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_GET_SNAPSHOT_OFFSET (22)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_GET_SAMPLED_DATA (8388608)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_GET_SAMPLED_DATA_OFFSET (23)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_NEW_SUB_GHZ_CHANNEL_MASKS_AVAILABLE (16777216)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_NEW_SUB_GHZ_CHANNEL_MASKS_AVAILABLE_OFFSET (24)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_ENERGY_SCAN_PENDING (33554432)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_ENERGY_SCAN_PENDING_OFFSET (25)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_CHANNEL_CHANGE_PENDING (67108864)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_CHANNEL_CHANGE_PENDING_OFFSET (26)
+#define EMBER_AF_GET_LOCATION_DATA_FLAGS_ABSOLUTE_ONLY (1)
+#define EMBER_AF_GET_LOCATION_DATA_FLAGS_ABSOLUTE_ONLY_OFFSET (0)
+#define EMBER_AF_GET_LOCATION_DATA_FLAGS_RECALCULATE (2)
+#define EMBER_AF_GET_LOCATION_DATA_FLAGS_RECALCULATE_OFFSET (1)
+#define EMBER_AF_GET_LOCATION_DATA_FLAGS_BROADCAST (4)
+#define EMBER_AF_GET_LOCATION_DATA_FLAGS_BROADCAST_OFFSET (2)
+#define EMBER_AF_GET_LOCATION_DATA_FLAGS_BROADCAST_RESPONSE (8)
+#define EMBER_AF_GET_LOCATION_DATA_FLAGS_BROADCAST_RESPONSE_OFFSET (3)
+#define EMBER_AF_GET_LOCATION_DATA_FLAGS_COMPACT_RESPONSE (16)
+#define EMBER_AF_GET_LOCATION_DATA_FLAGS_COMPACT_RESPONSE_OFFSET (4)
+#define EMBER_AF_GP_APPLICATION_INFORMATION_MANUFACTURE_ID_PRESENT (1)
+#define EMBER_AF_GP_APPLICATION_INFORMATION_MANUFACTURE_ID_PRESENT_OFFSET (0)
+#define EMBER_AF_GP_APPLICATION_INFORMATION_MODEL_ID_PRESENT (2)
+#define EMBER_AF_GP_APPLICATION_INFORMATION_MODEL_ID_PRESENT_OFFSET (1)
+#define EMBER_AF_GP_APPLICATION_INFORMATION_GPD_COMMANDS_PRESENT (4)
+#define EMBER_AF_GP_APPLICATION_INFORMATION_GPD_COMMANDS_PRESENT_OFFSET (2)
+#define EMBER_AF_GP_APPLICATION_INFORMATION_CLUSTER_LIST_PRESENT (8)
+#define EMBER_AF_GP_APPLICATION_INFORMATION_CLUSTER_LIST_PRESENT_OFFSET (3)
+#define EMBER_AF_GP_APPLICATION_INFORMATION_SWITCH_INFORMATION_PRESENT (16)
+#define EMBER_AF_GP_APPLICATION_INFORMATION_SWITCH_INFORMATION_PRESENT_OFFSET (4)
+#define EMBER_AF_GP_APPLICATION_INFORMATION_APPLICATION_DESCRIPTION_PRESENT (32)
+#define EMBER_AF_GP_APPLICATION_INFORMATION_APPLICATION_DESCRIPTION_PRESENT_OFFSET (5)
+#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_APPLICATION_ID (7)
+#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_APPLICATION_ID_OFFSET (0)
+#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_RX_AFTER_TX (8)
+#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_RX_AFTER_TX_OFFSET (3)
+#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_SECURITY_LEVEL (48)
+#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_SECURITY_LEVEL_OFFSET (4)
+#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_SECURITY_KEY_TYPE (448)
+#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_SECURITY_KEY_TYPE_OFFSET (6)
+#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_SECURITY_PROCESSING_FAILED (512)
+#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_SECURITY_PROCESSING_FAILED_OFFSET (9)
+#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_BIDIRECTIONAL_CAPABILITY (1024)
+#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_BIDIRECTIONAL_CAPABILITY_OFFSET (10)
+#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_PROXY_INFO_PRESENT (2048)
+#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_PROXY_INFO_PRESENT_OFFSET (11)
+#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_RESERVED (61440)
+#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_RESERVED_OFFSET (12)
+#define EMBER_AF_GP_GPD_CHANNEL_CONFIGURATION_CHANNEL_MASK (31)
+#define EMBER_AF_GP_GPD_CHANNEL_CONFIGURATION_CHANNEL_MASK_OFFSET (0)
+#define EMBER_AF_GP_GPD_CHANNEL_CONFIGURATION_CHANNEL_OPERATIONAL_CHANNEL (15)
+#define EMBER_AF_GP_GPD_CHANNEL_CONFIGURATION_CHANNEL_OPERATIONAL_CHANNEL_OFFSET (0)
+#define EMBER_AF_GP_GPD_CHANNEL_CONFIGURATION_CHANNEL_BASIC (16)
+#define EMBER_AF_GP_GPD_CHANNEL_CONFIGURATION_CHANNEL_BASIC_OFFSET (4)
+#define EMBER_AF_GP_GPD_CHANNEL_CONFIGURATION_CHANNEL_RESERVED (224)
+#define EMBER_AF_GP_GPD_CHANNEL_CONFIGURATION_CHANNEL_RESERVED_OFFSET (5)
+#define EMBER_AF_GP_GPD_CHANNEL_REQUEST_CHANNEL_TOGGLING_BEHAVIOUR_RX_CHANNEL_NEXT_ATTEMPT (15)
+#define EMBER_AF_GP_GPD_CHANNEL_REQUEST_CHANNEL_TOGGLING_BEHAVIOUR_RX_CHANNEL_NEXT_ATTEMPT_OFFSET (0)
+#define EMBER_AF_GP_GPD_CHANNEL_REQUEST_CHANNEL_TOGGLING_BEHAVIOUR_RX_CHANNEL_SECOND_NEXT_ATTEMPT (240)
+#define EMBER_AF_GP_GPD_CHANNEL_REQUEST_CHANNEL_TOGGLING_BEHAVIOUR_RX_CHANNEL_SECOND_NEXT_ATTEMPT_OFFSET (4)
+#define EMBER_AF_GP_GPD_COMMISSIONING_EXTENDED_OPTIONS_SECURITY_LEVEL_CAPABILITIES (3)
+#define EMBER_AF_GP_GPD_COMMISSIONING_EXTENDED_OPTIONS_SECURITY_LEVEL_CAPABILITIES_OFFSET (0)
+#define EMBER_AF_GP_GPD_COMMISSIONING_EXTENDED_OPTIONS_KEY_TYPE (28)
+#define EMBER_AF_GP_GPD_COMMISSIONING_EXTENDED_OPTIONS_KEY_TYPE_OFFSET (2)
+#define EMBER_AF_GP_GPD_COMMISSIONING_EXTENDED_OPTIONS_GPD_KEY_PRESENT (32)
+#define EMBER_AF_GP_GPD_COMMISSIONING_EXTENDED_OPTIONS_GPD_KEY_PRESENT_OFFSET (5)
+#define EMBER_AF_GP_GPD_COMMISSIONING_EXTENDED_OPTIONS_GPD_KEY_ENCRYPTION (64)
+#define EMBER_AF_GP_GPD_COMMISSIONING_EXTENDED_OPTIONS_GPD_KEY_ENCRYPTION_OFFSET (6)
+#define EMBER_AF_GP_GPD_COMMISSIONING_EXTENDED_OPTIONS_GPD_OUTGOING_COUNTER_PRESENT (128)
+#define EMBER_AF_GP_GPD_COMMISSIONING_EXTENDED_OPTIONS_GPD_OUTGOING_COUNTER_PRESENT_OFFSET (7)
+#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_MAC_SEQ_NUM_CAP (1)
+#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_MAC_SEQ_NUM_CAP_OFFSET (0)
+#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_RX_ON_CAP (2)
+#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_RX_ON_CAP_OFFSET (1)
+#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_APPLICATION_INFORMATION_PRESENT (4)
+#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_APPLICATION_INFORMATION_PRESENT_OFFSET (2)
+#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_RESERVED (8)
+#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_RESERVED_OFFSET (3)
+#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_PAN_ID_REQUEST (16)
+#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_PAN_ID_REQUEST_OFFSET (4)
+#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_GP_SECURITY_KEY_REQUEST (32)
+#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_GP_SECURITY_KEY_REQUEST_OFFSET (5)
+#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_FIXED_LOCATION (64)
+#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_FIXED_LOCATION_OFFSET (6)
+#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_EXTENDED_OPTIONS_FIELD (128)
+#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_EXTENDED_OPTIONS_FIELD_OFFSET (7)
+#define EMBER_AF_GP_GPD_COMMISSIONING_REPLY_OPTIONS_PAN_ID_PRESENT (1)
+#define EMBER_AF_GP_GPD_COMMISSIONING_REPLY_OPTIONS_PAN_ID_PRESENT_OFFSET (0)
+#define EMBER_AF_GP_GPD_COMMISSIONING_REPLY_OPTIONS_GPD_SECURITY_KEY_PRESENT (2)
+#define EMBER_AF_GP_GPD_COMMISSIONING_REPLY_OPTIONS_GPD_SECURITY_KEY_PRESENT_OFFSET (1)
+#define EMBER_AF_GP_GPD_COMMISSIONING_REPLY_OPTIONS_GPDKEY_ENCRYPTION (4)
+#define EMBER_AF_GP_GPD_COMMISSIONING_REPLY_OPTIONS_GPDKEY_ENCRYPTION_OFFSET (2)
+#define EMBER_AF_GP_GPD_COMMISSIONING_REPLY_OPTIONS_SECURITY_LEVEL (24)
+#define EMBER_AF_GP_GPD_COMMISSIONING_REPLY_OPTIONS_SECURITY_LEVEL_OFFSET (3)
+#define EMBER_AF_GP_GPD_COMMISSIONING_REPLY_OPTIONS_KEY_TYPE (224)
+#define EMBER_AF_GP_GPD_COMMISSIONING_REPLY_OPTIONS_KEY_TYPE_OFFSET (5)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_GP_FEATURE (1)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_GP_FEATURE_OFFSET (0)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_DIRECT_COMMUNICATION (2)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_DIRECT_COMMUNICATION_OFFSET (1)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_DERIVED_GROUPCAST_COMMUNICATION (4)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_DERIVED_GROUPCAST_COMMUNICATION_OFFSET (2)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_PRE_COMMISSIONED_GROUPCAST_COMMUNICATION (8)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_PRE_COMMISSIONED_GROUPCAST_COMMUNICATION_OFFSET (3)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_FULL_UNICAST_COMMUNICATION (16)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_FULL_UNICAST_COMMUNICATION_OFFSET (4)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_LIGHTWEIGHT_UNICAST_COMMUNICATION (32)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_LIGHTWEIGHT_UNICAST_COMMUNICATION_OFFSET (5)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_PROXIMITY_BIDIRECTIONAL_COMMUNICATION (64)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_PROXIMITY_BIDIRECTIONAL_COMMUNICATION_OFFSET (6)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_MULTIHOP_BIDIRECTIONAL_COMMUNICATION (128)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_MULTIHOP_BIDIRECTIONAL_COMMUNICATION_OFFSET (7)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_PROXY_TABLE_MAINTAINANCE (256)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_PROXY_TABLE_MAINTAINANCE_OFFSET (8)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_PROXIMITY_COMMUNICATION (512)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_PROXIMITY_COMMUNICATION_OFFSET (9)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_MULTIHOP_COMMUNICATION (1024)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_MULTIHOP_COMMUNICATION_OFFSET (10)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_CT_BASED_COMMISSIONING (2048)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_CT_BASED_COMMISSIONING_OFFSET (11)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_MAINTAINANCE_GPDF (4096)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_MAINTAINANCE_GPDF_OFFSET (12)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_GPD_SECURITY_LEVEL0_IN_OPERATION (8192)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_GPD_SECURITY_LEVEL0_IN_OPERATION_OFFSET (13)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_GPD_SECURITY_LEVEL1_IN_OPERATION (16384)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_GPD_SECURITY_LEVEL1_IN_OPERATION_OFFSET (14)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_GPD_SECURITY_LEVEL2_IN_OPERATION (32768)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_GPD_SECURITY_LEVEL2_IN_OPERATION_OFFSET (15)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_GPD_SECURITY_LEVEL3_IN_OPERATION (65536)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_GPD_SECURITY_LEVEL3_IN_OPERATION_OFFSET (16)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_SINK_TABLE_BASED_GROUPCAST_FORWARDING (131072)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_SINK_TABLE_BASED_GROUPCAST_FORWARDING_OFFSET (17)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_TRANSLATION_TABLE (262144)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_TRANSLATION_TABLE_OFFSET (18)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_GPD_IEEE_ADDRESS (524288)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_GPD_IEEE_ADDRESS_OFFSET (19)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_COMPACT_ATTRIBUTE_REPORTING (1048576)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_COMPACT_ATTRIBUTE_REPORTING_OFFSET (20)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_RESERVED (14680064)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_RESERVED_OFFSET (21)
+#define EMBER_AF_GP_NOTIFICATION_OPTION_APPLICATION_ID (7)
+#define EMBER_AF_GP_NOTIFICATION_OPTION_APPLICATION_ID_OFFSET (0)
+#define EMBER_AF_GP_NOTIFICATION_OPTION_ALSO_UNICAST (8)
+#define EMBER_AF_GP_NOTIFICATION_OPTION_ALSO_UNICAST_OFFSET (3)
+#define EMBER_AF_GP_NOTIFICATION_OPTION_ALSO_DERIVED_GROUP (16)
+#define EMBER_AF_GP_NOTIFICATION_OPTION_ALSO_DERIVED_GROUP_OFFSET (4)
+#define EMBER_AF_GP_NOTIFICATION_OPTION_ALSO_COMMISSIONED_GROUP (32)
+#define EMBER_AF_GP_NOTIFICATION_OPTION_ALSO_COMMISSIONED_GROUP_OFFSET (5)
+#define EMBER_AF_GP_NOTIFICATION_OPTION_SECURITY_LEVEL (192)
+#define EMBER_AF_GP_NOTIFICATION_OPTION_SECURITY_LEVEL_OFFSET (6)
+#define EMBER_AF_GP_NOTIFICATION_OPTION_SECURITY_KEY_TYPE (1792)
+#define EMBER_AF_GP_NOTIFICATION_OPTION_SECURITY_KEY_TYPE_OFFSET (8)
+#define EMBER_AF_GP_NOTIFICATION_OPTION_RX_AFTER_TX (2048)
+#define EMBER_AF_GP_NOTIFICATION_OPTION_RX_AFTER_TX_OFFSET (11)
+#define EMBER_AF_GP_NOTIFICATION_OPTION_GP_TX_QUEUE_FULL (4096)
+#define EMBER_AF_GP_NOTIFICATION_OPTION_GP_TX_QUEUE_FULL_OFFSET (12)
+#define EMBER_AF_GP_NOTIFICATION_OPTION_BIDIRECTIONAL_CAPABILITY (8192)
+#define EMBER_AF_GP_NOTIFICATION_OPTION_BIDIRECTIONAL_CAPABILITY_OFFSET (13)
+#define EMBER_AF_GP_NOTIFICATION_OPTION_PROXY_INFO_PRESENT (16384)
+#define EMBER_AF_GP_NOTIFICATION_OPTION_PROXY_INFO_PRESENT_OFFSET (14)
+#define EMBER_AF_GP_NOTIFICATION_OPTION_RESERVED (32768)
+#define EMBER_AF_GP_NOTIFICATION_OPTION_RESERVED_OFFSET (15)
+#define EMBER_AF_GP_NOTIFICATION_RESPONSE_OPTION_APPLICATION_ID (7)
+#define EMBER_AF_GP_NOTIFICATION_RESPONSE_OPTION_APPLICATION_ID_OFFSET (0)
+#define EMBER_AF_GP_NOTIFICATION_RESPONSE_OPTION_FIRST_TO_FORWARD (8)
+#define EMBER_AF_GP_NOTIFICATION_RESPONSE_OPTION_FIRST_TO_FORWARD_OFFSET (3)
+#define EMBER_AF_GP_NOTIFICATION_RESPONSE_OPTION_NO_PAIRING (16)
+#define EMBER_AF_GP_NOTIFICATION_RESPONSE_OPTION_NO_PAIRING_OFFSET (4)
+#define EMBER_AF_GP_NOTIFICATION_RESPONSE_OPTION_RESERVED (224)
+#define EMBER_AF_GP_NOTIFICATION_RESPONSE_OPTION_RESERVED_OFFSET (5)
+#define EMBER_AF_GP_PAIRING_CONFIGURATION_ACTIONS_ACTION (7)
+#define EMBER_AF_GP_PAIRING_CONFIGURATION_ACTIONS_ACTION_OFFSET (0)
+#define EMBER_AF_GP_PAIRING_CONFIGURATION_ACTIONS_SEND_GP_PAIRING (8)
+#define EMBER_AF_GP_PAIRING_CONFIGURATION_ACTIONS_SEND_GP_PAIRING_OFFSET (3)
+#define EMBER_AF_GP_PAIRING_CONFIGURATION_ACTIONS_RESERVED (240)
+#define EMBER_AF_GP_PAIRING_CONFIGURATION_ACTIONS_RESERVED_OFFSET (4)
+#define EMBER_AF_GP_PAIRING_CONFIGURATION_OPTION_APPLICATION_ID (7)
+#define EMBER_AF_GP_PAIRING_CONFIGURATION_OPTION_APPLICATION_ID_OFFSET (0)
+#define EMBER_AF_GP_PAIRING_CONFIGURATION_OPTION_COMMUNICATION_MODE (24)
+#define EMBER_AF_GP_PAIRING_CONFIGURATION_OPTION_COMMUNICATION_MODE_OFFSET (3)
+#define EMBER_AF_GP_PAIRING_CONFIGURATION_OPTION_SEQUENCE_NUMBER_CAPABILITIES (32)
+#define EMBER_AF_GP_PAIRING_CONFIGURATION_OPTION_SEQUENCE_NUMBER_CAPABILITIES_OFFSET (5)
+#define EMBER_AF_GP_PAIRING_CONFIGURATION_OPTION_RX_ON_CAPABILITY (64)
+#define EMBER_AF_GP_PAIRING_CONFIGURATION_OPTION_RX_ON_CAPABILITY_OFFSET (6)
+#define EMBER_AF_GP_PAIRING_CONFIGURATION_OPTION_FIXED_LOCATION (128)
+#define EMBER_AF_GP_PAIRING_CONFIGURATION_OPTION_FIXED_LOCATION_OFFSET (7)
+#define EMBER_AF_GP_PAIRING_CONFIGURATION_OPTION_ASSIGNED_ALIAS (256)
+#define EMBER_AF_GP_PAIRING_CONFIGURATION_OPTION_ASSIGNED_ALIAS_OFFSET (8)
+#define EMBER_AF_GP_PAIRING_CONFIGURATION_OPTION_SECURITY_USE (512)
+#define EMBER_AF_GP_PAIRING_CONFIGURATION_OPTION_SECURITY_USE_OFFSET (9)
+#define EMBER_AF_GP_PAIRING_CONFIGURATION_OPTION_APPLICATION_INFORMATION_PRESENT (1024)
+#define EMBER_AF_GP_PAIRING_CONFIGURATION_OPTION_APPLICATION_INFORMATION_PRESENT_OFFSET (10)
+#define EMBER_AF_GP_PAIRING_CONFIGURATION_OPTION_RESERVED (63488)
+#define EMBER_AF_GP_PAIRING_CONFIGURATION_OPTION_RESERVED_OFFSET (11)
+#define EMBER_AF_GP_PAIRING_OPTION_APPLICATION_ID (7)
+#define EMBER_AF_GP_PAIRING_OPTION_APPLICATION_ID_OFFSET (0)
+#define EMBER_AF_GP_PAIRING_OPTION_ADD_SINK (8)
+#define EMBER_AF_GP_PAIRING_OPTION_ADD_SINK_OFFSET (3)
+#define EMBER_AF_GP_PAIRING_OPTION_REMOVE_GPD (16)
+#define EMBER_AF_GP_PAIRING_OPTION_REMOVE_GPD_OFFSET (4)
+#define EMBER_AF_GP_PAIRING_OPTION_COMMUNICATION_MODE (96)
+#define EMBER_AF_GP_PAIRING_OPTION_COMMUNICATION_MODE_OFFSET (5)
+#define EMBER_AF_GP_PAIRING_OPTION_GPD_FIXED (128)
+#define EMBER_AF_GP_PAIRING_OPTION_GPD_FIXED_OFFSET (7)
+#define EMBER_AF_GP_PAIRING_OPTION_GPD_MAC_SEQUENCE_NUMBER_CAPABILITIES (256)
+#define EMBER_AF_GP_PAIRING_OPTION_GPD_MAC_SEQUENCE_NUMBER_CAPABILITIES_OFFSET (8)
+#define EMBER_AF_GP_PAIRING_OPTION_SECURITY_LEVEL (1536)
+#define EMBER_AF_GP_PAIRING_OPTION_SECURITY_LEVEL_OFFSET (9)
+#define EMBER_AF_GP_PAIRING_OPTION_SECURITY_KEY_TYPE (14336)
+#define EMBER_AF_GP_PAIRING_OPTION_SECURITY_KEY_TYPE_OFFSET (11)
+#define EMBER_AF_GP_PAIRING_OPTION_GPD_SECURITY_FRAME_COUNTER_PRESENT (16384)
+#define EMBER_AF_GP_PAIRING_OPTION_GPD_SECURITY_FRAME_COUNTER_PRESENT_OFFSET (14)
+#define EMBER_AF_GP_PAIRING_OPTION_GPD_SECURITY_KEY_PRESENT (32768)
+#define EMBER_AF_GP_PAIRING_OPTION_GPD_SECURITY_KEY_PRESENT_OFFSET (15)
+#define EMBER_AF_GP_PAIRING_OPTION_ASSIGNED_ALIAS_PRESENT (65536)
+#define EMBER_AF_GP_PAIRING_OPTION_ASSIGNED_ALIAS_PRESENT_OFFSET (16)
+#define EMBER_AF_GP_PAIRING_OPTION_GROUPCAST_RADIUS_PRESENT (131072)
+#define EMBER_AF_GP_PAIRING_OPTION_GROUPCAST_RADIUS_PRESENT_OFFSET (17)
+#define EMBER_AF_GP_PAIRING_OPTION_RESERVED (16515072)
+#define EMBER_AF_GP_PAIRING_OPTION_RESERVED_OFFSET (18)
+#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_APPLICATION_ID (7)
+#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_APPLICATION_ID_OFFSET (0)
+#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_REQUEST_UNICAST_SINKS (8)
+#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_REQUEST_UNICAST_SINKS_OFFSET (3)
+#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_REQUEST_DERIVED_GROUPCAST_SINKS (16)
+#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_REQUEST_DERIVED_GROUPCAST_SINKS_OFFSET (4)
+#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_REQUEST_COMMISSIONED_GROUPCAST_SINKS (32)
+#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_REQUEST_COMMISSIONED_GROUPCAST_SINKS_OFFSET (5)
+#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_REQUEST_GPD_SECURITY_FRAME_COUNTER (64)
+#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_REQUEST_GPD_SECURITY_FRAME_COUNTER_OFFSET (6)
+#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_REQUEST_GPD_SECURITY_KEY (128)
+#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_REQUEST_GPD_SECURITY_KEY_OFFSET (7)
+#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_RESERVED (65280)
+#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_RESERVED_OFFSET (8)
+#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_EXIT_MODE_ON_COMMISSIONING_WINDOW_EXPIRATION (2)
+#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_EXIT_MODE_ON_COMMISSIONING_WINDOW_EXPIRATION_OFFSET (1)
+#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_EXIT_MODE_ON_FIRST_PAIRING_SUCCESS (4)
+#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_EXIT_MODE_ON_FIRST_PAIRING_SUCCESS_OFFSET (2)
+#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_EXIT_MODE_ON_GP_PROXY_COMMISSIONING_MODE_EXIT (8)
+#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_EXIT_MODE_ON_GP_PROXY_COMMISSIONING_MODE_EXIT_OFFSET (3)
+#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_OPTION_ACTION (1)
+#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_OPTION_ACTION_OFFSET (0)
+#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_OPTION_COMMISSIONING_WINDOW_PRESENT (2)
+#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_OPTION_COMMISSIONING_WINDOW_PRESENT_OFFSET (1)
+#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_OPTION_EXIT_MODE (12)
+#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_OPTION_EXIT_MODE_OFFSET (2)
+#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_OPTION_CHANNEL_PRESENT (16)
+#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_OPTION_CHANNEL_PRESENT_OFFSET (4)
+#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_OPTION_UNICAST_COMMUNICATION (32)
+#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_OPTION_UNICAST_COMMUNICATION_OFFSET (5)
+#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_OPTION_RESERVED (192)
+#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_OPTION_RESERVED_OFFSET (6)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_APPLICATION_ID (7)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_APPLICATION_ID_OFFSET (0)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_ENTRY_ACTIVE (8)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_ENTRY_ACTIVE_OFFSET (3)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_ENTRY_VALID (16)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_ENTRY_VALID_OFFSET (4)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_SEQUENCE_NUMBER_CAP (32)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_SEQUENCE_NUMBER_CAP_OFFSET (5)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_LIGHTWEIGHT_UNICAST_GPS (64)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_LIGHTWEIGHT_UNICAST_GPS_OFFSET (6)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_DERIVED_GROUP_GPS (128)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_DERIVED_GROUP_GPS_OFFSET (7)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_COMMISIONED_GROUP_GPS (256)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_COMMISIONED_GROUP_GPS_OFFSET (8)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_FIRST_TO_FORWARD (512)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_FIRST_TO_FORWARD_OFFSET (9)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_IN_RANGE (1024)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_IN_RANGE_OFFSET (10)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_GPD_FIXED (2048)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_GPD_FIXED_OFFSET (11)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_HAS_ALL_UNICAST_ROUTES (4096)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_HAS_ALL_UNICAST_ROUTES_OFFSET (12)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_ASSIGNED_ALIAS (8192)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_ASSIGNED_ALIAS_OFFSET (13)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_SECURITY_USE (16384)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_SECURITY_USE_OFFSET (14)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_EXTENSION (32768)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_EXTENSION_OFFSET (15)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_FULL_UNICAST_GPS (65536)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_FULL_UNICAST_GPS_OFFSET (16)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_SECURITY_OPTIONS_SECURITY_LEVEL (3)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_SECURITY_OPTIONS_SECURITY_LEVEL_OFFSET (0)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_SECURITY_OPTIONS_SECURITY_KEY_TYPE (28)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_SECURITY_OPTIONS_SECURITY_KEY_TYPE_OFFSET (2)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_SECURITY_OPTIONS_RESERVED (224)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_SECURITY_OPTIONS_RESERVED_OFFSET (5)
+#define EMBER_AF_GP_PROXY_TABLE_REQUEST_OPTIONS_APPLICATION_ID (7)
+#define EMBER_AF_GP_PROXY_TABLE_REQUEST_OPTIONS_APPLICATION_ID_OFFSET (0)
+#define EMBER_AF_GP_PROXY_TABLE_REQUEST_OPTIONS_REQUEST_TYPE (24)
+#define EMBER_AF_GP_PROXY_TABLE_REQUEST_OPTIONS_REQUEST_TYPE_OFFSET (3)
+#define EMBER_AF_GP_PROXY_TABLE_REQUEST_OPTIONS_RESERVED (224)
+#define EMBER_AF_GP_PROXY_TABLE_REQUEST_OPTIONS_RESERVED_OFFSET (5)
+#define EMBER_AF_GP_RESPONSE_OPTION_APPLICATION_ID (7)
+#define EMBER_AF_GP_RESPONSE_OPTION_APPLICATION_ID_OFFSET (0)
+#define EMBER_AF_GP_RESPONSE_OPTION_TRANSMIT_ON_END_POINT_MATCH (8)
+#define EMBER_AF_GP_RESPONSE_OPTION_TRANSMIT_ON_END_POINT_MATCH_OFFSET (3)
+#define EMBER_AF_GP_RESPONSE_OPTION_RESERVED (240)
+#define EMBER_AF_GP_RESPONSE_OPTION_RESERVED_OFFSET (4)
+#define EMBER_AF_GP_RESPONSE_TEMP_MASTER_TX_CHANNEL_TRANSMIT_CHANNEL (15)
+#define EMBER_AF_GP_RESPONSE_TEMP_MASTER_TX_CHANNEL_TRANSMIT_CHANNEL_OFFSET (0)
+#define EMBER_AF_GP_RESPONSE_TEMP_MASTER_TX_CHANNEL_RESERVED (240)
+#define EMBER_AF_GP_RESPONSE_TEMP_MASTER_TX_CHANNEL_RESERVED_OFFSET (4)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_EXIT_MODE_ON_COMMISSIONING_WINDOW_EXPIRATION (1)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_EXIT_MODE_ON_COMMISSIONING_WINDOW_EXPIRATION_OFFSET (0)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_EXIT_MODE_ON_FIRST_PAIRING_SUCCESS (2)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_EXIT_MODE_ON_FIRST_PAIRING_SUCCESS_OFFSET (1)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_EXIT_MODE_ON_GP_PROXY_COMMISSIONING_MODE_EXIT (4)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_EXIT_MODE_ON_GP_PROXY_COMMISSIONING_MODE_EXIT_OFFSET (2)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_EXIT_MODE_RESERVED (248)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_EXIT_MODE_RESERVED_OFFSET (3)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_OPTIONS_ACTION (1)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_OPTIONS_ACTION_OFFSET (0)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_OPTIONS_INVOLVE_GPM_IN_SECURITY (2)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_OPTIONS_INVOLVE_GPM_IN_SECURITY_OFFSET (1)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_OPTIONS_INVOLVE_GPM_IN_PAIRING (4)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_OPTIONS_INVOLVE_GPM_IN_PAIRING_OFFSET (2)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_OPTIONS_INVOLVE_PROXIES (8)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_OPTIONS_INVOLVE_PROXIES_OFFSET (3)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_OPTIONS_RESERVED (240)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_OPTIONS_RESERVED_OFFSET (4)
+#define EMBER_AF_GP_SINK_TABLE_ENTRY_OPTIONS_APPLICATION_ID (7)
+#define EMBER_AF_GP_SINK_TABLE_ENTRY_OPTIONS_APPLICATION_ID_OFFSET (0)
+#define EMBER_AF_GP_SINK_TABLE_ENTRY_OPTIONS_COMMUNICATION_MODE (24)
+#define EMBER_AF_GP_SINK_TABLE_ENTRY_OPTIONS_COMMUNICATION_MODE_OFFSET (3)
+#define EMBER_AF_GP_SINK_TABLE_ENTRY_OPTIONS_SEQUENCE_NUM_CAPABILITIES (32)
+#define EMBER_AF_GP_SINK_TABLE_ENTRY_OPTIONS_SEQUENCE_NUM_CAPABILITIES_OFFSET (5)
+#define EMBER_AF_GP_SINK_TABLE_ENTRY_OPTIONS_RX_ON_CAPABILITY (64)
+#define EMBER_AF_GP_SINK_TABLE_ENTRY_OPTIONS_RX_ON_CAPABILITY_OFFSET (6)
+#define EMBER_AF_GP_SINK_TABLE_ENTRY_OPTIONS_FIXED_LOCATION (128)
+#define EMBER_AF_GP_SINK_TABLE_ENTRY_OPTIONS_FIXED_LOCATION_OFFSET (7)
+#define EMBER_AF_GP_SINK_TABLE_ENTRY_OPTIONS_ASSIGNED_ALIAS (256)
+#define EMBER_AF_GP_SINK_TABLE_ENTRY_OPTIONS_ASSIGNED_ALIAS_OFFSET (8)
+#define EMBER_AF_GP_SINK_TABLE_ENTRY_OPTIONS_SECURITY_USE (512)
+#define EMBER_AF_GP_SINK_TABLE_ENTRY_OPTIONS_SECURITY_USE_OFFSET (9)
+#define EMBER_AF_GP_SINK_TABLE_ENTRY_OPTIONS_RESERVED (64512)
+#define EMBER_AF_GP_SINK_TABLE_ENTRY_OPTIONS_RESERVED_OFFSET (10)
+#define EMBER_AF_GP_SINK_TABLE_ENTRY_SECURITY_OPTIONS_SECURITY_LEVEL (3)
+#define EMBER_AF_GP_SINK_TABLE_ENTRY_SECURITY_OPTIONS_SECURITY_LEVEL_OFFSET (0)
+#define EMBER_AF_GP_SINK_TABLE_ENTRY_SECURITY_OPTIONS_SECURITY_KEY_TYPE (28)
+#define EMBER_AF_GP_SINK_TABLE_ENTRY_SECURITY_OPTIONS_SECURITY_KEY_TYPE_OFFSET (2)
+#define EMBER_AF_GP_SINK_TABLE_ENTRY_SECURITY_OPTIONS_RESERVED (224)
+#define EMBER_AF_GP_SINK_TABLE_ENTRY_SECURITY_OPTIONS_RESERVED_OFFSET (5)
+#define EMBER_AF_GP_SINK_TABLE_REQUEST_OPTIONS_APPLICATION_ID (7)
+#define EMBER_AF_GP_SINK_TABLE_REQUEST_OPTIONS_APPLICATION_ID_OFFSET (0)
+#define EMBER_AF_GP_SINK_TABLE_REQUEST_OPTIONS_REQUEST_TYPE (24)
+#define EMBER_AF_GP_SINK_TABLE_REQUEST_OPTIONS_REQUEST_TYPE_OFFSET (3)
+#define EMBER_AF_GP_SINK_TABLE_REQUEST_OPTIONS_RESERVED (224)
+#define EMBER_AF_GP_SINK_TABLE_REQUEST_OPTIONS_RESERVED_OFFSET (5)
+#define EMBER_AF_GP_TRANSLATION_TABLE_RESPONSE_OPTION_APPLICATION_ID (7)
+#define EMBER_AF_GP_TRANSLATION_TABLE_RESPONSE_OPTION_APPLICATION_ID_OFFSET (0)
+#define EMBER_AF_GP_TRANSLATION_TABLE_RESPONSE_OPTION_ADDITIONAL_INFORMATION_BLOCK_PRESENT (8)
+#define EMBER_AF_GP_TRANSLATION_TABLE_RESPONSE_OPTION_ADDITIONAL_INFORMATION_BLOCK_PRESENT_OFFSET (3)
+#define EMBER_AF_GP_TRANSLATION_TABLE_RESPONSE_OPTION_RESERVED (240)
+#define EMBER_AF_GP_TRANSLATION_TABLE_RESPONSE_OPTION_RESERVED_OFFSET (4)
+#define EMBER_AF_GP_TRANSLATION_TABLE_SCAN_LEVEL_GPD_ID (1)
+#define EMBER_AF_GP_TRANSLATION_TABLE_SCAN_LEVEL_GPD_ID_OFFSET (0)
+#define EMBER_AF_GP_TRANSLATION_TABLE_SCAN_LEVEL_CMD_ID (2)
+#define EMBER_AF_GP_TRANSLATION_TABLE_SCAN_LEVEL_CMD_ID_OFFSET (1)
+#define EMBER_AF_GP_TRANSLATION_TABLE_SCAN_LEVEL_PAYLOAD (4)
+#define EMBER_AF_GP_TRANSLATION_TABLE_SCAN_LEVEL_PAYLOAD_OFFSET (2)
+#define EMBER_AF_GP_TRANSLATION_TABLE_SCAN_LEVEL_ZB_ENDPOINT (8)
+#define EMBER_AF_GP_TRANSLATION_TABLE_SCAN_LEVEL_ZB_ENDPOINT_OFFSET (3)
+#define EMBER_AF_GP_TRANSLATION_TABLE_SCAN_LEVEL_ADDITIONAL_INFO_BLOCK (16)
+#define EMBER_AF_GP_TRANSLATION_TABLE_SCAN_LEVEL_ADDITIONAL_INFO_BLOCK_OFFSET (4)
+#define EMBER_AF_GP_TRANSLATION_TABLE_UPDATE_OPTION_APPLICATION_ID (7)
+#define EMBER_AF_GP_TRANSLATION_TABLE_UPDATE_OPTION_APPLICATION_ID_OFFSET (0)
+#define EMBER_AF_GP_TRANSLATION_TABLE_UPDATE_OPTION_ACTION (24)
+#define EMBER_AF_GP_TRANSLATION_TABLE_UPDATE_OPTION_ACTION_OFFSET (3)
+#define EMBER_AF_GP_TRANSLATION_TABLE_UPDATE_OPTION_NUMBER_OF_TRANSLATIONS (224)
+#define EMBER_AF_GP_TRANSLATION_TABLE_UPDATE_OPTION_NUMBER_OF_TRANSLATIONS_OFFSET (5)
+#define EMBER_AF_GP_TRANSLATION_TABLE_UPDATE_OPTION_ADDITIONAL_INFORMATION_BLOCK_PRESENT (256)
+#define EMBER_AF_GP_TRANSLATION_TABLE_UPDATE_OPTION_ADDITIONAL_INFORMATION_BLOCK_PRESENT_OFFSET (8)
+#define EMBER_AF_GP_TRANSLATION_TABLE_UPDATE_OPTION_RESERVED (65024)
+#define EMBER_AF_GP_TRANSLATION_TABLE_UPDATE_OPTION_RESERVED_OFFSET (9)
+#define EMBER_AF_GP_TUNNELING_STOP_OPTION_APPLICATION_ID (7)
+#define EMBER_AF_GP_TUNNELING_STOP_OPTION_APPLICATION_ID_OFFSET (0)
+#define EMBER_AF_GP_TUNNELING_STOP_OPTION_ALSO_DERIVED_GROUP (8)
+#define EMBER_AF_GP_TUNNELING_STOP_OPTION_ALSO_DERIVED_GROUP_OFFSET (3)
+#define EMBER_AF_GP_TUNNELING_STOP_OPTION_ALSO_COMMISSIONED_GROUP (16)
+#define EMBER_AF_GP_TUNNELING_STOP_OPTION_ALSO_COMMISSIONED_GROUP_OFFSET (4)
+#define EMBER_AF_GP_TUNNELING_STOP_OPTION_RESERVED (224)
+#define EMBER_AF_GP_TUNNELING_STOP_OPTION_RESERVED_OFFSET (5)
+#define EMBER_AF_IAS_ZONE_STATUS_ALARM1 (1)
+#define EMBER_AF_IAS_ZONE_STATUS_ALARM1_OFFSET (0)
+#define EMBER_AF_IAS_ZONE_STATUS_ALARM2 (2)
+#define EMBER_AF_IAS_ZONE_STATUS_ALARM2_OFFSET (1)
+#define EMBER_AF_IAS_ZONE_STATUS_TAMPER (4)
+#define EMBER_AF_IAS_ZONE_STATUS_TAMPER_OFFSET (2)
+#define EMBER_AF_IAS_ZONE_STATUS_BATTERY (8)
+#define EMBER_AF_IAS_ZONE_STATUS_BATTERY_OFFSET (3)
+#define EMBER_AF_IAS_ZONE_STATUS_SUPERVISION_REPORTS (16)
+#define EMBER_AF_IAS_ZONE_STATUS_SUPERVISION_REPORTS_OFFSET (4)
+#define EMBER_AF_IAS_ZONE_STATUS_RESTORE_REPORTS (32)
+#define EMBER_AF_IAS_ZONE_STATUS_RESTORE_REPORTS_OFFSET (5)
+#define EMBER_AF_IAS_ZONE_STATUS_TROUBLE (64)
+#define EMBER_AF_IAS_ZONE_STATUS_TROUBLE_OFFSET (6)
+#define EMBER_AF_IAS_ZONE_STATUS_AC (128)
+#define EMBER_AF_IAS_ZONE_STATUS_AC_OFFSET (7)
+#define EMBER_AF_IAS_ZONE_STATUS_TEST (256)
+#define EMBER_AF_IAS_ZONE_STATUS_TEST_OFFSET (8)
+#define EMBER_AF_IAS_ZONE_STATUS_BATTERY_DEFECT (512)
+#define EMBER_AF_IAS_ZONE_STATUS_BATTERY_DEFECT_OFFSET (9)
+#define EMBER_AF_KEY_BITMASK_DEVELOPMENT (1)
+#define EMBER_AF_KEY_BITMASK_DEVELOPMENT_OFFSET (0)
+#define EMBER_AF_KEY_BITMASK_MASTER (16)
+#define EMBER_AF_KEY_BITMASK_MASTER_OFFSET (4)
+#define EMBER_AF_KEY_BITMASK_CERTIFICATION (32768)
+#define EMBER_AF_KEY_BITMASK_CERTIFICATION_OFFSET (15)
+#define EMBER_AF_LAMP_ALARM_MODE_LAMP_BURN_HOURS (1)
+#define EMBER_AF_LAMP_ALARM_MODE_LAMP_BURN_HOURS_OFFSET (0)
+#define EMBER_AF_LOAD_CONTROL_STATE_RELAY_OPEN_OR_CONSUMPTION_INTERUPTED (1)
+#define EMBER_AF_LOAD_CONTROL_STATE_RELAY_OPEN_OR_CONSUMPTION_INTERUPTED_OFFSET (0)
+#define EMBER_AF_LOAD_CONTROL_STATE_EVENT_IN_PROGRESS (2)
+#define EMBER_AF_LOAD_CONTROL_STATE_EVENT_IN_PROGRESS_OFFSET (1)
+#define EMBER_AF_LOAD_CONTROL_STATE_POWER_STABILIZING (4)
+#define EMBER_AF_LOAD_CONTROL_STATE_POWER_STABILIZING_OFFSET (2)
+#define EMBER_AF_LOAD_CONTROL_STATE_OTHER_LOAD_REDUCTION (8)
+#define EMBER_AF_LOAD_CONTROL_STATE_OTHER_LOAD_REDUCTION_OFFSET (3)
+#define EMBER_AF_LOAD_CONTROL_STATE_CURRENT_FLOW_OR_CONSUMING_COMMODITY (16)
+#define EMBER_AF_LOAD_CONTROL_STATE_CURRENT_FLOW_OR_CONSUMING_COMMODITY_OFFSET (4)
+#define EMBER_AF_LOAD_CONTROL_STATE_LOAD_CALL (32)
+#define EMBER_AF_LOAD_CONTROL_STATE_LOAD_CALL_OFFSET (5)
+#define EMBER_AF_LOCATION_TYPE_ABSOLUTE (1)
+#define EMBER_AF_LOCATION_TYPE_ABSOLUTE_OFFSET (0)
+#define EMBER_AF_LOCATION_TYPE_2_D (2)
+#define EMBER_AF_LOCATION_TYPE_2_D_OFFSET (1)
+#define EMBER_AF_LOCATION_TYPE_COORDINATE_SYSTEM (12)
+#define EMBER_AF_LOCATION_TYPE_COORDINATE_SYSTEM_OFFSET (2)
+#define EMBER_AF_MAINS_ALARM_MASK_VOLTAGE_TOO_LOW (1)
+#define EMBER_AF_MAINS_ALARM_MASK_VOLTAGE_TOO_LOW_OFFSET (0)
+#define EMBER_AF_MAINS_ALARM_MASK_VOLTAGE_TOO_HIGH (2)
+#define EMBER_AF_MAINS_ALARM_MASK_VOLTAGE_TOO_HIGH_OFFSET (1)
+#define EMBER_AF_MAINS_ALARM_MASK_MAINS_POWER_SUPPLY_LOST (4)
+#define EMBER_AF_MAINS_ALARM_MASK_MAINS_POWER_SUPPLY_LOST_OFFSET (2)
+#define EMBER_AF_MESSAGING_CONFIRMATION_CONTROL_NO_RETURNED (1)
+#define EMBER_AF_MESSAGING_CONFIRMATION_CONTROL_NO_RETURNED_OFFSET (0)
+#define EMBER_AF_MESSAGING_CONFIRMATION_CONTROL_YES_RETURNED (2)
+#define EMBER_AF_MESSAGING_CONFIRMATION_CONTROL_YES_RETURNED_OFFSET (1)
+#define EMBER_AF_MESSAGING_CONTROL_MASK_TRANS_MECHANISM (3)
+#define EMBER_AF_MESSAGING_CONTROL_MASK_TRANS_MECHANISM_OFFSET (0)
+#define EMBER_AF_MESSAGING_CONTROL_MASK_MESSAGE_URGENCY (12)
+#define EMBER_AF_MESSAGING_CONTROL_MASK_MESSAGE_URGENCY_OFFSET (2)
+#define EMBER_AF_MESSAGING_CONTROL_MASK_ENHANCED_CONFIRMATION_REQUEST (32)
+#define EMBER_AF_MESSAGING_CONTROL_MASK_ENHANCED_CONFIRMATION_REQUEST_OFFSET (5)
+#define EMBER_AF_MESSAGING_CONTROL_MASK_MESSAGE_CONFIRMATION (128)
+#define EMBER_AF_MESSAGING_CONTROL_MASK_MESSAGE_CONFIRMATION_OFFSET (7)
+#define EMBER_AF_MESSAGING_EXTENDED_CONTROL_MASK_MESSAGE_CONFIRMATION_STATUS (1)
+#define EMBER_AF_MESSAGING_EXTENDED_CONTROL_MASK_MESSAGE_CONFIRMATION_STATUS_OFFSET (0)
+#define EMBER_AF_METERING_EXTENDED_STATUS_METER_COVER_REMOVED (1)
+#define EMBER_AF_METERING_EXTENDED_STATUS_METER_COVER_REMOVED_OFFSET (0)
+#define EMBER_AF_METERING_EXTENDED_STATUS_STRONG_MAGNETIC_FIELD_DETECTED (2)
+#define EMBER_AF_METERING_EXTENDED_STATUS_STRONG_MAGNETIC_FIELD_DETECTED_OFFSET (1)
+#define EMBER_AF_METERING_EXTENDED_STATUS_BATTERY_FAILURE (4)
+#define EMBER_AF_METERING_EXTENDED_STATUS_BATTERY_FAILURE_OFFSET (2)
+#define EMBER_AF_METERING_EXTENDED_STATUS_PROGRAM_MEMORY_ERROR (8)
+#define EMBER_AF_METERING_EXTENDED_STATUS_PROGRAM_MEMORY_ERROR_OFFSET (3)
+#define EMBER_AF_METERING_EXTENDED_STATUS_RAM_ERROR (16)
+#define EMBER_AF_METERING_EXTENDED_STATUS_RAM_ERROR_OFFSET (4)
+#define EMBER_AF_METERING_EXTENDED_STATUS_NV_MEMORY_ERROR (32)
+#define EMBER_AF_METERING_EXTENDED_STATUS_NV_MEMORY_ERROR_OFFSET (5)
+#define EMBER_AF_METERING_EXTENDED_STATUS_MEASUREMENT_SYSTEM_ERROR (64)
+#define EMBER_AF_METERING_EXTENDED_STATUS_MEASUREMENT_SYSTEM_ERROR_OFFSET (6)
+#define EMBER_AF_METERING_EXTENDED_STATUS_WATCHDOG_ERROR (128)
+#define EMBER_AF_METERING_EXTENDED_STATUS_WATCHDOG_ERROR_OFFSET (7)
+#define EMBER_AF_METERING_EXTENDED_STATUS_SUPPLY_DISCONNECT_FAILURE (256)
+#define EMBER_AF_METERING_EXTENDED_STATUS_SUPPLY_DISCONNECT_FAILURE_OFFSET (8)
+#define EMBER_AF_METERING_EXTENDED_STATUS_SUPPLY_CONNECT_FAILURE (512)
+#define EMBER_AF_METERING_EXTENDED_STATUS_SUPPLY_CONNECT_FAILURE_OFFSET (9)
+#define EMBER_AF_METERING_EXTENDED_STATUS_MEASUREMENT_SW_CHANGED_TAMPERED (1024)
+#define EMBER_AF_METERING_EXTENDED_STATUS_MEASUREMENT_SW_CHANGED_TAMPERED_OFFSET (10)
+#define EMBER_AF_METERING_EXTENDED_STATUS_CLOCK_INVALID (2048)
+#define EMBER_AF_METERING_EXTENDED_STATUS_CLOCK_INVALID_OFFSET (11)
+#define EMBER_AF_METERING_EXTENDED_STATUS_TEMPERATURE_EXCEEDED (4096)
+#define EMBER_AF_METERING_EXTENDED_STATUS_TEMPERATURE_EXCEEDED_OFFSET (12)
+#define EMBER_AF_METERING_EXTENDED_STATUS_MOISTURE_DETECTED (8192)
+#define EMBER_AF_METERING_EXTENDED_STATUS_MOISTURE_DETECTED_OFFSET (13)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_TERMINAL_COVER_REMOVED (16777216)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_TERMINAL_COVER_REMOVED_OFFSET (24)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_INCORRECT_POLARITY (33554432)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_INCORRECT_POLARITY_OFFSET (25)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_CURRENT_WITH_NO_VOLTAGE (67108864)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_CURRENT_WITH_NO_VOLTAGE_OFFSET (26)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_LIMIT_THRESHOLD_EXCEEDED (134217728)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_LIMIT_THRESHOLD_EXCEEDED_OFFSET (27)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_UNDER_VOLTAGE (268435456)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_UNDER_VOLTAGE_OFFSET (28)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_OVER_VOLTAGE (536870912)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_OVER_VOLTAGE_OFFSET (29)
+#define EMBER_AF_METERING_EXTENDED_STATUS_GAS_METER_BATTERY_COVER_REMOVED (16777216)
+#define EMBER_AF_METERING_EXTENDED_STATUS_GAS_METER_BATTERY_COVER_REMOVED_OFFSET (24)
+#define EMBER_AF_METERING_EXTENDED_STATUS_GAS_METER_TILT_TAMPER (33554432)
+#define EMBER_AF_METERING_EXTENDED_STATUS_GAS_METER_TILT_TAMPER_OFFSET (25)
+#define EMBER_AF_METERING_EXTENDED_STATUS_GAS_METER_EXCESS_FLOW (67108864)
+#define EMBER_AF_METERING_EXTENDED_STATUS_GAS_METER_EXCESS_FLOW_OFFSET (26)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_SERVICE_DISCONNECTION_REASON_OFF_DUE_TO_OVER_POWER (1073741824)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_SERVICE_DISCONNECTION_REASON_OFF_DUE_TO_OVER_POWER_OFFSET (30)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_SERVICE_DISCONNECTION_REASON_OFF_DUE_TO_OVER_VOLTAGE (2147483648)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_SERVICE_DISCONNECTION_REASON_OFF_DUE_TO_OVER_VOLTAGE_OFFSET (31)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_SERVICE_DISCONNECTION_REASON_OFF_DUE_TO_REMOTE_LOAD_CONTROL (3221225472)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_SERVICE_DISCONNECTION_REASON_OFF_DUE_TO_REMOTE_LOAD_CONTROL_OFFSET (30)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_SERVICE_DISCONNECTION_REASON_OFF_BY_OTHER_REMOTE_COMMAND (4294967296)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_SERVICE_DISCONNECTION_REASON_OFF_BY_OTHER_REMOTE_COMMAND_OFFSET (32)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_SERVICE_DISCONNECTION_REASON_OFF_DUE_TO_OVERHEATING_SHORT_CIRCUIT      \
+    (5368709120)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_SERVICE_DISCONNECTION_REASON_OFF_DUE_TO_OVERHEATING_SHORT_CIRCUIT_OFFSET \
+    (30)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_SERVICE_DISCONNECTION_REASON_OFF_DUE_TO_OVERHEATING_OTHER (6442450944)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_SERVICE_DISCONNECTION_REASON_OFF_DUE_TO_OVERHEATING_OTHER_OFFSET (31)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_BI_DIRECTIONAL_OPERATION (17179869184)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_BI_DIRECTIONAL_OPERATION_OFFSET (34)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_ACTIVE_POWER_RECEIVED (34359738368)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_ACTIVE_POWER_RECEIVED_OFFSET (35)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_MODE_OF_OPERATION (68719476736)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_MODE_OF_OPERATION_OFFSET (36)
+#define EMBER_AF_METERING_STATUS_ELECTRICITY_CHECK_METER (1)
+#define EMBER_AF_METERING_STATUS_ELECTRICITY_CHECK_METER_OFFSET (0)
+#define EMBER_AF_METERING_STATUS_ELECTRICITY_LOW_BATTERY (2)
+#define EMBER_AF_METERING_STATUS_ELECTRICITY_LOW_BATTERY_OFFSET (1)
+#define EMBER_AF_METERING_STATUS_ELECTRICITY_TAMPER_DETECT (4)
+#define EMBER_AF_METERING_STATUS_ELECTRICITY_TAMPER_DETECT_OFFSET (2)
+#define EMBER_AF_METERING_STATUS_ELECTRICITY_POWER_FAILURE (8)
+#define EMBER_AF_METERING_STATUS_ELECTRICITY_POWER_FAILURE_OFFSET (3)
+#define EMBER_AF_METERING_STATUS_ELECTRICITY_POWER_QUALITY (16)
+#define EMBER_AF_METERING_STATUS_ELECTRICITY_POWER_QUALITY_OFFSET (4)
+#define EMBER_AF_METERING_STATUS_ELECTRICITY_LEAK_DETECT (32)
+#define EMBER_AF_METERING_STATUS_ELECTRICITY_LEAK_DETECT_OFFSET (5)
+#define EMBER_AF_METERING_STATUS_ELECTRICITY_SERVICE_DISCONNECT_OPEN (64)
+#define EMBER_AF_METERING_STATUS_ELECTRICITY_SERVICE_DISCONNECT_OPEN_OFFSET (6)
+#define EMBER_AF_METERING_STATUS_ELECTRICITY_RESERVED (128)
+#define EMBER_AF_METERING_STATUS_ELECTRICITY_RESERVED_OFFSET (7)
+#define EMBER_AF_METERING_STATUS_GAS_CHECK_METER (1)
+#define EMBER_AF_METERING_STATUS_GAS_CHECK_METER_OFFSET (0)
+#define EMBER_AF_METERING_STATUS_GAS_LOW_BATTERY (2)
+#define EMBER_AF_METERING_STATUS_GAS_LOW_BATTERY_OFFSET (1)
+#define EMBER_AF_METERING_STATUS_GAS_TAMPER_DETECT (4)
+#define EMBER_AF_METERING_STATUS_GAS_TAMPER_DETECT_OFFSET (2)
+#define EMBER_AF_METERING_STATUS_GAS_NOT_DEFINED (8)
+#define EMBER_AF_METERING_STATUS_GAS_NOT_DEFINED_OFFSET (3)
+#define EMBER_AF_METERING_STATUS_GAS_LOW_PRESSURE (16)
+#define EMBER_AF_METERING_STATUS_GAS_LOW_PRESSURE_OFFSET (4)
+#define EMBER_AF_METERING_STATUS_GAS_LEAK_DETECT (32)
+#define EMBER_AF_METERING_STATUS_GAS_LEAK_DETECT_OFFSET (5)
+#define EMBER_AF_METERING_STATUS_GAS_SERVICE_DISCONNECT (64)
+#define EMBER_AF_METERING_STATUS_GAS_SERVICE_DISCONNECT_OFFSET (6)
+#define EMBER_AF_METERING_STATUS_GAS_REVERSE_FLOW (128)
+#define EMBER_AF_METERING_STATUS_GAS_REVERSE_FLOW_OFFSET (7)
+#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_CHECK_METER (1)
+#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_CHECK_METER_OFFSET (0)
+#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_LOW_BATTERY (2)
+#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_LOW_BATTERY_OFFSET (1)
+#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_TAMPER_DETECT (4)
+#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_TAMPER_DETECT_OFFSET (2)
+#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_TEMPERATURE_SENSOR (8)
+#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_TEMPERATURE_SENSOR_OFFSET (3)
+#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_BURST_DETECT (16)
+#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_BURST_DETECT_OFFSET (4)
+#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_LEAK_DETECT (32)
+#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_LEAK_DETECT_OFFSET (5)
+#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_SERVICE_DISCONNECT (64)
+#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_SERVICE_DISCONNECT_OFFSET (6)
+#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_FLOW_SENSOR (128)
+#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_FLOW_SENSOR_OFFSET (7)
+#define EMBER_AF_METERING_STATUS_WATER_CHECK_METER (1)
+#define EMBER_AF_METERING_STATUS_WATER_CHECK_METER_OFFSET (0)
+#define EMBER_AF_METERING_STATUS_WATER_LOW_BATTERY (2)
+#define EMBER_AF_METERING_STATUS_WATER_LOW_BATTERY_OFFSET (1)
+#define EMBER_AF_METERING_STATUS_WATER_TAMPER_DETECT (4)
+#define EMBER_AF_METERING_STATUS_WATER_TAMPER_DETECT_OFFSET (2)
+#define EMBER_AF_METERING_STATUS_WATER_PIPE_EMPTY (8)
+#define EMBER_AF_METERING_STATUS_WATER_PIPE_EMPTY_OFFSET (3)
+#define EMBER_AF_METERING_STATUS_WATER_LOW_PRESSURE (16)
+#define EMBER_AF_METERING_STATUS_WATER_LOW_PRESSURE_OFFSET (4)
+#define EMBER_AF_METERING_STATUS_WATER_LEAK_DETECT (32)
+#define EMBER_AF_METERING_STATUS_WATER_LEAK_DETECT_OFFSET (5)
+#define EMBER_AF_METERING_STATUS_WATER_SERVICE_DISCONNECT (64)
+#define EMBER_AF_METERING_STATUS_WATER_SERVICE_DISCONNECT_OFFSET (6)
+#define EMBER_AF_METERING_STATUS_WATER_REVERSE_FLOW (128)
+#define EMBER_AF_METERING_STATUS_WATER_REVERSE_FLOW_OFFSET (7)
+#define EMBER_AF_MODE_FOR_SEQUENCE_HEAT_SETPOINT_FIELD_PRESENT (1)
+#define EMBER_AF_MODE_FOR_SEQUENCE_HEAT_SETPOINT_FIELD_PRESENT_OFFSET (0)
+#define EMBER_AF_MODE_FOR_SEQUENCE_COOL_SETPOINT_FIELD_PRESENT (2)
+#define EMBER_AF_MODE_FOR_SEQUENCE_COOL_SETPOINT_FIELD_PRESENT_OFFSET (1)
+#define EMBER_AF_NUMBER_OF_EVENTS_LOG_PAYLOAD_CONTROL_LOG_PAYLOAD_CONTROL (15)
+#define EMBER_AF_NUMBER_OF_EVENTS_LOG_PAYLOAD_CONTROL_LOG_PAYLOAD_CONTROL_OFFSET (0)
+#define EMBER_AF_NUMBER_OF_EVENTS_LOG_PAYLOAD_CONTROL_NUMBER_OF_EVENTS (240)
+#define EMBER_AF_NUMBER_OF_EVENTS_LOG_PAYLOAD_CONTROL_NUMBER_OF_EVENTS_OFFSET (4)
+#define EMBER_AF_OCCUPANCY_OCCUPIED (1)
+#define EMBER_AF_OCCUPANCY_OCCUPIED_OFFSET (0)
+#define EMBER_AF_OCCUPANCY_SENSOR_TYPE_BITMAP_PIR (1)
+#define EMBER_AF_OCCUPANCY_SENSOR_TYPE_BITMAP_PIR_OFFSET (0)
+#define EMBER_AF_OCCUPANCY_SENSOR_TYPE_BITMAP_ULTRASONIC (2)
+#define EMBER_AF_OCCUPANCY_SENSOR_TYPE_BITMAP_ULTRASONIC_OFFSET (1)
+#define EMBER_AF_OCCUPANCY_SENSOR_TYPE_BITMAP_PHYSICAL_CONTACT (4)
+#define EMBER_AF_OCCUPANCY_SENSOR_TYPE_BITMAP_PHYSICAL_CONTACT_OFFSET (2)
+#define EMBER_AF_ON_OFF_CONTROL_ACCEPT_ONLY_WHEN_ON (1)
+#define EMBER_AF_ON_OFF_CONTROL_ACCEPT_ONLY_WHEN_ON_OFFSET (0)
+#define EMBER_AF_ORIGINATOR_ID_SUPPLY_CONTROL_BITS_ACKNOWLEDGE_REQUIRED (1)
+#define EMBER_AF_ORIGINATOR_ID_SUPPLY_CONTROL_BITS_ACKNOWLEDGE_REQUIRED_OFFSET (0)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_DISCONNECTION_ENABLED (1)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_DISCONNECTION_ENABLED_OFFSET (0)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_PREPAYMENT_ENABLED (2)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_PREPAYMENT_ENABLED_OFFSET (1)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_CREDIT_MANAGEMENT_ENABLED (4)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_CREDIT_MANAGEMENT_ENABLED_OFFSET (2)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_CREDIT_DISPLAY_ENABLED (16)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_CREDIT_DISPLAY_ENABLED_OFFSET (4)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_ACCOUNT_BASE (64)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_ACCOUNT_BASE_OFFSET (6)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_CONTACTOR_FITTED (128)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_CONTACTOR_FITTED_OFFSET (7)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_STANDING_CHARGE_CONFIGURATION (256)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_STANDING_CHARGE_CONFIGURATION_OFFSET (8)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_EMERGENCY_STANDING_CHARGE_CONFIGURATION (512)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_EMERGENCY_STANDING_CHARGE_CONFIGURATION_OFFSET (9)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_DEBT_CONFIGURATION (1024)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_DEBT_CONFIGURATION_OFFSET (10)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_EMERGENCY_DEBT_CONFIGURATION (2048)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_EMERGENCY_DEBT_CONFIGURATION_OFFSET (11)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_GENERAL (1)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_GENERAL_OFFSET (0)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_CHANGE_OF_TARIFF_INFORMATION (8)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_CHANGE_OF_TARIFF_INFORMATION_OFFSET (3)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_CHANGE_OF_PRICE_MATRIX (16)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_CHANGE_OF_PRICE_MATRIX_OFFSET (4)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_MANUALLY_TRIGGERED_FROM_CLIENT (1024)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_MANUALLY_TRIGGERED_FROM_CLIENT_OFFSET (10)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_CHANGE_OF_TENANCY (4096)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_CHANGE_OF_TENANCY_OFFSET (12)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_CHANGE_OF_SUPPLIER (8192)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_CHANGE_OF_SUPPLIER_OFFSET (13)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_CHANGE_OF_METER_MODE (16384)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_CHANGE_OF_METER_MODE_OFFSET (14)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_TOP_UP_ADDITION (262144)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_TOP_UP_ADDITION_OFFSET (18)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_DEBT_CREDIT_ADDITION (524288)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_DEBT_CREDIT_ADDITION_OFFSET (19)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_LOW_CREDIT_WARNING (1)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_LOW_CREDIT_WARNING_OFFSET (0)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_TOP_UP_CODE_ERROR (2)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_TOP_UP_CODE_ERROR_OFFSET (1)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_TOP_UP_CODE_ALREADY_USED (4)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_TOP_UP_CODE_ALREADY_USED_OFFSET (2)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_TOP_UP_CODE_INVALID (8)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_TOP_UP_CODE_INVALID_OFFSET (3)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_FRIENDLY_CREDIT_IN_USE (16)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_FRIENDLY_CREDIT_IN_USE_OFFSET (4)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_FRIENDLY_CREDIT_PERIOD_END_WARNING (32)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_FRIENDLY_CREDIT_PERIOD_END_WARNING_OFFSET (5)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_EC_AVAILABLE (64)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_EC_AVAILABLE_OFFSET (6)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_UNAUTHORISED_ENERGY_USE (128)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_UNAUTHORISED_ENERGY_USE_OFFSET (7)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_DISCONNECTED_SUPPLY_DUE_TO_CREDIT (256)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_DISCONNECTED_SUPPLY_DUE_TO_CREDIT_OFFSET (8)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_DISCONNECTED_SUPPLY_DUE_TO_TAMPER (512)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_DISCONNECTED_SUPPLY_DUE_TO_TAMPER_OFFSET (9)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_DISCONNECTED_SUPPLY_DUE_TO_HES (1024)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_DISCONNECTED_SUPPLY_DUE_TO_HES_OFFSET (10)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_PHYSICAL_ATTACK (2048)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_PHYSICAL_ATTACK_OFFSET (11)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_ELECTRONIC_ATTACK (4096)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_ELECTRONIC_ATTACK_OFFSET (12)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_MANUFACTURE_ALARM_CODE_A (8192)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_MANUFACTURE_ALARM_CODE_A_OFFSET (13)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_MANUFACTURE_ALARM_CODE_B (16384)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_MANUFACTURE_ALARM_CODE_B_OFFSET (14)
+#define EMBER_AF_PRICE_CONTROL_MASK_PRICE_ACKNOWLEDGEMENT_REQUIRED (1)
+#define EMBER_AF_PRICE_CONTROL_MASK_PRICE_ACKNOWLEDGEMENT_REQUIRED_OFFSET (0)
+#define EMBER_AF_PRICE_CONTROL_MASK_TOTAL_TIERS_EXCEEDS15 (2)
+#define EMBER_AF_PRICE_CONTROL_MASK_TOTAL_TIERS_EXCEEDS15_OFFSET (1)
+#define EMBER_AF_PRICE_MATRIX_SUB_PAYLOAD_CONTROL_TOU_BASED (1)
+#define EMBER_AF_PRICE_MATRIX_SUB_PAYLOAD_CONTROL_TOU_BASED_OFFSET (0)
+#define EMBER_AF_PRICE_NUMBER_OF_PRICE_TIERS_AND_REGISTER_TIER_REGISTER_TIER (15)
+#define EMBER_AF_PRICE_NUMBER_OF_PRICE_TIERS_AND_REGISTER_TIER_REGISTER_TIER_OFFSET (0)
+#define EMBER_AF_PRICE_NUMBER_OF_PRICE_TIERS_AND_REGISTER_TIER_NUMBER_OF_PRICE_TIERS (240)
+#define EMBER_AF_PRICE_NUMBER_OF_PRICE_TIERS_AND_REGISTER_TIER_NUMBER_OF_PRICE_TIERS_OFFSET (4)
+#define EMBER_AF_PRICE_TRAILING_DIGIT_TRAILING_DIGIT (240)
+#define EMBER_AF_PRICE_TRAILING_DIGIT_TRAILING_DIGIT_OFFSET (4)
+#define EMBER_AF_PRICE_TRAILING_DIGIT_AND_PRICE_TIER_PRICE_TIER (15)
+#define EMBER_AF_PRICE_TRAILING_DIGIT_AND_PRICE_TIER_PRICE_TIER_OFFSET (0)
+#define EMBER_AF_PRICE_TRAILING_DIGIT_AND_PRICE_TIER_TRAILING_DIGIT (240)
+#define EMBER_AF_PRICE_TRAILING_DIGIT_AND_PRICE_TIER_TRAILING_DIGIT_OFFSET (4)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_PRE_SNAPSHOTS (1)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_PRE_SNAPSHOTS_OFFSET (0)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_POST_SNAPSHOTS (2)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_POST_SNAPSHOTS_OFFSET (1)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_RESET_CREDIT_REGISTER (4)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_RESET_CREDIT_REGISTER_OFFSET (2)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_RESET_DEBIT_REGISTER (8)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_RESET_DEBIT_REGISTER_OFFSET (3)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_RESET_BILLING_PERIOD (16)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_RESET_BILLING_PERIOD_OFFSET (4)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_TARIFF_PLAN (32)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_TARIFF_PLAN_OFFSET (5)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_STANDING_CHARGE (64)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_STANDING_CHARGE_OFFSET (6)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_BLOCK_HISTORICAL_LOAD_PROFILE_INFORMATION (128)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_BLOCK_HISTORICAL_LOAD_PROFILE_INFORMATION_OFFSET (7)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_HISTORICAL_LOAD_PROFILE_INFORMATION (256)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_HISTORICAL_LOAD_PROFILE_INFORMATION_OFFSET (8)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_IHD_DATA_CONSUMER (512)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_IHD_DATA_CONSUMER_OFFSET (9)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_IHD_DATA_SUPPLIER (1024)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_IHD_DATA_SUPPLIER_OFFSET (10)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_METER_CONNECTOR_STATE_ON_OFF_ARMED (6144)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_METER_CONNECTOR_STATE_ON_OFF_ARMED_OFFSET (11)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_TRANSACTION_LOG (8192)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_TRANSACTION_LOG_OFFSET (13)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_PREPAYMENT_LOG (16384)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_PREPAYMENT_LOG_OFFSET (14)
+#define EMBER_AF_PUMP_ALARM_MASK_SUPPLY_VOLTAGE_TOO_LOW (1)
+#define EMBER_AF_PUMP_ALARM_MASK_SUPPLY_VOLTAGE_TOO_LOW_OFFSET (0)
+#define EMBER_AF_PUMP_ALARM_MASK_SUPPLY_VOLTAGE_TOO_HIGH (2)
+#define EMBER_AF_PUMP_ALARM_MASK_SUPPLY_VOLTAGE_TOO_HIGH_OFFSET (1)
+#define EMBER_AF_PUMP_ALARM_MASK_POWER_MISSING_PHASE (4)
+#define EMBER_AF_PUMP_ALARM_MASK_POWER_MISSING_PHASE_OFFSET (2)
+#define EMBER_AF_PUMP_ALARM_MASK_SYSTEM_PRESSURE_TOO_LOW (8)
+#define EMBER_AF_PUMP_ALARM_MASK_SYSTEM_PRESSURE_TOO_LOW_OFFSET (3)
+#define EMBER_AF_PUMP_ALARM_MASK_SYSTEM_PRESSURE_TOO_HIGH (16)
+#define EMBER_AF_PUMP_ALARM_MASK_SYSTEM_PRESSURE_TOO_HIGH_OFFSET (4)
+#define EMBER_AF_PUMP_ALARM_MASK_DRY_RUNNING (32)
+#define EMBER_AF_PUMP_ALARM_MASK_DRY_RUNNING_OFFSET (5)
+#define EMBER_AF_PUMP_ALARM_MASK_MOTOR_TEMPERATURE_TOO_HIGH (64)
+#define EMBER_AF_PUMP_ALARM_MASK_MOTOR_TEMPERATURE_TOO_HIGH_OFFSET (6)
+#define EMBER_AF_PUMP_ALARM_MASK_PUMP_MOTOR_HAS_FATAL_FAILURE (128)
+#define EMBER_AF_PUMP_ALARM_MASK_PUMP_MOTOR_HAS_FATAL_FAILURE_OFFSET (7)
+#define EMBER_AF_PUMP_ALARM_MASK_ELECTRONIC_TEMPERATURE_TOO_HIGH (256)
+#define EMBER_AF_PUMP_ALARM_MASK_ELECTRONIC_TEMPERATURE_TOO_HIGH_OFFSET (8)
+#define EMBER_AF_PUMP_ALARM_MASK_PUMP_BLOCKED (512)
+#define EMBER_AF_PUMP_ALARM_MASK_PUMP_BLOCKED_OFFSET (9)
+#define EMBER_AF_PUMP_ALARM_MASK_SENSOR_FAILURE (1024)
+#define EMBER_AF_PUMP_ALARM_MASK_SENSOR_FAILURE_OFFSET (10)
+#define EMBER_AF_PUMP_ALARM_MASK_ELECTRONIC_NON_FATAL_FAILURE (2048)
+#define EMBER_AF_PUMP_ALARM_MASK_ELECTRONIC_NON_FATAL_FAILURE_OFFSET (11)
+#define EMBER_AF_PUMP_ALARM_MASK_ELECTRONIC_FATAL_FAILURE (4096)
+#define EMBER_AF_PUMP_ALARM_MASK_ELECTRONIC_FATAL_FAILURE_OFFSET (12)
+#define EMBER_AF_PUMP_ALARM_MASK_GENERAL_FAULT (8192)
+#define EMBER_AF_PUMP_ALARM_MASK_GENERAL_FAULT_OFFSET (13)
+#define EMBER_AF_PUMP_STATUS_DEVICE_FAULT (1)
+#define EMBER_AF_PUMP_STATUS_DEVICE_FAULT_OFFSET (0)
+#define EMBER_AF_PUMP_STATUS_SUPPLYFAULT (2)
+#define EMBER_AF_PUMP_STATUS_SUPPLYFAULT_OFFSET (1)
+#define EMBER_AF_PUMP_STATUS_SPEED_LOW (4)
+#define EMBER_AF_PUMP_STATUS_SPEED_LOW_OFFSET (2)
+#define EMBER_AF_PUMP_STATUS_SPEED_HIGH (8)
+#define EMBER_AF_PUMP_STATUS_SPEED_HIGH_OFFSET (3)
+#define EMBER_AF_PUMP_STATUS_LOCAL_OVERRIDE (16)
+#define EMBER_AF_PUMP_STATUS_LOCAL_OVERRIDE_OFFSET (4)
+#define EMBER_AF_PUMP_STATUS_RUNNING (32)
+#define EMBER_AF_PUMP_STATUS_RUNNING_OFFSET (5)
+#define EMBER_AF_PUMP_STATUS_REMOTE_PRESSURE (64)
+#define EMBER_AF_PUMP_STATUS_REMOTE_PRESSURE_OFFSET (6)
+#define EMBER_AF_PUMP_STATUS_REMOTE_FLOW (128)
+#define EMBER_AF_PUMP_STATUS_REMOTE_FLOW_OFFSET (7)
+#define EMBER_AF_PUMP_STATUS_REMOTE_TEMPERATURE (256)
+#define EMBER_AF_PUMP_STATUS_REMOTE_TEMPERATURE_OFFSET (8)
+#define EMBER_AF_REMOTE_ENABLE_FLAGS_AND_DEVICE_STATUS2_REMOTE_ENABLE_FLAGS (15)
+#define EMBER_AF_REMOTE_ENABLE_FLAGS_AND_DEVICE_STATUS2_REMOTE_ENABLE_FLAGS_OFFSET (0)
+#define EMBER_AF_REMOTE_ENABLE_FLAGS_AND_DEVICE_STATUS2_DEVICE_STATUS2_STRUCTURE (240)
+#define EMBER_AF_REMOTE_ENABLE_FLAGS_AND_DEVICE_STATUS2_DEVICE_STATUS2_STRUCTURE_OFFSET (4)
+#define EMBER_AF_RESET_OPTIONS_RESET_CURRENT (1)
+#define EMBER_AF_RESET_OPTIONS_RESET_CURRENT_OFFSET (0)
+#define EMBER_AF_RESET_OPTIONS_RESET_ALL (2)
+#define EMBER_AF_RESET_OPTIONS_RESET_ALL_OFFSET (1)
+#define EMBER_AF_RESET_OPTIONS_ERASE_INDEX (4)
+#define EMBER_AF_RESET_OPTIONS_ERASE_INDEX_OFFSET (2)
+#define EMBER_AF_RESTART_OPTIONS_START_MODE1 (1)
+#define EMBER_AF_RESTART_OPTIONS_START_MODE1_OFFSET (0)
+#define EMBER_AF_RESTART_OPTIONS_STARTUP_MODE2 (2)
+#define EMBER_AF_RESTART_OPTIONS_STARTUP_MODE2_OFFSET (1)
+#define EMBER_AF_RESTART_OPTIONS_STARTUP_MODE3 (4)
+#define EMBER_AF_RESTART_OPTIONS_STARTUP_MODE3_OFFSET (2)
+#define EMBER_AF_RESTART_OPTIONS_IMMEDIATE (8)
+#define EMBER_AF_RESTART_OPTIONS_IMMEDIATE_OFFSET (3)
+#define EMBER_AF_SCENES_COPY_MODE_COPY_ALL_SCENES (1)
+#define EMBER_AF_SCENES_COPY_MODE_COPY_ALL_SCENES_OFFSET (0)
+#define EMBER_AF_SHADE_CLOSURE_STATUS_OPERATIONAL (1)
+#define EMBER_AF_SHADE_CLOSURE_STATUS_OPERATIONAL_OFFSET (0)
+#define EMBER_AF_SHADE_CLOSURE_STATUS_ADJUSTING (2)
+#define EMBER_AF_SHADE_CLOSURE_STATUS_ADJUSTING_OFFSET (1)
+#define EMBER_AF_SHADE_CLOSURE_STATUS_OPENING (4)
+#define EMBER_AF_SHADE_CLOSURE_STATUS_OPENING_OFFSET (2)
+#define EMBER_AF_SHADE_CLOSURE_STATUS_MOTOR_OPENING (8)
+#define EMBER_AF_SHADE_CLOSURE_STATUS_MOTOR_OPENING_OFFSET (3)
+#define EMBER_AF_SNAPSHOT_CAUSE_GENERAL (1)
+#define EMBER_AF_SNAPSHOT_CAUSE_GENERAL_OFFSET (0)
+#define EMBER_AF_SNAPSHOT_CAUSE_END_OF_BILLING_PERIOD (2)
+#define EMBER_AF_SNAPSHOT_CAUSE_END_OF_BILLING_PERIOD_OFFSET (1)
+#define EMBER_AF_SNAPSHOT_CAUSE_END_OF_BLOCK_PERIOD (4)
+#define EMBER_AF_SNAPSHOT_CAUSE_END_OF_BLOCK_PERIOD_OFFSET (2)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_TARIFF_INFORMATION (8)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_TARIFF_INFORMATION_OFFSET (3)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_PRICE_MATRIX (16)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_PRICE_MATRIX_OFFSET (4)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_BLOCK_THRESHOLDS (32)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_BLOCK_THRESHOLDS_OFFSET (5)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_CV (64)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_CV_OFFSET (6)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_CF (128)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_CF_OFFSET (7)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_CALENDAR (256)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_CALENDAR_OFFSET (8)
+#define EMBER_AF_SNAPSHOT_CAUSE_CRITICAL_PEAK_PRICING (512)
+#define EMBER_AF_SNAPSHOT_CAUSE_CRITICAL_PEAK_PRICING_OFFSET (9)
+#define EMBER_AF_SNAPSHOT_CAUSE_MANUALLY_TRIGGERED_FROM_CLIENT (1024)
+#define EMBER_AF_SNAPSHOT_CAUSE_MANUALLY_TRIGGERED_FROM_CLIENT_OFFSET (10)
+#define EMBER_AF_SNAPSHOT_CAUSE_END_OF_RESOLVE_PERIOD (2048)
+#define EMBER_AF_SNAPSHOT_CAUSE_END_OF_RESOLVE_PERIOD_OFFSET (11)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_TENANCY (4096)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_TENANCY_OFFSET (12)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_SUPPLIER (8192)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_SUPPLIER_OFFSET (13)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_MODE (16384)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_MODE_OFFSET (14)
+#define EMBER_AF_SNAPSHOT_CAUSE_DEBT_PAYMENT (32768)
+#define EMBER_AF_SNAPSHOT_CAUSE_DEBT_PAYMENT_OFFSET (15)
+#define EMBER_AF_SNAPSHOT_CAUSE_SCHEDULED_SNAPSHOT (65536)
+#define EMBER_AF_SNAPSHOT_CAUSE_SCHEDULED_SNAPSHOT_OFFSET (16)
+#define EMBER_AF_SNAPSHOT_CAUSE_OTA_FIRMWARE_DOWNLOAD (131072)
+#define EMBER_AF_SNAPSHOT_CAUSE_OTA_FIRMWARE_DOWNLOAD_OFFSET (17)
+#define EMBER_AF_SQUAWK_INFO_MODE (240)
+#define EMBER_AF_SQUAWK_INFO_MODE_OFFSET (4)
+#define EMBER_AF_SQUAWK_INFO_STROBE (8)
+#define EMBER_AF_SQUAWK_INFO_STROBE_OFFSET (3)
+#define EMBER_AF_SQUAWK_INFO_LEVEL (3)
+#define EMBER_AF_SQUAWK_INFO_LEVEL_OFFSET (0)
+#define EMBER_AF_START_TIME_MINUTES (63)
+#define EMBER_AF_START_TIME_MINUTES_OFFSET (0)
+#define EMBER_AF_START_TIME_TIME_ENCODING (192)
+#define EMBER_AF_START_TIME_TIME_ENCODING_OFFSET (6)
+#define EMBER_AF_START_TIME_HOURS (65280)
+#define EMBER_AF_START_TIME_HOURS_OFFSET (8)
+#define EMBER_AF_SUPPLY_CONTROL_BITS_ACKNOWLEDGE_REQUIRED (1)
+#define EMBER_AF_SUPPLY_CONTROL_BITS_ACKNOWLEDGE_REQUIRED_OFFSET (0)
+#define EMBER_AF_TARIFF_TYPE_CHARGING_SCHEME_TARIFF_TYPE (15)
+#define EMBER_AF_TARIFF_TYPE_CHARGING_SCHEME_TARIFF_TYPE_OFFSET (0)
+#define EMBER_AF_TARIFF_TYPE_CHARGING_SCHEME_TARIFF_CHARGING_SCHEME (240)
+#define EMBER_AF_TARIFF_TYPE_CHARGING_SCHEME_TARIFF_CHARGING_SCHEME_OFFSET (4)
+#define EMBER_AF_THERMOSTAT_ALARM_MASK_INITIALIZATION_FAILURE (1)
+#define EMBER_AF_THERMOSTAT_ALARM_MASK_INITIALIZATION_FAILURE_OFFSET (0)
+#define EMBER_AF_THERMOSTAT_ALARM_MASK_HARDWARE_FAILURE (2)
+#define EMBER_AF_THERMOSTAT_ALARM_MASK_HARDWARE_FAILURE_OFFSET (1)
+#define EMBER_AF_THERMOSTAT_ALARM_MASK_SELFCALIBRATION_FAILURE (4)
+#define EMBER_AF_THERMOSTAT_ALARM_MASK_SELFCALIBRATION_FAILURE_OFFSET (2)
+#define EMBER_AF_THERMOSTAT_OCCUPANCY_OCCUPIED (1)
+#define EMBER_AF_THERMOSTAT_OCCUPANCY_OCCUPIED_OFFSET (0)
+#define EMBER_AF_THERMOSTAT_RUNNING_STATE_HEAT_STATE_ON (1)
+#define EMBER_AF_THERMOSTAT_RUNNING_STATE_HEAT_STATE_ON_OFFSET (0)
+#define EMBER_AF_THERMOSTAT_RUNNING_STATE_COOL_STATE_ON (2)
+#define EMBER_AF_THERMOSTAT_RUNNING_STATE_COOL_STATE_ON_OFFSET (1)
+#define EMBER_AF_THERMOSTAT_RUNNING_STATE_FAN_STATE_ON (4)
+#define EMBER_AF_THERMOSTAT_RUNNING_STATE_FAN_STATE_ON_OFFSET (2)
+#define EMBER_AF_THERMOSTAT_RUNNING_STATE_HEAT_SECOND_STAGE_STATE_ON (8)
+#define EMBER_AF_THERMOSTAT_RUNNING_STATE_HEAT_SECOND_STAGE_STATE_ON_OFFSET (3)
+#define EMBER_AF_THERMOSTAT_RUNNING_STATE_COOL_SECOND_STAGE_STATE_ON (16)
+#define EMBER_AF_THERMOSTAT_RUNNING_STATE_COOL_SECOND_STAGE_STATE_ON_OFFSET (4)
+#define EMBER_AF_THERMOSTAT_RUNNING_STATE_FAN_SECOND_STAGE_STATE_ON (32)
+#define EMBER_AF_THERMOSTAT_RUNNING_STATE_FAN_SECOND_STAGE_STATE_ON_OFFSET (5)
+#define EMBER_AF_THERMOSTAT_RUNNING_STATE_FAN_THIRD_STAGE_STATE_ON (64)
+#define EMBER_AF_THERMOSTAT_RUNNING_STATE_FAN_THIRD_STAGE_STATE_ON_OFFSET (6)
+#define EMBER_AF_THERMOSTAT_SENSING_LOCAL_TEMP_SENSED_REMOTELY (1)
+#define EMBER_AF_THERMOSTAT_SENSING_LOCAL_TEMP_SENSED_REMOTELY_OFFSET (0)
+#define EMBER_AF_THERMOSTAT_SENSING_OUTDOOR_TEMP_SENSED_REMOTELY (2)
+#define EMBER_AF_THERMOSTAT_SENSING_OUTDOOR_TEMP_SENSED_REMOTELY_OFFSET (1)
+#define EMBER_AF_THERMOSTAT_SENSING_OCCUPANCY_SENSED_REMOTELY (4)
+#define EMBER_AF_THERMOSTAT_SENSING_OCCUPANCY_SENSED_REMOTELY_OFFSET (2)
+#define EMBER_AF_TIME_STATUS_MASK_MASTER_CLOCK (1)
+#define EMBER_AF_TIME_STATUS_MASK_MASTER_CLOCK_OFFSET (0)
+#define EMBER_AF_TIME_STATUS_MASK_SYNCHRONIZED (2)
+#define EMBER_AF_TIME_STATUS_MASK_SYNCHRONIZED_OFFSET (1)
+#define EMBER_AF_TIME_STATUS_MASK_MASTER_ZONE_DST (4)
+#define EMBER_AF_TIME_STATUS_MASK_MASTER_ZONE_DST_OFFSET (2)
+#define EMBER_AF_TIME_STATUS_MASK_SUPERSEDING (8)
+#define EMBER_AF_TIME_STATUS_MASK_SUPERSEDING_OFFSET (3)
+#define EMBER_AF_WARNING_INFO_MODE (240)
+#define EMBER_AF_WARNING_INFO_MODE_OFFSET (4)
+#define EMBER_AF_WARNING_INFO_STROBE (12)
+#define EMBER_AF_WARNING_INFO_STROBE_OFFSET (2)
+#define EMBER_AF_WARNING_INFO_SIREN_LEVEL (3)
+#define EMBER_AF_WARNING_INFO_SIREN_LEVEL_OFFSET (0)
+#define EMBER_AF_ZIGBEE_INFORMATION_LOGICAL_TYPE (3)
+#define EMBER_AF_ZIGBEE_INFORMATION_LOGICAL_TYPE_OFFSET (0)
+#define EMBER_AF_ZIGBEE_INFORMATION_RX_ON_WHEN_IDLE (4)
+#define EMBER_AF_ZIGBEE_INFORMATION_RX_ON_WHEN_IDLE_OFFSET (2)
+#define EMBER_AF_ZLL_INFORMATION_FACTORY_NEW (1)
+#define EMBER_AF_ZLL_INFORMATION_FACTORY_NEW_OFFSET (0)
+#define EMBER_AF_ZLL_INFORMATION_ADDRESS_ASSIGNMENT (2)
+#define EMBER_AF_ZLL_INFORMATION_ADDRESS_ASSIGNMENT_OFFSET (1)
+#define EMBER_AF_ZLL_INFORMATION_TOUCH_LINK_INITIATOR (16)
+#define EMBER_AF_ZLL_INFORMATION_TOUCH_LINK_INITIATOR_OFFSET (4)
+#define EMBER_AF_ZLL_INFORMATION_TOUCH_LINK_PRIORITY_REQUEST (32)
+#define EMBER_AF_ZLL_INFORMATION_TOUCH_LINK_PRIORITY_REQUEST_OFFSET (5)
+#define EMBER_AF_ZLL_INFORMATION_PROFILE_INTEROP (128)
+#define EMBER_AF_ZLL_INFORMATION_PROFILE_INTEROP_OFFSET (7)
diff --git a/src/darwin/Framework/CHIP/gen/gen_config.h b/src/darwin/Framework/CHIP/gen/gen_config.h
new file mode 100644
index 0000000..7c77a36
--- /dev/null
+++ b/src/darwin/Framework/CHIP/gen/gen_config.h
@@ -0,0 +1,88 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+// Prevent multiple inclusion
+#pragma once
+
+// User options for plugin Binding Table Library
+#define EMBER_BINDING_TABLE_SIZE 10
+
+/**** Network Section ****/
+#define EMBER_SUPPORTED_NETWORKS (1)
+
+#define EMBER_APS_UNICAST_MESSAGE_COUNT 10
+
+/**** Cluster endpoint counts ****/
+#define EMBER_AF_BARRIER_CONTROL_CLUSTER_CLIENT_ENDPOINT_COUNT (1)
+#define EMBER_AF_BASIC_CLUSTER_CLIENT_ENDPOINT_COUNT (1)
+#define EMBER_AF_BINDING_CLUSTER_CLIENT_ENDPOINT_COUNT (1)
+#define EMBER_AF_COLOR_CONTROL_CLUSTER_CLIENT_ENDPOINT_COUNT (1)
+#define EMBER_AF_DOOR_LOCK_CLUSTER_CLIENT_ENDPOINT_COUNT (1)
+#define EMBER_AF_GROUPS_CLUSTER_CLIENT_ENDPOINT_COUNT (1)
+#define EMBER_AF_IDENTIFY_CLUSTER_CLIENT_ENDPOINT_COUNT (1)
+#define EMBER_AF_LEVEL_CONTROL_CLUSTER_CLIENT_ENDPOINT_COUNT (1)
+#define EMBER_AF_ON_OFF_CLUSTER_CLIENT_ENDPOINT_COUNT (1)
+#define EMBER_AF_SCENES_CLUSTER_CLIENT_ENDPOINT_COUNT (1)
+#define EMBER_AF_TEMP_MEASUREMENT_CLUSTER_CLIENT_ENDPOINT_COUNT (1)
+
+/**** Cluster Plugins ****/
+
+// Use this macro to check if the client side of the Barrier Control cluster is included
+#define ZCL_USING_BARRIER_CONTROL_CLUSTER_CLIENT
+#define EMBER_AF_PLUGIN_BARRIER_CONTROL_CLIENT
+
+// Use this macro to check if the client side of the Basic cluster is included
+#define ZCL_USING_BASIC_CLUSTER_CLIENT
+#define EMBER_AF_PLUGIN_BASIC_CLIENT
+
+// Use this macro to check if the client side of the Binding cluster is included
+#define ZCL_USING_BINDING_CLUSTER_CLIENT
+#define EMBER_AF_PLUGIN_BINDING_CLIENT
+
+// Use this macro to check if the client side of the Color Control cluster is included
+#define ZCL_USING_COLOR_CONTROL_CLUSTER_CLIENT
+#define EMBER_AF_PLUGIN_COLOR_CONTROL_CLIENT
+
+// Use this macro to check if the client side of the Door Lock cluster is included
+#define ZCL_USING_DOOR_LOCK_CLUSTER_CLIENT
+#define EMBER_AF_PLUGIN_DOOR_LOCK_CLIENT
+
+// Use this macro to check if the client side of the Groups cluster is included
+#define ZCL_USING_GROUPS_CLUSTER_CLIENT
+#define EMBER_AF_PLUGIN_GROUPS_CLIENT
+
+// Use this macro to check if the client side of the Identify cluster is included
+#define ZCL_USING_IDENTIFY_CLUSTER_CLIENT
+#define EMBER_AF_PLUGIN_IDENTIFY_CLIENT
+
+// Use this macro to check if the client side of the Level Control cluster is included
+#define ZCL_USING_LEVEL_CONTROL_CLUSTER_CLIENT
+#define EMBER_AF_PLUGIN_LEVEL_CONTROL_CLIENT
+
+// Use this macro to check if the client side of the On/off cluster is included
+#define ZCL_USING_ON_OFF_CLUSTER_CLIENT
+#define EMBER_AF_PLUGIN_ON_OFF_CLIENT
+
+// Use this macro to check if the client side of the Scenes cluster is included
+#define ZCL_USING_SCENES_CLUSTER_CLIENT
+#define EMBER_AF_PLUGIN_SCENES_CLIENT
+
+// Use this macro to check if the client side of the Temperature Measurement cluster is included
+#define ZCL_USING_TEMP_MEASUREMENT_CLUSTER_CLIENT
+#define EMBER_AF_PLUGIN_TEMPERATURE_MEASUREMENT_CLIENT
diff --git a/src/darwin/Framework/CHIP/gen/gen_tokens.h b/src/darwin/Framework/CHIP/gen/gen_tokens.h
new file mode 100644
index 0000000..860bf57
--- /dev/null
+++ b/src/darwin/Framework/CHIP/gen/gen_tokens.h
@@ -0,0 +1,45 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+// Prevent multiple inclusion
+#pragma once
+
+// This file contains the tokens for attributes stored in flash
+
+// Identifier tags for tokens
+
+// Types for the tokens
+#ifdef DEFINETYPES
+#endif // DEFINETYPES
+
+// Actual token definitions
+#ifdef DEFINETOKENS
+#endif // DEFINETOKENS
+
+// Macro snippet that loads all the attributes from tokens
+#define GENERATED_TOKEN_LOADER(endpoint)                                                                                           \
+    do                                                                                                                             \
+    {                                                                                                                              \
+    } while (false)
+
+// Macro snippet that saves the attribute to token
+#define GENERATED_TOKEN_SAVER                                                                                                      \
+    do                                                                                                                             \
+    {                                                                                                                              \
+    } while (false)
diff --git a/src/darwin/Framework/CHIP/gen/print-cluster.h b/src/darwin/Framework/CHIP/gen/print-cluster.h
new file mode 100644
index 0000000..4348de1
--- /dev/null
+++ b/src/darwin/Framework/CHIP/gen/print-cluster.h
@@ -0,0 +1,868 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+// Prevent multiple inclusion
+#pragma once
+
+// This is the mapping of IDs to cluster names assuming a format according
+// to the "EmberAfClusterName" defined in the ZCL header.
+// The names of clusters that are not present, are removed.
+
+#if defined(ZCL_USING_BASIC_CLUSTER_SERVER) || defined(ZCL_USING_BASIC_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_BASIC_CLUSTER { ZCL_BASIC_CLUSTER_ID, 0, "Basic" },
+#else
+#define CHIP_PRINTCLUSTER_BASIC_CLUSTER
+#endif
+
+#if defined(ZCL_USING_POWER_CONFIG_CLUSTER_SERVER) || defined(ZCL_USING_POWER_CONFIG_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_POWER_CONFIG_CLUSTER { ZCL_POWER_CONFIG_CLUSTER_ID, 1, "Power Configuration" },
+#else
+#define CHIP_PRINTCLUSTER_POWER_CONFIG_CLUSTER
+#endif
+
+#if defined(ZCL_USING_DEVICE_TEMP_CLUSTER_SERVER) || defined(ZCL_USING_DEVICE_TEMP_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_DEVICE_TEMP_CLUSTER { ZCL_DEVICE_TEMP_CLUSTER_ID, 2, "Device Temperature Configuration" },
+#else
+#define CHIP_PRINTCLUSTER_DEVICE_TEMP_CLUSTER
+#endif
+
+#if defined(ZCL_USING_IDENTIFY_CLUSTER_SERVER) || defined(ZCL_USING_IDENTIFY_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_IDENTIFY_CLUSTER { ZCL_IDENTIFY_CLUSTER_ID, 3, "Identify" },
+#else
+#define CHIP_PRINTCLUSTER_IDENTIFY_CLUSTER
+#endif
+
+#if defined(ZCL_USING_GROUPS_CLUSTER_SERVER) || defined(ZCL_USING_GROUPS_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_GROUPS_CLUSTER { ZCL_GROUPS_CLUSTER_ID, 4, "Groups" },
+#else
+#define CHIP_PRINTCLUSTER_GROUPS_CLUSTER
+#endif
+
+#if defined(ZCL_USING_SCENES_CLUSTER_SERVER) || defined(ZCL_USING_SCENES_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_SCENES_CLUSTER { ZCL_SCENES_CLUSTER_ID, 5, "Scenes" },
+#else
+#define CHIP_PRINTCLUSTER_SCENES_CLUSTER
+#endif
+
+#if defined(ZCL_USING_ON_OFF_CLUSTER_SERVER) || defined(ZCL_USING_ON_OFF_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_ON_OFF_CLUSTER { ZCL_ON_OFF_CLUSTER_ID, 6, "On/off" },
+#else
+#define CHIP_PRINTCLUSTER_ON_OFF_CLUSTER
+#endif
+
+#if defined(ZCL_USING_ON_OFF_SWITCH_CONFIG_CLUSTER_SERVER) || defined(ZCL_USING_ON_OFF_SWITCH_CONFIG_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_ON_OFF_SWITCH_CONFIG_CLUSTER { ZCL_ON_OFF_SWITCH_CONFIG_CLUSTER_ID, 7, "On/off Switch Configuration" },
+#else
+#define CHIP_PRINTCLUSTER_ON_OFF_SWITCH_CONFIG_CLUSTER
+#endif
+
+#if defined(ZCL_USING_LEVEL_CONTROL_CLUSTER_SERVER) || defined(ZCL_USING_LEVEL_CONTROL_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_LEVEL_CONTROL_CLUSTER { ZCL_LEVEL_CONTROL_CLUSTER_ID, 8, "Level Control" },
+#else
+#define CHIP_PRINTCLUSTER_LEVEL_CONTROL_CLUSTER
+#endif
+
+#if defined(ZCL_USING_ALARM_CLUSTER_SERVER) || defined(ZCL_USING_ALARM_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_ALARM_CLUSTER { ZCL_ALARM_CLUSTER_ID, 9, "Alarms" },
+#else
+#define CHIP_PRINTCLUSTER_ALARM_CLUSTER
+#endif
+
+#if defined(ZCL_USING_TIME_CLUSTER_SERVER) || defined(ZCL_USING_TIME_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_TIME_CLUSTER { ZCL_TIME_CLUSTER_ID, 10, "Time" },
+#else
+#define CHIP_PRINTCLUSTER_TIME_CLUSTER
+#endif
+
+#if defined(ZCL_USING_RSSI_LOCATION_CLUSTER_SERVER) || defined(ZCL_USING_RSSI_LOCATION_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_RSSI_LOCATION_CLUSTER { ZCL_RSSI_LOCATION_CLUSTER_ID, 11, "RSSI Location" },
+#else
+#define CHIP_PRINTCLUSTER_RSSI_LOCATION_CLUSTER
+#endif
+
+#if defined(ZCL_USING_BINARY_INPUT_BASIC_CLUSTER_SERVER) || defined(ZCL_USING_BINARY_INPUT_BASIC_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_BINARY_INPUT_BASIC_CLUSTER { ZCL_BINARY_INPUT_BASIC_CLUSTER_ID, 15, "Binary Input (Basic)" },
+#else
+#define CHIP_PRINTCLUSTER_BINARY_INPUT_BASIC_CLUSTER
+#endif
+
+#if defined(ZCL_USING_COMMISSIONING_CLUSTER_SERVER) || defined(ZCL_USING_COMMISSIONING_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_COMMISSIONING_CLUSTER { ZCL_COMMISSIONING_CLUSTER_ID, 21, "Commissioning" },
+#else
+#define CHIP_PRINTCLUSTER_COMMISSIONING_CLUSTER
+#endif
+
+#if defined(ZCL_USING_PARTITION_CLUSTER_SERVER) || defined(ZCL_USING_PARTITION_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_PARTITION_CLUSTER { ZCL_PARTITION_CLUSTER_ID, 22, "Partition" },
+#else
+#define CHIP_PRINTCLUSTER_PARTITION_CLUSTER
+#endif
+
+#if defined(ZCL_USING_OTA_BOOTLOAD_CLUSTER_SERVER) || defined(ZCL_USING_OTA_BOOTLOAD_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_OTA_BOOTLOAD_CLUSTER { ZCL_OTA_BOOTLOAD_CLUSTER_ID, 25, "Over the Air Bootloading" },
+#else
+#define CHIP_PRINTCLUSTER_OTA_BOOTLOAD_CLUSTER
+#endif
+
+#if defined(ZCL_USING_POWER_PROFILE_CLUSTER_SERVER) || defined(ZCL_USING_POWER_PROFILE_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_POWER_PROFILE_CLUSTER { ZCL_POWER_PROFILE_CLUSTER_ID, 26, "Power Profile" },
+#else
+#define CHIP_PRINTCLUSTER_POWER_PROFILE_CLUSTER
+#endif
+
+#if defined(ZCL_USING_APPLIANCE_CONTROL_CLUSTER_SERVER) || defined(ZCL_USING_APPLIANCE_CONTROL_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_APPLIANCE_CONTROL_CLUSTER { ZCL_APPLIANCE_CONTROL_CLUSTER_ID, 27, "Appliance Control" },
+#else
+#define CHIP_PRINTCLUSTER_APPLIANCE_CONTROL_CLUSTER
+#endif
+
+#if defined(ZCL_USING_POLL_CONTROL_CLUSTER_SERVER) || defined(ZCL_USING_POLL_CONTROL_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_POLL_CONTROL_CLUSTER { ZCL_POLL_CONTROL_CLUSTER_ID, 32, "Poll Control" },
+#else
+#define CHIP_PRINTCLUSTER_POLL_CONTROL_CLUSTER
+#endif
+
+#if defined(ZCL_USING_GREEN_POWER_CLUSTER_SERVER) || defined(ZCL_USING_GREEN_POWER_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_GREEN_POWER_CLUSTER { ZCL_GREEN_POWER_CLUSTER_ID, 33, "Green Power" },
+#else
+#define CHIP_PRINTCLUSTER_GREEN_POWER_CLUSTER
+#endif
+
+#if defined(ZCL_USING_KEEPALIVE_CLUSTER_SERVER) || defined(ZCL_USING_KEEPALIVE_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_KEEPALIVE_CLUSTER { ZCL_KEEPALIVE_CLUSTER_ID, 37, "Keep-Alive" },
+#else
+#define CHIP_PRINTCLUSTER_KEEPALIVE_CLUSTER
+#endif
+
+#if defined(ZCL_USING_SHADE_CONFIG_CLUSTER_SERVER) || defined(ZCL_USING_SHADE_CONFIG_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_SHADE_CONFIG_CLUSTER { ZCL_SHADE_CONFIG_CLUSTER_ID, 256, "Shade Configuration" },
+#else
+#define CHIP_PRINTCLUSTER_SHADE_CONFIG_CLUSTER
+#endif
+
+#if defined(ZCL_USING_DOOR_LOCK_CLUSTER_SERVER) || defined(ZCL_USING_DOOR_LOCK_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_DOOR_LOCK_CLUSTER { ZCL_DOOR_LOCK_CLUSTER_ID, 257, "Door Lock" },
+#else
+#define CHIP_PRINTCLUSTER_DOOR_LOCK_CLUSTER
+#endif
+
+#if defined(ZCL_USING_WINDOW_COVERING_CLUSTER_SERVER) || defined(ZCL_USING_WINDOW_COVERING_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_WINDOW_COVERING_CLUSTER { ZCL_WINDOW_COVERING_CLUSTER_ID, 258, "Window Covering" },
+#else
+#define CHIP_PRINTCLUSTER_WINDOW_COVERING_CLUSTER
+#endif
+
+#if defined(ZCL_USING_BARRIER_CONTROL_CLUSTER_SERVER) || defined(ZCL_USING_BARRIER_CONTROL_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_BARRIER_CONTROL_CLUSTER { ZCL_BARRIER_CONTROL_CLUSTER_ID, 259, "Barrier Control" },
+#else
+#define CHIP_PRINTCLUSTER_BARRIER_CONTROL_CLUSTER
+#endif
+
+#if defined(ZCL_USING_PUMP_CONFIG_CONTROL_CLUSTER_SERVER) || defined(ZCL_USING_PUMP_CONFIG_CONTROL_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_PUMP_CONFIG_CONTROL_CLUSTER { ZCL_PUMP_CONFIG_CONTROL_CLUSTER_ID, 512, "Pump Configuration and Control" },
+#else
+#define CHIP_PRINTCLUSTER_PUMP_CONFIG_CONTROL_CLUSTER
+#endif
+
+#if defined(ZCL_USING_THERMOSTAT_CLUSTER_SERVER) || defined(ZCL_USING_THERMOSTAT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_THERMOSTAT_CLUSTER { ZCL_THERMOSTAT_CLUSTER_ID, 513, "Thermostat" },
+#else
+#define CHIP_PRINTCLUSTER_THERMOSTAT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_FAN_CONTROL_CLUSTER_SERVER) || defined(ZCL_USING_FAN_CONTROL_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_FAN_CONTROL_CLUSTER { ZCL_FAN_CONTROL_CLUSTER_ID, 514, "Fan Control" },
+#else
+#define CHIP_PRINTCLUSTER_FAN_CONTROL_CLUSTER
+#endif
+
+#if defined(ZCL_USING_DEHUMID_CONTROL_CLUSTER_SERVER) || defined(ZCL_USING_DEHUMID_CONTROL_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_DEHUMID_CONTROL_CLUSTER { ZCL_DEHUMID_CONTROL_CLUSTER_ID, 515, "Dehumidification Control" },
+#else
+#define CHIP_PRINTCLUSTER_DEHUMID_CONTROL_CLUSTER
+#endif
+
+#if defined(ZCL_USING_THERMOSTAT_UI_CONFIG_CLUSTER_SERVER) || defined(ZCL_USING_THERMOSTAT_UI_CONFIG_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_THERMOSTAT_UI_CONFIG_CLUSTER                                                                             \
+    { ZCL_THERMOSTAT_UI_CONFIG_CLUSTER_ID, 516, "Thermostat User Interface Configuration" },
+#else
+#define CHIP_PRINTCLUSTER_THERMOSTAT_UI_CONFIG_CLUSTER
+#endif
+
+#if defined(ZCL_USING_COLOR_CONTROL_CLUSTER_SERVER) || defined(ZCL_USING_COLOR_CONTROL_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_COLOR_CONTROL_CLUSTER { ZCL_COLOR_CONTROL_CLUSTER_ID, 768, "Color Control" },
+#else
+#define CHIP_PRINTCLUSTER_COLOR_CONTROL_CLUSTER
+#endif
+
+#if defined(ZCL_USING_BALLAST_CONFIGURATION_CLUSTER_SERVER) || defined(ZCL_USING_BALLAST_CONFIGURATION_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_BALLAST_CONFIGURATION_CLUSTER { ZCL_BALLAST_CONFIGURATION_CLUSTER_ID, 769, "Ballast Configuration" },
+#else
+#define CHIP_PRINTCLUSTER_BALLAST_CONFIGURATION_CLUSTER
+#endif
+
+#if defined(ZCL_USING_ILLUM_MEASUREMENT_CLUSTER_SERVER) || defined(ZCL_USING_ILLUM_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_ILLUM_MEASUREMENT_CLUSTER { ZCL_ILLUM_MEASUREMENT_CLUSTER_ID, 1024, "Illuminance Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_ILLUM_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_ILLUM_LEVEL_SENSING_CLUSTER_SERVER) || defined(ZCL_USING_ILLUM_LEVEL_SENSING_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_ILLUM_LEVEL_SENSING_CLUSTER { ZCL_ILLUM_LEVEL_SENSING_CLUSTER_ID, 1025, "Illuminance Level Sensing" },
+#else
+#define CHIP_PRINTCLUSTER_ILLUM_LEVEL_SENSING_CLUSTER
+#endif
+
+#if defined(ZCL_USING_TEMP_MEASUREMENT_CLUSTER_SERVER) || defined(ZCL_USING_TEMP_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_TEMP_MEASUREMENT_CLUSTER { ZCL_TEMP_MEASUREMENT_CLUSTER_ID, 1026, "Temperature Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_TEMP_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_PRESSURE_MEASUREMENT_CLUSTER_SERVER) || defined(ZCL_USING_PRESSURE_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_PRESSURE_MEASUREMENT_CLUSTER { ZCL_PRESSURE_MEASUREMENT_CLUSTER_ID, 1027, "Pressure Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_PRESSURE_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_FLOW_MEASUREMENT_CLUSTER_SERVER) || defined(ZCL_USING_FLOW_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_FLOW_MEASUREMENT_CLUSTER { ZCL_FLOW_MEASUREMENT_CLUSTER_ID, 1028, "Flow Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_FLOW_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_RELATIVE_HUMIDITY_MEASUREMENT_CLUSTER_SERVER) ||                                                             \
+    defined(ZCL_USING_RELATIVE_HUMIDITY_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_RELATIVE_HUMIDITY_MEASUREMENT_CLUSTER                                                                    \
+    { ZCL_RELATIVE_HUMIDITY_MEASUREMENT_CLUSTER_ID, 1029, "Relative Humidity Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_RELATIVE_HUMIDITY_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_OCCUPANCY_SENSING_CLUSTER_SERVER) || defined(ZCL_USING_OCCUPANCY_SENSING_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_OCCUPANCY_SENSING_CLUSTER { ZCL_OCCUPANCY_SENSING_CLUSTER_ID, 1030, "Occupancy Sensing" },
+#else
+#define CHIP_PRINTCLUSTER_OCCUPANCY_SENSING_CLUSTER
+#endif
+
+#if defined(ZCL_USING_CARBON_MONOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                                 \
+    defined(ZCL_USING_CARBON_MONOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_CARBON_MONOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER                                                        \
+    { ZCL_CARBON_MONOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1036, "Carbon Monoxide Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_CARBON_MONOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_CARBON_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                                  \
+    defined(ZCL_USING_CARBON_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_CARBON_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER                                                         \
+    { ZCL_CARBON_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1037, "Carbon Dioxide Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_CARBON_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_ETHYLENE_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                                        \
+    defined(ZCL_USING_ETHYLENE_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_ETHYLENE_CONCENTRATION_MEASUREMENT_CLUSTER                                                               \
+    { ZCL_ETHYLENE_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1038, "Ethylene Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_ETHYLENE_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_ETHYLENE_OXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                                  \
+    defined(ZCL_USING_ETHYLENE_OXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_ETHYLENE_OXIDE_CONCENTRATION_MEASUREMENT_CLUSTER                                                         \
+    { ZCL_ETHYLENE_OXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1039, "Ethylene Oxide Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_ETHYLENE_OXIDE_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_HYDROGEN_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                                        \
+    defined(ZCL_USING_HYDROGEN_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_HYDROGEN_CONCENTRATION_MEASUREMENT_CLUSTER                                                               \
+    { ZCL_HYDROGEN_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1040, "Hydrogen Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_HYDROGEN_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_HYDROGEN_SULPHIDE_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                               \
+    defined(ZCL_USING_HYDROGEN_SULPHIDE_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_HYDROGEN_SULPHIDE_CONCENTRATION_MEASUREMENT_CLUSTER                                                      \
+    { ZCL_HYDROGEN_SULPHIDE_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1041, "Hydrogen Sulphide Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_HYDROGEN_SULPHIDE_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_NITRIC_OXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                                    \
+    defined(ZCL_USING_NITRIC_OXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_NITRIC_OXIDE_CONCENTRATION_MEASUREMENT_CLUSTER                                                           \
+    { ZCL_NITRIC_OXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1042, "Nitric Oxide Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_NITRIC_OXIDE_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_NITROGEN_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                                \
+    defined(ZCL_USING_NITROGEN_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_NITROGEN_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER                                                       \
+    { ZCL_NITROGEN_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1043, "Nitrogen Dioxide Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_NITROGEN_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_OXYGEN_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                                          \
+    defined(ZCL_USING_OXYGEN_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_OXYGEN_CONCENTRATION_MEASUREMENT_CLUSTER                                                                 \
+    { ZCL_OXYGEN_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1044, "Oxygen Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_OXYGEN_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_OZONE_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                                           \
+    defined(ZCL_USING_OZONE_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_OZONE_CONCENTRATION_MEASUREMENT_CLUSTER                                                                  \
+    { ZCL_OZONE_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1045, "Ozone Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_OZONE_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_SULFUR_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                                  \
+    defined(ZCL_USING_SULFUR_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_SULFUR_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER                                                         \
+    { ZCL_SULFUR_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1046, "Sulfur Dioxide Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_SULFUR_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_DISSOLVED_OXYGEN_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                                \
+    defined(ZCL_USING_DISSOLVED_OXYGEN_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_DISSOLVED_OXYGEN_CONCENTRATION_MEASUREMENT_CLUSTER                                                       \
+    { ZCL_DISSOLVED_OXYGEN_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1047, "Dissolved Oxygen Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_DISSOLVED_OXYGEN_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_BROMATE_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                                         \
+    defined(ZCL_USING_BROMATE_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_BROMATE_CONCENTRATION_MEASUREMENT_CLUSTER                                                                \
+    { ZCL_BROMATE_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1048, "Bromate Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_BROMATE_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_CHLORAMINES_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                                     \
+    defined(ZCL_USING_CHLORAMINES_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_CHLORAMINES_CONCENTRATION_MEASUREMENT_CLUSTER                                                            \
+    { ZCL_CHLORAMINES_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1049, "Chloramines Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_CHLORAMINES_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_CHLORINE_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                                        \
+    defined(ZCL_USING_CHLORINE_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_CHLORINE_CONCENTRATION_MEASUREMENT_CLUSTER                                                               \
+    { ZCL_CHLORINE_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1050, "Chlorine Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_CHLORINE_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_FECAL_COLIFORM_AND_E_COLI_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                       \
+    defined(ZCL_USING_FECAL_COLIFORM_AND_E_COLI_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_FECAL_COLIFORM_AND_E_COLI_CONCENTRATION_MEASUREMENT_CLUSTER                                              \
+    { ZCL_FECAL_COLIFORM_AND_E_COLI_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1051,                                                    \
+      "Fecal coliform and E. Coli Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_FECAL_COLIFORM_AND_E_COLI_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_FLUORIDE_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                                        \
+    defined(ZCL_USING_FLUORIDE_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_FLUORIDE_CONCENTRATION_MEASUREMENT_CLUSTER                                                               \
+    { ZCL_FLUORIDE_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1052, "Fluoride Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_FLUORIDE_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_HALOACETIC_ACIDS_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                                \
+    defined(ZCL_USING_HALOACETIC_ACIDS_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_HALOACETIC_ACIDS_CONCENTRATION_MEASUREMENT_CLUSTER                                                       \
+    { ZCL_HALOACETIC_ACIDS_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1053, "Haloacetic Acids Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_HALOACETIC_ACIDS_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_TOTAL_TRIHALOMETHANES_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                           \
+    defined(ZCL_USING_TOTAL_TRIHALOMETHANES_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_TOTAL_TRIHALOMETHANES_CONCENTRATION_MEASUREMENT_CLUSTER                                                  \
+    { ZCL_TOTAL_TRIHALOMETHANES_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1054, "Total Trihalomethanes Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_TOTAL_TRIHALOMETHANES_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_TOTAL_COLIFORM_BACTERIA_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                         \
+    defined(ZCL_USING_TOTAL_COLIFORM_BACTERIA_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_TOTAL_COLIFORM_BACTERIA_CONCENTRATION_MEASUREMENT_CLUSTER                                                \
+    { ZCL_TOTAL_COLIFORM_BACTERIA_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1055, "Total Coliform Bacteria Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_TOTAL_COLIFORM_BACTERIA_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_TURBIDITY_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                                       \
+    defined(ZCL_USING_TURBIDITY_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_TURBIDITY_CONCENTRATION_MEASUREMENT_CLUSTER                                                              \
+    { ZCL_TURBIDITY_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1056, "Turbidity Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_TURBIDITY_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_COPPER_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                                          \
+    defined(ZCL_USING_COPPER_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_COPPER_CONCENTRATION_MEASUREMENT_CLUSTER                                                                 \
+    { ZCL_COPPER_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1057, "Copper Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_COPPER_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_LEAD_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                                            \
+    defined(ZCL_USING_LEAD_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_LEAD_CONCENTRATION_MEASUREMENT_CLUSTER                                                                   \
+    { ZCL_LEAD_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1058, "Lead Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_LEAD_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_MANGANESE_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                                       \
+    defined(ZCL_USING_MANGANESE_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_MANGANESE_CONCENTRATION_MEASUREMENT_CLUSTER                                                              \
+    { ZCL_MANGANESE_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1059, "Manganese Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_MANGANESE_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_SULFATE_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                                         \
+    defined(ZCL_USING_SULFATE_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_SULFATE_CONCENTRATION_MEASUREMENT_CLUSTER                                                                \
+    { ZCL_SULFATE_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1060, "Sulfate Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_SULFATE_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_BROMODICHLOROMETHANE_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                            \
+    defined(ZCL_USING_BROMODICHLOROMETHANE_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_BROMODICHLOROMETHANE_CONCENTRATION_MEASUREMENT_CLUSTER                                                   \
+    { ZCL_BROMODICHLOROMETHANE_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1061, "Bromodichloromethane Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_BROMODICHLOROMETHANE_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_BROMOFORM_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                                       \
+    defined(ZCL_USING_BROMOFORM_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_BROMOFORM_CONCENTRATION_MEASUREMENT_CLUSTER                                                              \
+    { ZCL_BROMOFORM_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1062, "Bromoform Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_BROMOFORM_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_CHLORODIBROMOMETHANE_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                            \
+    defined(ZCL_USING_CHLORODIBROMOMETHANE_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_CHLORODIBROMOMETHANE_CONCENTRATION_MEASUREMENT_CLUSTER                                                   \
+    { ZCL_CHLORODIBROMOMETHANE_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1063, "Chlorodibromomethane Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_CHLORODIBROMOMETHANE_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_CHLOROFORM_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                                      \
+    defined(ZCL_USING_CHLOROFORM_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_CHLOROFORM_CONCENTRATION_MEASUREMENT_CLUSTER                                                             \
+    { ZCL_CHLOROFORM_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1064, "Chloroform Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_CHLOROFORM_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_SODIUM_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) ||                                                          \
+    defined(ZCL_USING_SODIUM_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_SODIUM_CONCENTRATION_MEASUREMENT_CLUSTER                                                                 \
+    { ZCL_SODIUM_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1065, "Sodium Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_SODIUM_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_IAS_ZONE_CLUSTER_SERVER) || defined(ZCL_USING_IAS_ZONE_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_IAS_ZONE_CLUSTER { ZCL_IAS_ZONE_CLUSTER_ID, 1280, "IAS Zone" },
+#else
+#define CHIP_PRINTCLUSTER_IAS_ZONE_CLUSTER
+#endif
+
+#if defined(ZCL_USING_IAS_ACE_CLUSTER_SERVER) || defined(ZCL_USING_IAS_ACE_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_IAS_ACE_CLUSTER { ZCL_IAS_ACE_CLUSTER_ID, 1281, "IAS ACE" },
+#else
+#define CHIP_PRINTCLUSTER_IAS_ACE_CLUSTER
+#endif
+
+#if defined(ZCL_USING_IAS_WD_CLUSTER_SERVER) || defined(ZCL_USING_IAS_WD_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_IAS_WD_CLUSTER { ZCL_IAS_WD_CLUSTER_ID, 1282, "IAS WD" },
+#else
+#define CHIP_PRINTCLUSTER_IAS_WD_CLUSTER
+#endif
+
+#if defined(ZCL_USING_GENERIC_TUNNEL_CLUSTER_SERVER) || defined(ZCL_USING_GENERIC_TUNNEL_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_GENERIC_TUNNEL_CLUSTER { ZCL_GENERIC_TUNNEL_CLUSTER_ID, 1536, "Generic Tunnel" },
+#else
+#define CHIP_PRINTCLUSTER_GENERIC_TUNNEL_CLUSTER
+#endif
+
+#if defined(ZCL_USING_BACNET_PROTOCOL_TUNNEL_CLUSTER_SERVER) || defined(ZCL_USING_BACNET_PROTOCOL_TUNNEL_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_BACNET_PROTOCOL_TUNNEL_CLUSTER { ZCL_BACNET_PROTOCOL_TUNNEL_CLUSTER_ID, 1537, "BACnet Protocol Tunnel" },
+#else
+#define CHIP_PRINTCLUSTER_BACNET_PROTOCOL_TUNNEL_CLUSTER
+#endif
+
+#if defined(ZCL_USING_11073_PROTOCOL_TUNNEL_CLUSTER_SERVER) || defined(ZCL_USING_11073_PROTOCOL_TUNNEL_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_11073_PROTOCOL_TUNNEL_CLUSTER { ZCL_11073_PROTOCOL_TUNNEL_CLUSTER_ID, 1556, "11073 Protocol Tunnel" },
+#else
+#define CHIP_PRINTCLUSTER_11073_PROTOCOL_TUNNEL_CLUSTER
+#endif
+
+#if defined(ZCL_USING_ISO7816_PROTOCOL_TUNNEL_CLUSTER_SERVER) || defined(ZCL_USING_ISO7816_PROTOCOL_TUNNEL_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_ISO7816_PROTOCOL_TUNNEL_CLUSTER                                                                          \
+    { ZCL_ISO7816_PROTOCOL_TUNNEL_CLUSTER_ID, 1557, "ISO 7816 Protocol Tunnel" },
+#else
+#define CHIP_PRINTCLUSTER_ISO7816_PROTOCOL_TUNNEL_CLUSTER
+#endif
+
+#if defined(ZCL_USING_PRICE_CLUSTER_SERVER) || defined(ZCL_USING_PRICE_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_PRICE_CLUSTER { ZCL_PRICE_CLUSTER_ID, 1792, "Price" },
+#else
+#define CHIP_PRINTCLUSTER_PRICE_CLUSTER
+#endif
+
+#if defined(ZCL_USING_DEMAND_RESPONSE_LOAD_CONTROL_CLUSTER_SERVER) || defined(ZCL_USING_DEMAND_RESPONSE_LOAD_CONTROL_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_DEMAND_RESPONSE_LOAD_CONTROL_CLUSTER                                                                     \
+    { ZCL_DEMAND_RESPONSE_LOAD_CONTROL_CLUSTER_ID, 1793, "Demand Response and Load Control" },
+#else
+#define CHIP_PRINTCLUSTER_DEMAND_RESPONSE_LOAD_CONTROL_CLUSTER
+#endif
+
+#if defined(ZCL_USING_SIMPLE_METERING_CLUSTER_SERVER) || defined(ZCL_USING_SIMPLE_METERING_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_SIMPLE_METERING_CLUSTER { ZCL_SIMPLE_METERING_CLUSTER_ID, 1794, "Simple Metering" },
+#else
+#define CHIP_PRINTCLUSTER_SIMPLE_METERING_CLUSTER
+#endif
+
+#if defined(ZCL_USING_MESSAGING_CLUSTER_SERVER) || defined(ZCL_USING_MESSAGING_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_MESSAGING_CLUSTER { ZCL_MESSAGING_CLUSTER_ID, 1795, "Messaging" },
+#else
+#define CHIP_PRINTCLUSTER_MESSAGING_CLUSTER
+#endif
+
+#if defined(ZCL_USING_TUNNELING_CLUSTER_SERVER) || defined(ZCL_USING_TUNNELING_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_TUNNELING_CLUSTER { ZCL_TUNNELING_CLUSTER_ID, 1796, "Tunneling" },
+#else
+#define CHIP_PRINTCLUSTER_TUNNELING_CLUSTER
+#endif
+
+#if defined(ZCL_USING_PREPAYMENT_CLUSTER_SERVER) || defined(ZCL_USING_PREPAYMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_PREPAYMENT_CLUSTER { ZCL_PREPAYMENT_CLUSTER_ID, 1797, "Prepayment" },
+#else
+#define CHIP_PRINTCLUSTER_PREPAYMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_ENERGY_MANAGEMENT_CLUSTER_SERVER) || defined(ZCL_USING_ENERGY_MANAGEMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_ENERGY_MANAGEMENT_CLUSTER { ZCL_ENERGY_MANAGEMENT_CLUSTER_ID, 1798, "Energy Management" },
+#else
+#define CHIP_PRINTCLUSTER_ENERGY_MANAGEMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_CALENDAR_CLUSTER_SERVER) || defined(ZCL_USING_CALENDAR_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_CALENDAR_CLUSTER { ZCL_CALENDAR_CLUSTER_ID, 1799, "Calendar" },
+#else
+#define CHIP_PRINTCLUSTER_CALENDAR_CLUSTER
+#endif
+
+#if defined(ZCL_USING_DEVICE_MANAGEMENT_CLUSTER_SERVER) || defined(ZCL_USING_DEVICE_MANAGEMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_DEVICE_MANAGEMENT_CLUSTER { ZCL_DEVICE_MANAGEMENT_CLUSTER_ID, 1800, "Device Management" },
+#else
+#define CHIP_PRINTCLUSTER_DEVICE_MANAGEMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_EVENTS_CLUSTER_SERVER) || defined(ZCL_USING_EVENTS_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_EVENTS_CLUSTER { ZCL_EVENTS_CLUSTER_ID, 1801, "Events" },
+#else
+#define CHIP_PRINTCLUSTER_EVENTS_CLUSTER
+#endif
+
+#if defined(ZCL_USING_MDU_PAIRING_CLUSTER_SERVER) || defined(ZCL_USING_MDU_PAIRING_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_MDU_PAIRING_CLUSTER { ZCL_MDU_PAIRING_CLUSTER_ID, 1802, "MDU Pairing" },
+#else
+#define CHIP_PRINTCLUSTER_MDU_PAIRING_CLUSTER
+#endif
+
+#if defined(ZCL_USING_SUB_GHZ_CLUSTER_SERVER) || defined(ZCL_USING_SUB_GHZ_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_SUB_GHZ_CLUSTER { ZCL_SUB_GHZ_CLUSTER_ID, 1803, "Sub-GHz" },
+#else
+#define CHIP_PRINTCLUSTER_SUB_GHZ_CLUSTER
+#endif
+
+#if defined(ZCL_USING_KEY_ESTABLISHMENT_CLUSTER_SERVER) || defined(ZCL_USING_KEY_ESTABLISHMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_KEY_ESTABLISHMENT_CLUSTER { ZCL_KEY_ESTABLISHMENT_CLUSTER_ID, 2048, "Key Establishment" },
+#else
+#define CHIP_PRINTCLUSTER_KEY_ESTABLISHMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_INFORMATION_CLUSTER_SERVER) || defined(ZCL_USING_INFORMATION_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_INFORMATION_CLUSTER { ZCL_INFORMATION_CLUSTER_ID, 2304, "Information" },
+#else
+#define CHIP_PRINTCLUSTER_INFORMATION_CLUSTER
+#endif
+
+#if defined(ZCL_USING_DATA_SHARING_CLUSTER_SERVER) || defined(ZCL_USING_DATA_SHARING_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_DATA_SHARING_CLUSTER { ZCL_DATA_SHARING_CLUSTER_ID, 2305, "Data Sharing" },
+#else
+#define CHIP_PRINTCLUSTER_DATA_SHARING_CLUSTER
+#endif
+
+#if defined(ZCL_USING_GAMING_CLUSTER_SERVER) || defined(ZCL_USING_GAMING_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_GAMING_CLUSTER { ZCL_GAMING_CLUSTER_ID, 2306, "Gaming" },
+#else
+#define CHIP_PRINTCLUSTER_GAMING_CLUSTER
+#endif
+
+#if defined(ZCL_USING_DATA_RATE_CONTROL_CLUSTER_SERVER) || defined(ZCL_USING_DATA_RATE_CONTROL_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_DATA_RATE_CONTROL_CLUSTER { ZCL_DATA_RATE_CONTROL_CLUSTER_ID, 2307, "Data Rate Control" },
+#else
+#define CHIP_PRINTCLUSTER_DATA_RATE_CONTROL_CLUSTER
+#endif
+
+#if defined(ZCL_USING_VOICE_OVER_ZIGBEE_CLUSTER_SERVER) || defined(ZCL_USING_VOICE_OVER_ZIGBEE_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_VOICE_OVER_ZIGBEE_CLUSTER { ZCL_VOICE_OVER_ZIGBEE_CLUSTER_ID, 2308, "Voice over ZigBee" },
+#else
+#define CHIP_PRINTCLUSTER_VOICE_OVER_ZIGBEE_CLUSTER
+#endif
+
+#if defined(ZCL_USING_CHATTING_CLUSTER_SERVER) || defined(ZCL_USING_CHATTING_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_CHATTING_CLUSTER { ZCL_CHATTING_CLUSTER_ID, 2309, "Chatting" },
+#else
+#define CHIP_PRINTCLUSTER_CHATTING_CLUSTER
+#endif
+
+#if defined(ZCL_USING_PAYMENT_CLUSTER_SERVER) || defined(ZCL_USING_PAYMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_PAYMENT_CLUSTER { ZCL_PAYMENT_CLUSTER_ID, 2561, "Payment" },
+#else
+#define CHIP_PRINTCLUSTER_PAYMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_BILLING_CLUSTER_SERVER) || defined(ZCL_USING_BILLING_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_BILLING_CLUSTER { ZCL_BILLING_CLUSTER_ID, 2562, "Billing" },
+#else
+#define CHIP_PRINTCLUSTER_BILLING_CLUSTER
+#endif
+
+#if defined(ZCL_USING_APPLIANCE_IDENTIFICATION_CLUSTER_SERVER) || defined(ZCL_USING_APPLIANCE_IDENTIFICATION_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_APPLIANCE_IDENTIFICATION_CLUSTER                                                                         \
+    { ZCL_APPLIANCE_IDENTIFICATION_CLUSTER_ID, 2816, "Appliance Identification" },
+#else
+#define CHIP_PRINTCLUSTER_APPLIANCE_IDENTIFICATION_CLUSTER
+#endif
+
+#if defined(ZCL_USING_METER_IDENTIFICATION_CLUSTER_SERVER) || defined(ZCL_USING_METER_IDENTIFICATION_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_METER_IDENTIFICATION_CLUSTER { ZCL_METER_IDENTIFICATION_CLUSTER_ID, 2817, "Meter Identification" },
+#else
+#define CHIP_PRINTCLUSTER_METER_IDENTIFICATION_CLUSTER
+#endif
+
+#if defined(ZCL_USING_APPLIANCE_EVENTS_AND_ALERT_CLUSTER_SERVER) || defined(ZCL_USING_APPLIANCE_EVENTS_AND_ALERT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_APPLIANCE_EVENTS_AND_ALERT_CLUSTER                                                                       \
+    { ZCL_APPLIANCE_EVENTS_AND_ALERT_CLUSTER_ID, 2818, "Appliance Events and Alert" },
+#else
+#define CHIP_PRINTCLUSTER_APPLIANCE_EVENTS_AND_ALERT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_APPLIANCE_STATISTICS_CLUSTER_SERVER) || defined(ZCL_USING_APPLIANCE_STATISTICS_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_APPLIANCE_STATISTICS_CLUSTER { ZCL_APPLIANCE_STATISTICS_CLUSTER_ID, 2819, "Appliance Statistics" },
+#else
+#define CHIP_PRINTCLUSTER_APPLIANCE_STATISTICS_CLUSTER
+#endif
+
+#if defined(ZCL_USING_ELECTRICAL_MEASUREMENT_CLUSTER_SERVER) || defined(ZCL_USING_ELECTRICAL_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_ELECTRICAL_MEASUREMENT_CLUSTER { ZCL_ELECTRICAL_MEASUREMENT_CLUSTER_ID, 2820, "Electrical Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_ELECTRICAL_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_DIAGNOSTICS_CLUSTER_SERVER) || defined(ZCL_USING_DIAGNOSTICS_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_DIAGNOSTICS_CLUSTER { ZCL_DIAGNOSTICS_CLUSTER_ID, 2821, "Diagnostics" },
+#else
+#define CHIP_PRINTCLUSTER_DIAGNOSTICS_CLUSTER
+#endif
+
+#if defined(ZCL_USING_ZLL_COMMISSIONING_CLUSTER_SERVER) || defined(ZCL_USING_ZLL_COMMISSIONING_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_ZLL_COMMISSIONING_CLUSTER { ZCL_ZLL_COMMISSIONING_CLUSTER_ID, 4096, "ZLL Commissioning" },
+#else
+#define CHIP_PRINTCLUSTER_ZLL_COMMISSIONING_CLUSTER
+#endif
+
+#if defined(ZCL_USING_BINDING_CLUSTER_SERVER) || defined(ZCL_USING_BINDING_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_BINDING_CLUSTER { ZCL_BINDING_CLUSTER_ID, 61440, "Binding" },
+#else
+#define CHIP_PRINTCLUSTER_BINDING_CLUSTER
+#endif
+
+#if defined(ZCL_USING_SAMPLE_MFG_SPECIFIC_CLUSTER_SERVER) || defined(ZCL_USING_SAMPLE_MFG_SPECIFIC_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_SAMPLE_MFG_SPECIFIC_CLUSTER { ZCL_SAMPLE_MFG_SPECIFIC_CLUSTER_ID, 64512, "Sample Mfg Specific Cluster" },
+#else
+#define CHIP_PRINTCLUSTER_SAMPLE_MFG_SPECIFIC_CLUSTER
+#endif
+
+#if defined(ZCL_USING_SAMPLE_MFG_SPECIFIC_CLUSTER_2_SERVER) || defined(ZCL_USING_SAMPLE_MFG_SPECIFIC_CLUSTER_2_CLIENT)
+#define CHIP_PRINTCLUSTER_SAMPLE_MFG_SPECIFIC_CLUSTER_2                                                                            \
+    { ZCL_SAMPLE_MFG_SPECIFIC_CLUSTER_2_ID, 64512, "Sample Mfg Specific Cluster 2" },
+#else
+#define CHIP_PRINTCLUSTER_SAMPLE_MFG_SPECIFIC_CLUSTER_2
+#endif
+
+#if defined(ZCL_USING_OTA_CONFIGURATION_CLUSTER_SERVER) || defined(ZCL_USING_OTA_CONFIGURATION_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_OTA_CONFIGURATION_CLUSTER { ZCL_OTA_CONFIGURATION_CLUSTER_ID, 64513, "Configuration Cluster" },
+#else
+#define CHIP_PRINTCLUSTER_OTA_CONFIGURATION_CLUSTER
+#endif
+
+#if defined(ZCL_USING_MFGLIB_CLUSTER_SERVER) || defined(ZCL_USING_MFGLIB_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_MFGLIB_CLUSTER { ZCL_MFGLIB_CLUSTER_ID, 64514, "MFGLIB Cluster" },
+#else
+#define CHIP_PRINTCLUSTER_MFGLIB_CLUSTER
+#endif
+
+#if defined(ZCL_USING_SL_WWAH_CLUSTER_SERVER) || defined(ZCL_USING_SL_WWAH_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_SL_WWAH_CLUSTER { ZCL_SL_WWAH_CLUSTER_ID, 64599, "SL Works With All Hubs" },
+#else
+#define CHIP_PRINTCLUSTER_SL_WWAH_CLUSTER
+#endif
+
+#define CLUSTER_IDS_TO_NAMES                                                                                                       \
+    CHIP_PRINTCLUSTER_BASIC_CLUSTER                                                                                                \
+    CHIP_PRINTCLUSTER_POWER_CONFIG_CLUSTER                                                                                         \
+    CHIP_PRINTCLUSTER_DEVICE_TEMP_CLUSTER                                                                                          \
+    CHIP_PRINTCLUSTER_IDENTIFY_CLUSTER                                                                                             \
+    CHIP_PRINTCLUSTER_GROUPS_CLUSTER                                                                                               \
+    CHIP_PRINTCLUSTER_SCENES_CLUSTER                                                                                               \
+    CHIP_PRINTCLUSTER_ON_OFF_CLUSTER                                                                                               \
+    CHIP_PRINTCLUSTER_ON_OFF_SWITCH_CONFIG_CLUSTER                                                                                 \
+    CHIP_PRINTCLUSTER_LEVEL_CONTROL_CLUSTER                                                                                        \
+    CHIP_PRINTCLUSTER_ALARM_CLUSTER                                                                                                \
+    CHIP_PRINTCLUSTER_TIME_CLUSTER                                                                                                 \
+    CHIP_PRINTCLUSTER_RSSI_LOCATION_CLUSTER                                                                                        \
+    CHIP_PRINTCLUSTER_BINARY_INPUT_BASIC_CLUSTER                                                                                   \
+    CHIP_PRINTCLUSTER_COMMISSIONING_CLUSTER                                                                                        \
+    CHIP_PRINTCLUSTER_PARTITION_CLUSTER                                                                                            \
+    CHIP_PRINTCLUSTER_OTA_BOOTLOAD_CLUSTER                                                                                         \
+    CHIP_PRINTCLUSTER_POWER_PROFILE_CLUSTER                                                                                        \
+    CHIP_PRINTCLUSTER_APPLIANCE_CONTROL_CLUSTER                                                                                    \
+    CHIP_PRINTCLUSTER_POLL_CONTROL_CLUSTER                                                                                         \
+    CHIP_PRINTCLUSTER_GREEN_POWER_CLUSTER                                                                                          \
+    CHIP_PRINTCLUSTER_KEEPALIVE_CLUSTER                                                                                            \
+    CHIP_PRINTCLUSTER_SHADE_CONFIG_CLUSTER                                                                                         \
+    CHIP_PRINTCLUSTER_DOOR_LOCK_CLUSTER                                                                                            \
+    CHIP_PRINTCLUSTER_WINDOW_COVERING_CLUSTER                                                                                      \
+    CHIP_PRINTCLUSTER_BARRIER_CONTROL_CLUSTER                                                                                      \
+    CHIP_PRINTCLUSTER_PUMP_CONFIG_CONTROL_CLUSTER                                                                                  \
+    CHIP_PRINTCLUSTER_THERMOSTAT_CLUSTER                                                                                           \
+    CHIP_PRINTCLUSTER_FAN_CONTROL_CLUSTER                                                                                          \
+    CHIP_PRINTCLUSTER_DEHUMID_CONTROL_CLUSTER                                                                                      \
+    CHIP_PRINTCLUSTER_THERMOSTAT_UI_CONFIG_CLUSTER                                                                                 \
+    CHIP_PRINTCLUSTER_COLOR_CONTROL_CLUSTER                                                                                        \
+    CHIP_PRINTCLUSTER_BALLAST_CONFIGURATION_CLUSTER                                                                                \
+    CHIP_PRINTCLUSTER_ILLUM_MEASUREMENT_CLUSTER                                                                                    \
+    CHIP_PRINTCLUSTER_ILLUM_LEVEL_SENSING_CLUSTER                                                                                  \
+    CHIP_PRINTCLUSTER_TEMP_MEASUREMENT_CLUSTER                                                                                     \
+    CHIP_PRINTCLUSTER_PRESSURE_MEASUREMENT_CLUSTER                                                                                 \
+    CHIP_PRINTCLUSTER_FLOW_MEASUREMENT_CLUSTER                                                                                     \
+    CHIP_PRINTCLUSTER_RELATIVE_HUMIDITY_MEASUREMENT_CLUSTER                                                                        \
+    CHIP_PRINTCLUSTER_OCCUPANCY_SENSING_CLUSTER                                                                                    \
+    CHIP_PRINTCLUSTER_CARBON_MONOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER                                                            \
+    CHIP_PRINTCLUSTER_CARBON_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER                                                             \
+    CHIP_PRINTCLUSTER_ETHYLENE_CONCENTRATION_MEASUREMENT_CLUSTER                                                                   \
+    CHIP_PRINTCLUSTER_ETHYLENE_OXIDE_CONCENTRATION_MEASUREMENT_CLUSTER                                                             \
+    CHIP_PRINTCLUSTER_HYDROGEN_CONCENTRATION_MEASUREMENT_CLUSTER                                                                   \
+    CHIP_PRINTCLUSTER_HYDROGEN_SULPHIDE_CONCENTRATION_MEASUREMENT_CLUSTER                                                          \
+    CHIP_PRINTCLUSTER_NITRIC_OXIDE_CONCENTRATION_MEASUREMENT_CLUSTER                                                               \
+    CHIP_PRINTCLUSTER_NITROGEN_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER                                                           \
+    CHIP_PRINTCLUSTER_OXYGEN_CONCENTRATION_MEASUREMENT_CLUSTER                                                                     \
+    CHIP_PRINTCLUSTER_OZONE_CONCENTRATION_MEASUREMENT_CLUSTER                                                                      \
+    CHIP_PRINTCLUSTER_SULFUR_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER                                                             \
+    CHIP_PRINTCLUSTER_DISSOLVED_OXYGEN_CONCENTRATION_MEASUREMENT_CLUSTER                                                           \
+    CHIP_PRINTCLUSTER_BROMATE_CONCENTRATION_MEASUREMENT_CLUSTER                                                                    \
+    CHIP_PRINTCLUSTER_CHLORAMINES_CONCENTRATION_MEASUREMENT_CLUSTER                                                                \
+    CHIP_PRINTCLUSTER_CHLORINE_CONCENTRATION_MEASUREMENT_CLUSTER                                                                   \
+    CHIP_PRINTCLUSTER_FECAL_COLIFORM_AND_E_COLI_CONCENTRATION_MEASUREMENT_CLUSTER                                                  \
+    CHIP_PRINTCLUSTER_FLUORIDE_CONCENTRATION_MEASUREMENT_CLUSTER                                                                   \
+    CHIP_PRINTCLUSTER_HALOACETIC_ACIDS_CONCENTRATION_MEASUREMENT_CLUSTER                                                           \
+    CHIP_PRINTCLUSTER_TOTAL_TRIHALOMETHANES_CONCENTRATION_MEASUREMENT_CLUSTER                                                      \
+    CHIP_PRINTCLUSTER_TOTAL_COLIFORM_BACTERIA_CONCENTRATION_MEASUREMENT_CLUSTER                                                    \
+    CHIP_PRINTCLUSTER_TURBIDITY_CONCENTRATION_MEASUREMENT_CLUSTER                                                                  \
+    CHIP_PRINTCLUSTER_COPPER_CONCENTRATION_MEASUREMENT_CLUSTER                                                                     \
+    CHIP_PRINTCLUSTER_LEAD_CONCENTRATION_MEASUREMENT_CLUSTER                                                                       \
+    CHIP_PRINTCLUSTER_MANGANESE_CONCENTRATION_MEASUREMENT_CLUSTER                                                                  \
+    CHIP_PRINTCLUSTER_SULFATE_CONCENTRATION_MEASUREMENT_CLUSTER                                                                    \
+    CHIP_PRINTCLUSTER_BROMODICHLOROMETHANE_CONCENTRATION_MEASUREMENT_CLUSTER                                                       \
+    CHIP_PRINTCLUSTER_BROMOFORM_CONCENTRATION_MEASUREMENT_CLUSTER                                                                  \
+    CHIP_PRINTCLUSTER_CHLORODIBROMOMETHANE_CONCENTRATION_MEASUREMENT_CLUSTER                                                       \
+    CHIP_PRINTCLUSTER_CHLOROFORM_CONCENTRATION_MEASUREMENT_CLUSTER                                                                 \
+    CHIP_PRINTCLUSTER_SODIUM_CONCENTRATION_MEASUREMENT_CLUSTER                                                                     \
+    CHIP_PRINTCLUSTER_IAS_ZONE_CLUSTER                                                                                             \
+    CHIP_PRINTCLUSTER_IAS_ACE_CLUSTER                                                                                              \
+    CHIP_PRINTCLUSTER_IAS_WD_CLUSTER                                                                                               \
+    CHIP_PRINTCLUSTER_GENERIC_TUNNEL_CLUSTER                                                                                       \
+    CHIP_PRINTCLUSTER_BACNET_PROTOCOL_TUNNEL_CLUSTER                                                                               \
+    CHIP_PRINTCLUSTER_11073_PROTOCOL_TUNNEL_CLUSTER                                                                                \
+    CHIP_PRINTCLUSTER_ISO7816_PROTOCOL_TUNNEL_CLUSTER                                                                              \
+    CHIP_PRINTCLUSTER_PRICE_CLUSTER                                                                                                \
+    CHIP_PRINTCLUSTER_DEMAND_RESPONSE_LOAD_CONTROL_CLUSTER                                                                         \
+    CHIP_PRINTCLUSTER_SIMPLE_METERING_CLUSTER                                                                                      \
+    CHIP_PRINTCLUSTER_MESSAGING_CLUSTER                                                                                            \
+    CHIP_PRINTCLUSTER_TUNNELING_CLUSTER                                                                                            \
+    CHIP_PRINTCLUSTER_PREPAYMENT_CLUSTER                                                                                           \
+    CHIP_PRINTCLUSTER_ENERGY_MANAGEMENT_CLUSTER                                                                                    \
+    CHIP_PRINTCLUSTER_CALENDAR_CLUSTER                                                                                             \
+    CHIP_PRINTCLUSTER_DEVICE_MANAGEMENT_CLUSTER                                                                                    \
+    CHIP_PRINTCLUSTER_EVENTS_CLUSTER                                                                                               \
+    CHIP_PRINTCLUSTER_MDU_PAIRING_CLUSTER                                                                                          \
+    CHIP_PRINTCLUSTER_SUB_GHZ_CLUSTER                                                                                              \
+    CHIP_PRINTCLUSTER_KEY_ESTABLISHMENT_CLUSTER                                                                                    \
+    CHIP_PRINTCLUSTER_INFORMATION_CLUSTER                                                                                          \
+    CHIP_PRINTCLUSTER_DATA_SHARING_CLUSTER                                                                                         \
+    CHIP_PRINTCLUSTER_GAMING_CLUSTER                                                                                               \
+    CHIP_PRINTCLUSTER_DATA_RATE_CONTROL_CLUSTER                                                                                    \
+    CHIP_PRINTCLUSTER_VOICE_OVER_ZIGBEE_CLUSTER                                                                                    \
+    CHIP_PRINTCLUSTER_CHATTING_CLUSTER                                                                                             \
+    CHIP_PRINTCLUSTER_PAYMENT_CLUSTER                                                                                              \
+    CHIP_PRINTCLUSTER_BILLING_CLUSTER                                                                                              \
+    CHIP_PRINTCLUSTER_APPLIANCE_IDENTIFICATION_CLUSTER                                                                             \
+    CHIP_PRINTCLUSTER_METER_IDENTIFICATION_CLUSTER                                                                                 \
+    CHIP_PRINTCLUSTER_APPLIANCE_EVENTS_AND_ALERT_CLUSTER                                                                           \
+    CHIP_PRINTCLUSTER_APPLIANCE_STATISTICS_CLUSTER                                                                                 \
+    CHIP_PRINTCLUSTER_ELECTRICAL_MEASUREMENT_CLUSTER                                                                               \
+    CHIP_PRINTCLUSTER_DIAGNOSTICS_CLUSTER                                                                                          \
+    CHIP_PRINTCLUSTER_ZLL_COMMISSIONING_CLUSTER                                                                                    \
+    CHIP_PRINTCLUSTER_BINDING_CLUSTER                                                                                              \
+    CHIP_PRINTCLUSTER_SAMPLE_MFG_SPECIFIC_CLUSTER                                                                                  \
+    CHIP_PRINTCLUSTER_SAMPLE_MFG_SPECIFIC_CLUSTER_2                                                                                \
+    CHIP_PRINTCLUSTER_OTA_CONFIGURATION_CLUSTER                                                                                    \
+    CHIP_PRINTCLUSTER_MFGLIB_CLUSTER                                                                                               \
+    CHIP_PRINTCLUSTER_SL_WWAH_CLUSTER
+
+#define MAX_CLUSTER_NAME_LENGTH 52