@@ -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 {
0 commit comments