Control of the external HVAC system Jablotron FUTURA via HA

Hi,
I have standalone HAVC system in my house, which is not supported as an integration.
The brand is Futura made by JablotronLT:

The device communicates via Modbus TCP protocol and I have received the registry map from the manufacturer.
So now, I am able to read Input registers as sensors and display them in HA. There are also Holding registers available, which I can read too and possibly write to control the HVAC system (didn’t try it yet but it should work).

Right now, I would like to step a bit further and control and monitor the full HVAC system from my HA.

  • By control, I mean sending the target temperature, humidity, fan mode and speed, heating or cooling mode, bypass mode, night mode, party mode, away mode, boost ventilation mode, turn on/off HVAC, activate schedule mode, etc. by writing to holding registers.
  • By monitor I mean reading all available temperatures (wall sensors, floor sensors), humidity sensors, CO2 sensors, all fan rpm, power consumption, etc.

This is very complex device, however all control can be achieved by writing to Holding registers and all monitoring can be achieved ba reading Input registers, both by Modbus TCP.

I need some help which way to go, when I would like to create user interface in HA instead of using a standalone android app provided by manufacturer, which relies on control via cloud (different method).

First I briefly looked at generic-thermostat card, but I realized this is not a way to go as it is designed to control simple devices by reading input and switching defined output. I don’t want to replace HVAC algorithms by HA, I just want to use HA to read and send commands to HVAC.

I am completely lost where to start. I thing it has something to do with the climate entity but I don’t know how to create climate entity from individual sensors (input registers) and controls (holding registers).

I also found reference to Modbus Climate Entity which I think should be close to what I need:

However the documentation is poor and I can’t find any useful examples.

Sorry for long post, I hope someone can point me to the right direction.
Thanks Ondrej

1 Like

You have my full support but I can’t help you with it. I am just newbie. Držím palce

Here some code for you to integrate it using HA modbus functionality

modbus:
  - type: tcp
    name: Futura
    host: YOUR IP OF DEVICE
    port: 502
    climates:
      - name: Futura Heat Recovery
        input_type: input
        address: 163
        hvac_mode_register:
          address: 0
          values:
            state_auto: 6
            state_off: 0
        slave: 1
        scale: 0.1
        offset: 0
        precision: 1
        max_temp: 30
        min_temp: 15
        temp_step: 1
        target_temp_register: 10
        data_type: uint16
        hvac_onoff_register: 0
        #data_count: 1
    sensors:
      - name: Living Room Temperature
        slave: 1
        address: 163
        input_type: input
        unit_of_measurement: °C
        device_class: "temperature"
        scale: 0.1
        precision: 1
        data_type: int16
      - name: Living Room CO2
        slave: 1
        address: 162
        input_type: input
        unit_of_measurement: ppm
        device_class: "carbon_dioxide"
        offset: 0
        precision: 1
        data_type: int16
      - name: Futura House Target Temperature
        slave: 1
        address: 10
        input_type: holding
        unit_of_measurement: °C
        device_class: "temperature"
        scale: 0.1
        precision: 1
        data_type: int16
      - name: Living Room Humidity
        slave: 1
        address: 164
        input_type: input
        device_class: "humidity"
        unit_of_measurement: "%"
        scale: 0.1
        offset: 0
        precision: 1
        data_type: int16
      - name: Futura Fresh Air Temperature
        slave: 1
        address: 31
        input_type: input
        device_class: "temperature"
        unit_of_measurement: °C
        scale: 0.1
        offset: 0
        precision: 1
        data_type: int16
      - name: Futura Ambient Air Temperature
        slave: 1
        address: 30
        input_type: input
        device_class: "temperature"
        unit_of_measurement: °C
        scale: 0.1
        offset: 0
        precision: 1
        data_type: int16
      - name: Futura Indoor Air Temperature
        slave: 1
        address: 32
        input_type: input
        device_class: "temperature"
        unit_of_measurement: °C
        scale: 0.1
        offset: 0
        precision: 1
        data_type: int16
      - name: Futura Waste Air Temperature
        slave: 1
        address: 33
        input_type: input
        device_class: "temperature"
        unit_of_measurement: °C
        scale: 0.1
        offset: 0
        precision: 1
        data_type: int16
      - name: Futura Power Consumption
        slave: 1
        address: 41
        input_type: input
        device_class: "power"
        unit_of_measurement: W
        offset: 0
        precision: 1
        data_type: int16
      - name: Futura Heat Recovering
        slave: 1
        address: 42
        input_type: input
        device_class: "power"
        unit_of_measurement: W
        offset: 0
        precision: 1
        data_type: int16
      - name: Futura Internal Heating Power
        slave: 1
        address: 43
        input_type: input
        device_class: "power"
        unit_of_measurement: W
        offset: 0
        precision: 1
        data_type: int16
      - name: Futura Air Flow
        slave: 1
        address: 44
        input_type: input
        unit_of_measurement: m3/h
        offset: 0
        precision: 1
        data_type: int16
      - name: Futura Filter Wear Level
        slave: 1
        address: 40
        input_type: input
        unit_of_measurement: "%"
        offset: 0
        precision: 1
        data_type: int16
      - name: Futura Supply Fan Power
        slave: 1
        address: 45
        input_type: input
        unit_of_measurement: "%"
        offset: 0
        precision: 1
        data_type: int16
      - name: Futura Exhaust Fan Power
        slave: 1
        address: 46
        input_type: input
        unit_of_measurement: "%"
        offset: 0
        precision: 1
        #data_type: uint16
      - name: Futura Supply Fan RPM
        slave: 1
        address: 47
        input_type: input
        unit_of_measurement: "rpm"
        offset: 0
        precision: 1
        data_type: int16
      - name: Futura Exhaust Fan RPM
        slave: 1
        address: 48
        input_type: input
        unit_of_measurement: "rpm"
        offset: 0
        precision: 1
        data_type: int16
    switches:
      - name: Futura Pre-Heating
        slave: 1
        address: 15
        write_type: holding
        command_on: 1
        command_off: 0
      - name: Futura Automatic Bypass
        slave: 1
        address: 14
        write_type: holding
        command_on: 1
        command_off: 0

Hello, thank you very much for the sample code.
May I ask how do you incorporate the target humidity (dry, normal, wet)?
This is holding register 11.
Also, for heating mode and cooling mode, there are separate registers 15 and 16. Do I have to implement them as standalone modbus switches or is there any way to implement it in the climate entry? I don’t know how to do it as the climate entry requires having only 1 modbus address (0) while Futura has fan modes on address 0 but heating and cooling on address 15 and 16.
Thank you.

AFAIK there’s no target humidity paramter in the Modbus Climate entity, also the cooling and heating modes are supported if a single register is used for both.

There are 2 ways to have all the parameters (Input/Output), the simper one is to read values via modbus sensors and write values from custom helpers via automation using modbus.write_register or modbus.write_coil services.
The more complex one is to write a custom integration that does the hard work and expose native HA entities.

Hope it helps