/* * endurenergy.h * * Reverse engineered internal CAN bus data formats for the EndurEnergy ESP-5100. Still a work in progress. */ #ifndef _ENDURENERGY_H #define _ENDURENERGY_H #define BATTERY_ID_MIN 1 #define BATTERY_ID_MAX 8 #define MSG(canid,mask,batid,batmask) #define MSG_SENDER_MASK 0x0000000f /* 18A6A0F 18A8A2F 1010 0110 1010 1000 1110 0001 1110 0010 Notes: PDU formats for all messages are 0xe1 and 0xe2 (multi battery) This is less than 240, so the message is addressable (PDU1) and the PDU specific field contains the destination address (though it's unclear if this follows that spec) */ #define MSGID_UNK1 0x18a6a000 #define MSGID_UNK1_MASK 0x1fffff00 struct diag1 { uint8_t field; union { /* * Missing items (so far): * Server addr * port * local IP * SSID * Password * Encry * HDCP */ struct { uint8_t pad; /* always 0 */ uint8_t field; union { struct { uint8_t hw_ver; uint8_t reserved[2]; } f00; /* guess */ struct { uint32_t device_id; } f01; /* displayed in decimal */ struct { char product_id[4]; } f02; /* not NUL terminated */ struct { uint8_t unknown[4]; } f03; /* 0x01 0x01 0x00 0x00 */ struct { uint8_t unknown[4]; } f04; /*1: 03 10 01 6E, 2: 03 10 7B 56, 3: 03 10 A6 4A, 4: 03 10 BD 90, 5: 03 10 C3 EE, 6: 03 10 7D 50, 7: 03 10 59 D0, 8: 03 10 2E C2 */ struct { uint16_t sw_ver; uint8_t reserved[2]; } f05; struct { uint8_t reserved[4]; } f06; }; } f03; /* (2025-01-21 08:45:45.935024) can0 18A6A0F8 [8] 2A 00 19 D4 1A 00 00 31 -> port 0x1ad4 -> 6868 */ struct { uint8_t pad; /* always 0 */ uint8_t field; union { struct { char bmsid[4]; } f00; /* 0..3 */ struct { char bmsid[4]; } f01; /* 4..7 */ struct { char bmsid[4]; } f02; /* 8..11 */ struct { char bmsid[4]; } f03; /* 12..15 */ struct { char bmsid[4]; } f04; /* 16..19 */ struct { char bmsid[4]; } f05; /* 20..21 (last byte is NUL) */ struct { uint8_t reserved[4]; } f06; struct { uint8_t reserved[4]; } f07; struct { uint8_t reserved[4]; } f08; }; } f2c; struct { uint8_t pad; /* always 0 */ uint8_t field; struct { char ssid[4]; } f00; // XXX: or is it passphrase? struct { char ssid[4]; } f01; struct { char ssid[4]; } f02; struct { char ssid[4]; } f03; struct { char ssid[4]; } f04; struct { char ssid[4]; } f05; struct { char ssid[4]; } f06; struct { char ssid[4]; } f07; struct { char ssid[4]; } f08; struct { char ssid[4]; } f09; struct { char ssid[4]; } f0a; struct { char ssid[4]; } f0b; struct { char ssid[4]; } f0c; struct { char ssid[4]; } f0d; struct { char ssid[4]; } f0e; struct { char ssid[4]; } f0f; struct { char ssid[4]; } f10; struct { char ssid[4]; } f11; struct { char ssid[4]; } f12; struct { char ssid[4]; } f13; struct { char ssid[4]; } f14; struct { char ssid[4]; } f15; struct { char ssid[4]; } f16; struct { char ssid[4]; } f17; struct { char ssid[4]; } f18; } f78; }; uint8_t csum; } __attribute__((packed)); #define MSGID_UNK2 0x18a8a200 #define MSGID_UNK2_MASK 0x1fffff00 struct unk2 { uint8_t data[7]; uint8_t csum; } __attribute__((packed)); /* priority 6, EDP 0, DP 0, PDU format 0xe1, PDU specific 0xe2 */ #define MSGID_CELL_VOLTAGE 0x18e1e200 #define MSGID_CELL_VOLTAGE_MASK 0x1fffff00 struct cell_voltage { uint8_t start_index; uint16_t voltage[3]; /* Cell voltages in mV */ uint8_t checksum; } __attribute__((packed)); /* priority 6, EDP 0, DP 0, PDU format 0xe1, PDU specific 0xe3 */ #define MSGID_TEMPERATURE 0x18e1e300 #define MSGID_TEMPERATURE_MASK 0x1fffff00 struct temperature { uint8_t temperature1; /* integer degrees celcius */ uint8_t temperature2; /* integer degrees celcius */ uint8_t temperature3; /* integer degrees celcius */ } __attribute__((packed)); /* priority 6, EDP 0, DP 0, PDU format 0xe1, PDU specific 0xe4 */ #define MSG_SUMMARY 0x18e1e400 #define MSG_SUMMARY_MASK 0x1fffff00 struct summary { uint8_t field; union { struct voltage_max_min { // field == 0 uint8_t pad0; /* always seems to be 7 */ uint16_t v_max; /* big endian, max cell voltage in mV */ uint16_t v_min; /* big endian, min cell voltage in mV */ uint8_t pad1; /* always seems to be 0 */ } i00; /* * BMS_TOOL interface: * * SOC_UP System Voltage Current 3 * Max Cell Min Cell Voltage Different # probably computed(?) * Max Temp Min Temp Capacity 3 * Discharge CAP Charge CAP Max Soc 3 * Discharge Quantity Charge Quantity SOH * Battery Voltage Fuse Voltage Output Voltage * * Battery Temperature: * Temperature1 Temperature2 Temperature3 * * * Missing items (so far): * BMS ID * Product ID * Server addr * port * local IP * SSID * Password * Encry * HDCP * * System Voltage * Voltage Difference * Battery Voltage * Fuse Voltage * Output Voltage ID B ID Device ID Bms ID Product ID 1 *10208 22507318 (0x1576f36) 0916F260012202250731? NT01 2 *10136 22507087 (0x1576e4f) 0916F260012202250708? NT01 01 57 6e 4f -> 4F 6E 57 01 3 *10166 22507155 (0x1576e93) 0916F260012202250715? NT01 4 *10175 22507145 (0x1576e89) 0916F260012202250714? NT01 5 *10084 22507255 (0x1576ef7) 0916F260012202250725? NT01 6 *10153 22507081 (0x1576e49) 0916F260012202250708? NT01 7 *10165 22507158 (0x1576e96) 0916F260012202250715? NT01 8 *10142 22507084 (0x1576e4c) 0916F260012202250708? NT01 */ struct misc { // field == 0x01 uint8_t temperature_max; uint8_t temperature_min; uint16_t unknown; uint16_t voltage; // some cell voltage * 1000 -> almost certainly mean cell voltage } i01; struct pack_voltage { // field == 0x02 uint16_t unknown; /* seems always to be 3 */ uint16_t voltage; uint16_t pad; /* always 0 */ } i02; struct current { // field == 0x03 int32_t current; /* negative means battery is charging */ uint16_t soc; /* same value as in both soc fields below */ } i03; struct soc { // field == 0x04 uint16_t soc_up; uint16_t soc_max; uint16_t soc_unknown; /* is always 0x310 */ } i04; struct device_id { // field == 0x05 uint32_t device_id; uint8_t pad0; uint8_t pad1; } i05; struct charge_cap { // field == 0x06 uint32_t charge_cap; /* divide by 100 to get Ah */ uint8_t pad0; uint8_t pad1; } i06; struct discharge_cap { // field == 0x07 uint32_t discharge_cap; /* divide by 100 to get Ah */ uint8_t pad0; uint8_t pad1; } i07; struct charge_quantity { // field == 0x08 uint32_t charge_quantity; /* divide by 10000 to get kWh */ uint8_t pad0; uint8_t pad1; } i08; struct discharge_quantity { // field == 0x09 uint32_t discharge_quantity; /* divide by 10000 to get kWh, e.g. 14 25 51 00 -> 0x00512512 -> 5317908 -> 531.7908kWh */ uint8_t pad0; uint8_t pad1; } i09; struct versions { // field == 0x0A uint16_t sw_ver; /* currently 03CC */ uint16_t hw_ver; /* currently 0001*/ uint16_t pad; } i0a; struct battery_id_1 { // field == 0xB /* BatteryID[0:3] */ char sn[4]; uint8_t pad[2]; } i0b; struct battery_id_2 { // field == 0xC /* BatteryID[4:7] */ char sn[4]; uint8_t pad[2]; } i0c; struct battery_id_3 { // field == 0xD /* BatteryID[8:11] */ char sn[4]; uint8_t pad[2]; } i0d; struct battery_id_4 { // field == 0xE /* BatteryID[12:15] */ char sn[4]; uint8_t pad[2]; } i0e; struct battery_id_5 { // field == 0xF /* BatteryID[16:18] */ char sn[3]; uint8_t pad[3]; } i0f; struct filler_10 { uint8_t pad[6]; } i10; /* always seems to be 0 */ struct filler_11 { uint8_t pad[6]; } i11; /* always seems to be 0 */ struct filler_12 { uint8_t pad[6]; } i12; /* always seems to be 0 */ struct filler_13 { uint8_t pad[6]; } i13; /* always seems to be 0 */ struct filler_14 { uint8_t pad[6]; } i14; /* always seems to be 0 */ struct soh { // field == 0x15 // can0 18E1E4F7 [8] 15 E8 03 5A 5A 00 00 B4 uint16_t soh; /* big endian, percent and 10ths, i.e. 98.5% shows as 985 (0x3d9 -> D9 03) */ uint8_t cap0; /* capacity in amp-hours */ uint8_t cap1; /* capacity in amp-hours? */ uint8_t pad0; /* always seems to be 0 */ uint8_t pad1; /* always seems to be 0 */ } i15; }; uint8_t csum; // ?? appears to be sum of bytes[0:6] } __attribute__((packed)); /************************************************************************* * Known faults and alarms: * * Fault (10): * Hardware * Short * Sample * TempOpen * TempShort * Current * Address Conflict * Slave Offline * PreCharge OutTime * Slave Fault * * Alarm (11): "Fault Code Description" * UV1 total voltage low * UV2 single cell low * OTD discharge temperature high * UTD discharge temperature low * OCD1 discharge overcurrent * OV1 total voltage high * OV2 single cell high * OTC charge temperature high * UTC charge temperature low * OCC charge overcurrent * Low SOC * * can0 18E1E5F7 [8] 00 00 00 00 02 48 00 4A <- UV2 fault * can0 18E1E5F8 [8] 01 04 00 00 00 04 00 09 <-- OV2 * no fault/alarm * can0 18E1E5F6 [8] 00 00 00 00 02 00 00 02 * can0 18E1E5F6 [8] 01 00 00 00 00 00 00 01 * can0 18E1E5F6 [8] 02 00 00 00 00 00 00 02 * * UV2 alarm (red) * can0 18E1E5F7 [8] 00 00 00 00 02 48 00 4A * can0 18E1E5F7 [8] 01 40 00 48 00 40 00 C9 * can0 18E1E5F7 [8] 02 00 00 00 00 00 00 02 * * OV2 alarm (yellow) * can0 18E1E5F6 [8] 00 00 00 00 02 00 00 02 * can0 18E1E5F6 [8] 01 04 00 00 00 00 00 05 * can0 18E1E5F6 [8] 02 00 00 00 00 00 00 02 * * OV2 alarm (red) * can0 18E1E5F8 [8] 00 00 00 00 04 00 00 04 * can0 18E1E5F8 [8] 01 04 00 00 00 04 00 09 <-- OV2 * can0 18E1E5F8 [8] 02 00 00 00 00 00 00 02 Too cold to charge Faults < 00 00 00 02 20 00 00 20 00 00 00 20 00 00 00 20 00 00 > Current 0.349A [discharge] SOC 71.8% Temp: 5°C 5°C 9°C * - 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 OV2(y) 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00 OV2(r) 00 00 00 04 00 00 04 00 00 00 04 00 00 00 00 00 00 00 UV2(r) 00 00 00 00 02 48 00 40 00 48 00 40 00 00 00 00 00 00 UTC 00 00 00 02 20 00 00 20 00 00 00 20 00 00 00 20 00 00 Fault6 00 00 00 02 00 00 00 20 00 00 00 20 00 00 00 20 00 00 > 2026-02-19 Battery 4 - bank not charging (cold) Faults < 00 00 00 02 00 00 00 20 00 00 00 20 00 00 00 20 00 00 > Current 0.736A [discharge] SOC 40.3% Temp: 3°C 3°C 5°C * == Battery 1 SOH 96.9% HW 0x1 SW 0x3cc 1416719SLKOPG010208 Device ID 22507318 Faults < 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 > Current 0.497A [discharge] SOC 48.0% Temp: 3°C 3°C 6°C * == Battery 2 SOH 96.9% HW 0x1 SW 0x3cc 1416719SLKOPG010136 Device ID 22507087 Faults < 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 > Current 0.000A [discharge] SOC 41.2% Temp: 3°C 4°C 6°C * == Battery 3 SOH 96.5% HW 0x1 SW 0x3cc 1416719SLKOPG010166 Device ID 22507155 Faults < 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 > Current -0.566A [charge] SOC 31.1% Temp: 6°C 6°C 9°C == Battery 4 SOH 96.9% HW 0x1 SW 0x3cc 1416719SLKOPG010175 Device ID 22507145 Faults < 00 00 00 02 00 00 00 20 00 00 00 20 00 00 00 20 00 00 > Current 0.258A [discharge] SOC 40.3% Temp: 3°C 3°C 4°C * == Battery 5 SOH 97.1% HW 0x1 SW 0x3cc 1416719SLKOPG010084 Device ID 22507255 Faults < 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 > Current 0.000A [discharge] SOC 41.7% Temp: 5°C 5°C 6°C * == Battery 6 SOH 96.9% HW 0x1 SW 0x3cc 1416719SLKOPG010153 Device ID 22507081 Faults < 00 00 00 02 00 00 00 20 00 00 00 20 00 00 00 20 00 00 > Current 0.000A [discharge] SOC 30.9% Temp: 5°C 5°C 6°C * == Battery 7 SOH 98.9% HW 0x1 SW 0x3cc 1416330SLKOPG008100 Device ID 22501168 Faults < 00 00 00 02 20 00 00 20 00 00 00 20 00 00 00 20 00 00 > Current 0.847A [discharge] SOC 78.0% Temp: 5°C 5°C 8°C * == Battery 8 SOH 98.2% HW 0x1 SW 0x3cc 1416719SLKOPG010159 Device ID 22507035 Faults < 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 > Current 0.386A [discharge] SOC 56.5% Temp: 5°C 5°C 8°C * */ /* priority 6, EDP 0, DP 0, PDU format 0xe1, PDU specific 0xe5 */ /* XXX: "faults" may be a misnomer, maybe "status"? */ #define MSGID_FAULTS 0x18e1e500 #define MSGID_FAULTS_MASK 0x1fffff00 struct faults { uint8_t field; union { // 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00 # slave // 00 00 00 04 00 00 04 00 00 00 00 00 00 00 00 00 00 00 # master /* == Battery 1 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010208 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00> Current -12.299A [charge] SOC 99.0% Temp: 16°C 17°C 19°C Cell V: C1:3.416V C2:3.422V C3:3.421V C4:3.424V C5:3.423V C6:3.423V C7:3.421V C8:3.426V C9:3.430V C10:3.430V C11:3.441V C12:3.443V C13:3.440V C14:3.442V C15:3.450V C16:3.439V == Battery 2 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010136 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00> Current -10.351A [charge] SOC 99.0% Temp: 17°C 17°C 20°C Cell V: C1:3.427V C2:3.425V C3:3.432V C4:3.432V C5:3.431V C6:3.422V C7:3.429V C8:3.444V C9:3.435V C10:3.426V C11:3.426V C12:3.437V C13:3.431V C14:3.434V C15:3.434V C16:3.435V == Battery 3 SOH 98.2% HW 0x1 SW 0xcc 1416719SLKOPG010166 Faults < 00 00 00 02 00 00 04 00 00 00 04 00 00 00 00 00 00 00> Current -2.019A [charge] SOC 99.0% Temp: 23°C 23°C 26°C Cell V: C1:3.390V C2:3.385V C3:3.389V C4:3.382V C5:3.394V C6:3.427V C7:3.386V C8:3.434V C9:3.436V C10:3.459V C11:3.435V C12:3.508V C13:3.457V C14:3.542V C15:3.550V C16:3.410V == Battery 4 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010175 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00> Current -7.554A [charge] SOC 99.0% Temp: 19°C 19°C 20°C Cell V: C1:3.438V C2:3.446V C3:3.424V C4:3.423V C5:3.428V C6:3.426V C7:3.434V C8:3.436V C9:3.425V C10:3.428V C11:3.462V C12:3.442V C13:3.430V C14:3.438V C15:3.447V C16:3.440V == Battery 5 SOH 98.6% HW 0x1 SW 0xcc 1416719SLKOPG010084 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00> Current -8.381A [charge] SOC 99.0% Temp: 20°C 20°C 21°C Cell V: C1:3.447V C2:3.428V C3:3.433V C4:3.431V C5:3.430V C6:3.448V C7:3.431V C8:3.439V C9:3.435V C10:3.428V C11:3.424V C12:3.428V C13:3.430V C14:3.440V C15:3.441V C16:3.451V == Battery 6 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010153 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00> Current -2.056A [charge] SOC 99.0% Temp: 22°C 22°C 23°C Cell V: C1:3.393V C2:3.415V C3:3.430V C4:3.407V C5:3.420V C6:3.394V C7:3.396V C8:3.460V C9:3.388V C10:3.441V C11:3.523V C12:3.495V C13:3.461V C14:3.487V C15:3.415V C16:3.431V == Battery 7 SOH 99.8% HW 0x1 SW 0xcc 1416330SLKOPG008100 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00> Current -11.974A [charge] SOC 99.0% Temp: 15°C 15°C 17°C Cell V: C1:3.424V C2:3.425V C3:3.429V C4:3.440V C5:3.426V C6:3.426V C7:3.430V C8:3.434V C9:3.435V C10:3.436V C11:3.426V C12:3.437V C13:3.435V C14:3.435V C15:3.433V C16:3.432V == Battery 8 SOH 99.7% HW 0x1 SW 0xcc 1416719SLKOPG010159 Faults < 00 00 00 04 00 00 04 00 00 00 00 00 00 00 00 00 00 00> Current -12.446A [charge] SOC 99.0% Temp: 20°C 21°C 23°C Cell V: C1:3.420V C2:3.430V C3:3.430V C4:3.434V C5:3.434V C6:3.433V C7:3.433V C8:3.440V C9:3.436V C10:3.437V C11:3.432V C12:3.427V C13:3.428V C14:3.437V C15:3.436V C16:3.437V == Battery 1 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010208 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00> Current -12.299A [charge] SOC 99.0% Temp: 16°C 17°C 19°C Cell V: C1:3.416V C2:3.423V C3:3.421V C4:3.423V C5:3.423V C6:3.423V C7:3.421V C8:3.426V C9:3.430V C10:3.430V C11:3.441V C12:3.443V C13:3.440V C14:3.442V C15:3.450V C16:3.439V == Battery 2 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010136 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00> Current -10.351A [charge] SOC 99.0% Temp: 17°C 17°C 20°C Cell V: C1:3.427V C2:3.425V C3:3.433V C4:3.432V C5:3.431V C6:3.421V C7:3.429V C8:3.444V C9:3.435V C10:3.426V C11:3.426V C12:3.437V C13:3.431V C14:3.434V C15:3.434V C16:3.435V == Battery 3 SOH 98.2% HW 0x1 SW 0xcc 1416719SLKOPG010166 Faults < 00 00 00 02 00 00 04 00 00 00 04 00 00 00 00 00 00 00> Current -1.964A [charge] SOC 100.0% Temp: 23°C 23°C 26°C Cell V: C1:3.390V C2:3.385V C3:3.389V C4:3.383V C5:3.394V C6:3.427V C7:3.385V C8:3.433V C9:3.436V C10:3.458V C11:3.436V C12:3.508V C13:3.457V C14:3.542V C15:3.550V C16:3.410V == Battery 4 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010175 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00> Current -7.499A [charge] SOC 100.0% Temp: 19°C 19°C 20°C Cell V: C1:3.438V C2:3.446V C3:3.424V C4:3.422V C5:3.427V C6:3.426V C7:3.434V C8:3.436V C9:3.424V C10:3.428V C11:3.461V C12:3.443V C13:3.430V C14:3.438V C15:3.446V C16:3.440V == Battery 5 SOH 98.6% HW 0x1 SW 0xcc 1416719SLKOPG010084 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00> Current -8.381A [charge] SOC 99.0% Temp: 20°C 20°C 21°C Cell V: C1:3.445V C2:3.429V C3:3.433V C4:3.431V C5:3.430V C6:3.448V C7:3.431V C8:3.439V C9:3.435V C10:3.428V C11:3.424V C12:3.428V C13:3.431V C14:3.440V C15:3.441V C16:3.451V == Battery 6 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010153 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00> Current -2.056A [charge] SOC 99.0% Temp: 22°C 22°C 23°C Cell V: C1:3.393V C2:3.415V C3:3.430V C4:3.407V C5:3.420V C6:3.394V C7:3.396V C8:3.460V C9:3.388V C10:3.441V C11:3.523V C12:3.495V C13:3.461V C14:3.488V C15:3.414V C16:3.432V == Battery 7 SOH 99.8% HW 0x1 SW 0xcc 1416330SLKOPG008100 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00> Current -11.974A [charge] SOC 99.0% Temp: 15°C 15°C 17°C Cell V: C1:3.424V C2:3.425V C3:3.428V C4:3.440V C5:3.427V C6:3.425V C7:3.430V C8:3.435V C9:3.436V C10:3.436V C11:3.426V C12:3.437V C13:3.435V C14:3.435V C15:3.433V C16:3.432V == Battery 8 SOH 99.7% HW 0x1 SW 0xcc 1416719SLKOPG010159 Faults < 00 00 00 04 00 00 04 00 00 00 00 00 00 00 00 00 00 00> Current -12.446A [charge] SOC 99.0% Temp: 20°C 21°C 23°C Cell V: C1:3.420V C2:3.430V C3:3.430V C4:3.434V C5:3.435V C6:3.432V C7:3.433V C8:3.440V C9:3.436V C10:3.437V C11:3.432V C12:3.427V C13:3.428V C14:3.437V C15:3.436V C16:3.436V == Battery 1 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010208 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00> Current -12.299A [charge] SOC 99.0% Temp: 16°C 17°C 19°C Cell V: C1:3.416V C2:3.423V C3:3.421V C4:3.423V C5:3.423V C6:3.423V C7:3.421V C8:3.425V C9:3.429V C10:3.430V C11:3.441V C12:3.443V C13:3.439V C14:3.443V C15:3.449V C16:3.439V == Battery 2 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010136 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00> Current -10.351A [charge] SOC 99.0% Temp: 17°C 17°C 20°C Cell V: C1:3.427V C2:3.425V C3:3.433V C4:3.432V C5:3.431V C6:3.421V C7:3.429V C8:3.444V C9:3.435V C10:3.425V C11:3.426V C12:3.436V C13:3.431V C14:3.433V C15:3.435V C16:3.435V == Battery 3 SOH 98.2% HW 0x1 SW 0xcc 1416719SLKOPG010166 Faults < 00 00 00 02 00 00 04 00 00 00 04 00 00 00 00 00 00 00> Current -1.964A [charge] SOC 100.0% Temp: 23°C 23°C 26°C Cell V: C1:3.390V C2:3.384V C3:3.390V C4:3.383V C5:3.394V C6:3.427V C7:3.385V C8:3.433V C9:3.436V C10:3.458V C11:3.436V C12:3.508V C13:3.456V C14:3.542V C15:3.550V C16:3.411V == Battery 4 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010175 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00> Current -7.499A [charge] SOC 100.0% Temp: 19°C 19°C 20°C Cell V: C1:3.438V C2:3.445V C3:3.424V C4:3.422V C5:3.427V C6:3.425V C7:3.434V C8:3.436V C9:3.424V C10:3.428V C11:3.461V C12:3.443V C13:3.430V C14:3.438V C15:3.446V C16:3.440V == Battery 5 SOH 98.6% HW 0x1 SW 0xcc 1416719SLKOPG010084 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00> Current -8.381A [charge] SOC 99.0% Temp: 20°C 20°C 21°C Cell V: C1:3.445V C2:3.429V C3:3.433V C4:3.431V C5:3.430V C6:3.448V C7:3.431V C8:3.438V C9:3.435V C10:3.427V C11:3.423V C12:3.428V C13:3.431V C14:3.440V C15:3.441V C16:3.451V == Battery 6 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010153 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00> Current -2.056A [charge] SOC 99.0% Temp: 22°C 22°C 23°C Cell V: C1:3.393V C2:3.415V C3:3.430V C4:3.407V C5:3.419V C6:3.394V C7:3.396V C8:3.460V C9:3.388V C10:3.441V C11:3.523V C12:3.496V C13:3.461V C14:3.487V C15:3.415V C16:3.432V == Battery 7 SOH 99.8% HW 0x1 SW 0xcc 1416330SLKOPG008100 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00> Current -11.974A [charge] SOC 99.0% Temp: 15°C 15°C 17°C Cell V: C1:3.424V C2:3.425V C3:3.428V C4:3.440V C5:3.427V C6:3.425V C7:3.430V C8:3.435V C9:3.436V C10:3.435V C11:3.425V C12:3.436V C13:3.435V C14:3.433V C15:3.433V C16:3.432V == Battery 8 SOH 99.7% HW 0x1 SW 0xcc 1416719SLKOPG010159 Faults < 00 00 00 04 00 00 04 00 00 00 00 00 00 00 00 00 00 00> Current -12.373A [charge] SOC 100.0% Temp: 20°C 21°C 23°C Cell V: C1:3.420V C2:3.430V C3:3.430V C4:3.434V C5:3.435V C6:3.432V C7:3.433V C8:3.439V C9:3.435V C10:3.437V C11:3.432V C12:3.426V C13:3.427V C14:3.438V C15:3.435V C16:3.436V == Battery 1 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010208 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00> Current -12.299A [charge] SOC 99.0% Temp: 16°C 17°C 19°C Cell V: C1:3.415V C2:3.423V C3:3.421V C4:3.424V C5:3.423V C6:3.423V C7:3.421V C8:3.426V C9:3.430V C10:3.430V C11:3.441V C12:3.443V C13:3.439V C14:3.443V C15:3.449V C16:3.439V == Battery 2 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010136 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00> Current -10.351A [charge] SOC 99.0% Temp: 17°C 17°C 20°C Cell V: C1:3.428V C2:3.425V C3:3.433V C4:3.432V C5:3.432V C6:3.421V C7:3.429V C8:3.443V C9:3.435V C10:3.425V C11:3.426V C12:3.436V C13:3.431V C14:3.433V C15:3.435V C16:3.435V == Battery 3 SOH 98.2% HW 0x1 SW 0xcc 1416719SLKOPG010166 Faults < 00 00 00 02 00 00 04 00 00 00 04 00 00 00 00 00 00 00> Current -1.964A [charge] SOC 100.0% Temp: 23°C 23°C 26°C Cell V: C1:3.390V C2:3.384V C3:3.390V C4:3.382V C5:3.394V C6:3.427V C7:3.386V C8:3.433V C9:3.436V C10:3.459V C11:3.435V C12:3.508V C13:3.456V C14:3.542V C15:3.550V C16:3.411V == Battery 4 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010175 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00> Current -7.499A [charge] SOC 100.0% Temp: 19°C 19°C 20°C Cell V: C1:3.438V C2:3.445V C3:3.424V C4:3.422V C5:3.427V C6:3.425V C7:3.434V C8:3.436V C9:3.424V C10:3.428V C11:3.462V C12:3.442V C13:3.430V C14:3.438V C15:3.447V C16:3.440V == Battery 5 SOH 98.6% HW 0x1 SW 0xcc 1416719SLKOPG010084 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00> Current -8.381A [charge] SOC 99.0% Temp: 20°C 20°C 21°C Cell V: C1:3.446V C2:3.428V C3:3.434V C4:3.431V C5:3.430V C6:3.447V C7:3.431V C8:3.438V C9:3.435V C10:3.427V C11:3.423V C12:3.428V C13:3.431V C14:3.440V C15:3.440V C16:3.451V == Battery 6 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010153 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00> Current -2.056A [charge] SOC 99.0% Temp: 22°C 22°C 23°C Cell V: C1:3.393V C2:3.416V C3:3.430V C4:3.407V C5:3.419V C6:3.394V C7:3.396V C8:3.460V C9:3.388V C10:3.441V C11:3.523V C12:3.496V C13:3.461V C14:3.487V C15:3.415V C16:3.431V == Battery 7 SOH 99.8% HW 0x1 SW 0xcc 1416330SLKOPG008100 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00> Current -11.974A [charge] SOC 99.0% Temp: 15°C 15°C 17°C Cell V: C1:3.424V C2:3.425V C3:3.428V C4:3.440V C5:3.426V C6:3.425V C7:3.430V C8:3.434V C9:3.435V C10:3.436V C11:3.425V C12:3.437V C13:3.435V C14:3.433V C15:3.433V C16:3.432V == Battery 8 SOH 99.7% HW 0x1 SW 0xcc 1416719SLKOPG010159 Faults < 00 00 00 04 00 00 04 00 00 00 00 00 00 00 00 00 00 00> Current -12.373A [charge] SOC 100.0% Temp: 20°C 21°C 23°C Cell V: C1:3.421V C2:3.429V C3:3.430V C4:3.433V C5:3.435V C6:3.433V C7:3.433V C8:3.439V C9:3.435V C10:3.437V C11:3.432V C12:3.426V C13:3.427V C14:3.438V C15:3.435V C16:3.436V == Battery 1 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010208 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00> Current -12.299A [charge] SOC 100.0% Temp: 16°C 17°C 19°C Cell V: C1:3.415V C2:3.423V C3:3.421V C4:3.424V C5:3.423V C6:3.423V C7:3.421V C8:3.426V C9:3.430V C10:3.430V C11:3.440V C12:3.442V C13:3.440V C14:3.442V C15:3.450V C16:3.440V == Battery 2 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010136 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00> Current -10.774A [charge] SOC 100.0% Temp: 17°C 17°C 20°C Cell V: C1:3.428V C2:3.425V C3:3.433V C4:3.432V C5:3.432V C6:3.421V C7:3.429V C8:3.443V C9:3.435V C10:3.425V C11:3.427V C12:3.436V C13:3.432V C14:3.434V C15:3.435V C16:3.435V == Battery 3 SOH 98.2% HW 0x1 SW 0xcc 1416719SLKOPG010166 Faults < 00 00 00 02 00 00 04 00 00 00 04 00 00 00 00 00 00 00> Current -1.964A [charge] SOC 100.0% Temp: 23°C 23°C 26°C Cell V: C1:3.390V C2:3.384V C3:3.389V C4:3.383V C5:3.394V C6:3.427V C7:3.386V C8:3.433V C9:3.436V C10:3.459V C11:3.435V C12:3.508V C13:3.456V C14:3.542V C15:3.551V C16:3.411V == Battery 4 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010175 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00> Current -7.499A [charge] SOC 100.0% Temp: 19°C 19°C 20°C Cell V: C1:3.438V C2:3.445V C3:3.424V C4:3.422V C5:3.428V C6:3.426V C7:3.434V C8:3.436V C9:3.424V C10:3.428V C11:3.462V C12:3.442V C13:3.430V C14:3.438V C15:3.447V C16:3.440V == Battery 5 SOH 98.6% HW 0x1 SW 0xcc 1416719SLKOPG010084 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00> Current -8.861A [charge] SOC 100.0% Temp: 20°C 20°C 21°C Cell V: C1:3.446V C2:3.428V C3:3.434V C4:3.431V C5:3.430V C6:3.447V C7:3.431V C8:3.438V C9:3.434V C10:3.428V C11:3.424V C12:3.429V C13:3.431V C14:3.441V C15:3.441V C16:3.451V == Battery 6 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010153 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00> Current -2.056A [charge] SOC 99.0% Temp: 22°C 22°C 23°C Cell V: C1:3.393V C2:3.416V C3:3.430V C4:3.407V C5:3.419V C6:3.394V C7:3.396V C8:3.461V C9:3.387V C10:3.440V C11:3.523V C12:3.496V C13:3.461V C14:3.488V C15:3.415V C16:3.431V == Battery 7 SOH 99.8% HW 0x1 SW 0xcc 1416330SLKOPG008100 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00> Current -11.974A [charge] SOC 99.0% Temp: 15°C 15°C 17°C Cell V: C1:3.425V C2:3.425V C3:3.429V C4:3.440V C5:3.426V C6:3.425V C7:3.430V C8:3.434V C9:3.435V C10:3.436V C11:3.425V C12:3.437V C13:3.435V C14:3.435V C15:3.433V C16:3.433V == Battery 8 SOH 99.7% HW 0x1 SW 0xcc 1416719SLKOPG010159 Faults < 00 00 00 04 00 00 04 00 00 00 00 00 00 00 00 00 00 00> Current -12.373A [charge] SOC 100.0% Temp: 20°C 21°C 23°C Cell V: C1:3.421V C2:3.429V C3:3.430V C4:3.433V C5:3.435V C6:3.433V C7:3.433V C8:3.440V C9:3.435V C10:3.438V C11:3.432V C12:3.427V C13:3.428V C14:3.438V C15:3.436V C16:3.436V f7 switches from 04 to 00 on charge (100% SOC already reached, see above): == Battery 2 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010136 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00> Current -0.825A [charge] SOC 100.0% Temp: 17°C 18°C 20°C Cell V: C1:3.390V C2:3.388V C3:3.393V C4:3.392V C5:3.392V C6:3.387V C7:3.391V C8:3.400V C9:3.393V C10:3.390V C11:3.391V C12:3.394V C13:3.391V C14:3.392V C15:3.392V C16:3.393V == Battery 2 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010136 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00> Current -0.825A [charge] SOC 100.0% Temp: 17°C 17°C 20°C Cell V: C1:3.389V C2:3.387V C3:3.392V C4:3.391V C5:3.392V C6:3.386V C7:3.390V C8:3.399V C9:3.393V C10:3.390V C11:3.391V C12:3.394V C13:3.391V C14:3.392V C15:3.392V C16:3.393V == Battery 2 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010136 Faults < 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00> Current -0.807A [charge] SOC 100.0% Temp: 17°C 17°C 20°C Cell V: C1:3.389V C2:3.387V C3:3.392V C4:3.391V C5:3.392V C6:3.386V C7:3.390V C8:3.399V C9:3.393V C10:3.390V C11:3.391V C12:3.394V C13:3.390V C14:3.391V C15:3.392V C16:3.392V == Battery 2 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010136 Faults < 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00> Current -0.807A [charge] SOC 100.0% Temp: 17°C 18°C 20°C Cell V: C1:3.389V C2:3.387V C3:3.392V C4:3.391V C5:3.391V C6:3.386V C7:3.390V C8:3.399V C9:3.392V C10:3.389V C11:3.389V C12:3.393V C13:3.390V C14:3.391V C15:3.392V C16:3.392V == Battery 7 SOH 99.8% HW 0x1 SW 0xcc 1416330SLKOPG008100 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00> Current -3.732A [charge] SOC 100.0% Temp: 15°C 15°C 17°C Cell V: C1:3.390V C2:3.391V C3:3.393V C4:3.400V C5:3.393V C6:3.392V C7:3.394V C8:3.396V C9:3.395V C10:3.396V C11:3.392V C12:3.397V C13:3.397V C14:3.396V C15:3.396V C16:3.394V == Battery 7 SOH 99.8% HW 0x1 SW 0xcc 1416330SLKOPG008100 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00> Current -3.732A [charge] SOC 100.0% Temp: 15°C 15°C 17°C Cell V: C1:3.390V C2:3.391V C3:3.393V C4:3.400V C5:3.393V C6:3.392V C7:3.394V C8:3.396V C9:3.395V C10:3.396V C11:3.392V C12:3.397V C13:3.396V C14:3.396V C15:3.395V C16:3.394V == Battery 7 SOH 99.8% HW 0x1 SW 0xcc 1416330SLKOPG008100 Faults < 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00> Current -3.456A [charge] SOC 100.0% Temp: 15°C 15°C 17°C Cell V: C1:3.390V C2:3.391V C3:3.393V C4:3.399V C5:3.392V C6:3.392V C7:3.393V C8:3.395V C9:3.395V C10:3.395V C11:3.392V C12:3.396V C13:3.396V C14:3.396V C15:3.395V C16:3.394V == Battery 7 SOH 99.8% HW 0x1 SW 0xcc 1416330SLKOPG008100 Faults < 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00> Current -3.456A [charge] SOC 100.0% Temp: 15°C 15°C 17°C Cell V: C1:3.390V C2:3.391V C3:3.392V C4:3.399V C5:3.391V C6:3.391V C7:3.393V C8:3.395V C9:3.395V C10:3.395V C11:3.392V C12:3.396V C13:3.395V C14:3.395V C15:3.394V C16:3.392V == Battery 1 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010208 Faults < 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00> Current 0.000A [discharge] SOC 100.0% Temp: 17°C 17°C 19°C Cell V: C1:3.356V C2:3.357V C3:3.357V C4:3.361V C5:3.359V C6:3.361V C7:3.358V C8:3.359V C9:3.359V C10:3.359V C11:3.362V C12:3.363V C13:3.362V C14:3.363V C15:3.363V C16:3.361V == Battery 2 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010136 Faults < 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00> Current -0.292A [charge] SOC 100.0% Temp: 17°C 18°C 20°C Cell V: C1:3.360V C2:3.359V C3:3.361V C4:3.361V C5:3.361V C6:3.359V C7:3.360V C8:3.364V C9:3.361V C10:3.359V C11:3.360V C12:3.362V C13:3.361V C14:3.361V C15:3.361V C16:3.361V == Battery 3 SOH 98.2% HW 0x1 SW 0xcc 1416719SLKOPG010166 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00> Current 1.214A [discharge] SOC 100.0% Temp: 23°C 23°C 26°C Cell V: C1:3.347V C2:3.347V C3:3.347V C4:3.347V C5:3.349V C6:3.361V C7:3.347V C8:3.362V C9:3.363V C10:3.372V C11:3.363V C12:3.389V C13:3.371V C14:3.399V C15:3.400V C16:3.353V == Battery 4 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010175 Faults < 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00> Current 0.442A [discharge] SOC 100.0% Temp: 19°C 19°C 20°C Cell V: C1:3.364V C2:3.365V C3:3.360V C4:3.359V C5:3.361V C6:3.360V C7:3.362V C8:3.363V C9:3.358V C10:3.360V C11:3.370V C12:3.364V C13:3.362V C14:3.364V C15:3.366V C16:3.365V == Battery 5 SOH 98.6% HW 0x1 SW 0xcc 1416719SLKOPG010084 Faults < 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00> Current 0.386A [discharge] SOC 100.0% Temp: 20°C 20°C 21°C Cell V: C1:3.366V C2:3.361V C3:3.363V C4:3.362V C5:3.363V C6:3.366V C7:3.363V C8:3.365V C9:3.361V C10:3.362V C11:3.362V C12:3.362V C13:3.363V C14:3.364V C15:3.364V C16:3.364V == Battery 6 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010153 Faults < 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00> Current 1.214A [discharge] SOC 100.0% Temp: 22°C 22°C 23°C Cell V: C1:3.346V C2:3.353V C3:3.359V C4:3.350V C5:3.354V C6:3.347V C7:3.347V C8:3.369V C9:3.345V C10:3.364V C11:3.392V C12:3.383V C13:3.371V C14:3.379V C15:3.354V C16:3.360V == Battery 7 SOH 99.8% HW 0x1 SW 0xcc 1416330SLKOPG008100 Faults < 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00> Current 0.000A [discharge] SOC 100.0% Temp: 15°C 15°C 18°C Cell V: C1:3.359V C2:3.359V C3:3.360V C4:3.361V C5:3.360V C6:3.359V C7:3.360V C8:3.360V C9:3.360V C10:3.360V C11:3.360V C12:3.360V C13:3.360V C14:3.360V C15:3.360V C16:3.359V == Battery 8 SOH 99.7% HW 0x1 SW 0xcc 1416719SLKOPG010159 Faults < 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00> Current 0.588A [discharge] SOC 100.0% Temp: 20°C 21°C 24°C Cell V: C1:3.358V C2:3.362V C3:3.363V C4:3.363V C5:3.363V C6:3.363V C7:3.364V C8:3.364V C9:3.364V C10:3.364V C11:3.362V C12:3.360V C13:3.360V C14:3.364V C15:3.364V C16:3.362V */ /* Commonly seen in other related protocols: single overvoltage single undervoltage group overvoltage group undervoltage charge overtemp charge undertemp discharge overtemp discharge undertemp charge overcurrent discharge overcurrent short circuit See: https://www.lithiumbatterypcb.com/wp-content/uploads/2023/05/CANBUS-communication-protocol.pdf */ struct { uint8_t f1; uint8_t f2; uint8_t f3; uint8_t f4; /* always seems to be 0x02 on slaves, 0x04 on masters */ uint8_t f5; uint8_t f6; } i0; struct { uint8_t f7; /* OV2: 0x04, UV2 0x40 */ uint8_t f8; uint8_t f9; uint8_t fa; uint8_t fb; uint8_t fc; } i1; struct { uint8_t fd; uint8_t fe; uint8_t ff; uint8_t f10; uint8_t f11; uint8_t f12; } i2; }; uint8_t csum; /* checksum */ } __attribute__((packed)); #define MSGID_E1E6 0x18e1e600 #define MSGID_E1E6_MASK 0x1fffff00 struct e1e6 { uint8_t data[8]; } __attribute__((packed)); /* priority 6, EDP 0, DP 0, PDU format 0xe2, PDU specific 0xe1 */ /* Only sent by master */ #define MSGID_BATTERIES 0x18e2e100 #define MSGID_BATTERIES_MASK 0x1fffff00 struct batteries { uint16_t battery_mask; /* bitmask of batteries in system */ uint16_t unknown1; /* 0x8855 */ uint16_t unknown2; /* 0x0000 */ uint16_t unknown3; /* 0x8822 */ } __attribute__((packed)); #endif /* !_ENDURENERGY_H */