ESPHome 2026.11.0-dev
Loading...
Searching...
No Matches
zigbee_helpers_esp32.c
Go to the documentation of this file.
2#ifdef USE_ESP32
3#ifdef USE_ZIGBEE
4
6#include "ezbee/zha.h"
7
8ezb_err_t esphome_zb_cluster_add_or_update_attr(uint16_t cluster_id, ezb_zcl_cluster_desc_t cluster_desc,
9 uint16_t attr_id, void *value_p) {
10 ezb_zcl_attr_desc_t attr_desc = ezb_zcl_cluster_get_attr_desc(cluster_desc, attr_id, EZB_ZCL_STD_MANUF_CODE);
11 if (attr_desc != NULL) {
12 return ezb_zcl_attr_desc_set_value(attr_desc, value_p);
13 }
14 return esphome_zb_cluster_add_attr(cluster_id, cluster_desc, attr_id, value_p);
15}
16
17ezb_err_t esphome_zb_add_or_update_cluster(uint16_t cluster_id, ezb_af_ep_desc_t ep_desc, uint8_t role_mask) {
18 if (ezb_af_endpoint_get_cluster_desc(ep_desc, cluster_id, role_mask) != NULL) {
19 // Cluster already exists, nothing to do
20 return EZB_ERR_NONE;
21 }
22 ezb_zcl_cluster_desc_t cluster_desc;
23 cluster_desc = esphome_zb_default_cluster_dscr_create(cluster_id, role_mask);
24 return ezb_af_endpoint_add_cluster_desc(ep_desc, cluster_desc);
25}
26
27ezb_af_ep_desc_t esphome_zb_zha_default_ep_desc_create(uint8_t ep_id, uint16_t device_id, uint8_t power_source) {
28 ezb_af_ep_desc_t ep_desc;
29 switch (device_id) {
30 case EZB_ZHA_MAINS_POWER_OUTLET_DEVICE_ID: {
31 ezb_zha_mains_power_outlet_config_t config = EZB_ZHA_MAINS_POWER_OUTLET_CONFIG();
32 config.basic_cfg.power_source = power_source;
33 ep_desc = ezb_zha_create_mains_power_outlet(ep_id, &config);
34 break;
35 }
36 case EZB_ZHA_LIGHT_SENSOR_DEVICE_ID: {
37 ezb_zha_light_sensor_config_t config = EZB_ZHA_LIGHT_SENSOR_CONFIG();
38 config.basic_cfg.power_source = power_source;
39 ep_desc = ezb_zha_create_light_sensor(ep_id, &config);
40 break;
41 }
42 case EZB_ZHA_TEMPERATURE_SENSOR_DEVICE_ID: {
43 ezb_zha_temperature_sensor_config_t config = EZB_ZHA_TEMPERATURE_SENSOR_CONFIG();
44 config.basic_cfg.power_source = power_source;
45 ep_desc = ezb_zha_create_temperature_sensor(ep_id, &config);
46 break;
47 }
48 default: {
49 // For other device IDs no macro exists, so we create an empty endpoint descriptor
50 ezb_af_ep_config_t config = {
51 .ep_id = ep_id,
52 .app_profile_id = EZB_AF_HA_PROFILE_ID,
53 .app_device_id = device_id,
54 .app_device_version = 0,
55 };
56 ep_desc = ezb_af_create_endpoint_desc(&config);
57 break;
58 }
59 }
60 return ep_desc;
61}
62
63ezb_zcl_cluster_desc_t esphome_zb_default_cluster_dscr_create(uint16_t cluster_id, uint8_t role_mask) {
64 switch (cluster_id) {
65 case EZB_ZCL_CLUSTER_ID_BASIC:
66 return ezb_zcl_basic_create_cluster_desc(NULL, role_mask);
67 case EZB_ZCL_CLUSTER_ID_IDENTIFY:
68 return ezb_zcl_identify_create_cluster_desc(NULL, role_mask);
69 case EZB_ZCL_CLUSTER_ID_ON_OFF:
70 return ezb_zcl_on_off_create_cluster_desc(NULL, role_mask);
71 case EZB_ZCL_CLUSTER_ID_TIME:
72 return ezb_zcl_time_create_cluster_desc(NULL, role_mask);
73 case EZB_ZCL_CLUSTER_ID_ANALOG_INPUT:
74 return ezb_zcl_analog_input_create_cluster_desc(NULL, role_mask);
75 case EZB_ZCL_CLUSTER_ID_ANALOG_OUTPUT:
76 return ezb_zcl_analog_output_create_cluster_desc(NULL, role_mask);
77 case EZB_ZCL_CLUSTER_ID_BINARY_INPUT:
78 return ezb_zcl_binary_input_create_cluster_desc(NULL, role_mask);
79 case EZB_ZCL_CLUSTER_ID_BINARY_OUTPUT:
80 return ezb_zcl_binary_output_create_cluster_desc(NULL, role_mask);
81 case EZB_ZCL_CLUSTER_ID_ILLUMINANCE_MEASUREMENT:
82 return ezb_zcl_illuminance_measurement_create_cluster_desc(NULL, role_mask);
83 case EZB_ZCL_CLUSTER_ID_TEMPERATURE_MEASUREMENT:
84 return ezb_zcl_temperature_measurement_create_cluster_desc(NULL, role_mask);
85 case EZB_ZCL_CLUSTER_ID_PRESSURE_MEASUREMENT:
86 return ezb_zcl_pressure_measurement_create_cluster_desc(NULL, role_mask);
87 case EZB_ZCL_CLUSTER_ID_FLOW_MEASUREMENT:
88 return ezb_zcl_flow_measurement_create_cluster_desc(NULL, role_mask);
89 case EZB_ZCL_CLUSTER_ID_REL_HUMIDITY_MEASUREMENT:
90 return ezb_zcl_rel_humidity_measurement_create_cluster_desc(NULL, role_mask);
91 case EZB_ZCL_CLUSTER_ID_OCCUPANCY_SENSING:
92 return ezb_zcl_occupancy_sensing_create_cluster_desc(NULL, role_mask);
93 case EZB_ZCL_CLUSTER_ID_CARBON_DIOXIDE_MEASUREMENT:
94 return ezb_zcl_carbon_dioxide_measurement_create_cluster_desc(NULL, role_mask);
95 case EZB_ZCL_CLUSTER_ID_PM2_5_MEASUREMENT:
96 return ezb_zcl_pm2_5_measurement_create_cluster_desc(NULL, role_mask);
97 default: {
98 ezb_zcl_custom_cluster_config_t config = {0};
99 config.cluster_id = cluster_id;
100 return ezb_zcl_custom_create_cluster_desc(&config, role_mask);
101 }
102 }
103}
104
105ezb_err_t esphome_zb_cluster_add_attr(uint16_t cluster_id, ezb_zcl_cluster_desc_t cluster_desc, uint16_t attr_id,
106 void *value_p) {
107 switch (cluster_id) {
108 case EZB_ZCL_CLUSTER_ID_BASIC:
109 return ezb_zcl_basic_cluster_desc_add_attr(cluster_desc, attr_id, value_p);
110 case EZB_ZCL_CLUSTER_ID_IDENTIFY:
111 return ezb_zcl_identify_cluster_desc_add_attr(cluster_desc, attr_id, value_p);
112 case EZB_ZCL_CLUSTER_ID_ON_OFF:
113 return ezb_zcl_on_off_cluster_desc_add_attr(cluster_desc, attr_id, value_p);
114 case EZB_ZCL_CLUSTER_ID_TIME:
115 return ezb_zcl_time_cluster_desc_add_attr(cluster_desc, attr_id, value_p);
116 case EZB_ZCL_CLUSTER_ID_ANALOG_INPUT:
117 return ezb_zcl_analog_input_cluster_desc_add_attr(cluster_desc, attr_id, value_p);
118 case EZB_ZCL_CLUSTER_ID_ANALOG_OUTPUT:
119 return ezb_zcl_analog_output_cluster_desc_add_attr(cluster_desc, attr_id, value_p);
120 case EZB_ZCL_CLUSTER_ID_BINARY_INPUT:
121 return ezb_zcl_binary_input_cluster_desc_add_attr(cluster_desc, attr_id, value_p);
122 case EZB_ZCL_CLUSTER_ID_BINARY_OUTPUT:
123 return ezb_zcl_binary_output_cluster_desc_add_attr(cluster_desc, attr_id, value_p);
124 case EZB_ZCL_CLUSTER_ID_ILLUMINANCE_MEASUREMENT:
125 return ezb_zcl_illuminance_measurement_cluster_desc_add_attr(cluster_desc, attr_id, value_p);
126 case EZB_ZCL_CLUSTER_ID_TEMPERATURE_MEASUREMENT:
127 return ezb_zcl_temperature_measurement_cluster_desc_add_attr(cluster_desc, attr_id, value_p);
128 case EZB_ZCL_CLUSTER_ID_PRESSURE_MEASUREMENT:
129 return ezb_zcl_pressure_measurement_cluster_desc_add_attr(cluster_desc, attr_id, value_p);
130 case EZB_ZCL_CLUSTER_ID_FLOW_MEASUREMENT:
131 return ezb_zcl_flow_measurement_cluster_desc_add_attr(cluster_desc, attr_id, value_p);
132 case EZB_ZCL_CLUSTER_ID_REL_HUMIDITY_MEASUREMENT:
133 return ezb_zcl_rel_humidity_measurement_cluster_desc_add_attr(cluster_desc, attr_id, value_p);
134 case EZB_ZCL_CLUSTER_ID_OCCUPANCY_SENSING:
135 return ezb_zcl_occupancy_sensing_cluster_desc_add_attr(cluster_desc, attr_id, value_p);
136 case EZB_ZCL_CLUSTER_ID_CARBON_DIOXIDE_MEASUREMENT:
137 return ezb_zcl_carbon_dioxide_measurement_cluster_desc_add_attr(cluster_desc, attr_id, value_p);
138 case EZB_ZCL_CLUSTER_ID_PM2_5_MEASUREMENT:
139 return ezb_zcl_pm2_5_measurement_cluster_desc_add_attr(cluster_desc, attr_id, value_p);
140 default:
141 return EZB_ERR_NOT_FOUND;
142 }
143}
144
145#endif
146#endif
ezb_err_t esphome_zb_cluster_add_or_update_attr(uint16_t cluster_id, ezb_zcl_cluster_desc_t cluster_desc, uint16_t attr_id, void *value_p)
ezb_err_t esphome_zb_add_or_update_cluster(uint16_t cluster_id, ezb_af_ep_desc_t ep_desc, uint8_t role_mask)
ezb_af_ep_desc_t esphome_zb_zha_default_ep_desc_create(uint8_t ep_id, uint16_t device_id, uint8_t power_source)
ezb_err_t esphome_zb_cluster_add_attr(uint16_t cluster_id, ezb_zcl_cluster_desc_t cluster_desc, uint16_t attr_id, void *value_p)
ezb_zcl_cluster_desc_t esphome_zb_default_cluster_dscr_create(uint16_t cluster_id, uint8_t role_mask)