graph TD
%% Energy-Management-App Folder
subgraph "project-root/examples/"
Energy-Management-App["📁 Energy-Management-App/"]
end
%% Core Energy Management Folders
Common["📁 common/<br/>EnergyManagementAppCommonMain<br/>❌ EnergyTimeUtils (EVSE-specific!)<br/>Identify<br/>❌ CmdLineOptions (DEM-specific!)"]
DEM["📁 device-energy-management/<br/>DeviceEnergyManagementManager<br/>DeviceEnergyManagementDelegateImpl<br/>DEMManufacturerDelegate<br/>DEMTestEventTriggers<br/>device-energy-management-mode"]
EVSE["📁 energy-evse/<br/>EnergyEvseMain<br/>EnergyEvseManager<br/>EnergyEvseDelegateImpl<br/>EVSEManufacturerImpl<br/>EnergyEvseTargetsStore<br/>ChargingTargetsMemMgr<br/>energy-evse-mode<br/>EVSECallbacks<br/>EnergyEvseEventTriggers"]
Reporting["📁 energy-reporting/<br/>ElectricalPowerMeasurementDelegate<br/>PowerTopologyDelegate<br/>FakeReadings<br/>ElectricalSensorInit<br/>EnergyReportingEventTriggers"]
WHM["📁 water-heater/<br/>WhmMain<br/>WhmInstance<br/>WhmDelegateImpl<br/>WhmManufacturer<br/>water-heater-mode"]
Tests["📁 tests/<br/>TestEvseTargetsStorage"]
%% Platform Dependencies
Energy-Management-App --> Common
Energy-Management-App --> Tests
Energy-Management-App --> EVSE
Energy-Management-App --> DEM
Energy-Management-App --> Reporting
Energy-Management-App --> WHM
%% CIRCULAR DEPENDENCIES - The Problem!
Common -.->|includes headers| DEM
Common -.->|includes headers| EVSE
Common -.->|includes headers| WHM
Common -.->|includes headers| Reporting
DEM -.->|includes EnergyManagementAppCommonMain.h| Common
EVSE -.->|includes EnergyManagementAppCommonMain.h| Common
WHM -.->|includes EnergyManagementAppCommonMain.h| Common
Reporting -.->|includes EnergyManagementAppCommonMain.h| Common
%% Cross-Module Dependencies
EVSE -.->|includes DEM headers| DEM
EVSE -.->|includes Reporting headers| Reporting
Reporting -.->|includes DEM headers| DEM
%% Additional Circular Dependency: DEM ↔ Reporting
DEM -.->|DEMTestEventTriggers includes| Reporting
Reporting -.->|FakeReadings includes DEMManufacturerDelegate| DEM
%% CmdLineOptions Misplacement Issue
Common -.->|CmdLineOptions depends on| DEM
EVSE -.->|includes CmdLineOptions| Common
DEM -.->|includes CmdLineOptions| Common
%% EnergyTimeUtils Misplacement Issue
Common -.->|EnergyTimeUtils depends on| EVSE
%% Test Dependencies
Tests -.->|includes EVSE headers| EVSE
%% Styling
classDef circular fill:#ffebee,stroke:#c62828,stroke-width:3px,stroke-dasharray: 5 5
classDef folder fill:#e3f2fd,stroke:#1565c0,stroke-width:2px
classDef platform fill:#e8f5e8,stroke:#2e7d32,stroke-width:2px
classDef crossModule fill:#fff3e0,stroke:#ef6c00,stroke-width:2px
class Common,DEM,EVSE,WHM,Reporting circular
class DEM,EVSE,Reporting,WHM,Tests folder
class Energy-Management-App platform
class EVSE,Reporting crossModule
Energy Management App Folder - Dependencies Strucure
Current Build Structure
graph TD %% Energy-Management-App Folder subgraph "project-root/examples/" Energy-Management-App["📁 Energy-Management-App/"] end %% Core Energy Management Folders Common["📁 common/<br/>EnergyManagementAppCommonMain<br/>❌ EnergyTimeUtils (EVSE-specific!)<br/>Identify<br/>❌ CmdLineOptions (DEM-specific!)"] DEM["📁 device-energy-management/<br/>DeviceEnergyManagementManager<br/>DeviceEnergyManagementDelegateImpl<br/>DEMManufacturerDelegate<br/>DEMTestEventTriggers<br/>device-energy-management-mode"] EVSE["📁 energy-evse/<br/>EnergyEvseMain<br/>EnergyEvseManager<br/>EnergyEvseDelegateImpl<br/>EVSEManufacturerImpl<br/>EnergyEvseTargetsStore<br/>ChargingTargetsMemMgr<br/>energy-evse-mode<br/>EVSECallbacks<br/>EnergyEvseEventTriggers"] Reporting["📁 energy-reporting/<br/>ElectricalPowerMeasurementDelegate<br/>PowerTopologyDelegate<br/>FakeReadings<br/>ElectricalSensorInit<br/>EnergyReportingEventTriggers"] WHM["📁 water-heater/<br/>WhmMain<br/>WhmInstance<br/>WhmDelegateImpl<br/>WhmManufacturer<br/>water-heater-mode"] Tests["📁 tests/<br/>TestEvseTargetsStorage"] %% Platform Dependencies Energy-Management-App --> Common Energy-Management-App --> Tests Energy-Management-App --> EVSE Energy-Management-App --> DEM Energy-Management-App --> Reporting Energy-Management-App --> WHM %% CIRCULAR DEPENDENCIES - The Problem! Common -.->|includes headers| DEM Common -.->|includes headers| EVSE Common -.->|includes headers| WHM Common -.->|includes headers| Reporting DEM -.->|includes EnergyManagementAppCommonMain.h| Common EVSE -.->|includes EnergyManagementAppCommonMain.h| Common WHM -.->|includes EnergyManagementAppCommonMain.h| Common Reporting -.->|includes EnergyManagementAppCommonMain.h| Common %% Cross-Module Dependencies EVSE -.->|includes DEM headers| DEM EVSE -.->|includes Reporting headers| Reporting Reporting -.->|includes DEM headers| DEM %% Additional Circular Dependency: DEM ↔ Reporting DEM -.->|DEMTestEventTriggers includes| Reporting Reporting -.->|FakeReadings includes DEMManufacturerDelegate| DEM %% CmdLineOptions Misplacement Issue Common -.->|CmdLineOptions depends on| DEM EVSE -.->|includes CmdLineOptions| Common DEM -.->|includes CmdLineOptions| Common %% EnergyTimeUtils Misplacement Issue Common -.->|EnergyTimeUtils depends on| EVSE %% Test Dependencies Tests -.->|includes EVSE headers| EVSE %% Styling classDef circular fill:#ffebee,stroke:#c62828,stroke-width:3px,stroke-dasharray: 5 5 classDef folder fill:#e3f2fd,stroke:#1565c0,stroke-width:2px classDef platform fill:#e8f5e8,stroke:#2e7d32,stroke-width:2px classDef crossModule fill:#fff3e0,stroke:#ef6c00,stroke-width:2px class Common,DEM,EVSE,WHM,Reporting circular class DEM,EVSE,Reporting,WHM,Tests folder class Energy-Management-App platform class EVSE,Reporting crossModuleCircular Dependencies Identified
Common ↔ All Modules
DEM,EVSE,WHM,ReportingEnergyManagementAppCommonMain.hCross-Module Dependencies
DEM,ReportingDEMCross-App Dependencies
EnergyManagementAppCommonMain.h(Common)EnergyManagementAppCommonMain.h(Common)EVSE,WHMAdditional Circular Dependency: DEM ↔ Reporting
FakeReadings.h(from Reporting)DEMManufacturerDelegate.h(from DEM)modules
CmdLineOptions Misplacement
common/but depends ondevice-energy-managementnamespace
CmdLineOptionsfromcommon/device-energy-management/orenergy-evse/EnergyTimeUtils Misplacement
common/but depends onEnergyEvsenamespaceenergy-evse/folder |Root Cause
The
EnergyManagementAppCommonMain.hheader acts as a central hub that allmodules depend on, while simultaneously depending on all module headers. This
creates a circular dependency web.
New Build Structure
graph TD subgraph "project-root/examples/" Evse-App["📁 Evse-App/"] Energy-Management-Folder["📁 Energy-Management/"] WHM-App["📁 WHM-App/"] end %% EVSE App Folders EvseCommon["📁 evse-common/<br/>Identify<br/>EnergyTimeUtils<br/>EnergyEvseMain<br/>EnergyEvseManager<br/>EnergyEvseDelegateImpl<br/>EVSEManufacturerImpl<br/>EnergyEvseTargetsStore<br/>ChargingTargetsMemMgr<br/>energy-evse-mode<br/>EVSECallbacks"] %% EVSE App Folders EvseTests["📁 tests/<br/>TestEvseTargetsStorage<br/>EnergyEvseEventTriggers<br/>DEMTestEventTriggers<br/>ElectricalSensorEventTriggers<br/>FakeReadings"] %% WHM App Folders WHMCommon["📁 water-heater-common/<br/>WhmMain<br/>WhmInstance<br/>WhmDelegateImpl<br/>WhmManufacturer<br/>water-heater-mode"] %% WHM App Folders WHMTests["📁 tests/<br/>TestWhmTargetsStorage<br/>WhmEventTriggers<br/>DEMTestEventTriggers<br/>ElectricalSensorEventTriggers<br/>FakeReadings"] %% Energy-Management-Folder Folders DEM["📁 device-energy-management/<br/>DeviceEnergyManagementManager<br/>DeviceEnergyManagementDelegateImpl<br/>DEMManufacturerDelegate<br/>device-energy-management-mode<br/>CmdLineOptions"] %% Energy-Management-Folder Folders ElectricalSensor["📁 electrical-sensor/<br/>ElectricalPowerMeasurementDelegate<br/>PowerTopologyDelegate<br/>ElectricalSensorInit"] %% Folder structure %% Evse-App Folders Evse-App --> EvseCommon Evse-App --> EvseTests %% Evse-App Dependencies EvseCommon -.->|includes headers| DEM EvseCommon -.->|includes headers| ElectricalSensor %% Evse-App Test Dependencies EvseTests -.->|includes EVSE headers| EvseCommon EvseTests -.->|includes DEM headers| DEM EvseTests -.->|includes ElectricalSensor headers| ElectricalSensor %% WHM-App Folders WHM-App --> WHMCommon WHM-App --> WHMTests %% WHM-App Dependencies WHMCommon -.->|includes headers| DEM WHMCommon -.->|includes headers| ElectricalSensor %% WHM Test Dependencies WHMTests -.->|includes WHM headers| WHMCommon WHMTests -.->|includes ElectricalSensor headers| ElectricalSensor WHMTests -.->|includes DEM headers| DEM %% Energy-Management-Folder Folders Energy-Management-Folder --> DEM Energy-Management-Folder --> ElectricalSensor %% Styling classDef Appfolder fill:#e3f2fd,stroke:#1565c0,stroke-width:2px classDef ApplicationFolder fill:#e8f5e8,stroke:#2e7d32,stroke-width:2px classDef crossModule fill:#fff3e0,stroke:#ef6c00,stroke-width:2px class WHMTests,WHMCommon,EvseTests,EvseCommon Appfolder class Evse-App,WHM-App ApplicationFolder class Energy-Management-Folder,DEM,ElectricalSensor crossModuleImprovements
specify they are not making a water heater and vice versa.