FE implementace deye modu
Some checks failed
CI and deploy / migration-check (push) Failing after 11s
CI and deploy / deploy (push) Has been skipped

This commit is contained in:
Dusan Vojacek
2026-04-20 08:50:20 +02:00
parent 43b594c8d5
commit d8dbb284fd
5 changed files with 109 additions and 8 deletions

View File

@@ -8,6 +8,37 @@ export type StatePanelProps = {
nowIndex: number
}
function deyeModeLabel(s: SlotData): string {
const m = s.deye_physical_mode
if (m === 'SELL') return 'SELL'
if (m === 'CHARGE') return 'CHARGE'
if (m === 'PASSIVE') return 'PASSIVE'
return '—'
}
function deyeModeBadge(s: SlotData): { label: string; klass: string; title: string } {
const m = s.deye_physical_mode
if (m === 'SELL') {
return {
label: 'SELL',
klass: 'bg-orange-500/15 text-orange-200 ring-1 ring-orange-500/35',
title: 'SELL (selling first): reg142=0, reg178=32 (grid peak shaving off)',
}
}
if (m === 'CHARGE') {
return {
label: 'CHARGE',
klass: 'bg-sky-500/15 text-sky-200 ring-1 ring-sky-500/35',
title: 'CHARGE (grid charge): TOU grid_charge enabled v time pointech; reg178=48',
}
}
return {
label: 'PASSIVE',
klass: 'bg-slate-600/40 text-slate-200 ring-1 ring-slate-500/30',
title: 'PASSIVE (ZERO): reg142=deye_zero_export_mode; reg178=48',
}
}
/** Stav segmentu pro jeden track */
export type TrackSegment = {
widthPct: number
@@ -431,6 +462,21 @@ function StatePanelRaw({ slots, nowIndex }: StatePanelProps) {
<p className="mb-2 text-xs font-semibold uppercase tracking-wide text-slate-400">
Energetický tok
</p>
<p className="mb-2 text-[10px] text-slate-500">
Deye režim (plán):{' '}
{(() => {
const b = deyeModeBadge(slots[nowIndex]!)
return (
<span
className={`inline-flex items-center rounded-md px-2 py-0.5 text-[10px] font-semibold ${b.klass}`}
title={b.title}
>
{b.label}
</span>
)
})()}
<span className="ml-2 font-mono text-slate-500">{deyeModeLabel(slots[nowIndex]!)}</span>
</p>
<div className="space-y-2">
<TrackRow label="Síť" segments={gridSegs} nowIndex={nowIndex} showNowLabel />
<TrackRow label="Baterie" segments={batSegs} nowIndex={nowIndex} />