Everyone, I'm planning to add a general (optional) charge / grid integration log and a general (optional) trip log. I'll describe my log record proposal in a separate mail. For the grid log, I'm going to add V2G / generator mode metrics now, so we can support this and define an already fully featured log format. As this is more or less a reverse charge, and can be combined with charging, my proposal is to a) basically duplicate the set of charge metrics with only slight changes for the "generating" view, and b) add grid side energy counters. We currently have these charge metrics: OvmsMetricFloat* ms_v_charge_voltage; // Momentary charger supply voltage [V] OvmsMetricFloat* ms_v_charge_power; // Momentary charger input power [kW] OvmsMetricFloat* ms_v_charge_efficiency; // Momentary charger efficiency [%] OvmsMetricFloat* ms_v_charge_current; // Momentary charger output current (→battery) [A] OvmsMetricFloat* ms_v_charge_climit; // Maximum charger output current [A] OvmsMetricInt* ms_v_charge_time; // Duration of running charge [sec] OvmsMetricFloat* ms_v_charge_kwh; // Energy charged into the battery in the running session [kWh] OvmsMetricString* ms_v_charge_mode; // standard, range, performance, storage OvmsMetricBool* ms_v_charge_timermode; // True if timer enabled OvmsMetricInt* ms_v_charge_timerstart; // Time timer is due to start OvmsMetricString* ms_v_charge_state; // charging, topoff, done, prepare, timerwait, heating, stopped OvmsMetricString* ms_v_charge_substate; // scheduledstop, scheduledstart, onrequest, timerwait, powerwait, stopped, interrupted OvmsMetricString* ms_v_charge_type; // Connection type: undefined, type1, type2, chademo, roadster, teslaus, supercharger, ccs OvmsMetricBool* ms_v_charge_pilot; // Pilot signal present OvmsMetricBool* ms_v_charge_inprogress; // True = currently charging OvmsMetricFloat* ms_v_charge_limit_range; // Sufficient range limit for current charge [km] OvmsMetricFloat* ms_v_charge_limit_soc; // Sufficient SOC limit for current charge [%] OvmsMetricInt* ms_v_charge_duration_full; // Estimated time remaining for full charge [min] OvmsMetricInt* ms_v_charge_duration_range; // … for sufficient range [min] OvmsMetricInt* ms_v_charge_duration_soc; // … for sufficient SOC [min] OvmsMetricFloat* ms_v_charge_temp; // Charger temperature [°C] …metrics (not in same order): v.c.charging v.c.climit v.c.current v.c.duration.full v.c.duration.range v.c.duration.soc v.c.efficiency v.c.kwh v.c.limit.range v.c.limit.soc v.c.mode v.c.pilot v.c.power v.c.state v.c.substate v.c.temp v.c.time v.c.timermode v.c.timerstart v.c.type v.c.voltage I would add now the following metrics for the generator mode: OvmsMetricFloat* ms_v_gen_voltage; // Momentary generator output voltage [V] OvmsMetricFloat* ms_v_gen_power; // Momentary generator output power [kW] OvmsMetricFloat* ms_v_gen_efficiency; // Momentary generator efficiency [%] OvmsMetricFloat* ms_v_gen_current; // Momentary generator input current (←battery) [A] OvmsMetricFloat* ms_v_gen_climit; // Maximum generator input current [A] OvmsMetricInt* ms_v_gen_time; // Duration of generator running [sec] OvmsMetricFloat* ms_v_gen_kwh; // Energy sum generated in the running session [kWh] OvmsMetricString* ms_v_gen_mode; // TBD OvmsMetricBool* ms_v_gen_timermode; // True if generator timer enabled OvmsMetricInt* ms_v_gen_timerstart; // Time generator is due to start OvmsMetricString* ms_v_gen_state; // TBD OvmsMetricString* ms_v_gen_substate; // TBD OvmsMetricString* ms_v_gen_type; // Connection type (chademo, ccs, …) OvmsMetricBool* ms_v_gen_pilot; // Pilot signal present OvmsMetricBool* ms_v_gen_inprogress; // True = currently delivering power OvmsMetricFloat* ms_v_gen_limit_range; // Minimum range limit for generator mode [km] OvmsMetricFloat* ms_v_gen_limit_soc; // Minimum SOC limit for generator mode [%] OvmsMetricInt* ms_v_gen_duration_empty; // Estimated time remaining for full discharge [min] OvmsMetricInt* ms_v_gen_duration_range; // … for range limit [min] OvmsMetricInt* ms_v_gen_duration_soc; // … for SOC limit [min] OvmsMetricFloat* ms_v_gen_temp; // Generator temperature [°C] …metrics (not in same order): v.g.generating v.g.climit v.g.current v.g.duration.empty v.g.duration.range v.g.duration.soc v.g.efficiency v.g.kwh v.g.limit.range v.g.limit.soc v.g.mode v.g.pilot v.g.power v.g.state v.g.substate v.g.temp v.g.time v.g.timermode v.g.timerstart v.g.type v.g.voltage In addition to these, I would add energy counters to cover the actual grid energy side (i.e. before/after conversion losses): OvmsMetricFloat* ms_v_charge_kwh_grid; // Energy drawn from grid during running session [kWh] OvmsMetricFloat* ms_v_charge_kwh_grid_total; // Energy drawn from grid total (life time) [kWh] OvmsMetricFloat* ms_v_gen_kwh_grid; // Energy sent to grid during running session [kWh] OvmsMetricFloat* ms_v_gen_kwh_grid_total; // Energy sent to grid total (life time) [kWh] v.c.kwh.grid v.c.kwh.grid.total v.g.kwh.grid v.g.kwh.grid.total And yes, "kwh" as a metric name isn't perfect, but we started this with "v.c.kwh", so we should now stick to it for consistency. Do I miss something? Any objections / suggestions? Regards, Michael -- Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal Fon 02333 / 833 5735 * Handy 0176 / 206 989 26
Everyone, the generator / V2G metrics are now added as proposed. https://docs.openvehicles.com/en/latest/userguide/metrics.html#standard-metr... Regards, Michael Am 12.01.21 um 19:22 schrieb Michael Balzer:
Everyone,
I'm planning to add a general (optional) charge / grid integration log and a general (optional) trip log. I'll describe my log record proposal in a separate mail.
For the grid log, I'm going to add V2G / generator mode metrics now, so we can support this and define an already fully featured log format. As this is more or less a reverse charge, and can be combined with charging, my proposal is to a) basically duplicate the set of charge metrics with only slight changes for the "generating" view, and b) add grid side energy counters.
We currently have these charge metrics:
OvmsMetricFloat* ms_v_charge_voltage; // Momentary charger supply voltage [V] OvmsMetricFloat* ms_v_charge_power; // Momentary charger input power [kW] OvmsMetricFloat* ms_v_charge_efficiency; // Momentary charger efficiency [%] OvmsMetricFloat* ms_v_charge_current; // Momentary charger output current (→battery) [A] OvmsMetricFloat* ms_v_charge_climit; // Maximum charger output current [A] OvmsMetricInt* ms_v_charge_time; // Duration of running charge [sec] OvmsMetricFloat* ms_v_charge_kwh; // Energy charged into the battery in the running session [kWh] OvmsMetricString* ms_v_charge_mode; // standard, range, performance, storage OvmsMetricBool* ms_v_charge_timermode; // True if timer enabled OvmsMetricInt* ms_v_charge_timerstart; // Time timer is due to start OvmsMetricString* ms_v_charge_state; // charging, topoff, done, prepare, timerwait, heating, stopped OvmsMetricString* ms_v_charge_substate; // scheduledstop, scheduledstart, onrequest, timerwait, powerwait, stopped, interrupted OvmsMetricString* ms_v_charge_type; // Connection type: undefined, type1, type2, chademo, roadster, teslaus, supercharger, ccs OvmsMetricBool* ms_v_charge_pilot; // Pilot signal present OvmsMetricBool* ms_v_charge_inprogress; // True = currently charging OvmsMetricFloat* ms_v_charge_limit_range; // Sufficient range limit for current charge [km] OvmsMetricFloat* ms_v_charge_limit_soc; // Sufficient SOC limit for current charge [%] OvmsMetricInt* ms_v_charge_duration_full; // Estimated time remaining for full charge [min] OvmsMetricInt* ms_v_charge_duration_range; // … for sufficient range [min] OvmsMetricInt* ms_v_charge_duration_soc; // … for sufficient SOC [min] OvmsMetricFloat* ms_v_charge_temp; // Charger temperature [°C]
…metrics (not in same order): v.c.charging v.c.climit v.c.current v.c.duration.full v.c.duration.range v.c.duration.soc v.c.efficiency v.c.kwh v.c.limit.range v.c.limit.soc v.c.mode v.c.pilot v.c.power v.c.state v.c.substate v.c.temp v.c.time v.c.timermode v.c.timerstart v.c.type v.c.voltage
I would add now the following metrics for the generator mode:
OvmsMetricFloat* ms_v_gen_voltage; // Momentary generator output voltage [V] OvmsMetricFloat* ms_v_gen_power; // Momentary generator output power [kW] OvmsMetricFloat* ms_v_gen_efficiency; // Momentary generator efficiency [%] OvmsMetricFloat* ms_v_gen_current; // Momentary generator input current (←battery) [A] OvmsMetricFloat* ms_v_gen_climit; // Maximum generator input current [A] OvmsMetricInt* ms_v_gen_time; // Duration of generator running [sec] OvmsMetricFloat* ms_v_gen_kwh; // Energy sum generated in the running session [kWh] OvmsMetricString* ms_v_gen_mode; // TBD OvmsMetricBool* ms_v_gen_timermode; // True if generator timer enabled OvmsMetricInt* ms_v_gen_timerstart; // Time generator is due to start OvmsMetricString* ms_v_gen_state; // TBD OvmsMetricString* ms_v_gen_substate; // TBD OvmsMetricString* ms_v_gen_type; // Connection type (chademo, ccs, …) OvmsMetricBool* ms_v_gen_pilot; // Pilot signal present OvmsMetricBool* ms_v_gen_inprogress; // True = currently delivering power OvmsMetricFloat* ms_v_gen_limit_range; // Minimum range limit for generator mode [km] OvmsMetricFloat* ms_v_gen_limit_soc; // Minimum SOC limit for generator mode [%] OvmsMetricInt* ms_v_gen_duration_empty; // Estimated time remaining for full discharge [min] OvmsMetricInt* ms_v_gen_duration_range; // … for range limit [min] OvmsMetricInt* ms_v_gen_duration_soc; // … for SOC limit [min] OvmsMetricFloat* ms_v_gen_temp; // Generator temperature [°C]
…metrics (not in same order): v.g.generating v.g.climit v.g.current v.g.duration.empty v.g.duration.range v.g.duration.soc v.g.efficiency v.g.kwh v.g.limit.range v.g.limit.soc v.g.mode v.g.pilot v.g.power v.g.state v.g.substate v.g.temp v.g.time v.g.timermode v.g.timerstart v.g.type v.g.voltage
In addition to these, I would add energy counters to cover the actual grid energy side (i.e. before/after conversion losses):
OvmsMetricFloat* ms_v_charge_kwh_grid; // Energy drawn from grid during running session [kWh] OvmsMetricFloat* ms_v_charge_kwh_grid_total; // Energy drawn from grid total (life time) [kWh] OvmsMetricFloat* ms_v_gen_kwh_grid; // Energy sent to grid during running session [kWh] OvmsMetricFloat* ms_v_gen_kwh_grid_total; // Energy sent to grid total (life time) [kWh]
v.c.kwh.grid v.c.kwh.grid.total v.g.kwh.grid v.g.kwh.grid.total
And yes, "kwh" as a metric name isn't perfect, but we started this with "v.c.kwh", so we should now stick to it for consistency.
Do I miss something? Any objections / suggestions?
Regards, Michael
-- Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal Fon 02333 / 833 5735 * Handy 0176 / 206 989 26
participants (1)
-
Michael Balzer