Skip to content

Commit 30b31af

Browse files
committed
Merge branch 'component/missing_bits' into 'main'
components/esp_matter: Add the missing bits from pressure measurement cluster, solar power and battery storage device type. See merge request app-frameworks/esp-matter!1207
2 parents e673b94 + 2bea5e6 commit 30b31af

File tree

4 files changed

+57
-1
lines changed

4 files changed

+57
-1
lines changed

components/esp_matter/data_model/esp_matter_attribute.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -847,6 +847,7 @@ attribute_t *create_supported_calendar_types(cluster_t *cluster, uint8_t *value,
847847
} /* attribute */
848848
} /* time_format_localization */
849849

850+
// Note: Attribute name for the below cluster deviates from Matter spec
850851
namespace illuminance_measurement {
851852
namespace attribute {
852853
attribute_t *create_illuminance_measured_value(cluster_t *cluster, nullable<uint16_t> value, nullable<uint16_t> min, nullable<uint16_t> max);
@@ -857,6 +858,7 @@ attribute_t *create_illuminance_light_sensor_type(cluster_t *cluster, nullable<u
857858
} /* attribute */
858859
} /* illuminance_measurement */
859860

861+
// Note: Attribute name for the below cluster deviates from Matter spec
860862
namespace pressure_measurement {
861863
namespace attribute {
862864
attribute_t *create_pressure_measured_value(cluster_t *cluster, nullable<int16_t> value);
@@ -871,6 +873,7 @@ attribute_t *create_pressure_scale(cluster_t *cluster, int8_t value);
871873
} /* attribute */
872874
} /* pressure_measurement */
873875

876+
// Note: Attribute name for the below cluster deviates from Matter spec
874877
namespace flow_measurement {
875878
namespace attribute {
876879
attribute_t *create_flow_measured_value(cluster_t *cluster, nullable<uint16_t> value);

components/esp_matter/data_model/esp_matter_endpoint.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1497,6 +1497,7 @@ esp_err_t add(endpoint_t *endpoint, config_t *config)
14971497
esp_err_t err = add_device_type(endpoint, get_device_type_id(), get_device_type_version());
14981498
VerifyOrReturnError(err == ESP_OK, err);
14991499

1500+
config->power_topology.feature_flags |= power_topology::feature::node_topology::get_id();
15001501
power_topology::create(endpoint, &(config->power_topology), CLUSTER_FLAG_SERVER);
15011502

15021503
electrical_power_measurement::create(endpoint, &(config->electrical_power_measurement), CLUSTER_FLAG_SERVER);
@@ -1894,6 +1895,8 @@ esp_err_t add(endpoint_t *endpoint, config_t *config)
18941895
config->power_source_device.power_source.feature_flags = power_source::feature::wired::get_id();
18951896
power_source_device::add(endpoint, &config->power_source_device);
18961897

1898+
config->electrical_energy_measurement.feature_flags = electrical_energy_measurement::feature::exported_energy::get_id() | electrical_energy_measurement::feature::cumulative_energy::get_id();
1899+
config->electrical_sensor.electrical_power_measurement.feature_flags |= electrical_power_measurement::feature::alternating_current::get_id();
18971900
electrical_sensor::add(endpoint, &config->electrical_sensor);
18981901
electrical_energy_measurement::create(endpoint, &(config->electrical_energy_measurement), CLUSTER_FLAG_SERVER);
18991902

@@ -1945,11 +1948,12 @@ esp_err_t add(endpoint_t *endpoint, config_t *config)
19451948
power_source::attribute::create_bat_charging_current(power_source_cluster, config->bat_charging_current, 0x00, 0xFFFF);
19461949
power_source::attribute::create_active_bat_charge_faults(power_source_cluster, NULL, 0, 0);
19471950

1951+
config->electrical_energy_measurement.feature_flags = electrical_energy_measurement::feature::exported_energy::get_id() | electrical_energy_measurement::feature::cumulative_energy::get_id();
1952+
config->electrical_sensor.electrical_power_measurement.feature_flags = electrical_power_measurement::feature::alternating_current::get_id();
19481953
electrical_sensor::add(endpoint, &config->electrical_sensor);
19491954
electrical_energy_measurement::create(endpoint, &(config->electrical_energy_measurement), CLUSTER_FLAG_SERVER);
19501955

19511956
cluster_t *elec_power_measurement_cluster = cluster::get(endpoint, ElectricalPowerMeasurement::Id);
1952-
19531957
electrical_power_measurement::attribute::create_voltage(elec_power_measurement_cluster, config->voltage);
19541958
electrical_power_measurement::attribute::create_active_current(elec_power_measurement_cluster, config->active_current);
19551959

components/esp_matter/data_model/esp_matter_feature.cpp

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1877,6 +1877,35 @@ esp_err_t add(cluster_t *cluster, config_t *config)
18771877
} /* feature */
18781878
} /* mode_select */
18791879

1880+
1881+
namespace pressure_measurement {
1882+
namespace feature {
1883+
1884+
namespace extended {
1885+
1886+
uint32_t get_id()
1887+
{
1888+
return (uint32_t)PressureMeasurement::Feature::kExtended;
1889+
}
1890+
1891+
esp_err_t add(cluster_t *cluster, config_t *config)
1892+
{
1893+
VerifyOrReturnError(cluster, ESP_ERR_INVALID_ARG, ESP_LOGE(TAG, "Cluster cannot be NULL"));
1894+
update_feature_map(cluster, get_id());
1895+
1896+
attribute::create_pressure_scaled_value(cluster, config->pressure_scaled_value);
1897+
attribute::create_pressure_min_scaled_value(cluster, config->pressure_min_scaled_value);
1898+
attribute::create_pressure_max_scaled_value(cluster, config->pressure_max_scaled_value);
1899+
attribute::create_pressure_scale(cluster, config->pressure_scale);
1900+
1901+
return ESP_OK;
1902+
}
1903+
1904+
} /* extended */
1905+
1906+
} /* feature */
1907+
} /* pressure_measurement */
1908+
18801909
namespace software_diagnostics {
18811910
namespace feature {
18821911

components/esp_matter/data_model/esp_matter_feature.h

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1647,6 +1647,26 @@ esp_err_t add(cluster_t *cluster, config_t *config);
16471647
} /* feature */
16481648
} /* energy_preference */
16491649

1650+
namespace pressure_measurement {
1651+
namespace feature {
1652+
1653+
namespace extended {
1654+
1655+
typedef struct config {
1656+
nullable<int16_t> pressure_scaled_value;
1657+
nullable<int16_t> pressure_min_scaled_value;
1658+
nullable<int16_t> pressure_max_scaled_value;
1659+
uint8_t pressure_scale;
1660+
config() : pressure_scaled_value(), pressure_min_scaled_value(), pressure_max_scaled_value(), pressure_scale(0) {}
1661+
} config_t;
1662+
1663+
uint32_t get_id();
1664+
esp_err_t add(cluster_t *cluster, config_t *config);
1665+
} /* extended */
1666+
1667+
} /* feature */
1668+
} /* pressure_measurement */
1669+
16501670
namespace occupancy_sensing {
16511671
namespace feature {
16521672

0 commit comments

Comments
 (0)