Skip to content

Commit af22b40

Browse files
committed
Merge branch 'device/water_heater' into 'main'
components/esp-matter: Add Water Heater device type See merge request app-frameworks/esp-matter!950
2 parents d710b47 + ddbc6e2 commit af22b40

File tree

5 files changed

+57
-0
lines changed

5 files changed

+57
-0
lines changed

SUPPORTED_DEVICE_TYPES.md

+1
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ i. Appliances
8282

8383
j. Energy
8484
1. EVSE (Electric Vehicle Supply Equipment)
85+
2. Water Heater
8586

8687
k. Network Infrastructure
8788
1. Thread Border Router

components/esp_matter/esp_matter_endpoint.cpp

+33
Original file line numberDiff line numberDiff line change
@@ -2017,6 +2017,39 @@ esp_err_t add(endpoint_t *endpoint, config_t *config)
20172017
}
20182018
} /* mounted_dimmable_load_control */
20192019

2020+
namespace water_heater {
2021+
uint32_t get_device_type_id()
2022+
{
2023+
return ESP_MATTER_WATER_HEATER_DEVICE_TYPE_ID;
2024+
}
2025+
2026+
uint8_t get_device_type_version()
2027+
{
2028+
return ESP_MATTER_WATER_HEATER_DEVICE_TYPE_VERSION;
2029+
}
2030+
2031+
endpoint_t *create(node_t *node, config_t *config, uint8_t flags, void *priv_data)
2032+
{
2033+
return common::create<config_t>(node, config, flags, priv_data, add);
2034+
}
2035+
2036+
esp_err_t add(endpoint_t *endpoint, config_t *config)
2037+
{
2038+
VerifyOrReturnError(endpoint != nullptr, ESP_ERR_INVALID_ARG, ESP_LOGE(TAG, "Endpoint cannot be NULL"));
2039+
esp_err_t err = add_device_type(endpoint, get_device_type_id(), get_device_type_version());
2040+
if (err != ESP_OK) {
2041+
ESP_LOGE(TAG, "Failed to add device type id:%" PRIu32 ",err: %d", get_device_type_id(), err);
2042+
return err;
2043+
}
2044+
2045+
cluster::thermostat::create(endpoint, &(config->thermostat), CLUSTER_FLAG_SERVER, cluster::thermostat::feature::heating::get_id());
2046+
water_heater_management::create(endpoint, &(config->water_heater_management), CLUSTER_FLAG_SERVER, ESP_MATTER_NONE_FEATURE_ID);
2047+
water_heater_mode::create(endpoint, &(config->water_heater_mode), CLUSTER_FLAG_SERVER);
2048+
2049+
return ESP_OK;
2050+
}
2051+
} /* water_heater */
2052+
20202053
} /* endpoint */
20212054

20222055
namespace node {

components/esp_matter/esp_matter_endpoint.h

+16
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,8 @@
136136
#define ESP_MATTER_DEVICE_ENERGY_MANAGEMENT_DEVICE_TYPE_VERSION 2
137137
#define ESP_MATTER_SECONDARY_NETWORK_INTERFACE_DEVICE_TYPE_ID 0x0019
138138
#define ESP_MATTER_SECONDARY_NETWORK_INTERFACE_DEVICE_TYPE_VERSION 1
139+
#define ESP_MATTER_WATER_HEATER_DEVICE_TYPE_ID 0x050F
140+
#define ESP_MATTER_WATER_HEATER_DEVICE_TYPE_VERSION 1
139141

140142
#define ESP_MATTER_THREAD_BORDER_ROUTER_DEVICE_TYPE_ID 0x0091
141143
#define ESP_MATTER_THREAD_BORDER_ROUTER_DEVICE_TYPE_VERSION 1
@@ -828,6 +830,20 @@ endpoint_t *create(node_t *node, config_t *config, uint8_t flags, void *priv_dat
828830
esp_err_t add(endpoint_t *endpoint, config_t *config);
829831
} /** mounted_dimmable_load_control **/
830832

833+
namespace water_heater {
834+
typedef struct config {
835+
cluster::descriptor::config_t descriptor;
836+
cluster::thermostat::config_t thermostat;
837+
cluster::water_heater_management::config_t water_heater_management;
838+
cluster::water_heater_mode::config_t water_heater_mode;
839+
} config_t;
840+
841+
uint32_t get_device_type_id();
842+
uint8_t get_device_type_version();
843+
endpoint_t *create(node_t *node, config_t *config, uint8_t flags, void *priv_data);
844+
esp_err_t add(endpoint_t *endpoint, config_t *config);
845+
} /* water_heater */
846+
831847
} /* endpoint */
832848

833849
namespace node {

examples/all_device_types_app/main/device_types.h

+2
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ enum device_type_enum {
5555
ESP_MATTER_THREAD_BORDER_ROUTER,
5656
ESP_MATTER_MOUNTED_ON_OFF_CONTROL,
5757
ESP_MATTER_MOUNTED_DIMMABLE_LOAD_CONTROL,
58+
ESP_MATTER_WATER_HEATER,
5859
ESP_MATTER_DEVICE_TYPE_MAX
5960
};
6061

@@ -116,5 +117,6 @@ const device_type_name device_type_list[ESP_MATTER_DEVICE_TYPE_MAX] = {
116117
{"thread_border_router", ESP_MATTER_THREAD_BORDER_ROUTER},
117118
{"mounted_on_off_control", ESP_MATTER_MOUNTED_ON_OFF_CONTROL},
118119
{"mounted_dimmable_load_control", ESP_MATTER_MOUNTED_DIMMABLE_LOAD_CONTROL},
120+
{"water_heater", ESP_MATTER_WATER_HEATER},
119121
};
120122
} /* namespace esp_matter */

examples/all_device_types_app/main/esp_matter_console_helpers.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -529,6 +529,11 @@ int create(uint8_t device_type_index)
529529
endpoint = esp_matter::endpoint::mounted_dimmable_load_control::create(node, &mounted_dimmable_load_control_config, ENDPOINT_FLAG_NONE, NULL);
530530
break;
531531
}
532+
case ESP_MATTER_WATER_HEATER: {
533+
esp_matter::endpoint::water_heater::config_t water_heater_config;
534+
endpoint = esp_matter::endpoint::water_heater::create(node, &water_heater_config, ENDPOINT_FLAG_NONE, NULL);
535+
break;
536+
}
532537
default: {
533538
ESP_LOGE(TAG, "Please input a valid device type");
534539
break;

0 commit comments

Comments
 (0)