- eval_records_settings: added charge state
- eval_records: use common time for all eps - fixed resampling, renamed to make_values
This commit is contained in:
+55
-47
@@ -203,91 +203,99 @@ def fast_forward(iter_t: iter, iter_v: iter, now):
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
def resample(_ep: Endpoint, dt_from: datetime, dt_stop: datetime, dt_step: timedelta):
|
def make_time(dt_from: datetime, dt_stop: datetime, dt_step: timedelta):
|
||||||
iter_t = iter(_ep.timestamps)
|
ts_list = []
|
||||||
iter_v = iter(_ep.values)
|
|
||||||
|
|
||||||
t = []
|
|
||||||
v = []
|
|
||||||
_t_next = next(iter_t)
|
|
||||||
_v_next = next(iter_v)
|
|
||||||
_dt = dt_from
|
_dt = dt_from
|
||||||
_ts_stop = datetime_to_int(dt_stop)
|
_ts_stop = datetime_to_int(dt_stop)
|
||||||
_ts = datetime_to_int(_dt)
|
_ts = datetime_to_int(_dt)
|
||||||
fast_forward(iter_t, iter_v, _ts)
|
|
||||||
while _ts < _ts_stop:
|
while _ts < _ts_stop:
|
||||||
print(f"Time : {_ts}")
|
print(f"Time : {_ts}")
|
||||||
print(f"Value: {_v_next}")
|
ts_list.append(_ts)
|
||||||
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
|
|
||||||
|
|
||||||
_dt = _dt + dt_step
|
_dt = _dt + dt_step
|
||||||
_ts = datetime.timestamp(_dt)
|
_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__':
|
if __name__ == '__main__':
|
||||||
end_points = []
|
end_points = []
|
||||||
for k in settings.eps.keys():
|
for k in settings.eps_defs.keys():
|
||||||
end_points.append(Endpoint(k, settings.eps[k]))
|
end_points.append(Endpoint(k, settings.eps_defs[k]))
|
||||||
|
|
||||||
# Process data and store into endpoints
|
# 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)
|
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
|
# define observation interval
|
||||||
dt_start = datetime(settings.sel_years[0], settings.sel_month[0], settings.sel_days[0], 0, 0, 0)
|
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)
|
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)
|
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
|
# resample values to equidistant time interval
|
||||||
t_odo, v_odo = resample(ep_odo, dt_start, dt_stop, td_step)
|
v_odo = make_values(time_h, ep_odo)
|
||||||
t_soc, v_soc = resample(ep_soc, dt_start, dt_stop, td_step)
|
v_soc = make_values(time_h, ep_soc)
|
||||||
t_range, v_range = resample(ep_range, dt_start, dt_stop, td_step)
|
v_range = make_values(time_h, ep_range)
|
||||||
t_chgpwr, v_chgpwr = resample(ep_chgpwr, dt_start, dt_stop, td_step)
|
v_chgpwr = make_values(time_h, ep_chgpwr)
|
||||||
|
v_chg_state = make_values(time_h, ep_chg_state)
|
||||||
|
|
||||||
# calc speed
|
# calc speed
|
||||||
speed = [0]
|
speed = [0]
|
||||||
for i in range(1, len(t_odo)):
|
for i in range(1, len(time_h)):
|
||||||
dt = float(t_odo[i] - t_odo[i-1])
|
dt = float(time_h[i] - time_h[i - 1])
|
||||||
dv = v_odo[i] - v_odo[i-1]
|
dv = v_odo[i] - v_odo[i-1]
|
||||||
speed.append(dv/dt*60*60)
|
speed.append(dv/dt*60*60)
|
||||||
|
|
||||||
# Convert x-axis
|
# Convert x-axis
|
||||||
dt_odo_h = (np.array(t_odo) - t_odo[0])/3600/24 + settings.sel_days[0]
|
dt_h = (np.array(time_h) - time_h[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]
|
|
||||||
|
|
||||||
# plot data
|
# plot data
|
||||||
plot.subplot(4, 1, 1)
|
plot.subplot(5, 1, 1)
|
||||||
plot.plot(dt_odo_h, np.array(v_odo) - v_odo[0])
|
plot.plot(dt_h, np.array(v_odo) - v_odo[0])
|
||||||
plot.title("Kilometerstand")
|
plot.title("Kilometerstand")
|
||||||
plot.grid()
|
plot.grid()
|
||||||
plot.subplot(4, 1, 2)
|
plot.subplot(5, 1, 2)
|
||||||
plot.plot(dt_odo_h, speed)
|
plot.plot(dt_h, speed)
|
||||||
plot.title("Speed")
|
plot.title("Speed")
|
||||||
plot.grid()
|
plot.grid()
|
||||||
plot.subplot(4, 1, 3)
|
plot.subplot(5, 1, 3)
|
||||||
plot.plot(dt_soc_h, v_soc, dt_chgpwr_h, v_chgpwr)
|
plot.plot(dt_h, v_soc, dt_h, v_chgpwr)
|
||||||
plot.title("Akkustand")
|
plot.title("Akkustand")
|
||||||
plot.grid()
|
plot.grid()
|
||||||
plot.subplot(4, 1, 4)
|
plot.subplot(5, 1, 4)
|
||||||
plot.plot(dt_range_h, v_range)
|
plot.plot(dt_h, v_range)
|
||||||
plot.title("Range")
|
plot.title("Range")
|
||||||
plot.grid()
|
plot.grid()
|
||||||
|
plot.subplot(5, 1, 5)
|
||||||
|
plot.plot(dt_h, v_chg_state)
|
||||||
|
plot.title("Charge state")
|
||||||
|
plot.grid()
|
||||||
|
|
||||||
plot.show()
|
plot.show()
|
||||||
|
|||||||
@@ -1,2 +1,12 @@
|
|||||||
import enum
|
import enum
|
||||||
|
|
||||||
|
|
||||||
|
class ChargingState(enum.Enum):
|
||||||
|
notReadyForCharging = 0
|
||||||
|
charging = 1
|
||||||
|
chargePurposeReachedAndNotConservationCharging = 2
|
||||||
|
chargePurposeReachedAndConservation = 3
|
||||||
|
error = 4
|
||||||
|
|
||||||
|
|
||||||
|
print(ChargingState["charging"].value)
|
||||||
|
|||||||
Reference in New Issue
Block a user