Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 4 additions & 14 deletions packages/control/chargepoint/chargepoint.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@
from control import phase_switch
from control.chargepoint.chargepoint_state import CHARGING_STATES, ChargepointState
from control.text import BidiState
from helpermodules.broker import BrokerClient
from helpermodules.phase_mapping import convert_single_evu_phase_to_cp_phase
from helpermodules.pub import Pub
from helpermodules import timecheck
Expand Down Expand Up @@ -843,20 +842,11 @@ def _get_charging_ev(self, vehicle: int, ev_list: Dict[str, Ev]) -> Ev:
Pub().pub("openWB/set/chargepoint/"+str(self.num)+"/set/charging_ev_prev", vehicle)
return charging_ev

def _clear_template_topics(self, topic: str) -> None:
def on_connect(client, userdata, flags, rc):
client.subscribe(topic, 2)

def __get_payload(client, userdata, msg):
received_topics.append(msg.topic)
received_topics = []
BrokerClient("processBrokerBranch", on_connect, __get_payload).start_finite_loop()
for topic in received_topics:
Pub().pub(topic, "")

def update_charge_template(self, charge_template: ChargeTemplate) -> None:
Pub().pub(f"openWB/set/chargepoint/{self.num}/set/charge_template",
dataclasses.asdict(charge_template.data))
if data.data.general_data.data.temporary_charge_templates_active:
# Prüfen, ob ein temporäres Ladeprofil aktiv ist und dieses übernehmen
Pub().pub(f"openWB/set/chargepoint/{self.num}/set/charge_template",
dataclasses.asdict(charge_template.data))

