Vaillant eBUS — local ebusd integration (no cloud, no MQTT)

Vaillant eBUS local integration via ebusd (no MQTT / no cloud)

After running into recurring issues with the Vaillant cloud/API integrations, I decided to go local.

I bought an eBUS adapter, connected it through ebusd, and built a Home Assistant custom integration that communicates directly with the heat pump over eBUS — without cloud dependency, API limits, or MQTT in between.

Features

  • Fully local — no myVAILLANT API, cloud, or API keys
  • Direct TCP connection to ebusd
  • Automatic register discovery via ebusd find / define
  • Dynamic entity generation from available eBUS registers
  • Supports:
    • sensors
    • binary sensors
    • numbers
    • selects
    • switches
    • climate
    • water heater
    • calendar
  • Read and write eBUS values from Home Assistant
  • YAML overrides for entity metadata

Why another integration?

The existing API-based integrations work for basic monitoring, but reliability and availability depend on Vaillant’s cloud services.

The standard ebusd MQTT path is also useful, but some Vaillant-specific functionality is difficult to expose:

  • Runtime-defined registers (for example room humidity)
  • Proper climate entities
  • Water heater control
  • Calendar-based away mode
  • Direct write support

This integration focuses on exposing the eBUS data and controls directly in Home Assistant.

Status

Currently developed and tested on my own Vaillant heat pump setup.

Because eBUS implementations differ between models, controllers, and firmware versions, feedback from other hardware configurations is very welcome.

Installation via HACS

Add this custom repository:

https://github.com/MarkBovee/vaillant-ebus

Requirements:

  • Home Assistant
  • ebusd addon
  • ebusd running with:
    • --port=8888
    • --enabledefine

Repository:

Feedback, logs, and hardware details are welcome!

4 Likes

Thank you for this nice integration. Do I understand you correctly, that that should work with a Vaillant heat pumpt which also has a VR921 installed? I’m using it at the moment with the official MyVaillant App.

I’ve enabled EEBUS on the MyVaillant App. Then I installed the ebusd addon (GitHub - john30/ebusd: daemon for communication with eBUS heating systems · GitHub) and tried to configure it. But no matter which port I’m using the ebusd won’t connect. I’m sure that I’ve got the right address because I found the DHCP assignment.

Did I missunderstand that and I need an additional device? Or am I doing something wrong?

At the moment I’m on HomeAssistant 2026.7.3

→ Edit: Forget it, I just saw you still need another ebus adapter for that to work. Sorry for that.

Michael

Hi Michael,

Yes, the VR921 is also what I have installed, and I initially tried exactly the same route: enabling EEBUS in the MyVaillant app and trying to use the VR921 connection directly. Unfortunately, EEBUS on the VR921 is not enough for this integration.

The VR921 communicates through the Vaillant cloud/MyVaillant ecosystem and does not expose the full eBUS data needed for a local Home Assistant integration.

You need an additional eBUS adapter. I’m using the eBUS Adapter v5 C6 stick:

It is connected in parallel with the VR921 using the two eBUS wires, and powered via USB-C. First configure the adapter on a PC (WiFi access and a fixed IP address), then enable the integration and point it to the adapter. After that it works completely locally through eBUS.

You can keep the VR921 installed — the MyVaillant app will continue to work. The eBUS adapter simply listens directly on the bus in parallel and gives Home Assistant local access to the heat pump data and control functions.

So you are not doing anything wrong with the ports or DHCP address — the missing piece is the physical eBUS adapter.

Regards,
Mark

Hi Mark,

thank you for clarification. So I will reach out for an adapter :slight_smile:

Regards,
Michael

1 Like

Hi Mark,

Just found your integration project while struggling with micro-ebusd on my C6 shield. I run a VAILLANT aroTHERM VWL 55/8.2 AS and with micro-ebusd some data like “rundatareturntemp” is missing.
The other option with adapter shield and mqtt plus myPyllant is good but I like to avoid cloud wherever possible.
Your project for “Vaillant only” is great. All data I need included without the need of a mqtt broker or micro-ebuds.
Hopefully your pretty young project will not die soon. I found it while asking Claude-AI about micro-ebusd errors/problems with mqtt and missing data (see above).

Unfortunately I’m not able to support coding.

Great integration so far. Any plans for future relases?

Thanks and best regards

Joerg

Hello Mark.

