Implement BMS trip energy calculation
This commit is contained in:
parent
db8ec152e5
commit
a7d3c42791
|
@ -92,9 +92,9 @@ static const OvmsVehicle::poll_pid_t renault_zoe_polls[] = {
|
|||
{ 0x18dadbf1, 0x18daf1db, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x925D, { 0, 10, 3, 5 }, 0, ISOTP_EXTFRAME }, // Battery Current
|
||||
{ 0x18dadbf1, 0x18daf1db, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x9012, { 0, 10, 60, 5 }, 0, ISOTP_EXTFRAME }, // Battery Average Temperature
|
||||
{ 0x18dadbf1, 0x18daf1db, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x91C8, { 0, 60, 60, 5 }, 0, ISOTP_EXTFRAME }, // Battery Available Energy kWh
|
||||
{ 0x18dadbf1, 0x18daf1db, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x9243, { 0, 60, 60, 60 }, 0, ISOTP_EXTFRAME }, // Energy charged kWh
|
||||
{ 0x18dadbf1, 0x18daf1db, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x9245, { 0, 60, 60, 60 }, 0, ISOTP_EXTFRAME }, // Energy discharged kWh
|
||||
{ 0x18dadbf1, 0x18daf1db, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x9247, { 0, 60, 60, 60 }, 0, ISOTP_EXTFRAME }, // Energy regenerated kWh
|
||||
{ 0x18dadbf1, 0x18daf1db, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x9243, { 0, 60, 60, 10 }, 0, ISOTP_EXTFRAME }, // Energy charged kWh
|
||||
{ 0x18dadbf1, 0x18daf1db, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x9245, { 0, 60, 10, 60 }, 0, ISOTP_EXTFRAME }, // Energy discharged kWh
|
||||
{ 0x18dadbf1, 0x18daf1db, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x9247, { 0, 60, 10, 60 }, 0, ISOTP_EXTFRAME }, // Energy regenerated kWh
|
||||
//{ 0x18dadbf1, 0x18daf1db, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x21D9, { 0, 10, 10, 10 }, 0, ISOTP_EXTFRAME }, // Charging State (1: Slow, 2: Fast, 3: Init Charging)
|
||||
//{ 0x18dadbf1, 0x18daf1db, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x9007, { 0, 10, 60, 10 }, 0, ISOTP_EXTFRAME }, // Cell Max Voltage
|
||||
//{ 0x18dadbf1, 0x18daf1db, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x9009, { 0, 10, 60, 10 }, 0, ISOTP_EXTFRAME }, // Cell Min Voltage
|
||||
|
|
|
@ -47,11 +47,13 @@ void OvmsVehicleRenaultZoePh2::WebCfgCommon(PageEntry_t& p, PageContext_t& c)
|
|||
{
|
||||
std::string error, rangeideal, battcapacity;
|
||||
bool UseCarTrip;
|
||||
bool UseBMScalculation;
|
||||
|
||||
if (c.method == "POST") {
|
||||
rangeideal = c.getvar("rangeideal");
|
||||
battcapacity = c.getvar("battcapacity");
|
||||
UseCarTrip = (c.getvar("UseCarTrip") == "yes");
|
||||
UseCarTrip = (c.getvar("UseCarTrip") == "no");
|
||||
UseBMScalculation = (c.getvar("UseBMScalculation") == "no");
|
||||
|
||||
if (!rangeideal.empty()) {
|
||||
int v = atoi(rangeideal.c_str());
|
||||
|
@ -63,6 +65,7 @@ void OvmsVehicleRenaultZoePh2::WebCfgCommon(PageEntry_t& p, PageContext_t& c)
|
|||
MyConfig.SetParamValue("xrz2", "rangeideal", rangeideal);
|
||||
MyConfig.SetParamValue("xrz2", "battcapacity", battcapacity);
|
||||
MyConfig.SetParamValueBool("xrz2", "UseCarTrip", UseCarTrip);
|
||||
MyConfig.SetParamValueBool("xrz2", "UseBMScalculation", UseBMScalculation);
|
||||
|
||||
c.head(200);
|
||||
c.alert("success", "<p class=\"lead\">Renault Zoe Ph2 battery setup saved.</p>");
|
||||
|
@ -77,10 +80,10 @@ void OvmsVehicleRenaultZoePh2::WebCfgCommon(PageEntry_t& p, PageContext_t& c)
|
|||
}
|
||||
else {
|
||||
// read configuration:
|
||||
rangeideal = MyConfig.GetParamValue("xrz2", "rangeideal", "350");
|
||||
battcapacity = MyConfig.GetParamValue("xrz2", "battcapacity", "52000");
|
||||
UseCarTrip = MyConfig.GetParamValueBool("xrz2", "UseCarTrip", false);
|
||||
|
||||
rangeideal = MyConfig.GetParamValue("xrz2", "rangeideal", "350");
|
||||
battcapacity = MyConfig.GetParamValue("xrz2", "battcapacity", "52000");
|
||||
UseCarTrip = MyConfig.GetParamValueBool("xrz2", "UseCarTrip", false);
|
||||
UseBMScalculation = MyConfig.GetParamValueBool("xrz2", "UseBMScalculation", false);
|
||||
c.head(200);
|
||||
}
|
||||
|
||||
|
@ -99,9 +102,14 @@ void OvmsVehicleRenaultZoePh2::WebCfgCommon(PageEntry_t& p, PageContext_t& c)
|
|||
"<p>Default 350km. Ideal Range...</p>");
|
||||
|
||||
c.fieldset_start("Trip counter settings");
|
||||
c.input_radio_start("Which tripcounter to use", "UseCarTrip");
|
||||
c.input_radio_option("UseCarTrip", "Internal (New trip everytime car starts)", "internal", UseCarTrip == false);
|
||||
c.input_radio_option("UseCarTrip", "Car trip counter from Cluster", "Car trip", UseCarTrip == true);
|
||||
c.input_radio_start("Which tripcounter to use?", "UseCarTrip");
|
||||
c.input_radio_option("UseCarTrip", "Internal (New trip everytime car starts)", "no", UseCarTrip == false);
|
||||
c.input_radio_option("UseCarTrip", "Car trip counter from Cluster", "yes", UseCarTrip == true);
|
||||
c.input_radio_end("");
|
||||
|
||||
c.input_radio_start("Which trip energy calculation?", "UseBMScalculation");
|
||||
c.input_radio_option("UseBMScalculation", "OVMS energy calculation", "no", UseBMScalculation == false);
|
||||
c.input_radio_option("UseBMScalculation", "BMS-based calculation", "yes", UseBMScalculation == true);
|
||||
c.input_radio_end("");
|
||||
|
||||
c.fieldset_end();
|
||||
|
|
|
@ -114,8 +114,9 @@ void OvmsVehicleRenaultZoePh2::ConfigChanged(OvmsConfigParam* param) {
|
|||
m_range_ideal = MyConfig.GetParamValueInt("xrz2", "rangeideal", 350);
|
||||
m_battery_capacity = MyConfig.GetParamValueInt("xrz2", "battcapacity", 52000);
|
||||
m_UseCarTrip = MyConfig.GetParamValueBool("xrz2", "UseCarTrip", false);
|
||||
m_UseBMScalculation = MyConfig.GetParamValueBool("xrz2", "UseBMScalculation", false);
|
||||
StandardMetrics.ms_v_bat_range_ideal->SetValue(m_range_ideal, Kilometers);
|
||||
ESP_LOGI(TAG, "Renault Zoe Ph2 reload configuration: Range ideal: %d, Battery capacity: %d", m_range_ideal, m_battery_capacity);
|
||||
ESP_LOGI(TAG, "Renault Zoe Ph2 reload configuration: Range ideal: %d, Battery capacity: %d, Use Car trip counter: %s, Use BMS as energy cout: %s", m_range_ideal, m_battery_capacity, m_UseCarTrip ? "Yes" : "No", m_UseBMScalculation ? "yes" : "no");
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -248,7 +249,7 @@ void OvmsVehicleRenaultZoePh2::ChargeStatistics() {
|
|||
}
|
||||
}
|
||||
|
||||
void OvmsVehicleRenaultZoePh2::EnergyStatistics() {
|
||||
void OvmsVehicleRenaultZoePh2::EnergyStatisticsOVMS() {
|
||||
float voltage = StandardMetrics.ms_v_bat_voltage->AsFloat(0, Volts);
|
||||
float current = StandardMetrics.ms_v_bat_current->AsFloat(0, Amps);
|
||||
|
||||
|
@ -263,11 +264,20 @@ void OvmsVehicleRenaultZoePh2::EnergyStatistics() {
|
|||
}
|
||||
}
|
||||
|
||||
void OvmsVehicleRenaultZoePh2::EnergyStatisticsBMS() {
|
||||
StandardMetrics.ms_v_bat_energy_used->SetValue(StandardMetrics.ms_v_bat_energy_used_total->AsFloat() - mt_bat_used_start->AsFloat());
|
||||
StandardMetrics.ms_v_bat_energy_recd->SetValue(StandardMetrics.ms_v_bat_energy_recd_total->AsFloat() - mt_bat_recd_start->AsFloat());
|
||||
}
|
||||
|
||||
void OvmsVehicleRenaultZoePh2::Ticker10(uint32_t ticker) {
|
||||
if (StandardMetrics.ms_v_charge_pilot->AsBool() && !StandardMetrics.ms_v_env_on->AsBool()) {
|
||||
ChargeStatistics();
|
||||
} else {
|
||||
EnergyStatistics();
|
||||
if (m_UseBMScalculation) {
|
||||
EnergyStatisticsBMS();
|
||||
} else {
|
||||
EnergyStatisticsOVMS();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -279,6 +289,10 @@ void OvmsVehicleRenaultZoePh2::Ticker1(uint32_t ticker) {
|
|||
mt_pos_odometer_start->SetValue(StandardMetrics.ms_v_pos_odometer->AsFloat(0));
|
||||
StandardMetrics.ms_v_bat_energy_used->SetValue(0);
|
||||
StandardMetrics.ms_v_bat_energy_recd->SetValue(0);
|
||||
if (m_UseBMScalculation) {
|
||||
mt_bat_used_start->SetValue(StandardMetrics.ms_v_bat_energy_used_total->AsFloat());
|
||||
mt_bat_recd_start->SetValue(StandardMetrics.ms_v_bat_energy_recd_total->AsFloat());
|
||||
}
|
||||
}
|
||||
if (CarIsDriving && !CarIsDrivingInit) {
|
||||
CarIsDrivingInit = true;
|
||||
|
|
|
@ -79,6 +79,7 @@ class OvmsVehicleRenaultZoePh2 : public OvmsVehicle {
|
|||
int m_range_ideal;
|
||||
int m_battery_capacity;
|
||||
bool m_UseCarTrip = false;
|
||||
bool m_UseBMScalculation = false;
|
||||
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);
|
||||
|
@ -88,7 +89,8 @@ class OvmsVehicleRenaultZoePh2 : public OvmsVehicle {
|
|||
void IncomingCLUSTER(uint16_t type, uint16_t pid, const char* data, uint16_t len);
|
||||
int calcMinutesRemaining(float charge_voltage, float charge_current);
|
||||
void ChargeStatistics();
|
||||
void EnergyStatistics();
|
||||
void EnergyStatisticsOVMS();
|
||||
void EnergyStatisticsBMS();
|
||||
virtual void Ticker10(uint32_t ticker);//Handle charge, energy statistics
|
||||
virtual void Ticker1(uint32_t ticker); //Handle trip counter
|
||||
|
||||
|
|
Loading…
Reference in New Issue