Skip to content

Commit 26a98d4

Browse files
ndrsnhsLKuemmel
andauthored
bat hysteresis (openWB#778)
* move bat control to seperate page * move active bat control to new page * improve helptexts * improve helptexts * improve helptexts * second slider * Revert "second slider" This reverts commit cc6e915. * remove unused font * correct helptext * adjust line length of helpttext * add max_soc slider * adjust helptexts * improbe helptext --------- Co-authored-by: LKuemmel <[email protected]>
1 parent ef541b4 commit 26a98d4

File tree

5 files changed

+361
-246
lines changed

5 files changed

+361
-246
lines changed

src/components/OpenwbPageNavbar.vue

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,13 @@
125125
>
126126
PV-Laden
127127
</router-link>
128+
<router-link
129+
to="/ActiveBatControl"
130+
class="dropdown-item"
131+
active-class="active disabled"
132+
>
133+
Speichersteuerung
134+
</router-link>
128135
</div>
129136
</li>
130137
<li class="nav-item dropdown">

src/router/index.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,14 @@ const routes = [
7070
},
7171
component: () => import("../views/PVChargeConfig.vue"),
7272
},
73+
{
74+
path: "/ActiveBatControl",
75+
name: "ActiveBatControl",
76+
meta: {
77+
heading: "Ladeeinstellungen - Speichersteuerung",
78+
},
79+
component: () => import("../views/ActiveBatControl.vue"),
80+
},
7381
{
7482
path: "/HardwareInstallation",
7583
name: "HardwareInstallation",

src/views/ActiveBatControl.vue

Lines changed: 345 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,345 @@
1+
<template>
2+
<div class="batteryConfig">
3+
<form name="batteryConfigForm">
4+
<openwb-base-card title="Passive Speicherbeachtung (PV)">
5+
<div v-if="$store.state.mqtt['openWB/general/extern'] === true">
6+
<openwb-base-alert subtype="info">
7+
Diese Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet.
8+
</openwb-base-alert>
9+
</div>
10+
<div v-else>
11+
<openwb-base-alert subtype="info">
12+
Die Regelmodi der Speicherbeachtung erfolgen "passiv" durch Anpassung der Fahrzeug-Ladeleistung. PV-Überschuss
13+
wird, je nach Konfiguration, entweder dem Fahrzeug zugeteilt oder dem Speicher überlassen. Netz- und
14+
Speicherbezug wird, sofern nicht anders konfiguriert, vermieden.
15+
</openwb-base-alert>
16+
<openwb-base-button-group-input
17+
v-model="batMode"
18+
title="Ladepriorität"
19+
:buttons="[{ buttonValue: 'ev_mode' }, { buttonValue: 'bat_mode' }, { buttonValue: 'min_soc_bat_mode' }]"
20+
>
21+
<template #label-ev_mode>
22+
<font-awesome-icon
23+
fixed-width
24+
:icon="['fas', 'car-side']"
25+
/>
26+
Fahrzeuge
27+
</template>
28+
<template #label-bat_mode>
29+
<font-awesome-icon
30+
fixed-width
31+
:icon="['fas', 'fa-car-battery']"
32+
/>
33+
Speicher
34+
</template>
35+
<template #label-min_soc_bat_mode>
36+
<font-awesome-icon
37+
fixed-width
38+
:icon="['fas', 'fa-battery-half']"
39+
/>
40+
Nach SoC des Speichers
41+
</template>
42+
<template #help>
43+
<div v-if="batMode === 'ev_mode'">
44+
Der gesamte Überschuss wird in das EV geladen. Wird mehr Überschuss erzeugt
45+
als die Fahrzeuge abnehmen, findet auch eine Speicherladung statt.
46+
</div>
47+
<div v-if="batMode === 'bat_mode'">
48+
Der gesamte Überschuss wird in den Speicher geladen. Ist die maximale Ladeleistung des
49+
Speichers erreicht und es wird eingespeist, wird dieser Überschuss unter Beachtung der Einschaltschwelle
50+
in die Fahrzeuge geladen.
51+
</div>
52+
<div v-if="batMode === 'min_soc_bat_mode'">
53+
Verhält sich bis zum Erreichen des Mindest-SoC wie "Ladepriorität Speicher" und oberhalb
54+
des Mindest-SoC wie "Ladepriorität Fahrzeuge".
55+
Die maximale Leistung der Speicherbe- und entladung lässt sich hier festlegen.
56+
</div>
57+
</template>
58+
</openwb-base-button-group-input>
59+
<div v-if="batMode === 'min_soc_bat_mode'">
60+
<openwb-base-range-input
61+
title="Mindest-SoC des Speichers"
62+
:min="0"
63+
:max="100"
64+
:step="1"
65+
unit="%"
66+
required
67+
:model-value="$store.state.mqtt['openWB/general/chargemode_config/pv_charging/min_bat_soc']"
68+
@update:model-value="
69+
updateState('openWB/general/chargemode_config/pv_charging/min_bat_soc', $event),
70+
updateState('openWB/general/chargemode_config/pv_charging/max_bat_soc',
71+
($store.state.mqtt['openWB/general/chargemode_config/pv_charging/min_bat_soc'] <
72+
$store.state.mqtt['openWB/general/chargemode_config/pv_charging/max_bat_soc']) ?
73+
$store.state.mqtt['openWB/general/chargemode_config/pv_charging/max_bat_soc'] :
74+
$event)
75+
"
76+
>
77+
<template #help>
78+
Unterhalb des Mindest SoC wird vorhandener PV-Überschuss bevorzugt in den Speicher geladen.
79+
Oberhalb des Mindest-SoC hat die Fahrzeugladung Priorität.
80+
</template>
81+
</openwb-base-range-input>
82+
<openwb-base-range-input
83+
title="Maximal-SoC des Speichers"
84+
:min="0"
85+
:max="100"
86+
:step="1"
87+
unit="%"
88+
required
89+
:model-value="$store.state.mqtt['openWB/general/chargemode_config/pv_charging/max_bat_soc']"
90+
@update:model-value="
91+
updateState('openWB/general/chargemode_config/pv_charging/max_bat_soc', $event),
92+
updateState('openWB/general/chargemode_config/pv_charging/min_bat_soc',
93+
($store.state.mqtt['openWB/general/chargemode_config/pv_charging/max_bat_soc'] >
94+
$store.state.mqtt['openWB/general/chargemode_config/pv_charging/min_bat_soc']) ?
95+
$store.state.mqtt['openWB/general/chargemode_config/pv_charging/min_bat_soc'] :
96+
$event)
97+
"
98+
>
99+
<template #help>
100+
Wird der Maximal-SoC überschritten, darf der Speicher bis zum Erreichen des Mindest-SoC
101+
zur Fahrzeugladung mitbenutzt werden.
102+
</template>
103+
</openwb-base-range-input>
104+
<openwb-base-alert
105+
v-if="
106+
$store.state.mqtt['openWB/general/chargemode_config/pv_charging/min_bat_soc'] ==
107+
$store.state.mqtt['openWB/general/chargemode_config/pv_charging/max_bat_soc']
108+
"
109+
subtype="info"
110+
>
111+
Bei identischen SoC Angaben findet keine Speicherhysterese statt.
112+
</openwb-base-alert>
113+
<openwb-base-heading> Speicher-Ladeleistung unterhalb Mindest-SoC </openwb-base-heading>
114+
<openwb-base-button-group-input
115+
title="Nur eine bestimmte Ladeleistung reservieren"
116+
:buttons="[
117+
{
118+
buttonValue: false,
119+
text: 'Nein',
120+
class: 'btn-outline-danger',
121+
},
122+
{
123+
buttonValue: true,
124+
text: 'Ja',
125+
class: 'btn-outline-success',
126+
},
127+
]"
128+
:model-value="$store.state.mqtt['openWB/general/chargemode_config/pv_charging/bat_power_reserve_active']"
129+
@update:model-value="
130+
updateState('openWB/general/chargemode_config/pv_charging/bat_power_reserve_active', $event)
131+
"
132+
>
133+
<template #help
134+
v-if="$store.state.mqtt['openWB/general/chargemode_config/pv_charging/bat_power_reserve_active']"
135+
>
136+
ACHTUNG: Der hier eingestellte Wert darf die maximale Ladeleistung des Speichers nicht überschreiten!<br />
137+
Befindet sich der Speicher unterhalb des Mindest-SoC, wird er mit der hier eingestellten
138+
Speicherladeleistung geladen. Verbleibender Überschuss wird in die Fahrzeuge geladen.
139+
</template>
140+
<template #help v-else >
141+
Befindet sich der Speicher unterhalb des Mindest-SoC, wird er priorisiert geladen.
142+
</template>
143+
</openwb-base-button-group-input>
144+
<openwb-base-number-input
145+
v-if="$store.state.mqtt['openWB/general/chargemode_config/pv_charging/bat_power_reserve_active']"
146+
title="Reservierte Ladeleistung"
147+
:min="0.1"
148+
:step="0.1"
149+
unit="kW"
150+
required
151+
:model-value="$store.state.mqtt['openWB/general/chargemode_config/pv_charging/bat_power_reserve'] / 1000"
152+
@update:model-value="
153+
updateState('openWB/general/chargemode_config/pv_charging/bat_power_reserve', $event * 1000)
154+
"
155+
/>
156+
<openwb-base-heading> Speicher-SoC oberhalb Maximal-SoC </openwb-base-heading>
157+
<openwb-base-button-group-input
158+
title="Entladung des Speichers erlauben"
159+
:buttons="[
160+
{
161+
buttonValue: false,
162+
text: 'Nein',
163+
class: 'btn-outline-danger',
164+
},
165+
{
166+
buttonValue: true,
167+
text: 'Ja',
168+
class: 'btn-outline-success',
169+
},
170+
]"
171+
:model-value="
172+
$store.state.mqtt['openWB/general/chargemode_config/pv_charging/bat_power_discharge_active']
173+
"
174+
@update:model-value="
175+
updateState('openWB/general/chargemode_config/pv_charging/bat_power_discharge_active', $event)
176+
"
177+
>
178+
<template #help
179+
v-if="$store.state.mqtt['openWB/general/chargemode_config/pv_charging/bat_power_discharge_active']"
180+
>
181+
ACHTUNG: Der hier eingestellte Wert darf die maximale Entadeleistung des Speichers nicht überschreiten!
182+
Wird der Maximal-SoC überschritten, wird die PV-Ladung mit der hier eingestellten Speicherentladeleistung
183+
unterstützt. Der Speicher darf bis zum Mindest-SoC entladen werden. Die erlaubte Entladeleistung des Speichers
184+
wird dem Überschuss zum Erreichen der Einschaltschwelle hinzugerechnet.
185+
</template>
186+
<template #help v-else>
187+
Oberhalb des Maximal-SoC wird der Speicher nicht für die Fahrzeugladung mitgenutzt.
188+
</template>
189+
</openwb-base-button-group-input>
190+
<openwb-base-number-input
191+
v-if="$store.state.mqtt['openWB/general/chargemode_config/pv_charging/bat_power_discharge_active']"
192+
title="Erlaubte Entladeleistung"
193+
:min="0.1"
194+
:step="0.1"
195+
unit="kW"
196+
required
197+
:model-value="
198+
$store.state.mqtt['openWB/general/chargemode_config/pv_charging/bat_power_discharge'] / 1000
199+
"
200+
@update:model-value="
201+
updateState('openWB/general/chargemode_config/pv_charging/bat_power_discharge', $event * 1000)
202+
"
203+
/>
204+
</div>
205+
</div>
206+
</openwb-base-card>
207+
<openwb-base-card title="Aktive Speichersteuerung">
208+
<div v-if="$store.state.mqtt['openWB/general/extern'] === true">
209+
<openwb-base-alert subtype="info">
210+
Diese Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet.
211+
</openwb-base-alert>
212+
</div>
213+
<div v-else>
214+
<openwb-base-alert subtype="info" class="mb-3">
215+
<p>
216+
Die aktive Speichersteuerung durch openWB basiert auf öffentlich zugänglichen Informationen zu den
217+
verschiedenen Speichersystemen. Diese können auch nicht herstellerseitig freigegebene Informationen
218+
beinhalten.<br />
219+
Fragen bezüglich der Gewährleistung und Hardwarekompatibilität sind vor der Nutzung mit dem Hersteller zu
220+
klären. openWB übernimmt keine Haftung für Schäden, welche aus der Nutzung der "aktiven Speichersteuerung"
221+
entstehen.
222+
</p>
223+
<openwb-base-button-group-input
224+
title="Hinweise zur aktiven Speichersteuerung gelesen und akzeptiert"
225+
:buttons="[
226+
{ buttonValue: false, text: 'Nein', class: 'btn-outline-danger' },
227+
{ buttonValue: true, text: 'Ja', class: 'btn-outline-success' },
228+
]"
229+
:model-value="$store.state.mqtt['openWB/bat/config/bat_control_permitted']"
230+
@update:model-value="updateState('openWB/bat/config/bat_control_permitted', $event)"
231+
/>
232+
</openwb-base-alert>
233+
234+
<div v-if="$store.state.mqtt['openWB/bat/config/bat_control_permitted'] === true">
235+
<openwb-base-heading class="mt-0"> Regelmodi der aktiven Speichersteuerung </openwb-base-heading>
236+
<openwb-base-alert subtype="info">
237+
Die aktive Speichersteuerung kann Speicherentladung in allen Lademodi begrenzen - z.B. Vermeidung
238+
von Netzbezug bei Sofortladen. Die erlaubte Entladeleistung des Speichers (Speicherbeachtung PV)
239+
wird bei aktiver Speichersteuerung überschrieben, da Speicherentladung aktiv begrenzt wird.
240+
</openwb-base-alert>
241+
<div v-if="$store.state.mqtt['openWB/bat/get/power_limit_controllable'] === true">
242+
<openwb-base-button-group-input
243+
v-model="powerLimit"
244+
title="Speichersteuerung"
245+
:buttons="[
246+
{
247+
buttonValue: 'no_limit',
248+
text: 'Aus',
249+
},
250+
{
251+
buttonValue: 'limit_stop',
252+
text: 'volle Entladesperre',
253+
},
254+
{
255+
buttonValue: 'limit_to_home_consumption',
256+
text: 'Entladung in Fahrzeuge sperren',
257+
},
258+
]"
259+
:model-value="$store.state.mqtt['openWB/bat/config/power_limit_mode']"
260+
@update:model-value="updateState('openWB/bat/config/power_limit_mode', $event)"
261+
>
262+
<template #help>
263+
<div v-if="$store.state.mqtt['openWB/bat/config/power_limit_mode'] === 'no_limit'">
264+
Der Speicher regelt eigenständig und wird nicht gesteuert. Es greift nur die konfigurierte Speicherbeachtung.
265+
</div>
266+
<div v-if="$store.state.mqtt['openWB/bat/config/power_limit_mode'] === 'limit_stop'">
267+
Die Speicherentladung wird komplett gesperrt, sobald ein Fahrzeug lädt! Alle Verbraucher
268+
(Fahrzeuge, Hausverbrauch) werden durch Netzstrom versorgt.
269+
</div>
270+
<div v-if="$store.state.mqtt['openWB/bat/config/power_limit_mode'] === 'limit_to_home_consumption'">
271+
Fahrzeugladung erzeugt Netzbezug statt Speicherentladung. Weitere Verbraucher (bspw. Hausverbrauch) werden durch
272+
den Speicher ausgeglichen. Kann die Entladung am Speicher nur komplett gesperrt werden, verhält sich diese
273+
Einstellung wie "volle Entladesperre".
274+
</div>
275+
</template>
276+
</openwb-base-button-group-input>
277+
</div>
278+
<div v-else>
279+
<openwb-base-alert subtype="info">
280+
Die Speicher-Entladung ins Fahrzeug kann nicht gesteuert werden, da die Entladeleistung nicht an den/die
281+
konfigurierten Speicher übergeben werden kann.
282+
</openwb-base-alert>
283+
</div>
284+
</div>
285+
</div>
286+
</openwb-base-card>
287+
<openwb-base-submit-buttons
288+
form-name="batteryConfigForm"
289+
@save="$emit('save')"
290+
@reset="$emit('reset')"
291+
@defaults="$emit('defaults')"
292+
/>
293+
</form>
294+
</div>
295+
</template>
296+
297+
<script>
298+
import ComponentState from "../components/mixins/ComponentState.vue";
299+
300+
import { library } from "@fortawesome/fontawesome-svg-core";
301+
import {
302+
faCarBattery as fasCarBattery,
303+
faCarSide as fasCarSide,
304+
faBatteryHalf as fasBatteryHalf,
305+
} from "@fortawesome/free-solid-svg-icons";
306+
import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome";
307+
308+
library.add(fasCarBattery, fasCarSide, fasBatteryHalf);
309+
310+
export default {
311+
name: "OpenwbPVChargeConfigView",
312+
components: {
313+
FontAwesomeIcon,
314+
},
315+
mixins: [ComponentState],
316+
emits: ["save", "reset", "defaults"],
317+
data() {
318+
return {
319+
mqttTopicsToSubscribe: [
320+
"openWB/general/extern",
321+
"openWB/general/chargemode_config/pv_charging/bat_mode",
322+
"openWB/general/chargemode_config/pv_charging/bat_power_reserve",
323+
"openWB/general/chargemode_config/pv_charging/bat_power_reserve_active",
324+
"openWB/general/chargemode_config/pv_charging/bat_power_discharge",
325+
"openWB/general/chargemode_config/pv_charging/bat_power_discharge_active",
326+
"openWB/general/chargemode_config/pv_charging/min_bat_soc",
327+
"openWB/general/chargemode_config/pv_charging/max_bat_soc",
328+
"openWB/bat/config/bat_control_permitted",
329+
"openWB/bat/get/power_limit_controllable",
330+
"openWB/bat/config/power_limit_mode",
331+
],
332+
};
333+
},
334+
computed: {
335+
batMode: {
336+
get() {
337+
return this.$store.state.mqtt["openWB/general/chargemode_config/pv_charging/bat_mode"];
338+
},
339+
set(newMode) {
340+
this.updateState("openWB/general/chargemode_config/pv_charging/bat_mode", newMode);
341+
},
342+
},
343+
},
344+
};
345+
</script>

0 commit comments

Comments
 (0)