From c715b31e51518925de0e90e9626e068d6bd34d87 Mon Sep 17 00:00:00 2001 From: Tamas Jozsi <124884281+silabs-bozont@users.noreply.github.com> Date: Mon, 19 Oct 2026 12:33:58 +0200 Subject: [PATCH 1/3] Zigbee: add new temp sensor min/max setter APIs, update readme --- libraries/Zigbee/readme.md | 19 +++++++----- .../Zigbee/src/ZigbeeTemperatureSensor.cpp | 30 ++++++++++++++++++- .../Zigbee/src/ZigbeeTemperatureSensor.h | 2 ++ 3 files changed, 42 insertions(+), 9 deletions(-) diff --git a/libraries/Zigbee/readme.md b/libraries/Zigbee/readme.md index 2d69adc8..c5f7395f 100644 --- a/libraries/Zigbee/readme.md +++ b/libraries/Zigbee/readme.md @@ -756,15 +756,18 @@ API: bool begin(); void end(); -void set_measured_value(int16_t value); +void set_measured_value_raw(int16_t value); void set_measured_value_celsius(float celsius); -bool set_reporting_interval(uint16_t min_interval_s, uint16_t max_interval_s); +int16_t get_measured_value_raw(); +float get_measured_value_celsius(); +void set_min_value_raw(int16_t value); +void set_max_value_raw(int16_t value); +void set_min_value_celsius(float celsius); +void set_max_value_celsius(float celsius); + bool send_attribute_report(); bool get_attribute_report_sent(); -int16_t get_measured_value(); -float get_measured_value_celsius(); -void set_min_value(int16_t value); -void set_max_value(int16_t value); +bool set_reporting_interval(uint16_t min_interval_s, uint16_t max_interval_s); operator float(); void operator=(float celsius); @@ -780,8 +783,8 @@ void setup() { Zigbee.begin(); temperature.begin(); - temperature.set_min_value(-4000); // -40.00 C - temperature.set_max_value(12500); // 125.00 C + temperature.set_min_value_celsius(-40.0f); // -40.00 C + temperature.set_max_value_celsius(125.0f); // 125.00 C } void loop() diff --git a/libraries/Zigbee/src/ZigbeeTemperatureSensor.cpp b/libraries/Zigbee/src/ZigbeeTemperatureSensor.cpp index b89368e4..33df376e 100644 --- a/libraries/Zigbee/src/ZigbeeTemperatureSensor.cpp +++ b/libraries/Zigbee/src/ZigbeeTemperatureSensor.cpp @@ -111,7 +111,7 @@ void ZigbeeTemperatureSensor::set_measured_value_celsius(float celsius) } else if (scaled > 32767.0f) { scaled = 32767.0f; } - set_measured_value_raw(static_cast(scaled)); + this->set_measured_value_raw(static_cast(scaled)); } int16_t ZigbeeTemperatureSensor::get_measured_value_raw() @@ -141,6 +141,34 @@ void ZigbeeTemperatureSensor::set_max_value_raw(int16_t value) } } +void ZigbeeTemperatureSensor::set_min_value_celsius(float celsius) +{ + if (!isfinite(celsius)) { + return; + } + float scaled = celsius * 100.0f; + if (scaled < -27315.0f) { + scaled = -27315.0f; + } else if (scaled > 32767.0f) { + scaled = 32767.0f; + } + this->set_min_value_raw(static_cast(scaled)); +} + +void ZigbeeTemperatureSensor::set_max_value_celsius(float celsius) +{ + if (!isfinite(celsius)) { + return; + } + float scaled = celsius * 100.0f; + if (scaled < -27315.0f) { + scaled = -27315.0f; + } else if (scaled > 32767.0f) { + scaled = 32767.0f; + } + this->set_max_value_raw(static_cast(scaled)); +} + bool ZigbeeTemperatureSensor::send_attribute_report() { if (!this->sensor_device) { diff --git a/libraries/Zigbee/src/ZigbeeTemperatureSensor.h b/libraries/Zigbee/src/ZigbeeTemperatureSensor.h index b262760a..e085c241 100644 --- a/libraries/Zigbee/src/ZigbeeTemperatureSensor.h +++ b/libraries/Zigbee/src/ZigbeeTemperatureSensor.h @@ -43,6 +43,8 @@ class ZigbeeTemperatureSensor : public ArduinoZigbeeAppliance { float get_measured_value_celsius(); void set_min_value_raw(int16_t value); void set_max_value_raw(int16_t value); + void set_min_value_celsius(float celsius); + void set_max_value_celsius(float celsius); bool send_attribute_report(); bool get_attribute_report_sent(); From 44fbc81fde79ab668d6930884d67adb5ef8c9ba4 Mon Sep 17 00:00:00 2001 From: Tamas Jozsi <124884281+silabs-bozont@users.noreply.github.com> Date: Mon, 19 Oct 2026 12:46:16 +0200 Subject: [PATCH 2/3] Zigbee: add defaults for vendor/product name --- libraries/Zigbee/src/Zigbee.cpp | 11 +++++++++++ libraries/Zigbee/src/Zigbee.h | 2 ++ 2 files changed, 13 insertions(+) diff --git a/libraries/Zigbee/src/Zigbee.cpp b/libraries/Zigbee/src/Zigbee.cpp index 5929d491..38aafdd8 100644 --- a/libraries/Zigbee/src/Zigbee.cpp +++ b/libraries/Zigbee/src/Zigbee.cpp @@ -373,6 +373,8 @@ ZigbeeClass::ZigbeeClass() : started(false), endpoint_allocated(), time_client_endpoint_allocated(false), + vendor_name_set(false), + product_name_set(false), device_type(ZIGBEE_DEVICE_TYPE_ROUTER), power_source(ZIGBEE_POWER_SOURCE_TYPE_MAINS) { @@ -392,6 +394,7 @@ void ZigbeeClass::setVendorName(const char* name) ZCL_MANUFACTURER_NAME_ATTRIBUTE_ID, zcl_string, ZCL_CHAR_STRING_ATTRIBUTE_TYPE); + this->vendor_name_set = true; } void ZigbeeClass::setProductName(const char* name) @@ -408,6 +411,7 @@ void ZigbeeClass::setProductName(const char* name) ZCL_MODEL_IDENTIFIER_ATTRIBUTE_ID, zcl_string, ZCL_CHAR_STRING_ATTRIBUTE_TYPE); + this->product_name_set = true; } void ZigbeeClass::setFirmwareVersion(const char* version) @@ -470,6 +474,13 @@ void ZigbeeClass::begin() if (sl_zigbee_af_network_state() == SL_ZIGBEE_NO_NETWORK) { sl_zigbee_af_network_steering_start(); } + + if (!this->vendor_name_set) { + this->setVendorName("Silicon Labs"); + } + if (!this->product_name_set) { + this->setProductName("Zigbee device"); + } } uint32_t ZigbeeClass::channelToMask(uint8_t channel) diff --git a/libraries/Zigbee/src/Zigbee.h b/libraries/Zigbee/src/Zigbee.h index 0f585a12..a464ac95 100644 --- a/libraries/Zigbee/src/Zigbee.h +++ b/libraries/Zigbee/src/Zigbee.h @@ -120,6 +120,8 @@ class ZigbeeClass { bool started; bool endpoint_allocated[kApplicationEndpointCount]; bool time_client_endpoint_allocated; + bool vendor_name_set; + bool product_name_set; ZigbeeDeviceType device_type; ZigbeePowerSourceType power_source; }; From 9596ea2c8cb0e1455e3f544eab8a5622c8cd7357 Mon Sep 17 00:00:00 2001 From: Tamas Jozsi <124884281+silabs-bozont@users.noreply.github.com> Date: Mon, 19 Oct 2026 12:56:35 +0200 Subject: [PATCH 3/3] workflows: automatically remove the Zigbee CI label --- .github/workflows/pr_build_label_cleanup.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pr_build_label_cleanup.yml b/.github/workflows/pr_build_label_cleanup.yml index 1f005763..1ba1c040 100644 --- a/.github/workflows/pr_build_label_cleanup.yml +++ b/.github/workflows/pr_build_label_cleanup.yml @@ -14,6 +14,7 @@ jobs: github.event.label.name == 'Run CI Quick' || github.event.label.name == 'Run CI Common' || github.event.label.name == 'Run CI Matter' || + github.event.label.name == 'Run CI Zigbee' || github.event.label.name == 'Run CI GitHub' || github.event.label.name == 'Run CI Full' runs-on: ubuntu-latest @@ -23,7 +24,7 @@ jobs: uses: actions/github-script@v7 with: script: | - for (const name of ['Run CI Quick', 'Run CI Common', 'Run CI Matter', 'Run CI GitHub', 'Run CI Full']) { + for (const name of ['Run CI Quick', 'Run CI Common', 'Run CI Matter', 'Run CI Zigbee', 'Run CI GitHub', 'Run CI Full']) { try { await github.rest.issues.removeLabel({ owner: context.repo.owner,