Add charging statistics and efficiency

This commit is contained in:
Carsten Schmiemann 2022-04-17 11:17:54 +02:00
parent e3f32ce7e6
commit cc757e4c66
2 changed files with 45 additions and 0 deletions

View File

@ -83,6 +83,9 @@ OvmsVehicleRenaultZoePh2::OvmsVehicleRenaultZoePh2() {
BmsSetCellDefaultThresholdsVoltage(0.030, 0.050);
BmsSetCellDefaultThresholdsTemperature(4.0, 5.0);
//Battery capacity
m_battery_capacity= 52000;
#ifdef CONFIG_OVMS_COMP_WEBSERVER
WebInit();
#endif
@ -178,6 +181,45 @@ void OvmsVehicleRenaultZoePh2::IncomingPollReply(canbus* bus, uint16_t type, uin
}
}
int OvmsVehicleRenaultZoePh2::calcMinutesRemaining(float charge_voltage, float charge_current) {
float bat_soc = StandardMetrics.ms_v_bat_soc->AsFloat(100);
float remaining_wh = m_battery_capacity * bat_soc / 100.0;
float remaining_hours = remaining_wh / (charge_current * charge_voltage);
float remaining_mins = remaining_hours * 60.0;
return MIN( 1440, (int)remaining_mins );
}
void OvmsVehicleRenaultZoePh2::Ticker10(uint32_t ticker) {
float charge_current = StandardMetrics.ms_v_bat_current->AsFloat(0, Amps);
float charge_voltage = StandardMetrics.ms_v_bat_voltage->AsFloat(0, Volts);
float battery_power = StandardMetrics.ms_v_bat_power->AsFloat(0, kW);
float charger_power = StandardMetrics.ms_v_charge_power->AsFloat(0, kW);
float ac_current = mt_main_current->AsFloat(0, Amps);
string ac_phases = mt_main_phases->AsString();
if (!StandardMetrics.ms_v_charge_pilot->AsBool() ||
!StandardMetrics.ms_v_charge_inprogress->AsBool() ||
(charge_current <= 0.0) ) {
return;
}
if (charge_voltage > 0 && charge_current > 0) {
float power = charge_voltage * charge_current / 1000.0;
float energy = power / 3600.0 * 10.0;
StandardMetrics.ms_v_charge_kwh->SetValue( StandardMetrics.ms_v_charge_kwh->AsFloat() + energy);
int minsremaining = calcMinutesRemaining(charge_voltage, charge_current);
StandardMetrics.ms_v_charge_duration_range->SetValue(minsremaining, Minutes);
ESP_LOGV(TAG, "Charge time remaining: %d mins, AC current: %f with %s", minsremaining, ac_current, ac_phases.c_str());
StandardMetrics.ms_v_charge_efficiency->SetValue(fabs(battery_power / charger_power) * 100.0);
ESP_LOGD(TAG, "Charger efficiency %f", StandardMetrics.ms_v_charge_efficiency->AsFloat(100));
}
}
class OvmsVehicleRenaultZoePh2Init {
public: OvmsVehicleRenaultZoePh2Init();
} MyOvmsVehicleRenaultZoePh2Init __attribute__ ((init_priority (9000)));

View File

@ -74,12 +74,15 @@ class OvmsVehicleRenaultZoePh2 : public OvmsVehicle {
bool CarPluggedIn = false;
protected:
int m_battery_capacity;
void IncomingINV(uint16_t type, uint16_t pid, const char* data, uint16_t len);
void IncomingEVC(uint16_t type, uint16_t pid, const char* data, uint16_t len);
void IncomingBCM(uint16_t type, uint16_t pid, const char* data, uint16_t len);
void IncomingLBC(uint16_t type, uint16_t pid, const char* data, uint16_t len);
void IncomingHVAC(uint16_t type, uint16_t pid, const char* data, uint16_t len);
void IncomingUCM(uint16_t type, uint16_t pid, const char* data, uint16_t len);
int calcMinutesRemaining(float charge_voltage, float charge_current);
virtual void Ticker10(uint32_t ticker); //Charging statistics
// Renault ZOE specific metrics
OvmsMetricFloat *mt_pos_odometer_start; // ODOmeter at Start