eBUS hardware adapter (and ebusd software) Thread

This thread is talk about the eBUS adapter and ebusd software used to talk to eBUS enabled heating systems.

This is primarily Vaillant heat pumps and combi boilers.
But Atag boilers also allow connectivity.

You can purchase the hardware adapter from here (it ships from Germany)
https://ebusd.eu/myadapter/

With documentation to the latest software here:

1 Like

I purchased the Rasperry Pi version of the adapter with a view to hooking up to my 5kW Arotherm Plus heatpump.

It slots into the GPIO header of the Pi and then is seen as a serial device from within Raspian OS.

You connect the eBUS connection using two wires to your devices.

I have all my eBUS connections coming into a Wago junction box so it was easy to add the eBUS into there. (ie heat pump controller, sensocomfort, internet gateway etc)

Note: the software uses minimal CPU resource etc, so any any old Pi should do the trick, even a Zero W should work. But as I wanted wired ethernet the only spare I had was a 4GB Pi4… so MASSIVE overkill for this.

I’m going from memory here as it was months ago that I set it up, but the software was no walk in the park. It’s as far removed from next, next, next, install complete as you can get.

Get ready for a rocky ride in the command line.

The software is located here

Once installed the biggest trouble was getting the software to pull in the fields from your particular device.

There are a bunch of config files that have mappings that map data from the ebus stream to actual known variables/data elements. ie, someone has worked out 1:1 what each piece of data relates to what field (ie flow temperature)

You can get a sense from this section on github

Just dive into into the following for example

Once you manage to get some data from your device into ebusd then you can fire this over to your local MQTT and then onto Home Assistant via auto discovery.

There are literally 100s of fields starting ebusd* in my Home Assistant.

Because I installed mine at the end of the heating season, I’ve barely played with it.

My initial thought was to ignore all the 100s of fluff sensors and see if I could just pull:

  • Flow
  • Return
  • Flow Rate
  • Heat Output
  • Outside Temp
  • Inside Temp

So that I could throw this over into emoncms and see what the Heat Pump App looked like with that data and see how it compared to my Sontex and SDM120 setup.

For those that might find it useful until this one builds up, there’s a 3 page ebusd thread on a Dutch forum(use the browser translate function).

https://gathering.tweakers.net/forum/list_messages/2174564

3 Likes

@Zarch coincidentally, my adapter is on its way so very interested in seeing how it works. For me I am looking to connect it to an ATAG boiler.

Thanks for everything so far.

I was pleased when the adaptor turned up at v5, with built in wifi. Not done much yet, other than scan the bus using ebusd on Raspian, so all the posts above are very helpful.

Found that the ebusd package would not install on Ubuntu 22.04 when I tried, due to deprecated ssl library dependency. May have been sorted by now.

First play trying to match real data from my SDM120, heat meter and known temperature probes against the data coming from the ebusd (via Home Assistant)

Flow and Return look pretty usable, as do the indoor and outdoor temps.

Flow rate looks to be recording high (and not frequent enough)?

Same with electric in and heat out. Not sure how usable those are gonna be?

If we could get more frequent flow rate we could use that to determine heat out
Heat Output = Flow Rate x DT (flow minus return) x SHC (4.2 for water, 3.8 for gycol).

But we’ll get no COP without decent electrical input

COP = heat output / electrical input.

Perhaps I’m not running the right config files (definitely a possibility) and there are better/more instant/frequent fields available for elec in, heat out and flow rate?

Could be the way HA records it. It only records changes IIRC.

I’d just fire the data out via MQTT or the HA emoncms integration (actually I use Node-RED addon in HA to do that as I can send a single MQTT JSON and poll the HA sensor at the rate I want).

This is incorrect.

ebusd does not update every key-value pair for every request. It returns the cached value for the last time it was read from the ebus.

It is correct - my post refers to polling the HA Sensors, not the eBus sensors.

:+1:Just wanted to make sure people wouldn’t think that to be possible, because ebus’ behavior and limitations can be quite surprising :sweat_smile:

1 Like

On request, hereby the values I fetch from the eBUS (using v3 adapter, v5 is on it’s way to here).
I used this csv instead of the base hmu csv: https://github.com/john30/ebusd-configuration/blob/22c230cb6d8b7a24af33efe4a437a1e477783786/ebusd-2.1.x/en/vaillant/08.hmu.csv

