Skip to content

Commit fd02218

Browse files
committed
Merge branch 'device/heat_pump' into 'main'
components/esp-matter: Add Heat Pump device type. See merge request app-frameworks/esp-matter!955
2 parents 4e2d150 + 8871204 commit fd02218

File tree

5 files changed

+80
-0
lines changed

5 files changed

+80
-0
lines changed

SUPPORTED_DEVICE_TYPES.md

+1
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ j. Energy
8585
2. Water Heater
8686
3. Solar Power
8787
4. Battery Storage
88+
5. Heat Pump
8889

8990
k. Network Infrastructure
9091
1. Thread Border Router

components/esp_matter/esp_matter_endpoint.cpp

+50
Original file line numberDiff line numberDiff line change
@@ -2156,6 +2156,56 @@ esp_err_t add(endpoint_t *endpoint, config_t *config)
21562156
}
21572157
} /* battery_storage */
21582158

2159+
namespace heat_pump {
2160+
uint32_t get_device_type_id()
2161+
{
2162+
return ESP_MATTER_HEAT_PUMP_DEVICE_TYPE_ID;
2163+
}
2164+
2165+
uint8_t get_device_type_version()
2166+
{
2167+
return ESP_MATTER_HEAT_PUMP_DEVICE_TYPE_VERSION;
2168+
}
2169+
2170+
endpoint_t *create(node_t *node, config_t *config, uint8_t flags, void *priv_data)
2171+
{
2172+
return common::create<config_t>(node, config, flags, priv_data, add);
2173+
}
2174+
2175+
esp_err_t add(endpoint_t *endpoint, config_t *config)
2176+
{
2177+
VerifyOrReturnError(endpoint != nullptr, ESP_ERR_INVALID_ARG, ESP_LOGE(TAG, "Endpoint cannot be NULL"));
2178+
esp_err_t err = add_device_type(endpoint, get_device_type_id(), get_device_type_version());
2179+
if (err != ESP_OK) {
2180+
ESP_LOGE(TAG, "Failed to add device type id:%" PRIu32 ",err: %d", get_device_type_id(), err);
2181+
return err;
2182+
}
2183+
2184+
cluster_t *descriptor_cluster = cluster::get(endpoint, Descriptor::Id);
2185+
descriptor::feature::taglist::add(descriptor_cluster);
2186+
2187+
power_source_device::add(endpoint, &config->power_source_device);
2188+
2189+
cluster_t *power_source_cluster = cluster::get(endpoint, PowerSource::Id);
2190+
power_source::feature::wired::add(power_source_cluster, &config->power_source_device.power_source.wired);
2191+
2192+
electrical_sensor::add(endpoint, &config->electrical_sensor);
2193+
2194+
cluster_t *elec_power_measurement_cluster = cluster::get(endpoint, ElectricalPowerMeasurement::Id);
2195+
2196+
electrical_power_measurement::attribute::create_voltage(elec_power_measurement_cluster, config->voltage);
2197+
electrical_power_measurement::attribute::create_active_current(elec_power_measurement_cluster, config->active_current);
2198+
2199+
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());
2200+
2201+
device_energy_management::add(endpoint, &config->device_energy_management);
2202+
2203+
cluster_t *device_energy_management_cluster = cluster::get(endpoint, DeviceEnergyManagement::Id);
2204+
cluster::device_energy_management::feature::power_adjustment::add(device_energy_management_cluster);
2205+
return ESP_OK;
2206+
}
2207+
} /* heat_pump */
2208+
21592209
} /* endpoint */
21602210

21612211
namespace node {

components/esp_matter/esp_matter_endpoint.h

+22
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,8 @@
145145

146146
#define ESP_MATTER_THREAD_BORDER_ROUTER_DEVICE_TYPE_ID 0x0091
147147
#define ESP_MATTER_THREAD_BORDER_ROUTER_DEVICE_TYPE_VERSION 1
148+
#define ESP_MATTER_HEAT_PUMP_DEVICE_TYPE_ID 0x0309
149+
#define ESP_MATTER_HEAT_PUMP_DEVICE_TYPE_VERSION 1
148150

149151
namespace esp_matter {
150152

@@ -889,6 +891,26 @@ endpoint_t *create(node_t *node, config_t *config, uint8_t flags, void *priv_dat
889891
esp_err_t add(endpoint_t *endpoint, config_t *config);
890892
} /** battery_storage **/
891893

894+
namespace heat_pump {
895+
typedef struct config {
896+
cluster::descriptor::config_t descriptor;
897+
power_source_device::config_t power_source_device;
898+
electrical_sensor::config_t electrical_sensor;
899+
device_energy_management::config_t device_energy_management;
900+
cluster::electrical_energy_measurement::config_t electrical_energy_measurement;
901+
902+
nullable<int64_t> voltage;
903+
nullable<int64_t> active_current;
904+
905+
config(): voltage(0), active_current(0) {}
906+
} config_t;
907+
908+
uint32_t get_device_type_id();
909+
uint8_t get_device_type_version();
910+
endpoint_t *create(node_t *node, config_t *config, uint8_t flags, void *priv_data);
911+
esp_err_t add(endpoint_t *endpoint, config_t *config);
912+
} /** heat_pump **/
913+
892914
} /* endpoint */
893915

894916
namespace node {

examples/all_device_types_app/main/device_types.h

+2
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ enum device_type_enum {
5858
ESP_MATTER_WATER_HEATER,
5959
ESP_MATTER_SOLAR_POWER,
6060
ESP_MATTER_BATTERY_STORAGE,
61+
ESP_MATTER_HEAT_PUMP,
6162
ESP_MATTER_DEVICE_TYPE_MAX
6263
};
6364

@@ -122,5 +123,6 @@ const device_type_name device_type_list[ESP_MATTER_DEVICE_TYPE_MAX] = {
122123
{"water_heater", ESP_MATTER_WATER_HEATER},
123124
{"solar_power", ESP_MATTER_SOLAR_POWER},
124125
{"battery_storage", ESP_MATTER_BATTERY_STORAGE},
126+
{"heat_pump", ESP_MATTER_HEAT_PUMP},
125127
};
126128
} /* namespace esp_matter */

examples/all_device_types_app/main/esp_matter_console_helpers.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -544,6 +544,11 @@ int create(uint8_t device_type_index)
544544
endpoint = esp_matter::endpoint::battery_storage::create(node, &battery_storage_config, ENDPOINT_FLAG_NONE, NULL);
545545
break;
546546
}
547+
case ESP_MATTER_HEAT_PUMP: {
548+
esp_matter::endpoint::heat_pump::config_t heat_pump_config;
549+
endpoint = esp_matter::endpoint::heat_pump::create(node, &heat_pump_config, ENDPOINT_FLAG_NONE, NULL);
550+
break;
551+
}
547552
default: {
548553
ESP_LOGE(TAG, "Please input a valid device type");
549554
break;

0 commit comments

Comments
 (0)