Introduction: Eberspacher D2 Diagnostic Hacking
In 2015, my friend and I set about trying to reverse engineer (hack) our heaters!
My original goal was to develop a replacement ECU based on an Arduino - and he was going to investigate the diagnostics on the original ECU but for one reason or another, I ended up discovering the secrets of the Diagnostic interface and he built a viable replacement ECU (which he will publish in his own time - don't ask me for details, I don't know them!).
Most D2 heaters come with a non-diagnostic 701 type, 7-day controller (indicated by the Eberspacher logo printed in White. Diagnostic controllers have the logo in Blue). There's a lot more information here: letonkinoisvarnish
This site has a wealth of useful information on Eberspacher heaters
If your heater has packed up and you want to find out what's wrong or just clear the faults, your options are all expensive:
1. Take it to a dealer - I was quoted £125 just to diagnose a problem then parts & labour on top to fix.
2. Buy a diagnostic controller - £100 or so.
3. Hack it!
I opted for option 2 - then used that to implement option 3 so other people wouldn't have to buy a new controller.
If you're not interested in the technical bit - just skip to step 2 which just tells you what you need to do.
Step 1: The Technical Bit
There are several wires connecting the heater to the controller as follows:
Thin Red = +12 volts power to controller
Yellow = Heater on / off from controller, (+12v continuous = On)
Grey/red = Set target temperature from controller
Brown/white = Reference earth to controller (0 volts)
Depending on the controller you may or may not have the following. If not, find them in the loom.
Blue / white = Diagnostics signals, (serial data, bi-directional)
Grey = External temperature sensor to ECU - optional
Thin Brown = 0 volts power (Usually only used as negative for indicator lights)
There is more information HERE including how to lash together your own simple controller.
The first trace (From a Saleae Logic Analyser) shows the signals the controller sends to the heater, with the Blue/White wire disconnected from the heater. It's clear that it's not sending any data/serial so the instruction to go in to diagnostic mode has to be based on levels/timings only.
The second trace is the same as the first but with the Blue/White wire reconnected. Now you can see a stream of serial data following a 3 second 0V pulse.
The third trace shows the data decoded. The controller shows a single '09' error. This is my interpretation:
85 - Synchronisation byte. Every packet starts with this
64, 4 - Heater Identification? On a D2, each packet starts with this. I've not tried any other heaters.
0, 0, 0, 5, 90, 72, 69 - Preamble? - seems to be the same in every packet. There's probably some status info in there too.
9 - This is the error code. In practice, there is a string of error bytes terminated by one or more 0 bytes
The logic analyser says the data rate is 1218 bits/sec - which makes it more tricky to read using an Arduino or similar without. Worth a go using AltSoftSerial It seems to cope with most unusual rates.
Armed with the above, it should be possible to write an Arduino (or other) sketch to decode the fault codes.
Next - how to put the heater into Diagnostic mode and more importantly, how to clear the faults!
Step 2: How to Enter Diagnostic Mode - and Clear Faults.
To put a D2 Heater into Diagnostic mode:
Start Heater - Connect Yellow wire to +12V
Connect Blue/White to 0V for 3 Sec (Timing needs to be fairly accurate)
Once in Diagnostic Mode, you can clear any faults by:
Connect Blue/White to 0V for 2 Sec
Normally, connecting the Yellow wire to 12V starts the heater. However if at the same time, you connect the Grey/Red wire to 0V, the heater goes into 'Recirculation Mode' and just blows cold air.
I found that I could reliably put the heater into diagnostic mode and clear faults using just a pushbutton which connects Blue/White to 0V - and counting seconds. A better user interface for this might be had by connecting an LED through a 1k Resistor between the Blue/White wire and +12v.
The LED will normally be Off. When you push the button it will be ON, Bright. If you manage to get it into diagnostic mode it will pulse/light up dimly.
So, you could clear the faults at no cost just by shorting the Blue/White wire to 0V and counting accurate seconds. A Microcontroller would make it easier though. Blue/White doesn't have to go to exactly 0V, anything lower than 0.15V seems to work - so you could just use a transistor to pull the connection low.
The above is intended to help you if you want to experiment. It does assume you're not an idiot, however. If you are an Idiot or think you are likely to get upset with me when your Eberspacher turns into a molten blob of plastic - I suggest you follow this link and forget you had ever seen this page. ;-)