Heat Recovery (MVHR) integration - Titon (BEAM in Ireland) Mechanical Ventilation with Heat Recovery

Hi All, just wanted to see if anyone had any experience connecting to a Titon/Beam Mechanical Ventilation with Heat Recovery (MVHR) system with Home Assistant? It uses RS485 (but don’t think it uses Modbus).

I was considering tying do do something with ESPHome as per this link but I don’t believe it uses Modbus.

Has anyone any suggestions or tried to do this before? I believe the device works with a number of Building Management Systems (BMS). Appreciate any suggestions or signposting. The goal would be to get to a point that I could control the system to Summer Bypass if the room temperatures were too high. In addition, would love to have control over reading the sensors (temperatures, humidity etc) and switches (changing fan speed, toggling summer bypass etc).

Below is some links to devices, protocols etc

PCB Communication Protocol

Aurastat (control panel for connecting to Unit PCB)

General information on Mechanical Ventilation with Heat Recovery (MVHR)

Unit in question
https://www.beamcentralsystems.com/store/ventilation-units/mvhr/axco-c130-aura-t

Any thoughts or suggestions grealy appreciated!

Hi @ServiceXp I read your post with regards to Heat Recovery System such as VentAxia. Would really appreciate your thoughts and suggestions on how I might progress with integrating with the unit above using something like ESPHome and perhaps something like an RS485 Module such as one listed here. Much appreciated :blush:

I can’t help you with the serial communication interface, that’s going to be quite a bit of work. That said, It looks like you do have some options as listed in this manual (if your unit uses the same control board).

1 Like

Thanks for info @ServiceXp
Yes that manual and board similar to mine.
Silly question but what options do I have? Any post you could reference? Many Thanks, appreciate it!

A quick update… I purchased a USB RS-485 to USB adaptor and plugged it into my Windows laptop and ran PuTTY to see what would happen (with help from the “BM893_Iss.01_PCB_Communication_Protocal…” attachment on my initial post).

I got some output but I didn’t seem to be able to input (didn’t get much time to test). Here’s what the output looked like:

1510+00000
151+00000
1520+00000
152+00000
1540+00000
154+00000
3260+00000
326+00000
0601+00000
060+45289
1510+00000
000+000310
1540+00000
000+00000
3260+00000
326+00000
0601+00000
060+45289
1510+00000
1520+00000
152+00000
1540+00000
154+00000
3260+00000
326+00000
0601+00000
060+45289
1510+00000
151+00000
1520+00000
152+00000
1540+00000
154+00000
3260+00000
326+00000
0601+00000
060+45289
1510+00000
151+00000
1520+00000
1540+00000
3260+00000
132+00000
0601+00000
060+45289

So I think i’m going to run a cable to plug the USB to RS-485 directly into home assistant and use some of the learning in other posts to convert these output using templates. Will post code I find that works (whenever I get a chance to re-visit!).

Quick update… have managed to get the session working on a Linux VM running Minicom Terminal Emulator (on same Hypervisor as my Home Assistant VM). The next step is to get sufficient templates for switches and sensors… have opened a new topic here Heat Recovery (MVHR) using serial (RS-485) Templates switches & Sensors - Help please!

Final step will be creating a nice MVHR card… but that’s a bit away yet!

Good morning, I am also interested in integrating Titon Aura Smart with HomeAssistant.
Have you managed to do it by any chance?

1 Like

I haven’t completed it yet but I will look to review again in the coming days.
I have another link in the thread above where I look for help with templates. The initial work I did on these works. The main issue is that the output from the MVHR unit runs every 15 seconds. If I run commands to request readings from other sensors, it appears to cause the “shell_command” to hang… so then I have to restart HA.

Today i’ve put the shell commands into a script to run one at a time, and delay 1.5 seconds between them. The tricky part is now is triggering this script only when the MVHR isn’t sending output (which it does for 5 seconds, every 15 seconds!). Any suggestions on this part welcomed.

Below is a summary guide in order o get you up and running. As I mentioned, the code element is partually working (incomplete) and has a few bugs, but together I think we can figure it out.

Parts required

USB to RS485 485 Converter Adapter
https://www.aliexpress.com/item/1005001621816794.html

USB to Rj45 Extension over Cat5e Cat6
https://www.aliexpress.com/item/1005005971843615.html

The second part to purchase (above) is optional. I just happened to have data points in my house so was able to neatly run them across this (within short distance). Otherwise you’ll need 2 cores of a cable (suggest CAT5e/6 to be on the safe side) to run from the top of your MVHR unit into the back of the USB RS485 converter (which then goes into your HA server via USB).

As per initial my initial post above, details of where to wire into the BEAM/TITON MVHR unit are at this link (you need to remove the black plastic cover on the top of the unit):

