Skip to content

Commit c99c52e

Browse files
LKuemmelbenderl
andcommitted
Feature dashboard temporary settings (#2218)
* ids in charge and ev template config * dashboard temporary settings * topics * fixes * flake8 * fix rebase * update local mqtt bridge * fix * draft * draft * fixes * Wiki * format * fix rebase * fix rebase * test compatibility * fixes --------- Co-authored-by: Lutz Bender <github@lutz-bender.de>
1 parent b4cc470 commit c99c52e

23 files changed

Lines changed: 318 additions & 165 deletions

data/config/mosquitto/openwb_local.conf

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ 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
2527
topic openWB/chargepoint/+/get/# out 2
2628
topic openWB/chargepoint/+/config/# out 2
2729
topic openWB/chargepoint/template/# out 2

docs/Ladeprofile.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,10 @@ _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.7)
8+
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.
9+
Die temporären Einstellungen werden mit dem Ladeprofil aus den Einstellungen überschrieben, wenn
10+
... abgesteckt wird.
11+
... das Fahrzeug gewechselt wird. Das Lade-Profil des neuen Fahrzeugs wird geladen.
12+
... das Ladeprofil geändert wird und kein Fahrzeug angesteckt ist. Ist ein Fahrzeug angesteckt, gelten die temporären Einstellungen bis zum Abstecken und werden dann durch das Ladeprofil überschrieben.

packages/control/algorithm/additional_current_test.py

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

packages/control/algorithm/algorithm.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ def _check_auto_phase_switch_delay(self) -> None:
6262
# wurden, wieder zurückgegeben.
6363
log.debug(f"Ladepunkt {cp.num}: Prüfen, ob Phasenumschaltung durchgeführt werden soll.")
6464
phases, current, message = charging_ev.auto_phase_switch(
65+
cp.data.set.charge_template,
6566
cp.data.control_parameter,
6667
cp.num,
6768
cp.data.get.currents,

packages/control/algorithm/integration_test/pv_charging_test.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -223,9 +223,9 @@ def test_surplus(params: ParamsSurplus, all_cp_pv_charging_3p, all_cp_charging_3
223223
data.data.counter_data["counter6"].data.set.raw_currents_left = params.raw_currents_left_counter6
224224
mockget_component_name_by_id = Mock(return_value="Garage")
225225
monkeypatch.setattr(loadmanagement, "get_component_name_by_id", mockget_component_name_by_id)
226-
data.data.cp_data["cp3"].data.set.charging_ev_data.charge_template.data.chargemode.pv_charging.phases_to_use = 1
227-
data.data.cp_data["cp4"].data.set.charging_ev_data.charge_template.data.chargemode.pv_charging.phases_to_use = 1
228-
data.data.cp_data["cp5"].data.set.charging_ev_data.charge_template.data.chargemode.pv_charging.phases_to_use = 1
226+
data.data.cp_data["cp3"].data.set.charge_template.data.chargemode.pv_charging.phases_to_use = 1
227+
data.data.cp_data["cp4"].data.set.charge_template.data.chargemode.pv_charging.phases_to_use = 1
228+
data.data.cp_data["cp5"].data.set.charge_template.data.chargemode.pv_charging.phases_to_use = 1
229229

230230
# execution
231231
Algorithm().calc_current()

packages/control/algorithm/surplus_controlled.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,9 @@ def _set_loadmangement_message(self,
9595

9696
# tested
9797
def filter_by_feed_in_limit(self, chargepoints: List[Chargepoint]) -> Tuple[List[Chargepoint], List[Chargepoint]]:
98-
cp_with_feed_in = list(filter(lambda cp: cp.data.set.charging_ev_data.charge_template.data.chargemode.
98+
cp_with_feed_in = list(filter(lambda cp: cp.data.set.charge_template.data.chargemode.
9999
pv_charging.feed_in_limit is True, chargepoints))
100-
cp_without_feed_in = list(filter(lambda cp: cp.data.set.charging_ev_data.charge_template.data.chargemode.
100+
cp_without_feed_in = list(filter(lambda cp: cp.data.set.charge_template.data.chargemode.
101101
pv_charging.feed_in_limit is False, chargepoints))
102102
return cp_with_feed_in, cp_without_feed_in
103103

@@ -109,7 +109,7 @@ def _limit_adjust_current(self, chargepoint: Chargepoint, new_current: float) ->
109109
MAX_CURRENT = 30
110110
msg = None
111111
nominal_difference = chargepoint.data.set.charging_ev_data.ev_template.data.nominal_difference
112-
if chargepoint.data.set.charging_ev_data.chargemode_changed or chargepoint.data.get.charge_state is False:
112+
if chargepoint.chargemode_changed or chargepoint.data.get.charge_state is False:
113113
return new_current
114114
else:
115115
# Um max. +/- 5A pro Zyklus regeln
@@ -152,7 +152,7 @@ def check_submode_pv_charging(self) -> None:
152152
def phase_switch_necessary() -> bool:
153153
return cp.cp_ev_chargemode_support_phase_switch() and cp.data.get.phases_in_use != 1
154154
control_parameter = cp.data.control_parameter
155-
if cp.data.set.charging_ev_data.chargemode_changed or cp.data.set.charging_ev_data.submode_changed:
155+
if cp.chargemode_changed or cp.submode_changed:
156156
if control_parameter.state == ChargepointState.CHARGING_ALLOWED:
157157
if cp.data.set.charging_ev_data.ev_template.data.prevent_charge_stop is False:
158158
threshold = evu_counter.calc_switch_off_threshold(cp)[0]

packages/control/algorithm/surplus_controlled_test.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
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
1514
from control.ev.ev import Ev
1615

1716

@@ -40,10 +39,8 @@ def test_filter_by_feed_in_limit(feed_in_limit_1: bool,
4039
expected_sorted: int):
4140
# setup
4241
def setup_cp(cp: Chargepoint, feed_in_limit: bool) -> Chargepoint:
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))
42+
cp.data = ChargepointData()
43+
cp.data.set.charge_template.data.chargemode.pv_charging.feed_in_limit = feed_in_limit
4744
return cp
4845

4946
cp1 = setup_cp(mock_cp1, feed_in_limit_1)

packages/control/auto_phase_switch_test.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from control.chargepoint.control_parameter import ControlParameter
66
from control.counter import Counter, CounterData, Set
77

8+
from control.ev.charge_template import ChargeTemplate
89
from control.pv_all import PvAll
910
from control.bat_all import BatAll
1011
from control.general import General
@@ -131,7 +132,8 @@ def test_auto_phase_switch(monkeypatch, vehicle: Ev, params: Params):
131132
control_parameter.state = params.state
132133

133134
# execution
134-
phases_to_use, current, message = vehicle.auto_phase_switch(control_parameter,
135+
phases_to_use, current, message = vehicle.auto_phase_switch(ChargeTemplate(),
136+
control_parameter,
135137
0,
136138
params.get_currents,
137139
params.get_power,

0 commit comments

Comments
 (0)