Logo
Developing with ZBOSS for Zigbee
Programmable Communicating Thermostat (PCT) Device

Macros

#define ZB_SE_DEVICE_VER_PCT   0
 PCT device version.
 
#define SUB_GHZ_CLUSTER_ENABLED_ID
 
#define ZB_ZCL_SUBGHZ_CLUSTER_DESC_CLIENT()
 
#define ZB_SE_DECLARE_PCT_CLUSTER_LIST(cluster_list_name, basic_attr_list, kec_attr_list, energy_mgmt_attr_list)
 Declare cluster list for In-Home Display device. More...
 
#define ZB_SE_DECLARE_PCT_EP(ep_name, ep_id, cluster_list)
 Declare endpoint for In-Home Display device. More...
 
#define ZB_SE_DECLARE_PCT_CTX(device_ctx_name, ep_name)   ZBOSS_DECLARE_DEVICE_CTX_1_EP(device_ctx_name, ep_name)
 Declares In-Home Display device context. More...
 

Detailed Description

The PCT device shall provide the capability to control the premises heating and cooling systems.

Supported clusters
PCT Device has X clusters (see SE spec 1.4 subclauses 6.1, 6.3.4.1):
Server roles Client roles
ZCL Basic cluster SE Key Establishment Cluster
SE Key Establishment Cluster ZCL Metering Cluster (optional)
SE Energy Management cluster (optional) SE MDU Pairing cluster (optional)
ZCL Keep Alive Cluster (optional)
SE Prepayment cluster (optional)
Example

Declare clusters
/**
* Declaring attributes for each cluster
*/
/* Basic cluster attributes */
ZB_ZCL_DECLARE_BASIC_ATTR_LIST(basic_attr_list, g_dev_ctx.basic_attrs);
/* Key Establishment cluster attributes */
ZB_ZCL_DECLARE_KEC_ATTR_LIST(kec_attr_list, g_dev_ctx.kec_attrs);
/* Energy Management cluster attributes */
ZB_ZCL_DECLARE_ENERGY_MANAGEMENT_ATTR_LIST(energy_mgmt_attr_list, g_dev_ctx.energy_mgmt_attrs);
/* Declare SE cluster list for the device */
basic_attr_list,
kec_attr_list,
energy_mgmt_attr_list);
/* Declare endpoint */
ZB_SE_DECLARE_PCT_EP(pct_dev_ep, PCT_DEV_ENDPOINT, pct_dev_clusters);
/* Declare device context */
ZB_SE_DECLARE_PCT_CTX(pct_dev_zcl_ctx, pct_dev_ep);

Register device context
/* Register device ZCL context */
ZB_AF_REGISTER_DEVICE_CTX(&pct_dev_zcl_ctx);
/* Register cluster commands handler for a specific endpoint */
ZB_AF_SET_ENDPOINT_HANDLER(PCT_DEV_ENDPOINT, pct_dev_zcl_cmd_handler);

