Skip to content

Commit c911221

Browse files
authored
chargelog: time charged only if charge state true (#2726)
* time charged only if plug state true * fix * charge start and end * review: use variable for now
1 parent 791d913 commit c911221

2 files changed

Lines changed: 29 additions & 12 deletions

File tree

packages/control/chargelog/chargelog.py

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ def collect_data(chargepoint):
6969
Ladepunkt, dessen Logdaten gesammelt werden
7070
"""
7171
try:
72+
now = timecheck.create_timestamp()
7273
log_data = chargepoint.data.set.log
7374
charging_ev = chargepoint.data.set.charging_ev_data
7475
if chargepoint.data.get.plug_state:
@@ -82,10 +83,13 @@ def collect_data(chargepoint):
8283
if log_data.imported_at_mode_switch == 0:
8384
log_data.imported_at_mode_switch = chargepoint.data.get.imported
8485
log.debug(f"imported_at_mode_switch {chargepoint.data.get.imported}")
85-
# Bei einem Wechsel das Lademodus wird ein neuer Eintrag erstellt.
86+
if log_data.timestamp_mode_switch is None:
87+
log_data.timestamp_mode_switch = now
8688
if chargepoint.data.get.charge_state:
8789
if log_data.timestamp_start_charging is None:
88-
log_data.timestamp_start_charging = timecheck.create_timestamp()
90+
log_data.timestamp_start_charging = now
91+
if log_data.begin is None:
92+
log_data.begin = now
8993
if charging_ev.soc_module:
9094
log_data.range_at_start = charging_ev.data.get.range
9195
log_data.soc_at_start = charging_ev.data.get.soc
@@ -102,7 +106,11 @@ def collect_data(chargepoint):
102106
# f"counter {chargepoint.data.get.imported}")
103107
log_data.range_charged = get_value_or_default(lambda: log_data.imported_since_mode_switch /
104108
charging_ev.ev_template.data.average_consump * 100)
105-
log_data.time_charged = timecheck.get_difference_to_now(log_data.timestamp_start_charging)[0]
109+
else:
110+
if log_data.timestamp_start_charging is not None:
111+
log_data.time_charged += now - log_data.timestamp_start_charging
112+
log_data.timestamp_start_charging = None
113+
log_data.end = now
106114
Pub().pub(f"openWB/set/chargepoint/{chargepoint.num}/set/log", asdict(log_data))
107115
except Exception:
108116
log.exception("Fehler im Ladelog-Modul")
@@ -114,7 +122,7 @@ def save_interim_data(chargepoint, charging_ev, immediately: bool = True):
114122
# Es wurde noch nie ein Auto zugeordnet
115123
if charging_ev == -1:
116124
return
117-
if log_data.timestamp_start_charging is None:
125+
if log_data.imported_since_mode_switch == 0:
118126
# Die Daten wurden schon erfasst.
119127
return
120128
if not immediately:
@@ -148,7 +156,7 @@ def save_and_reset_data(chargepoint, charging_ev, immediately: bool = True):
148156
if chargepoint.data.get.power != 0:
149157
# Das Fahrzeug hat die Ladung noch nicht beendet. Der Logeintrag wird später erstellt.
150158
return
151-
if chargepoint.data.set.log.timestamp_start_charging:
159+
if chargepoint.data.set.log.imported_since_mode_switch > 0:
152160
# Die Daten wurden noch nicht erfasst.
153161
save_data(chargepoint, charging_ev, immediately)
154162
chargepoint.reset_log_data()
@@ -199,16 +207,22 @@ def _create_entry(chargepoint, charging_ev, immediately: bool = True):
199207
log_data.range_charged = get_value_or_default(lambda: round(
200208
(log_data.imported_since_mode_switch * charging_ev.ev_template.data.efficiency /
201209
charging_ev.ev_template.data.average_consump), 2))
202-
log_data.time_charged, duration = timecheck.get_difference_to_now(log_data.timestamp_start_charging)
203210
power = 0
204-
if duration > 0:
211+
if log_data.timestamp_start_charging:
212+
time_charged = get_value_or_default(lambda: log_data.time_charged +
213+
(timecheck.create_timestamp() - log_data.timestamp_start_charging), 0)
214+
else:
215+
time_charged = get_value_or_default(lambda: log_data.time_charged, 0)
216+
time_charged_readable = f"{int(time_charged / 3600)}:{int((time_charged % 3600) / 60):02d}"
217+
if time_charged > 0:
205218
# power calculation needs to be fixed if useful:
206219
# log_data.imported_since_mode_switch / (duration / 3600)
207-
power = get_value_or_default(lambda: round(log_data.imported_since_mode_switch / duration, 2))
220+
power = get_value_or_default(lambda: round(log_data.imported_since_mode_switch / (time_charged / 3600), 2))
208221
calculate_charge_cost(chargepoint, True)
209222
energy_source = get_value_or_default(lambda: analyse_percentage(get_log_from_date_until_now(
210-
log_data.timestamp_start_charging)["totals"])["energy_source"])
223+
log_data.timestamp_mode_switch)["totals"])["energy_source"])
211224
costs = round(log_data.costs, 2)
225+
212226
new_entry = {
213227
"chargepoint":
214228
{
@@ -233,10 +247,10 @@ def _create_entry(chargepoint, charging_ev, immediately: bool = True):
233247
"time":
234248
{
235249
"begin": get_value_or_default(lambda: datetime.datetime.fromtimestamp(
236-
log_data.timestamp_start_charging).strftime("%m/%d/%Y, %H:%M:%S")),
250+
log_data.timestamp_mode_switch).strftime("%m/%d/%Y, %H:%M:%S")),
237251
"end": get_value_or_default(lambda: datetime.datetime.fromtimestamp(
238252
timecheck.create_timestamp()).strftime("%m/%d/%Y, %H:%M:%S")),
239-
"time_charged": get_value_or_default(lambda: log_data.time_charged)
253+
"time_charged": time_charged_readable
240254
},
241255
"data":
242256
{

packages/control/chargepoint/chargepoint_data.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,15 +66,18 @@ class ConnectedVehicle:
6666

6767
@dataclass
6868
class Log:
69+
begin: Optional[float] = None
6970
chargemode_log_entry: str = "_"
7071
costs: float = 0
72+
end: Optional[float] = None
7173
imported_at_mode_switch: float = 0
7274
imported_at_plugtime: float = 0
7375
imported_since_mode_switch: float = 0
7476
imported_since_plugged: float = 0
7577
range_charged: float = 0
76-
time_charged: str = "00:00"
78+
time_charged: float = 0
7779
timestamp_start_charging: Optional[float] = None
80+
timestamp_mode_switch: Optional[float] = None
7881
ev: int = -1
7982
prio: bool = False
8083
rfid: Optional[str] = None

0 commit comments

Comments
 (0)