# mixmaster2005/smartenergyhub architecture

> Architecture diagram of the GitHub repository mixmaster2005/smartenergyhub, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-11). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/mixmaster2005/smartenergyhub
- Repository: https://github.com/mixmaster2005/smartenergyhub

## Overview

SmartEnergy Hub collects energy measurements, persists them for history, and provides sensor and analytics APIs with a web dashboard. The principal workflow runs from simulated or submitted measurements through the collector and Redis Streams to storage and analytics. Separate branches cover sensor management, gateway routing, and the frontend; the README also identifies forecasting as an extension. Several internal links are based on documented system flow because the relevant source excerpts were not provided.

Main entry points: [`gateway-service/src/main/java/com/smartenergy/gateway/GatewayApplication.java`](https://github.com/mixmaster2005/smartenergyhub/blob/main/gateway-service/src/main/java/com/smartenergy/gateway/GatewayApplication.java) (Gateway), [`collector-service/src/main/java/com/smartenergy/collector/web/MeasurementController.java`](https://github.com/mixmaster2005/smartenergyhub/blob/main/collector-service/src/main/java/com/smartenergy/collector/web/MeasurementController.java) (Measurement API), [`analytics-service/src/main/java/com/smartenergy/analytics/web/AnalyticsController.java`](https://github.com/mixmaster2005/smartenergyhub/blob/main/analytics-service/src/main/java/com/smartenergy/analytics/web/AnalyticsController.java) (Analytics API), [`frontend/api.js`](https://github.com/mixmaster2005/smartenergyhub/blob/main/frontend/api.js) (API client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ingest["Measurement ingestion"]
  node_simulator["Simulator"]
  node_collector["Measurement API"]
  node_redis["Redis Streams"]
end

subgraph group_data["Storage and analytics"]
  node_storage_consumer["Stream consumer"]
  node_storage_writer["Cassandra writer"]
  node_cassandra[("Measurement store")]
  node_history_api["History API"]
  node_history_query["History queries"]
  node_analytics_consumer["Analytics consumer"]
  node_aggregate_writer["Aggregate writer"]
  node_analytics_api["Analytics API"]
  node_analytics_queries["Analytics queries"]
  node_forecast["Forecasting"]
end

subgraph group_services["Platform services"]
  node_sensor_api["Sensor registry API"]
  node_sensor_service["Sensor management<br/>[SensorService.java]"]
  node_sensor_store[("Sensor repository")]
  node_gateway["Gateway"]
end

subgraph group_interface["Web interface"]
  node_frontend_app["Web application<br/>[app.js]"]
  node_frontend_api["API client<br/>[api.js]"]
  node_frontend_views["Dashboard views<br/>[dashboard.js]"]
  node_scenario_view["Scenarios view<br/>[scenarios.js]"]
end

subgraph group_contracts["Shared contracts"]
  node_measurement_contract["Measurement event"]
  node_sensor_contract["Sensor contracts<br/>[SensorRequest.java]"]
end

node_simulator -->|"submits measurements"| node_collector
node_collector -->|"publishes events"| node_redis
node_redis -->|"delivers events"| node_storage_consumer
node_storage_consumer -->|"delegates writes"| node_storage_writer
node_storage_writer -->|"persists measurements"| node_cassandra
node_history_api -->|"delegates queries"| node_history_query
node_history_query -->|"reads history"| node_cassandra
node_redis -->|"delivers events"| node_analytics_consumer
node_analytics_consumer -.->|"processes events"| node_aggregate_writer
node_aggregate_writer -.->|"supports analytics"| node_analytics_api
node_analytics_api -.->|"delegates queries"| node_analytics_queries
node_sensor_api -->|"delegates requests"| node_sensor_service
node_sensor_service -->|"reads and writes"| node_sensor_store
node_gateway -->|"routes requests"| node_collector
node_gateway -->|"routes requests"| node_history_api
node_gateway -->|"routes requests"| node_analytics_api
node_gateway -->|"routes requests"| node_sensor_api
node_frontend_app -->|"dispatches views"| node_frontend_views
node_frontend_app -->|"checks gateway"| node_frontend_api
node_frontend_views -.->|"requests data"| node_frontend_api
node_scenario_view -->|"runs checks"| node_frontend_api
node_analytics_queries -.->|"uses forecasting"| node_forecast

click node_simulator "https://github.com/mixmaster2005/smartenergyhub/blob/main/simulator/src/main/java/com/smartenergy/simulator/SimulatorRunner.java"
click node_collector "https://github.com/mixmaster2005/smartenergyhub/blob/main/collector-service/src/main/java/com/smartenergy/collector/web/MeasurementController.java"
click node_storage_consumer "https://github.com/mixmaster2005/smartenergyhub/blob/main/storage-service/src/main/java/com/smartenergy/storage/stream/StorageStreamConsumer.java"
click node_storage_writer "https://github.com/mixmaster2005/smartenergyhub/blob/main/storage-service/src/main/java/com/smartenergy/storage/service/CassandraMeasurementWriter.java"
click node_history_api "https://github.com/mixmaster2005/smartenergyhub/blob/main/storage-service/src/main/java/com/smartenergy/storage/web/MeasurementQueryController.java"
click node_history_query "https://github.com/mixmaster2005/smartenergyhub/blob/main/storage-service/src/main/java/com/smartenergy/storage/service/MeasurementQueryService.java"
click node_analytics_consumer "https://github.com/mixmaster2005/smartenergyhub/blob/main/analytics-service/src/main/java/com/smartenergy/analytics/stream/AnalyticsStreamConsumer.java"
click node_aggregate_writer "https://github.com/mixmaster2005/smartenergyhub/blob/main/analytics-service/src/main/java/com/smartenergy/analytics/service/AggregateWriter.java"
click node_analytics_api "https://github.com/mixmaster2005/smartenergyhub/blob/main/analytics-service/src/main/java/com/smartenergy/analytics/web/AnalyticsController.java"
click node_analytics_queries "https://github.com/mixmaster2005/smartenergyhub/blob/main/analytics-service/src/main/java/com/smartenergy/analytics/service/AnalyticsQueryService.java"
click node_forecast "https://github.com/mixmaster2005/smartenergyhub/blob/main/analytics-service/src/main/java/com/smartenergy/analytics/forecast/ForecastService.java"
click node_sensor_api "https://github.com/mixmaster2005/smartenergyhub/blob/main/sensor-service/src/main/java/com/smartenergy/sensor/web/SensorController.java"
click node_sensor_service "https://github.com/mixmaster2005/smartenergyhub/blob/main/sensor-service/src/main/java/com/smartenergy/sensor/service/SensorService.java"
click node_sensor_store "https://github.com/mixmaster2005/smartenergyhub/blob/main/sensor-service/src/main/java/com/smartenergy/sensor/repository/SensorRepository.java"
click node_gateway "https://github.com/mixmaster2005/smartenergyhub/blob/main/gateway-service/src/main/java/com/smartenergy/gateway/GatewayApplication.java"
click node_frontend_app "https://github.com/mixmaster2005/smartenergyhub/blob/main/frontend/app.js"
click node_frontend_api "https://github.com/mixmaster2005/smartenergyhub/blob/main/frontend/api.js"
click node_frontend_views "https://github.com/mixmaster2005/smartenergyhub/blob/main/frontend/views/dashboard.js"
click node_scenario_view "https://github.com/mixmaster2005/smartenergyhub/blob/main/frontend/views/scenarios.js"
click node_measurement_contract "https://github.com/mixmaster2005/smartenergyhub/blob/main/contracts/measurement-contracts/src/main/java/com/smartenergy/contracts/measurement/EnergyMeasurement.java"
click node_sensor_contract "https://github.com/mixmaster2005/smartenergyhub/blob/main/contracts/sensor-contracts/src/main/java/com/smartenergy/contracts/sensor/SensorRequest.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_simulator,node_collector,node_redis toneBlue
class node_storage_consumer,node_storage_writer,node_cassandra,node_history_api,node_history_query,node_analytics_consumer,node_aggregate_writer,node_analytics_api,node_analytics_queries,node_forecast toneAmber
class node_sensor_api,node_sensor_service,node_sensor_store,node_gateway toneMint
class node_frontend_app,node_frontend_api,node_frontend_views,node_scenario_view toneRose
class node_measurement_contract,node_sensor_contract toneIndigo
```

## Components

### Measurement ingestion

- [Simulator](https://github.com/mixmaster2005/smartenergyhub/blob/main/simulator/src/main/java/com/smartenergy/simulator/SimulatorRunner.java): `simulator/src/main/java/com/smartenergy/simulator/SimulatorRunner.java`
- [Measurement API](https://github.com/mixmaster2005/smartenergyhub/blob/main/collector-service/src/main/java/com/smartenergy/collector/web/MeasurementController.java): `collector-service/src/main/java/com/smartenergy/collector/web/MeasurementController.java`
- **Redis Streams**

### Storage and analytics

- [Stream consumer](https://github.com/mixmaster2005/smartenergyhub/blob/main/storage-service/src/main/java/com/smartenergy/storage/stream/StorageStreamConsumer.java): `storage-service/src/main/java/com/smartenergy/storage/stream/StorageStreamConsumer.java`
- [Cassandra writer](https://github.com/mixmaster2005/smartenergyhub/blob/main/storage-service/src/main/java/com/smartenergy/storage/service/CassandraMeasurementWriter.java): `storage-service/src/main/java/com/smartenergy/storage/service/CassandraMeasurementWriter.java`
- **Measurement store**
- [History API](https://github.com/mixmaster2005/smartenergyhub/blob/main/storage-service/src/main/java/com/smartenergy/storage/web/MeasurementQueryController.java): `storage-service/src/main/java/com/smartenergy/storage/web/MeasurementQueryController.java`
- [History queries](https://github.com/mixmaster2005/smartenergyhub/blob/main/storage-service/src/main/java/com/smartenergy/storage/service/MeasurementQueryService.java): `storage-service/src/main/java/com/smartenergy/storage/service/MeasurementQueryService.java`
- [Analytics consumer](https://github.com/mixmaster2005/smartenergyhub/blob/main/analytics-service/src/main/java/com/smartenergy/analytics/stream/AnalyticsStreamConsumer.java): `analytics-service/src/main/java/com/smartenergy/analytics/stream/AnalyticsStreamConsumer.java`
- [Aggregate writer](https://github.com/mixmaster2005/smartenergyhub/blob/main/analytics-service/src/main/java/com/smartenergy/analytics/service/AggregateWriter.java): `analytics-service/src/main/java/com/smartenergy/analytics/service/AggregateWriter.java`
- [Analytics API](https://github.com/mixmaster2005/smartenergyhub/blob/main/analytics-service/src/main/java/com/smartenergy/analytics/web/AnalyticsController.java): `analytics-service/src/main/java/com/smartenergy/analytics/web/AnalyticsController.java`
- [Analytics queries](https://github.com/mixmaster2005/smartenergyhub/blob/main/analytics-service/src/main/java/com/smartenergy/analytics/service/AnalyticsQueryService.java): `analytics-service/src/main/java/com/smartenergy/analytics/service/AnalyticsQueryService.java`
- [Forecasting](https://github.com/mixmaster2005/smartenergyhub/blob/main/analytics-service/src/main/java/com/smartenergy/analytics/forecast/ForecastService.java): `analytics-service/src/main/java/com/smartenergy/analytics/forecast/ForecastService.java`

### Platform services

- [Sensor registry API](https://github.com/mixmaster2005/smartenergyhub/blob/main/sensor-service/src/main/java/com/smartenergy/sensor/web/SensorController.java): `sensor-service/src/main/java/com/smartenergy/sensor/web/SensorController.java`
- [Sensor management](https://github.com/mixmaster2005/smartenergyhub/blob/main/sensor-service/src/main/java/com/smartenergy/sensor/service/SensorService.java): `sensor-service/src/main/java/com/smartenergy/sensor/service/SensorService.java`
- [Sensor repository](https://github.com/mixmaster2005/smartenergyhub/blob/main/sensor-service/src/main/java/com/smartenergy/sensor/repository/SensorRepository.java): `sensor-service/src/main/java/com/smartenergy/sensor/repository/SensorRepository.java`
- [Gateway](https://github.com/mixmaster2005/smartenergyhub/blob/main/gateway-service/src/main/java/com/smartenergy/gateway/GatewayApplication.java): `gateway-service/src/main/java/com/smartenergy/gateway/GatewayApplication.java`

### Web interface

- [Web application](https://github.com/mixmaster2005/smartenergyhub/blob/main/frontend/app.js): `frontend/app.js`
- [API client](https://github.com/mixmaster2005/smartenergyhub/blob/main/frontend/api.js): `frontend/api.js`
- [Dashboard views](https://github.com/mixmaster2005/smartenergyhub/blob/main/frontend/views/dashboard.js): `frontend/views/dashboard.js`
- [Scenarios view](https://github.com/mixmaster2005/smartenergyhub/blob/main/frontend/views/scenarios.js): `frontend/views/scenarios.js`

### Shared contracts

- [Measurement event](https://github.com/mixmaster2005/smartenergyhub/blob/main/contracts/measurement-contracts/src/main/java/com/smartenergy/contracts/measurement/EnergyMeasurement.java): `contracts/measurement-contracts/src/main/java/com/smartenergy/contracts/measurement/EnergyMeasurement.java`
- [Sensor contracts](https://github.com/mixmaster2005/smartenergyhub/blob/main/contracts/sensor-contracts/src/main/java/com/smartenergy/contracts/sensor/SensorRequest.java): `contracts/sensor-contracts/src/main/java/com/smartenergy/contracts/sensor/SensorRequest.java`

## Connections

- Simulator → Measurement API: submits measurements (evidence: `README.md`)
- Measurement API → Redis Streams: publishes events (evidence: `README.md`)
- Redis Streams → Stream consumer: delivers events (evidence: `README.md`)
- Stream consumer → Cassandra writer: delegates writes (evidence: `storage-service/src/main/java/com/smartenergy/storage/stream/StorageStreamConsumer.java`)
- Cassandra writer → Measurement store: persists measurements (evidence: `README.md`)
- History API → History queries: delegates queries (evidence: `storage-service/src/main/java/com/smartenergy/storage/web/MeasurementQueryController.java`)
- History queries → Measurement store: reads history (evidence: `storage-service/src/main/java/com/smartenergy/storage/service/MeasurementQueryService.java`)
- Redis Streams → Analytics consumer: delivers events (evidence: `README.md`)
- Analytics consumer → Aggregate writer: processes events
- Aggregate writer → Analytics API: supports analytics
- Analytics API → Analytics queries: delegates queries
- Sensor registry API → Sensor management: delegates requests (evidence: `sensor-service/src/main/java/com/smartenergy/sensor/web/SensorController.java`)
- Sensor management → Sensor repository: reads and writes (evidence: `sensor-service/src/main/java/com/smartenergy/sensor/service/SensorService.java`)
- Gateway → Measurement API: routes requests (evidence: `README.md`)
- Gateway → History API: routes requests (evidence: `README.md`)
- Gateway → Analytics API: routes requests (evidence: `README.md`)
- Gateway → Sensor registry API: routes requests (evidence: `README.md`)
- Web application → Dashboard views: dispatches views (evidence: `frontend/app.js`)
- Web application → API client: checks gateway (evidence: `frontend/app.js`)
- Dashboard views → API client: requests data
- Scenarios view → API client: runs checks (evidence: `frontend/views/scenarios.js`)
- Analytics queries → Forecasting: uses forecasting
