Skip to content

Commit 8ebed2f

Browse files
committed
Revert "Feature simplify chargemode (openWB#2276)"
This reverts commit 8df44b8.
1 parent 92a8531 commit 8ebed2f

220 files changed

Lines changed: 2564 additions & 26295 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/build_web_theme_koala.yml

Lines changed: 0 additions & 37 deletions
This file was deleted.

data/config/mosquitto/openwb_local.conf

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# openwb-version:19
1+
# openwb-version:18
22
listener 1886 localhost
33
allow_anonymous true
44

@@ -22,8 +22,6 @@ topic openWB/chargepoint/+/set/phases_to_use out 2
2222
topic openWB/chargepoint/+/set/manual_lock out 2
2323
topic openWB/chargepoint/+/set/autolock_state out 2
2424
topic openWB/chargepoint/+/set/rfid out 2
25-
topic openWB/chargepoint/+/set/charge_template out 2
26-
topic openWB/chargepoint/+/set/charge_template/# out 2
2725
topic openWB/chargepoint/+/get/# out 2
2826
topic openWB/chargepoint/+/config/# out 2
2927
topic openWB/chargepoint/template/# out 2

docs/Ladeprofile.md

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,3 @@ _Einstellungen -> Konfiguration -> Fahrzeuge -> Lade-Profile_
33
Unter den Lade-Profilen werden die Einstellungen für das Ladeprofil verwaltet. Die Einstellungen auf der Hauptseite werden aus diesem Profil geladen und dorthin geschrieben. Ist nur ein Fahrzeug vorhanden, so wird in den meisten Fällen nur das Standard-Ladeprofil benötigt. Ausgenommen hiervon ist, wenn per RFID-Tag Ladevorgaben ausgewählt werden.
44

55
In den fahrzeugspezifischen Einstellungen wird ein Ladeprofil einem Fahrzeug zugeordnet. Werden zwei Fahrzeuge geladen, empfiehlt es sich dazu ein zweites Ladeprofil anzulegen.
6-
7-
### Temporäre Ladeprofile (ab Version 2.1.8)
8-
9-
Anpassungen am Ladeprofil, die über die Hauptseite (Web-Themes) oder ein Display (Display-Themes) vorgenommen werden, sind temporär. Die Lade-Profile müssen direkt in den Einstellungen bearbeitet werden.
10-
11-
Die temporären Einstellungen werden mit dem Ladeprofil aus den Einstellungen überschrieben, wenn ...
12-
13-
* abgesteckt wird.
14-
* das Fahrzeug gewechselt wird. Das Lade-Profil des neuen Fahrzeugs wird geladen.
15-
* das Ladeprofil in den Einstellungen geändert wird.

docs/MQTT.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ openWB hat einen eigenen MQTT-Broker integriert, über den die Kommunikation lä
99

