Skip to content

Commit 481270d

Browse files
energy-management-app: refactor WH and EVSE into separate endpoints and fix conformance issues (project-chip#36201)
* Add missing Water Heater device to matter-devices.xml This PR adds the missing Water Heater device to matter-devices.xml. The description was generated using the Alchemy tool (https://github.com/project-chip/alchemy) with the following command: `alchemy zap --attribute="in-progress" --sdkRoot=./connectedhomeip/ --specRoot=./connectedhomeip-spec/ ./connectedhomeip-spec/src/device_types/WaterHeater.adoc` I manually fixed the device nae from `Matter Water Heater` to `Water Heater`. * zap regen * energy-management-app: Split WH and EVSE into 2 endpoints This PR refactors the energy-management-app into 2 separate endpoints (one for EVSE and another for WaterHeater). This is the first step in making this app spec-conformant. `TC_DeviceBasicComposition.py` failed on this app before this PR and now passes. Changes: * Split Water Heater and EVSE into two separate endpoints (1 and 2). Updated zap and code. * Dinamically disable unused endpoint at runtime. Based on the app choice (command line argument on linux or #define in ESP32 or SIlabs), initialize the clusters in the correct endpoint and disable the other endpoint. For example, for Water Heater, initialize clusters on endpoint 2 and disable endpoint 1 (EVSE). * Refactor/move the init code related to ElectricalSensor (PowerTopology, EPM and EEM) from inside EVSE into ElectricalSensorInit.h/.cpp so they can be easier to reuse by both WaterHeater and EVSE. * Refactor/move DEM cluster init code into its own file so it can be better reused outside EVSE. Test performed: 1. Check basic composition for EVSE: ``` scripts/run_in_python_env.sh out/python_env './scripts/tests/run_python_test.py --app ./out/linux-x64-energy-management-no-ble/chip-energy-management-app --app-args "--application evse --trace-to json:log" --script src/python_testing/TC_DeviceBasicComposition.py --script-args "--qr-code MT:-24J0AFN00KA0648G00"' ``` 2. Check basic composition for WaterHeater: ``` scripts/run_in_python_env.sh out/python_env './scripts/tests/run_python_test.py --app ./out/linux-x64-energy-management-no-ble/chip-energy-management-app --app-args "--application water-heater --trace-to json:log" --script src/python_testing/TC_DeviceBasicComposition.py --script-args "--qr-code MT:-24J0AFN00KA0648G00"' ``` 3. Check app against `TC_EEVSE_2_6.py`: ``` rm -f evse.bin; ./out/linux-x64-energy-management-no-ble/chip-energy-management-app --enable-key 000102030405060708090a0b0c0d0e0f --KVS evse.bin --featureSet 0x3d python src/python_testing/TC_EEVSE_2_6.py --endpoint 1 -m on-network -n 1234 -p 20202021 -d 3840 --hex-arg enableKey:000102030405060708090a0b0c0d0e0f ``` * Use anon namespace instead of static. * disable enpoint on esp32 and silabs * address Tennessee's PR feedback * Review suggestion: move GetMainAppEndpointId to another file * zap regen * fix matter-devices white space diffs * App now builds on all-clusters app * Fix typo on init * fix all-clusters breakage on esp32 * fix misuse of namespace in header * Fix breakage for silabs water heater * Update WaterHeater endpoint for CI tests This fixes REPL test CI breakage. * Update WaterHeater tests to endpoint 2 * Bumped ClusterRevisions Cluster 40 (0x28) BasicInformation - 3 -> 4 Cluster 47 (0x2f) PowerSource - 2 -> 3 Cluster 48 (0x30) GeneralCommissioning 1-> 2 Cluster 3 (0x03) Identify 4 -> 5 Cluster 153 (0x99) EnergyEvse 2 -> 3 Cluster 157 (0x9d) EnergyEvseMode 1-> 2 Cluster 159 (0x9f) DeviceEnergyManagementMode 1-> 2 * Update AccessControl featureMap to enable Extension attribute * Remove AccessControl extension attribute * Remove kStateForecastReporting from the default feature map That feature can't be enabled together with kPowerAdjustment. * Update TC_WHM_1_2 endpoint to 2 * Fix various conformance issues Remove PowerSource from root node and move to EP1/evse Bump cluster revisions where needed Fix device type descriptions for each EP Remove unused Thermostat cluster and added a TODO. We need to properly implement this cluster for this app for temperature control. * TC_WHM_1_2: Use endpoint id passed as argument instead of hardcoded
1 parent 63bc8a3 commit 481270d

29 files changed

+2802
-1641
lines changed

examples/all-clusters-app/all-clusters-common/src/energy-evse-stub.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,11 @@ static std::unique_ptr<EnergyEvseDelegate> gDelegate;
2626
static std::unique_ptr<EvseTargetsDelegate> gEvseTargetsDelegate;
2727
static std::unique_ptr<EnergyEvseManager> gInstance;
2828

29+
EndpointId GetEnergyDeviceEndpointId()
30+
{
31+
return chip::EndpointId(1);
32+
}
33+
2934
void emberAfEnergyEvseClusterInitCallback(chip::EndpointId endpointId)
3035
{
3136
VerifyOrDie(endpointId == 1); // this cluster is only enabled for endpoint 1.

examples/all-clusters-app/linux/main-common.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ const Clusters::Descriptor::Structs::SemanticTagStruct::Type gEp3TagList[] = { {
124124
.tag = kTagSwitchesUp } };
125125
const Clusters::Descriptor::Structs::SemanticTagStruct::Type gEp4TagList[] = { { .namespaceID = kNamespaceSwitches,
126126
.tag = kTagSwitchesDown } };
127+
127128
} // namespace
128129

129130
#ifdef MATTER_DM_PLUGIN_DISHWASHER_ALARM_SERVER
@@ -256,7 +257,7 @@ void ApplicationInit()
256257
Clusters::ValveConfigurationAndControl::SetDefaultDelegate(chip::EndpointId(1), &sValveDelegate);
257258
Clusters::TimeSynchronization::SetDefaultDelegate(&sTimeSyncDelegate);
258259

259-
Clusters::WaterHeaterManagement::WhmApplicationInit();
260+
Clusters::WaterHeaterManagement::WhmApplicationInit(chip::EndpointId(1));
260261

261262
SetTagList(/* endpoint= */ 0, Span<const Clusters::Descriptor::Structs::SemanticTagStruct::Type>(gEp0TagList));
262263
SetTagList(/* endpoint= */ 1, Span<const Clusters::Descriptor::Structs::SemanticTagStruct::Type>(gEp1TagList));

examples/energy-management-app/energy-management-common/device-energy-management/include/DEMDelegate.h examples/energy-management-app/energy-management-common/common/include/EnergyManagementAppCommonMain.h

+16
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,21 @@
1919
#pragma once
2020

2121
#include <DeviceEnergyManagementDelegateImpl.h>
22+
#include <DeviceEnergyManagementManager.h>
23+
#include <ElectricalPowerMeasurementDelegate.h>
24+
#include <PowerTopologyDelegate.h>
25+
#include <lib/core/CHIPError.h>
2226

27+
// This app is configured by default with EP1 for EVSE and EP2 for WaterHeater, with only one endpoint
28+
// enabled. On linux, there's a command line argument (--application) to dynamically enable
29+
// "evse|water-heater", i.e. EP1 or EP2. On other platforms, it's a build time definition (#define).
30+
chip::EndpointId GetEnergyDeviceEndpointId();
31+
32+
// The DEM Delegate is used for the TestEventTriggers
2333
chip::app::Clusters::DeviceEnergyManagement::DeviceEnergyManagementDelegate * GetDEMDelegate();
34+
35+
void EvseApplicationInit();
36+
void EvseApplicationShutdown();
37+
38+
void WaterHeaterApplicationInit();
39+
void WaterHeaterApplicationShutdown();

0 commit comments

Comments
 (0)