Skip to content

Commit b0346de

Browse files
committed
temp charge templates as option (openWB#2855)
* draft * draft * temp charge templates optional
1 parent 68f82f2 commit b0346de

5 files changed

Lines changed: 45 additions & 30 deletions

File tree

packages/control/chargepoint/chargepoint.py

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@
3636
from control import phase_switch
3737
from control.chargepoint.chargepoint_state import CHARGING_STATES, ChargepointState
3838
from control.text import BidiState
39-
from helpermodules.broker import BrokerClient
4039
from helpermodules.phase_mapping import convert_single_evu_phase_to_cp_phase
4140
from helpermodules.pub import Pub
4241
from helpermodules import timecheck
@@ -843,20 +842,11 @@ def _get_charging_ev(self, vehicle: int, ev_list: Dict[str, Ev]) -> Ev:
843842
Pub().pub("openWB/set/chargepoint/"+str(self.num)+"/set/charging_ev_prev", vehicle)
844843
return charging_ev
845844

846-
def _clear_template_topics(self, topic: str) -> None:
847-
def on_connect(client, userdata, flags, rc):
848-
client.subscribe(topic, 2)
849-
850-
def __get_payload(client, userdata, msg):
851-
received_topics.append(msg.topic)
852-
received_topics = []
853-
BrokerClient("processBrokerBranch", on_connect, __get_payload).start_finite_loop()
854-
for topic in received_topics:
855-
Pub().pub(topic, "")
856-
857845
def update_charge_template(self, charge_template: ChargeTemplate) -> None:
858-
Pub().pub(f"openWB/set/chargepoint/{self.num}/set/charge_template",
859-
dataclasses.asdict(charge_template.data))
846+
if data.data.general_data.data.temporary_charge_templates_active:
847+
# Prüfen, ob ein temporäres Ladeprofil aktiv ist und dieses übernehmen
848+
Pub().pub(f"openWB/set/chargepoint/{self.num}/set/charge_template",
849+
dataclasses.asdict(charge_template.data))
860850

861851
def _pub_connected_vehicle(self, vehicle: Ev):
862852
""" published die Daten, die zur Anzeige auf der Hauptseite benötigt werden.

packages/control/general.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ class GeneralData:
100100
http_api: bool = field(
101101
default=False, metadata={"topic": "http_api"})
102102
mqtt_bridge: bool = False
103+
temporary_charge_templates_active: bool = False
103104
prices: Prices = field(default_factory=prices_factory)
104105
range_unit: str = "km"
105106

packages/helpermodules/setdata.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import paho.mqtt.client as mqtt
1111

1212
import logging
13+
from control import data
1314
from helpermodules import hardware_configuration, subdata
1415
from helpermodules.broker import BrokerClient
1516
from helpermodules.pub import Pub, pub_single
@@ -407,6 +408,26 @@ def process_vehicle_charge_template_topic(self, msg: mqtt.MQTTMessage):
407408
try:
408409
if "charge_template" in msg.topic:
409410
self._validate_value(msg, "json")
411+
if data.data.general_data.data.temporary_charge_templates_active is False:
412+
if "openWB/set/chargepoint/" in msg.topic and "/set/charge_template" in msg.topic:
413+
payload = decode_payload(msg.payload)
414+
Pub().pub(f"openWB/vehicle/template/charge_template/{payload['id']}", payload)
415+
else:
416+
get_index(msg.topic)
417+
418+
for vehicle in data.data.ev_data.values():
419+
if vehicle.data.charge_template == int(get_index(msg.topic)):
420+
for cp in data.data.cp_data.values():
421+
if ((cp.data.set.charging_ev != -1 and
422+
cp.data.set.charging_ev == vehicle.num) or
423+
cp.data.config.ev == vehicle.num):
424+
if decode_payload(msg.payload) == "":
425+
Pub().pub(
426+
f"openWB/chargepoint/{cp.num}/set/charge_template", "")
427+
else:
428+
Pub().pub(
429+
f"openWB/chargepoint/{cp.num}/set/charge_template",
430+
decode_payload(msg.payload))
410431
else:
411432
self.__unknown_topic(msg)
412433
except Exception:
@@ -754,6 +775,8 @@ def process_general_topic(self, msg: mqtt.MQTTMessage):
754775
self._validate_value(msg, float, [(0, 99.99)])
755776
elif "openWB/set/general/range_unit" in msg.topic:
756777
self._validate_value(msg, str)
778+
elif "openWB/set/general/temporary_charge_templates_active" in msg.topic:
779+
self._validate_value(msg, bool)
757780
elif "openWB/set/general/web_theme" in msg.topic:
758781
self._validate_value(msg, "json")
759782
elif ("openWB/set/general/charge_log_data_config" in msg.topic):

packages/helpermodules/subdata.py

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -338,18 +338,7 @@ def process_vehicle_charge_template_topic(self, var: Dict[str, ChargeTemplate],
338338
if "ct"+index not in var:
339339
var["ct"+index] = ChargeTemplate()
340340
var["ct"+index].data = dataclass_from_dict(ChargeTemplateData, decode_payload(msg.payload))
341-
# Temporäres ChargeTemplate aktualisieren, wenn persistentes geändert wird
342-
for vehicle in self.ev_data.values():
343-
if vehicle.data.charge_template == int(index):
344-
for cp in self.cp_data.values():
345-
if (((cp.chargepoint.data.set.charging_ev != -1 and
346-
cp.chargepoint.data.set.charging_ev == vehicle.num) or
347-
cp.chargepoint.data.config.ev == vehicle.num) and
348-
cp.chargepoint.data.get.plug_state is False):
349-
if decode_payload(msg.payload) == "":
350-
Pub().pub(f"openWB/chargepoint/{cp.chargepoint.num}/set/charge_template", "")
351-
else:
352-
cp.chargepoint.update_charge_template(var["ct"+index])
341+
353342
except Exception:
354343
log.exception("Fehler im subdata-Modul")
355344

packages/helpermodules/update_config.py

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@
5757

5858
class UpdateConfig:
5959

60-
DATASTORE_VERSION = 96
60+
DATASTORE_VERSION = 97
6161

6262
valid_topic = [
6363
"^openWB/bat/config/bat_control_permitted$",
@@ -215,6 +215,7 @@ class UpdateConfig:
215215
"^openWB/general/grid_protection_timestamp$",
216216
"^openWB/general/grid_protection_random_stop$",
217217
"^openWB/general/range_unit$",
218+
"^openWB/general/temporary_charge_templates_active$",
218219
"^openWB/general/notifications/selected$",
219220
"^openWB/general/notifications/configuration$",
220221
"^openWB/general/notifications/start_charging$",
@@ -565,6 +566,7 @@ class UpdateConfig:
565566
("openWB/general/prices/grid", Prices().grid),
566567
("openWB/general/prices/pv", Prices().pv),
567568
("openWB/general/range_unit", "km"),
569+
("openWB/general/temporary_charge_templates_active", False),
568570
("openWB/general/web_theme", dataclass_utils.asdict(StandardLegacyWebTheme())),
569571
("openWB/graph/config/duration", 120),
570572
("openWB/internal_chargepoint/0/data/parent_cp", None),
@@ -2350,9 +2352,6 @@ def upgrade(topic: str, payload) -> None:
23502352
self.__update_topic("openWB/system/datastore_version", 88)
23512353

23522354
def upgrade_datastore_88(self) -> None:
2353-
pub_system_message({}, "Änderungen, die du auf der Hauptseite vornimmst, gelten nur vorübergehend, bis das "
2354-
"Fahrzeug abgesteckt wird. \nDie dauerhaften Einstellungen aus dem Einstellungsmenü werden "
2355-
"danach automatisch wieder aktiviert.", MessageType.INFO)
23562355
pub_system_message({}, "Es gibt ein neues Theme: das Koala-Theme! Smarthpone-optimiert und mit "
23572356
"Energiefluss-Diagramm & Karten-Ansicht der Ladepunkte", MessageType.INFO)
23582357
self.__update_topic("openWB/system/datastore_version", 89)
@@ -2560,3 +2559,16 @@ def upgrade(topic: str, payload) -> Optional[dict]:
25602559
return {topic: payload}
25612560
self._loop_all_received_topics(upgrade)
25622561
self.__update_topic("openWB/system/datastore_version", 96)
2562+
2563+
def upgrade_datastore_96(self) -> None:
2564+
version = decode_payload(self.all_received_topics.get("openWB/system/version", "2.1.9")).split("-")[0]
2565+
major, minor, feature = (int(x) for x in version.split("."))
2566+
if (2, 1, 7) <= (major, minor, feature) <= (2, 1, 8):
2567+
self.__update_topic("openWB/general/temporary_charge_templates_active", True)
2568+
pub_system_message(
2569+
{},
2570+
"Die temporären Ladeeinstellungen können ab jetzt benutzerdefiniert unter Einstellungen -> Allgemein"
2571+
" -> Darstellung & Bedienung angewendet werden.",
2572+
MessageType.INFO,
2573+
)
2574+
self.__update_topic("openWB/system/datastore_version", 97)

0 commit comments

Comments
 (0)