Custom XML#

Adding Custom XML from the ZAP UI#

  • Click on "Extensions" icon in the ZAP UI.

  • Click on the "+" add button to select a custom xml file

  • The custom clusters, attributes, commands, etc should show up in the ZAP UI once the custom xml has been added.

Creating your own custom XML in Zigbee#

The section shows how to create your own custom clusters and extend existing standard clusters with custom attributes and commands for Zigbee.

Manufacturer-Specific Clusters in Zigbee#

You can add manufacturer-specific clusters to a standard profile. We provide an example of this below. In order to do this you must satisfy two obligations:

  • The cluster ID MUST be in the manufacturer-specific range, 0xfc00 - 0xffff.

  • The cluster definition must include a manufacturer code which will be applied to ALL attributes and commands within that cluster and must be provided when sending and receiving commands and interacting with attributes.

  • Example:

    <cluster manufacturerCode="0x1002">
        <name>Sample Mfg Specific Cluster</name>
        <domain>General</domain>
        <description>This cluster provides an example of how the Application 
          Framework can be extended to include manufacturer-specific clusters.
          </description>
        <code>0xFC00</code>
        <attribute side="server" code="0x0000" define="ATTRIBUTE_ONE" type="INT8U" min="0x00" max="0xFF" writable="true" default="0x00" optional="true">ember sample attribute</attribute>
        <attribute side="server" code="0x0001" define="ATTRIBUTE_TWO" type="INT8U" min="0x00" max="0xFF" writable="true" default="0x00" optional="true">ember sample attribute 2</attribute>
        <command source="client" code="0x00" name="CommandOne" optional="true">
          <description>
            A sample manufacturer-specific command within the sample manufacturer-specific
            cluster.
          </description>
          <arg name="argOne" type="INT8U"/>
        </command>
    </cluster>

Manufacturer-Specific Commands in Standard Zigbee Cluster#

You can add your own commands to any standard Zigbee cluster with the following requirements:

  • Your manufacturer-specific commands may use any command id within the command id range, 0x00 - 0xff.

  • You must also provide a manufacturer code for the command so that it can be distinguished from other commands in the cluster and handled appropriately.

  • Example of extending the On/Off cluster with manufacturing commands:

    <clusterExtension code="0x0006">
        <command source="client" code="0x00" name="SampleMfgSpecificOffWithTransition" optional="true" manufacturerCode="0x1002">
          <description>Client command that turns the device off with a transition given
            by the transition time in the Ember Sample transition time attribute.</description>
        </command>
        <command source="client" code="0x01" name="SampleMfgSpecificOnWithTransition" optional="true" manufacturerCode="0x1002">
          <description>Client command that turns the device on with a transition given
            by the transition time in the Ember Sample transition time attribute.</description>
        </command>
        <command source="client" code="0x02" name="SampleMfgSpecificToggleWithTransition" optional="true" manufacturerCode="0x1002">
          <description>Client command that toggles the device with a transition given
            by the transition time in the Ember Sample transition time attribute.</description>
        </command>
        <command source="client" code="0x01" name="SampleMfgSpecificOnWithTransition2" optional="true" manufacturerCode="0x1049">
          <description>Client command that turns the device on with a transition given
            by the transition time in the Ember Sample transition time attribute.</description>
        </command>
        <command source="client" code="0x02" name="SampleMfgSpecificToggleWithTransition2" optional="true" manufacturerCode="0x1049">
          <description>Client command that toggles the device with a transition given
            by the transition time in the Ember Sample transition time attribute.</description>
        </command>
      </clusterExtension>

Manufacturer-Specific Attributes in Standard Zigbee Cluster#

You can add your own attributes to any standard Zigbee cluster with the following requirements:

  • Your manufacturer-specific attributes may use any attribute id within the attribute id range, 0x0000 - 0xffff.

  • You must also provide a manufacturer code for the attribute so that it can be distinguished from other attributes in the cluster and handled appropriately.

  • Example of extending the On/Off cluster with manufacturing attributes:

    <clusterExtension code="0x0006">
        <attribute side="server" code="0x0000" define="SAMPLE_MFG_SPECIFIC_TRANSITION_TIME" type="INT16U" min="0x0000" max="0xFFFF" writable="true" default="0x0000" optional="true" manufacturerCode="0x1002">Sample Mfg Specific Attribute: 0x0000 0x1002</attribute>
        <attribute side="server" code="0x0000" define="SAMPLE_MFG_SPECIFIC_TRANSITION_TIME_2" type="INT8U" min="0x0000" max="0xFFFF" writable="true" default="0x0000" optional="true" manufacturerCode="0x1049">Sample Mfg Specific Attribute: 0x0000 0x1049</attribute>
        <attribute side="server" code="0x0001" define="SAMPLE_MFG_SPECIFIC_TRANSITION_TIME_3" type="INT8U" min="0x0000" max="0xFFFF" writable="true" default="0x00" optional="true" manufacturerCode="0x1002">Sample Mfg Specific Attribute: 0x0001 0x1002</attribute>
        <attribute side="server" code="0x0001" define="SAMPLE_MFG_SPECIFIC_TRANSITION_TIME_4" type="INT16U" min="0x0000" max="0xFFFF" writable="true" default="0x0000" optional="true" manufacturerCode="0x1049">Sample Mfg Specific Attribute: 0x0001 0x1040</attribute>
    </clusterExtension>

