From b9862d193ef3e07594094177c3b716a952c4c6b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Proch=C3=A1zka?= <90197375+P-R-O-C-H-Y@users.noreply.github.com> Date: Mon, 1 Dec 2025 12:53:00 +0100 Subject: [PATCH 1/2] fix(zigbee): initialize callbacks in contructors --- libraries/Zigbee/src/ZigbeeEP.cpp | 1 + libraries/Zigbee/src/ep/ZigbeeAnalog.cpp | 1 + libraries/Zigbee/src/ep/ZigbeeBinary.cpp | 1 + libraries/Zigbee/src/ep/ZigbeeColorDimmableLight.cpp | 1 + libraries/Zigbee/src/ep/ZigbeeDimmableLight.cpp | 1 + libraries/Zigbee/src/ep/ZigbeeFanControl.cpp | 1 + libraries/Zigbee/src/ep/ZigbeeLight.cpp | 3 ++- libraries/Zigbee/src/ep/ZigbeePowerOutlet.cpp | 1 + libraries/Zigbee/src/ep/ZigbeeSwitch.cpp | 2 ++ libraries/Zigbee/src/ep/ZigbeeThermostat.cpp | 6 ++++++ libraries/Zigbee/src/ep/ZigbeeWindowCovering.cpp | 5 +++++ 11 files changed, 22 insertions(+), 1 deletion(-) diff --git a/libraries/Zigbee/src/ZigbeeEP.cpp b/libraries/Zigbee/src/ZigbeeEP.cpp index 48a083748f4..742de06835f 100644 --- a/libraries/Zigbee/src/ZigbeeEP.cpp +++ b/libraries/Zigbee/src/ZigbeeEP.cpp @@ -29,6 +29,7 @@ ZigbeeEP::ZigbeeEP(uint8_t endpoint) { _cluster_list = nullptr; _on_identify = nullptr; _on_ota_state_change = nullptr; + _on_default_response = nullptr; _read_model = NULL; _read_manufacturer = NULL; _time_status = 0; diff --git a/libraries/Zigbee/src/ep/ZigbeeAnalog.cpp b/libraries/Zigbee/src/ep/ZigbeeAnalog.cpp index cc0222fac42..6955f0e4b20 100644 --- a/libraries/Zigbee/src/ep/ZigbeeAnalog.cpp +++ b/libraries/Zigbee/src/ep/ZigbeeAnalog.cpp @@ -18,6 +18,7 @@ ZigbeeAnalog::ZigbeeAnalog(uint8_t endpoint) : ZigbeeEP(endpoint) { _device_id = ESP_ZB_HA_SIMPLE_SENSOR_DEVICE_ID; + _on_analog_output_change = nullptr; //Create basic analog sensor clusters without configuration _cluster_list = esp_zb_zcl_cluster_list_create(); diff --git a/libraries/Zigbee/src/ep/ZigbeeBinary.cpp b/libraries/Zigbee/src/ep/ZigbeeBinary.cpp index ff99b56091b..b46cbae0b00 100644 --- a/libraries/Zigbee/src/ep/ZigbeeBinary.cpp +++ b/libraries/Zigbee/src/ep/ZigbeeBinary.cpp @@ -17,6 +17,7 @@ ZigbeeBinary::ZigbeeBinary(uint8_t endpoint) : ZigbeeEP(endpoint) { _device_id = ESP_ZB_HA_SIMPLE_SENSOR_DEVICE_ID; + _on_binary_output_change = nullptr; //Create basic binary sensor clusters without configuration _cluster_list = esp_zb_zcl_cluster_list_create(); diff --git a/libraries/Zigbee/src/ep/ZigbeeColorDimmableLight.cpp b/libraries/Zigbee/src/ep/ZigbeeColorDimmableLight.cpp index 3d1b6a57d1b..42ce9552a62 100644 --- a/libraries/Zigbee/src/ep/ZigbeeColorDimmableLight.cpp +++ b/libraries/Zigbee/src/ep/ZigbeeColorDimmableLight.cpp @@ -18,6 +18,7 @@ ZigbeeColorDimmableLight::ZigbeeColorDimmableLight(uint8_t endpoint) : ZigbeeEP(endpoint) { _device_id = ESP_ZB_HA_COLOR_DIMMABLE_LIGHT_DEVICE_ID; + _on_light_change = nullptr; esp_zb_color_dimmable_light_cfg_t light_cfg = ZIGBEE_DEFAULT_COLOR_DIMMABLE_LIGHT_CONFIG(); _cluster_list = esp_zb_color_dimmable_light_clusters_create(&light_cfg); diff --git a/libraries/Zigbee/src/ep/ZigbeeDimmableLight.cpp b/libraries/Zigbee/src/ep/ZigbeeDimmableLight.cpp index 70e565e32c7..1318cbae082 100644 --- a/libraries/Zigbee/src/ep/ZigbeeDimmableLight.cpp +++ b/libraries/Zigbee/src/ep/ZigbeeDimmableLight.cpp @@ -19,6 +19,7 @@ ZigbeeDimmableLight::ZigbeeDimmableLight(uint8_t endpoint) : ZigbeeEP(endpoint) { _device_id = ESP_ZB_HA_DIMMABLE_LIGHT_DEVICE_ID; + _on_light_change = nullptr; zigbee_dimmable_light_cfg_t light_cfg = ZIGBEE_DEFAULT_DIMMABLE_LIGHT_CONFIG(); _cluster_list = zigbee_dimmable_light_clusters_create(&light_cfg); diff --git a/libraries/Zigbee/src/ep/ZigbeeFanControl.cpp b/libraries/Zigbee/src/ep/ZigbeeFanControl.cpp index 45724eb915c..2c9a1f77eca 100644 --- a/libraries/Zigbee/src/ep/ZigbeeFanControl.cpp +++ b/libraries/Zigbee/src/ep/ZigbeeFanControl.cpp @@ -17,6 +17,7 @@ ZigbeeFanControl::ZigbeeFanControl(uint8_t endpoint) : ZigbeeEP(endpoint) { _device_id = ESP_ZB_HA_THERMOSTAT_DEVICE_ID; //There is no FAN_CONTROL_DEVICE_ID in the Zigbee spec + _on_fan_mode_change = nullptr; //Create basic analog sensor clusters without configuration _cluster_list = esp_zb_zcl_cluster_list_create(); diff --git a/libraries/Zigbee/src/ep/ZigbeeLight.cpp b/libraries/Zigbee/src/ep/ZigbeeLight.cpp index 75cfacd8418..b15031a51b2 100644 --- a/libraries/Zigbee/src/ep/ZigbeeLight.cpp +++ b/libraries/Zigbee/src/ep/ZigbeeLight.cpp @@ -17,7 +17,8 @@ ZigbeeLight::ZigbeeLight(uint8_t endpoint) : ZigbeeEP(endpoint) { _device_id = ESP_ZB_HA_ON_OFF_LIGHT_DEVICE_ID; - + _on_light_change = nullptr; + esp_zb_on_off_light_cfg_t light_cfg = ESP_ZB_DEFAULT_ON_OFF_LIGHT_CONFIG(); _cluster_list = esp_zb_on_off_light_clusters_create(&light_cfg); // use esp_zb_zcl_cluster_list_create() instead of esp_zb_on_off_light_clusters_create() _ep_config = {.endpoint = endpoint, .app_profile_id = ESP_ZB_AF_HA_PROFILE_ID, .app_device_id = ESP_ZB_HA_ON_OFF_LIGHT_DEVICE_ID, .app_device_version = 0}; diff --git a/libraries/Zigbee/src/ep/ZigbeePowerOutlet.cpp b/libraries/Zigbee/src/ep/ZigbeePowerOutlet.cpp index 9009c1dd1a3..250bd657315 100644 --- a/libraries/Zigbee/src/ep/ZigbeePowerOutlet.cpp +++ b/libraries/Zigbee/src/ep/ZigbeePowerOutlet.cpp @@ -17,6 +17,7 @@ ZigbeePowerOutlet::ZigbeePowerOutlet(uint8_t endpoint) : ZigbeeEP(endpoint) { _device_id = ESP_ZB_HA_MAINS_POWER_OUTLET_DEVICE_ID; + _on_state_change = nullptr; esp_zb_mains_power_outlet_cfg_t outlet_cfg = ESP_ZB_DEFAULT_MAINS_POWER_OUTLET_CONFIG(); _cluster_list = esp_zb_mains_power_outlet_clusters_create(&outlet_cfg); diff --git a/libraries/Zigbee/src/ep/ZigbeeSwitch.cpp b/libraries/Zigbee/src/ep/ZigbeeSwitch.cpp index a81c63aed06..2660dd7b3d6 100644 --- a/libraries/Zigbee/src/ep/ZigbeeSwitch.cpp +++ b/libraries/Zigbee/src/ep/ZigbeeSwitch.cpp @@ -22,6 +22,8 @@ ZigbeeSwitch::ZigbeeSwitch(uint8_t endpoint) : ZigbeeEP(endpoint) { _device_id = ESP_ZB_HA_ON_OFF_SWITCH_DEVICE_ID; _instance = this; // Set the static pointer to this instance _device = nullptr; + _on_light_state_change = nullptr; + _on_light_state_change_with_source = nullptr; esp_zb_on_off_switch_cfg_t switch_cfg = ESP_ZB_DEFAULT_ON_OFF_SWITCH_CONFIG(); _cluster_list = esp_zb_on_off_switch_clusters_create(&switch_cfg); diff --git a/libraries/Zigbee/src/ep/ZigbeeThermostat.cpp b/libraries/Zigbee/src/ep/ZigbeeThermostat.cpp index 9fb26be28e4..bf69ce85717 100644 --- a/libraries/Zigbee/src/ep/ZigbeeThermostat.cpp +++ b/libraries/Zigbee/src/ep/ZigbeeThermostat.cpp @@ -26,6 +26,12 @@ ZigbeeThermostat::ZigbeeThermostat(uint8_t endpoint) : ZigbeeEP(endpoint) { _device_id = ESP_ZB_HA_THERMOSTAT_DEVICE_ID; _instance = this; // Set the static pointer to this instance _device = nullptr; // Initialize sensor pointer to null + _on_temp_receive = nullptr; + _on_temp_receive_with_source = nullptr; + _on_temp_config_receive = nullptr; + _on_humidity_receive = nullptr; + _on_humidity_receive_with_source = nullptr; + _on_humidity_config_receive = nullptr; //use custom config to avoid narrowing error -> must be fixed in zigbee-sdk esp_zb_thermostat_cfg_t thermostat_cfg = ZB_DEFAULT_THERMOSTAT_CONFIG(); diff --git a/libraries/Zigbee/src/ep/ZigbeeWindowCovering.cpp b/libraries/Zigbee/src/ep/ZigbeeWindowCovering.cpp index a51db92ccc9..f4e365753e5 100644 --- a/libraries/Zigbee/src/ep/ZigbeeWindowCovering.cpp +++ b/libraries/Zigbee/src/ep/ZigbeeWindowCovering.cpp @@ -62,6 +62,11 @@ esp_zb_cluster_list_t *ZigbeeWindowCovering::zigbee_window_covering_clusters_cre ZigbeeWindowCovering::ZigbeeWindowCovering(uint8_t endpoint) : ZigbeeEP(endpoint) { _device_id = ESP_ZB_HA_WINDOW_COVERING_DEVICE_ID; + _on_open = nullptr; + _on_close = nullptr; + _on_go_to_lift_percentage = nullptr; + _on_go_to_tilt_percentage = nullptr; + _on_stop = nullptr; // set default values for window covering attributes _current_lift_percentage = ESP_ZB_ZCL_WINDOW_COVERING_CURRENT_POSITION_LIFT_PERCENTAGE_DEFAULT_VALUE; From 9459367cb5b981797d2b0291a31b41e041c22f55 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci-lite[bot]" <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Date: Mon, 1 Dec 2025 12:28:12 +0000 Subject: [PATCH 2/2] ci(pre-commit): Apply automatic fixes --- libraries/Zigbee/src/ep/ZigbeeLight.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/Zigbee/src/ep/ZigbeeLight.cpp b/libraries/Zigbee/src/ep/ZigbeeLight.cpp index b15031a51b2..579498c4aa3 100644 --- a/libraries/Zigbee/src/ep/ZigbeeLight.cpp +++ b/libraries/Zigbee/src/ep/ZigbeeLight.cpp @@ -18,7 +18,7 @@ ZigbeeLight::ZigbeeLight(uint8_t endpoint) : ZigbeeEP(endpoint) { _device_id = ESP_ZB_HA_ON_OFF_LIGHT_DEVICE_ID; _on_light_change = nullptr; - + esp_zb_on_off_light_cfg_t light_cfg = ESP_ZB_DEFAULT_ON_OFF_LIGHT_CONFIG(); _cluster_list = esp_zb_on_off_light_clusters_create(&light_cfg); // use esp_zb_zcl_cluster_list_create() instead of esp_zb_on_off_light_clusters_create() _ep_config = {.endpoint = endpoint, .app_profile_id = ESP_ZB_AF_HA_PROFILE_ID, .app_device_id = ESP_ZB_HA_ON_OFF_LIGHT_DEVICE_ID, .app_device_version = 0};