Implement Car On Off behavior

This commit is contained in:
Carsten Schmiemann 2022-04-13 22:16:04 +02:00
parent ac65f65172
commit b0f76d800b
2 changed files with 38 additions and 59 deletions

View file

@ -59,35 +59,34 @@ static const char *TAG = "v-zoe-ph2";
static const OvmsVehicle::poll_pid_t renault_zoe_polls[] = {
//***TX-ID, ***RX-ID, ***SID, ***PID, { Polltime (seconds) for Pollstate 0, 1, 2, 3}, ***CAN BUS Interface, ***FRAMETYPE
//LBC
{ 0x18dadbf1, 0x18daf1db, VEHICLE_POLL_TYPE_OBDIISESSION, SESSION_DEFAULT, { 60, 60, 60, 60 }, 0, ISOTP_EXTFRAME }, // OBD Extended Diagnostic Session
{ 0x18dadbf1, 0x18daf1db, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x9002, { 0, 10, 10, 10 }, 0, ISOTP_EXTFRAME }, // SOC
//{ 0x18dadbf1, 0x18daf1db, VEHICLE_POLL_TYPE_OBDIISESSION, SESSION_DEFAULT, { 60, 60, 60, 60 }, 0, ISOTP_EXTFRAME }, // OBD Extended Diagnostic Session
{ 0x18dadbf1, 0x18daf1db, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x9002, { 0, 10, 3, 10 }, 0, ISOTP_EXTFRAME }, // SOC
{ 0x18dadbf1, 0x18daf1db, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x9003, { 0, 10, 10, 10 }, 0, ISOTP_EXTFRAME }, // SOH
{ 0x18dadbf1, 0x18daf1db, VEHICLE_POLL_TYPE_OBDIIGROUP, 0x9131, { 0, 60, 600, 60 }, 0, ISOTP_EXTFRAME }, // Temp Bat Module 1
{ 0x18dadbf1, 0x18daf1db, VEHICLE_POLL_TYPE_OBDIIGROUP, 0x9021, { 0, 60, 600, 60 }, 0, ISOTP_EXTFRAME }, // Cell Bat Module 1-62
{ 0x18dadbf1, 0x18daf1db, VEHICLE_POLL_TYPE_OBDIIGROUP, 0x9062, { 0, 60, 600, 60 }, 0, ISOTP_EXTFRAME }, // Cell Bat Module 63-96
{ 0x18dadbf1, 0x18daf1db, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x9005, { 0, 10, 10, 10 }, 0, ISOTP_EXTFRAME }, // Battery Voltage
{ 0x18dadbf1, 0x18daf1db, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x925D, { 0, 10, 10, 10 }, 0, ISOTP_EXTFRAME }, // Battery Current
{ 0x18dadbf1, 0x18daf1db, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x91C8, { 0, 10, 10, 10 }, 0, ISOTP_EXTFRAME }, // Battery Available Energy kWh
{ 0x18dadbf1, 0x18daf1db, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x9005, { 0, 10, 3, 5 }, 0, ISOTP_EXTFRAME }, // Battery Voltage
{ 0x18dadbf1, 0x18daf1db, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x925D, { 0, 10, 3, 5 }, 0, ISOTP_EXTFRAME }, // Battery Current
{ 0x18dadbf1, 0x18daf1db, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x91C8, { 0, 10, 3, 5 }, 0, ISOTP_EXTFRAME }, // Battery Available Energy kWh
{ 0x18dadbf1, 0x18daf1db, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x9243, { 0, 10, 10, 10 }, 0, ISOTP_EXTFRAME }, // Energy charged kWh
{ 0x18dadbf1, 0x18daf1db, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x9244, { 0, 10, 10, 10 }, 0, ISOTP_EXTFRAME }, // Energy discharged kWh
{ 0x18dadbf1, 0x18daf1db, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x9246, { 0, 10, 10, 10 }, 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)
//EVC-HCM-VCM
{ 0x18dadaf1, 0x18daf1da, VEHICLE_POLL_TYPE_OBDIISESSION, SESSION_EXTDIAG, { 60, 60, 60, 60 }, 0, ISOTP_EXTFRAME }, // OBD Extended Diagnostic Session
{ 0x18dadaf1, 0x18daf1da, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x2006, { 0, 10, 10, 10 }, 0, ISOTP_EXTFRAME }, // Odometer
{ 0x18dadaf1, 0x18daf1da, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x21DF, { 0, 10, 10, 10 }, 0, ISOTP_EXTFRAME }, // 12Battery Current
{ 0x18dadaf1, 0x18daf1da, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x2005, { 0, 10, 10, 10 }, 0, ISOTP_EXTFRAME }, // 12Battery Voltage
{ 0x18dadaf1, 0x18daf1da, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x21D0, { 0, 10, 10, 10 }, 0, ISOTP_EXTFRAME }, // DCDC Temperature
{ 0x18dadaf1, 0x18daf1da, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x20B4, { 0, 10, 10, 10 }, 0, ISOTP_EXTFRAME }, // DCDC Activation
{ 0x18dadaf1, 0x18daf1da, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x21CF, { 0, 10, 10, 10 }, 0, ISOTP_EXTFRAME }, // Inverter Status
{ 0x18dadaf1, 0x18daf1da, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x303D, { 0, 10, 10, 10 }, 0, ISOTP_EXTFRAME }, // HV Battery Insulation Resistance
//{ 0x18dadaf1, 0x18daf1da, VEHICLE_POLL_TYPE_OBDIISESSION, SESSION_EXTDIAG, { 60, 60, 60, 60 }, 0, ISOTP_EXTFRAME }, // OBD Extended Diagnostic Session
{ 0x18dadaf1, 0x18daf1da, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x2006, { 180, 10, 10, 300 }, 0, ISOTP_EXTFRAME }, // Odometer
{ 0x18dadaf1, 0x18daf1da, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x21DF, { 0, 10, 5, 3 }, 0, ISOTP_EXTFRAME }, // 12Battery Current
{ 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, 0xF446, { 0, 10, 10, 10 }, 0, ISOTP_EXTFRAME }, // Ambient Temperature
//Motor Inverter
{ 0x18dadff1, 0x18daf1df, VEHICLE_POLL_TYPE_OBDIISESSION, SESSION_EXTDIAG, { 60, 60, 60, 60 }, 0, ISOTP_EXTFRAME }, // OBD Extended Diagnostic Session
{ 0x18dadff1, 0x18daf1df, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x700F, { 0, 10, 10, 10 }, 0, ISOTP_EXTFRAME }, // Stator Temperature 1
{ 0x18dadff1, 0x18daf1df, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x7010, { 0, 10, 10, 10 }, 0, ISOTP_EXTFRAME }, // Stator Temperature 2
//{ 0x18dadff1, 0x18daf1df, VEHICLE_POLL_TYPE_OBDIISESSION, SESSION_EXTDIAG, { 60, 60, 60, 60 }, 0, ISOTP_EXTFRAME }, // OBD Extended Diagnostic Session
{ 0x18dadff1, 0x18daf1df, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x700F, { 0, 10, 3, 10 }, 0, ISOTP_EXTFRAME }, // Stator Temperature 1
{ 0x18dadff1, 0x18daf1df, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x7010, { 0, 10, 3, 10 }, 0, ISOTP_EXTFRAME }, // Stator Temperature 2
//Navigation-UCC-ITM
{ 0x747, 0x767, VEHICLE_POLL_TYPE_OBDIISESSION, SESSION_DEFAULT, { 60, 60, 60, 60 }, 0, ISOTP_STD }, // OBD Extended Diagnostic Session
@ -129,12 +128,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, true);
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_inv_status = MyMetrics.InitString("zph2.m.inverter.status", SM_STALE_MID, 0, Percentage);
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_inv_status = MyMetrics.InitString("zph2.m.inverter.status", SM_STALE_MID, 0, Percentage);
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);
// init commands:
cmd_zoe = MyCommandApp.RegisterCommand("zoe-ph2", "Renault Zoe Ph2");
@ -167,17 +166,13 @@ void OvmsVehicleRenaultZoePh2::IncomingFrameCan1(CAN_frame_t* p_frame) {
uint8_t *data = p_frame->data.u8;
ESP_LOGI(TAG, "PID:%x DATA: %02x %02x %02x %02x %02x %02x %02x %02x", p_frame->MsgID, data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7]);
/*
if (m_candata_poll != 1 && m_ready) {
ESP_LOGI(TAG,"Car has woken (CAN bus activity)");
mt_bus_awake->SetValue(true);
//StandardMetrics.ms_v_env_awake->SetValue(true);
m_candata_poll = 1;
if (m_enable_write) POLLSTATE_ON;
if (data[0] == 0x83 && data[1] == 0xc0 && mt_bus_awake->AsBool(true)) {
ESP_LOGI(TAG,"Zoe has gone to sleep (CAN Gateway NAK response)");
mt_bus_awake->SetValue(false);
StandardMetrics.ms_v_env_awake->SetValue(false);
car_on(false);
POLLSTATE_OFF;
}
m_candata_timer = RZ_CANDATA_TIMEOUT;
*/
}
/**
@ -255,6 +250,14 @@ void OvmsVehicleRenaultZoePh2::IncomingEVC(uint16_t type, uint16_t pid, const ch
case 0x2006: { // Odometer (Total Vehicle Distance)
StandardMetrics.ms_v_pos_odometer->SetValue((float) CAN_UINT24(0), Kilometers);
ESP_LOGD(TAG, "2006 EVC ms_v_pos_odometer: %d", CAN_UINT24(0));
if (mt_bus_awake->AsBool(false)) {
ESP_LOGI(TAG,"Zoe woke up (Successful poll on odometer)");
mt_bus_awake->SetValue(true);
StandardMetrics.ms_v_env_awake->SetValue(true);
car_on(true);
POLLSTATE_ON;
}
break;
}
case 0x29FD: {
@ -273,11 +276,6 @@ void OvmsVehicleRenaultZoePh2::IncomingEVC(uint16_t type, uint16_t pid, const ch
ESP_LOGD(TAG, "21D0 EVC ms_v_charge_12v_temp: %d", CAN_UINT(0) - 40);
break;
}
case 0x20B4: {
StandardMetrics.ms_v_env_charging12v->SetValue((bool) (CAN_BYTE(0)));
ESP_LOGD(TAG, "20B4 EVC ms_v_env_charging12v: %d", CAN_UINT(0));
break;
}
case 0x21CF: {
ESP_LOGD(TAG, "21CF EVC mt_inv_status: %d", CAN_UINT(0));
if (CAN_UINT(0) == 1) {
@ -472,7 +470,7 @@ void OvmsVehicleRenaultZoePh2::car_on(bool isOn) {
StandardMetrics.ms_v_env_awake->SetValue(isOn);
// Handle 12Vcharging
StandardMetrics.ms_v_env_charging12v->SetValue(true);
if (m_enable_write) POLLSTATE_RUNNING;
POLLSTATE_RUNNING;
// Reset trip values
if (!m_reset_trip) {
StandardMetrics.ms_v_bat_energy_recd->SetValue(0);
@ -486,9 +484,9 @@ void OvmsVehicleRenaultZoePh2::car_on(bool isOn) {
ESP_LOGI(TAG,"CAR IS OFF");
if (!StandardMetrics.ms_v_charge_inprogress->AsBool()) {
StandardMetrics.ms_v_env_charging12v->SetValue(false);
if (m_enable_write) POLLSTATE_ON;
POLLSTATE_ON;
} else {
if (m_enable_write) POLLSTATE_CHARGING;
POLLSTATE_CHARGING;
}
StandardMetrics.ms_v_env_on->SetValue( isOn );
StandardMetrics.ms_v_env_awake->SetValue( isOn );
@ -497,20 +495,8 @@ void OvmsVehicleRenaultZoePh2::car_on(bool isOn) {
NotifyTrip();
}
}
void OvmsVehicleRenaultZoePh2::Ticker1(uint32_t ticker) {
if (m_candata_timer > 0) {
if (--m_candata_timer == 0) {
// Car has gone to sleep
ESP_LOGI(TAG,"Car has gone to sleep (CAN bus timeout)");
mt_bus_awake->SetValue(false);
//StandardMetrics.ms_v_env_awake->SetValue(false);
StandardMetrics.ms_v_bat_12v_current->SetValue(0);
m_candata_poll = 0;
POLLSTATE_OFF;
}
}
HandleEnergy();
// Handle Tripcounter
@ -627,9 +613,7 @@ void OvmsVehicleRenaultZoePh2::ConfigChanged(OvmsConfigParam* param) {
if (param && param->GetName() != "zph2")
return;
ESP_LOGI(TAG, "Renault Zoe/Kangoo reload configuration");
m_enable_write = MyConfig.GetParamValueBool("zph2", "canwrite", false);
ESP_LOGI(TAG, "Renault Zoe Ph2 reload configuration");
m_range_ideal = MyConfig.GetParamValueInt("zph2", "rangeideal", 160);
m_battery_capacity = MyConfig.GetParamValueInt("zph2", "battcapacity", 27000);
m_enable_egpio = MyConfig.GetParamValueBool("zph2", "enable_egpio", false);

View file

@ -115,7 +115,6 @@ class OvmsVehicleRenaultZoePh2 : public OvmsVehicle {
virtual vehicle_command_t CommandStat(int verbosity, OvmsWriter* writer);
protected:
bool m_enable_write; // canwrite
char zoe_vin[8] = ""; // last 7 digits of full VIN
int m_range_ideal; // … Range Ideal (default 160 km)
int m_battery_capacity; // Battery Capacity (default 27000)
@ -123,10 +122,6 @@ class OvmsVehicleRenaultZoePh2 : public OvmsVehicle {
bool m_reset_trip; // Reset trip when charging else when env on
int m_vehicle_type; // Vehicle type (Zoe, Kangoo...)
int m_reboot_ticker;
private:
unsigned int m_candata_timer;
unsigned int m_candata_poll;
protected:
string zoe_obd_rxbuf;