Reading the repo
Opening the box…
Reading the repo
Opening the box…
Assembly instructions
Home Assistant integration for Vaillant heat pumps via direct ebusd TCP — no MQTT, no cloud
Saved setup from 6 h ago
Will it work on macOS?
Heads-upBuilding it yourself? It also needs 5 settings in .env (1 secret).
docs/setup.mdFor installation steps, see the README. This guide covers details and background.
Check raw TCP from any machine on your network:
echo 'i' | nc <ebusd-host> 8888
# Expected: "version: ebusd 26.x.x.x"
If nc is not available, use telnet or the HA addon log.
| Device | Circuit | What you get |
|--------|---------|--------------|
| Vaillant aroTHERM heat pump | hmu | Temperatures, pressures, energy counters, runtime, errors |
| Vaillant CTLV2 heating control | ctlv2 | Zone temps, DHW, heating curve, schedules, operation modes |
| Vaillant VWZ00 ventilation | vwz00 | Ventilation status, fan speeds |
| Vaillant system | Broadcast | Outdoor temperature, water pressure (system-wide values) |
find to discover all registers ebusd knows aboutctlv2.z1RoomHumidity) are defined at runtime via --enabledefineCreate config/vaillant_ebus/entities.yaml to override auto-detected metadata:
hmu.CurrentConsumedPower:
device_class: "power"
unit: "W"
entity_category: "diagnostic"
Available keys: friendly_name, icon, unit, device_class, entity_category, entity_type, enabled, writable, min, max, step, options, divisor.
divisor divides the reported numeric value before it reaches Home Assistant
(reported / divisor). It corrects a register whose local ebusd definition already
scales the raw bus value. The unit stays as declared; for example a b516
*ElecCons* day counter documented in Wh but whose ebusd definition reports in
kWh — a 1.1 kWh reading that should display as 1100 Wh — use a divisor of 0.001:
hmu.HcElecConsDay:
divisor: 0.001
Things to know when you write overrides:
ctlv3 with the standard ebusd
configuration and ctlv2 when a local configuration renames it, so the key is ctlv3.Z2OpMode in one setup and
ctlv2.Z2OpMode in the other. Changing the ebusd configuration also changes the entity unique IDs, which creates
duplicate _2 entities until the old ones are removed.options list for an entity that already exists only takes effect after a full Home Assistant restart.
Reloading the integration or calling vaillant_ebus.rediscover is not enough.Yield sensors of the heat pump report the environmental yield (the heat taken from the air or ground). The
heat that was produced is the yield plus the electricity used, so a COP that you calculate as yield divided by
electricity comes out about 1 too low.Reload after changes: Settings → Devices & Services → Vaillant eBUS → Reload.
Then run bash setup.sh. It stops at the first error and is safe to run again. Servers and tests aren't started; it lists them at the end. Read it first.
Needs Git: xcode-select --install
git clone https://github.com/MarkBovee/vaillant-ebus.git cd vaillant-ebus
Python >=3.14
brew install python@3.14
Fill in secrets: HA_SSH_PASSWORD
cp .env.example .env
python -m venv .venv source .venv/bin/activate pip install -e .
pytest
No reports for macOS yet.
GitManual AI Agent reads the 8 key files and writes a step-by-step guide for macOS. Once written, it's saved for everyone.