// // Warning: don't edit - generated by generate_ecu_code.pl processing ../dev/edmei1.json: EDM 12: Electrical digital motor electronics (low voltage ECU) // This generated code makes it easier to process CANBUS messages from the EDM ecu in a BMW i3 // case I3_PID_EDM_ENTLUEFTUNG_KUEHLSYSTEM: { // 0xA1D0 if (datalen < 3) { ESP_LOGW(TAG, "Received %d bytes for %s, expected %d", datalen, "I3_PID_EDM_ENTLUEFTUNG_KUEHLSYSTEM", 3); break; } unsigned char STAT_ROUTINE_STATUS = (RXBUF_UCHAR(0)); // Status of the routine. See table TAB_ENTLUEFTUNGSROUTINE_STATUS / Status der Routine. Siehe Tabelle // TAB_ENTLUEFTUNGSROUTINE_STATUS ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%x%s\n", "EDM", "ENTLUEFTUNG_KUEHLSYSTEM", "STAT_ROUTINE_STATUS", STAT_ROUTINE_STATUS, "\"0-n\""); unsigned short STAT_RESTZEIT_WERT = (RXBUF_UINT(1)); // Remaining time of the routine in seconds / Restzeit der Routine in Sekunden ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%u%s\n", "EDM", "ENTLUEFTUNG_KUEHLSYSTEM", "STAT_RESTZEIT_WERT", STAT_RESTZEIT_WERT, "\"s\""); // ========== Add your processing here ========== hexdump(rxbuf, type, pid); break; } case I3_PID_EDM_MCAMOS: { // 0xADFA // ========== Add your processing here ========== hexdump(rxbuf, type, pid); break; } case I3_PID_EDM_12V_NACHLADEHISTORIE_LOESCHEN: { // 0xAE02 // ========== Add your processing here ========== hexdump(rxbuf, type, pid); break; } case I3_PID_EDM_12V_NACHLADEHISTOGRAMM_LOESCHEN: { // 0xAE03 // ========== Add your processing here ========== hexdump(rxbuf, type, pid); break; } case I3_PID_EDM_EME_KAELTEMITTEL_ABSPERRVENTIL_ON_OFF: { // 0xDE22 if (datalen < 1) { ESP_LOGW(TAG, "Received %d bytes for %s, expected %d", datalen, "I3_PID_EDM_EME_KAELTEMITTEL_ABSPERRVENTIL_ON_OFF", 1); break; } unsigned char STAT_AKAV_ON = (RXBUF_UCHAR(0)); // Status of the refrigerant shut-off valve; 0 = valve closed; 1 = valve open / Status des // Kältemittelabsperrventils; 0 = Ventil geschlossen; 1 = Ventil offen ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%x%s\n", "EDM", "EME_KAELTEMITTEL_ABSPERRVENTIL_ON_OFF", "STAT_AKAV_ON", STAT_AKAV_ON, "\"0/1\""); // ========== Add your processing here ========== hexdump(rxbuf, type, pid); break; } case I3_PID_EDM_PEDALWERTGEBER: { // 0xDE9C if (datalen < 6) { ESP_LOGW(TAG, "Received %d bytes for %s, expected %d", datalen, "I3_PID_EDM_PEDALWERTGEBER", 6); break; } float STAT_SPANNUNG_PEDALWERT1_WERT = (RXBUF_UINT(0)*0.0049f); // Voltage measured at pedal encoder 1 / Spannung gemessen am Pedalwertgeber 1 ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%.4f%s\n", "EDM", "PEDALWERTGEBER", "STAT_SPANNUNG_PEDALWERT1_WERT", STAT_SPANNUNG_PEDALWERT1_WERT, "\"V\""); float STAT_SPANNUNG_PEDALWERT2_WERT = (RXBUF_UINT(2)*0.0049f); // Voltage measured at the pedal encoder 2 / Spannung gemessen am Pedalwertgeber 2 ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%.4f%s\n", "EDM", "PEDALWERTGEBER", "STAT_SPANNUNG_PEDALWERT2_WERT", STAT_SPANNUNG_PEDALWERT2_WERT, "\"V\""); float STAT_PEDALWERT_WERT = (RXBUF_UINT(4)*0.0625f); // Pedal value determined from pedal value sensors 1 and 2 / Aus Pedalwertgeber 1 und 2 ermittelter Pedalwert ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%.4f%s\n", "EDM", "PEDALWERTGEBER", "STAT_PEDALWERT_WERT", STAT_PEDALWERT_WERT, "\"%\""); // ========== Add your processing here ========== hexdump(rxbuf, type, pid); break; } case I3_PID_EDM_REX_STATISTIK_BETRIEB: { // 0xDEE1 if (datalen < 22) { ESP_LOGW(TAG, "Received %d bytes for %s, expected %d", datalen, "I3_PID_EDM_REX_STATISTIK_BETRIEB", 22); break; } float STAT_BETRIEB_KILOMETER_WERT = (RXBUF_UINT32(0)*0.001f); // Kilometers driven / Gefahrene Kilometer ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%.4f%s\n", "EDM", "REX_STATISTIK_BETRIEB", "STAT_BETRIEB_KILOMETER_WERT", STAT_BETRIEB_KILOMETER_WERT, "\"km\""); unsigned long STAT_LAUFZEIT_WERT = (RXBUF_UINT32(4)); // Runtime range extender motor / Laufzeit Range Extender Motor ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%lu%s\n", "EDM", "REX_STATISTIK_BETRIEB", "STAT_LAUFZEIT_WERT", STAT_LAUFZEIT_WERT, "\"s\""); unsigned long STAT_BETRIEB_ERSTSTARTS_WERT = (RXBUF_UINT32(8)); // Number of first start processes / Anzahl der Erststart-Vorgänge ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%lu%s\n", "EDM", "REX_STATISTIK_BETRIEB", "STAT_BETRIEB_ERSTSTARTS_WERT", STAT_BETRIEB_ERSTSTARTS_WERT, ""); unsigned long STAT_BETRIEB_MSA_STARTS_WERT = (RXBUF_UINT32(12)); // Number of MSA starts / Anzahl MSA - Startvorgänge ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%lu%s\n", "EDM", "REX_STATISTIK_BETRIEB", "STAT_BETRIEB_MSA_STARTS_WERT", STAT_BETRIEB_MSA_STARTS_WERT, ""); unsigned short STAT_REX_BETRIEB_WARTUNG_STARTS_WERT = (RXBUF_UINT(16)); // Number of special rex starts (exhaust-gas test or SGBD) / Number of special rex starts (exhaust-gas test or // SGBD) ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%u%s\n", "EDM", "REX_STATISTIK_BETRIEB", "STAT_REX_BETRIEB_WARTUNG_STARTS_WERT", STAT_REX_BETRIEB_WARTUNG_STARTS_WERT, ""); unsigned long STAT_REX_BETRIEB_BEZUGSKILOMETER_WERT = (RXBUF_UINT32(18)); // Kilometers driven (electric) that were recorded by the statistics / Gefahrene Kilometer (elektrisch) die von // der Statistik erfasst wurden ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%lu%s\n", "EDM", "REX_STATISTIK_BETRIEB", "STAT_REX_BETRIEB_BEZUGSKILOMETER_WERT", STAT_REX_BETRIEB_BEZUGSKILOMETER_WERT, "\"km\""); // ========== Add your processing here ========== hexdump(rxbuf, type, pid); break; } case I3_PID_EDM_REX_STATISTIK_DREHZAHL: { // 0xDEE2 if (datalen < 72) { ESP_LOGW(TAG, "Received %d bytes for %s, expected %d", datalen, "I3_PID_EDM_REX_STATISTIK_DREHZAHL", 72); break; } float STAT_REX_ZEIT_IN_DREHZAHL_1_WERT = (RXBUF_UINT32(0)*0.1f); // Operating time in speed range 1 / Betriebszeit in Drehzahlbereich 1 ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%.4f%s\n", "EDM", "REX_STATISTIK_DREHZAHL", "STAT_REX_ZEIT_IN_DREHZAHL_1_WERT", STAT_REX_ZEIT_IN_DREHZAHL_1_WERT, "\"s\""); float STAT_REX_ZEIT_IN_DREHZAHL_2_WERT = (RXBUF_UINT32(4)*0.1f); // Operating time in speed range 2 / Betriebszeit in Drehzahlbereich 2 ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%.4f%s\n", "EDM", "REX_STATISTIK_DREHZAHL", "STAT_REX_ZEIT_IN_DREHZAHL_2_WERT", STAT_REX_ZEIT_IN_DREHZAHL_2_WERT, "\"s\""); float STAT_REX_ZEIT_IN_DREHZAHL_3_WERT = (RXBUF_UINT32(8)*0.1f); // Operating time in speed range 3 / Betriebszeit in Drehzahlbereich 3 ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%.4f%s\n", "EDM", "REX_STATISTIK_DREHZAHL", "STAT_REX_ZEIT_IN_DREHZAHL_3_WERT", STAT_REX_ZEIT_IN_DREHZAHL_3_WERT, "\"s\""); float STAT_REX_ZEIT_IN_DREHZAHL_4_WERT = (RXBUF_UINT32(12)*0.1f); // Operating time in speed range 4 / Betriebszeit in Drehzahlbereich 4 ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%.4f%s\n", "EDM", "REX_STATISTIK_DREHZAHL", "STAT_REX_ZEIT_IN_DREHZAHL_4_WERT", STAT_REX_ZEIT_IN_DREHZAHL_4_WERT, "\"s\""); float STAT_REX_ZEIT_IN_DREHZAHL_5_WERT = (RXBUF_UINT32(16)*0.1f); // Operating time in speed range 5 / Betriebszeit in Drehzahlbereich 5 ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%.4f%s\n", "EDM", "REX_STATISTIK_DREHZAHL", "STAT_REX_ZEIT_IN_DREHZAHL_5_WERT", STAT_REX_ZEIT_IN_DREHZAHL_5_WERT, "\"s\""); float STAT_REX_ZEIT_IN_DREHZAHL_6_WERT = (RXBUF_UINT32(20)*0.1f); // Operating time in speed range 6 / Betriebszeit in Drehzahlbereich 6 ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%.4f%s\n", "EDM", "REX_STATISTIK_DREHZAHL", "STAT_REX_ZEIT_IN_DREHZAHL_6_WERT", STAT_REX_ZEIT_IN_DREHZAHL_6_WERT, "\"s\""); float STAT_REX_ZEIT_IN_DREHZAHL_7_WERT = (RXBUF_UINT32(24)*0.1f); // Operating time in speed range 7 / Betriebszeit in Drehzahlbereich 7 ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%.4f%s\n", "EDM", "REX_STATISTIK_DREHZAHL", "STAT_REX_ZEIT_IN_DREHZAHL_7_WERT", STAT_REX_ZEIT_IN_DREHZAHL_7_WERT, "\"s\""); float STAT_REX_ZEIT_IN_DREHZAHL_8_WERT = (RXBUF_UINT32(28)*0.1f); // Operating time in speed range 8 / Betriebszeit in Drehzahlbereich 8 ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%.4f%s\n", "EDM", "REX_STATISTIK_DREHZAHL", "STAT_REX_ZEIT_IN_DREHZAHL_8_WERT", STAT_REX_ZEIT_IN_DREHZAHL_8_WERT, "\"s\""); float STAT_REX_ZEIT_IN_DREHZAHL_9_WERT = (RXBUF_UINT32(32)*0.1f); // Operating time in speed range 9 / Betriebszeit in Drehzahlbereich 9 ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%.4f%s\n", "EDM", "REX_STATISTIK_DREHZAHL", "STAT_REX_ZEIT_IN_DREHZAHL_9_WERT", STAT_REX_ZEIT_IN_DREHZAHL_9_WERT, "\"s\""); float STAT_REX_ZEIT_IN_DREHZAHL_10_WERT = (RXBUF_UINT32(36)*0.1f); // Operating time in speed range 10 / Betriebszeit in Drehzahlbereich 10 ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%.4f%s\n", "EDM", "REX_STATISTIK_DREHZAHL", "STAT_REX_ZEIT_IN_DREHZAHL_10_WERT", STAT_REX_ZEIT_IN_DREHZAHL_10_WERT, "\"s\""); float STAT_REX_ZEIT_IN_DREHZAHL_11_WERT = (RXBUF_UINT32(40)*0.1f); // Operating time in speed range 11 / Betriebszeit in Drehzahlbereich 11 ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%.4f%s\n", "EDM", "REX_STATISTIK_DREHZAHL", "STAT_REX_ZEIT_IN_DREHZAHL_11_WERT", STAT_REX_ZEIT_IN_DREHZAHL_11_WERT, "\"s\""); float STAT_REX_ZEIT_IN_DREHZAHL_12_WERT = (RXBUF_UINT32(44)*0.1f); // Operating time in speed range 12 / Betriebszeit in Drehzahlbereich 12 ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%.4f%s\n", "EDM", "REX_STATISTIK_DREHZAHL", "STAT_REX_ZEIT_IN_DREHZAHL_12_WERT", STAT_REX_ZEIT_IN_DREHZAHL_12_WERT, "\"s\""); float STAT_REX_ZEIT_IN_DREHZAHL_13_WERT = (RXBUF_UINT32(48)*0.1f); // Operating time in speed range 13 / Betriebszeit in Drehzahlbereich 13 ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%.4f%s\n", "EDM", "REX_STATISTIK_DREHZAHL", "STAT_REX_ZEIT_IN_DREHZAHL_13_WERT", STAT_REX_ZEIT_IN_DREHZAHL_13_WERT, "\"s\""); float STAT_REX_ZEIT_IN_DREHZAHL_14_WERT = (RXBUF_UINT32(52)*0.1f); // Operating time in speed range 14 / Betriebszeit in Drehzahlbereich 14 ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%.4f%s\n", "EDM", "REX_STATISTIK_DREHZAHL", "STAT_REX_ZEIT_IN_DREHZAHL_14_WERT", STAT_REX_ZEIT_IN_DREHZAHL_14_WERT, "\"s\""); float STAT_REX_ZEIT_IN_DREHZAHL_15_WERT = (RXBUF_UINT32(56)*0.1f); // Operating time in speed range 15 / Betriebszeit in Drehzahlbereich 15 ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%.4f%s\n", "EDM", "REX_STATISTIK_DREHZAHL", "STAT_REX_ZEIT_IN_DREHZAHL_15_WERT", STAT_REX_ZEIT_IN_DREHZAHL_15_WERT, "\"s\""); float STAT_REX_ZEIT_IN_DREHZAHL_16_WERT = (RXBUF_UINT32(60)*0.1f); // Operating time in speed range 16 / Betriebszeit in Drehzahlbereich 16 ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%.4f%s\n", "EDM", "REX_STATISTIK_DREHZAHL", "STAT_REX_ZEIT_IN_DREHZAHL_16_WERT", STAT_REX_ZEIT_IN_DREHZAHL_16_WERT, "\"s\""); float STAT_REX_ZEIT_IN_DREHZAHL_17_WERT = (RXBUF_UINT32(64)*0.1f); // Operating time in speed range 17 / Betriebszeit in Drehzahlbereich 17 ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%.4f%s\n", "EDM", "REX_STATISTIK_DREHZAHL", "STAT_REX_ZEIT_IN_DREHZAHL_17_WERT", STAT_REX_ZEIT_IN_DREHZAHL_17_WERT, "\"s\""); float STAT_REX_ZEIT_IN_DREHZAHL_18_WERT = (RXBUF_UINT32(68)*0.1f); // Operating time in speed range 18 / Betriebszeit in Drehzahlbereich 18 ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%.4f%s\n", "EDM", "REX_STATISTIK_DREHZAHL", "STAT_REX_ZEIT_IN_DREHZAHL_18_WERT", STAT_REX_ZEIT_IN_DREHZAHL_18_WERT, "\"s\""); // ========== Add your processing here ========== hexdump(rxbuf, type, pid); break; } case I3_PID_EDM_ZYKLISCHES_NACHLADEN_INFO: { // 0xDEFD if (datalen < 97) { ESP_LOGW(TAG, "Received %d bytes for %s, expected %d", datalen, "I3_PID_EDM_ZYKLISCHES_NACHLADEN_INFO", 97); break; } unsigned long STAT_PARKEN_SYSTEMZEIT_WERT = (RXBUF_UINT32(0)); // System time when parking / Systemzeit beim Parken ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%lu%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_PARKEN_SYSTEMZEIT_WERT", STAT_PARKEN_SYSTEMZEIT_WERT, "\"s\""); unsigned long STAT_PARKEN_KILOMETERSTAND_WERT = (RXBUF_UINT32(4)); // Parking mileage / Kilometerstand beim Parken ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%lu%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_PARKEN_KILOMETERSTAND_WERT", STAT_PARKEN_KILOMETERSTAND_WERT, "\"km\""); float STAT_PARKEN_NV_BATTERIE_SOC_WERT = (RXBUF_UCHAR(8)*0.5f); // SOC 12V battery when parking / SOC 12V Batterie beim Parken ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%.4f%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_PARKEN_NV_BATTERIE_SOC_WERT", STAT_PARKEN_NV_BATTERIE_SOC_WERT, "\"%\""); unsigned long STAT_E1_PARKEN_SYSTEMZEIT_WERT = (RXBUF_UINT32(9)); // 1st event (last): system time when parking / 1. Ereignis (letzte): Systemzeit beim Parken ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%lu%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_E1_PARKEN_SYSTEMZEIT_WERT", STAT_E1_PARKEN_SYSTEMZEIT_WERT, "\"s\""); unsigned long STAT_E1_PARKEN_KILOMETERSTAND_WERT = (RXBUF_UINT32(13)); // 1st event (last): Mileage while parking / 1. Ereignis (letzte): Kilometerstand beim Parken ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%lu%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_E1_PARKEN_KILOMETERSTAND_WERT", STAT_E1_PARKEN_KILOMETERSTAND_WERT, "\"km\""); float STAT_E1_PARKEN_NV_BATTERIE_SOC_WERT = (RXBUF_UCHAR(17)*0.5f); // 1st event (last): SOC 12V battery when parking / 1. Ereignis (letzte): SOC 12V Batterie beim Parken ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%.4f%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_E1_PARKEN_NV_BATTERIE_SOC_WERT", STAT_E1_PARKEN_NV_BATTERIE_SOC_WERT, "\"%\""); unsigned long STAT_E1_START_ZYKNL_SYSTEMZEIT_WERT = (RXBUF_UINT32(18)); // 1st event (last): System time at the start of the cyclical reloading / 1. Ereignis (letzte): Systemzeit beim // Start des zyklischen Nachladens ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%lu%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_E1_START_ZYKNL_SYSTEMZEIT_WERT", STAT_E1_START_ZYKNL_SYSTEMZEIT_WERT, "\"s\""); float STAT_E1_START_ZYKNL_NV_BATTERIE_SOC_WERT = (RXBUF_UCHAR(22)*0.5f); // 1st event (last): SOC 12V battery when starting cyclical recharging / 1. Ereignis (letzte): SOC 12V Batterie // beim Start des zyklischen Nachladens ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%.4f%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_E1_START_ZYKNL_NV_BATTERIE_SOC_WERT", STAT_E1_START_ZYKNL_NV_BATTERIE_SOC_WERT, "\"%\""); float STAT_E1_START_ZYKNL_HV_BATTERIE_SOC_WERT = (RXBUF_UCHAR(23)*0.5f); // 1st event (last): SOC HV battery when starting cyclical recharging / 1. Ereignis (letzte): SOC HV-Batterie // beim Start des zyklischen Nachladens ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%.4f%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_E1_START_ZYKNL_HV_BATTERIE_SOC_WERT", STAT_E1_START_ZYKNL_HV_BATTERIE_SOC_WERT, "\"%\""); unsigned char STAT_E1_START_ZYKNL_NV_BATTERIE_TEMPERATUR_WERT = (RXBUF_UCHAR(24)-128.0); // 1st event (last): Temperature of the 12V battery at the start of the cyclical recharging / 1. Ereignis // (letzte): Temperatur der 12V Batterie beim Start des zyklischen Nachladens ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%x%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_E1_START_ZYKNL_NV_BATTERIE_TEMPERATUR_WERT", STAT_E1_START_ZYKNL_NV_BATTERIE_TEMPERATUR_WERT, "\"°C\""); unsigned short STAT_E1_LADEDAUER_WERT = (RXBUF_UINT(25)+1.0); // 1st event (last): Duration of the cyclical reloading / 1. Ereignis (letzte): Dauer des zyklischen Nachladens ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%u%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_E1_LADEDAUER_WERT", STAT_E1_LADEDAUER_WERT, "\"s\""); float STAT_E1_ENDE_ZYKNL_NV_BATTERIE_SOC_WERT = (RXBUF_UCHAR(27)*0.5f); // 1st event (last): SOC 12V battery at the end of the cyclic recharge / 1. Ereignis (letzte): SOC 12V Batterie // beim Ende des zyklischen Nachladens ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%.4f%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_E1_ENDE_ZYKNL_NV_BATTERIE_SOC_WERT", STAT_E1_ENDE_ZYKNL_NV_BATTERIE_SOC_WERT, "\"%\""); float STAT_E1_ENDE_ZYKNL_HV_BATTERIE_SOC_WERT = (RXBUF_UCHAR(28)*0.5f); // 1st event (last): SOC HV battery at the end of cyclical recharging / 1. Ereignis (letzte): SOC HV-Batterie // beim Ende des zyklischen Nachladens ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%.4f%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_E1_ENDE_ZYKNL_HV_BATTERIE_SOC_WERT", STAT_E1_ENDE_ZYKNL_HV_BATTERIE_SOC_WERT, "\"%\""); unsigned char STAT_E1_GRUND_LADEENDE = (RXBUF_UCHAR(29)); // 1st event (last): Reason for end of charging / 1. Ereignis (letzte): Grund Ladeende ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%x%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_E1_GRUND_LADEENDE", STAT_E1_GRUND_LADEENDE, "\"0-n\""); unsigned char STAT_E1_ZYKNL_PROGNOSE_EIN = (RXBUF_UCHAR(30)); // 1st event (last): Forecast as to whether further cyclical NL possible (0 = no, 1 = yes) / 1. Ereignis // (letzte): Prognose, ob weiteres zykl. NL möglich (0 = nein, 1 = ja) ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%x%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_E1_ZYKNL_PROGNOSE_EIN", STAT_E1_ZYKNL_PROGNOSE_EIN, "\"0/1\""); unsigned long STAT_E2_PARKEN_SYSTEMZEIT_WERT = (RXBUF_UINT32(31)); // 2nd event: system time when parking / 2. Ereignis: Systemzeit beim Parken ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%lu%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_E2_PARKEN_SYSTEMZEIT_WERT", STAT_E2_PARKEN_SYSTEMZEIT_WERT, "\"s\""); unsigned long STAT_E2_PARKEN_KILOMETERSTAND_WERT = (RXBUF_UINT32(35)); // 2nd event: odometer reading while parking / 2. Ereignis: Kilometerstand beim Parken ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%lu%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_E2_PARKEN_KILOMETERSTAND_WERT", STAT_E2_PARKEN_KILOMETERSTAND_WERT, "\"km\""); float STAT_E2_PARKEN_NV_BATTERIE_SOC_WERT = (RXBUF_UCHAR(39)*0.5f); // 2nd event: SOC 12V battery when parking / 2. Ereignis: SOC 12V Batterie beim Parken ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%.4f%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_E2_PARKEN_NV_BATTERIE_SOC_WERT", STAT_E2_PARKEN_NV_BATTERIE_SOC_WERT, "\"%\""); unsigned long STAT_E2_START_ZYKNL_SYSTEMZEIT_WERT = (RXBUF_UINT32(40)); // 2nd event: System time at the start of the cyclical reloading / 2. Ereignis: Systemzeit beim Start des // zyklischen Nachladens ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%lu%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_E2_START_ZYKNL_SYSTEMZEIT_WERT", STAT_E2_START_ZYKNL_SYSTEMZEIT_WERT, "\"s\""); float STAT_E2_START_ZYKNL_NV_BATTERIE_SOC_WERT = (RXBUF_UCHAR(44)*0.5f); // 2nd event: SOC 12V battery when starting cyclical recharging / 2. Ereignis: SOC 12V Batterie beim Start des // zyklischen Nachladens ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%.4f%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_E2_START_ZYKNL_NV_BATTERIE_SOC_WERT", STAT_E2_START_ZYKNL_NV_BATTERIE_SOC_WERT, "\"%\""); float STAT_E2_START_ZYKNL_HV_BATTERIE_SOC_WERT = (RXBUF_UCHAR(45)*0.5f); // 2nd event: SOC HV battery when starting cyclical recharging / 2. Ereignis: SOC HV-Batterie beim Start des // zyklischen Nachladens ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%.4f%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_E2_START_ZYKNL_HV_BATTERIE_SOC_WERT", STAT_E2_START_ZYKNL_HV_BATTERIE_SOC_WERT, "\"%\""); unsigned char STAT_E2_START_ZYKNL_NV_BATTERIE_TEMPERATUR_WERT = (RXBUF_UCHAR(46)-128.0); // 2nd event: temperature of the 12V battery at the start of the cyclical recharge / 2. Ereignis: Temperatur der // 12V Batterie beim Start des zyklischen Nachladens ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%x%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_E2_START_ZYKNL_NV_BATTERIE_TEMPERATUR_WERT", STAT_E2_START_ZYKNL_NV_BATTERIE_TEMPERATUR_WERT, "\"°C\""); unsigned short STAT_E2_LADEDAUER_WERT = (RXBUF_UINT(47)+1.0); // 2nd event: Duration of the cyclical reloading / 2. Ereignis: Dauer des zyklischen Nachladens ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%u%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_E2_LADEDAUER_WERT", STAT_E2_LADEDAUER_WERT, "\"s\""); float STAT_E2_ENDE_ZYKNL_NV_BATTERIE_SOC_WERT = (RXBUF_UCHAR(49)*0.5f); // 2nd event: SOC 12V battery at the end of the cyclic recharge / 2. Ereignis: SOC 12V Batterie beim Ende des // zyklischen Nachladens ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%.4f%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_E2_ENDE_ZYKNL_NV_BATTERIE_SOC_WERT", STAT_E2_ENDE_ZYKNL_NV_BATTERIE_SOC_WERT, "\"%\""); float STAT_E2_ENDE_ZYKNL_HV_BATTERIE_SOC_WERT = (RXBUF_UCHAR(50)*0.5f); // 2nd event: SOC HV battery at the end of cyclical recharging / 2. Ereignis: SOC HV-Batterie beim Ende des // zyklischen Nachladens ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%.4f%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_E2_ENDE_ZYKNL_HV_BATTERIE_SOC_WERT", STAT_E2_ENDE_ZYKNL_HV_BATTERIE_SOC_WERT, "\"%\""); unsigned char STAT_E2_GRUND_LADEENDE = (RXBUF_UCHAR(51)); // 2nd event: Reason for end of charging / 2. Ereignis: Grund Ladeende ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%x%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_E2_GRUND_LADEENDE", STAT_E2_GRUND_LADEENDE, "\"0-n\""); unsigned char STAT_E2_ZYKNL_PROGNOSE_EIN = (RXBUF_UCHAR(52)); // 2nd event: prognosis whether further cyclical NL possible (0 = no, 1 = yes) / 2. Ereignis: Prognose, ob // weiteres zykl. NL möglich (0 = nein, 1 = ja) ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%x%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_E2_ZYKNL_PROGNOSE_EIN", STAT_E2_ZYKNL_PROGNOSE_EIN, "\"0/1\""); unsigned long STAT_E3_PARKEN_SYSTEMZEIT_WERT = (RXBUF_UINT32(53)); // 3rd event: system time when parking / 3. Ereignis: Systemzeit beim Parken ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%lu%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_E3_PARKEN_SYSTEMZEIT_WERT", STAT_E3_PARKEN_SYSTEMZEIT_WERT, "\"s\""); unsigned long STAT_E3_PARKEN_KILOMETERSTAND_WERT = (RXBUF_UINT32(57)); // 3rd event: mileage while parking / 3. Ereignis: Kilometerstand beim Parken ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%lu%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_E3_PARKEN_KILOMETERSTAND_WERT", STAT_E3_PARKEN_KILOMETERSTAND_WERT, "\"km\""); float STAT_E3_PARKEN_NV_BATTERIE_SOC_WERT = (RXBUF_UCHAR(61)*0.5f); // 3rd event: SOC 12V battery when parking / 3. Ereignis: SOC 12V Batterie beim Parken ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%.4f%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_E3_PARKEN_NV_BATTERIE_SOC_WERT", STAT_E3_PARKEN_NV_BATTERIE_SOC_WERT, "\"%\""); unsigned long STAT_E3_START_ZYKNL_SYSTEMZEIT_WERT = (RXBUF_UINT32(62)); // 3rd event: System time at the start of the cyclical reloading / 3. Ereignis: Systemzeit beim Start des // zyklischen Nachladens ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%lu%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_E3_START_ZYKNL_SYSTEMZEIT_WERT", STAT_E3_START_ZYKNL_SYSTEMZEIT_WERT, "\"s\""); float STAT_E3_START_ZYKNL_NV_BATTERIE_SOC_WERT = (RXBUF_UCHAR(66)*0.5f); // 3rd event: SOC 12V battery at the start of cyclic recharging / 3. Ereignis: SOC 12V Batterie beim Start des // zyklischen Nachladens ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%.4f%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_E3_START_ZYKNL_NV_BATTERIE_SOC_WERT", STAT_E3_START_ZYKNL_NV_BATTERIE_SOC_WERT, "\"%\""); float STAT_E3_START_ZYKNL_HV_BATTERIE_SOC_WERT = (RXBUF_UCHAR(67)*0.5f); // 3rd event: SOC HV battery when starting cyclical recharging / 3. Ereignis: SOC HV-Batterie beim Start des // zyklischen Nachladens ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%.4f%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_E3_START_ZYKNL_HV_BATTERIE_SOC_WERT", STAT_E3_START_ZYKNL_HV_BATTERIE_SOC_WERT, "\"%\""); unsigned char STAT_E3_START_ZYKNL_NV_BATTERIE_TEMPERATUR_WERT = (RXBUF_UCHAR(68)-128.0); // 3rd event: temperature of the 12V battery at the start of the cyclic recharge / 3. Ereignis: Temperatur der // 12V Batterie beim Start des zyklischen Nachladens ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%x%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_E3_START_ZYKNL_NV_BATTERIE_TEMPERATUR_WERT", STAT_E3_START_ZYKNL_NV_BATTERIE_TEMPERATUR_WERT, "\"°C\""); unsigned short STAT_E3_LADEDAUER_WERT = (RXBUF_UINT(69)+1.0); // 3rd event: Duration of the cyclical reloading / 3. Ereignis: Dauer des zyklischen Nachladens ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%u%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_E3_LADEDAUER_WERT", STAT_E3_LADEDAUER_WERT, "\"s\""); float STAT_E3_ENDE_ZYKNL_NV_BATTERIE_SOC_WERT = (RXBUF_UCHAR(71)*0.5f); // 3rd event: SOC 12V battery at the end of the cyclic recharge / 3. Ereignis: SOC 12V Batterie beim Ende des // zyklischen Nachladens ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%.4f%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_E3_ENDE_ZYKNL_NV_BATTERIE_SOC_WERT", STAT_E3_ENDE_ZYKNL_NV_BATTERIE_SOC_WERT, "\"%\""); float STAT_E3_ENDE_ZYKNL_HV_BATTERIE_SOC_WERT = (RXBUF_UCHAR(72)*0.5f); // 3rd event: SOC HV battery at the end of the cyclical recharge / 3. Ereignis: SOC HV-Batterie beim Ende des // zyklischen Nachladens ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%.4f%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_E3_ENDE_ZYKNL_HV_BATTERIE_SOC_WERT", STAT_E3_ENDE_ZYKNL_HV_BATTERIE_SOC_WERT, "\"%\""); unsigned char STAT_E3_GRUND_LADEENDE = (RXBUF_UCHAR(73)); // 3rd event: Reason for end of charging / 3. Ereignis: Grund Ladeende ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%x%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_E3_GRUND_LADEENDE", STAT_E3_GRUND_LADEENDE, "\"0-n\""); unsigned char STAT_E3_ZYKNL_PROGNOSE_EIN = (RXBUF_UCHAR(74)); // 3rd event: prognosis whether further cyclical NL possible (0 = no, 1 = yes) / 3. Ereignis: Prognose, ob // weiteres zykl. NL möglich (0 = nein, 1 = ja) ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%x%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_E3_ZYKNL_PROGNOSE_EIN", STAT_E3_ZYKNL_PROGNOSE_EIN, "\"0/1\""); unsigned long STAT_E4_PARKEN_SYSTEMZEIT_WERT = (RXBUF_UINT32(75)); // 4th event: system time when parking / 4. Ereignis: Systemzeit beim Parken ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%lu%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_E4_PARKEN_SYSTEMZEIT_WERT", STAT_E4_PARKEN_SYSTEMZEIT_WERT, "\"s\""); unsigned long STAT_E4_PARKEN_KILOMETERSTAND_WERT = (RXBUF_UINT32(79)); // 4th event: odometer reading while parking / 4. Ereignis: Kilometerstand beim Parken ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%lu%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_E4_PARKEN_KILOMETERSTAND_WERT", STAT_E4_PARKEN_KILOMETERSTAND_WERT, "\"km\""); float STAT_E4_PARKEN_NV_BATTERIE_SOC_WERT = (RXBUF_UCHAR(83)*0.5f); // 4th event: SOC 12V battery when parking / 4. Ereignis: SOC 12V Batterie beim Parken ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%.4f%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_E4_PARKEN_NV_BATTERIE_SOC_WERT", STAT_E4_PARKEN_NV_BATTERIE_SOC_WERT, "\"%\""); unsigned long STAT_E4_START_ZYKNL_SYSTEMZEIT_WERT = (RXBUF_UINT32(84)); // 4th event: System time at the start of the cyclical reloading / 4. Ereignis: Systemzeit beim Start des // zyklischen Nachladens ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%lu%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_E4_START_ZYKNL_SYSTEMZEIT_WERT", STAT_E4_START_ZYKNL_SYSTEMZEIT_WERT, "\"s\""); float STAT_E4_START_ZYKNL_NV_BATTERIE_SOC_WERT = (RXBUF_UCHAR(88)*0.5f); // 4th event: SOC 12V battery at the start of cyclical recharging / 4. Ereignis: SOC 12V Batterie beim Start des // zyklischen Nachladens ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%.4f%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_E4_START_ZYKNL_NV_BATTERIE_SOC_WERT", STAT_E4_START_ZYKNL_NV_BATTERIE_SOC_WERT, "\"%\""); float STAT_E4_START_ZYKNL_HV_BATTERIE_SOC_WERT = (RXBUF_UCHAR(89)*0.5f); // 4th event: SOC HV battery when starting cyclical recharging / 4. Ereignis: SOC HV-Batterie beim Start des // zyklischen Nachladens ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%.4f%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_E4_START_ZYKNL_HV_BATTERIE_SOC_WERT", STAT_E4_START_ZYKNL_HV_BATTERIE_SOC_WERT, "\"%\""); unsigned char STAT_E4_START_ZYKNL_NV_BATTERIE_TEMPERATUR_WERT = (RXBUF_UCHAR(90)-128.0); // 4th event: temperature of the 12V battery at the start of cyclic recharging / 4. Ereignis: Temperatur der 12V // Batterie beim Start des zyklischen Nachladens ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%x%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_E4_START_ZYKNL_NV_BATTERIE_TEMPERATUR_WERT", STAT_E4_START_ZYKNL_NV_BATTERIE_TEMPERATUR_WERT, "\"°C\""); unsigned short STAT_E4_LADEDAUER_WERT = (RXBUF_UINT(91)+1.0); // 4th event: Duration of the cyclical reloading / 4. Ereignis: Dauer des zyklischen Nachladens ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%u%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_E4_LADEDAUER_WERT", STAT_E4_LADEDAUER_WERT, "\"s\""); float STAT_E4_ENDE_ZYKNL_NV_BATTERIE_SOC_WERT = (RXBUF_UCHAR(93)*0.5f); // 4th event: SOC 12V battery at the end of the cyclic recharge / 4. Ereignis: SOC 12V Batterie beim Ende des // zyklischen Nachladens ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%.4f%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_E4_ENDE_ZYKNL_NV_BATTERIE_SOC_WERT", STAT_E4_ENDE_ZYKNL_NV_BATTERIE_SOC_WERT, "\"%\""); float STAT_E4_ENDE_ZYKNL_HV_BATTERIE_SOC_WERT = (RXBUF_UCHAR(94)*0.5f); // 4th event: SOC HV battery at the end of cyclic recharging / 4. Ereignis: SOC HV-Batterie beim Ende des // zyklischen Nachladens ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%.4f%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_E4_ENDE_ZYKNL_HV_BATTERIE_SOC_WERT", STAT_E4_ENDE_ZYKNL_HV_BATTERIE_SOC_WERT, "\"%\""); unsigned char STAT_E4_GRUND_LADEENDE = (RXBUF_UCHAR(95)); // 4th event: Reason for end of charging / 4. Ereignis: Grund Ladeende ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%x%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_E4_GRUND_LADEENDE", STAT_E4_GRUND_LADEENDE, "\"0-n\""); unsigned char STAT_E4_ZYKNL_PROGNOSE_EIN = (RXBUF_UCHAR(96)); // 4th event: prognosis whether further cyclical NL possible (0 = no, 1 = yes) / 4. Ereignis: Prognose, ob // weiteres zykl. NL möglich (0 = nein, 1 = ja) ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%x%s\n", "EDM", "ZYKLISCHES_NACHLADEN_INFO", "STAT_E4_ZYKNL_PROGNOSE_EIN", STAT_E4_ZYKNL_PROGNOSE_EIN, "\"0/1\""); // ========== Add your processing here ========== hexdump(rxbuf, type, pid); break; } case I3_PID_EDM_ZYKLISCHES_NACHLADEN_HISTOGRAMM: { // 0xDEFE if (datalen < 16) { ESP_LOGW(TAG, "Received %d bytes for %s, expected %d", datalen, "I3_PID_EDM_ZYKLISCHES_NACHLADEN_HISTOGRAMM", 16); break; } unsigned char STAT_STANDZEIT_START_ZYKNL_BEREICH_A_WERT = (RXBUF_UCHAR(0)); // Number of idle times until the beginning of the cyclical reloading in area A. Area A <= K_STDZEITLADEHISTGRZ1 // (days) (count up to 255, then no count, value is retained) / Anzahl der Standzeiten bis zum Beginn des // zyklischen Nachladens im Bereich A. Bereich A <= K_STDZEITLADEHISTGRZ1 (Tage) (Zählung bis 255, danach keine // Zählung, Wert bleibt erhalten) ESP_LOGD(TAG, "From ECU %s, pid %s: got %s=%x%s\n", "EDM", "ZYKLISCHES_NACHLADEN_HISTOGRAMM", "STAT_STANDZEIT_START_ZYKNL_BEREICH_A_WERT", STAT_STANDZEIT_START_ZYKNL_BEREICH_A_WERT, ""); unsigned char STAT_STANDZEIT_START_ZYKNL_BEREICH_B_WERT = (RXBUF_UCHAR(1)); // Number of idle times until the start of the cyclical reloading in area B. K_STDZEITLADEHISTGRZ1 (days)