Skip to content

Commit fb47702

Browse files
committed
Merge branch 'device/solar_power' into 'main'
components/esp-matter: Add Solar Power device type. See merge request app-frameworks/esp-matter!943
2 parents c8d3a8f + 65978b8 commit fb47702

File tree

5 files changed

+72
-0
lines changed

5 files changed

+72
-0
lines changed

SUPPORTED_DEVICE_TYPES.md

+1
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ i. Appliances
8383
j. Energy
8484
1. EVSE (Electric Vehicle Supply Equipment)
8585
2. Water Heater
86+
3. Solar Power
8687

8788
k. Network Infrastructure
8889
1. Thread Border Router

components/esp_matter/esp_matter_endpoint.cpp

+48
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
static const char *TAG = "esp_matter_endpoint";
2020

21+
using namespace chip::app::Clusters;
2122
namespace esp_matter {
2223
using namespace cluster;
2324

@@ -2050,6 +2051,53 @@ esp_err_t add(endpoint_t *endpoint, config_t *config)
20502051
}
20512052
} /* water_heater */
20522053

2054+
namespace solar_power {
2055+
uint32_t get_device_type_id()
2056+
{
2057+
return ESP_MATTER_SOLAR_POWER_DEVICE_TYPE_ID;
2058+
}
2059+
2060+
uint8_t get_device_type_version()
2061+
{
2062+
return ESP_MATTER_SOLAR_POWER_DEVICE_TYPE_VERSION;
2063+
}
2064+
2065+
endpoint_t *create(node_t *node, config_t *config, uint8_t flags, void *priv_data)
2066+
{
2067+
return common::create<config_t>(node, config, flags, priv_data, add);
2068+
}
2069+
2070+
esp_err_t add(endpoint_t *endpoint, config_t *config)
2071+
{
2072+
VerifyOrReturnError(endpoint != nullptr, ESP_ERR_INVALID_ARG, ESP_LOGE(TAG, "Endpoint cannot be NULL"));
2073+
esp_err_t err = add_device_type(endpoint, get_device_type_id(), get_device_type_version());
2074+
if (err != ESP_OK) {
2075+
ESP_LOGE(TAG, "Failed to add device type id:%" PRIu32 ",err: %d", get_device_type_id(), err);
2076+
return err;
2077+
}
2078+
2079+
cluster_t *descriptor_cluster = cluster::get(endpoint, Descriptor::Id);
2080+
descriptor::feature::taglist::add(descriptor_cluster);
2081+
2082+
power_source_device::add(endpoint, &config->power_source_device);
2083+
2084+
cluster_t *power_source_cluster = cluster::get(endpoint, PowerSource::Id);
2085+
power_source::feature::wired::add(power_source_cluster, &config->power_source_device.power_source.wired);
2086+
2087+
electrical_sensor::add(endpoint, &config->electrical_sensor);
2088+
electrical_energy_measurement::create(endpoint, &(config->electrical_energy_measurement), CLUSTER_FLAG_SERVER, electrical_energy_measurement::feature::exported_energy::get_id() | electrical_energy_measurement::feature::cumulative_energy::get_id());
2089+
2090+
cluster_t *ele_power_measurement_cluster = cluster::get(endpoint, ElectricalPowerMeasurement::Id);
2091+
2092+
nullable<int64_t> voltage = 0, active_current = 0;
2093+
electrical_power_measurement::attribute::create_voltage(ele_power_measurement_cluster, voltage);
2094+
electrical_power_measurement::attribute::create_active_current(ele_power_measurement_cluster, active_current);
2095+
2096+
2097+
return ESP_OK;
2098+
}
2099+
} /* solar_power */
2100+
20532101
} /* endpoint */
20542102

20552103
namespace node {

components/esp_matter/esp_matter_endpoint.h

+16
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,8 @@
138138
#define ESP_MATTER_SECONDARY_NETWORK_INTERFACE_DEVICE_TYPE_VERSION 1
139139
#define ESP_MATTER_WATER_HEATER_DEVICE_TYPE_ID 0x050F
140140
#define ESP_MATTER_WATER_HEATER_DEVICE_TYPE_VERSION 1
141+
#define ESP_MATTER_SOLAR_POWER_DEVICE_TYPE_ID 0x0017
142+
#define ESP_MATTER_SOLAR_POWER_DEVICE_TYPE_VERSION 1
141143

142144
#define ESP_MATTER_THREAD_BORDER_ROUTER_DEVICE_TYPE_ID 0x0091
143145
#define ESP_MATTER_THREAD_BORDER_ROUTER_DEVICE_TYPE_VERSION 1
@@ -844,6 +846,20 @@ endpoint_t *create(node_t *node, config_t *config, uint8_t flags, void *priv_dat
844846
esp_err_t add(endpoint_t *endpoint, config_t *config);
845847
} /* water_heater */
846848

849+
namespace solar_power {
850+
typedef struct config {
851+
cluster::descriptor::config_t descriptor;
852+
power_source_device::config_t power_source_device;
853+
electrical_sensor::config_t electrical_sensor;
854+
cluster::electrical_energy_measurement::config_t electrical_energy_measurement;
855+
} config_t;
856+
857+
uint32_t get_device_type_id();
858+
uint8_t get_device_type_version();
859+
endpoint_t *create(node_t *node, config_t *config, uint8_t flags, void *priv_data);
860+
esp_err_t add(endpoint_t *endpoint, config_t *config);
861+
} /* solar_power */
862+
847863
} /* endpoint */
848864

849865
namespace node {

examples/all_device_types_app/main/device_types.h

+2
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ enum device_type_enum {
5656
ESP_MATTER_MOUNTED_ON_OFF_CONTROL,
5757
ESP_MATTER_MOUNTED_DIMMABLE_LOAD_CONTROL,
5858
ESP_MATTER_WATER_HEATER,
59+
ESP_MATTER_SOLAR_POWER,
5960
ESP_MATTER_DEVICE_TYPE_MAX
6061
};
6162

@@ -118,5 +119,6 @@ const device_type_name device_type_list[ESP_MATTER_DEVICE_TYPE_MAX] = {
118119
{"mounted_on_off_control", ESP_MATTER_MOUNTED_ON_OFF_CONTROL},
119120
{"mounted_dimmable_load_control", ESP_MATTER_MOUNTED_DIMMABLE_LOAD_CONTROL},
120121
{"water_heater", ESP_MATTER_WATER_HEATER},
122+
{"solar_power", ESP_MATTER_SOLAR_POWER},
121123
};
122124
} /* namespace esp_matter */

examples/all_device_types_app/main/esp_matter_console_helpers.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -534,6 +534,11 @@ int create(uint8_t device_type_index)
534534
endpoint = esp_matter::endpoint::water_heater::create(node, &water_heater_config, ENDPOINT_FLAG_NONE, NULL);
535535
break;
536536
}
537+
case ESP_MATTER_SOLAR_POWER: {
538+
esp_matter::endpoint::solar_power::config_t solar_power_config;
539+
endpoint = esp_matter::endpoint::solar_power::create(node, &solar_power_config, ENDPOINT_FLAG_NONE, NULL);
540+
break;
541+
}
537542
default: {
538543
ESP_LOGE(TAG, "Please input a valid device type");
539544
break;

0 commit comments

Comments
 (0)