Skip to content

Commit b5172ef

Browse files
committed
fix(zigbee): Update code for ZB 1.6.7 and remove state texts
1 parent 9b48662 commit b5172ef

File tree

3 files changed

+112
-47
lines changed

3 files changed

+112
-47
lines changed

libraries/Zigbee/examples/Zigbee_Multistate_Input_Output/Zigbee_Multistate_Input_Output.ino

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ void onStateChange(uint16_t state) {
5252
// print the state
5353
Serial.printf("Received state change: %d\r\n", state);
5454
// print the state name using the stored state names
55-
const char* const* state_names = zbMultistateDevice.getMultistateOutputStateNames();
55+
const char* const* state_names = ZB_MULTISTATE_APPLICATION_TYPE_7_STATE_NAMES;
5656
if (state_names && state < zbMultistateDevice.getMultistateOutputStateNamesLength()) {
5757
Serial.printf("State name: %s\r\n", state_names[state]);
5858
}
@@ -64,9 +64,8 @@ void onStateChangeCustom(uint16_t state) {
6464
// print the state
6565
Serial.printf("Received state change: %d\r\n", state);
6666
// print the state name using the stored state names
67-
const char* const* state_names = zbMultistateDeviceCustom.getMultistateOutputStateNames();
68-
if (state_names && state < zbMultistateDeviceCustom.getMultistateOutputStateNamesLength()) {
69-
Serial.printf("State name: %s\r\n", state_names[state]);
67+
if (multistate_custom_state_names && state < zbMultistateDeviceCustom.getMultistateOutputStateNamesLength()) {
68+
Serial.printf("State name: %s\r\n", multistate_custom_state_names[state]);
7069
}
7170
// print state index of possible options
7271
Serial.printf("State index: %d / %d\r\n", state, zbMultistateDevice.getMultistateOutputStateNamesLength() - 1);
@@ -95,37 +94,51 @@ void onStateChangeCustom(uint16_t state) {
9594
}
9695

9796
void setup() {
97+
log_d("Starting serial");
9898
Serial.begin(115200);
9999

100100
// Init button switch
101+
log_d("Init button switch");
101102
pinMode(button, INPUT_PULLUP);
102103

103104
// Optional: set Zigbee device name and model
105+
log_d("Set Zigbee device name and model");
104106
zbMultistateDevice.setManufacturerAndModel("Espressif", "ZigbeeMultistateDevice");
105107

106108
// Set up analog input
109+
log_d("Add Multistate Input");
107110
zbMultistateDevice.addMultistateInput();
111+
log_d("Set Multistate Input Application");
108112
zbMultistateDevice.setMultistateInputApplication(ZB_MULTISTATE_APPLICATION_TYPE_0_INDEX);
113+
log_d("Set Multistate Input Description");
109114
zbMultistateDevice.setMultistateInputDescription("Fan (on/off/auto)");
110-
zbMultistateDevice.setMultistateInputStates(ZB_MULTISTATE_APPLICATION_TYPE_0_STATE_NAMES, ZB_MULTISTATE_APPLICATION_TYPE_0_NUM_STATES);
115+
zbMultistateDevice.setMultistateInputStates(ZB_MULTISTATE_APPLICATION_TYPE_0_NUM_STATES);
111116

112117
// Set up analog output
118+
log_d("Add Multistate Output");
113119
zbMultistateDevice.addMultistateOutput();
120+
log_d("Set Multistate Output Application");
114121
zbMultistateDevice.setMultistateOutputApplication(ZB_MULTISTATE_APPLICATION_TYPE_7_INDEX);
122+
log_d("Set Multistate Output Description");
115123
zbMultistateDevice.setMultistateOutputDescription("Light (high/normal/low)");
116-
zbMultistateDevice.setMultistateOutputStates(ZB_MULTISTATE_APPLICATION_TYPE_7_STATE_NAMES, ZB_MULTISTATE_APPLICATION_TYPE_7_NUM_STATES);
124+
zbMultistateDevice.setMultistateOutputStates(ZB_MULTISTATE_APPLICATION_TYPE_7_NUM_STATES);
117125

118126
// Set up custom output
127+
log_d("Add Multistate Output");
119128
zbMultistateDeviceCustom.addMultistateOutput();
129+
log_d("Set Multistate Output Application");
120130
zbMultistateDeviceCustom.setMultistateOutputApplication(ZB_MULTISTATE_APPLICATION_TYPE_OTHER_INDEX);
131+
log_d("Set Multistate Output Description");
121132
zbMultistateDeviceCustom.setMultistateOutputDescription("Fan (on/off/slow/medium/fast)");
122-
zbMultistateDeviceCustom.setMultistateOutputStates(multistate_custom_state_names, 5);
133+
zbMultistateDeviceCustom.setMultistateOutputStates(5);
123134

124135
// Set callback function for multistate output change
136+
log_d("Set callback function for multistate output change");
125137
zbMultistateDevice.onMultistateOutputChange(onStateChange);
126138
zbMultistateDeviceCustom.onMultistateOutputChange(onStateChangeCustom);
127139

128140
// Add endpoints to Zigbee Core
141+
log_d("Add endpoints to Zigbee Core");
129142
Zigbee.addEndpoint(&zbMultistateDevice);
130143
Zigbee.addEndpoint(&zbMultistateDeviceCustom);
131144

libraries/Zigbee/src/ep/ZigbeeMultistate.cpp

Lines changed: 79 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,10 @@ ZigbeeMultistate::ZigbeeMultistate(uint8_t endpoint) : ZigbeeEP(endpoint) {
3434
_multistate_clusters = 0;
3535
_input_state = 0;
3636
_output_state = 0;
37-
_input_state_names = nullptr;
3837
_input_state_names_length = 0;
39-
_output_state_names = nullptr;
4038
_output_state_names_length = 0;
39+
// _input_state_names = nullptr;
40+
// _output_state_names = nullptr;
4141
_on_multistate_output_change = nullptr;
4242
}
4343

@@ -55,25 +55,25 @@ bool ZigbeeMultistate::addMultistateInput() {
5555
char default_description[] = "\x10" // Size of the description text
5656
"Multistate Input"; // Description text
5757
uint32_t application_type = 0x00000000 | (0x0D << 24); // Application type
58-
const char* state_text[] = { "Off", "On", "Auto" }; // State text array
58+
// const char* state_text[] = { "Off", "On", "Auto" }; // State text array
5959

60-
esp_err_t ret = esp_zb_multistate_input_cluster_add_attr(multistate_input_cluster, ESP_ZB_ZCL_ATTR_MULTISTATE_INPUT_DESCRIPTION_ID, (void *)default_description);
60+
esp_err_t ret = esp_zb_multistate_input_cluster_add_attr(multistate_input_cluster, ESP_ZB_ZCL_ATTR_MULTI_INPUT_DESCRIPTION_ID, (void *)default_description);
6161
if (ret != ESP_OK) {
6262
log_e("Failed to add description attribute: 0x%x: %s", ret, esp_err_to_name(ret));
6363
return false;
6464
}
6565

66-
ret = esp_zb_multistate_input_cluster_add_attr(multistate_input_cluster, ESP_ZB_ZCL_ATTR_MULTISTATE_INPUT_APPLICATION_TYPE_ID, (void *)&application_type);
66+
ret = esp_zb_multistate_input_cluster_add_attr(multistate_input_cluster, ESP_ZB_ZCL_ATTR_MULTI_INPUT_APPLICATION_TYPE_ID, (void *)&application_type);
6767
if (ret != ESP_OK) {
6868
log_e("Failed to add application type attribute: 0x%x: %s", ret, esp_err_to_name(ret));
6969
return false;
7070
}
7171

72-
ret = esp_zb_multistate_input_cluster_add_attr(multistate_input_cluster, ESP_ZB_ZCL_ATTR_MULTISTATE_INPUT_STATE_TEXT_ID, (void *)state_text);
73-
if (ret != ESP_OK) {
74-
log_e("Failed to add state text attribute: 0x%x: %s", ret, esp_err_to_name(ret));
75-
return false;
76-
}
72+
// ret = esp_zb_multistate_input_cluster_add_attr(multistate_input_cluster, ESP_ZB_ZCL_ATTR_MULTI_INPUT_STATE_TEXT_ID, (void *)state_text);
73+
// if (ret != ESP_OK) {
74+
// log_e("Failed to add state text attribute: 0x%x: %s", ret, esp_err_to_name(ret));
75+
// return false;
76+
// }
7777

7878
ret = esp_zb_cluster_list_add_multistate_input_cluster(_cluster_list, multistate_input_cluster, ESP_ZB_ZCL_CLUSTER_SERVER_ROLE);
7979
if (ret != ESP_OK) {
@@ -102,23 +102,23 @@ bool ZigbeeMultistate::addMultistateOutput() {
102102
const char* state_text[] = { "Off", "On", "Auto" }; // State text array
103103
uint16_t num_states = 3; // Number of states
104104

105-
esp_err_t ret = esp_zb_multistate_output_cluster_add_attr(multistate_output_cluster, ESP_ZB_ZCL_ATTR_MULTISTATE_OUTPUT_DESCRIPTION_ID, (void *)default_description);
105+
esp_err_t ret = esp_zb_multistate_output_cluster_add_attr(multistate_output_cluster, ESP_ZB_ZCL_ATTR_MULTI_OUTPUT_DESCRIPTION_ID, (void *)default_description);
106106
if (ret != ESP_OK) {
107107
log_e("Failed to add description attribute: 0x%x: %s", ret, esp_err_to_name(ret));
108108
return false;
109109
}
110110

111-
ret = esp_zb_multistate_output_cluster_add_attr(multistate_output_cluster, ESP_ZB_ZCL_ATTR_MULTISTATE_OUTPUT_APPLICATION_TYPE_ID, (void *)&application_type);
111+
ret = esp_zb_multistate_output_cluster_add_attr(multistate_output_cluster, ESP_ZB_ZCL_ATTR_MULTI_OUTPUT_APPLICATION_TYPE_ID, (void *)&application_type);
112112
if (ret != ESP_OK) {
113113
log_e("Failed to add application type attribute: 0x%x: %s", ret, esp_err_to_name(ret));
114114
return false;
115115
}
116116

117-
ret = esp_zb_multistate_output_cluster_add_attr(multistate_output_cluster, ESP_ZB_ZCL_ATTR_MULTISTATE_OUTPUT_STATE_TEXT_ID, (void *)state_text);
118-
if (ret != ESP_OK) {
119-
log_e("Failed to add state text attribute: 0x%x: %s", ret, esp_err_to_name(ret));
120-
return false;
121-
}
117+
// ret = esp_zb_multistate_output_cluster_add_attr(multistate_output_cluster, ESP_ZB_ZCL_ATTR_MULTI_OUTPUT_STATE_TEXT_ID, (void *)state_text);
118+
// if (ret != ESP_OK) {
119+
// log_e("Failed to add state text attribute: 0x%x: %s", ret, esp_err_to_name(ret));
120+
// return false;
121+
// }
122122

123123
ret = esp_zb_cluster_list_add_multistate_output_cluster(_cluster_list, multistate_output_cluster, ESP_ZB_ZCL_CLUSTER_SERVER_ROLE);
124124
if (ret != ESP_OK) {
@@ -141,7 +141,7 @@ bool ZigbeeMultistate::setMultistateInputApplication(uint32_t application_type)
141141

142142
esp_zb_attribute_list_t *multistate_input_cluster =
143143
esp_zb_cluster_list_get_cluster(_cluster_list, ESP_ZB_ZCL_CLUSTER_ID_MULTI_INPUT, ESP_ZB_ZCL_CLUSTER_SERVER_ROLE);
144-
esp_err_t ret = esp_zb_cluster_update_attr(multistate_input_cluster, ESP_ZB_ZCL_ATTR_MULTISTATE_INPUT_APPLICATION_TYPE_ID, (void *)&application_type_value);
144+
esp_err_t ret = esp_zb_cluster_update_attr(multistate_input_cluster, ESP_ZB_ZCL_ATTR_MULTI_INPUT_APPLICATION_TYPE_ID, (void *)&application_type_value);
145145
if (ret != ESP_OK) {
146146
log_e("Failed to set Multistate Input application type: 0x%x: %s", ret, esp_err_to_name(ret));
147147
return false;
@@ -160,7 +160,7 @@ bool ZigbeeMultistate::setMultistateOutputApplication(uint32_t application_type)
160160

161161
esp_zb_attribute_list_t *multistate_output_cluster =
162162
esp_zb_cluster_list_get_cluster(_cluster_list, ESP_ZB_ZCL_CLUSTER_ID_MULTI_OUTPUT, ESP_ZB_ZCL_CLUSTER_SERVER_ROLE);
163-
esp_err_t ret = esp_zb_cluster_update_attr(multistate_output_cluster, ESP_ZB_ZCL_ATTR_MULTISTATE_OUTPUT_APPLICATION_TYPE_ID, (void *)&application_type_value);
163+
esp_err_t ret = esp_zb_cluster_update_attr(multistate_output_cluster, ESP_ZB_ZCL_ATTR_MULTI_OUTPUT_APPLICATION_TYPE_ID, (void *)&application_type_value);
164164
if (ret != ESP_OK) {
165165
log_e("Failed to set Multistate Output application type: 0x%x: %s", ret, esp_err_to_name(ret));
166166
return false;
@@ -200,7 +200,7 @@ bool ZigbeeMultistate::setMultistateInputDescription(const char *description) {
200200
zb_description[description_length + 1] = '\0';
201201

202202
// Update the description attribute
203-
esp_err_t ret = esp_zb_cluster_update_attr(multistate_input_cluster, ESP_ZB_ZCL_ATTR_MULTISTATE_INPUT_DESCRIPTION_ID, (void *)zb_description);
203+
esp_err_t ret = esp_zb_cluster_update_attr(multistate_input_cluster, ESP_ZB_ZCL_ATTR_MULTI_INPUT_DESCRIPTION_ID, (void *)zb_description);
204204
if (ret != ESP_OK) {
205205
log_e("Failed to set description: 0x%x: %s", ret, esp_err_to_name(ret));
206206
return false;
@@ -240,14 +240,62 @@ bool ZigbeeMultistate::setMultistateOutputDescription(const char *description) {
240240
zb_description[description_length + 1] = '\0';
241241

242242
// Update the description attribute
243-
esp_err_t ret = esp_zb_cluster_update_attr(multistate_output_cluster, ESP_ZB_ZCL_ATTR_MULTISTATE_OUTPUT_DESCRIPTION_ID, (void *)zb_description);
243+
esp_err_t ret = esp_zb_cluster_update_attr(multistate_output_cluster, ESP_ZB_ZCL_ATTR_MULTI_OUTPUT_DESCRIPTION_ID, (void *)zb_description);
244244
if (ret != ESP_OK) {
245245
log_e("Failed to set description: 0x%x: %s", ret, esp_err_to_name(ret));
246246
return false;
247247
}
248248
return true;
249249
}
250250

251+
bool ZigbeeMultistate::setMultistateInputStates(uint16_t number_of_states) {
252+
if (!(_multistate_clusters & MULTISTATE_INPUT)) {
253+
log_e("Multistate Input cluster not added");
254+
return false;
255+
}
256+
257+
esp_zb_attribute_list_t *multistate_input_cluster =
258+
esp_zb_cluster_list_get_cluster(_cluster_list, ESP_ZB_ZCL_CLUSTER_ID_MULTI_INPUT, ESP_ZB_ZCL_CLUSTER_SERVER_ROLE);
259+
if (multistate_input_cluster == nullptr) {
260+
log_e("Failed to get multistate input cluster");
261+
return false;
262+
}
263+
264+
esp_err_t ret = esp_zb_cluster_update_attr(multistate_input_cluster, ESP_ZB_ZCL_ATTR_MULTI_INPUT_NUMBER_OF_STATES_ID, (void *)&number_of_states);
265+
if (ret != ESP_OK) {
266+
log_e("Failed to set number of states: 0x%x: %s", ret, esp_err_to_name(ret));
267+
return false;
268+
}
269+
270+
_input_state_names_length = number_of_states;
271+
return true;
272+
}
273+
274+
bool ZigbeeMultistate::setMultistateOutputStates(uint16_t number_of_states) {
275+
if (!(_multistate_clusters & MULTISTATE_OUTPUT)) {
276+
log_e("Multistate Output cluster not added");
277+
return false;
278+
}
279+
280+
esp_zb_attribute_list_t *multistate_output_cluster =
281+
esp_zb_cluster_list_get_cluster(_cluster_list, ESP_ZB_ZCL_CLUSTER_ID_MULTI_OUTPUT, ESP_ZB_ZCL_CLUSTER_SERVER_ROLE);
282+
if (multistate_output_cluster == nullptr) {
283+
log_e("Failed to get multistate output cluster");
284+
return false;
285+
}
286+
287+
esp_err_t ret = esp_zb_cluster_update_attr(multistate_output_cluster, ESP_ZB_ZCL_ATTR_MULTI_OUTPUT_NUMBER_OF_STATES_ID, (void *)&number_of_states);
288+
if (ret != ESP_OK) {
289+
log_e("Failed to set number of states: 0x%x: %s", ret, esp_err_to_name(ret));
290+
return false;
291+
}
292+
293+
_output_state_names_length = number_of_states;
294+
return true;
295+
}
296+
297+
/* TODO: revisit this after arrays are supported
298+
251299
bool ZigbeeMultistate::setMultistateInputStates(const char * const states[], uint16_t states_length) {
252300
if (!(_multistate_clusters & MULTISTATE_INPUT)) {
253301
log_e("Multistate Input cluster not added");
@@ -261,12 +309,12 @@ bool ZigbeeMultistate::setMultistateInputStates(const char * const states[], uin
261309
return false;
262310
}
263311
264-
esp_err_t ret = esp_zb_cluster_update_attr(multistate_input_cluster, ESP_ZB_ZCL_ATTR_MULTISTATE_INPUT_STATE_TEXT_ID, (void *)states);
312+
esp_err_t ret = esp_zb_cluster_update_attr(multistate_input_cluster, ESP_ZB_ZCL_ATTR_MULTI_INPUT_STATE_TEXT_ID, (void *)states);
265313
if (ret != ESP_OK) {
266314
log_e("Failed to set states text: 0x%x: %s", ret, esp_err_to_name(ret));
267315
return false;
268316
}
269-
ret = esp_zb_cluster_update_attr(multistate_input_cluster, ESP_ZB_ZCL_ATTR_MULTISTATE_INPUT_NUMBER_OF_STATES_ID, (void *)&states_length);
317+
ret = esp_zb_cluster_update_attr(multistate_input_cluster, ESP_ZB_ZCL_ATTR_MULTI_INPUT_NUMBER_OF_STATES_ID, (void *)&states_length);
270318
if (ret != ESP_OK) {
271319
log_e("Failed to set number of states: 0x%x: %s", ret, esp_err_to_name(ret));
272320
return false;
@@ -291,12 +339,12 @@ bool ZigbeeMultistate::setMultistateOutputStates(const char * const states[], ui
291339
return false;
292340
}
293341
294-
esp_err_t ret = esp_zb_cluster_update_attr(multistate_output_cluster, ESP_ZB_ZCL_ATTR_MULTISTATE_OUTPUT_STATE_TEXT_ID, (void *)states);
342+
esp_err_t ret = esp_zb_cluster_update_attr(multistate_output_cluster, ESP_ZB_ZCL_ATTR_MULTI_OUTPUT_STATE_TEXT_ID, (void *)states);
295343
if (ret != ESP_OK) {
296344
log_e("Failed to set states text: 0x%x: %s", ret, esp_err_to_name(ret));
297345
return false;
298346
}
299-
ret = esp_zb_cluster_update_attr(multistate_output_cluster, ESP_ZB_ZCL_ATTR_MULTISTATE_OUTPUT_NUMBER_OF_STATES_ID, (void *)&states_length);
347+
ret = esp_zb_cluster_update_attr(multistate_output_cluster, ESP_ZB_ZCL_ATTR_MULTI_OUTPUT_NUMBER_OF_STATES_ID, (void *)&states_length);
300348
if (ret != ESP_OK) {
301349
log_e("Failed to set number of states: 0x%x: %s", ret, esp_err_to_name(ret));
302350
return false;
@@ -307,11 +355,12 @@ bool ZigbeeMultistate::setMultistateOutputStates(const char * const states[], ui
307355
_output_state_names_length = states_length;
308356
return true;
309357
}
358+
*/
310359

311360
//set attribute method -> method overridden in child class
312361
void ZigbeeMultistate::zbAttributeSet(const esp_zb_zcl_set_attr_value_message_t *message) {
313362
if (message->info.cluster == ESP_ZB_ZCL_CLUSTER_ID_MULTI_OUTPUT) {
314-
if (message->attribute.id == ESP_ZB_ZCL_ATTR_MULTISTATE_OUTPUT_PRESENT_VALUE_ID && message->attribute.data.type == ESP_ZB_ZCL_ATTR_TYPE_U16) {
363+
if (message->attribute.id == ESP_ZB_ZCL_ATTR_MULTI_OUTPUT_PRESENT_VALUE_ID && message->attribute.data.type == ESP_ZB_ZCL_ATTR_TYPE_U16) {
315364
_output_state = *(uint16_t *)message->attribute.data.value;
316365
multistateOutputChanged();
317366
} else {
@@ -339,7 +388,7 @@ bool ZigbeeMultistate::setMultistateInput(uint16_t state) {
339388
log_d("Setting multistate input to %d", state);
340389
esp_zb_lock_acquire(portMAX_DELAY);
341390
ret = esp_zb_zcl_set_attribute_val(
342-
_endpoint, ESP_ZB_ZCL_CLUSTER_ID_MULTI_INPUT, ESP_ZB_ZCL_CLUSTER_SERVER_ROLE, ESP_ZB_ZCL_ATTR_MULTISTATE_INPUT_PRESENT_VALUE_ID, &state, false
391+
_endpoint, ESP_ZB_ZCL_CLUSTER_ID_MULTI_INPUT, ESP_ZB_ZCL_CLUSTER_SERVER_ROLE, ESP_ZB_ZCL_ATTR_MULTI_INPUT_PRESENT_VALUE_ID, &state, false
343392
);
344393
esp_zb_lock_release();
345394
if (ret != ESP_ZB_ZCL_STATUS_SUCCESS) {
@@ -358,7 +407,7 @@ bool ZigbeeMultistate::setMultistateOutput(uint16_t state) {
358407
/* Update multistate output */
359408
esp_zb_lock_acquire(portMAX_DELAY);
360409
ret = esp_zb_zcl_set_attribute_val(
361-
_endpoint, ESP_ZB_ZCL_CLUSTER_ID_MULTI_OUTPUT, ESP_ZB_ZCL_CLUSTER_SERVER_ROLE, ESP_ZB_ZCL_ATTR_MULTISTATE_OUTPUT_PRESENT_VALUE_ID, &_output_state, false
410+
_endpoint, ESP_ZB_ZCL_CLUSTER_ID_MULTI_OUTPUT, ESP_ZB_ZCL_CLUSTER_SERVER_ROLE, ESP_ZB_ZCL_ATTR_MULTI_OUTPUT_PRESENT_VALUE_ID, &_output_state, false
362411
);
363412
esp_zb_lock_release();
364413

@@ -373,7 +422,7 @@ bool ZigbeeMultistate::reportMultistateInput() {
373422
/* Send report attributes command */
374423
esp_zb_zcl_report_attr_cmd_t report_attr_cmd;
375424
report_attr_cmd.address_mode = ESP_ZB_APS_ADDR_MODE_DST_ADDR_ENDP_NOT_PRESENT;
376-
report_attr_cmd.attributeID = ESP_ZB_ZCL_ATTR_MULTISTATE_INPUT_PRESENT_VALUE_ID;
425+
report_attr_cmd.attributeID = ESP_ZB_ZCL_ATTR_MULTI_INPUT_PRESENT_VALUE_ID;
377426
report_attr_cmd.direction = ESP_ZB_ZCL_CMD_DIRECTION_TO_CLI;
378427
report_attr_cmd.clusterID = ESP_ZB_ZCL_CLUSTER_ID_MULTI_INPUT;
379428
report_attr_cmd.zcl_basic_cmd.src_endpoint = _endpoint;
@@ -394,7 +443,7 @@ bool ZigbeeMultistate::reportMultistateOutput() {
394443
/* Send report attributes command */
395444
esp_zb_zcl_report_attr_cmd_t report_attr_cmd;
396445
report_attr_cmd.address_mode = ESP_ZB_APS_ADDR_MODE_DST_ADDR_ENDP_NOT_PRESENT;
397-
report_attr_cmd.attributeID = ESP_ZB_ZCL_ATTR_MULTISTATE_OUTPUT_PRESENT_VALUE_ID;
446+
report_attr_cmd.attributeID = ESP_ZB_ZCL_ATTR_MULTI_OUTPUT_PRESENT_VALUE_ID;
398447
report_attr_cmd.direction = ESP_ZB_ZCL_CMD_DIRECTION_TO_CLI;
399448
report_attr_cmd.clusterID = ESP_ZB_ZCL_CLUSTER_ID_MULTI_OUTPUT;
400449
report_attr_cmd.zcl_basic_cmd.src_endpoint = _endpoint;

libraries/Zigbee/src/ep/ZigbeeMultistate.h

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -88,12 +88,14 @@ class ZigbeeMultistate : public ZigbeeEP {
8888
// Set the application type and description for the multistate input
8989
bool setMultistateInputApplication(uint32_t application_type); // Check esp_zigbee_zcl_multistate_input.h for application type values
9090
bool setMultistateInputDescription(const char *description);
91-
bool setMultistateInputStates(const char * const states[], uint16_t states_length);
91+
bool setMultistateInputStates(uint16_t number_of_states);
92+
// bool setMultistateInputStates(const char * const states[], uint16_t states_length);
9293

9394
// Set the application type and description for the multistate output
9495
bool setMultistateOutputApplication(uint32_t application_type); // Check esp_zigbee_zcl_multistate_output.h for application type values
9596
bool setMultistateOutputDescription(const char *description);
96-
bool setMultistateOutputStates(const char * const states[], uint16_t states_length);
97+
bool setMultistateOutputStates(uint16_t number_of_states);
98+
// bool setMultistateOutputStates(const char * const states[], uint16_t states_length);
9799

98100
// Use to set a cb function to be called on multistate output change
99101
void onMultistateOutputChange(void (*callback)(uint16_t state)) {
@@ -113,18 +115,18 @@ class ZigbeeMultistate : public ZigbeeEP {
113115
}
114116

115117
// Get state names and length
116-
const char* const* getMultistateInputStateNames() {
117-
return _input_state_names;
118-
}
119118
uint16_t getMultistateInputStateNamesLength() {
120119
return _input_state_names_length;
121120
}
122-
const char* const* getMultistateOutputStateNames() {
123-
return _output_state_names;
124-
}
125121
uint16_t getMultistateOutputStateNamesLength() {
126122
return _output_state_names_length;
127123
}
124+
// const char* const* getMultistateInputStateNames() {
125+
// return _input_state_names;
126+
// }
127+
// const char* const* getMultistateOutputStateNames() {
128+
// return _output_state_names;
129+
// }
128130

129131
// Report Multistate Input/Output
130132
bool reportMultistateInput();
@@ -141,10 +143,11 @@ class ZigbeeMultistate : public ZigbeeEP {
141143
uint16_t _input_state;
142144

143145
// Local storage for state names
144-
const char* const* _input_state_names;
145146
uint16_t _input_state_names_length;
146-
const char* const* _output_state_names;
147147
uint16_t _output_state_names_length;
148+
// const char* const* _input_state_names;
149+
// const char* const* _output_state_names;
150+
148151
};
149152

150153
#endif // CONFIG_ZB_ENABLED

0 commit comments

Comments
 (0)