Brink Flair 325 Modbus TCP Integration via Waveshare RS485 to PoE (Complete Working Register Map)

Hi everyone,

I would like to share a fully verified and working Modbus TCP integration guide for the Brink Flair 325 ventilation unit (built 2021)[cite: 11] using a Waveshare RS485 TO POE ETH (B) industrial gateway[cite: 8].

After testing and resolving shifted register addresses, here is the complete, true physical register map matching the physical LCD display[cite: 9, 10], along with the configuration.yaml and Lovelace cards.

Full documentation and future updates are also available in my GitHub Gist:
:backhand_index_pointing_right: https://gist.github.com/MiraKubin/a6b0ecba16310544d34924c715bb11a3


1. Hardware & Wiring

  • Unit: Brink Flair 325 4/0 R EU[cite: 11]
  • Gateway: Waveshare RS485 TO POE ETH (B)[cite: 8]
  • Connections (Red 3-pin Modbus terminal on the Brink mainboard)[cite: 14]:
    • Pin A (+) → 485A on Waveshare[cite: 8, 14]
    • Pin B (-) → 485B on Waveshare[cite: 8, 14]
    • Pin GND → GND on Waveshare[cite: 8, 14]

Serial Settings (Waveshare Web GUI)

  • Baud Rate: 19200 bps
  • Data Bits: 8
  • Parity: EVEN
  • Stop Bits: 1
  • Mode: Modbus TCP to RTU / TCP Server (Port 502)
  • Brink Slave ID: 11[cite: 9]

2. Verified Modbus Register Map

Parameter Register Type Address Data Type Scale Unit Notes
Operating Hours Input 4000 uint16 1 h Fan running hours
Exhaust from interior (T3) Input 4001 int16 0.1 °C Air extracted from house
Fresh outdoor air (T1) Input 4005 int16 0.1 °C Fresh intake from outside
Bypass damper status Input 4020 uint16 1 code 4 = Closed
Operating mode Input 4022 uint16 1 code 1 = Auto/Profile[cite: 9]
Supply pressure (Inlet) Input 4023 uint16 1 Pa Supply branch pressure[cite: 9]
Exhaust pressure (Outlet) Input 4024 uint16 1 Pa Exhaust branch pressure[cite: 9]
Target flow rate Input 4031 uint16 1 m³/h Target setting[cite: 9]
Actual flow supply Input 4032 uint16 1 m³/h Measured supply air flow
Supply fan speed Input 4034 uint16 1 RPM Supply blower RPM[cite: 9]
Supply to interior (T2) Input 4036 int16 0.1 °C Heated air entering living areas
Supply humidity Input 4037 uint16 1 % RH Humidity inlet
Actual flow exhaust Input 4041 uint16 1 m³/h Measured exhaust air flow
Exhaust fan speed Input 4044 uint16 1 RPM Exhaust blower RPM
Exhaust to outdoor (T4) Input 4046 int16 0.1 °C Cold exhaust leaving house
Exhaust humidity Input 4047 uint16 1 % RH Humid to outside
Flow rate control Holding 6001 uint16 1 m³/h Writable register (50–300 m³/h)[cite: 9]

3. Home Assistant Configuration (configuration.yaml)

