How to remote control TCP BAXI heat pump with modbus RS 485

Hi everyone, I would like to share with you the solution I used to connect the Baxi heat pump (Auriga 16M-A) remotely to HA, but I guess it works with all of them. To do this I only purchased a conversion device between the Modbus RS 485 protocol and the TCP / IP.
The remote control is of the type you see in the image, that it is used also for other heat pump :

Cattura2

I used the Elfin-EW11A device. The wiring part by the Baxi control module or similar takes place via connectors H1 and H2 on B and A respectively of the converter.
After this, access the converter configuration to set the IP address of the converter and the port to be used for RS 485 communication. In my case the address is 192.168.1.12 and the port is 8899. Once this is done there is nothing else to do on the converter. In the configuration.yaml file we insert the following code to open the connection

# Configurazione Modbus RTU-to-TCP
modbus:
  - name: "BAXI_modbus"
    type: tcp
    host: 192.168.1.12  # Indirizzo IP del gateway RTU-to-TCP
    port: 8899           # Porta TCP del gateway
    sensors: !include sensorBAXI.yaml

and now let’s create the sensorBAXI.yaml file:

      - name: "PLC_Status"
        slave: 1                # ID del dispositivo RTU
        address: 0              # Indirizzo del registro (40001 -> 0 in Home Assistant)
        input_type: holding     # Tipo di registro (holding per 4xxxx)
        data_type: uint16       # Tipo di dato (16 bit unsigned integer)
        scan_interval: 3    # Intervallo di scansione (in secondi)
        
      - name: "Valore Temperatura Termosifoni" #T1s
        slave: 1            # ID del dispositivo RTU
        address: 2          # Indirizzo del registro (40003 -> 2 in Home Assistant)
        input_type: holding # Tipo di registro (holding per 4xxxx)
        data_type: int16   # Tipo di dato (16 bit unsigned integer)
        unit_of_measurement: "°C"  # Unitá di misura (Temperatura in gradi Celsius)
        
      - name: "Valore Temperatura Aria" #Ts
        slave: 1            # ID del dispositivo RTU
        address: 3          # Indirizzo del registro (40004 -> 3 in Home Assistant)
        input_type: holding # Tipo di registro (holding per 4xxxx)
        data_type: int16   # Tipo di dato (16 bit unsigned integer)
        scale: 0.01
        unit_of_measurement: "°C"  # Unitá di misura (Temperatura in gradi Celsius)
        
      - name: "Valore Temperatura ACS Target" #T5s
        slave: 1            # ID del dispositivo RTU
        address: 4          # Indirizzo del registro (40005 -> 4 in Home Assistant)
        input_type: holding # Tipo di registro (holding per 4xxxx)
        data_type: uint16   # Tipo di dato (16 bit unsigned integer)
        unit_of_measurement: "°C"  # Unitá di misura (Temperatura in gradi Celsius)
                
      - name: "Valore Temperatura Ambiente Esterno" #T4
        slave: 1            # ID del dispositivo RTU
        address: 107          # Indirizzo del registro (40108 -> 107 in Home Assistant)
        input_type: holding # Tipo di registro (holding per 4xxxx)
        data_type: uint16   # Tipo di dato (16 bit unsigned integer)
        unit_of_measurement: "°C"  # Unitá di misura (Temperatura in gradi Celsius)
                
      - name: "Valore Temperatura Acqua Uscita" #T1B
        slave: 1            # ID del dispositivo RTU
        address: 111          # Indirizzo del registro (40112 -> 111 in Home Assistant)
        input_type: holding # Tipo di registro (holding per 4xxxx)
        data_type: uint16   # Tipo di dato (16 bit unsigned integer)
        unit_of_measurement: "°C"  # Unitá di misura (Temperatura in gradi Celsius)
                
      - name: "Valore Temperatura Ambiente" #Ta
        slave: 1            # ID del dispositivo RTU
        address: 114          # Indirizzo del registro (41115 -> 114 in Home Assistant)
        input_type: holding # Tipo di registro (holding per 4xxxx)
        data_type: uint16   # Tipo di dato (16 bit unsigned integer)
        unit_of_measurement: "°C"  # Unitá di misura (Temperatura in gradi Celsius)
                        
      - name: "Valore Temperatura Bollitore ACS" #T5
        slave: 1            # ID del dispositivo RTU
        address: 115          # Indirizzo del registro (41116 -> 115 in Home Assistant)
        input_type: holding # Tipo di registro (holding per 4xxxx)
        data_type: uint16   # Tipo di dato (16 bit unsigned integer)
        unit_of_measurement: "°C"  # Unitá di misura (Temperatura in gradi Celsius)
        
      - name: "Valore Alta Pressione" #P1
        slave: 1            # ID del dispositivo RTU
        address: 116          # Indirizzo del registro (41117 -> 116 in Home Assistant)
        input_type: holding # Tipo di registro (holding per 4xxxx)
        data_type: uint16   # Tipo di dato (16 bit unsigned integer)
        unit_of_measurement: "kPa"  # Unitá di misura (Temperatura in gradi Celsius)
        
      - name: "Valore Bassa Pressione" #P2
        slave: 1            # ID del dispositivo RTU
        address: 117          # Indirizzo del registro (41118 -> 117 in Home Assistant)
        input_type: holding # Tipo di registro (holding per 4xxxx)
        data_type: uint16   # Tipo di dato (16 bit unsigned integer)
        unit_of_measurement: "kPa"  # Unitá di misura (Temperatura in gradi Celsius)
        
      - name: "Valore Corrente"
        slave: 1            # ID del dispositivo RTU
        address: 118          # Indirizzo del registro (41119 -> 118 in Home Assistant)
        input_type: holding # Tipo di registro (holding per 4xxxx)
        data_type: uint16   # Tipo di dato (16 bit unsigned integer)
        unit_of_measurement: "A"  # Unitá di misura 
        
      - name: "Valore Tensione"
        slave: 1            # ID del dispositivo RTU
        address: 119          # Indirizzo del registro (41120 -> 119 in Home Assistant)
        input_type: holding # Tipo di registro (holding per 4xxxx)
        data_type: uint16   # Tipo di dato (16 bit unsigned integer)
        unit_of_measurement: "V"  # Unitá di misura 
        
      - name: "Limite Superiore di temperatura riscaldamento"
        slave: 1            # ID del dispositivo RTU
        address: 203          # Indirizzo del registro (4204 -> 203 in Home Assistant)
        input_type: holding # Tipo di registro (holding per 4xxxx)
        data_type: uint16   # Tipo di dato (16 bit unsigned integer)
        unit_of_measurement: "°C"  # Unitá di misura (Temperatura in gradi Celsius)
        
      - name: "Limite Inferiore di temperatura riscaldamento"
        slave: 1            # ID del dispositivo RTU
        address: 204          # Indirizzo del registro (4205 -> 204 in Home Assistant)
        input_type: holding # Tipo di registro (holding per 4xxxx)
        data_type: uint16   # Tipo di dato (16 bit unsigned integer)
        unit_of_measurement: "°C"  # Unitá di misura (Temperatura in gradi Celsius)
        
      - name: "Limite Superiore di temperatura impostazione"
        slave: 1            # ID del dispositivo RTU
        address: 205          # Indirizzo del registro (4206 -> 205 in Home Assistant)
        input_type: holding # Tipo di registro (holding per 4xxxx)
        data_type: uint16   # Tipo di dato (16 bit unsigned integer)
        unit_of_measurement: "°C"  # Unitá di misura (Temperatura in gradi Celsius)
        
      - name: "Limite Inferiore di temperatura impostazione"
        slave: 1            # ID del dispositivo RTU
        address: 206          # Indirizzo del registro (4207 -> 206 in Home Assistant)
        input_type: holding # Tipo di registro (holding per 4xxxx)
        data_type: uint16   # Tipo di dato (16 bit unsigned integer)
        unit_of_measurement: "°C"  # Unitá di misura (Temperatura in gradi Celsius)        
        
      - name: "Limite Superiore di temperatura dell'acqua riscaldamento"
        slave: 1            # ID del dispositivo RTU
        address: 207          # Indirizzo del registro (4208 -> 207 in Home Assistant)
        input_type: holding # Tipo di registro (holding per 4xxxx)
        data_type: uint16   # Tipo di dato (16 bit unsigned integer)
        unit_of_measurement: "°C"  # Unitá di misura (Temperatura in gradi Celsius)
        
      - name: "Limite Inferiore di temperatura dell'acqua riscaldamento"
        slave: 1            # ID del dispositivo RTU
        address: 208          # Indirizzo del registro (4209 -> 208 in Home Assistant)
        input_type: holding # Tipo di registro (holding per 4xxxx)
        data_type: uint16   # Tipo di dato (16 bit unsigned integer)
        unit_of_measurement: "°C"  # Unitá di misura (Temperatura in gradi Celsius)
        
        
      - name: "Limite Potenza Ingresso"
        slave: 1            # ID del dispositivo RTU
        address: 269          # Indirizzo del registro (4270 -> 269 in Home Assistant)
        input_type: holding # Tipo di registro (holding per 4xxxx)
        data_type: uint16   # Tipo di dato (16 bit unsigned integer)

