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
31 changes: 27 additions & 4 deletions packages/control/chargelog/chargelog.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,11 +83,18 @@ def collect_data(chargepoint):
# Bisher geladene Energie ermitteln
log_data.imported_since_plugged = get_value_or_default(
lambda: chargepoint.data.get.imported - log_data.imported_at_plugtime, 0)
if get_value_or_default(lambda: log_data.exported_at_plugtime, 0) == 0:
log_data.exported_at_plugtime = get_value_or_default(lambda: chargepoint.data.get.exported, 0)
log_data.exported_since_plugged = get_value_or_default(
lambda: chargepoint.data.get.exported - log_data.exported_at_plugtime, 0)

if get_value_or_default(lambda: log_data.imported_at_mode_switch, 0) == 0:
log_data.imported_at_mode_switch = get_value_or_default(lambda: chargepoint.data.get.imported, 0)
log.debug(f"imported_at_mode_switch {log_data.imported_at_mode_switch}")

if get_value_or_default(lambda: log_data.exported_at_mode_switch, 0) == 0:
log_data.exported_at_mode_switch = get_value_or_default(lambda: chargepoint.data.get.exported, 0)

if get_value_or_default(lambda: log_data.timestamp_mode_switch) is None:
log_data.timestamp_mode_switch = now