modbus:
  - name: brink
    type: tcp
    host: 10.0.0.51  # Replace with your Waveshare IP[cite: 9]
    port: 502
    timeout: 5
    delay: 1

    sensors:
      - name: "Brink Aktuální provozní režim"
        unique_id: brink_current_mode
        slave: 11
        address: 4022
        input_type: input
        data_type: uint16

      - name: "Brink Stav bypass klapky"
        unique_id: brink_bypass_state
        slave: 11
        address: 4020
        input_type: input
        data_type: uint16

      - name: "Brink Teplota čerstvý vzduch venkovní T1"
        unique_id: brink_temp_t1
        slave: 11
        address: 4005
        input_type: input
        data_type: int16
        scale: 0.1
        precision: 1
        unit_of_measurement: "°C"
        device_class: temperature
        state_class: measurement

      - name: "Brink Teplota přívod do interiéru T2"
        unique_id: brink_temp_t2
        slave: 11
        address: 4036
        input_type: input
        data_type: int16
        scale: 0.1
        precision: 1
        unit_of_measurement: "°C"
        device_class: temperature
        state_class: measurement

      - name: "Brink Teplota odtah z interiéru T3"
        unique_id: brink_temp_t3
        slave: 11
        address: 4001
        input_type: input
        data_type: int16
        scale: 0.1
        precision: 1
        unit_of_measurement: "°C"
        device_class: temperature
        state_class: measurement

      - name: "Brink Teplota výfuk do exteriéru T4"
        unique_id: brink_temp_t4
        slave: 11
        address: 4046
        input_type: input
        data_type: int16
        scale: 0.1
        precision: 1
        unit_of_measurement: "°C"
        device_class: temperature
        state_class: measurement

      - name: "Brink Vlhkost přívod do interiéru"
        unique_id: brink_humidity_supply
        slave: 11
        address: 4037
        input_type: input
        data_type: uint16
        unit_of_measurement: "%"
        device_class: humidity
        state_class: measurement

      - name: "Brink Vlhkost výfuk do exteriéru"
        unique_id: brink_humidity_exhaust
        slave: 11
        address: 4047
        input_type: input
        data_type: uint16
        unit_of_measurement: "%"
        device_class: humidity
        state_class: measurement

      - name: "Brink Průtok požadovaný"
        unique_id: brink_flow_target
        slave: 11
        address: 4031
        input_type: input
        data_type: uint16
        unit_of_measurement: "m³/h"
        state_class: measurement

      - name: "Brink Průtok aktuální přívod"
        unique_id: brink_flow_supply_actual
        slave: 11
        address: 4032
        input_type: input
        data_type: uint16
        unit_of_measurement: "m³/h"
        state_class: measurement

      - name: "Brink Otáčky ventilátoru přívod"
        unique_id: brink_fan_rpm_supply
        slave: 11
        address: 4034
        input_type: input
        data_type: uint16
        unit_of_measurement: "RPM"
        state_class: measurement

      - name: "Brink Tlak přívod"
        unique_id: brink_pressure_supply
        slave: 11
        address: 4023
        input_type: input
        data_type: uint16
        unit_of_measurement: "Pa"
        device_class: pressure
        state_class: measurement

      - name: "Brink Průtok aktuální odtah"
        unique_id: brink_flow_extract_actual
        slave: 11
        address: 4041
        input_type: input
        data_type: uint16
        unit_of_measurement: "m³/h"
        state_class: measurement

      - name: "Brink Otáčky ventilátoru odtah"
        unique_id: brink_fan_rpm_extract
        slave: 11
        address: 4044
        input_type: input
        data_type: uint16
        unit_of_measurement: "RPM"
        state_class: measurement

      - name: "Brink Tlak odtah"
        unique_id: brink_pressure_extract
        slave: 11
        address: 4024
        input_type: input
        data_type: uint16
        unit_of_measurement: "Pa"
        device_class: pressure
        state_class: measurement

      - name: "Brink Provozní hodiny"
        unique_id: brink_operating_hours
        slave: 11
        address: 4000
        input_type: input
        data_type: uint16
        unit_of_measurement: "h"
        state_class: total_increasing

template:
  - number:
      - name: "Brink Výkon rekuperace"
        unique_id: brink_vykon_rekuperace_procenta
        min: 15
        max: 100
        step: 5
        unit_of_measurement: "%"
        icon: mdi:fan
        state: >-
          {% set m3 = states('sensor.brink_prutok_pozadovany') | float(50) %}
          {{ ([15, ((m3 / 300) * 100)] | max) | round(0) }}
        set_value:
          - action: modbus.write_register
            data:
              hub: brink
              slave: 11
              address: 6001
              value: >-
                {% set flow = ((value | float * 3) | round(0)) | int %}
                {{ [50, [flow, 300] | min] | max }}

4. Lovelace Dashboard Cards

# Telemetry Card
type: entities
title: Telemetrie rekuperace
grid_options:
  columns: 12
  rows: auto
show_header_toggle: false
entities:
  - type: section
    label: Temperatures & Humidity
  - entity: sensor.brink_teplota_cerstvy_vzduch_venkovni_t1
    name: Outdoor Intake (T1)
    icon: mdi:thermometer-chevron-down
  - entity: sensor.brink_teplota_privod_do_interieru_t2
    name: Supply to House (T2)
    icon: mdi:thermometer-chevron-up
  - entity: sensor.brink_teplota_odtah_z_interieru_t3
    name: Extract from House (T3)
    icon: mdi:home-thermometer-outline
  - entity: sensor.brink_teplota_vyfuk_do_exterieru_t4
    name: Exhaust to Outside (T4)
    icon: mdi:weather-dust
  - entity: sensor.brink_vlhkost_privod_do_interieru
    name: Supply Humidity
    icon: mdi:water-percent
  - entity: sensor.brink_vlhkost_vyfuk_do_exterieru
    name: Exhaust Humidity
    icon: mdi:water-percent-alert

  - type: section
    label: Airflow & Blowers
  - entity: sensor.brink_prutok_pozadovany
    name: Target Airflow
    icon: mdi:target
  - entity: sensor.brink_prutok_aktualni_privod
    name: Actual Supply Flow
    icon: mdi:weather-windy
  - entity: sensor.brink_otacky_ventilatoru_privod
    name: Supply Fan RPM
    icon: mdi:fan-speed-2
  - entity: sensor.brink_tlak_privod
    name: Supply Pressure
    icon: mdi:gauge
  - entity: sensor.brink_prutok_aktualni_odtah
    name: Actual Extract Flow
    icon: mdi:weather-windy-variant
  - entity: sensor.brink_otacky_ventilatoru_odtah
    name: Extract Fan RPM
    icon: mdi:fan-speed-2
  - entity: sensor.brink_tlak_odtah
    name: Extract Pressure
    icon: mdi:gauge

  - type: section
    label: System
  - entity: sensor.brink_stav_bypass_klapky
    name: Bypass State
    icon: mdi:valve
  - entity: sensor.brink_aktualni_provozni_rezim
    name: Operating Mode
    icon: mdi:tune-vertical
  - entity: sensor.brink_provozni_hodiny
    name: Total Operating Hours
    icon: mdi:clock-outline