Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .github/workflows/pr_build_label_cleanup.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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,
Expand Down
19 changes: 11 additions & 8 deletions libraries/Zigbee/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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()
Expand Down
11 changes: 11 additions & 0 deletions libraries/Zigbee/src/Zigbee.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand All @@ -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)
Expand All @@ -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)
Expand Down Expand Up @@ -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)
Expand Down
2 changes: 2 additions & 0 deletions libraries/Zigbee/src/Zigbee.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
};
Expand Down
30 changes: 29 additions & 1 deletion libraries/Zigbee/src/ZigbeeTemperatureSensor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<int16_t>(scaled));
this->set_measured_value_raw(static_cast<int16_t>(scaled));
}

int16_t ZigbeeTemperatureSensor::get_measured_value_raw()
Expand Down Expand Up @@ -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<int16_t>(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<int16_t>(scaled));
}

bool ZigbeeTemperatureSensor::send_attribute_report()
{
if (!this->sensor_device) {
Expand Down
2 changes: 2 additions & 0 deletions libraries/Zigbee/src/ZigbeeTemperatureSensor.h
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
Loading