Fix pollstates

This commit is contained in:
Carsten Schmiemann 2022-04-19 02:19:55 +02:00
parent 313ca651b4
commit 19106cdd89
5 changed files with 54 additions and 46 deletions

View File

@ -34,7 +34,7 @@ void OvmsVehicleRenaultZoePh2::IncomingEVC(uint16_t type, uint16_t pid, const ch
}
case 0x2003: { //Vehicle Speed
StandardMetrics.ms_v_pos_speed->SetValue((float) (CAN_UINT(0) * 0.01), KphPS);
ESP_LOGD(TAG, "2003 EVC ms_v_pos_speed: %f", CAN_UINT(0) * 0.01);
//ESP_LOGD(TAG, "2003 EVC ms_v_pos_speed: %f", CAN_UINT(0) * 0.01);
break;
}
case 0x2005: { //12V Battery Voltage
@ -42,37 +42,23 @@ void OvmsVehicleRenaultZoePh2::IncomingEVC(uint16_t type, uint16_t pid, const ch
//ESP_LOGD(TAG, "2005 EVC ms_v_charge_12v_voltage: %f", CAN_UINT(0) * 0.01);
break;
}
case 0x21D0: { //12V Battery Charger/DCDC Temp
StandardMetrics.ms_v_charge_12v_temp->SetValue((float) ((CAN_UINT(0) - 40) * 0.001), Celcius);
ESP_LOGD(TAG, "21D0 EVC ms_v_charge_12v_temp: %f", (CAN_UINT(0) - 40) * 0.001);
break;
}
case 0x21CF: { //Inverter status --- Main switch for polling and driving state
//ESP_LOGD(TAG, "21CF EVC mt_inv_status: %d", CAN_NIBL(0));
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_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");
}
@ -85,12 +71,12 @@ void OvmsVehicleRenaultZoePh2::IncomingEVC(uint16_t type, uint16_t pid, const ch
}
case 0x2A09: { // Power consumption by consumer
//mt_aux_power_consumer->SetValue((float) CAN_UINT(0) * 10, Watts);
ESP_LOGD(TAG, "2A09 EVC mt_aux_power_consumer: %d", CAN_UINT(0) * 10);
//ESP_LOGD(TAG, "2A09 EVC mt_aux_power_consumer: %d", CAN_UINT(0) * 10);
break;
}
case 0x2191: { // Power consumption by ptc
//mt_aux_power_ptc->SetValue((float) CAN_UINT(0) * 10, Watts);
ESP_LOGD(TAG, "2191 EVC mt_aux_power_ptc: %d", CAN_UINT(0) * 10);
//ESP_LOGD(TAG, "2191 EVC mt_aux_power_ptc: %d", CAN_UINT(0) * 10);
break;
}
case 0x2B85: { // Charge plug preset
@ -119,7 +105,6 @@ void OvmsVehicleRenaultZoePh2::IncomingEVC(uint16_t type, uint16_t pid, const ch
StandardMetrics.ms_v_charge_substate->SetValue("stopped");
StandardMetrics.ms_v_charge_inprogress->SetValue(false);
//ESP_LOGD(TAG, "2B6D Charge MMI States : No Charge");
POLLSTATE_ON;
}
if (CAN_NIBL(0) == 1) {
StandardMetrics.ms_v_charge_state->SetValue("timerwait");
@ -131,32 +116,24 @@ void OvmsVehicleRenaultZoePh2::IncomingEVC(uint16_t type, uint16_t pid, const ch
StandardMetrics.ms_v_charge_substate->SetValue("stopped");
StandardMetrics.ms_v_charge_inprogress->SetValue(false);
//ESP_LOGD(TAG, "2B6D Charge MMI States : Ended charge");
POLLSTATE_ON;
}
if (CAN_NIBL(0) == 3) {
StandardMetrics.ms_v_charge_state->SetValue("charging");
StandardMetrics.ms_v_charge_substate->SetValue("onrequest");
StandardMetrics.ms_v_charge_inprogress->SetValue(true);
//ESP_LOGD(TAG, "2B6D Charge MMI States : Charge in progress");
CarIsCharging = true;
POLLSTATE_CHARGING;
} else {
CarIsCharging = false;
POLLSTATE_ON;
}
if (CAN_NIBL(0) == 4) {
StandardMetrics.ms_v_charge_state->SetValue("stopped");
StandardMetrics.ms_v_charge_substate->SetValue("interrupted");
StandardMetrics.ms_v_charge_inprogress->SetValue(false);
//ESP_LOGD(TAG, "2B6D Charge MMI States : Charge failure");
POLLSTATE_ON;
}
if (CAN_NIBL(0) == 5) {
StandardMetrics.ms_v_charge_state->SetValue("stopped");
StandardMetrics.ms_v_charge_substate->SetValue("powerwait");
StandardMetrics.ms_v_charge_inprogress->SetValue(false);
//ESP_LOGD(TAG, "2B6D Charge MMI States : Waiting for current charge");
POLLSTATE_ON;
}
if (CAN_NIBL(0) == 6) {
StandardMetrics.ms_v_door_chargeport->SetValue(true);
@ -167,7 +144,6 @@ void OvmsVehicleRenaultZoePh2::IncomingEVC(uint16_t type, uint16_t pid, const ch
StandardMetrics.ms_v_charge_substate->SetValue("powerwait");
StandardMetrics.ms_v_charge_inprogress->SetValue(false);
//ESP_LOGD(TAG, "2B6D Charge MMI States : Charge preparation");
POLLSTATE_CHARGING;
}
break;
}
@ -195,13 +171,14 @@ void OvmsVehicleRenaultZoePh2::IncomingEVC(uint16_t type, uint16_t pid, const ch
//ESP_LOGD(TAG, "3064 EVC ms_v_mot_rpm: %d", (CAN_UINT(0)));
break;
}
case 0x300F: { // AC charging power
StandardMetrics.ms_v_charge_power->SetValue((float) (CAN_UINT(0) * 0.025), kW);
//ESP_LOGD(TAG, "300F EVC ms_v_charge_power: %f", (CAN_UINT(0) * 0.025));
case 0x300F: { // AC charging power available
mt_main_power_available->SetValue((float) (CAN_UINT(0) * 0.025), kW);
//ESP_LOGD(TAG, "300F EVC mt_main_power_available: %f", (CAN_UINT(0) * 0.025));
break;
}
case 0x300D: { // AC input current
StandardMetrics.ms_v_charge_current->SetValue((float) (CAN_UINT(0) * 0.1), Amps);
StandardMetrics.ms_v_charge_power->SetValue((float) (StandardMetrics.ms_v_charge_current->AsFloat() * StandardMetrics.ms_v_charge_voltage->AsFloat() * mt_main_phases_num->AsFloat()), kW);
//ESP_LOGD(TAG, "300D EVC mt_main_current: %f", (CAN_UINT(0) * 0.1));
break;
}
@ -209,20 +186,25 @@ void OvmsVehicleRenaultZoePh2::IncomingEVC(uint16_t type, uint16_t pid, const ch
//ESP_LOGD(TAG, "300B EVC mt_main_phases: %d", (CAN_NIBL(0)));
if (CAN_NIBL(0) == 0) {
mt_main_phases->SetValue("one phase");
mt_main_phases_num->SetValue(1);
}
if (CAN_NIBL(0) == 1) {
mt_main_phases->SetValue("two phase");
mt_main_phases_num->SetValue(2);
}
if (CAN_NIBL(0) == 2) {
mt_main_phases->SetValue("three phase");
mt_main_phases_num->SetValue(3);
}
if (CAN_NIBL(0) == 3) {
mt_main_phases->SetValue("not detected");
mt_main_phases_num->SetValue(0);
}
break;
}
case 0x2B8A: { // AC mains voltage
StandardMetrics.ms_v_charge_voltage->SetValue((float) (CAN_UINT(0) * 0.5), Volts);
StandardMetrics.ms_v_charge_power->SetValue((float) (StandardMetrics.ms_v_charge_current->AsFloat() * StandardMetrics.ms_v_charge_voltage->AsFloat() * mt_main_phases_num->AsFloat()), kW);
//ESP_LOGD(TAG, "2B8A EVC ms_v_charge_voltage: %f", (CAN_UINT(0) * 0.5));
break;
}

View File

@ -51,13 +51,13 @@ void OvmsVehicleRenaultZoePh2::IncomingINV(uint16_t type, uint16_t pid, const ch
//}
case 0x2004: { // Battery voltage sense
mt_inv_hv_voltage->SetValue(float(CAN_UINT(0) * 0.03125), Volts);
ESP_LOGD(TAG, "2004 INV mt_inv_hv_voltage: %f", float(CAN_UINT(0) * 0.03125));
//ESP_LOGD(TAG, "2004 INV mt_inv_hv_voltage: %f", float(CAN_UINT(0) * 0.03125));
StandardMetrics.ms_v_inv_power->SetValue(float (mt_inv_hv_voltage->AsFloat() * mt_inv_hv_current->AsFloat()) * 0.001);
break;
}
case 0x7049: { // Battery current sense
mt_inv_hv_current->SetValue(float((CAN_UINT(0) * 0.03125) - 500), Amps);
ESP_LOGD(TAG, "7049 INV mt_inv_hv_current: %f", float(CAN_UINT(0) * 0.003125) - 500);
//ESP_LOGD(TAG, "7049 INV mt_inv_hv_current: %f", float(CAN_UINT(0) * 0.003125) - 500);
StandardMetrics.ms_v_inv_power->SetValue(float (mt_inv_hv_current->AsFloat() * mt_inv_hv_voltage->AsFloat()) * 0.001);
break;
}

View File

@ -48,7 +48,6 @@ static const OvmsVehicle::poll_pid_t renault_zoe_polls[] = {
{ 0x18dadaf1, 0x18daf1da, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x2006, { 0, 10, 10, 300 }, 0, ISOTP_EXTFRAME }, // Odometer
{ 0x18dadaf1, 0x18daf1da, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x2003, { 0, 60, 2, 300 }, 0, ISOTP_EXTFRAME }, // Vehicle Speed
{ 0x18dadaf1, 0x18daf1da, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x2005, { 0, 10, 5, 3 }, 0, ISOTP_EXTFRAME }, // 12Battery Voltage
{ 0x18dadaf1, 0x18daf1da, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x21D0, { 0, 10, 10, 3 }, 0, ISOTP_EXTFRAME }, // DCDC Temperature
{ 0x18dadaf1, 0x18daf1da, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x21CF, { 0, 10, 10, 300 }, 0, ISOTP_EXTFRAME }, // Inverter Status
//{ 0x18dadaf1, 0x18daf1da, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x303D, { 0, 10, 10, 3 }, 0, ISOTP_EXTFRAME }, // HV Battery Insulation Resistance
{ 0x18dadaf1, 0x18daf1da, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x2218, { 0, 10, 10, 10 }, 0, ISOTP_EXTFRAME }, // Ambient Temperature
@ -58,7 +57,7 @@ static const OvmsVehicle::poll_pid_t renault_zoe_polls[] = {
{ 0x18dadaf1, 0x18daf1da, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x2B6D, { 60, 2, 300, 10 }, 0, ISOTP_EXTFRAME }, // Charge MMI states
{ 0x18dadaf1, 0x18daf1da, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x2B7A, { 0, 2, 300, 10 }, 0, ISOTP_EXTFRAME }, // Charge type
{ 0x18dadaf1, 0x18daf1da, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x3064, { 0, 10, 3, 10 }, 0, ISOTP_EXTFRAME }, // Motor rpm
{ 0x18dadaf1, 0x18daf1da, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x300F, { 0, 2, 300, 3 }, 0, ISOTP_EXTFRAME }, // AC charging power
{ 0x18dadaf1, 0x18daf1da, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x300F, { 0, 2, 300, 3 }, 0, ISOTP_EXTFRAME }, // AC charging power available
{ 0x18dadaf1, 0x18daf1da, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x300D, { 0, 10, 300, 3 }, 0, ISOTP_EXTFRAME }, // AC mains current
{ 0x18dadaf1, 0x18daf1da, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x300B, { 0, 2, 300, 10 }, 0, ISOTP_EXTFRAME }, // AC phases
{ 0x18dadaf1, 0x18daf1da, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x2B8A, { 0, 2, 300, 10 }, 0, ISOTP_EXTFRAME }, // AC mains voltage

View File

@ -53,6 +53,7 @@ OvmsVehicleRenaultZoePh2::OvmsVehicleRenaultZoePh2() {
// Poll Specific PIDs
POLLSTATE_OFF;
ESP_LOGI(TAG, "Pollstate switched to OFF");
PollSetPidList(m_can1, renault_zoe_polls);
PollSetThrottling(10);
@ -60,11 +61,12 @@ OvmsVehicleRenaultZoePh2::OvmsVehicleRenaultZoePh2() {
// init metrics:
mt_pos_odometer_start = MyMetrics.InitFloat("zph2.v.pos.odometer.start", SM_STALE_MID, 0, Kilometers);
mt_bus_awake = MyMetrics.InitBool("zph2.v.bus.awake", SM_STALE_MIN, false);
mt_available_energy = MyMetrics.InitFloat("zph2.v.avail.energy", SM_STALE_MID, 0, kWh);
mt_main_power_consumed = MyMetrics.InitFloat("zph2.c.main.power.consumed", SM_STALE_MID, 0, kWh);
mt_main_phases = MyMetrics.InitString("zph2.c.main.phases", SM_STALE_MID, 0);
mt_inv_status = MyMetrics.InitString("zph2.m.inverter.status", SM_STALE_MID, 0);
mt_bus_awake = MyMetrics.InitBool("zph2.v.bus.awake", SM_STALE_NONE, false);
mt_available_energy = MyMetrics.InitFloat("zph2.v.avail.energy", SM_STALE_NONE, 0, kWh);
mt_main_power_available = MyMetrics.InitFloat("zph2.c.main.power.available", SM_STALE_MIN, 0, kW);
mt_main_phases = MyMetrics.InitString("zph2.c.main.phases", SM_STALE_MIN, 0);
mt_main_phases_num = MyMetrics.InitFloat("zph2.c.main.phases.num", SM_STALE_MIN, 0);
mt_inv_status = MyMetrics.InitString("zph2.m.inverter.status", SM_STALE_NONE, 0);
mt_mot_temp_stator1 = MyMetrics.InitFloat("zph2.m.temp.stator1", SM_STALE_MID, 0, Celcius);
mt_mot_temp_stator2 = MyMetrics.InitFloat("zph2.m.temp.stator2", SM_STALE_MID, 0, Celcius);
mt_aux_power_consumer = MyMetrics.InitFloat("zph2.c.aux.power.consumer", SM_STALE_MID, 0, Watts);
@ -76,7 +78,7 @@ OvmsVehicleRenaultZoePh2::OvmsVehicleRenaultZoePh2() {
mt_hvac_compressor_pressure = MyMetrics.InitFloat("zph2.h.compressor.pressure", SM_STALE_MID, 0, kPa);
mt_hvac_compressor_power = MyMetrics.InitFloat("zph2.h.compressor.power", SM_STALE_MID, 0, Watts);
mt_hvac_compressor_mode = MyMetrics.InitString("zph2.h.compressor.mode", SM_STALE_MID, 0);
mt_pos_car_trip = MyMetrics.InitFloat("zph2.v.pos.car.trip", SM_STALE_MID, 0, Kilometers);
mt_pos_car_trip = MyMetrics.InitFloat("zph2.v.pos.car.trip", SM_STALE_NONE, 0, Kilometers);
// get values from config store
m_range_ideal = MyConfig.GetParamValueInt("xrz2", "rangeideal", 350);
@ -120,6 +122,7 @@ void OvmsVehicleRenaultZoePh2::IncomingFrameCan1(CAN_frame_t* p_frame) {
StandardMetrics.ms_v_charge_12v_current->SetValue( 0 );
StandardMetrics.ms_v_bat_current->SetValue( 0 );
POLLSTATE_OFF;
ESP_LOGI(TAG, "Pollstate switched to OFF");
}
//There are some free frames on wakeup and start and stop charging.... I try to use them to see if Car is awake and charging, see /Reference/ZOE_Ph2_xxx text files
if (!mt_bus_awake->AsBool() && (data[0] == 0x05 || data[0] == 0x06 || data[0] == 0x07)) { //listen for SingleFrames (0x0) with length of 5-7
@ -128,6 +131,7 @@ void OvmsVehicleRenaultZoePh2::IncomingFrameCan1(CAN_frame_t* p_frame) {
StandardMetrics.ms_v_env_awake->SetValue(true);
StandardMetrics.ms_v_env_charging12v->SetValue(true);
POLLSTATE_ON;
ESP_LOGI(TAG, "Pollstate switched to ON");
}
}
@ -237,7 +241,7 @@ void OvmsVehicleRenaultZoePh2::EnergyStatistics() {
if (power != 0.0 && StandardMetrics.ms_v_env_on->AsBool()) {
float energy = power / 3600.0;
if (energy < 0.0f)
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);
@ -261,6 +265,27 @@ void OvmsVehicleRenaultZoePh2::Ticker1(uint32_t ticker) {
StandardMetrics.ms_v_bat_energy_used->SetValue(0);
StandardMetrics.ms_v_bat_energy_recd->SetValue(0);
}
if (CarIsDriving && !CarIsDrivingInit) {
CarIsDrivingInit = true;
ESP_LOGI(TAG, "Pollstate switched to RUNNING");
POLLSTATE_RUNNING;
}
if (!StandardMetrics.ms_v_env_on->AsBool() && CarIsDriving) {
CarIsDriving = false;
CarIsDrivingInit = false;
ESP_LOGI(TAG, "Pollstate switched to ON");
POLLSTATE_ON;
}
if (StandardMetrics.ms_v_charge_pilot->AsBool() && !CarIsCharging) {
CarIsCharging = true;
ESP_LOGI(TAG, "Pollstate switched to CHARGING");
POLLSTATE_CHARGING;
} else if (!StandardMetrics.ms_v_charge_pilot->AsBool() && CarIsCharging) {
CarIsCharging = false;
ESP_LOGI(TAG, "Pollstate switched to ON");
POLLSTATE_ON;
}
if (StandardMetrics.ms_v_env_on->AsBool() && !m_UseCarTrip) {
StandardMetrics.ms_v_pos_trip->SetValue(StandardMetrics.ms_v_pos_odometer->AsFloat(0) - mt_pos_odometer_start->AsFloat(0));
}

View File

@ -72,6 +72,7 @@ class OvmsVehicleRenaultZoePh2 : public OvmsVehicle {
bool CarPluggedIn = false;
bool CarLastCharging = false;
bool CarIsDriving = false;
bool CarIsDrivingInit = false;
protected:
int m_range_ideal;
@ -92,11 +93,12 @@ class OvmsVehicleRenaultZoePh2 : public OvmsVehicle {
// Renault ZOE specific metrics
OvmsMetricFloat *mt_pos_odometer_start; // ODOmeter at Start
OvmsMetricBool *mt_bus_awake; // can-bus awake status
OvmsMetricFloat *mt_available_energy; // Available Energy
OvmsMetricFloat *mt_main_power_consumed; // Mains active power consumed
OvmsMetricString *mt_main_phases; // Mains phases used
OvmsMetricFloat *mt_pos_odometer_start; //ODOmeter at Start
OvmsMetricBool *mt_bus_awake; //can-bus awake status
OvmsMetricFloat *mt_available_energy; //Available Energy
OvmsMetricFloat *mt_main_power_available; //Mains power available
OvmsMetricString *mt_main_phases; //Mains phases used
OvmsMetricFloat *mt_main_phases_num; //Mains phases used
OvmsMetricString *mt_inv_status; //Inverter status string
OvmsMetricFloat *mt_mot_temp_stator1; //Temp of motor stator 1
OvmsMetricFloat *mt_mot_temp_stator2; //Temp of motor stator 2