From 20ce660d7a2acff8326c117ed7397e456b6c2ef3 Mon Sep 17 00:00:00 2001 From: andig Date: Wed, 29 Jul 2026 11:13:29 +0200 Subject: [PATCH] Battery: move grid discharge setting to battery page (#32256) Co-authored-by: Michael Geers --- .../components/Battery/BatteryConfigCard.vue | 24 ++++++++ .../Battery/BatteryExperimental.vue | 2 + assets/js/components/Config/BatteryModal.vue | 60 ------------------- assets/js/components/Config/GeneralConfig.vue | 14 ----- assets/js/views/Config.vue | 6 -- i18n/en.json | 3 +- 6 files changed, 27 insertions(+), 82 deletions(-) delete mode 100644 assets/js/components/Config/BatteryModal.vue diff --git a/assets/js/components/Battery/BatteryConfigCard.vue b/assets/js/components/Battery/BatteryConfigCard.vue index fa106b361..1b5e15d75 100644 --- a/assets/js/components/Battery/BatteryConfigCard.vue +++ b/assets/js/components/Battery/BatteryConfigCard.vue @@ -86,6 +86,19 @@ {{ $t("battery.config.discharge") }} +
+ + +
@@ -112,7 +125,9 @@ export default defineComponent({ prioritySoc: { type: Number, default: 0 }, bufferStartSoc: { type: Number, default: 0 }, batteryDischargeControl: Boolean, + batteryGridDischarge: Boolean, battery: { type: Object as PropType }, + experimental: Boolean, }, data() { return { @@ -244,6 +259,15 @@ export default defineComponent({ console.error(err); } }, + async changeGridDischarge(e: Event) { + const target = e.target as HTMLInputElement; + try { + await api.post(`batterygriddischarge/${target.checked}`); + } catch (err) { + target.checked = this.batteryGridDischarge; // revert to stay in sync with state + console.error(err); + } + }, getBufferStartName(value: number) { const key = value === 0 ? "never" : value === 100 ? "full" : "above"; return this.$t(`battery.config.bufferStart.${key}`, { soc: this.fmtSoc(value) }); diff --git a/assets/js/components/Battery/BatteryExperimental.vue b/assets/js/components/Battery/BatteryExperimental.vue index 672a5b5cc..187defdd5 100644 --- a/assets/js/components/Battery/BatteryExperimental.vue +++ b/assets/js/components/Battery/BatteryExperimental.vue @@ -20,7 +20,9 @@ :priority-soc="state.prioritySoc" :buffer-start-soc="state.bufferStartSoc" :battery-discharge-control="state.batteryDischargeControl" + :battery-grid-discharge="state.batteryGridDischarge" :battery="state.battery" + :experimental="state.experimental" /> - -

{{ $t("config.battery.description") }}

- -
- -
- -
-
-
- - - diff --git a/assets/js/components/Config/GeneralConfig.vue b/assets/js/components/Config/GeneralConfig.vue index c6e7076a3..8f6b98782 100644 --- a/assets/js/components/Config/GeneralConfig.vue +++ b/assets/js/components/Config/GeneralConfig.vue @@ -29,14 +29,6 @@ @edit="openModal('experimental')" /> - - b.controllable); - }, - batteryGridDischarge() { - return store.state?.batteryGridDischarge === true; - }, networkStatus() { return `${store.state?.network?.port ?? ""}`; }, diff --git a/assets/js/views/Config.vue b/assets/js/views/Config.vue index 8fd3efb35..cdbadbe52 100644 --- a/assets/js/views/Config.vue +++ b/assets/js/views/Config.vue @@ -481,7 +481,6 @@ - @@ -560,7 +559,6 @@ import TariffCard from "../components/Config/TariffCard.vue"; import TariffModal from "../components/Config/TariffModal.vue"; import TelemetryModal from "../components/Config/TelemetryModal.vue"; import ExperimentalModal from "../components/Config/ExperimentalModal.vue"; -import BatteryModal from "../components/Config/BatteryModal.vue"; import TitleModal from "../components/Config/TitleModal.vue"; import Header from "../components/Top/Header.vue"; import VehicleIcon from "../components/VehicleIcon"; @@ -650,7 +648,6 @@ export default defineComponent({ TariffModal, TelemetryModal, ExperimentalModal, - BatteryModal, TitleModal, TopHeader: Header, VehicleIcon, @@ -925,9 +922,6 @@ export default defineComponent({ experimental() { return store.state?.experimental; }, - batteryGridDischarge() { - return store.state?.batteryGridDischarge === true; - }, eebus() { return store.state?.eebus; }, diff --git a/i18n/en.json b/i18n/en.json index 1bb4da9bb..9946e903f 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -42,6 +42,7 @@ }, "bufferTitle": "Battery as charging buffer", "discharge": "Prevent home battery discharge in fast mode and during planned charging.", + "gridDischarge": "Allow home battery to discharge to the grid.", "priority": "Home battery has priority while it is below {soc}. Then the charging points receive the surplus.", "priorityNone": "Solar surplus goes straight to the charging points. Set a value above {soc} to prioritize the home battery.", "priorityTitle": "Where does the surplus go first?" @@ -119,8 +120,6 @@ "titleEdit": "Edit Self-Regulating Consumer" }, "battery": { - "description": "Experimental battery controls. These features are still being tested and may change or be removed in future versions.", - "gridDischarge": "Allow battery to discharge to the grid", "title": "Battery", "titleAdd": "Add Battery", "titleEdit": "Edit Battery"