Signal handler example
/** [SIGNAL_HANDLER_GET_SIGNAL] */
/* Application signal handler. Used for informing application about important ZBOSS
* events/states (device started first time/rebooted, key establishment completed etc).
* Application may ignore signals in which it is not interested.
*/
{
TRACE_MSG(TRACE_APP1, ">> zboss_signal_handler: param %hd signal %hd status %hd",
(FMT__H_H_H, param, sig, ZB_GET_APP_SIGNAL_STATUS(param)));
if (ZB_GET_APP_SIGNAL_STATUS(param) == 0)
{
switch (sig)
{
if (zb_buf_len(param) > sizeof(zb_zdo_app_signal_hdr_t))
{
se_app_production_config_t *prod_cfg =
ZB_ZDO_SIGNAL_GET_PARAMS(sg_p, se_app_production_config_t);
TRACE_MSG(TRACE_APP1, "Loading application production config", (FMT__0));
if (prod_cfg->version == SE_APP_PROD_CFG_CURRENT_VERSION)
{
zb_set_node_descriptor_manufacturer_code_req(prod_cfg->manuf_code, NULL);
}
}
break;
/** [SIGNAL_HANDLER_GET_SIGNAL] */
zboss_start_continue();
break;
/* wait button click to start commissioning */
#ifdef ZB_USE_BUTTONS
zb_button_register_handler(BUTTON_LEFT, 0, pct_dev_left_button_handler);
zb_button_register_handler(BUTTON_RIGHT, 16, pct_dev_right_button_handler);
#else
pct_dev_left_button_handler(0);
#endif
break;
zb_se_indicate_commissioning_started();
break;
case ZB_SIGNAL_DEVICE_FIRST_START:
case ZB_SIGNAL_DEVICE_REBOOT:
TRACE_MSG(TRACE_APP1, "Device STARTED OK: first_start %hd",
(FMT__H, sig == ZB_SIGNAL_DEVICE_FIRST_START));
{
TRACE_MSG(TRACE_APP1, "unique TCLK: " TRACE_FORMAT_128, (FMT__B, TRACE_ARG_128(key)));
TRACE_MSG(TRACE_APP1, "NWK key: " TRACE_FORMAT_128, (FMT__B, TRACE_ARG_128(key)));
TRACE_MSG(TRACE_APP1, "TCLK by installcode: " TRACE_FORMAT_128, (FMT__B, TRACE_ARG_128(key)));
}
zb_se_indicate_default_start();
break;
/** [SIGNAL_HANDLER_CBKE_OK] */
TRACE_MSG(TRACE_APP1, "Key Establishment with Trust Center (CBKE) OK", (FMT__0));
break;
/** [SIGNAL_HANDLER_CBKE_OK] */
/** [SIGNAL_HANDLER_START_DISCOVERY] */
#if defined ZB_USE_BUTTONS
if (dev_sd_start_enabled == ZB_FALSE) {
break;
}
#endif
TRACE_MSG(TRACE_APP1, "Start Service Discovery", (FMT__0));
zb_se_service_discovery_start(PCT_DEV_ENDPOINT);
zb_se_indicate_service_discovery_started();
break;
/** [SIGNAL_HANDLER_START_DISCOVERY] */
/** [SIGNAL_HANDLER_DO_BIND] */
{
TRACE_MSG(TRACE_APP1, "can bind cluster %d commodity_type %d remote_dev " TRACE_FORMAT_64,
(FMT__D_D_A, bind_params->cluster_id, bind_params->commodity_type,
TRACE_ARG_64(bind_params->device_addr)));
{
zb_se_service_discovery_bind_req(param, bind_params->device_addr, bind_params->endpoint);
param = 0;
}
}
/** [SIGNAL_HANDLER_DO_BIND] */
break;
/** [SIGNAL_HANDLER_BIND_OK] */
{
TRACE_MSG(TRACE_APP1, "Bind dev 0x%x OK", (FMT__D, *addr));
break;
}
/** [SIGNAL_HANDLER_BIND_OK] */
/** [SIGNAL_HANDLER_DISCOVERY_OK] */
TRACE_MSG(TRACE_APP1, "Service Discovery OK", (FMT__0));
zb_se_indicate_commissioning_stopped();
break;
/** [SIGNAL_HANDLER_DISCOVERY_OK] */
/** [SIGNAL_HANDLER_DISCOVERY_FAILED] */
TRACE_MSG(TRACE_APP1, "Service Discovery failed", (FMT__0));
zb_se_indicate_commissioning_fail(0, /* erase nvram */
0); /* reboot */
break;
/** [SIGNAL_HANDLER_DISCOVERY_FAILED] */
/** [SIGNAL_HANDLER_BIND_INDICATION] */
{
TRACE_MSG(TRACE_APP1, "Bind indication signal: binded cluster 0x%x endpoint %d device " TRACE_FORMAT_64,
(FMT__D_D_A, bind_params->cluster_id, bind_params->endpoint, TRACE_ARG_64(bind_params->device_addr)));
/** [SIGNAL_HANDLER_BIND_INDICATION] */
{
ZB_IEEE_ADDR_COPY(g_dev_ctx.energy_mgmt_client_addr.addr_long, bind_params->device_addr);
g_dev_ctx.energy_mgmt_client_ep = bind_params->endpoint;
TRACE_MSG(TRACE_APP1, "Energy Management device bound to out service: remote addr " TRACE_FORMAT_64 " ep %hd",
(FMT__A_D, TRACE_ARG_64(g_dev_ctx.energy_mgmt_client_addr.addr_long),
g_dev_ctx.energy_mgmt_client_ep));
}
}
break;
/**[SIGNAL_APS_KEY_READY] */
{
TRACE_MSG(TRACE_APP1, "Partner link key initiated, remote device addr: " TRACE_FORMAT_64,
(FMT__A, TRACE_ARG_64(remote_device_addr)));
/**[SIGNAL_APS_KEY_READY] */
/**[SIGNAL_APS_KEY_READY_DEV] */
}
break;
/**[SIGNAL_APS_KEY_READY_DEV] */
/* skip*/
break;
default:
break;
}
}
{
TRACE_MSG(TRACE_APP1, "Production config is not present or invalid", (FMT__0));
}
else
{
TRACE_MSG(TRACE_ERROR, "Device started FAILED status %d", (FMT__D, ZB_GET_APP_SIGNAL_STATUS(param)));
zb_se_indicate_commissioning_fail(0, /* erase nvram */
0); /* reboot */
}
if (param)
{
zb_buf_free(param);
}
}