It sound like a interesting project. At the moment I use eBusd App from Home Assistant and the C6 Shield. All data are transfer to my MQTT Broker. What is the difference to your project and what be the advantage of your project over my current application?

Thanks a lot for your reply and work.
Have a nice weekend.

Ronny

Hi Ronny,

Ups: No MQTT needed. No Vaillant account needed. More data (e.g. humidity)
Downs: Found none so far.

I just found this project yesterday and I’m excited.

Give it a try.
Remember you may have to change eBusd and add usage of port 8888 and 8889.

Regards
Joerg

Sounds great. Is it possible to control my Vaillant? Activate Warmwater Boost and so on? I will let you test a little bit more (testing-rabbit) :joy:.

Thanks for your information. have a nice weekend.

Ronny

OKI…

After some deeper testing I found some (for me) issues. May be I do something wrong but here is what I found so far:

Missing data which I had in mqtt before with ebusd:

  • YieldHwc Day/Month/Year
  • YieldHc Day/Month/Year
  • CopHwcMonth
  • CopHwc
  • CopHcMonth
  • CopHc

Not working for me (Returntemp has no unit):

➜  vaillant_ebus pwd
/root/config/vaillant_ebus
➜  vaillant_ebus cat entities.yaml
hmux0.RunDataReturnTemp:
  friendly_name: "Rücklauftemperatur Heizung"
  icon: "mdi:water-thermometer"
  unit: "°C"
  device_class: "temperature"

Cannot see “Rücklauftemperatur Heizung”

Something wrong with this file?

My heatpump setup is:

VAILLANT aroTHERM VWL 55/8.2 AS
Hydraulikstation VWL 57/8.2 IS

Overview of “Vaillant ebus” App:

Overview ebusd:

Would be great if you can give some help or comments on my input.

Great job so far! :trophy:

Thanks and regards

Jörg

1 Like

One more:

To be independet of cloud myVaillant integration:

I did not find anything to replace this (coming from myVaillant):slight_smile:

Where is (or should be) the equivalent part in Vaillant ebus?

My fault or somehow missing?

Also wonder about this:

Here is my ebusctl:

root@2ad9b828-ebusd:/# ebusctl info
version: ebusd 26.1.26.1
device: 192.168.188.75:9999, TCP, enhanced, firmware 1.1[6819].1[6819]
access: *
signal: acquired
symbol rate: 90
max symbol rate: 174
min arbitration micros: 2
max arbitration micros: 94
min symbol latency: 6
max symbol latency: 59
scan: finished
reconnects: 1
masters: 6
messages: 619
conditional: 0
poll: 331
update: 23
address 03: master #11
address 04: slave #25, scanned "MF=Vaillant;ID=NETX3;SW=0129;HW=0404", loaded "vaillant/04.netx3.csv"
address 08: slave #11, scanned "MF=Vaillant;ID=HMUX0;SW=0303;HW=0504", loaded "vaillant/08.hmux0.csv"
address 10: master #2
address 15: slave #2, scanned "MF=Vaillant;ID=CTLV3;SW=0808;HW=8004", loaded "vaillant/15.ctlv3.csv"
address 31: master #8, ebusd
address 36: slave #8, ebusd
address 71: master #9
address 76: slave #9, scanned "MF=Vaillant;ID=VWZIO;SW=0303;HW=0504", loaded "vaillant/76.vwzio.csv"
address f1: master #10
address f6: slave #10, scanned "MF=Vaillant;ID=NETX3;SW=0129;HW=0404", loaded "vaillant/f6.netx3.csv"
address ff: master #25

Looking forward to hear from you.

Greetings

Jörg

Hello Jörg.

Do you use a manuel activiation of hot water? I use a time plan and additional the boost function. Thats work good in my case.

Thanks everyone for the questions and detailed reports.

A small clarification first: this integration connects to the local ebusd TCP service, not directly to the eBUS adapter. Configure the integration with the host and port where your ebusd instance listens. 8888 is the default, but 8889 works too when it is exposed by your ebusd setup.

Using ebusd is currently a deliberate design choice. It gives the integration one stable local TCP interface across supported adapters and keeps bus transport, protocol decoding, CSV handling, and runtime register definitions in ebusd. The integration focuses on runtime discovery, Home Assistant entities, and controls rather than implementing another eBUS transport stack.

Compared with an MQTT setup, this integration reads the local ebusd discovery and cache directly, so it does not need an MQTT broker or MQTT discovery topics. It does not inherently expose more data than ebusd can provide: available entities still depend on the loaded ebusd definitions and what the connected hardware exposes.

