Metrics
Real-time and historical metric retrieval for Sun Sources — latest snapshots, time-series history, aggregations, daily summaries, and fault detection.
Base Route: /api/sunsourcemetrics
Authorization: Omni policy (User, Admin, or Overseer)
Get Latest Metrics
Returns the most recent telemetry snapshot for a Sun Source.
GET /api/sunsourcemetrics/{sunSourceId}/latest
Response 200 OK
{
"sunSourceId": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"timestamp": "2025-06-20T14:22:00Z",
"stateOfCharge": 87.5,
"stateOfHealth": 98.5,
"batteryVoltage": 52.4,
"batteryCurrent": 12.3,
"batteryTemperature": 35.2,
"solarVoltage": 380.0,
"solarCurrent": 8.4,
"solarPower": 3192.0,
"outputVoltage": 230.0,
"outputCurrent": 5.2,
"loadPower": 1196.0,
"loadPercentage": 45.2,
"gridVoltage": 230.5,
"gridFrequency": 50.01,
"dailyEnergyProduced": 18.5,
"dailyEnergyConsumed": 12.3,
"totalEnergyProduced": 4250.0,
"operatingMode": "Solar",
"deviceStatus": "Normal",
"faultCodes": [],
"warningCodes": []
}
Get Metrics History
Returns raw time-series metrics within a date range.
GET /api/sunsourcemetrics/{sunSourceId}/history?startTime=2025-06-20T00:00:00Z&endTime=2025-06-20T23:59:59Z&limit=500
Query Parameters
| Parameter | Type | Default | Constraints | Description |
|---|---|---|---|---|
startTime | DateTime | 24h ago | Optional | Range start |
endTime | DateTime | Now | Optional | Range end |
limit | int | 100 | 1–1,000 | Maximum records returned |
Response 200 OK
Returns an array of SunSourceMetricsDto ordered by timestamp descending.
[
{
"sunSourceId": "7c9e6679-...",
"timestamp": "2025-06-20T14:22:00Z",
"stateOfCharge": 87.5,
"solarPower": 3192.0,
"loadPower": 1196.0,
...
},
...
]
Get Aggregated Data
Returns hourly-aggregated historical data, suitable for charting trends.
GET /api/sunsourcemetrics/{sunSourceId}/aggregated?startTime=2025-06-13&endTime=2025-06-20
Query Parameters
| Parameter | Type | Default | Constraints | Description |
|---|---|---|---|---|
startTime | DateTime | 7 days ago | Optional | Range start |
endTime | DateTime | Now | Optional | Range end |
Maximum range: 90 days. Requests exceeding this are automatically clamped.
Response 200 OK
[
{
"timestamp": "2025-06-20T14:00:00Z",
"averageBatteryVoltage": 52.1,
"averageStateOfCharge": 85.0,
"averageSolarPower": 3100.0,
"averageLoadPercentage": 42.0,
"maxSolarPower": 3500.0,
"minStateOfCharge": 78.0
}
]
Get Daily Summary
Returns daily-aggregated summaries including energy totals. Ideal for energy dashboards and reporting.
GET /api/sunsourcemetrics/{sunSourceId}/daily-summary?startTime=2025-06-01&endTime=2025-06-20
Query Parameters
| Parameter | Type | Default | Constraints | Description |
|---|---|---|---|---|
startTime | DateTime | 7 days ago | Optional | Range start |
endTime | DateTime | Now | Optional | Range end |
Maximum range: 400 days.
Response 200 OK
[
{
"date": "2025-06-20",
"solarPowerAvg": 2100.5,
"solarPowerMax": 4800.0,
"loadPowerAvg": 1200.3,
"loadPowerMax": 3500.0,
"socAvg": 72.5,
"socMin": 15.0,
"socMax": 100.0,
"voltageAvg": 51.8,
"gridVoltageAvg": 230.5,
"gridFreqAvg": 50.01,
"energyProduced": 21.5,
"energyConsumed": 14.2,
"sampleCount": 1440
}
]
Get Faults
Returns sources with active fault or warning codes across all of the user's Sun Sources.
GET /api/sunsourcemetrics/faults
Response 200 OK
Returns an array of SunSourceMetricsDto — only sources that have non-empty faultCodes or warningCodes.
[
{
"sunSourceId": "7c9e6679-...",
"timestamp": "2025-06-20T14:22:00Z",
"faultCodes": ["F01", "F12"],
"warningCodes": ["W03"],
...
}
]
Batch Get Latest Metrics
Returns the latest metrics for multiple Sun Sources in a single request.
POST /api/sunsourcemetrics/batch/latest
Request Body
[
"7c9e6679-7425-40de-944b-e07fc1f90ae7",
"550e8400-e29b-41d4-a716-446655440000",
"6ba7b810-9dad-11d1-80b4-00c04fd430c8"
]
Maximum batch size: 50. IDs are filtered by ownership — only sources belonging to the authenticated user are returned.
Response 200 OK
{
"7c9e6679-7425-40de-944b-e07fc1f90ae7": {
"sunSourceId": "7c9e6679-...",
"timestamp": "2025-06-20T14:22:00Z",
"stateOfCharge": 87.5,
"solarPower": 3192.0,
...
},
"550e8400-e29b-41d4-a716-446655440000": {
...
}
}
Response Schema: SunSourceMetricsDto
interface SunSourceMetricsDto {
sunSourceId: string;
timestamp: string; // ISO 8601
// Battery
stateOfCharge: number | null; // Percentage (0-100)
stateOfHealth: number | null; // Percentage (0-100)
batteryVoltage: number | null; // Volts
batteryCurrent: number | null; // Amps
batteryTemperature: number | null;// °C
// Solar
solarVoltage: number | null; // Volts
solarCurrent: number | null; // Amps
solarPower: number | null; // Watts
// Output
outputVoltage: number | null; // Volts
outputCurrent: number | null; // Amps
loadPower: number | null; // Watts
loadPercentage: number | null; // Percentage (0-100)
// Grid
gridVoltage: number | null; // Volts
gridFrequency: number | null; // Hz
// Energy
dailyEnergyProduced: number | null; // kWh
dailyEnergyConsumed: number | null; // kWh
totalEnergyProduced: number | null; // kWh (cumulative)
// Status
operatingMode: string | null;
deviceStatus: string | null;
faultCodes: string[] | null;
warningCodes: string[] | null;
}
interface SunSourceHistoricalDataDto {
timestamp: string;
averageBatteryVoltage: number | null;
averageStateOfCharge: number | null;
averageSolarPower: number | null;
averageLoadPercentage: number | null;
maxSolarPower: number | null;
minStateOfCharge: number | null;
}
interface DailySummaryDto {
date: string; // "YYYY-MM-DD"
solarPowerAvg: number;
solarPowerMax: number;
loadPowerAvg: number;
loadPowerMax: number;
socAvg: number;
socMin: number;
socMax: number;
voltageAvg: number;
gridVoltageAvg: number;
gridFreqAvg: number;
energyProduced: number; // kWh
energyConsumed: number; // kWh
sampleCount: number;
}