frontend: add DSMR data panel to Energy page

- New 'DSMR' tab showing the latest parsed telegram (GET /api/energy/dsmr/latest)
  as a key/value table — the source-of-truth view so you can see ingest is
  landing data without reading the DB.
- Auto-refresh toggle (~10s); loading/error/empty states (empty explains the
  likely cause); null phase values shown as a dash.
- useDsmrLatest extended with optional auto-refresh. Tests added.
This commit is contained in:
2026-06-24 11:02:42 +02:00
parent 8d4f496ff4
commit e8521351d7
4 changed files with 249 additions and 1 deletions
+8
View File
@@ -44,6 +44,7 @@ import { EnergyCharts } from '../energy/EnergyCharts'
import { ContractManager } from '../energy/ContractManager'
import { TibberPrices } from '../energy/TibberPrices'
import { CostView } from '../energy/CostView'
import { DsmrPanel } from '../energy/DsmrPanel'
import type { ModbusDevice, ModbusTestReadResponse, MetricInfo } from '../energy/hooks'
import { ApiError } from '../api/client'
import { formatMetricValue } from '../energy/format'
@@ -628,6 +629,9 @@ export function EnergyPage() {
<Tabs.Tab value="costs" data-testid="tab-costs">
Costs
</Tabs.Tab>
<Tabs.Tab value="dsmr" data-testid="tab-dsmr">
DSMR
</Tabs.Tab>
</Tabs.List>
<Tabs.Panel value="devices" data-testid="panel-devices">
@@ -645,6 +649,10 @@ export function EnergyPage() {
<Tabs.Panel value="costs" data-testid="panel-costs">
<CostView />
</Tabs.Panel>
<Tabs.Panel value="dsmr" data-testid="panel-dsmr">
<DsmrPanel />
</Tabs.Panel>
</Tabs>
</Container>
)