Update Jan 2019:
Please look at the following Github pages for all information:
Arduino+HTTP GET: https://github.com/bbqkees/Nefit-Buderu ... o-Domoticz
ESP8266+MQTT: https://github.com/proddy/EMS-ESP-Boiler
For the complete and tested interface board see here: https://shop.hotgoodies.nl/ems/
------------------------------------------------
A while ago I needed to get an indication of the system pressure in my heating system.
At first I started looking at adding a seperate sensor in one of the pipes.
But as I was standing in front of my Nefit gas boiler (cv ketel) I noticed that it already displays the water pressure.
So if i could get the value out of the boiler, I would not need to add another sensor.
After some digging around on the internet I found out it is actually not that hard to read out and also control a Nefit boiler with an Arduino.
You don't even need an Opentherm converter.
All Nefit gas boilers do not rely on f.i. Opentherm for connecting a thermostat but instead use their own protocol.
This protocol is called (Buderus) EMS. The EMS bus is a two wire bus.
The protocol is quite large as the bus supports many devices but you only need to implement a subset.
You can connect to the EMS bus on 2 locations. Either at the thermostat clamps on the inside of the boiler or you can use the service jack plug on the front of the boiler.
I used the jack plug on the front:
The EMS serial bus can be converted via a simple circuit and can then be connected to an Arduino (or Pi) UART.
Every 10 seconds the boiler sends out a status datagram on the bus.
If you only want to read this data the Arduino sketch is simple.
If you also want to be able to change the setpoint or set the 'home' or 'away' function, you need a modified Serial library.
I got a sample from someone who already connected the Nefit boiler to an Arduino and he can change the setpoint directly.
As I have a separate zone control and do not use a Nefit EMS thermostat, I only need to read out the bus.
The serial log below is from one of my recent attempts:
As you can see I already get a lot of useable values from the bus.
Depening on the boiler model some registers might not be available.
Register 14 to 17 are provided by the Nefit thermostat and are writeable.
They are the current room temperature, setpoint, home/away and manual temp override.
In my setup these registers are empty because I do not have a Nefit thermostat.
I am now writing the code to implement the above on my Arduino that already is reading out another serial bus (Resol VBUS). I am also updating the modified Serial library.
When it is ready and stable, I will create a stand-alone sketch for the EMS bus and publish it all here on my github.