Implement dc charge and bms charge calc

This commit is contained in:
Carsten Schmiemann 2022-04-23 12:35:02 +02:00
parent 786322bed8
commit 8696f7f0ce
3 changed files with 25 additions and 11 deletions

View File

@ -213,11 +213,11 @@ void OvmsVehicleRenaultZoePh2::IncomingEVC(uint16_t type, uint16_t pid, const ch
ACInputPowerFactor = 0.05;
ESP_LOGE(TAG, "Warning charge current too low, charging not possible");
}
if (mt_main_phases_num->AsFloat() == 3 && StandardMetrics.ms_v_charge_inprogress->AsBool(false)) {
if (StandardMetrics.ms_v_charge_type->AsString() == "type2" && mt_main_phases_num->AsFloat() == 3 && StandardMetrics.ms_v_charge_inprogress->AsBool(false)) {
StandardMetrics.ms_v_charge_power->SetValue((StandardMetrics.ms_v_charge_current->AsFloat() * StandardMetrics.ms_v_charge_voltage->AsFloat() * ACInputPowerFactor * 1.732f) * 0.001, kW);
} else if (mt_main_phases_num->AsFloat() == 2 || mt_main_phases_num->AsFloat() == 1) {
} else if (StandardMetrics.ms_v_charge_type->AsString() == "type2" && (mt_main_phases_num->AsFloat() == 2 || mt_main_phases_num->AsFloat() == 1)) {
StandardMetrics.ms_v_charge_power->SetValue((StandardMetrics.ms_v_charge_current->AsFloat() * StandardMetrics.ms_v_charge_voltage->AsFloat() * ACInputPowerFactor) * 0.001, kW);
} else {
} else if (StandardMetrics.ms_v_charge_type->AsString() == "type2") {
StandardMetrics.ms_v_charge_power->SetValue(0);
}
//ESP_LOGD(TAG, "300D EVC mt_main_current: %f", (CAN_UINT(0) * 0.1));

View File

@ -70,8 +70,9 @@ OvmsVehicleRenaultZoePh2::OvmsVehicleRenaultZoePh2() {
mt_bus_awake = MyMetrics.InitBool("zph2.v.bus.awake", SM_STALE_NONE, false);
mt_pos_odometer_start = MyMetrics.InitFloat("zph2.v.pos.odometer.start", SM_STALE_MID, 0, Kilometers);
mt_pos_car_trip = MyMetrics.InitFloat("zph2.v.pos.car.trip", SM_STALE_NONE, 0, Kilometers);
mt_bat_used_start = MyMetrics.InitFloat("zph2.b.used.start", SM_STALE_MID, 0, Kilometers);
mt_bat_recd_start = MyMetrics.InitFloat("zph2.b.recd.start", SM_STALE_MID, 0, Kilometers);
mt_bat_used_start = MyMetrics.InitFloat("zph2.b.used.start", SM_STALE_MID, 0, kWh);
mt_bat_recd_start = MyMetrics.InitFloat("zph2.b.recd.start", SM_STALE_MID, 0, kWh);
mt_bat_chg_start = MyMetrics.InitFloat("zph2.b.chg.start", SM_STALE_MID, 0, kWh);
mt_bat_available_energy = MyMetrics.InitFloat("zph2.b.avail.energy", SM_STALE_NONE, 0, kWh);
mt_bat_aux_power_consumer = MyMetrics.InitFloat("zph2.b.aux.power.consumer", SM_STALE_MID, 0, Watts);
mt_bat_aux_power_ptc = MyMetrics.InitFloat("zph2.b.aux.power.ptc", SM_STALE_MID, 0, Watts);
@ -235,11 +236,14 @@ void OvmsVehicleRenaultZoePh2::ChargeStatistics() {
if (CarIsCharging) {
StandardMetrics.ms_v_charge_kwh->SetValue(0);
StandardMetrics.ms_v_charge_inprogress->SetValue(CarIsCharging);
if (m_UseBMScalculation) {
mt_bat_chg_start->SetValue(StandardMetrics.ms_v_charge_kwh_grid_total->AsFloat());
}
} else {
StandardMetrics.ms_v_charge_inprogress->SetValue(CarIsCharging);
}
}
CarLastCharging = CarIsCharging;
CarLastCharging = CarIsCharging;
if (!StandardMetrics.ms_v_charge_pilot->AsBool() || !StandardMetrics.ms_v_charge_inprogress->AsBool() || (charge_current <= 0.0) ) {
return;
@ -248,15 +252,24 @@ void OvmsVehicleRenaultZoePh2::ChargeStatistics() {
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);
if (m_UseBMScalculation) {
StandardMetrics.ms_v_charge_kwh->SetValue(StandardMetrics.ms_v_charge_kwh_grid_total->AsFloat() - mt_bat_used_start->AsFloat());
} else {
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_full->SetValue(minsremaining / 10, Minutes);
StandardMetrics.ms_v_charge_efficiency->SetValue((battery_power / charger_power) * 100.0);
StandardMetrics.ms_v_charge_duration_range->SetValue(minsremaining / 10, Minutes);
ESP_LOGV(TAG, "Charge time remaining: %d mins at %f kW with %f amps AC current with %s at %f efficiency, %f powerfactor", minsremaining / 10, charger_power, ac_current, ac_phases.c_str(), StandardMetrics.ms_v_charge_efficiency->AsFloat(100), ACInputPowerFactor);
if (StandardMetrics.ms_v_charge_type->AsString() == "type2") {
StandardMetrics.ms_v_charge_efficiency->SetValue((battery_power / charger_power) * 100.0);
ESP_LOGI(TAG, "Charge time remaining: %d mins, AC Charge at %f kW with %f amps, %s at %f efficiency, %f powerfactor", minsremaining / 10, charger_power, ac_current, ac_phases.c_str(), StandardMetrics.ms_v_charge_efficiency->AsFloat(100), ACInputPowerFactor);
} else if (StandardMetrics.ms_v_charge_type->AsString() == "ccs" || StandardMetrics.ms_v_charge_type->AsString() == "chademo") {
StandardMetrics.ms_v_charge_power->SetValue(battery_power);
ESP_LOGI(TAG, "Charge time remaining: %d mins, DC Charge at %f kW", minsremaining / 10, battery_power);
}
}
}
void OvmsVehicleRenaultZoePh2::EnergyStatisticsOVMS() {

View File

@ -104,6 +104,7 @@ class OvmsVehicleRenaultZoePh2 : public OvmsVehicle {
OvmsMetricFloat *mt_pos_car_trip; //Cluster tripcounter
OvmsMetricFloat *mt_bat_used_start; //Used battery kWh at trip start
OvmsMetricFloat *mt_bat_recd_start; //Recd battery kWh at trip start
OvmsMetricFloat *mt_bat_chg_start; //Charge battery kWh at charge start
OvmsMetricFloat *mt_bat_available_energy; //Available energy in battery
OvmsMetricFloat *mt_bat_aux_power_consumer; //Power usage by consumer
OvmsMetricFloat *mt_bat_aux_power_ptc; //Power usage by PTCs