Hello,
I’m looking into fixing battery preheating on my 2022 ID.4 and this forum is packed with great information.
My current thinking is to man-in-the-middle the LIN bus to the Z132 HV battery heater and turn it on for a X time. More info at https://github.com/jagheterfredrik/meb-preheat/
Thought I ask the collective wisdom here: do you think it’s feasible?
Battery preheating on ID.4 / MEB
-
- Posts: 5
- Joined: Thu Mar 13, 2025 6:25 pm
- Been thanked: 1 time
-
- Posts: 5
- Joined: Thu Mar 13, 2025 6:25 pm
- Been thanked: 1 time
Re: Battery preheating on ID.4 / MEB
I've built a harness, I thought the battery heater was the one documented in the Wiki but it wasn't. It seems the ID.4 heater (1EE.963.231) is built by BorgWarner and has a slightly different LIN bus communication scheme.
Every 50ms a PID is polled, alternating between:
ID 15 (0x0F): 8 bytes, in my case 0, 190, 0, 0, 150, 64, 58, 60. My assumption is that it is feedback and the last three are temperatures -50. During a 15 second listen, only the fifth byte (150) value flip flopped between 150 and 151.
ID 28 (0x1C): 4 bytes, in my case 254, 252, 1, 248. I assume this is control but I don't think the heater was heating so not sure. This value remained constant.
Next up I need to force the heater to run using UDS output testing functionality to see what changes.
Every 50ms a PID is polled, alternating between:
ID 15 (0x0F): 8 bytes, in my case 0, 190, 0, 0, 150, 64, 58, 60. My assumption is that it is feedback and the last three are temperatures -50. During a 15 second listen, only the fifth byte (150) value flip flopped between 150 and 151.
ID 28 (0x1C): 4 bytes, in my case 254, 252, 1, 248. I assume this is control but I don't think the heater was heating so not sure. This value remained constant.
Next up I need to force the heater to run using UDS output testing functionality to see what changes.
-
- Posts: 5
- Joined: Thu Mar 13, 2025 6:25 pm
- Been thanked: 1 time
Re: Battery preheating on ID.4 / MEB
I tried getting the car to heat the battery but CAN readouts show 0 amp draw from the PTC battery heater.
ID 28 haven't changed but ID 15 did interesting stuff when connected while first booting up the car.
The first recorded value of ID 15 was 0,189,0,0,135,58,54,55
The fifth byte (135) value ramped up to 154 (overshoot?) during 3 seconds to then quickly stabilize at 151 (same as yesterday). The coolant pump was briefly running at 40% according to OBD, I wonder if this is flow related? Not sure.
The three last bytes started rising slowly and does match outdoor temperature well (at offset -50), the two last bytes seem to match the "HV Battery PTC Temperature #1 and #2" as reported through OBD. I assume the 6th byte is some kind of PCB temperature.
ID 28 haven't changed but ID 15 did interesting stuff when connected while first booting up the car.
The first recorded value of ID 15 was 0,189,0,0,135,58,54,55
The fifth byte (135) value ramped up to 154 (overshoot?) during 3 seconds to then quickly stabilize at 151 (same as yesterday). The coolant pump was briefly running at 40% according to OBD, I wonder if this is flow related? Not sure.
The three last bytes started rising slowly and does match outdoor temperature well (at offset -50), the two last bytes seem to match the "HV Battery PTC Temperature #1 and #2" as reported through OBD. I assume the 6th byte is some kind of PCB temperature.
-
- Posts: 5
- Joined: Thu Mar 13, 2025 6:25 pm
- Been thanked: 1 time
Re: Battery preheating on ID.4 / MEB
Ok, I had to go to a DC fast charger to get the car to actually heat the battery.
ID 15:
Example while heating: 34 BE 00 00 86 4C 3D 42
Byte 1: Current (0.25*X in amps)
Byte 2: HV battery voltage (2*X in volt)
Byte 3,4: Status? Always 0
Byte 5: LV battery voltage (0.1*X in volt)
Byte 6, 7, 8: Temp heater, in, out. Offset -50
ID 28:
The BMS ramps up the heater over a couple of seconds, like this (LIN data in hex):
FE FC 01 F8 (what we saw earlier, when off)
FE FC 0D F8
FE FC 15 F8
FE FC 1D F8
FE FC 25 F8
...
FE FC F5 F8
FE FC FD F8
FE FC 05 F9
..
FE FC 1D FB (Stopped here, 99 in decimal, i.e. 1% per step)
From above we can deduce that we have a bit for on/off and 100 steps (7 bits) of duty cycle. I've added a LDF to my repo to describe it better.
I also discovered that the device implements UDSonLIN, using LIN diagnostics commands the BMS issues UDS Read Data by Identifier requests, e.g. reading ID F187 the heater returns "1EE963231 " and for F197: "J848 HV-PTC "
ID 15:
Example while heating: 34 BE 00 00 86 4C 3D 42
Byte 1: Current (0.25*X in amps)
Byte 2: HV battery voltage (2*X in volt)
Byte 3,4: Status? Always 0
Byte 5: LV battery voltage (0.1*X in volt)
Byte 6, 7, 8: Temp heater, in, out. Offset -50
ID 28:
The BMS ramps up the heater over a couple of seconds, like this (LIN data in hex):
FE FC 01 F8 (what we saw earlier, when off)
FE FC 0D F8
FE FC 15 F8
FE FC 1D F8
FE FC 25 F8
...
FE FC F5 F8
FE FC FD F8
FE FC 05 F9
..
FE FC 1D FB (Stopped here, 99 in decimal, i.e. 1% per step)
From above we can deduce that we have a bit for on/off and 100 steps (7 bits) of duty cycle. I've added a LDF to my repo to describe it better.
I also discovered that the device implements UDSonLIN, using LIN diagnostics commands the BMS issues UDS Read Data by Identifier requests, e.g. reading ID F187 the heater returns "1EE963231 " and for F197: "J848 HV-PTC "
- tom91
- Posts: 2271
- Joined: Fri Mar 01, 2019 9:15 pm
- Location: Bristol
- Has thanked: 198 times
- Been thanked: 523 times
Re: Battery preheating on ID.4 / MEB
Next steps would of course by talking to the heater with an LIN adapter or controller of sorts.
Be cool to get it working and added to the list of heaters that work.
Be cool to get it working and added to the list of heaters that work.
-
- Posts: 5
- Joined: Thu Mar 13, 2025 6:25 pm
- Been thanked: 1 time
Re: Battery preheating on ID.4 / MEB
I assembled a LIN responder that emulates the heater and the values I send match what the OBD reports. Unfortunately the BMS does not turn on the circulation pump, even with emulated current draw and big temperature deltas 