The latest release is v1.5.5. It fixes daily Cooling, Heating, and DHW electricity counters that could become stale until the integration was reloaded.

DHW Boost is supported on controllers where the required registers are discovered. v1.5.4 also fixed its reported switch state. If the control does not appear on a specific system, please attach a discovery dump so I can check the registers exposed by that hardware.

For unsupported hardware, missing sensors, or unexpected values, use Export discovery dump from the integration’s settings screen. It captures the discovered registers, values, and device metadata, which makes reports reproducible without exposing your Home Assistant configuration.

@AlBundy00, I opened issue #99 for the aroTHERM VWL 55/8.2 / HMUX0 report. The missing yield/COP sensors and hmux0.RunDataReturnTemp need a capture before I can safely add mappings.

A YAML override can add metadata for a discovered register, but it cannot create an entity for a register that ebusd does not expose. Please attach the following to #99:

  1. An Export discovery dump export from the integration settings screen.

  2. ebusctl find -c hmux0.

  3. Output from:

    ebusctl read -c hmux0 RunDataReturnTemp
    ebusctl find Yield
    ebusctl find Cop
    
  4. Integration debug logs around discovery and one poll cycle.
    Once the capture confirms the registers and their layouts, I can add it as a community fixture and cover the resulting entities with regression tests.
    There is no fixed release schedule; releases go out when a confirmed fix is ready.

2 Likes

Hi Marc,

Please excuse my earlier incorrect report. I had inadvertently used a faulty 08.hmu.csv file.
Somehow, the fields I had mentioned (and others, too) were missing or commented out in that file.
Everything is available again now that I’ve downloaded the files from john30 once more.

So you can just close the “issue” due to a “noob” user. :wink:

However, what really isn’t working is the ability to adjust the domestic hot water settings as you can in the myVaillant integration in HA.
The entity water_heater.heizung_boiler_dhw_domestic_hot_water shows a status of “unknown”.

As suggested by Ronny I checked the Vaillant app on my mobile. It’s also time controlled.
But ‘boiler_dhw_domestic_hot_water’ still unknown. Even with version 1.5.5.

Many thanks for your work and support.

Have a great weekend.

Regards,
Jörg

How can I add the file …dump.yaml here?



1 Like

Hello @MarkBovee ,

I have also a VR71 which shows:

{"vr_71.Mc1Operation.value": "off;0.0;on;-100", "vr_71.SensorData1.value": "28.06;25.00;-;-;25.94;-;-;50 3c", "vr_71.SensorData2.value": "-;-;-;-;0.00;8.00;80 57 05", "vr_71.SetActorState.value": "-;off;off;on;off;off;-;-;off;off;off;off;00 00"}

How can I fix this?

Thanks a lot and have a great Sunday.

Ronny

P.S. How can I activate

dhw_storage_temp_bottom
dhw_storage_temp_top
vaillant_heat_pump_energy_manager_state

? At the moment it isn’t possible to activate or it is not available.

Thanks again.

P.P.S.

How can I support your project?

Hello @MarkBovee ,

today I have to restart my Home Assistant (System restart). I noticed, that the most of the entities are disabled? Did I something wrong?

Is there a record somewhere of which entities are or were active? What I still find a little strange—or rather, what I can’t quite figure out—is that when you activate certain entities, they automatically deactivate themselves again. I haven’t figured out the reason for this yet, though. Examples of this include:

sensor.hausanschlussraum_pufferspeicher_dhw_dhw_storage_temp_bottom
sensor.vaillant_sensocomfort_control_electrical_energy_consumption
sensor.hausanschlussraum_zone_1_pump_hours_hc1

Nevertheless, you’re doing a great job, and I’m looking forward to seeing progress on your project.

Thanks a lot.

Ronny

Does anyone know if the Arostor devices are also using this eBus?

Hello,
Just to make sure I understand this correctly: To use this add-on, I need an eBUS Adapter Stick C6. I have to configure it using a PC and then connect it to the Vaillant unit (in this case, the AeroTherm) using two cables (polarity doesn’t matter). After that, the connection will work either via Wi-Fi or via LAN (if I selected the stick with the Ethernet module).
Correct?
Thanks in advance
Frank

GitHub - MarkBovee/vaillant-ebus: Home Assistant integration for Vaillant heat pumps via direct ebusd TCP — no MQTT, no cloud · GitHub shows up as invalid repo?