This commit is contained in:
Carsten Schmiemann 2022-04-18 19:21:09 +02:00
parent 5734e81f03
commit 0a9eee465c
5 changed files with 50 additions and 15 deletions

View File

@ -52,24 +52,26 @@ void OvmsVehicleRenaultZoePh2::IncomingEVC(uint16_t type, uint16_t pid, const ch
if (CAN_NIBL(0) == 1) {
mt_inv_status->SetValue("Inverter off");
StandardMetrics.ms_v_env_on->SetValue(false);
CarIsDriving = false;
if (!CarIsCharging) { POLLSTATE_ON; }
} else if (CAN_NIBL(0) == 2) {
mt_inv_status->SetValue("Inverter on");
StandardMetrics.ms_v_pos_trip->SetValue(0);
mt_pos_odometer_start->SetValue(StandardMetrics.ms_v_pos_odometer->AsFloat(0));
StandardMetrics.ms_v_env_on->SetValue(true);
POLLSTATE_RUNNING;
} else if (CAN_NIBL(0) == 3) {
mt_inv_status->SetValue("Inverter decharging");
StandardMetrics.ms_v_env_on->SetValue(false);
CarIsDriving = false;
if (!CarIsCharging) { POLLSTATE_ON; }
} else if (CAN_NIBL(0) == 4) {
mt_inv_status->SetValue("Inverter alternator mode");
StandardMetrics.ms_v_env_on->SetValue(false);
CarIsDriving = false;
if (!CarIsCharging) { POLLSTATE_ON; }
} else if (CAN_NIBL(0) == 5) {
mt_inv_status->SetValue("Inverter ready to sleep");
StandardMetrics.ms_v_env_on->SetValue(false);
CarIsDriving = false;
if (!CarIsCharging) { POLLSTATE_ON; }
} else {
mt_inv_status->SetValue("Inverter state unknown");

View File

@ -34,7 +34,7 @@ void OvmsVehicleRenaultZoePh2::IncomingLBC(uint16_t type, uint16_t pid, const ch
break;
}
case 0x925D: { //Battery current
StandardMetrics.ms_v_bat_current->SetValue((float) ((CAN_UINT(0) * 0.03125 - 1020) * -1.0), Amps);
StandardMetrics.ms_v_bat_current->SetValue((float) ((CAN_UINT(0) * 0.03125 - 1020) * -1.0f), Amps);
//ESP_LOGD(TAG, "925D LBC ms_v_bat_current: %f", (CAN_UINT(0) * 0.03125 - 1020));
StandardMetrics.ms_v_bat_power->SetValue(((CAN_UINT(0) * 0.03125 - 1020) * StandardMetrics.ms_v_bat_voltage->AsFloat()) * 0.001);
break;

View File

@ -89,13 +89,13 @@ void OvmsVehicleRenaultZoePh2::WebCfgBattery(PageEntry_t& p, PageContext_t& c)
c.form_start(p.uri);
c.fieldset_start("Battery size and Ideal range");
/*
c.input_radio_start("Battery size", "battcapacity");
c.input_radio_option("battcapacity", "R240 (22kWh)", "22000", (if (battcapacity = "22000") == true));
c.input_radio_option("battcapacity", "ZE40 (41kWh)", "41000", (if (battcapacity = "41000") == true));
c.input_radio_option("battcapacity", "ZE50 (52kWh)", "52000", (if (battcapacity = "52000") == true));
c.input_radio_option("battcapacity", "R240 (22kWh)", "22000", battcapacity == "22000");
c.input_radio_option("battcapacity", "ZE40 (41kWh)", "41000", battcapacity == "41000");
c.input_radio_option("battcapacity", "ZE50 (52kWh)", "52000", battcapacity == "52000");
c.input_radio_end("");
*/
c.input_slider("Range Ideal", "rangeideal", 3, "km", -1, atoi(rangeideal.c_str()), 350, 80, 500, 1,
"<p>Default 350km. Ideal Range...</p>");

View File

@ -186,7 +186,7 @@ int OvmsVehicleRenaultZoePh2::calcMinutesRemaining(float charge_voltage, float c
}
//Handle Charging values
void OvmsVehicleRenaultZoePh2::Ticker10(uint32_t ticker) {
void OvmsVehicleRenaultZoePh2::ChargeStatistics() {
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);
@ -204,9 +204,7 @@ void OvmsVehicleRenaultZoePh2::Ticker10(uint32_t ticker) {
}
CarLastCharging = CarIsCharging;
if (!StandardMetrics.ms_v_charge_pilot->AsBool() ||
!StandardMetrics.ms_v_charge_inprogress->AsBool() ||
(charge_current <= 0.0) ) {
if (!StandardMetrics.ms_v_charge_pilot->AsBool() || !StandardMetrics.ms_v_charge_inprogress->AsBool() || (charge_current <= 0.0) ) {
return;
}
@ -225,12 +223,44 @@ void OvmsVehicleRenaultZoePh2::Ticker10(uint32_t ticker) {
}
}
//Handle trip counter and range
void OvmsVehicleRenaultZoePh2::EnergyStatistics() {
float voltage = StandardMetrics.ms_v_bat_voltage->AsFloat(0, Volts);
float current = StandardMetrics.ms_v_bat_current->AsFloat(0, Amps);
float power = voltage * current / 1000.0;
StandardMetrics.ms_v_bat_power->SetValue(power * -1.0f);
if (power != 0.0 && StandardMetrics.ms_v_env_on->AsBool()) {
float energy = power / 3600.0;
if (energy < 0.0f)
StandardMetrics.ms_v_bat_energy_used->SetValue( StandardMetrics.ms_v_bat_energy_used->AsFloat() - energy);
else
StandardMetrics.ms_v_bat_energy_recd->SetValue( StandardMetrics.ms_v_bat_energy_recd->AsFloat() + energy);
}
}
void OvmsVehicleRenaultZoePh2::Ticker10(uint32_t ticker) {
if (StandardMetrics.ms_v_charge_pilot->AsBool() && !StandardMetrics.ms_v_env_on->AsBool()) {
ChargeStatistics();
} else {
EnergyStatistics();
}
}
void OvmsVehicleRenaultZoePh2::Ticker1(uint32_t ticker) {
if (StandardMetrics.ms_v_env_on->AsBool() && !CarIsDriving) {
CarIsDriving = true;
//Start trip after power on
StandardMetrics.ms_v_pos_trip->SetValue(0);
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 (StandardMetrics.ms_v_env_on->AsBool()) {
StandardMetrics.ms_v_pos_trip->SetValue(StandardMetrics.ms_v_pos_odometer->AsFloat(0) - mt_pos_odometer_start->AsFloat(0));
}
StandardMetrics.ms_v_bat_range_est->SetValue((m_range_ideal / StandardMetrics.ms_v_bat_soc->AsFloat(1)) * 100.0, Kilometers);
StandardMetrics.ms_v_bat_range_est->SetValue((m_range_ideal / (StandardMetrics.ms_v_bat_soc->AsFloat(1) * 100.0)), Kilometers);
}
class OvmsVehicleRenaultZoePh2Init {

View File

@ -71,6 +71,7 @@ class OvmsVehicleRenaultZoePh2 : public OvmsVehicle {
bool CarIsCharging = false;
bool CarPluggedIn = false;
bool CarLastCharging = false;
bool CarIsDriving = false;
protected:
int m_range_ideal;
@ -82,7 +83,9 @@ class OvmsVehicleRenaultZoePh2 : public OvmsVehicle {
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); //Handle charge statistics
void ChargeStatistics();
void EnergyStatistics();
virtual void Ticker10(uint32_t ticker);//Handle charge, energy statistics
virtual void Ticker1(uint32_t ticker); //Handle trip counter