mirror of
https://github.com/espressif/esp-matter.git
synced 2026-04-27 19:13:13 +00:00
Merge branch 'cluster/energy_preference' into 'main'
components/esp-matter: Add Energy Preference Cluster See merge request app-frameworks/esp-matter!938
This commit is contained in:
@@ -4811,5 +4811,40 @@ attribute_t *create_boost_state(cluster_t *cluster, uint8_t value)
|
||||
} /* attribute */
|
||||
} /* water_heater_management */
|
||||
|
||||
namespace energy_preference {
|
||||
namespace attribute {
|
||||
attribute_t *create_energy_balances(cluster_t *cluster, uint8_t *value, uint16_t length, uint16_t count)
|
||||
{
|
||||
return esp_matter::attribute::create(cluster, EnergyPreference::Attributes::EnergyBalances::Id, ATTRIBUTE_FLAG_NONE,
|
||||
esp_matter_array(value, length, count));
|
||||
}
|
||||
|
||||
attribute_t *create_current_energy_balance(cluster_t *cluster, uint8_t value)
|
||||
{
|
||||
return esp_matter::attribute::create(cluster, EnergyPreference::Attributes::CurrentEnergyBalance::Id,
|
||||
ATTRIBUTE_FLAG_NONVOLATILE | ATTRIBUTE_FLAG_WRITABLE, esp_matter_uint8(value));
|
||||
}
|
||||
|
||||
attribute_t *create_energy_priorities(cluster_t *cluster, uint8_t *value, uint16_t length, uint16_t count)
|
||||
{
|
||||
return esp_matter::attribute::create(cluster, EnergyPreference::Attributes::EnergyPriorities::Id, ATTRIBUTE_FLAG_NONE,
|
||||
esp_matter_array(value, length, count));
|
||||
}
|
||||
|
||||
attribute_t *create_low_power_mode_sensitivities(cluster_t *cluster, uint8_t *value, uint16_t length, uint16_t count)
|
||||
{
|
||||
return esp_matter::attribute::create(cluster, EnergyPreference::Attributes::LowPowerModeSensitivities::Id, ATTRIBUTE_FLAG_NONE,
|
||||
esp_matter_array(value, length, count));
|
||||
}
|
||||
|
||||
attribute_t *create_current_low_power_mode_sensitivity(cluster_t *cluster, uint8_t value)
|
||||
{
|
||||
return esp_matter::attribute::create(cluster, EnergyPreference::Attributes::CurrentLowPowerModeSensitivity::Id,
|
||||
ATTRIBUTE_FLAG_NONVOLATILE | ATTRIBUTE_FLAG_WRITABLE, esp_matter_uint8(value));
|
||||
}
|
||||
|
||||
} /* attribute */
|
||||
} /* energy_preference */
|
||||
|
||||
} /* cluster */
|
||||
} /* esp_matter */
|
||||
|
||||
@@ -1171,5 +1171,15 @@ attribute_t *create_boost_state(cluster_t *cluster, uint8_t value);
|
||||
} /* attribute */
|
||||
} /* water_heater_management */
|
||||
|
||||
namespace energy_preference {
|
||||
namespace attribute {
|
||||
attribute_t *create_energy_balances(cluster_t *cluster, uint8_t *value, uint16_t length, uint16_t count);
|
||||
attribute_t *create_current_energy_balance(cluster_t *cluster, uint8_t value);
|
||||
attribute_t *create_energy_priorities(cluster_t *cluster, uint8_t *value, uint16_t length, uint16_t count);
|
||||
attribute_t *create_low_power_mode_sensitivities(cluster_t *cluster, uint8_t *value, uint16_t length, uint16_t count);
|
||||
attribute_t *create_current_low_power_mode_sensitivity(cluster_t *cluster, uint8_t value);
|
||||
} /* attribute */
|
||||
} /* energy_preference */
|
||||
|
||||
} /* cluster */
|
||||
} /* esp_matter */
|
||||
|
||||
@@ -3651,6 +3651,49 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
|
||||
}
|
||||
} /* water_heater_mode */
|
||||
|
||||
namespace energy_preference {
|
||||
const function_generic_t *function_list = NULL;
|
||||
const int function_flags = CLUSTER_FLAG_NONE;
|
||||
|
||||
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_t features)
|
||||
{
|
||||
cluster_t *cluster = cluster::create(endpoint, EnergyPreference::Id, flags);
|
||||
if (!cluster) {
|
||||
ESP_LOGE(TAG, "Could not create cluster");
|
||||
return NULL;
|
||||
}
|
||||
if (flags & CLUSTER_FLAG_SERVER) {
|
||||
if (config -> delegate != nullptr) {
|
||||
static const auto delegate_init_cb = EnergyPreferenceDelegateInitCB;
|
||||
set_delegate_and_init_callback(cluster, delegate_init_cb, config->delegate);
|
||||
}
|
||||
static const auto plugin_server_init_cb = CALL_ONCE(MatterEnergyPreferencePluginServerInitCallback);
|
||||
set_plugin_server_init_callback(cluster, plugin_server_init_cb);
|
||||
add_function_list(cluster, function_list, function_flags);
|
||||
|
||||
/* Attributes managed internally */
|
||||
global::attribute::create_feature_map(cluster, 0);
|
||||
|
||||
/** Attributes not managed internally **/
|
||||
global::attribute::create_cluster_revision(cluster, cluster_revision);
|
||||
}
|
||||
|
||||
if (flags & CLUSTER_FLAG_CLIENT) {
|
||||
create_default_binding_cluster(endpoint);
|
||||
}
|
||||
|
||||
/* Features */
|
||||
if (features & feature::energy_balance::get_id()) {
|
||||
feature::energy_balance::add(cluster, &(config->energy_balance));
|
||||
}
|
||||
if (features & feature::low_power_mode_sensitivity::get_id()) {
|
||||
feature::low_power_mode_sensitivity::add(cluster, &(config->low_power_mode_sensitivity));
|
||||
}
|
||||
|
||||
return cluster;
|
||||
}
|
||||
} /* energy_preference */
|
||||
|
||||
// namespace binary_input_basic {
|
||||
// // ToDo
|
||||
// } /* binary_input_basic */
|
||||
|
||||
@@ -930,5 +930,16 @@ typedef struct config {
|
||||
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
|
||||
} /* water_heater_mode */
|
||||
|
||||
namespace energy_preference {
|
||||
typedef struct config {
|
||||
feature::energy_balance::config_t energy_balance;
|
||||
feature::low_power_mode_sensitivity::config_t low_power_mode_sensitivity;
|
||||
void *delegate;
|
||||
config() : delegate(nullptr) {}
|
||||
} config_t;
|
||||
|
||||
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_t features);
|
||||
} /* energy_preference */
|
||||
|
||||
} /* cluster */
|
||||
} /* esp_matter */
|
||||
|
||||
@@ -39,6 +39,7 @@
|
||||
#include <app/clusters/mode-select-server//supported-modes-manager.h>
|
||||
#include <app/clusters/thread-border-router-management-server/thread-border-router-management-server.h>
|
||||
#include <app/clusters/water-heater-management-server/water-heater-management-server.h>
|
||||
#include <app/clusters/energy-preference-server/energy-preference-server.h>
|
||||
|
||||
using namespace chip::app::Clusters;
|
||||
namespace esp_matter {
|
||||
@@ -399,6 +400,16 @@ void WaterHeaterManagementDelegateInitCB(void *delegate, uint16_t endpoint_id)
|
||||
wHtrInstance->Init();
|
||||
}
|
||||
|
||||
void EnergyPreferenceDelegateInitCB(void *delegate, uint16_t endpoint_id)
|
||||
{
|
||||
if(delegate == nullptr)
|
||||
{
|
||||
return;
|
||||
}
|
||||
EnergyPreference::Delegate *energy_preference_delegate = static_cast<EnergyPreference::Delegate*>(delegate);
|
||||
EnergyPreference::SetDelegate(energy_preference_delegate);
|
||||
}
|
||||
|
||||
} // namespace delegate_cb
|
||||
|
||||
} // namespace cluster
|
||||
|
||||
@@ -49,6 +49,7 @@ void ModeSelectDelegateInitCB(void *delegate, uint16_t endpoint_id);
|
||||
void ThreadBorderRouterManagementDelegateInitCB(void *delegate, uint16_t endpoint_id);
|
||||
void ServiceAreaDelegateInitCB(void *delegate, uint16_t endpoint_id);
|
||||
void WaterHeaterManagementDelegateInitCB(void *delegate, uint16_t endpoint_id);
|
||||
void EnergyPreferenceDelegateInitCB(void *delegate, uint16_t endpoint_id);
|
||||
} // namespace delegate_cb
|
||||
|
||||
} // namespace cluster
|
||||
|
||||
@@ -4902,5 +4902,56 @@ esp_err_t add(cluster_t *cluster, config_t *config)
|
||||
} /* feature */
|
||||
} /* water_heater_management */
|
||||
|
||||
namespace energy_preference {
|
||||
namespace feature {
|
||||
|
||||
namespace energy_balance {
|
||||
|
||||
uint32_t get_id()
|
||||
{
|
||||
return (uint32_t)EnergyPreference::Feature::kEnergyBalance;
|
||||
}
|
||||
|
||||
esp_err_t add(cluster_t *cluster, config_t *config)
|
||||
{
|
||||
if (!cluster) {
|
||||
ESP_LOGE(TAG, "Cluster cannot be NULL");
|
||||
return ESP_ERR_INVALID_ARG;
|
||||
}
|
||||
update_feature_map(cluster, get_id());
|
||||
|
||||
attribute::create_energy_balances(cluster, NULL, 0, 0);
|
||||
attribute::create_current_energy_balance(cluster, config->current_energy_balance);
|
||||
attribute::create_energy_priorities(cluster, NULL, 0, 0);
|
||||
|
||||
return ESP_OK;
|
||||
}
|
||||
} /* energy_balance */
|
||||
|
||||
namespace low_power_mode_sensitivity {
|
||||
|
||||
uint32_t get_id()
|
||||
{
|
||||
return (uint32_t)EnergyPreference::Feature::kLowPowerModeSensitivity;
|
||||
}
|
||||
|
||||
esp_err_t add(cluster_t *cluster, config_t *config)
|
||||
{
|
||||
if (!cluster) {
|
||||
ESP_LOGE(TAG, "Cluster cannot be NULL");
|
||||
return ESP_ERR_INVALID_ARG;
|
||||
}
|
||||
update_feature_map(cluster, get_id());
|
||||
|
||||
attribute::create_low_power_mode_sensitivities(cluster, NULL, 0, 0);
|
||||
attribute::create_current_low_power_mode_sensitivity(cluster, config->current_low_power_mode_sensitivity);
|
||||
|
||||
return ESP_OK;
|
||||
}
|
||||
} /* low_power_mode_sensitivity */
|
||||
|
||||
} /* feature */
|
||||
} /* energy_preference */
|
||||
|
||||
} /* cluster */
|
||||
} /* esp_matter */
|
||||
|
||||
@@ -2147,11 +2147,35 @@ typedef struct config {
|
||||
|
||||
uint32_t get_id();
|
||||
esp_err_t add(cluster_t *cluster, config_t *config);
|
||||
|
||||
} /* tank_percent */
|
||||
|
||||
} /* feature */
|
||||
} /* water_heater_management */
|
||||
|
||||
namespace energy_preference {
|
||||
namespace feature {
|
||||
|
||||
namespace energy_balance {
|
||||
typedef struct config {
|
||||
uint8_t current_energy_balance;
|
||||
config() : current_energy_balance(0) {}
|
||||
} config_t;
|
||||
|
||||
uint32_t get_id();
|
||||
esp_err_t add(cluster_t *cluster, config_t *config);
|
||||
} /* energy_balance */
|
||||
|
||||
namespace low_power_mode_sensitivity {
|
||||
typedef struct config {
|
||||
uint8_t current_low_power_mode_sensitivity;
|
||||
config() : current_low_power_mode_sensitivity(0) {}
|
||||
} config_t;
|
||||
|
||||
uint32_t get_id();
|
||||
esp_err_t add(cluster_t *cluster, config_t *config);
|
||||
} /* low_power_mode_sensitivity */
|
||||
|
||||
} /* feature */
|
||||
} /* energy_preference */
|
||||
|
||||
} /* cluster */
|
||||
} /* esp_matter */
|
||||
|
||||
@@ -391,6 +391,10 @@ namespace water_heater_management {
|
||||
constexpr uint16_t cluster_revision = 2;
|
||||
} // namespace water_heater_management
|
||||
|
||||
namespace energy_preference {
|
||||
constexpr uint16_t cluster_revision = 1;
|
||||
} // namespace energy_preference
|
||||
|
||||
} // namespace cluster
|
||||
} // namespace esp_matter
|
||||
|
||||
|
||||
@@ -46,6 +46,7 @@ List of clusters with delegate:
|
||||
- Target Navigator Cluster.
|
||||
- Mode Select Cluster.
|
||||
- Water Heater Management Cluster.
|
||||
- Energy Preference Cluster.
|
||||
|
||||
9.1.1 Mode Base Cluster
|
||||
-----------------------
|
||||
@@ -226,6 +227,14 @@ ModeWaterHeater, ModeRefrigerator, ModeLaundryWasher and ModeMicrowaveOven.
|
||||
|
||||
`Water Heater Management`_, `Water Heater Management Delegate`_
|
||||
|
||||
9.1.21 Energy Preference Cluster
|
||||
--------------------------------
|
||||
|
||||
.. csv-table::
|
||||
:header: "Delegate Class", "Reference Implementation"
|
||||
|
||||
`Energy Preference`_, `Energy Preference Delegate`_
|
||||
|
||||
|
||||
.. note::
|
||||
Make sure that after implementing delegate class, you set the delegate class pointer at the time of creating cluster.
|
||||
@@ -282,3 +291,5 @@ ModeWaterHeater, ModeRefrigerator, ModeLaundryWasher and ModeMicrowaveOven.
|
||||
.. _`Mode Select Delegate`: https://github.com/espressif/connectedhomeip/blob/ea679d2dc674f576f4d391d1d71af1489010e580/examples/all-clusters-app/all-clusters-common/include/static-supported-modes-manager.h
|
||||
.. _`Water Heater Management`: https://github.com/espressif/connectedhomeip/blob/ea679d2dc674f576f4d391d1d71af1489010e580/src/app/clusters/water-heater-management-server/water-heater-management-server.h
|
||||
.. _`Water Heater Management Delegate`: https://github.com/espressif/connectedhomeip/blob/ea679d2dc674f576f4d391d1d71af1489010e580/examples/energy-management-app/energy-management-common/water-heater/include/WhmDelegate.h
|
||||
.. _`Energy Preference`: https://github.com/espressif/connectedhomeip/blob/ea679d2dc674f576f4d391d1d71af1489010e580/src/app/clusters/energy-preference-server/energy-preference-server.h
|
||||
.. _`Energy Preference Delegate`: https://github.com/espressif/connectedhomeip/blob/ea679d2dc674f576f4d391d1d71af1489010e580/examples/all-clusters-app/all-clusters-common/src/energy-preference-delegate.cpp
|
||||
|
||||
Reference in New Issue
Block a user