Creating your own custom XML in Matter#

The section shows how to create your own custom clusters and extend existing standard clusters with custom attributes and commands for Matter.

Manufacturer-Specific Clusters in Matter#

You can add manufacturer-specific clusters to in Matter. We provide an example of this below.

  • The <code> is a 32-bit combination of the manufacturer code and the id for the cluster. (required)

    • The most significant 16 bits are the manufacturer code. The range for test manufacturer codes is 0xFFF1 - 0xFFF4.

    • The least significant 16 bits are the cluster id. The range for manufacturer-specific clusters are: 0xFC00 - 0xFFFE.

  • In the following example, the combination of the vendor ID (Test Manufacturer ID) of 0xFFF1 and the cluster ID of 0xFC20 results in a <code> value of 0xFFF1FC20.

  • The commands and attributes within this cluster will adopt the same Manufacturer ID.

  • Example:

      <cluster>
        <domain>General</domain>
        <name>Sample MEI</name>
        <code>0xFFF1FC20</code>
        <define>SAMPLE_MEI_CLUSTER</define>
        <description>The Sample MEI cluster showcases a cluster manufacturer extensions</description>
        <attribute side="server" code="0x0000" define="FLIP_FLOP" type="boolean" writable="true" default="false" optional="false">FlipFlop</attribute>
        <command source="server" code="0x01" name="AddArgumentsResponse" optional="false" disableDefaultResponse="true">
          <description>
            Response for AddArguments that returns the sum.
          </description>
          <arg name="returnValue" type="int8u"/>
        </command>
        <command source="client" code="0x02" name="AddArguments" response="AddArgumentsResponse" optional="false">
          <description>
            Command that takes two uint8 arguments and returns their sum.
          </description>
          <arg name="arg1" type="int8u"/>
          <arg name="arg2" type="int8u"/>
        </command>
        <command source="client" code="0x00" name="Ping" optional="false">
          <description>
            Simple command without any parameters and without a response.
          </description>
        </command>
      </cluster>

Manufacturer-Specific Attributes in Standard Matter Clusters#

You can add manufacturer specific attributes to any standard Matter cluster with the following requirements:

  • The cluster that the attributes are being added to must be specified - <clusterExtension code="<code of cluster being extended>">

  • The code of the attribute is a 32-bit combination of the manufacturer code and the id for the attribute.

    • The most significant 16 bits are the manufacturer code. The range for test manufacturer codes is 0xFFF1 - 0xFFF4.

    • The least significant 16 bits are the attribute ID. The range for non-global attributes is 0x0000 - 0x4FFF.

  • Example of extending On/Off Matter cluster with manufacture-specific attributes:

    <clusterExtension code="0x0006">
        <attribute side="server" code="0xFFF10000" define="SAMPLE_MFG_SPECIFIC_TRANSITION_TIME_2" type="INT8U" min="0x0000" max="0xFFFF" writable="true" default="0x0000" optional="true">Sample Mfg Specific Attribute 2</attribute>
        <attribute side="server" code="0xFFF10001" define="SAMPLE_MFG_SPECIFIC_TRANSITION_TIME_4" type="INT16U" min="0x0000" max="0xFFFF" writable="true" default="0x0000" optional="true">Sample Mfg Specific Attribute 4</attribute>
    </clusterExtension>

Manufacturer-Specific Commands in Standard Matter Clusters#

You can add manufacturer specific commands to any standard Matter cluster with the following requirements:

  • The cluster that the commands are being added to must be specified - <clusterExtension code="<code of cluster being extended>">

  • The code of the command is a 32-bit combination of the manufacturer code and the id for the command.

    • The most significant 16 bits are the manufacturer code. The range for test manufacturer codes is 0xFFF1 - 0xFFF4.

    • The least significant 16 bits are the command ID. The range for non-global commands is 0x0000 - 0x00FF.

  • Example of extending On/Off Matter cluster with manufacture-specific clusters:

    <clusterExtension code="0x0006">
        <command source="client" code="0xFFF10000" name="SampleMfgSpecificOnWithTransition2" optional="true">
            <description>Client command that turns the device on with a transition given
            by the transition time in the Ember Sample transition time attribute.</description>
        </command>
        <command source="client" code="0xFFF10001" name="SampleMfgSpecificToggleWithTransition2" optional="true">
            <description>Client command that toggles the device with a transition given
            by the transition time in the Ember Sample transition time attribute.</description>
        </command>
    </clusterExtension>