Thanks, just placed order for the devices. Looking forward.
@Fonske Thanks a lot for your work here!
I was able to integrate my Wolf CWL-2-325 in HA, which is identical to the Brink.
Next I want to expose the slider of the fan level (0, 1, 2, 3) to HomeKit, but couldnāt find any solution.
I understand that the slider is a number entity and for this reason canāt be exposed to HomeKit.
Can anyone help me with that?
Hi everyone!
I have a spare M5Stack Atom Echo (from playing around with HA voice assistant) and a Tail485. Will I be able to make this work to control my Brink Flair 400 unit or will either the Tail or the Atom Echo not work? I have some limited experience with ESPhome but Iām definitely not an expert, so I appreciate the help immensely.
I thought Iād just go ahead and try it. I used the āatom-ttl.yamlā variant and hooked everything up to my Brink unit. Sadly, I only get modbus error and incorrect values. I changed the modbus address to 1 in both the code and the unit, but it didnāt change anything. I also tried swapping the A and B cables, but alas. Does anyone have any idea what might be the issue? Iāve attached a screenshot of the web interface. Or is this just not going to work and do I need an Atom S3?
An update. I went ahead and got an S3 Lite instead, changed the code and flashed it, still using the Tail485 as a converter.
When power via USB (so no tail attached) it works fine. I see the webUI and everything, logging works in ESPHome, itās readable in HA with the API (no values of course, because without the tail I have no modbus connection).
However, if I power it via the 24V DC output on the Brink unit, then I can ping the ESP on itās static IP, I can even wirelessly flash new firmware, but the logging, API and webUI are not workingā¦
Very strange, does anyone have any idea whatās wrong?
Sorry, I cannot really help, however I could not power it using the 24V connection. USB worked fine, I did not explore further.
Hi Folks, This has been running very well for me now for several months.
To get it to work I had to remove the three wires to the Expansion Board (UWA2-E).
Recently, Iāve hit another problem with the 325, it has āError 114 E1126 Exhaust Fan Anemometer Failureā. As well as this showing on the display of the device when I look at the display in homeassistant the exhaust m3/h is 0.
Whilst the Homeassistant integration code works well, Iām getting pretty fed up with the Brink device and support. (Theyāve quoted me to replace the motor and I think the PCB (UWA2-E and it is an eye-watering price - around 20% of the original install price, which included all the ducting etc!)
My main question is, has anybody found a way of getting the error codes through Modbus?
Secondary question, has anybody found a way of getting the fan rpms in homeassistant? I could be missing something if so.
Ancillary question: has anybody had the Error 114 and found a good solution that doesnāt break the bank?
Thank you, robin
For the rpmās of the fans I have this:
- platform: modbus_controller
modbus_controller_id: brink
id: RPM_supply_fan
name: "Speed supply fan"
register_type: read
address: 4034
unit_of_measurement: "RPM"
value_type: U_WORD
accuracy_decimals: 0
- platform: modbus_controller
modbus_controller_id: brink
id: RPM_exhaust_fan
name: "Speed exhaust fan"
register_type: read
address: 4044
unit_of_measurement: "RPM"
value_type: U_WORD
accuracy_decimals: 0
Regarding the fan problem in the Netherlands we have this site (also in german) Brink ventilator Flair 300 532759 - HR Premium Parts You buy the fan and send them back your old fan.
Looks like 300 325 400 all use the same fan EBM papst G3G190-rp03-11
Hi Sven, Thank you for the code and the NL contact.
I think your code assumes using the Modbus integration in Homeassistant, am I correct?
Iāve not got that installed as I am using esphome.
I think that is why I get errors when adding it to the Homeassistant. Iāll install the Modbus integration tomorrow and test. I assume it will sit nicely beside the esphome access via modbus,
Thanks again, robin
Update, I was sitting thinking, and looking at the esphome code that @Fonske has created and share. The constructs look very similar (address etc). Would it be a better place to put this code? I could copy the code to my HASS and edit it, however, that would then mean Iāve broken the way it is set up. Iām happy to try testing it if that code could be changed to include the RPMs.
robin
The rpm code I use is for esphome. I use also the print from fonske.
Hmm, my Brink yaml is very short:
packages:
remote_package:
url: GitHub - fonske/Brink-flair-modbus: Modbus RTU communication with Brink Flair to use in home assistant / esphome
ref: main
refresh: 0s
files: [ esphome/type/brink-325.yaml,
esphome/labels/.brink-labels-en.yaml,
esphome/.brink.base.yaml,
esphome/boards/board-m5stack-atoms3-lite.yaml,
esphome/sensors/sensor-brink_hum_sensor.yaml,
plus some extra comments. Have you put your RPM code elsewhere?
I have added it to the code just now
Recompile / install and they should be added automaticly
Works great. I used this code to add it to the image on the dashboard.
- type: state-label
entity: sensor.brink_speed_supply_fan
style:
top: 50%
left: 73%
color: black
- type: state-label
entity: sensor.brink_speed_exhaust_fan
style:
top: 50%
left: 27%
color: black
Hello all,
I have a brink Flair 400, and I would like to integrate it into my Home assistant. I had a look to this topic, and it brings to me few stupid questions, sorry for that, I am still a beginner in Home Assitant:
- with ESP32S3 board, do you connect it to home assistant via wifi ? how ?
- there is the ESPC6 module available which is compatible with Zigbee. But the number of pins of that board are not same than ESPS3, especially the pins number 16 and 17.
2.1. How to connect ESP32C6 board to RS45 board ?
2.2. If it is possible, how to connect via Zigbee ?
Thank you for your answers.
@Rustnat
Why do you need zigbee? As the āready for useā solution is with esphome (and recognized directly by home assistant) through wifi
https://tweakers.net/aanbod/3850042/m5stack-atom-lite-met-modbus-base-brink-flair-marstek-venus-etc.html
github
I just asked if it was possible in zigbee, because I have nothing connected through wifi in my domotic, everything is in zigbee, only 4 devices in Z-wave.
I will try with wifi if it is the solution.
I also use the code of Fonske. I still cannot connect via modbus to my flair 300.
Bought a new esp32 board and 485 module and will try again next month.
This is a bit off-topic, but for all Brink Flair 325/400 owners: The bypass valve is pretty bad. The servo motor is too strong and creates too much pressure on the plastic valve when initializing (to get initial open/closed values). Sooner or later, it breaks, and you get Error 1200/Error 103 āGeneral Bypass Errorā. I tried to to glue it together (itās not hard to get to the part, the unit can be taken apart and back actually surprisingly easily, great plus) to no avail (broke immediately again).
You can by a new part from your local Brink dealers for about 120 EUR and also ask for a new firmware which reduces the servo motor pressure, or let them come to fix it for ya, of course.
Hope it helps anyone.
And I briefly skimmed the thread, and I will just reiterate and report here.
I have been using this ESPHome modbus integration for about 3 years and it works absolutely flawlessly, like, without a single hiccup (which is to say something for the state of home automation, or my zigbee networkā¦
)
Below is my config with my ESP8266, that I flashed via ESPHome three years ago (and didnāt bother to update it in any way as it works just fine/enough for me):
esphome:
name: hrv-controller
friendly_name: Rekuperace
esp8266:
board: nodemcuv2
ota:
- platform: esphome
logger:
baud_rate: 0
api:
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
ap:
ssid: "Esphome HRV control"
password: "GvJ6AafkENq6"
captive_portal:
uart:
id: mod_bus
tx_pin: D3
rx_pin: D2
baud_rate: 19200
parity: even
modbus:
id: modbus1
flow_control_pin: D0
send_wait_time: 2000ms
modbus_controller:
- id: ventilation
address: 0x14
modbus_id: modbus1
setup_priority: -10
update_interval: 30s
text_sensor:
- platform: modbus_controller
modbus_controller_id: ventilation
id: ventilation_bypass_status_text
register_type: read
icon: "mdi:pipe-valve"
address: 4050
raw_encode: NONE
name: Ventilation Bypass Status
lambda: |-
uint16_t int_mode = (data[item->offset] << 8) + data[item->offset+1];
std::string mode_str;
switch (int_mode) {
case 0: mode_str = "INITIALIZING"; break;
case 1: mode_str = "OPEN"; break;
case 2: mode_str = "CLOSED"; break;
case 3: mode_str = "OPEN"; break;
case 4: mode_str = "CLOSED"; break;
default: mode_str = "UNKNOWN"; break;
}
return mode_str;
- platform: modbus_controller
modbus_controller_id: ventilation
id: ventilation_preheater_status
register_type: read
icon: "mdi:radiator"
address: 4060
raw_encode: NONE
name: Ventilation Preheater Status
lambda: |-
uint16_t int_mode = (data[item->offset] << 8) + data[item->offset+1];
std::string mode_str;
switch (int_mode) {
case 0: mode_str = "INITIALIZING"; break;
case 1: mode_str = "INACTIVE"; break;
case 2: mode_str = "ACTIVE"; break;
case 3: mode_str = "TESTING"; break;
default: mode_str = "UNKNOWN"; break;
}
return mode_str;
- platform: modbus_controller
modbus_controller_id: ventilation
id: ventilation_filter_status
register_type: read
icon: "mdi:air-filter"
address: 4100
raw_encode: NONE
name: Ventilation Filter Status
lambda: |-
uint16_t int_mode = (data[item->offset] << 8) + data[item->offset+1];
std::string mode_str;
switch (int_mode) {
case 0: mode_str = "CLEAN"; break;
case 1: mode_str = "DIRTY"; break;
default: mode_str = "UNKNOWN"; break;
}
return mode_str;
sensor:
- platform: modbus_controller
modbus_controller_id: ventilation
name: "Ventilation To House temperature"
id: ventilation_to_house_temp
register_type: read
icon: "mdi:thermometer"
address: 4036
unit_of_measurement: "°C"
value_type: S_WORD
accuracy_decimals: 1
filters:
- multiply: 0.1
- platform: modbus_controller
modbus_controller_id: ventilation
name: "Ventilation To House humidity"
id: ventilation_to_house_humidity
icon: "mdi:water-percent"
register_type: read
address: 4037
unit_of_measurement: "%"
value_type: S_WORD
accuracy_decimals: 1
- platform: modbus_controller
modbus_controller_id: ventilation
name: "Ventilation To Outside Temperature"
id: ventilation_to_outside_temp
register_type: read
address: 4046
unit_of_measurement: "°C"
icon: "mdi:thermometer"
value_type: S_WORD
accuracy_decimals: 1
filters:
- multiply: 0.1
- platform: modbus_controller
modbus_controller_id: ventilation
name: "Ventilation To Outside humidity"
id: ventilation_to_outside_humidity
icon: "mdi:water-percent"
register_type: read
address: 4047
unit_of_measurement: "%"
value_type: S_WORD
accuracy_decimals: 1
- platform: modbus_controller
modbus_controller_id: ventilation
name: "Ventilation From Outside Temperature"
id: ventilation_from_outside_temp
icon: "mdi:thermometer"
register_type: read
address: 4081
unit_of_measurement: "°C"
value_type: S_WORD
accuracy_decimals: 1
filters:
- multiply: 0.1
- platform: modbus_controller
modbus_controller_id: ventilation
name: "Ventilation Flow Actual Intake"
id: ventilation_flow_in
icon: "mdi:waves-arrow-left"
register_type: read
address: 4032
unit_of_measurement: "m3/h"
value_type: S_WORD
accuracy_decimals: 0
- platform: modbus_controller
modbus_controller_id: ventilation
name: "Ventilation Flow Actual Exhaust"
icon: "mdi:waves-arrow-right"
id: ventilation_flow_out
accuracy_decimals: 0
register_type: read
address: 4042
unit_of_measurement: "m3/h"
value_type: S_WORD
- platform: modbus_controller
modbus_controller_id: ventilation
name: "Ventilation output pressure"
id: ventilation_output_pressure
icon: "mdi:car-brake-low-pressure"
register_type: read
address: 4024
unit_of_measurement: "Pa"
value_type: S_WORD
- platform: modbus_controller
modbus_controller_id: ventilation
name: "Ventilation inlet pressure"
id: ventilation_inlet_pressure
icon: "mdi:car-brake-low-pressure"
register_type: read
address: 4023
unit_of_measurement: "Pa"
value_type: S_WORD
- platform: modbus_controller
modbus_controller_id: ventilation
name: "Ventilation preheater output"
id: ventilation_preheater_output
icon: "mdi:power-plug-outline"
register_type: read
accuracy_decimals: 1
address: 4061
unit_of_measurement: "W"
value_type: S_WORD
select:
- platform: modbus_controller
modbus_controller_id: ventilation
name: "Ventilation Modbus Control Mode"
address: 8000
value_type: S_WORD
icon: "mdi:cog"
optimistic : TRUE
optionsmap:
"Device LCD": 0
"Modbus Step": 1
"Modbus Flow": 2
- platform: modbus_controller
modbus_controller_id: ventilation
name: "Ventilation Bypass Mode"
icon: "mdi:pipe"
address: 6100
value_type: S_WORD
optimistic : TRUE
optionsmap:
"AUTO": 0
"CLOSED": 1
"OPEN": 2
switch:
- platform: modbus_controller
modbus_controller_id: ventilation
name: "Ventilation Bypass Boost switch"
register_type: holding
address: 6104
bitmask: 1
entity_category: config
icon: "mdi:toggle-switch"
number:
- platform: modbus_controller
modbus_controller_id: ventilation
name: "Ventilation Modbus step setting"
id: ventilation_step_setting
register_type: holding
icon: "mdi:wind-power"
address: 8001
value_type: S_WORD
min_value: 0
max_value: 3
mode: slider
- platform: modbus_controller
modbus_controller_id: ventilation
name: "Ventilation Modbus flow value"
id: ventilation_flow_settings
register_type: holding
icon: "mdi:wind-power"
address: 8002
value_type: S_WORD
min_value: 0
max_value: 400
mode: slider
- platform: modbus_controller
modbus_controller_id: ventilation
name: "Ventilation Flow 1"
id: ventilation_flow_1
icon: "mdi:wind-power-outline"
register_type: holding
address: 6001
unit_of_measurement: "m3/h"
value_type: S_WORD
min_value: 50
max_value: 400
mode: slider
- platform: modbus_controller
modbus_controller_id: ventilation
name: "Ventilation Flow 2"
icon: "mdi:wind-power-outline"
id: ventilation_flow_2
register_type: holding
address: 6002
unit_of_measurement: "m3/h"
value_type: S_WORD
min_value: 50
max_value: 400
mode: slider
- platform: modbus_controller
modbus_controller_id: ventilation
name: "Ventilation Flow 3"
id: ventilation_flow_3
icon: "mdi:wind-power-outline"
register_type: holding
address: 6003
unit_of_measurement: "m3/h"
value_type: S_WORD
min_value: 50
max_value: 400
mode: slider
- platform: modbus_controller
modbus_controller_id: ventilation
name: "Ventilation Fan Imbalance Intake"
id: ventilation_imbalance_intake
register_type: holding
address: 6035
icon: "mdi:wind-turbine-check"
unit_of_measurement: "%"
value_type: S_WORD
multiply: 10
min_value: -15
max_value: 15
mode: slider
- platform: modbus_controller
modbus_controller_id: ventilation
name: "Ventilation Fan Imbalance Exhaust"
id: ventilation_imbalance_exhaust
icon: "mdi:wind-turbine-check"
register_type: holding
address: 6036
unit_of_measurement: "%"
value_type: S_WORD
multiply: 10
min_value: -15
max_value: 15
mode: slider
Few notes:
- I had a faulty 485 module, the cheap Chinese ones are often faulty, I donāt think you can tell without trying⦠I had literally 3 same modules that I bought for like 6 USD, and 1 of them worked
. I also think they sometimes have switched A/B modbus, so also just try to switch it when testing⦠Itās unfortunately very annoying to debug. - I donāt think people need a lot of skill to do it. ESPHome Device Builder can run within Home Assistant as an addon. You can buy cheap ESP32 or Nodemcu 8266, take my config, change wifi password, click on āInstallā, download the binary in a new format, then on your computer open in Chrome https://web.esphome.io/, connect, install the downloaded firmware (you can flash directly if you are connecting microcontroler to your HA instance), then connect to the HRV unit (which is not super easy for me, as itās form behind the unit, but doable with some dexterity). The device should be recognized by ESPHome integration in Homeassistant (a separate thing than ESPHome Device Builder Addon) or you can add it manually via IP Address in ESPHome integration.
- You donāt need an intermediate device like RPi or anything like that
