fix(energy): report real kWh in the cost Summary instead of mislabelled money
The Summary cards labelled `metered_import` / `metered_export` as "(kWh)", but both fields are monetary totals (Σ import_cost / Σ export_revenue). Today's page therefore showed "Import 1.339 kWh" when the meter had actually imported 4.188 kWh — the 1.339 was EUR. Cross-checked against the DSMR cumulative registers and Home Assistant: our energy figures were correct all along, only the label was wrong. summarize() now also aggregates the metered energy, reusing the already-fetched non-degraded rows so no extra query is issued: metered_import_kwh = Σ (d1_kwh + d2_kwh) metered_export_kwh = Σ (r1_kwh + r2_kwh) The Import/Export cards show kWh as the headline figure and keep the monetary equivalent as a sub-line, so the split between energy cost and standing charges/credits behind total_payable stays visible. The `_kwh` suffix is now the only thing separating energy from money in this payload, so the docstrings on both summarize() and SummaryResponse call that out explicitly. app/integrations/expose.py reads only the money keys, so the HA outbound sensors are unaffected by the additive fields.
This commit is contained in:
@@ -61,9 +61,13 @@ const COST_PERIOD = {
|
||||
|
||||
const SUMMARY = {
|
||||
currency: 'EUR',
|
||||
// Money totals and kWh totals are deliberately distinct so the assertions
|
||||
// below prove the cards read the *_kwh fields, not the monetary ones.
|
||||
metered_import: 10.5,
|
||||
metered_export: 2.3,
|
||||
metered_net: 8.2,
|
||||
metered_import_kwh: 33.3,
|
||||
metered_export_kwh: 44.4,
|
||||
fixed_costs: 5.0,
|
||||
credits: 50.0,
|
||||
total_payable: 12.5,
|
||||
@@ -145,9 +149,14 @@ describe('CostView', () => {
|
||||
expect(screen.getByTestId('summary-import')).toBeInTheDocument()
|
||||
})
|
||||
|
||||
expect(screen.getByTestId('summary-import')).toHaveTextContent('10.500')
|
||||
expect(screen.getByTestId('summary-export')).toHaveTextContent('2.300')
|
||||
// Main figure is energy (kWh), taken from the *_kwh fields.
|
||||
expect(screen.getByTestId('summary-import')).toHaveTextContent('33.300')
|
||||
expect(screen.getByTestId('summary-export')).toHaveTextContent('44.400')
|
||||
expect(screen.getByTestId('summary-total')).toHaveTextContent('12.50')
|
||||
|
||||
// Sub-line carries the monetary equivalent, so money is still visible.
|
||||
expect(screen.getByTestId('summary-import-sub')).toHaveTextContent('10.50 EUR')
|
||||
expect(screen.getByTestId('summary-export-sub')).toHaveTextContent('2.30 EUR')
|
||||
})
|
||||
|
||||
it('shows recompute confirmation modal on button click', async () => {
|
||||
|
||||
Reference in New Issue
Block a user