def _pub_connected_vehicle(self, vehicle: Ev):
""" published die Daten, die zur Anzeige auf der Hauptseite benötigt werden.
Expand Down
1 change: 1 addition & 0 deletions packages/control/general.py
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@ class GeneralData:
http_api: bool = field(
default=False, metadata={"topic": "http_api"})
mqtt_bridge: bool = False
temporary_charge_templates_active: bool = False
prices: Prices = field(default_factory=prices_factory)
range_unit: str = "km"

Expand Down
28 changes: 26 additions & 2 deletions packages/helpermodules/setdata.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import paho.mqtt.client as mqtt

import logging
from control import data
from helpermodules import hardware_configuration, subdata
from helpermodules.broker import BrokerClient
from helpermodules.pub import Pub, pub_single
Expand Down Expand Up @@ -407,6 +408,26 @@ def process_vehicle_charge_template_topic(self, msg: mqtt.MQTTMessage):
try:
if "charge_template" in msg.topic:
self._validate_value(msg, "json")
if data.data.general_data.data.temporary_charge_templates_active is False:
if "openWB/set/chargepoint/" in msg.topic and "/set/charge_template" in msg.topic:
payload = decode_payload(msg.payload)
Pub().pub(f"openWB/vehicle/template/charge_template/{payload['id']}", payload)
else:
get_index(msg.topic)

for vehicle in data.data.ev_data.values():
if vehicle.data.charge_template == int(get_index(msg.topic)):
for cp in data.data.cp_data.values():
if ((cp.data.set.charging_ev != -1 and
cp.data.set.charging_ev == vehicle.num) or
cp.data.config.ev == vehicle.num):
if decode_payload(msg.payload) == "":
Pub().pub(
f"openWB/chargepoint/{cp.num}/set/charge_template", "")
else:
Pub().pub(
f"openWB/chargepoint/{cp.num}/set/charge_template",
decode_payload(msg.payload))
else:
self.__unknown_topic(msg)
except Exception:
Expand Down Expand Up @@ -551,7 +572,7 @@ def process_chargepoint_get_topics(self, msg):
elif ("/get/evse_current" in msg.topic or
"/get/max_evse_current" in msg.topic):
# AC-EVSE: 0, 6-32, 600-3200, DC-EVSE 0-500
self._validate_value(msg, float, [(0, 3200)])
self._validate_value(msg, float, [(-3200, 3200)])
elif ("/get/version" in msg.topic or
"/get/current_branch" in msg.topic or
"/get/current_commit" in msg.topic):
Expand Down Expand Up @@ -610,7 +631,8 @@ def process_pv_topic(self, msg: mqtt.MQTTMessage):
"/get/yearly_exported" in msg.topic or
"/get/energy" in msg.topic):
self._validate_value(msg, float, [(0, float("inf"))])
elif "/get/exported" in msg.topic:
elif ("/get/exported" in msg.topic or
"/get/imported" in msg.topic):
self._validate_value(msg, float, [(0, float("inf"))])
elif "/get/power" in msg.topic:
self._validate_value(msg, float)
Expand Down Expand Up @@ -754,6 +776,8 @@ def process_general_topic(self, msg: mqtt.MQTTMessage):
self._validate_value(msg, float, [(0, 99.99)])
elif "openWB/set/general/range_unit" in msg.topic:
self._validate_value(msg, str)
elif "openWB/set/general/temporary_charge_templates_active" in msg.topic:
self._validate_value(msg, bool)
elif "openWB/set/general/web_theme" in msg.topic:
self._validate_value(msg, "json")
elif ("openWB/set/general/charge_log_data_config" in msg.topic):
Expand Down
13 changes: 1 addition & 12 deletions packages/helpermodules/subdata.py
Original file line number Diff line number Diff line change
Expand Up @@ -338,18 +338,7 @@ def process_vehicle_charge_template_topic(self, var: Dict[str, ChargeTemplate],
if "ct"+index not in var:
var["ct"+index] = ChargeTemplate()
var["ct"+index].data = dataclass_from_dict(ChargeTemplateData, decode_payload(msg.payload))
# Temporäres ChargeTemplate aktualisieren, wenn persistentes geändert wird
for vehicle in self.ev_data.values():
if vehicle.data.charge_template == int(index):
for cp in self.cp_data.values():
if (((cp.chargepoint.data.set.charging_ev != -1 and
cp.chargepoint.data.set.charging_ev == vehicle.num) or
cp.chargepoint.data.config.ev == vehicle.num) and
cp.chargepoint.data.get.plug_state is False):
if decode_payload(msg.payload) == "":
Pub().pub(f"openWB/chargepoint/{cp.chargepoint.num}/set/charge_template", "")
else:
cp.chargepoint.update_charge_template(var["ct"+index])

except Exception:
log.exception("Fehler im subdata-Modul")

Expand Down
20 changes: 16 additions & 4 deletions packages/helpermodules/update_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@

class UpdateConfig:

DATASTORE_VERSION = 96
DATASTORE_VERSION = 97

valid_topic = [
"^openWB/bat/config/bat_control_permitted$",
Expand Down Expand Up @@ -215,6 +215,7 @@ class UpdateConfig:
"^openWB/general/grid_protection_timestamp$",
"^openWB/general/grid_protection_random_stop$",
"^openWB/general/range_unit$",
"^openWB/general/temporary_charge_templates_active$",
"^openWB/general/notifications/selected$",
"^openWB/general/notifications/configuration$",
"^openWB/general/notifications/start_charging$",
Expand Down Expand Up @@ -565,6 +566,7 @@ class UpdateConfig:
("openWB/general/prices/grid", Prices().grid),
("openWB/general/prices/pv", Prices().pv),
("openWB/general/range_unit", "km"),
("openWB/general/temporary_charge_templates_active", False),
("openWB/general/web_theme", dataclass_utils.asdict(StandardLegacyWebTheme())),
("openWB/graph/config/duration", 120),
("openWB/internal_chargepoint/0/data/parent_cp", None),
Expand Down Expand Up @@ -2350,9 +2352,6 @@ def upgrade(topic: str, payload) -> None:
self.__update_topic("openWB/system/datastore_version", 88)

def upgrade_datastore_88(self) -> None:
pub_system_message({}, "Änderungen, die du auf der Hauptseite vornimmst, gelten nur vorübergehend, bis das "
"Fahrzeug abgesteckt wird. \nDie dauerhaften Einstellungen aus dem Einstellungsmenü werden "
"danach automatisch wieder aktiviert.", MessageType.INFO)
pub_system_message({}, "Es gibt ein neues Theme: das Koala-Theme! Smarthpone-optimiert und mit "
"Energiefluss-Diagramm & Karten-Ansicht der Ladepunkte", MessageType.INFO)
self.__update_topic("openWB/system/datastore_version", 89)
Expand Down Expand Up @@ -2560,3 +2559,16 @@ def upgrade(topic: str, payload) -> Optional[dict]:
return {topic: payload}
self._loop_all_received_topics(upgrade)
self.__update_topic("openWB/system/datastore_version", 96)

def upgrade_datastore_96(self) -> None:
version = decode_payload(self.all_received_topics.get("openWB/system/version", "2.1.9")).split("-")[0]
major, minor, feature = (int(x) for x in version.split("."))
if (2, 1, 7) <= (major, minor, feature) <= (2, 1, 8):
self.__update_topic("openWB/general/temporary_charge_templates_active", True)
pub_system_message(
{},
"Die temporären Ladeeinstellungen können ab jetzt benutzerdefiniert unter Einstellungen -> Allgemein"
" -> Darstellung & Bedienung angewendet werden.",
MessageType.INFO,
)
self.__update_topic("openWB/system/datastore_version", 97)