Expand Down Expand Up @@ -117,6 +124,8 @@ def collect_data(chargepoint):
log_data.rfid = get_value_or_default(lambda: chargepoint.data.set.rfid)
log_data.imported_since_mode_switch = get_value_or_default(
lambda: chargepoint.data.get.imported - log_data.imported_at_mode_switch, 0)
log_data.exported_since_mode_switch = get_value_or_default(
lambda: chargepoint.data.get.exported - log_data.exported_at_mode_switch, 0)
log_data.range_charged = _get_range_charged(log_data, charging_ev)
else:
timestamp_start_charging = get_value_or_default(lambda: log_data.timestamp_start_charging)
Expand All @@ -134,7 +143,7 @@ def save_interim_data(chargepoint, charging_ev):
try:
log_data = chargepoint.data.set.log
# Es wurde noch nie ein Auto zugeordnet
if log_data.imported_since_mode_switch == 0:
if log_data.imported_since_mode_switch == 0 and log_data.exported_since_mode_switch == 0:
# Die Daten wurden schon erfasst.
return
save_data(chargepoint, charging_ev)
Expand All @@ -161,7 +170,8 @@ def save_and_reset_data(chargepoint, charging_ev, immediately: bool = True):
if chargepoint.data.get.power != 0:
# Das Fahrzeug hat die Ladung noch nicht beendet. Der Logeintrag wird später erstellt.
return
if chargepoint.data.set.log.imported_since_mode_switch > 0:
if (chargepoint.data.set.log.imported_since_mode_switch > 0 or
chargepoint.data.set.log.exported_since_mode_switch > 0):
# Die Daten wurden noch nicht erfasst.
save_data(chargepoint, charging_ev)
chargepoint.reset_log_data()
Expand All @@ -184,7 +194,8 @@ def _get_range_charged(log_data, charging_ev) -> float:
charging_ev.data.get.range - log_data.range_at_start, 2))
else:
return get_value_or_default(lambda: round(
(log_data.imported_since_mode_switch * charging_ev.ev_template.data.efficiency /
((log_data.imported_since_mode_switch - log_data.exported_since_mode_switch)
* charging_ev.ev_template.data.efficiency /
charging_ev.ev_template.data.average_consump), 2))
except Exception:
log.exception("Fehler beim Berechnen der geladenen Reichweite")
Expand All @@ -203,7 +214,8 @@ def save_data(chargepoint, charging_ev):
EV, das an diesem Ladepunkt lädt. (Wird extra übergeben, da es u.U. noch nicht zugewiesen ist und nur die
Nummer aus dem Broker in der LP-Klasse hinterlegt ist.)
"""
if chargepoint.data.set.log.imported_since_mode_switch != 0:
if (chargepoint.data.set.log.imported_since_mode_switch != 0 or
chargepoint.data.set.log.exported_since_mode_switch != 0):
new_entry = _create_entry(chargepoint, charging_ev)
write_new_entry(new_entry)

Expand All @@ -215,6 +227,10 @@ def _create_entry(chargepoint, charging_ev):
chargepoint.data.get.imported - log_data.imported_at_plugtime, 2))
log_data.imported_since_mode_switch = get_value_or_default(lambda: round(
chargepoint.data.get.imported - log_data.imported_at_mode_switch, 2))
log_data.exported_since_plugged = get_value_or_default(lambda: round(
chargepoint.data.get.exported - log_data.exported_at_plugtime, 2))
log_data.exported_since_mode_switch = get_value_or_default(lambda: round(
chargepoint.data.get.exported - log_data.exported_at_mode_switch, 2))
log_data.range_charged = _get_range_charged(log_data, charging_ev)
power = 0
if log_data.timestamp_start_charging:
Expand All @@ -240,6 +256,8 @@ def _create_entry(chargepoint, charging_ev):
"serial_number": get_value_or_default(lambda: chargepoint.data.get.serial_number),
"imported_at_start": get_value_or_default(lambda: log_data.imported_at_mode_switch),
"imported_at_end": get_value_or_default(lambda: chargepoint.data.get.imported),
"exported_at_start": get_value_or_default(lambda: log_data.exported_at_mode_switch),
"exported_at_end": get_value_or_default(lambda: chargepoint.data.get.exported),
},
"vehicle":
{
Expand All @@ -264,6 +282,8 @@ def _create_entry(chargepoint, charging_ev):
"data":
{
"range_charged": log_data.range_charged,
"exported_since_mode_switch": log_data.exported_since_mode_switch,
"exported_since_plugged": log_data.exported_since_plugged,
"imported_since_mode_switch": log_data.imported_since_mode_switch,
"imported_since_plugged": log_data.imported_since_plugged,
"power": power,
Expand Down Expand Up @@ -336,6 +356,9 @@ def calculate_charged_energy_by_source(cp, processed_entries, reference_entries,
raise TypeError(f"Unbekannter Referenz-Zeitpunkt {reference}")
log.debug(f'power source {relative_energy_source}')
log.debug(f"charged_energy {charged_energy}")
if charged_energy < 100:
# wenn nur entladen wurde, keine Anteile berechnen
return {source: 0 for source in ENERGY_SOURCES}
return _get_charged_energy_by_source(
relative_energy_source, charged_energy)

Expand Down
3 changes: 3 additions & 0 deletions packages/control/chargepoint/chargepoint.py
Original file line number Diff line number Diff line change
Expand Up @@ -275,6 +275,9 @@ def remember_previous_values(self):
def reset_log_data_chargemode_switch(self) -> None:
reset_log = Log()
# Wenn ein Zwischeneintrag, zB bei Wechsel des Lademodus, erstellt wird, Zählerstände nicht verwerfen.
reset_log.exported_at_mode_switch = self.data.get.exported
reset_log.exported_at_plugtime = self.data.set.log.exported_at_plugtime
reset_log.exported_since_plugged = self.data.set.log.exported_since_plugged
reset_log.imported_at_mode_switch = self.data.get.imported
reset_log.imported_at_plugtime = self.data.set.log.imported_at_plugtime
reset_log.imported_since_plugged = self.data.set.log.imported_since_plugged
Expand Down
4 changes: 4 additions & 0 deletions packages/control/chargepoint/chargepoint_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,10 @@ class Log:
charged_energy_by_source: Dict[str, float] = field(default_factory=empty_enery_source_dict_factory)
costs: float = 0
end: Optional[float] = None
exported_at_mode_switch: float = 0
exported_at_plugtime: float = 0
exported_since_mode_switch: float = 0
exported_since_plugged: float = 0
imported_at_mode_switch: float = 0
imported_at_plugtime: float = 0
imported_since_mode_switch: float = 0
Expand Down
5 changes: 4 additions & 1 deletion packages/helpermodules/measurement_logging/process_log.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,12 @@ def get_default_charge_log_columns() -> Dict:
"vehicle_soc_at_end": False,
"chargepoint_name": True,
"chargepoint_serial_number": False,
"data_exported_since_mode_switch": False,
"data_imported_since_mode_switch": True,
"chargepoint_exported_at_start": False,
"chargepoint_exported_at_end": False,
"chargepoint_imported_at_start": False,
"chargepoint_imported_at_end": False
"chargepoint_imported_at_end": False,
}


Expand Down
16 changes: 15 additions & 1 deletion 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 = 104
DATASTORE_VERSION = 105

valid_topic = [
"^openWB/bat/config/bat_control_permitted$",
Expand Down Expand Up @@ -2665,3 +2665,17 @@ def upgrade(topic: str, payload) -> None:
return {topic: provider}
self._loop_all_received_topics(upgrade)
self._append_datastore_version(104)

def upgrade_datastore_105(self) -> None:
def upgrade(topic: str, payload) -> None:
if "openWB/general/charge_log_data_config" == topic:
config = decode_payload(payload)
if config.get("data_exported_since_mode_switch") is None:
config["data_exported_since_mode_switch"] = False
if config.get("chargepoint_exported_at_start") is None:
config["chargepoint_exported_at_start"] = False
if config.get("chargepoint_exported_at_end") is None:
config["chargepoint_exported_at_end"] = False
return {topic: config}
self._loop_all_received_topics(upgrade)
self._append_datastore_version(105)