The next part is a work in progress so it doesn’t entirely work propertly yet (but maybe you’ll figure it out better than I can):

Configuration.yaml config (draft):

shell_command:
  mvhr_therm1_stale_in: 'stty -F /dev/ttyUSB1 1200 && echo "0301+00000\r\n" > /dev/ttyUSB1'
  mvhr_therm2_stale_out: 'stty -F /dev/ttyUSB1 1200 && echo "0311+00000\r\n" > /dev/ttyUSB1'
  mvhr_therm3_fresh_in: 'stty -F /dev/ttyUSB1 1200 && echo "0321+00000\r\n" > /dev/ttyUSB1'  
  mvhr_internal_humidity: 'stty -F /dev/ttyUSB1 1200 && echo "0361+00000\r\n" > /dev/ttyUSB1'

Sensors.yaml config (draft - note that my sensors are seperated out into their own YAML file using the “include” entry in my configuration.yaml file. you can also put these under “sensors:” in your configuration.yaml):

# Test for MVHR Heat Recovery Unit
  - platform: serial
    serial_port: /dev/ttyUSB1
    name: MVHR
    baudrate: 1200

  - platform: template
    sensors:
      mvhr_uptime:
        friendly_name: "MVHR total Running Time (Days)"
        unit_of_measurement: "days"
        value_template: >
          {% set parts = states('sensor.MVHR').split('+') %}
          {% if parts[0] == '060' %}
            {{ (parts[1] | float(default=0)) / 24 | round(1) }}
          {% else %}
            0
          {% endif %}

  - platform: template
    sensors:
      mvhr_stale_in:
        friendly_name: "MVHR Stale in (therm 1)"
        unit_of_measurement: "°C"
        value_template: >
          {% set parts = states('sensor.MVHR').split('+') %}
          {% if parts[0] == '030' %}
            {{ (parts[1] | float(default=0)) }}
          {% else %}
            0
          {% endif %}    

Script - The next part is a “script” I have to run the “shell_command” outlined in my configuration.yaml:

alias: "* MVHR - Run Shell Command"
sequence:
  - service: shell_command.mvhr_internal_humidity
    data: {}
  - delay:
      hours: 0
      minutes: 0
      seconds: 1
      milliseconds: 500
  - service: shell_command.mvhr_therm1_stale_in
    data: {}
  - delay:
      hours: 0
      minutes: 0
      seconds: 1
      milliseconds: 500
  - service: shell_command.mvhr_therm2_stale_out
    data: {}
  - delay:
      hours: 0
      minutes: 0
      seconds: 1
      milliseconds: 500
  - service: shell_command.mvhr_therm3_fresh_in
    data: {}
description: |-
  Run shell command to request values from MVHR for:
  Internal Humidity
  Stale in
  Stale Out
  Fresh in
  etc 