1010
Als EVU-Zähler können auch Werte über MQTT empfangen werden. Die Integration ist im Abschnitt [Zähler](https://github.com/openWB/core/wiki/Zähler) beschrieben.
1111

12-
## SmartHome
12+
## Smarthome
1313

1414
## Steuerbefehle
1515

@@ -32,8 +32,8 @@ SoC-Limit auf z.B. 80% setzen
3232
Zielladen
3333
`openWB/set/vehicle/template/charge_template/#/chargemode/selected -> scheduled_charging`
3434

35-
Eco
36-
`openWB/set/vehicle/template/charge_template/#/chargemode/selected -> eco_charging`
35+
Standby
36+
`openWB/set/vehicle/template/charge_template/#/chargemode/selected -> standby`
3737

3838
Stop
3939
`openWB/set/vehicle/template/charge_template/#/chargemode/selected -> stop`
@@ -50,7 +50,7 @@ openWB/vehicle/template/charge_template/1
5050
Setzen von min_Current für min+PV nachbauen:
5151
`openWB/set/vehicle/template/charge_template/#/chargemode/pv_charging/min_current`
5252

53-
Setzen des Lademodus: (Werte die zu senden sind: instant_charging, pv_charging, scheduled_charging, eco_charging, stop)
53+
Setzen des Lademodus: (Werte die zu senden sind: instant_charging, pv_charging, scheduled_charging, standby, stop)
5454
`openWB/set/vehicle/template/charge_template/#/chargemode/selected`
5555

5656
Ladepunkt sperren für Priosteuerung der LP:

packages/control/algorithm/additional_current_test.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
def test_set_loadmangement_message(set_current, limit, expected_msg, monkeypatch):
3131
# setup
3232
ev = Ev(0)
33-
ev.charge_template = ChargeTemplate()
33+
ev.charge_template = ChargeTemplate(0)
3434
cp1 = Chargepoint(1, None)
3535
cp1.data = ChargepointData(set=Set(current=set_current),
3636
control_parameter=ControlParameter(required_currents=[8]*3))

packages/control/algorithm/algorithm.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@ def _check_auto_phase_switch_delay(self) -> None:
6161
# wurden, wieder zurückgegeben.
6262
log.debug(f"Ladepunkt {cp.num}: Prüfen, ob Phasenumschaltung durchgeführt werden soll.")
6363
phases, current, message = charging_ev.auto_phase_switch(
64-
cp.data.set.charge_template,
6564
cp.data.control_parameter,
6665
cp.num,
6766
cp.data.get.currents,

packages/control/algorithm/chargemodes.py

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,19 @@
88
(None, Chargemode.TIME_CHARGING, False),
99
(Chargemode.INSTANT_CHARGING, Chargemode.INSTANT_CHARGING, True),
1010
(Chargemode.INSTANT_CHARGING, Chargemode.INSTANT_CHARGING, False),
11-
(Chargemode.ECO_CHARGING, Chargemode.INSTANT_CHARGING, True),
12-
(Chargemode.ECO_CHARGING, Chargemode.INSTANT_CHARGING, False),
1311
(Chargemode.PV_CHARGING, Chargemode.INSTANT_CHARGING, True),
1412
(Chargemode.PV_CHARGING, Chargemode.INSTANT_CHARGING, False),
1513
(Chargemode.SCHEDULED_CHARGING, Chargemode.PV_CHARGING, True),
1614
(Chargemode.SCHEDULED_CHARGING, Chargemode.PV_CHARGING, False),
17-
(Chargemode.ECO_CHARGING, Chargemode.PV_CHARGING, True),
18-
(Chargemode.ECO_CHARGING, Chargemode.PV_CHARGING, False),
1915
(Chargemode.PV_CHARGING, Chargemode.PV_CHARGING, True),
2016
(Chargemode.PV_CHARGING, Chargemode.PV_CHARGING, False),
17+
(None, Chargemode.STANDBY, True),
18+
(None, Chargemode.STANDBY, False),
2119
(None, Chargemode.STOP, True),
2220
(None, Chargemode.STOP, False))
2321

24-
CONSIDERED_CHARGE_MODES_SURPLUS = CHARGEMODES[0:2] + CHARGEMODES[6:16]
25-
CONSIDERED_CHARGE_MODES_PV_ONLY = CHARGEMODES[10:16]
26-
CONSIDERED_CHARGE_MODES_ADDITIONAL_CURRENT = CHARGEMODES[0:10]
22+
CONSIDERED_CHARGE_MODES_SURPLUS = CHARGEMODES[0:2] + CHARGEMODES[6:12]
23+
CONSIDERED_CHARGE_MODES_PV_ONLY = CHARGEMODES[8:12]
24+
CONSIDERED_CHARGE_MODES_ADDITIONAL_CURRENT = CHARGEMODES[0:8]
2725
CONSIDERED_CHARGE_MODES_MIN_CURRENT = CHARGEMODES[0:-1]
28-
CONSIDERED_CHARGE_MODES_NO_CURRENT = CHARGEMODES[16:18]
26+
CONSIDERED_CHARGE_MODES_NO_CURRENT = CHARGEMODES[12:16]

packages/control/algorithm/integration_test/pv_charging_test.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from control.chargemode import Chargemode
88
from control import data, loadmanagement
99
from control.algorithm.algorithm import Algorithm
10+
from control.algorithm.algorithm import data as algorithm_data
1011
from control.chargepoint.chargepoint_template import CpTemplate
1112
from control.chargepoint.chargepoint_state import ChargepointState
1213
from dataclass_utils.factories import currents_list_factory
@@ -272,6 +273,8 @@ def test_phase_switch(all_cp_pv_charging_3p, all_cp_charging_3p, monkeypatch):
272273
data.data.counter_data["counter0"].data.set.raw_power_left = cases_phase_switch[0].raw_power_left
273274
data.data.counter_data["counter0"].data.set.raw_currents_left = cases_phase_switch[0].raw_currents_left_counter0
274275
data.data.counter_data["counter6"].data.set.raw_currents_left = cases_phase_switch[0].raw_currents_left_counter6
276+
mockget_get_phases_chargemode = Mock(return_value=0)
277+
monkeypatch.setattr(algorithm_data.data.general_data, "get_phases_chargemode", mockget_get_phases_chargemode)
275278
data.data.cp_data[
276279
"cp3"].data.control_parameter.state = ChargepointState.CHARGING_ALLOWED
277280
data.data.cp_data[
@@ -293,6 +296,8 @@ def test_phase_switch_1p_3p(all_cp_pv_charging_1p, monkeypatch):
293296
data.data.counter_data["counter0"].data.set.raw_power_left = cases_phase_switch[1].raw_power_left
294297
data.data.counter_data["counter0"].data.set.raw_currents_left = cases_phase_switch[1].raw_currents_left_counter0
295298
data.data.counter_data["counter6"].data.set.raw_currents_left = cases_phase_switch[1].raw_currents_left_counter6
299+
mockget_get_phases_chargemode = Mock(return_value=0)
300+
monkeypatch.setattr(algorithm_data.data.general_data, "get_phases_chargemode", mockget_get_phases_chargemode)
296301
data.data.cp_data["cp3"].data.get.currents = [32, 0, 0]
297302
data.data.cp_data["cp3"].data.get.power = 7360
298303
data.data.cp_data["cp3"].data.control_parameter.timestamp_last_phase_switch = 1652682252

packages/control/algorithm/surplus_controlled.py

Lines changed: 39 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -99,9 +99,9 @@ def _set_loadmangement_message(self,
9999

100100
# tested
101101
def filter_by_feed_in_limit(self, chargepoints: List[Chargepoint]) -> Tuple[List[Chargepoint], List[Chargepoint]]:
102-
cp_with_feed_in = list(filter(lambda cp: cp.data.set.charge_template.data.chargemode.
102+
cp_with_feed_in = list(filter(lambda cp: cp.data.set.charging_ev_data.charge_template.data.chargemode.
103103
pv_charging.feed_in_limit is True, chargepoints))
104-
cp_without_feed_in = list(filter(lambda cp: cp.data.set.charge_template.data.chargemode.
104+
cp_without_feed_in = list(filter(lambda cp: cp.data.set.charging_ev_data.charge_template.data.chargemode.
105105
pv_charging.feed_in_limit is False, chargepoints))
106106
return cp_with_feed_in, cp_without_feed_in
107107

@@ -113,7 +113,7 @@ def _limit_adjust_current(self, chargepoint: Chargepoint, new_current: float) ->
113113
MAX_CURRENT = 30
114114
msg = None
115115
nominal_difference = chargepoint.data.set.charging_ev_data.ev_template.data.nominal_difference
116-
if chargepoint.chargemode_changed or chargepoint.data.get.charge_state is False:
116+
if chargepoint.data.set.charging_ev_data.chargemode_changed or chargepoint.data.get.charge_state is False:
117117
return new_current
118118
else:
119119
# Um max. +/- 5A pro Zyklus regeln
@@ -153,56 +153,49 @@ def check_submode_pv_charging(self) -> None:
153153
evu_counter = data.data.counter_all_data.get_evu_counter()
154154

155155
for cp in get_chargepoints_by_chargemodes(CONSIDERED_CHARGE_MODES_PV_ONLY):
156-
try:
157-
def phase_switch_necessary() -> bool:
158-
return cp.cp_ev_chargemode_support_phase_switch() and cp.data.get.phases_in_use != 1
159-
control_parameter = cp.data.control_parameter
160-
if cp.chargemode_changed or cp.submode_changed:
161-
if control_parameter.state == ChargepointState.CHARGING_ALLOWED:
162-
if cp.data.set.charging_ev_data.ev_template.data.prevent_charge_stop is False:
163-
threshold = evu_counter.calc_switch_off_threshold(cp)[0]
164-
if evu_counter.calc_raw_surplus() - cp.data.set.required_power < threshold:
165-
control_parameter.required_currents = [0]*3
166-
control_parameter.state = ChargepointState.NO_CHARGING_ALLOWED
167-
else:
168-
control_parameter.required_currents = [0]*3
156+
def phase_switch_necessary() -> bool:
157+
return cp.cp_ev_chargemode_support_phase_switch() and cp.data.get.phases_in_use != 1
158+
control_parameter = cp.data.control_parameter
159+
if cp.data.set.charging_ev_data.chargemode_changed or cp.data.set.charging_ev_data.submode_changed:
160+
if control_parameter.state == ChargepointState.CHARGING_ALLOWED:
161+
if cp.data.set.charging_ev_data.ev_template.data.prevent_charge_stop is False:
162+
threshold = evu_counter.calc_switch_off_threshold(cp)[0]
163+
if evu_counter.calc_raw_surplus() - cp.data.set.required_power < threshold:
164+
control_parameter.required_currents = [0]*3
165+
control_parameter.state = ChargepointState.NO_CHARGING_ALLOWED
169166
else:
170-
if ((control_parameter.state == ChargepointState.CHARGING_ALLOWED or
171-
control_parameter.state == ChargepointState.SWITCH_OFF_DELAY) and
172-
phase_switch_necessary() is False):
173-
evu_counter.switch_off_check_threshold(cp)
174-
if control_parameter.state == ChargepointState.SWITCH_OFF_DELAY:
175-
evu_counter.switch_off_check_timer(cp)
176-
if control_parameter.state == ChargepointState.SWITCH_ON_DELAY:
177-
# Wenn charge_state False und set_current > 0, will Auto nicht laden
178-
evu_counter.switch_on_timer_expired(cp)
179-
if control_parameter.state not in CHARGING_STATES:
180-
control_parameter.required_currents = [0]*3
181-
except Exception:
182-
log.exception(f"Fehler in der PV-gesteuerten Ladung bei {cp.num}")
167+
control_parameter.required_currents = [0]*3
168+
else:
169+
if ((control_parameter.state == ChargepointState.CHARGING_ALLOWED or
170+
control_parameter.state == ChargepointState.SWITCH_OFF_DELAY) and
171+
phase_switch_necessary() is False):
172+
evu_counter.switch_off_check_threshold(cp)
173+
if control_parameter.state == ChargepointState.SWITCH_OFF_DELAY:
174+
evu_counter.switch_off_check_timer(cp)
175+
if control_parameter.state == ChargepointState.SWITCH_ON_DELAY:
176+
# Wenn charge_state False und set_current > 0, will Auto nicht laden
177+
evu_counter.switch_on_timer_expired(cp)
178+
if control_parameter.state not in CHARGING_STATES:
179+
control_parameter.required_currents = [0]*3
183180

184181
def set_required_current_to_max(self) -> None:
185182
for cp in get_chargepoints_by_chargemodes(CONSIDERED_CHARGE_MODES_SURPLUS):
186-
try:
187-
charging_ev_data = cp.data.set.charging_ev_data
188-
required_currents = cp.data.control_parameter.required_currents
189-
control_parameter = cp.data.control_parameter
183+
charging_ev_data = cp.data.set.charging_ev_data
184+
required_currents = cp.data.control_parameter.required_currents
185+
control_parameter = cp.data.control_parameter
186+
187+
if control_parameter.phases == 1:
188+
max_current = charging_ev_data.ev_template.data.max_current_single_phase
189+
else:
190+
max_current = charging_ev_data.ev_template.data.max_current_multi_phases
190191

192+
if cp.template.data.charging_type == ChargingType.AC.value:
191193
if control_parameter.phases == 1:
192194
max_current = charging_ev_data.ev_template.data.max_current_single_phase
193195
else:
194196
max_current = charging_ev_data.ev_template.data.max_current_multi_phases
197+
else:
198+
max_current = charging_ev_data.ev_template.data.dc_max_current
195199

196-
if cp.template.data.charging_type == ChargingType.AC.value:
197-
if control_parameter.phases == 1:
198-
max_current = charging_ev_data.ev_template.data.max_current_single_phase
199-
else:
200-
max_current = charging_ev_data.ev_template.data.max_current_multi_phases
201-
else:
202-
max_current = charging_ev_data.ev_template.data.dc_max_current
203-
204-
control_parameter.required_currents = [
205-
max_current if required_currents[i] != 0 else 0 for i in range(3)]
206-
control_parameter.required_current = max_current
207-
except Exception:
208-
log.exception(f"Fehler in der PV-gesteuerten Ladung bei {cp.num}")
200+
control_parameter.required_currents = [max_current if required_currents[i] != 0 else 0 for i in range(3)]
201+
control_parameter.required_current = max_current

packages/control/algorithm/surplus_controlled_test.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from control.chargepoint.chargepoint_data import Get, Set
1212
from control.chargepoint.chargepoint_template import CpTemplate
1313
from control.chargepoint.control_parameter import ControlParameter
14+
from control.ev.charge_template import ChargeTemplate
1415
from control.ev.ev import Ev
1516

1617

@@ -39,8 +40,10 @@ def test_filter_by_feed_in_limit(feed_in_limit_1: bool,
3940
expected_sorted: int):
4041
# setup
4142
def setup_cp(cp: Chargepoint, feed_in_limit: bool) -> Chargepoint:
42-
cp.data = ChargepointData()
43-
cp.data.set.charge_template.data.chargemode.pv_charging.feed_in_limit = feed_in_limit
43+
ev = Ev(0)
44+
ev.charge_template = ChargeTemplate(0)
45+
ev.charge_template.data.chargemode.pv_charging.feed_in_limit = feed_in_limit
46+
cp.data = ChargepointData(set=Set(charging_ev_data=ev))
4447
return cp
4548

4649
cp1 = setup_cp(mock_cp1, feed_in_limit_1)

0 commit comments

Comments
 (0)