Support / Knowledge Base / HOW TO: Add missing ZigBee Smart Energy Client clusters for a device (Example: RToA CT-22/30/80 th

HOW TO: Add missing ZigBee Smart Energy Client clusters for a device (Example: RToA CT-22/30/80 thermostat)

Introduction


Digi International creates tested Plug-In drivers to ensure compatibility with a number of popular Smart Energy devices available on the market today. (Click on Gateway model for the ConnectPort X2 for Smart Energy or ConnectPort X2e for Smart Energy Plug-in driver page).  As the number of Smart Energy devices available on the market increases however, so does the likelihood that you'll use a device which Digi hasn't created a driver for.  This article describes how to manually add Manufacturer Specific Clusters (MSC) Client clusters to read the Radio Thermostat of America (RToA) CT-22, CT-30, or CT-80 Programmable Communicating Thermostat (PCT) from a Digi Smart Energy Gateway, but the guidance from this example can be used to add Client cluster(s) for ANY device.

NOTE:  To perform the changes described in this article, a Device Cloud account is necessary, and your Digi Smart Energy Gateway must be added to that account.  If needing a Device Cloud account, click here to Get Started with the Device Cloud.  Once your Device Cloud account has been created, use the Add Device button under Device Management --- Devices to add the Gateway to your account.  Once the Device Cloud account exists and your Gateway is added, the Smart Energy Framework commands used in this article can be sent using either of the methods FOUND HERE.
 

Installing the RToA CT-22, CT-30, or CT-80 Thermostat


A customer has purchased an RToA Model CT-22, CT-30, or CT-80 PCT, along with the MMB Networks RapidSE ZigBee Smart Energy U-Snap module (Smart Energy Production Certificate required).  The customer wants to add the t-stat to their ConnectPort X2e for Smart Energy gateway, but after consulting the Plug-in driver page for their Gateway, have determined that Digi hasn't made a Plug-In driver for the RToA thermostat.  Without a driver, the customer will need to manually add any missing thermostat clusters which aren't already found on the Gateway, in order to access the attributes found under them.  Adding the Manufacturing Specific Clusters for this device will also allow them to setup Reporting, or control the Thermostat using its documented command set.

The customer contacts MMB Research to obtain the Developer Documentation for the RapidSE ZigBee module which plugs into the RToA thermostats.  After consulting the documentation, they discover that the PCT device has an endpoint 10 (0x0A), which contains the Alarm, Thermostat, Fan Control, and Temperature Measurement clusters, in addition to the standard Basic, Power Configuration, Identify, and Key Establishment clusters.

When developer documentation isn't available from a Smart Energy device manufacturer, you might be able to figure out which Client cluster(s) need to be added to the Gateway by first adding the Smart Energy device to your Gateway's network, finding out which Server Clusters you aren't able to read, then using the example below to add any corresponding Client clusters.  In lieu of Manufacturer-provided developer documentation, the example below should allow you to read a Server cluster, despite the ad hoc nature of this method.
 

Discover existing Gateway clusters:


Initially the customer sends a get_clusters request to their Gateway, to find out which Server/Client clusters are already present on the Gateway's network:

Request:  <get_clusters synchronous="true" />

Response:
<get_clusters_response timestamp="1397829743">
  <clusters type="list">
    <item type="dict">
      <server_or_client type="int">0x0</server_or_client>
      <cluster_id type="int">0x0</cluster_id>
      <cluster_class type="string">ZCL_BasicCluster_server</cluster_class>
      <endpoint_id type="int">0x5E</endpoint_id>
      <enable_APS_encryption type="bool">FALSE</enable_APS_encryption>
    </item>
    <item type="dict">
      <server_or_client type="int">0x0</server_or_client>
      <cluster_id type="int">0x800</cluster_id>
      <cluster_class type="string">SE_KeyEstablishmentCluster_server</cluster_class>
      <endpoint_id type="int">0x5E</endpoint_id>
      <enable_APS_encryption type="bool">FALSE</enable_APS_encryption>
    </item>
    <item type="dict">
      <server_or_client type="int">0x0</server_or_client>
      <cluster_id type="int">0x3</cluster_id>
      <cluster_class type="string">ZCL_IdentifyCluster_server</cluster_class>
      <endpoint_id type="int">0x5E</endpoint_id>
      <enable_APS_encryption type="bool">FALSE</enable_APS_encryption>
    </item>
    <item type="dict">
      <server_or_client type="int">0x0</server_or_client>
      <cluster_id type="int">0x701</cluster_id>
      <cluster_class type="string">SE_DemandResponseLoadControlCluster_server</cluster_class>
      <endpoint_id type="int">0x5E</endpoint_id>
      <enable_APS_encryption type="bool">TRUE</enable_APS_encryption>
    </item>
    <item type="dict">
      <server_or_client type="int">0x0</server_or_client>
      <cluster_id type="int">0xA</cluster_id>
      <cluster_class type="string">ZCL_TimeCluster_server</cluster_class>
      <endpoint_id type="int">0x5E</endpoint_id>
      <enable_APS_encryption type="bool">TRUE</enable_APS_encryption>
    </item>
    <item type="dict">
      <server_or_client type="int">0x0</server_or_client>
      <cluster_id type="int">0x703</cluster_id>
      <cluster_class type="string">SE_MessageCluster_server</cluster_class>
      <endpoint_id type="int">0x5E</endpoint_id>
      <enable_APS_encryption type="bool">TRUE</enable_APS_encryption>
    </item>
    <item type="dict">
      <server_or_client type="int">0x0</server_or_client>
      <cluster_id type="int">0x19</cluster_id>
      <cluster_class type="string">OTA_Cluster_Server</cluster_class>
      <endpoint_id type="int">0x5E</endpoint_id>
      <enable_APS_encryption type="bool">TRUE</enable_APS_encryption>
    </item>
    <item type="dict">
      <server_or_client type="int">0x0</server_or_client>
      <cluster_id type="int">0x700</cluster_id>
      <cluster_class type="string">SE_PriceCluster_server</cluster_class>
      <endpoint_id type="int">0x5E</endpoint_id>
      <enable_APS_encryption type="bool">TRUE</enable_APS_encryption>
    </item>
    <item type="dict">
      <server_or_client type="int">0x1</server_or_client>
      <cluster_id type="int">0x0</cluster_id>
      <cluster_class type="string">ZCL_BasicCluster_client</cluster_class>
      <endpoint_id type="int">0x5E</endpoint_id>
      <enable_APS_encryption type="bool">FALSE</enable_APS_encryption>
    </item>
    <item type="dict">
      <server_or_client type="int">0x1</server_or_client>
      <cluster_id type="int">0x800</cluster_id>
      <cluster_class type="string">SE_KeyEstablishmentCluster_client</cluster_class>
      <endpoint_id type="int">0x5E</endpoint_id>
      <enable_APS_encryption type="bool">FALSE</enable_APS_encryption>
    </item>
    <item type="dict">
      <server_or_client type="int">0x1</server_or_client>
      <cluster_id type="int">0x702</cluster_id>
      <cluster_class type="string">SE_SimpleMeteringCluster_client</cluster_class>
      <endpoint_id type="int">0x5E</endpoint_id>
      <enable_APS_encryption type="bool">TRUE</enable_APS_encryption>
    </item>
    <item type="dict">
      <server_or_client type="int">0x1</server_or_client>
      <cluster_id type="int">0x3</cluster_id>
      <cluster_class type="string">ZCL_IdentifyCluster_client</cluster_class>
      <endpoint_id type="int">0x5E</endpoint_id>
      <enable_APS_encryption type="bool">FALSE</enable_APS_encryption>
    </item>
    <item type="dict">
      <server_or_client type="int">0x1</server_or_client>
      <cluster_id type="int">0x6</cluster_id>
      <cluster_class type="string">ZCL_Cluster</cluster_class>
      <endpoint_id type="int">0x5E</endpoint_id>
      <enable_APS_encryption type="bool">FALSE</enable_APS_encryption>
    </item>
    <item type="dict">
      <server_or_client type="int">0x1</server_or_client>
      <cluster_id type="int">0x201</cluster_id>
      <cluster_class type="string">ZCL_Cluster</cluster_class>
      <endpoint_id type="int">0x5E</endpoint_id>
      <enable_APS_encryption type="bool">FALSE</enable_APS_encryption>
    </item>
    <item type="dict">
      <server_or_client type="int">0x1</server_or_client>
      <cluster_id type="int">0x202</cluster_id>
      <cluster_class type="string">ZCL_Cluster</cluster_class>
      <endpoint_id type="int">0x5E</endpoint_id>
      <enable_APS_encryption type="bool">FALSE</enable_APS_encryption>
    </item>
    <item type="dict">
      <server_or_client type="int">0x1</server_or_client>
      <cluster_id type="int">0x23</cluster_id>
      <cluster_class type="string">APSME_RemoveDeviceCluster</cluster_class>
      <endpoint_id type="int">0xE6</endpoint_id>
      <enable_APS_encryption type="bool">FALSE</enable_APS_encryption>
    </item>
  </clusters>
</get_clusters_response>
 

Compare Device and Gateway clusters:


The get_clusters output from the Gateway is compared with the Cluster listing found in the thermostat module's documentation next.  The thermostat is found to have an endpoint 0xA, so the Server clusters on the 0xA endpoint are compared with the Client clusters on endpoint 0x5E of the Gateway.

Two of the Client clusters from the get_clusters above have been highlighted.  We know these are Client clusters because the server_or_client attribute has a value of 0x1.  Gateway Client clusters 0x201 and 0x202 match up with thermostat Server clusters 0x201 and 0x202, so the attributes found under these two clusters can already be read .

There are also two other clusters are found on the thermostat's 0xA endpoint:  0x9 and 0x402.  Since these Client clusters are not already present on the Gateway's network, they must be manually added in order to read the attributes found under these Manufacturing Specific Clusters.
 

Add missing client clusters to the Gateway's 0x5E endpoint:


The missing client clusters can be added to the Gateway's network with the add_cluster command:

<add_cluster synchronous="true">
  <endpoint_id>0x5E</endpoint_id>
  <cluster_class type="string">ZCL_Cluster</cluster_class>
  <cluster_id>0x9</cluster_id>
  <server_or_client>1</server_or_client>
  <enable_APS_encryption>FALSE</enable_APS_encryption>
</add_cluster>

<add_cluster synchronous="true">
  <endpoint_id>0x5E</endpoint_id>
  <cluster_class type="string">ZCL_Cluster</cluster_class>
  <cluster_id>0x402</cluster_id>
  <server_or_client>1</server_or_client>
  <enable_APS_encryption>FALSE</enable_APS_encryption>
</add_cluster>
 

Add the thermostat to the Gateway's network:


Now that we've ensured the necessary Client clusters are found on the Gateway, to be able to read the attributes of the Thermostat's Server clusters, the last step is to use the add_device command to add the Thermostat to the Gateway's network.  The Thermostat's EUI-64 MAC address and Installation code would replace the numbers in bold found in the Request below:

<add_device synchronous="true">
  <device_address type="MAC">11:22:33:44:55:66:77:88</device_address>
  <join_time>600</join_time>
  <installation_code type="string">1234-5678-90AB-CDEF</installation_code>
</add_device>
 

What if the Server cluster still can't be read?


If you've added a non-encrypted Client cluster to your Gateway's 0x5E endpoint and still can't read the device's corresponding Server cluster, you may need to remove the Client cluster, then re-add it as an APS Encrypted cluster instead (HOW TO: Remove non-encrypted ZigBee Smart Energy clusters for a device and re-add them as APS Enrcypted clusters (Example: 2D2C Inc Model 1313 Load Controller)).
 

What if the Digi Smart Energy Gateway isn't a Coordinator?


The ConnectPort X2e for Smart Energy gateway can be configured as a Smart Energy Coordinator ESI or Router, depending on the needs of the network.  This article will show you HOW TO: Change a ConnectPort X2e Smart Energy Coordinator Gateway to a Router Gateway and Vice Versa.  In the context of this article, all steps would still need to still be performed, except for the add_device portion, since this function would be performed by the ZigBee Smart Energy network Coordinator.
 

Next Steps:


Now that the RToA Thermostat has been added to your Gateway's network successfully, you might want to control the thermostat using any documented commands (see Manufacturer's document for specific  information) or  setup a Reporting configuration to report the current temperature of your Thermostat:

HOW TO: Configure Pseudo (differential) Reporting on the ConnectPort X2e for Smart Energy
HOW TO: Configure Scheduled (cron) Reporting on the ConnectPort X2e for Smart Energy
Last updated: Aug 23, 2018

Recently Viewed Articles

No recently viewed articles
Contact a Digi expert and get started today! Contact Us