Now, you have all the heat pump parameters available for viewing. If you want to modify the parameters you must insert a script to write the various bits or states at the right point as in the example below

modifica_bit_1:
  alias: "Modifica Bit 1 PLC Status"
  sequence:
    - variables:
        current_value: "{{ states('sensor.PLC_Status') | int }}"
        new_value: "{{ (current_value | int) | bitwise_xor(2) }}"
    - service: modbus.write_register
      data:
        hub: BAXI_modbus
        unit: 1
        address: 0
        value: "{{ new_value }}"


modifica_bit_2:
  alias: "Modifica Bit 2 PLC Status"
  sequence:
    - variables:
        current_value: "{{ states('sensor.PLC_Status') | int }}"
        new_value: "{{ (current_value | int) | bitwise_xor(4) }}"
    - service: modbus.write_register
      data:
        hub: BAXI_modbus
        unit: 1
        address: 0
        value: "{{ new_value }}"

In fact, the first script allows you to modify the bit that manages the switching on of heating zone 1, the second script modifies the bit that manages the switching on of the domestic hot water.
By doing this I configured the heat pump management page on HA, as I am sharing with you, with the various thermostats for adjustments, switch-ons and powers.

Let me know if you need anything else so I can help you, regards.

1 Like

This is my HA dashboard to control Heat Pump Baxi 16A-M

1 Like