In Home Assistant some sensors get auto-discovered, others don’t. For example COP sensors are not mqtt auto disco, so I made these entries in configuration.yaml

  - name: "ebusd hmu CopHc"
    unit_of_measurement: ''
    value_template: "{{value_json[\"0\"].value}}"
    state_topic: "ebusd/hmu/CopHc"
    state_class: measurement

  - name: "ebusd hmu CopHcMonth"
    unit_of_measurement: ''
    value_template: "{{value_json[\"0\"].value}}"
    state_topic: "ebusd/hmu/CopHcMonth"
    state_class: measurement

  - name: "ebusd hmu CopHwc"
    unit_of_measurement: ''
    value_template: "{{value_json[\"0\"].value}}"
    state_topic: "ebusd/hmu/CopHwc"
    state_class: measurement

  - name: "ebusd hmu CopHwcMonth"
    unit_of_measurement: ''
    value_template: "{{value_json[\"0\"].value}}"
    state_topic: "ebusd/hmu/CopHwcMonth"
    state_class: measurement

  - name: "ebusd hmu WaterThroughput"
    unit_of_measurement: 'l/h'
    value_template: "{{value_json[\"0\"].value}}"
    state_topic: "ebusd/hmu/WaterThroughput"
    state_class: measurement

  - name: "ebusd hmu FlowPressure"
    unit_of_measurement: 'bar'
    value_template: "{{value_json[\"0\"].value}}"
    state_topic: "ebusd/hmu/FlowPressure"
    state_class: measurement

  - name: "ebusd hmu SourcePressure"
    unit_of_measurement: 'bar'
    value_template: "{{value_json[\"0\"].value}}"
    state_topic: "ebusd/hmu/SourcePressure"
    state_class: measurement

  - name: "ebusd hmu BuildingCircuitWaterPressure"
    unit_of_measurement: 'bar'
    value_template: "{{value_json[\"0\"].value}}"
    state_topic: "ebusd/hmu/BuildingCircuitWaterPressure"
    state_class: measurement

  - name: "ebusd hmu LowPressure"
    unit_of_measurement: 'bar'
    value_template: "{{value_json[\"0\"].value}}"
    state_topic: "ebusd/hmu/LowPressure"
    state_class: measurement

  - name: "ebusd hmu HighPressure"
    unit_of_measurement: 'bar'
    value_template: "{{value_json[\"0\"].value}}"
    state_topic: "ebusd/hmu/HighPressure"
    state_class: measurement

Then pushing some of these sensors to a local emoncms instance:

emoncms_history:
  api_key: hiddenapikey
  url: http://someurlhere
  inputnode: 10
  whitelist:
  - sensor.wp_temps_temperature_6
  - sensor.wp_temps_temperature_1
  - sensor.wp_temps_temperature_3
  - sensor.wp_temps_temperature_9
  - sensor.wp_temps_temperature_4
  - sensor.wp_temps_temperature_5
  - sensor.wp_temps_temperature_8
  - sensor.wp_temps_temperature_10
  - sensor.wp_temps_temperature_2
  - sensor.wp_temps_temperature_7
  - sensor.ebusd_hmu_status01_temp1_4
  - sensor.ebusd_hmu_waterthroughput
  - sensor.ebusd_hmu_currentconsumedpower
  - sensor.ebusd_hmu_currentyieldpower
  - sensor.ebusd_hmu_cophc
  - sensor.ebusd_hmu_cophcmonth
  - sensor.ebusd_hmu_cophwc
  - sensor.ebusd_hmu_cophwcmonth
  - sensor.ebusd_hmu_flowtemp
  - sensor.ebusd_hmu_returntemp_temps2
    
  - sensor.v_wp_sdm230
  - sensor.a_wp_sdm230
  - sensor.va_wp_sdm230
  - sensor.w_wp_sdm230
  - sensor.kwh_imp_wp_sdm230

  - sensor.v_wp_weerstand_sdm230
  - sensor.a_wp_weerstand_sdm230
  - sensor.va_wp_weerstand_sdm230
  - sensor.w_wp_weerstand_sdm230
  - sensor.kwh_imp_wp_weerstand_sdm230

  - sensor.ebusd_700_displayedoutsidetemp_tempv
  - sensor.ebusd_700_z1roomtemp_tempv

  scan_interval: 15

Then in emoncms I made some input processing combo’s to calculate heating or cooling in W
Calculated heat data ( heat transfer (W) = specific heat (J/kg.K) x flow rate (kg/s) x DT (K) )

1 Like

Thanks really useful. I had a custom 08.hmu file which missed the waterthroughput attribute. I’ve now got this coming through (into node-red) and will start to calculate the Wh Accumalator so that I can take advantage of the heat pump dashboard. I measure power into the heat pump via a CT clamp.