Macro Definition Documentation

§ ZB_SE_DECLARE_PCT_CLUSTER_LIST

#define ZB_SE_DECLARE_PCT_CLUSTER_LIST (   cluster_list_name,
  basic_attr_list,
  kec_attr_list,
  energy_mgmt_attr_list 
)

Declare cluster list for In-Home Display device.

Parameters
cluster_list_name- cluster list variable name
basic_attr_list- attribute list for Basic cluster
kec_attr_list- attribute list for Key Establishment cluster
energy_mgmt_attr_list- attribute list for Energy Management cluster

§ ZB_SE_DECLARE_PCT_CTX

#define ZB_SE_DECLARE_PCT_CTX (   device_ctx_name,
  ep_name 
)    ZBOSS_DECLARE_DEVICE_CTX_1_EP(device_ctx_name, ep_name)

Declares In-Home Display device context.

Parameters
device_ctx_name- device context variable name.
ep_name- endpoint variable name.

§ ZB_SE_DECLARE_PCT_EP

#define ZB_SE_DECLARE_PCT_EP (   ep_name,
  ep_id,
  cluster_list 
)
Value:
ZB_ZCL_DECLARE_PCT_SIMPLE_DESC(ep_name, \
ep_id, \
ZB_SE_PCT_IN_CLUSTER_NUM, \
ZB_SE_PCT_OUT_CLUSTER_NUM, \
SUB_GHZ_CLUSTER_ENABLED_ID); \
ZB_AF_DECLARE_ENDPOINT_DESC(ep_name, \
ep_id, \
0, \
NULL, \
ZB_ZCL_ARRAY_SIZE(cluster_list, zb_zcl_cluster_desc_t), \
cluster_list, \
(zb_af_simple_desc_1_1_t*)&simple_desc_##ep_name, \
ZB_SE_PCT_REPORT_ATTR_COUNT, NULL, \
0, NULL)
ZCL cluster description.
Definition: zb_zcl_common.h:129
#define ZB_AF_SE_PROFILE_ID
Definition: zboss_api_af.h:297

Declare endpoint for In-Home Display device.

Parameters
ep_name- endpoint variable name
ep_id- endpoint ID
cluster_list- endpoint cluster list