From 4d963a7b91ba1ea71e7f2a9499bc695b032ede7f Mon Sep 17 00:00:00 2001 From: BrettS Date: Tue, 17 Mar 2026 08:57:34 +0100 Subject: [PATCH 01/11] Add range slider for PV charging - Battery SoC range --- .../src/components/BatterySettingsDialog.vue | 21 +++++++++++ .../source/src/composables/useBatteryModes.ts | 4 +-- .../source/src/stores/mqtt-store-model.ts | 5 +++ .../koala/source/src/stores/mqtt-store.ts | 35 +++++++++++++++++++ 4 files changed, 63 insertions(+), 2 deletions(-) diff --git a/packages/modules/web_themes/koala/source/src/components/BatterySettingsDialog.vue b/packages/modules/web_themes/koala/source/src/components/BatterySettingsDialog.vue index 483b4783e0..8005a48b6d 100644 --- a/packages/modules/web_themes/koala/source/src/components/BatterySettingsDialog.vue +++ b/packages/modules/web_themes/koala/source/src/components/BatterySettingsDialog.vue @@ -5,6 +5,7 @@ :backdrop-filter="isSmallScreen ? '' : 'blur(4px)'" > + {{ batteryRange }}
Speicher-Beachtung:
@@ -18,6 +19,17 @@
Überschuss primär für:
+ +
SoC-Bereich des Speichers:
+ +
@@ -48,4 +60,13 @@ const name = computed(() => { defineExpose({ open: () => (isOpen.value = true), }); + +const batteryMode = computed(() => mqttStore.batteryMode().value); + +const batteryRange = computed({ + get: () => mqttStore.batteryChargePriorityRange, + set: (value) => { + mqttStore.batteryChargePriorityRange = value; + }, +}); diff --git a/packages/modules/web_themes/koala/source/src/composables/useBatteryModes.ts b/packages/modules/web_themes/koala/source/src/composables/useBatteryModes.ts index 27591cbdf4..12d260b412 100644 --- a/packages/modules/web_themes/koala/source/src/composables/useBatteryModes.ts +++ b/packages/modules/web_themes/koala/source/src/composables/useBatteryModes.ts @@ -16,10 +16,10 @@ export const useBatteryModes = () => { }, { value: 'min_soc_bat_mode', - label: 'Mindest-SoC', + label: 'Nach SoC des Speichers', color: 'primary', icon: 'battery_4_bar', - tooltip: 'Mindest-SoC des Speichers', + tooltip: 'Nach SoC des Speichers', }, ]; diff --git a/packages/modules/web_themes/koala/source/src/stores/mqtt-store-model.ts b/packages/modules/web_themes/koala/source/src/stores/mqtt-store-model.ts index 9aaa806cd4..2020c6da8b 100644 --- a/packages/modules/web_themes/koala/source/src/stores/mqtt-store-model.ts +++ b/packages/modules/web_themes/koala/source/src/stores/mqtt-store-model.ts @@ -224,3 +224,8 @@ export interface CounterConfiguration { id: number; configuration: object; } + +export interface BatteryChargePriorityRange { + min: number; + max: number; +} diff --git a/packages/modules/web_themes/koala/source/src/stores/mqtt-store.ts b/packages/modules/web_themes/koala/source/src/stores/mqtt-store.ts index 06468262fa..c02fb0e657 100644 --- a/packages/modules/web_themes/koala/source/src/stores/mqtt-store.ts +++ b/packages/modules/web_themes/koala/source/src/stores/mqtt-store.ts @@ -27,6 +27,7 @@ import type { VehicleChargeTarget, CalculatedSocState, SystemCommandEvent, + BatteryChargePriorityRange, } from './mqtt-store-model'; export const useMqttStore = defineStore('mqtt', () => { @@ -1921,6 +1922,39 @@ export const useMqttStore = defineStore('mqtt', () => { }); }; + /** + * Get or set the battery charge priority SoC range for PV charging + * @returns BatteryChargePriorityRange + */ + const batteryChargePriorityRange = computed({ + get() { + const minSoc = getValue.value( + 'openWB/general/chargemode_config/pv_charging/min_bat_soc', + ) as number | undefined; + const maxSoc = getValue.value( + 'openWB/general/chargemode_config/pv_charging/max_bat_soc', + ) as number | undefined; + return { + min: minSoc ?? 0, + max: maxSoc ?? 100, + }; + }, + set(newRange: BatteryChargePriorityRange) { + updateTopic( + 'openWB/general/chargemode_config/pv_charging/min_bat_soc', + newRange.min, + undefined, + true, + ); + updateTopic( + 'openWB/general/chargemode_config/pv_charging/max_bat_soc', + newRange.max, + undefined, + true, + ); + }, + }); + /** * Get or set the charge point connected vehicle eco energy limit identified by the charge point id * @param chargePointId charge point id @@ -4055,6 +4089,7 @@ export const useMqttStore = defineStore('mqtt', () => { batteryDailyImportedTotal, batteryDailyExportedTotal, batteryTotalPower, + batteryChargePriorityRange, batteryMode, // Grid data getGridId, From 9d8ad46c152ed328a0ba4a989a1cb9078172d216 Mon Sep 17 00:00:00 2001 From: BrettS Date: Tue, 17 Mar 2026 11:11:05 +0100 Subject: [PATCH 02/11] format tittle and range slider labels --- .../src/components/BatterySettingsDialog.vue | 57 ++++++++++++++----- 1 file changed, 43 insertions(+), 14 deletions(-) diff --git a/packages/modules/web_themes/koala/source/src/components/BatterySettingsDialog.vue b/packages/modules/web_themes/koala/source/src/components/BatterySettingsDialog.vue index 8005a48b6d..667fd06030 100644 --- a/packages/modules/web_themes/koala/source/src/components/BatterySettingsDialog.vue +++ b/packages/modules/web_themes/koala/source/src/components/BatterySettingsDialog.vue @@ -4,14 +4,23 @@ :maximized="isSmallScreen" :backdrop-filter="isSmallScreen ? '' : 'blur(4px)'" > - - {{ batteryRange }} + +
-
Speicher-Beachtung:
-
{{ name }}
+
+
Speicher-Beachtung:
+
{{ name }}
+
- +
@@ -20,15 +29,16 @@ -
SoC-Bereich des Speichers:
- +
SoC-Bereich des Speichers % :
+
@@ -70,3 +80,22 @@ const batteryRange = computed({ }, }); + From 6631da4aae729c85ce33d3e7f0873a8eb81bda3e Mon Sep 17 00:00:00 2001 From: BrettS Date: Tue, 17 Mar 2026 17:43:16 +0100 Subject: [PATCH 03/11] Add child component RangeSliderStandard --- .../source/src/components/BatteryCard.vue | 2 +- .../src/components/BatterySettingsDialog.vue | 38 ++--- .../src/components/RangeSliderStandard.vue | 135 ++++++++++++++++++ 3 files changed, 149 insertions(+), 26 deletions(-) create mode 100644 packages/modules/web_themes/koala/source/src/components/RangeSliderStandard.vue diff --git a/packages/modules/web_themes/koala/source/src/components/BatteryCard.vue b/packages/modules/web_themes/koala/source/src/components/BatteryCard.vue index 202d5a9390..74b1861c64 100644 --- a/packages/modules/web_themes/koala/source/src/components/BatteryCard.vue +++ b/packages/modules/web_themes/koala/source/src/components/BatteryCard.vue @@ -36,7 +36,7 @@ v-if="showSettings" class="row q-mt-md justify-between text-subtitle2" > -
Laden mit Überschuss:
+
Ladepriorität:
-
Speicher-Beachtung:
@@ -25,20 +24,18 @@ -
Überschuss primär für:
+
Ladepriorität:
-
- -
SoC-Bereich des Speichers % :
- +
+ +
@@ -48,6 +45,7 @@ import { computed, ref } from 'vue'; import { Screen } from 'quasar'; import BatteryModeButtons from './BatteryModeButtons.vue'; +import RangeSliderStandard from './RangeSliderStandard.vue'; import { useMqttStore } from 'src/stores/mqtt-store'; const isOpen = ref(false); @@ -82,20 +80,10 @@ const batteryRange = computed({ diff --git a/packages/modules/web_themes/koala/source/src/components/RangeSliderStandard.vue b/packages/modules/web_themes/koala/source/src/components/RangeSliderStandard.vue new file mode 100644 index 0000000000..03c81fc1f8 --- /dev/null +++ b/packages/modules/web_themes/koala/source/src/components/RangeSliderStandard.vue @@ -0,0 +1,135 @@ + + + + From dc5875347a86fa5c09bab357b5a6aa049a3342fa Mon Sep 17 00:00:00 2001 From: BrettS Date: Wed, 18 Mar 2026 16:11:10 +0100 Subject: [PATCH 04/11] make composable for slider debounce delay --- .../src/components/RangeSliderStandard.vue | 76 +++---------- .../source/src/components/SliderStandard.vue | 101 +++++------------- .../source/src/composables/useDelayModel.ts | 80 ++++++++++++++ 3 files changed, 120 insertions(+), 137 deletions(-) create mode 100644 packages/modules/web_themes/koala/source/src/composables/useDelayModel.ts diff --git a/packages/modules/web_themes/koala/source/src/components/RangeSliderStandard.vue b/packages/modules/web_themes/koala/source/src/components/RangeSliderStandard.vue index 03c81fc1f8..d8f579ec67 100644 --- a/packages/modules/web_themes/koala/source/src/components/RangeSliderStandard.vue +++ b/packages/modules/web_themes/koala/source/src/components/RangeSliderStandard.vue @@ -1,7 +1,7 @@ -