You then need an automation to run this script. While the scripts and templates are not fully fleshed out yet, the issue I have is “how do I run the script at a time when the MVHR sends a load of values (which it does every 15 seconds”?

Summary
Ok… so if you were to just follow the instructions above and put together all the config outlined above on this specific post, you should (!) get the following sensors:

  • sensor.mvhr (main one where all output from terminal flashes through)
  • sensor.mvhr_stale_in (template of “sensor.mvhr”, just summerising the specific value from the main feed)
  • sensor.mvhr_uptime (similar to above - (template of “sensor.mvhr”, just summerising the specific value from the main feed)

Missing sensors (for now)

  • mvhr_therm2_stale_out
  • mvhr_therm3_fresh_in
  • mvhr_internal_humidity

This is because I haven’t spent time writing the complete set of templates (as outlined above in “sensors.yaml”) until I get everything else working. One I get the initial traunche behaving, I will come back to review these.

To do

  • Once I figure out (or you do) how to executive script (above) at a time when the MVHR is not sending HA information, I need to refine and expand sample templates (above) further.
  • Build friendly card to display all values
  • Built automations to do certain things in certain conditions (i.e. button to run “boost” when humidity in shower increases. Another one is: turn on summerboost when temperature in house/outside reaches a certain temperature).

Hope that helps a few of you in progressing! R

Thanks for the update Ross, I’m keen to get this working as well, spare time is really tricky for me, so please bear with me :slightly_smiling_face:

1 Like

This looks like a good template to use
guide-vallox-digit-ventilation-to-home-assistant

I notice he uses a [RS485 to TTL (with automatic flow control)

The automatic flow control should stop the crashes within home assistant I would think.

Thanks for info. I’ll look at the post in more detail. Please note that this method requires 3 seperate hardware components and connects to Home Assistant wirelessly via MQTT. It also requires installation of a custom component.

The method I use connects directly to HA controller using a USB → RS485 dongle.

But yes, interesting read nonetheless and will read in more detail for inspiration. Tks

I’ve managed to get rs485 comms working via an esp32 over serial monitor. I found some of the responses to be different than the expected response with reference to the BM893 document.

So I contacted Titon technical support to see if this was current.

They responded stating that the BM893 protocol is only valid for the ‘B’ models and not for the ‘HMB’ model that I have.

I was impressed with their quick response. I’ve requested if there is a protocol for the HMB model - however I suspect they wont supply this for commercial reasons.

So I’ve just purchased an Aura-t HMB model - I will attempted to snoop the rs485 signals and see if I can work out the protocol.

1 Like

Thanks for update… I hadn’t realised there was model sub-variations using different protocols. So am I correct in reading that you’ve litterally replaced the full unit on your wall? Wow!

By way of update, I have been making a bit of progress… a little card and some buttons to execute script commands (at carefully planned manual times… so far!). When I run the scripts at the correct times, they do return correct/valid values (both on the Picture elements Card and the entity card I have)… but appears 2 of my sensors are causing errors (responses like “032-09999” when I execute “0321+00000” to return value for “Thermistor 3 (fresh in)”… which made me then wonder if my unit is having issues.)

Note: Screenshot shown mostly null values as I’ve been testing on another VM). I haven’t added additional elements yet to control fan speed, boost switch, summerboost toggle etc.

Next steps (to do, once I figure out why my unit is acting up) would be automations to do 3 sets of duties:

  • automate the return of sensor values
  • Automate summerboost when days are hot/cold.
  • trigger boost switch when shower is turned on.

Long story short, you can run a command to report system errors (0611+00000) and with a bit of ChatGPT to interpet the error codes table in the Titon BMS manual, it matched my 2 failed sensors (and a few other concerning errors)… so I’ve taken a leaf from your page… contacted (webform) support for BEAM (Irish branded version) and awaiting reply (although I may need to direct my query to Titon instead as I haven’t had joy with a response to any of my technical queries before :frowning: )

I realise that my Auramode TP524 LCD display doesn’t show errors so I question (in general)… is there any way otherwise to know when there’s issues…

You can purchase an Auralite Status indicator (tp518) that shows errors (i have meant to before) but it seems fairly limited.

I took a quick look through the newer version of the touchscreen controller (that you might have):

and the app at:

but I don’t see anything on either link above to indicate that these will alert/highlight to user if there are any issues with the unit… hmmm…

Which unit do you have Ross? HRV 10 Q Plus
Is it a ‘A’ or ‘B’ or ‘HMB’?

There was a firmware change that required a pcb change on the HMB models in 2019 I think. Edit The upgrade refers to BM981… I think they updated the protocol.

The reply I had from Titon suggested that the BM893 protocol was only for the ‘B’ models.

A 99999 response is for not configured I think.

The fault codes I received from 0611+00000 don’t tally with the chart at all. It is replying but the codes are wrong.

This document
https://www.titon.com/uk/wp-content/uploads/sites/10/2018/11/Fault-Finding-HRV-TP…HMB-Post-2019-iss-3-1.pdf

Has interesting information. Only relevent to the later ‘HMB’ models though? Maybe?

Edit
I found the ‘B’ version fault finding.
Fault-Finding-HRV_B_models_iss02.pdf

The ‘A’ model doesn’t have RS-485 comms, so I’m guessing you have the B model.

Yes, my Titon equivilent unit is:
Titon HRV10M Q Plus B
Eco-aura controls ready
Model: TP481B
Date of Manufacture: 10/05/2018
Firmware (sticker on board says): FW0027-0209

No reply to my email to Beam in Ireland (no surprise there). At a bit of a crossroads where to go next if i’m being honest. All sensors were reporting back valid repsonses a couple of months back. Will have to check at some stage if all sensors are connected correctly. Thanks.

@lGregl did you ever manage to make any further progress on your setup? Have done little with mine since.

I did measure the timings of when data was received. These are:
A) +16 secs (from Previous)
B) +18 secs (from Previous)
C) +7 secs (from Previous)
D) +9 secs (from Previous)

The data received in each of these were as follows:
A)

1510+00000
151+00000
1520+00000
152+00000
1540+00000
154+00000
3260+00000
326+00000
1510+00000
151+00000
1520+00000
152+00000
1540+00000
154+00000
3260+00000
326+00000
0601+00000
060+52587

B)

0601+00000
060+52587

C)

1510+00000
151+00000
1520+00000
152+00000
1540+00000
154+00000
3260+00000
326+00000

D)

0601+00000
060+52587

The real challenge is that the shell hangs if you send data while receiving one of these messages. Hope thats of use.

I’ve connected the external controller, but that’s it at the moment. Life has been a bit busy recently. I hope to revisit this project next month. :slight_smile: