From 7b8e6e1f7459c2905441930fdba6ccbe25ead9d5 Mon Sep 17 00:00:00 2001 From: andig Date: Mon, 10 Aug 2026 11:10:31 +0200 Subject: [PATCH] Config UI: show static grid export limit on hems card (#32634) --- assets/js/components/Config/DeviceTags.vue | 1 + assets/js/views/Config.vue | 10 +++++++--- i18n/de.json | 1 + i18n/en.json | 1 + tests/hems.spec.ts | 6 ++++++ 5 files changed, 16 insertions(+), 3 deletions(-) diff --git a/assets/js/components/Config/DeviceTags.vue b/assets/js/components/Config/DeviceTags.vue index 260d4ae5d..3c6b65c84 100644 --- a/assets/js/components/Config/DeviceTags.vue +++ b/assets/js/components/Config/DeviceTags.vue @@ -210,6 +210,7 @@ export default { case "solarForecast": case "dimLimit": case "curtailLimit": + case "exportLimit": return this.fmtW(value); case "energy": case "returnEnergy": diff --git a/assets/js/views/Config.vue b/assets/js/views/Config.vue index cdbadbe52..0b6049c4d 100644 --- a/assets/js/views/Config.vue +++ b/assets/js/views/Config.vue @@ -846,14 +846,18 @@ export default defineComponent({ return store.state?.hems; }, hemsTags(): DeviceTags { + const result: DeviceTags = {}; + const exportLimit = store.state?.gridExportLimit || 0; + if (exportLimit > 0) { + result["exportLimit"] = { value: exportLimit }; + } if (this.hemsDevices.length === 0 && !this.hems?.config?.configured) { - return { configured: { value: false } }; + return exportLimit > 0 ? result : { configured: { value: false } }; } const status = store.state?.hems?.status; if (!status) { - return { configured: { value: true } }; + return { ...result, configured: { value: true } }; } - const result: DeviceTags = {}; if (status.dimmed && status.maxConsumptionPower) { result["dimLimit"] = { value: status.maxConsumptionPower, diff --git a/i18n/de.json b/i18n/de.json index bd29b8201..5e2974e4a 100644 --- a/i18n/de.json +++ b/i18n/de.json @@ -219,6 +219,7 @@ "enabled": "Ladebereit", "energy": "Energie", "events": "Ereignisse", + "exportLimit": "Einspeiselimit", "feedinPrice": "Einspeisevergütung", "forecast": "Vorhersage", "gridPrice": "Netzpreis", diff --git a/i18n/en.json b/i18n/en.json index 91eb2eddb..ddd122c5b 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -219,6 +219,7 @@ "enabled": "Enabled", "energy": "Energy", "events": "Events", + "exportLimit": "Grid export limit", "feedinPrice": "Feed-in price", "forecast": "Forecast", "gridPrice": "Grid price", diff --git a/tests/hems.spec.ts b/tests/hems.spec.ts index 5d529cbb0..e6e923b39 100644 --- a/tests/hems.spec.ts +++ b/tests/hems.spec.ts @@ -159,6 +159,12 @@ maxconsumptionpower: await hemsModal.getByRole("button", { name: "Close" }).click(); await expectModalHidden(hemsModal); + // card shows the static limit instead of unconfigured + const hemsCard = page.getByTestId("hems"); + await expect(hemsCard).toContainText("Grid export limit"); + await expect(hemsCard).toContainText("7.0 kW"); + await expect(hemsCard).not.toContainText("Configured"); + // persisted across restart await restart(CONFIG); await page.reload();