From 24afc1f69d7aa0e25a502dd13a7170b164834e48 Mon Sep 17 00:00:00 2001 From: Jens Ahrensfeld Date: Sun, 24 Nov 2024 22:20:25 +0100 Subject: [PATCH] - eval_records_settings: added charge state - eval_records: use common time for all eps - fixed resampling, renamed to make_values --- eval_records.py | 102 +++++++++++++++++++++------------------ record/types/charging.py | 10 ++++ 2 files changed, 65 insertions(+), 47 deletions(-) diff --git a/eval_records.py b/eval_records.py index 773d605..eba0251 100644 --- a/eval_records.py +++ b/eval_records.py @@ -203,91 +203,99 @@ def fast_forward(iter_t: iter, iter_v: iter, now): return None -def resample(_ep: Endpoint, dt_from: datetime, dt_stop: datetime, dt_step: timedelta): - iter_t = iter(_ep.timestamps) - iter_v = iter(_ep.values) - - t = [] - v = [] - _t_next = next(iter_t) - _v_next = next(iter_v) +def make_time(dt_from: datetime, dt_stop: datetime, dt_step: timedelta): + ts_list = [] _dt = dt_from _ts_stop = datetime_to_int(dt_stop) _ts = datetime_to_int(_dt) - fast_forward(iter_t, iter_v, _ts) while _ts < _ts_stop: print(f"Time : {_ts}") - print(f"Value: {_v_next}") - t.append(_ts) - v.append(_v_next) - - try: - while _ts >= _t_next: - _t_next = next(iter_t) - _v_next = next(iter_v) - except StopIteration: - pass - + ts_list.append(_ts) _dt = _dt + dt_step _ts = datetime.timestamp(_dt) - return t, v + return ts_list + + +def make_values(_ts_list, _ep: Endpoint, ic=0): + v_list = [] + _t_ep = _ep.timestamps[0] + _v_ep = _ep.values[0] + + iter_t = iter(_ep.timestamps) + iter_v = iter(_ep.values) + for _ts in _ts_list: + try: + while _t_ep < _ts: + _t_ep = next(iter_t) + _v_ep = next(iter_v) + except StopIteration: + pass + v_list.append(_v_ep) + + return v_list if __name__ == '__main__': end_points = [] - for k in settings.eps.keys(): - end_points.append(Endpoint(k, settings.eps[k])) + for k in settings.eps_defs.keys(): + end_points.append(Endpoint(k, settings.eps_defs[k])) # Process data and store into endpoints process(end_points, settings.BASE, settings.USER, settings.VIN, sel_days=settings.sel_days, sel_months=settings.sel_month, sel_years=settings.sel_years) - # get endpoints - ep_odo = find_ep_by_name(end_points, name="odo") - ep_soc = find_ep_by_name(end_points, name="soc") - ep_range = find_ep_by_name(end_points, name="range") - ep_chgpwr = find_ep_by_name(end_points, name="chgpwr") - # define observation interval dt_start = datetime(settings.sel_years[0], settings.sel_month[0], settings.sel_days[0], 0, 0, 0) dt_stop = datetime(settings.sel_years[1], settings.sel_month[1], settings.sel_days[1], 23, 59, 59) td_step = timedelta(seconds=settings.t_interval_s) + # get endpoints + ep_odo = find_ep_by_name(end_points, name="odo") + ep_soc = find_ep_by_name(end_points, name="soc") + ep_range = find_ep_by_name(end_points, name="range") + ep_chgpwr = find_ep_by_name(end_points, name="chgpwr") + ep_chg_state = find_ep_by_name(end_points, name="chg_state") + + time_h = make_time(dt_start, dt_stop, td_step) + # resample values to equidistant time interval - t_odo, v_odo = resample(ep_odo, dt_start, dt_stop, td_step) - t_soc, v_soc = resample(ep_soc, dt_start, dt_stop, td_step) - t_range, v_range = resample(ep_range, dt_start, dt_stop, td_step) - t_chgpwr, v_chgpwr = resample(ep_chgpwr, dt_start, dt_stop, td_step) + v_odo = make_values(time_h, ep_odo) + v_soc = make_values(time_h, ep_soc) + v_range = make_values(time_h, ep_range) + v_chgpwr = make_values(time_h, ep_chgpwr) + v_chg_state = make_values(time_h, ep_chg_state) # calc speed speed = [0] - for i in range(1, len(t_odo)): - dt = float(t_odo[i] - t_odo[i-1]) + for i in range(1, len(time_h)): + dt = float(time_h[i] - time_h[i - 1]) dv = v_odo[i] - v_odo[i-1] speed.append(dv/dt*60*60) # Convert x-axis - dt_odo_h = (np.array(t_odo) - t_odo[0])/3600/24 + settings.sel_days[0] - dt_soc_h = (np.array(t_soc) - t_soc[0])/3600/24 + settings.sel_days[0] - dt_range_h = (np.array(t_range) - t_range[0])/3600/24 + settings.sel_days[0] - dt_chgpwr_h = (np.array(t_chgpwr) - t_chgpwr[0])/3600/24 + settings.sel_days[0] + dt_h = (np.array(time_h) - time_h[0]) / 3600 / 24 + settings.sel_days[0] + # plot data - plot.subplot(4, 1, 1) - plot.plot(dt_odo_h, np.array(v_odo) - v_odo[0]) + plot.subplot(5, 1, 1) + plot.plot(dt_h, np.array(v_odo) - v_odo[0]) plot.title("Kilometerstand") plot.grid() - plot.subplot(4, 1, 2) - plot.plot(dt_odo_h, speed) + plot.subplot(5, 1, 2) + plot.plot(dt_h, speed) plot.title("Speed") plot.grid() - plot.subplot(4, 1, 3) - plot.plot(dt_soc_h, v_soc, dt_chgpwr_h, v_chgpwr) + plot.subplot(5, 1, 3) + plot.plot(dt_h, v_soc, dt_h, v_chgpwr) plot.title("Akkustand") plot.grid() - plot.subplot(4, 1, 4) - plot.plot(dt_range_h, v_range) + plot.subplot(5, 1, 4) + plot.plot(dt_h, v_range) plot.title("Range") plot.grid() + plot.subplot(5, 1, 5) + plot.plot(dt_h, v_chg_state) + plot.title("Charge state") + plot.grid() plot.show() diff --git a/record/types/charging.py b/record/types/charging.py index dd4ff57..bbe4d63 100644 --- a/record/types/charging.py +++ b/record/types/charging.py @@ -1,2 +1,12 @@ import enum + +class ChargingState(enum.Enum): + notReadyForCharging = 0 + charging = 1 + chargePurposeReachedAndNotConservationCharging = 2 + chargePurposeReachedAndConservation = 3 + error = 4 + + +print(ChargingState["charging"].value)