Brink WTW Renovent

I wanted to share a project I’ve been working on to integrate the Brink Renovent HR heat-recovery ventilation unit natively into Home Assistant using ESPHome and OpenTherm.

While there are existing MQTT/Arduino sketches out there for this, I wanted a pure ESPHome approach (no MQTT broker, native encrypted API, OTA updates) that doesn't break the physical 3-way wall switches for the rest of the household.

The Interesting Parts

1. Custom OpenTherm TSP Library (The "Secret Sauce")

The Brink unit exposes a goldmine of data (supply/exhaust temps, duct pressures, air volumes, bypass status, and fault codes). However, these ride on Transparent Slave Parameters (TSP), which the stock ESPHome opentherm component can't read.

To fix this, this project bundles a Brink-patched version of Ihor Melnyk’s OpenTherm library into a small custom component. It handles all the heavy lifting behind the scenes without messy lambda hacks in your main YAML.

2. The "Yield-to-Switch" Policy

The biggest headache with automated HVAC is when smart control fights physical switches. If Home Assistant forces 50% but someone flips the wall switch to Boost, you get a loop of conflicting commands.

This component implements a yield-to-switch policy:

  • HA is Primary: The level you set in HA is sticky and re-asserted if the unit drifts.
  • Physical Override Wins: If someone flips the physical wall switch, the component detects the manual change, stops fighting it, and mirrors the new level back to Home Assistant. The physical switch never feels "broken."
  • Relinquishing Control: Home Assistant seamlessly reclaims primary control the moment you adjust the slider in the HA UI again.

Hardware Setup

The hardware stack is incredibly simple and low-cost:

  • Wemos D1 Mini (ESP8266)
  • DIYLess Master OpenTherm Shield (connected to the Brink's OpenTherm terminals—no polarity to worry about).
  • Pins used: in_pin: GPIO4 (D2), out_pin: GPIO5 (D1)
### Quick Start YAML

Thanks to ESPHome's `packages` system, you can pull the entire configuration, the custom component, and the patched library directly from GitHub with just a few lines of code:

`YAMLsubstitutions:
  name: brink-renovent

esphome:
  name: ${name}

packages:
  brink: github://sincze/esphome-brink-renovent-hr/brink-renovent.yaml@main

logger:

api:
  encryption:
    key: !secret api_encryption_key

ota:
  - platform: esphome

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  ap: {}

captive_portal:`

What you get in Home Assistant

Once flashed and adopted, it exposes:

  • Sensors: Supply/exhaust temperatures, input/output air volumes, duct pressures, bypass/frost status, fault codes, and a filter-dirty indicator (mirrors the LED on your wall switch).
  • Controls: Ventilation level (0–100%) and bypass temperature thresholds (U4/U5).

You can watch the OpenTherm reads/writes and the yield-to-switch logic happen in real-time via the ESPHome live logs.

Full documentation, license (MIT), and credits to the original library authors: :backhand_index_pointing_right: [GitHub Repository Link Here]