Add charging statistics and efficiency
This commit is contained in:
parent
e3f32ce7e6
commit
cc757e4c66
|
@ -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)));
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue