diff --git a/src-electron/db/query-command.js b/src-electron/db/query-command.js
index f4cde9b2f5ebcca04b08789f208dd83a0d47c7e8..fefb0eac9e2f11b17f7b8111c8da6928c3afde3c 100644
--- a/src-electron/db/query-command.js
+++ b/src-electron/db/query-command.js
@@ -194,10 +194,13 @@ ORDER BY
 }
 
 /**
- * All Clusters with available incoming commands.
+ * All Clusters with available incoming or outgoing commands.
  * @param db
  * @param endpointTypes
- * @returns All Clusters with side that have available incoming commands.
+ * @param uniqueClusterCodes
+ * @param isIncoming
+ * @returns All Clusters with side that have available incoming or outgoing
+ * commands.
  * uniqueClusterCodes can be used to get unique clusters based on a cluster code
  * and this can eliminate duplicate cluster code entries when manufacturing
  * specific clusters exist with the same cluster code.
@@ -206,13 +209,17 @@ ORDER BY
  * type command is not precisely linked to the sides of the cluster as commands
  * do not belong to a side of a cluster like an attribute.
  */
-async function selectAllClustersWithIncomingCommands(
+async function selectAllClustersWithIncomingOrOutgoingCommands(
   db,
   endpointTypes,
-  uniqueClusterCodes = false
+  uniqueClusterCodes,
+  isIncoming
 ) {
   let endpointTypeIds = endpointTypes.map((ep) => ep.endpointTypeId).toString()
   let sqlGroupBy = uniqueClusterCodes ? 'CLUSTER.CODE' : 'CLUSTER.NAME'
+  let isIncomingOrOutgoingSql = isIncoming
+    ? `ENDPOINT_TYPE_COMMAND.INCOMING = 1 AND COMMAND.SOURCE != ENDPOINT_TYPE_CLUSTER.SIDE`
+    : `ENDPOINT_TYPE_COMMAND.OUTGOING = 1 AND COMMAND.SOURCE == ENDPOINT_TYPE_CLUSTER.SIDE`
   let mapFunction = (x) => {
     return {
       id: x.CLUSTER_ID,
@@ -225,46 +232,95 @@ async function selectAllClustersWithIncomingCommands(
       endpointClusterId: x.ENDPOINT_TYPE_CLUSTER_ID,
     }
   }
-
   return dbApi
     .dbAll(
       db,
       `
 SELECT
-  CLUSTER.CLUSTER_ID,
-  CLUSTER.NAME AS CLUSTER_NAME,
-  CLUSTER.CODE AS CLUSTER_CODE,
-  CLUSTER.DEFINE AS CLUSTER_DEFINE,
-  CLUSTER.MANUFACTURER_CODE AS MANUFACTURER_CODE,
-  ENDPOINT_TYPE_CLUSTER.SIDE AS CLUSTER_SIDE,
-  ENDPOINT_TYPE_CLUSTER.ENABLED AS CLUSTER_ENABLED,
-  ENDPOINT_TYPE_CLUSTER.ENDPOINT_TYPE_CLUSTER_ID
+CLUSTER.CLUSTER_ID,
+CLUSTER.NAME AS CLUSTER_NAME,
+CLUSTER.CODE AS CLUSTER_CODE,
+CLUSTER.DEFINE AS CLUSTER_DEFINE,
+CLUSTER.MANUFACTURER_CODE AS MANUFACTURER_CODE,
+ENDPOINT_TYPE_CLUSTER.SIDE AS CLUSTER_SIDE,
+ENDPOINT_TYPE_CLUSTER.ENABLED AS CLUSTER_ENABLED,
+ENDPOINT_TYPE_CLUSTER.ENDPOINT_TYPE_CLUSTER_ID
 FROM
-  COMMAND
+COMMAND
 INNER JOIN
-  ENDPOINT_TYPE_COMMAND
+ENDPOINT_TYPE_COMMAND
 ON
-  ENDPOINT_TYPE_COMMAND.COMMAND_REF = COMMAND.COMMAND_ID
+ENDPOINT_TYPE_COMMAND.COMMAND_REF = COMMAND.COMMAND_ID
 INNER JOIN
-  CLUSTER
+CLUSTER
 ON
-  CLUSTER.CLUSTER_ID = COMMAND.CLUSTER_REF
+CLUSTER.CLUSTER_ID = COMMAND.CLUSTER_REF
 INNER JOIN
-  ENDPOINT_TYPE_CLUSTER
+ENDPOINT_TYPE_CLUSTER
 ON
-  ENDPOINT_TYPE_CLUSTER.CLUSTER_REF = CLUSTER.CLUSTER_ID
+ENDPOINT_TYPE_CLUSTER.CLUSTER_REF = CLUSTER.CLUSTER_ID
 WHERE
-  ENDPOINT_TYPE_COMMAND.ENDPOINT_TYPE_REF IN (${endpointTypeIds})
-  AND ENDPOINT_TYPE_COMMAND.ENDPOINT_TYPE_REF = ENDPOINT_TYPE_CLUSTER.ENDPOINT_TYPE_REF
-  AND ENDPOINT_TYPE_CLUSTER.SIDE IN ("client", "server")
-  AND ENDPOINT_TYPE_CLUSTER.ENABLED = 1
-  AND ENDPOINT_TYPE_COMMAND.INCOMING = 1
-  AND COMMAND.SOURCE != ENDPOINT_TYPE_CLUSTER.SIDE
+ENDPOINT_TYPE_COMMAND.ENDPOINT_TYPE_REF IN (${endpointTypeIds})
+AND ENDPOINT_TYPE_COMMAND.ENDPOINT_TYPE_REF = ENDPOINT_TYPE_CLUSTER.ENDPOINT_TYPE_REF
+AND ENDPOINT_TYPE_CLUSTER.SIDE IN ("client", "server")
+AND ENDPOINT_TYPE_CLUSTER.ENABLED = 1 AND ${isIncomingOrOutgoingSql}
 GROUP BY
-  ${sqlGroupBy}, ENDPOINT_TYPE_CLUSTER.SIDE ORDER BY CLUSTER.NAME, ENDPOINT_TYPE_CLUSTER.SIDE`
+${sqlGroupBy}, ENDPOINT_TYPE_CLUSTER.SIDE ORDER BY CLUSTER.NAME, ENDPOINT_TYPE_CLUSTER.SIDE`
     )
     .then((rows) => rows.map(mapFunction))
 }
+/**
+ * All Clusters with available incoming commands.
+ * @param db
+ * @param endpointTypes
+ * @param uniqueClusterCodes
+ * @returns All Clusters with side that have available incoming commands.
+ * uniqueClusterCodes can be used to get unique clusters based on a cluster code
+ * and this can eliminate duplicate cluster code entries when manufacturing
+ * specific clusters exist with the same cluster code.
+ * Note: The relationship between the endpoint_type_cluster being enabled and a
+ * endpoint_type_command is indirect. The reason for this being the endpoint
+ * type command is not precisely linked to the sides of the cluster as commands
+ * do not belong to a side of a cluster like an attribute.
+ */
+async function selectAllClustersWithIncomingCommands(
+  db,
+  endpointTypes,
+  uniqueClusterCodes = false
+) {
+  return selectAllClustersWithIncomingOrOutgoingCommands(
+    db,
+    endpointTypes,
+    uniqueClusterCodes,
+    true
+  )
+}
+/**
+ * All Clusters with available outgoing commands.
+ * @param db
+ * @param endpointTypes
+ * @param uniqueClusterCodes
+ * @returns All Clusters with side that have available outgoing commands.
+ * uniqueClusterCodes can be used to get unique clusters based on a cluster code
+ * and this can eliminate duplicate cluster code entries when manufacturing
+ * specific clusters exist with the same cluster code.
+ * Note: The relationship between the endpoint_type_cluster being enabled and a
+ * endpoint_type_command is indirect. The reason for this being the endpoint
+ * type command is not precisely linked to the sides of the cluster as commands
+ * do not belong to a side of a cluster like an attribute.
+ */
+async function selectAllClustersWithOutgoingCommands(
+  db,
+  endpointTypes,
+  uniqueClusterCodes = false
+) {
+  return selectAllClustersWithIncomingOrOutgoingCommands(
+    db,
+    endpointTypes,
+    uniqueClusterCodes,
+    false
+  )
+}
 
 /**
  * All Manufacturing Clusters with available incoming commands for a given
@@ -441,21 +497,22 @@ async function selectAllIncomingCommandsForClusterCombined(
 }
 
 /**
- * Returns all incoming per cluster commands.
  *
- * @param {*} db
- * @param {*} endpointTypes
- * @param {*} clName
- * @param {*} clSide
- * @param {*} isMfgSpecific
- * @returns promise of incoming per-cluster commands.
+ * @param db
+ * @param endpointTypes
+ * @param clName
+ * @param clSide
+ * @param isMfgSpecific
+ * @param isIncoming
+ * @returns Incoming or Outgoing commands for a given cluster
  */
-async function selectAllIncomingCommandsForCluster(
+async function selectAllIncomingOrOutgoingCommandsForCluster(
   db,
   endpointTypes,
   clName,
   clSide,
-  isMfgSpecific
+  isMfgSpecific,
+  isIncoming
 ) {
   let endpointTypeIds = endpointTypes.map((ep) => ep.endpointTypeId).toString()
   let mfgSpecificString =
@@ -464,6 +521,9 @@ async function selectAllIncomingCommandsForCluster(
       : isMfgSpecific
       ? ` AND COMMAND.MANUFACTURER_CODE IS NOT NULL `
       : ` AND COMMAND.MANUFACTURER_CODE IS NULL `
+  let isIncomingOrOutgoingSql = isIncoming
+    ? `ENDPOINT_TYPE_COMMAND.INCOMING=1 AND COMMAND.SOURCE!=ENDPOINT_TYPE_CLUSTER.SIDE`
+    : `ENDPOINT_TYPE_COMMAND.OUTGOING=1 AND COMMAND.SOURCE==ENDPOINT_TYPE_CLUSTER.SIDE`
   let mapFunction = (x) => {
     return {
       clusterId: x.CLUSTER_ID,
@@ -485,7 +545,6 @@ async function selectAllIncomingCommandsForCluster(
       mfgCommandCount: x.MANUFACTURING_SPECIFIC_COMMAND_COUNT,
     }
   }
-
   return dbApi
     .dbAll(
       db,
@@ -508,32 +567,74 @@ SELECT
   ENDPOINT_TYPE_COMMAND.INCOMING AS INCOMING,
   ENDPOINT_TYPE_COMMAND.OUTGOING AS OUTGOING,
   COUNT(COMMAND.MANUFACTURER_CODE) OVER () AS MANUFACTURING_SPECIFIC_COMMAND_COUNT
-FROM 
-  COMMAND
-INNER JOIN 
-  ENDPOINT_TYPE_COMMAND
-ON 
-  ENDPOINT_TYPE_COMMAND.COMMAND_REF = COMMAND.COMMAND_ID
-INNER JOIN 
-  CLUSTER
-ON 
-  CLUSTER.CLUSTER_ID = COMMAND.CLUSTER_REF
-INNER JOIN 
-  ENDPOINT_TYPE_CLUSTER
-ON 
-  ENDPOINT_TYPE_CLUSTER.CLUSTER_REF = CLUSTER.CLUSTER_ID
-WHERE
-  ENDPOINT_TYPE_COMMAND.ENDPOINT_TYPE_REF IN (${endpointTypeIds})
-  AND ENDPOINT_TYPE_COMMAND.ENDPOINT_TYPE_REF = ENDPOINT_TYPE_CLUSTER.ENDPOINT_TYPE_REF
-  AND ENDPOINT_TYPE_CLUSTER.SIDE IN ("client", "server") AND ENDPOINT_TYPE_CLUSTER.ENABLED=1
-  AND ENDPOINT_TYPE_COMMAND.INCOMING=1 AND COMMAND.SOURCE!=ENDPOINT_TYPE_CLUSTER.SIDE
-  AND CLUSTER.NAME = "${clName}" AND ENDPOINT_TYPE_CLUSTER.SIDE = "${clSide}" 
-  ${mfgSpecificString} 
-GROUP BY COMMAND.NAME`
+FROM COMMAND
+INNER JOIN ENDPOINT_TYPE_COMMAND
+ON ENDPOINT_TYPE_COMMAND.COMMAND_REF = COMMAND.COMMAND_ID
+INNER JOIN CLUSTER
+ON CLUSTER.CLUSTER_ID = COMMAND.CLUSTER_REF
+INNER JOIN ENDPOINT_TYPE_CLUSTER
+ON ENDPOINT_TYPE_CLUSTER.CLUSTER_REF = CLUSTER.CLUSTER_ID
+WHERE ENDPOINT_TYPE_COMMAND.ENDPOINT_TYPE_REF IN (${endpointTypeIds})
+AND ENDPOINT_TYPE_COMMAND.ENDPOINT_TYPE_REF = ENDPOINT_TYPE_CLUSTER.ENDPOINT_TYPE_REF
+AND ENDPOINT_TYPE_CLUSTER.SIDE IN ("client", "server") AND ENDPOINT_TYPE_CLUSTER.ENABLED=1 AND ${isIncomingOrOutgoingSql}
+AND CLUSTER.NAME = "${clName}" AND ENDPOINT_TYPE_CLUSTER.SIDE = "${clSide}" 
+${mfgSpecificString} GROUP BY COMMAND.NAME`
     )
     .then((rows) => rows.map(mapFunction))
 }
 
+/**
+ *
+ * @param db
+ * @param endpointTypes
+ * @param clName
+ * @param clSide
+ * @param isMfgSpecific
+ * @returns Incoming Commands for a given cluster
+ */
+async function selectAllIncomingCommandsForCluster(
+  db,
+  endpointTypes,
+  clName,
+  clSide,
+  isMfgSpecific
+) {
+  return selectAllIncomingOrOutgoingCommandsForCluster(
+    db,
+    endpointTypes,
+    clName,
+    clSide,
+    isMfgSpecific,
+    true
+  )
+}
+
+/**
+ *
+ * @param db
+ * @param endpointTypes
+ * @param clName
+ * @param clSide
+ * @param isMfgSpecific
+ * @returns Outgoing Commands for a given cluster
+ */
+async function selectAllOutgoingCommandsForCluster(
+  db,
+  endpointTypes,
+  clName,
+  clSide,
+  isMfgSpecific
+) {
+  return selectAllIncomingOrOutgoingCommandsForCluster(
+    db,
+    endpointTypes,
+    clName,
+    clSide,
+    isMfgSpecific,
+    false
+  )
+}
+
 /**
  * Returns all incoming commands.
  * @param {*} db
@@ -1574,3 +1675,7 @@ exports.selectMfgClustersWithIncomingCommandsForClusterCode =
   selectMfgClustersWithIncomingCommandsForClusterCode
 exports.selectAllCommandsWithClusterInfo = selectAllCommandsWithClusterInfo
 exports.selectAllCommandsWithArguments = selectAllCommandsWithArguments
+exports.selectAllClustersWithOutgoingCommands =
+  selectAllClustersWithOutgoingCommands
+exports.selectAllOutgoingCommandsForCluster =
+  selectAllOutgoingCommandsForCluster
diff --git a/src-electron/generator/helper-session.js b/src-electron/generator/helper-session.js
index f55236923732fbe5bac2013b55b43b60cfe973ae..e1097641e84aae8fba2b0fcb305696f99578971a 100644
--- a/src-electron/generator/helper-session.js
+++ b/src-electron/generator/helper-session.js
@@ -781,6 +781,84 @@ async function all_user_cluster_generated_commands(options) {
   return templateUtil.collectBlocks(endpointCommands, options, this)
 }
 
+/**
+ * Util function for all clusters with side that have available incoming or
+ * outgiong commands across all endpoints.
+ * @param options
+ * @param is_incoming boolean to check if commands are incoming or outgoing
+ * @returns All clusters with side that have available incoming or outgiong
+ * commands across all endpoints.
+ */
+async function all_user_clusters_with_incoming_or_outgoing_commands(
+  options,
+  currentContext,
+  isIncoming
+) {
+  let endpointTypes = await queryEndpointType.selectUsedEndpointTypeIds(
+    currentContext.global.db,
+    currentContext.global.sessionId
+  )
+  if (isIncoming) {
+    if (
+      'uniqueClusterCodes' in options.hash &&
+      options.hash.uniqueClusterCodes == 'true'
+    ) {
+      let clustersWithIncomingCommands =
+        await queryCommand.selectAllClustersWithIncomingCommands(
+          currentContext.global.db,
+          endpointTypes,
+          true
+        )
+      return templateUtil.collectBlocks(
+        clustersWithIncomingCommands,
+        options,
+        currentContext
+      )
+    } else {
+      let clustersWithIncomingCommands =
+        await queryCommand.selectAllClustersWithIncomingCommands(
+          currentContext.global.db,
+          endpointTypes,
+          false
+        )
+      return templateUtil.collectBlocks(
+        clustersWithIncomingCommands,
+        options,
+        currentContext
+      )
+    }
+  } else {
+    if (
+      'uniqueClusterCodes' in options.hash &&
+      options.hash.uniqueClusterCodes == 'true'
+    ) {
+      let clustersWithOutgoingCommands =
+        await queryCommand.selectAllClustersWithOutgoingCommands(
+          currentContext.global.db,
+          endpointTypes,
+          true
+        )
+      return templateUtil.collectBlocks(
+        clustersWithOutgoingCommands,
+        options,
+        currentContext
+      )
+    } else {
+      let clustersWithOutgoingCommands =
+        await queryCommand.selectAllClustersWithOutgoingCommands(
+          currentContext.global.db,
+          endpointTypes,
+          false
+        )
+      return templateUtil.collectBlocks(
+        clustersWithOutgoingCommands,
+        options,
+        currentContext
+      )
+    }
+  }
+}
+
 /**
  * All clusters with side that have available incoming commands
  * @param options
@@ -788,25 +866,25 @@ async function all_user_cluster_generated_commands(options) {
  * all endpoints.
  */
 function all_user_clusters_with_incoming_commands(options) {
-  return queryEndpointType
-    .selectUsedEndpointTypeIds(this.global.db, this.global.sessionId)
-    .then((endpointTypes) =>
-      'uniqueClusterCodes' in options.hash &&
-      options.hash.uniqueClusterCodes == 'true'
-        ? queryCommand.selectAllClustersWithIncomingCommands(
-            this.global.db,
-            endpointTypes,
-            true
-          )
-        : queryCommand.selectAllClustersWithIncomingCommands(
-            this.global.db,
-            endpointTypes,
-            false
-          )
-    )
-    .then((clustersWithIncomingCommands) =>
-      templateUtil.collectBlocks(clustersWithIncomingCommands, options, this)
-    )
+  return all_user_clusters_with_incoming_or_outgoing_commands(
+    options,
+    this,
+    true
+  )
+}
+
+/**
+ * All clusters with side that have available outgoing commands
+ * @param options
+ * @returns All clusters with side that have available outgoing commands across
+ * all endpoints.
+ */
+async function all_user_clusters_with_outgoing_commands(options) {
+  return all_user_clusters_with_incoming_or_outgoing_commands(
+    options,
+    this,
+    false
+  )
 }
 
 /**
@@ -913,15 +991,21 @@ async function all_user_incoming_commands_for_all_clusters(options) {
 }
 
 /**
- * All commands that need to be parsed for a given cluster
- * @param clusterName
- * @param options
- * @returns all commands that need to be parsed for a given cluster
- */
-async function all_incoming_commands_for_cluster(
+  * A util function for all incoming or outgoing commands that need to be parsed
+  * for a given cluster
+  * @param clusterName
+  * @param clusterSide
+  * @param isIncoming
+  * @param options
+  * @returns All incoming or outgoing commands that need to be parsed for a given
+ cluster
+  */
+async function all_incoming_or_outgoing_commands_for_cluster(
   clusterName,
   clusterSide,
-  options
+  isIncoming,
+  options,
+  currentContext
 ) {
   let isMfgSpec =
     'isMfgSpecific' in options.hash
@@ -929,20 +1013,71 @@ async function all_incoming_commands_for_cluster(
       : undefined
 
   let endpointTypes = await queryEndpointType.selectUsedEndpointTypeIds(
-    this.global.db,
-    this.global.sessionId
+    currentContext.global.db,
+    currentContext.global.sessionId
   )
 
-  let clustersWithIncomingCommands =
-    await queryCommand.selectAllIncomingCommandsForCluster(
-      this.global.db,
-      endpointTypes,
-      clusterName,
-      clusterSide,
-      isMfgSpec
-    )
+  let clustersWithIncomingOrOutgoingCommands = isIncoming
+    ? await queryCommand.selectAllIncomingCommandsForCluster(
+        currentContext.global.db,
+        endpointTypes,
+        clusterName,
+        clusterSide,
+        isMfgSpec
+      )
+    : await queryCommand.selectAllOutgoingCommandsForCluster(
+        currentContext.global.db,
+        endpointTypes,
+        clusterName,
+        clusterSide,
+        isMfgSpec
+      )
 
-  return templateUtil.collectBlocks(clustersWithIncomingCommands, options, this)
+  return templateUtil.collectBlocks(
+    clustersWithIncomingOrOutgoingCommands,
+    options,
+    currentContext
+  )
+}
+
+/**
+ * All incoming commands that need to be parsed for a given cluster
+ * @param clusterName
+ * @param options
+ * @returns all incoming commands that need to be parsed for a given cluster
+ */
+async function all_incoming_commands_for_cluster(
+  clusterName,
+  clusterSide,
+  options
+) {
+  return all_incoming_or_outgoing_commands_for_cluster(
+    clusterName,
+    clusterSide,
+    true,
+    options,
+    this
+  )
+}
+
+/**
+ * All outgoing commands that need to be parsed for a given cluster
+ * @param clusterName
+ * @param options
+ * @returns all outgoing commands that need to be parsed for a given cluster
+ */
+async function all_outgoing_commands_for_cluster(
+  clusterName,
+  clusterSide,
+  options
+) {
+  return all_incoming_or_outgoing_commands_for_cluster(
+    clusterName,
+    clusterSide,
+    false,
+    options,
+    this
+  )
 }
 
 /**
@@ -1303,3 +1438,6 @@ exports.all_incoming_commands_for_cluster_combined = dep(
 exports.if_command_discovery_enabled = if_command_discovery_enabled
 exports.manufacturing_clusters_with_incoming_commands =
   manufacturing_clusters_with_incoming_commands
+exports.all_user_clusters_with_outgoing_commands =
+  all_user_clusters_with_outgoing_commands
+exports.all_outgoing_commands_for_cluster = all_outgoing_commands_for_cluster
diff --git a/test/gen-template/zigbee/gen-templates.json b/test/gen-template/zigbee/gen-templates.json
index 991788578a87d985620a651093e53a0e2f7a216c..8716e0c1397003d3726d51f21183d24bc48ff528 100644
--- a/test/gen-template/zigbee/gen-templates.json
+++ b/test/gen-template/zigbee/gen-templates.json
@@ -197,6 +197,11 @@
       "name": "ZCL command APIs",
       "output": "zap-command.h"
     },
+    {
+      "path": "zap-outgoing-command.zapt",
+      "name": "ZCL outgoing command",
+      "output": "zap-outgoing-command.out"
+    },
     {
       "path": "zap-config.zapt",
       "name": "ZCL endpoint configuration",
diff --git a/test/gen-template/zigbee/zap-outgoing-command.zapt b/test/gen-template/zigbee/zap-outgoing-command.zapt
new file mode 100644
index 0000000000000000000000000000000000000000..924a49bcd1c7419a21127438047d7381a1ddb23b
--- /dev/null
+++ b/test/gen-template/zigbee/zap-outgoing-command.zapt
@@ -0,0 +1,6 @@
+{{#all_user_clusters_with_outgoing_commands}}
+{{clusterName}} {{clusterSide}} Cluster Ougtoing commands
+{{#all_outgoing_commands_for_cluster clusterName clusterSide isMfgSpecific="false"}}
+Outgoing Command: {{commandName}}
+{{/all_outgoing_commands_for_cluster}}
+{{/all_user_clusters_with_outgoing_commands}}
diff --git a/test/gen-zigbee.test.js b/test/gen-zigbee.test.js
index 829b533dadac64e92729c162c2ef67eb18dc25cb..07f7e2c3dbd27f1655d471448d18512366e44028 100644
--- a/test/gen-zigbee.test.js
+++ b/test/gen-zigbee.test.js
@@ -608,6 +608,14 @@ test(
     expect(pv5).toContain('case ZCL_GP_PROXY_TABLE_REQUEST_COMMAND_ID:')
     expect(pv5).not.toContain('uint64_t gpdIeee;')
     expect(pv5).toContain('uint8_t *  gpdIeee;')
+
+    //********* Test the helpers related to outgoing commands******************
+    // Test Cluster outgoing commands that should be generated
+    let zapOutgoingCommands = genResult.content['zap-outgoing-command.out']
+    expect(zapOutgoingCommands).not.toBeNull()
+    expect(zapOutgoingCommands).toContain(
+      'Groups client Cluster Ougtoing commands\nOutgoing Command: AddGroup\nOutgoing Command: AddGroupIfIdentifying\nOutgoing Command: GetGroupMembership\nOutgoing Command: RemoveAllGroups\nOutgoing Command: RemoveGroup\nOutgoing Command: ViewGroup\nGroups server Cluster Ougtoing commands\nOutgoing Command: AddGroupResponse\nOutgoing Command: GetGroupMembershipResponse\nOutgoing Command: RemoveGroupResponse\nOutgoing Command: ViewGroupResponse\nIdentify client Cluster Ougtoing commands\nOutgoing Command: Identify\nOutgoing Command: IdentifyQuery\nIdentify server Cluster Ougtoing commands\nOutgoing Command: IdentifyQueryResponse\nLevel Control client Cluster Ougtoing commands\nOutgoing Command: Move\nOutgoing Command: MoveToLevel\nOutgoing Command: MoveToLevelWithOnOff\nOutgoing Command: MoveWithOnOff\nOutgoing Command: Step\nOutgoing Command: StepWithOnOff\nOutgoing Command: Stop\nOutgoing Command: StopWithOnOff\nOn/off client Cluster Ougtoing commands\nOutgoing Command: Off\nOutgoing Command: On\nOutgoing Command: Toggle\nScenes server Cluster Ougtoing commands\nOutgoing Command: AddSceneResponse\nOutgoing Command: GetSceneMembershipResponse\nOutgoing Command: RemoveAllScenesResponse\nOutgoing Command: RemoveSceneResponse\nOutgoing Command: StoreSceneResponse\nOutgoing Command: ViewSceneResponse\nZLL Commissioning client Cluster Ougtoing commands\nOutgoing Command: DeviceInformationRequest\nOutgoing Command: IdentifyRequest\nOutgoing Command: NetworkJoinEndDeviceRequest\nOutgoing Command: NetworkJoinRouterRequest\nOutgoing Command: NetworkStartRequest\nOutgoing Command: NetworkUpdateRequest\nOutgoing Command: ResetToFactoryNewRequest\nOutgoing Command: ScanRequest\nZLL Commissioning server Cluster Ougtoing commands\nOutgoing Command: DeviceInformationResponse\nOutgoing Command: EndpointInformation\nOutgoing Command: GetEndpointListResponse\nOutgoing Command: GetGroupIdentifiersResponse\nOutgoing Command: NetworkJoinEndDeviceResponse\nOutgoing Command: NetworkJoinRouterResponse\nOutgoing Command: NetworkStartResponse\nOutgoing Command: ScanResponse'
+    )
   },
   testUtil.timeout.long()
 )
diff --git a/test/test-util.js b/test/test-util.js
index 7668e958e1f2f54de4ab874225d5f2abebef93df..ebff347d6e78a052a740d905d52339b92f1e4cfa 100644
--- a/test/test-util.js
+++ b/test/test-util.js
@@ -78,7 +78,7 @@ exports.timeout = {
 
 exports.testTemplate = {
   zigbee: './test/gen-template/zigbee/gen-templates.json',
-  zigbeeCount: 26,
+  zigbeeCount: 27,
   matter: './test/gen-template/matter/gen-test.json',
   matterCount: 3,
   dotdot: './test/gen-template/dotdot/dotdot-templates.json',