---
title: "Sistema Sistema-Home 4..18(T)"
description: "Control heating/cooling modes, DHW and setpoints, monitor temperatures, pressures, flow rate and 80+ error codes via Modbus RTU."
url: "https://taphome.com/en/compatibility/sistema-home-418t/"
language: en
lastmod: 2026-10-08
generator: hugo
ai:
  topics: ["modbus-rtu","heat-pump","rs485","dual-circuit","dhw"]
  questions: ["How to integrate Sistema-Home 4..18(T) heat pump with TapHome?","What does the Sistema-Home 4..18(T) TapHome template monitor and control?","How to connect Sistema-Home heat pump via RS-485 to TapHome?","How to change the operating mode on Sistema-Home heat pump via Modbus?","What error codes does the Sistema-Home 4..18(T) template report?","How to set DHW temperature on Sistema-Home heat pump remotely?"]
---

# Sistema Sistema-Home 4..18(T)

Communication: Modbus RTU

## Integration guide

The Sistema-Home 4..18(T) is a dual-circuit heat pump communicating over Modbus RTU (RS-485). The TapHome template provides operating mode control with heating, cooling, and DHW modes, setpoint adjustment for heating and cooling circuits, DHW temperature setpoint, and comprehensive monitoring of water temperatures, refrigerant pressures, fan and pump speeds, and water flow rate. The template also reports 80+ error codes from the heat pump controller via bitfield registers.

The controller is likely based on a CAREL pCO platform (typical for Italian OEM heat pumps). The register map is proprietary and all technical information in this template comes exclusively from the XML template — no public documentation is available from the manufacturer.

## Hardware connection

The Sistema-Home 4..18(T) connects to TapHome via a Modbus RTU CCU gateway using an RS-485 serial bus. The default communication parameters are 9600 baud, 8 data bits, Even parity, 1 stop bit, Slave ID 1.

Connect the RS-485 wiring between the heat pump's Modbus port and the TapHome Modbus RTU CCU:

- **A+** on the heat pump → **A+/D+** on TapHome RS-485
- **B-** on the heat pump → **B-/D-** on TapHome RS-485
- **GND** → **GND** (mandatory for reliable communication)

> [!WARNING]
> The GND wire must be connected between the heat pump and the TapHome gateway. Without proper grounding, Modbus communication errors are likely, especially on longer cable runs.

## Configuration

### Remote write enable

The template automatically enables remote write access on every poll cycle by setting bit 0 of register H:7201. This means the heat pump accepts setpoint and mode changes from TapHome as soon as the template is imported — no manual configuration of this register is needed.

### Communication parameters

Verify the following settings match between the heat pump and TapHome:

| Parameter | Value |
|-----------|-------|
| Baud rate | 9600 |
| Data bits | 8 |
| Parity | Even |
| Stop bits | 1 |
| Slave ID | 1 (default) |

If the Slave ID on the heat pump differs from 1, update the Slave ID import parameter in TapHome to match.

## Device capabilities

### Operating mode control

The **Active Mode** device selects the heat pump operating mode. Available modes:

| Value | Mode | Description |
|-------|------|-------------|
| 0 | Stand by | Heat pump idle |
| 1 | Cool | Cooling only |
| 2 | Heat | Heating only |
| 4 | Sanitary | DHW production only |
| 5 | Cool+DHW | Cooling with DHW |
| 6 | Heat+DHW | Heating with DHW |

Mode values 3, 7, 8, and 9 are defined in the template but have no meaningful names — they appear as placeholder digits and may be reserved or unused on this controller variant.

A **DHW (Sanitary) Setpoint** service action on the Active Mode device allows setting the domestic hot water temperature target (range 25–55 °C).

### Setpoint control

Two thermostat devices control heating and cooling setpoints:

- **Heat Setpoint** — reads/writes the heating setpoint (H:1002). The current temperature reference is the plant mixing tank sensor (H:440).
- **Cool Setpoint** — reads/writes the cooling setpoint (H:1001). Uses the same plant mixing tank temperature as the current value.

Both setpoints use a ×10 conversion (e.g., a register value of 350 = 35.0 °C).

### Temperature monitoring

Six temperature sensors provide thermal monitoring across the system:

- **Outside Temperature** — ambient outdoor temperature (H:428, polled every 30 s)
- **Plant Temperature (Mixing Tank)** — buffer/mixing tank temperature (H:440), also used as the current temperature reference for both thermostats
- **Water Inlet Temperature** — heat exchanger water inlet (H:400)
- **Water Outlet Temperature** — heat exchanger water outlet (H:401)
- **DHW Temperature** — domestic hot water tank temperature (H:405), with fault detection (reports a warning if the sensor reads "Not configured" or "Fault")
- **Compressor Discharge Temperature** — compressor 1 discharge temperature (H:433), with 7 service attributes covering compressor discharge temperatures for both refrigerant circuits and the circuit 2 compressor inhalation temperature

> [!NOTE]
> The template device named "Compressor inhalation" actually reads register H:433, which corresponds to compressor discharge 1 per the register map. The actual compressor inhalation register (H:422) is not exposed as a primary device. The display name in TapHome reflects the corrected function (Compressor Discharge Temperature).

### Refrigerant pressure monitoring

Two pressure sensors monitor the refrigerant circuits:

- **High Pressure** — high-side refrigerant pressure in bar (H:406), with a service attribute for circuit 2 (H:20406)
- **Low Pressure** — low-side refrigerant pressure in bar (H:414), with a service attribute for circuit 2 (H:20414)

### Fan and pump speed

- **Fan Speed** — read-only fan speed as percentage (H:7000, ÷1000 conversion)
- **Pump Speed** — read-only circulation pump speed as percentage (H:7001, ÷1000 conversion)

### Water flow rate

The **Water Flow Rate** sensor reads the system water flow in l/min (H:444). It includes fault detection — a warning is raised if the sensor reports "Not configured" (32766) or "Fault" (32767).

> [!WARNING]
> The Water Flow Rate status service attribute reads register H:405 (the DHW temperature register) instead of H:444. This appears to be a template bug — the status may not accurately reflect the water flow sensor state.

### Compressor runtime monitoring

Six module-level service attributes track compressor operating hours:

- **Compressor 1/2/3 Runtime** — cumulative hours for circuit 1 compressors (H:305, H:307, H:309)
- **Compressor 1/2/3 Runtime (Circuit 2)** — cumulative hours for circuit 2 compressors (H:313, H:315, H:317)

### Error monitoring

The module ReadScript monitors registers H:950 through H:956 (7 bitfield registers) and reports 80+ distinct error and warning codes. Key error categories include:

- **Refrigerant circuit faults** — high pressure (E001), low pressure (E002), frost (E005)
- **Thermal protection** — compressor (E003, E013, E023), fan (E004, E014, E024), pump (E016, E026)
- **Temperature faults** — high discharge temperature (E009, E019, E029), high temperature (E018), incongruent temperatures (E041)
- **DHW faults** — poor heat exchange (E042), accumulation tank overheating (E050), anti-legionella status (E060/E061)
- **Sensor errors** — probe errors for up to 11 probes across 3 I/O modules (E611–E713)
- **Inverter faults** — link errors, hardware faults, overcurrent, overheating, voltage faults, phase sequence errors, EEPROM errors for up to 3 inverters (E801–E973)
- **I/O module faults** — module 1/2 disconnected (E101, E102)

### Additional capabilities

The heat pump controller also exposes a compressor inhalation temperature register (H:422) and a remote write enable flag (H:7201) that is automatically managed by the template. These can be added as standalone devices in a future template update if direct monitoring of inhalation temperature is needed.

## Troubleshooting

### No Modbus communication

1. Verify RS-485 wiring — A+ to A+, B- to B-, GND connected
2. Confirm communication parameters: 9600 baud, 8E1, Slave ID 1
3. Check cable length and termination — for long runs, a 120 ohm termination resistor may be needed at the last device on the bus
4. Ensure the heat pump controller's Modbus interface is enabled (consult the on-site controller menu)

### Sensors showing "Not configured" warnings

Registers returning the special value 32766 indicate a sensor that is not wired or not configured on the heat pump controller. This is expected for optional sensors (e.g., DHW probe on units without a DHW tank). The warning can be acknowledged in TapHome.

### Mode changes not taking effect

1. Verify the Active Mode device shows the expected mode after writing — the read register (H:200) and write register (H:7200) are separate, so there may be a brief delay
2. Check that no local override or lockout is active on the heat pump controller
3. The remote write enable flag (H:7201 bit 0) is set automatically by the template — if communication was interrupted, it will be re-enabled on the next poll cycle

## Available devices 14

These devices appear in TapHome after import.

Sistema-Home 4..18(T) Module

Service Attributes

|                                  |
|----------------------------------|
| Compressor 1 Runtime             |
| Compressor 2 Runtime             |
| Compressor 3 Runtime             |
| Compressor 1 Runtime (Circuit 2) |
| Compressor 2 Runtime (Circuit 2) |
| Compressor 3 Runtime (Circuit 2) |

Read (module)

```taphome
#Enablement of writing the machine status remotely
var mod := MODBUSR(H, 7201, UINT16);
if(getbit(mod, 0) = 0, MODBUSW(H, 7201, Uint16, SETBIT(mod, 0, 1)));
#Errors
IF(GETBIT(MODBUSR(H, 950, Uint16),0)=1, ADDERROR("High pressure", "E001"));
IF(GETBIT(MODBUSR(H, 950, Uint16),1)=1, ADDERROR("Low pressure", "E002"));
IF(GETBIT(MODBUSR(H, 950, Uint16),2)=1, ADDERROR("Compressor thermal protection", "E003"));
IF(GETBIT(MODBUSR(H, 950, Uint16),3)=1, ADDERROR("Fan thermal protection", "E004"));
IF(GETBIT(MODBUSR(H, 950, Uint16),4)=1, ADDERROR("Frost", "E005"));
IF(GETBIT(MODBUSR(H, 950, Uint16),5)=1, ADDERROR("Lack of flow", "E006"));
IF(GETBIT(MODBUSR(H, 950, Uint16),6)=1, ADDERROR("DHW preparer low temperature", "E007"));
IF(GETBIT(MODBUSR(H, 950, Uint16),7)=1, ADDERROR("Lack of lubrication", "E008"));
IF(GETBIT(MODBUSR(H, 950, Uint16),8)=1, ADDERROR("High discharge temperature of Cp1", "E009"));
IF(GETBIT(MODBUSR(H, 950, Uint16),9)=1, ADDERROR("Solar collector at high temperature", "E010"));
IF(GETBIT(MODBUSR(H, 950, Uint16),12)=1, ADDERROR("Compressor 2 thermal protection", "E013"));
IF(GETBIT(MODBUSR(H, 950, Uint16),13)=1, ADDERROR("Fan 2 thermal protection", "E014"));
IF(GETBIT(MODBUSR(H, 950, Uint16),15)=1, ADDERROR("Pump thermal protection", "E016"));

IF(GETBIT(MODBUSR(H, 951, Uint16),1)=1, ADDERROR("High temperature", "E018"));
IF(GETBIT(MODBUSR(H, 951, Uint16),2)=1, ADDERROR("High discharge temperature of Cp2", "E019"));
IF(GETBIT(MODBUSR(H, 951, Uint16),3)=1, ADDERROR("Inverted pressure transcuders", "E020"));
IF(GETBIT(MODBUSR(H, 951, Uint16),6)=1, ADDERROR("Compressor 3 thermal protection", "E023"));
IF(GETBIT(MODBUSR(H, 951, Uint16),7)=1, ADDERROR("Fan 3 thermal protection", "E024"));
IF(GETBIT(MODBUSR(H, 951, Uint16),9)=1, ADDERROR("Pump 2 thermal protection", "E026"));
IF(GETBIT(MODBUSR(H, 951, Uint16),11)=1, ADDERROR("Incongruent temperatures", "E041"));
IF(GETBIT(MODBUSR(H, 951, Uint16),12)=1, ADDERROR("Poor heat exchange DHW", "E042"));
IF(GETBIT(MODBUSR(H, 951, Uint16),13)=1, ADDERROR("DHW accumulation tank in high temperature", "E050"));
IF(GETBIT(MODBUSR(H, 951, Uint16),14)=1, ADDERROR("I/O module 1 disconnected", "E101"));
IF(GETBIT(MODBUSR(H, 951, Uint16),15)=1, ADDERROR("I/O module 2 disconnected", "E102"));

IF(GETBIT(MODBUSR(H, 952, Uint16),0)=1, ADDERROR("Probe 1 error", "E611"));
IF(GETBIT(MODBUSR(H, 952, Uint16),1)=1, ADDERROR("Probe 2 error", "E621"));
IF(GETBIT(MODBUSR(H, 952, Uint16),2)=1, ADDERROR("Probe 3 error", "E631"));
IF(GETBIT(MODBUSR(H, 952, Uint16),3)=1, ADDERROR("Probe 4 error", "E641"));
IF(GETBIT(MODBUSR(H, 952, Uint16),4)=1, ADDERROR("Probe 5 error", "E651"));
IF(GETBIT(MODBUSR(H, 952, Uint16),5)=1, ADDERROR("Probe 6 error", "E661"));
IF(GETBIT(MODBUSR(H, 952, Uint16),6)=1, ADDERROR("Probe 7 error", "E671"));
IF(GETBIT(MODBUSR(H, 952, Uint16),7)=1, ADDERROR("Probe 8 error", "E681"));
IF(GETBIT(MODBUSR(H, 952, Uint16),8)=1, ADDERROR("Probe 9 error", "E691"));
IF(GETBIT(MODBUSR(H, 952, Uint16),9)=1, ADDERROR("Probe 10 error", "E701"));
IF(GETBIT(MODBUSR(H, 952, Uint16),10)=1, ADDERROR("Probe 11 error", "E711"));
IF(GETBIT(MODBUSR(H, 952, Uint16),11)=1, ADDERROR("Module 1 probe 1 error", "E612"));
IF(GETBIT(MODBUSR(H, 952, Uint16),12)=1, ADDERROR("Module 1 probe 2 error", "E622"));
IF(GETBIT(MODBUSR(H, 952, Uint16),13)=1, ADDERROR("Module 1 probe 3 error", "E632"));
IF(GETBIT(MODBUSR(H, 952, Uint16),14)=1, ADDERROR("Module 1 probe 4 error", "E642"));
IF(GETBIT(MODBUSR(H, 952, Uint16),15)=1, ADDERROR("Module 1 probe 5 error", "E652"));

IF(GETBIT(MODBUSR(H, 953, Uint16),0)=1, ADDERROR("Module 1 probe 6 error", "E662"));
IF(GETBIT(MODBUSR(H, 953, Uint16),1)=1, ADDERROR("Module 1 probe 7 error", "E672"));
IF(GETBIT(MODBUSR(H, 953, Uint16),2)=1, ADDERROR("Module 1 probe 8 error", "E682"));
IF(GETBIT(MODBUSR(H, 953, Uint16),3)=1, ADDERROR("Module 1 probe 9 error", "E692"));
IF(GETBIT(MODBUSR(H, 953, Uint16),4)=1, ADDERROR("Module 1 probe 10 error", "E702"));
IF(GETBIT(MODBUSR(H, 953, Uint16),5)=1, ADDERROR("Module 1 probe 11 error", "E712"));
IF(GETBIT(MODBUSR(H, 953, Uint16),6)=1, ADDERROR("Module 2 probe 1 error", "E613"));
IF(GETBIT(MODBUSR(H, 953, Uint16),7)=1, ADDERROR("Module 2 probe 2 error", "E623"));
IF(GETBIT(MODBUSR(H, 953, Uint16),8)=1, ADDERROR("Module 2 probe 3 error", "E633"));
IF(GETBIT(MODBUSR(H, 953, Uint16),9)=1, ADDERROR("Module 2 probe 4 error", "E643"));
IF(GETBIT(MODBUSR(H, 953, Uint16),10)=1, ADDERROR("Module 2 probe 5 error", "E653"));
IF(GETBIT(MODBUSR(H, 953, Uint16),11)=1, ADDERROR("Module 2 probe 6 error", "E663"));
IF(GETBIT(MODBUSR(H, 953, Uint16),12)=1, ADDERROR("Module 2 probe 7 error", "E673"));
IF(GETBIT(MODBUSR(H, 953, Uint16),13)=1, ADDERROR("Module 2 probe 8 error", "E683"));
IF(GETBIT(MODBUSR(H, 953, Uint16),14)=1, ADDERROR("Module 2 probe 9 error", "E693"));
IF(GETBIT(MODBUSR(H, 953, Uint16),15)=1, ADDERROR("Module 2 probe 10 error", "E703"));

IF(GETBIT(MODBUSR(H, 954, Uint16),0)=1, ADDERROR("Module 2 probe 11 error", "E713"));
IF(GETBIT(MODBUSR(H, 954, Uint16),1)=1, ADDERROR("Link inverter 1", "E801"));
IF(GETBIT(MODBUSR(H, 954, Uint16),2)=1, ADDERROR("Link inverter 2", "E802"));
IF(GETBIT(MODBUSR(H, 954, Uint16),3)=1, ADDERROR("Link inverter 3", "E803"));
IF(GETBIT(MODBUSR(H, 954, Uint16),4)=1, ADDERROR("Hardware fault inverter 1", "E851"));
IF(GETBIT(MODBUSR(H, 954, Uint16),5)=1, ADDERROR("Hardware fault inverter 2", "E852"));
IF(GETBIT(MODBUSR(H, 954, Uint16),6)=1, ADDERROR("Hardware fault inverter 3", "E853"));
IF(GETBIT(MODBUSR(H, 954, Uint16),7)=1, ADDERROR("Overcurrent inverter 1", "E861"));
IF(GETBIT(MODBUSR(H, 954, Uint16),8)=1, ADDERROR("Overcurrent inverter 2", "E862"));
IF(GETBIT(MODBUSR(H, 954, Uint16),9)=1, ADDERROR("Overcurrent inverter 3", "E863"));
IF(GETBIT(MODBUSR(H, 954, Uint16),10)=1, ADDERROR("High temperature inverter 1", "E871"));
IF(GETBIT(MODBUSR(H, 954, Uint16),11)=1, ADDERROR("High temperature inverter 2", "E872"));
IF(GETBIT(MODBUSR(H, 954, Uint16),12)=1, ADDERROR("High temperature inverter 3", "E873"));
IF(GETBIT(MODBUSR(H, 954, Uint16),13)=1, ADDERROR("Bad voltage inverter 1", "E881"));
IF(GETBIT(MODBUSR(H, 954, Uint16),14)=1, ADDERROR("Bad voltage inverter 2", "E882"));
IF(GETBIT(MODBUSR(H, 954, Uint16),15)=1, ADDERROR("Bad voltage inverter 3", "E883"));

IF(GETBIT(MODBUSR(H, 955, Uint16),0)=1, ADDERROR("Phase sequence inverter 1", "E891"));
IF(GETBIT(MODBUSR(H, 955, Uint16),1)=1, ADDERROR("Phase sequence inverter 2", "E892"));
IF(GETBIT(MODBUSR(H, 955, Uint16),2)=1, ADDERROR("Phase sequence inverter 3", "E893"));
IF(GETBIT(MODBUSR(H, 955, Uint16),3)=1, ADDERROR("Model error inverter 1", "E901"));
IF(GETBIT(MODBUSR(H, 955, Uint16),4)=1, ADDERROR("Model error inverter 2", "E902"));
IF(GETBIT(MODBUSR(H, 955, Uint16),5)=1, ADDERROR("Model error inverter 3", "E903"));
IF(GETBIT(MODBUSR(H, 955, Uint16),6)=1, ADDERROR("Overload error inverter 1", "E911"));
IF(GETBIT(MODBUSR(H, 955, Uint16),7)=1, ADDERROR("Overload error inverter 2", "E912"));
IF(GETBIT(MODBUSR(H, 955, Uint16),8)=1, ADDERROR("Overload error inverter 3", "E913"));
IF(GETBIT(MODBUSR(H, 955, Uint16),9)=1, ADDERROR("Overcurrent PFC inverter 1", "E921"));
IF(GETBIT(MODBUSR(H, 955, Uint16),10)=1, ADDERROR("Overcurrent PFC inverter 2", "E922"));
IF(GETBIT(MODBUSR(H, 955, Uint16),11)=1, ADDERROR("Overcurrent PFC inverter 3", "E923"));
IF(GETBIT(MODBUSR(H, 955, Uint16),12)=1, ADDERROR("Internal communication error inverter 1", "E931"));
IF(GETBIT(MODBUSR(H, 955, Uint16),13)=1, ADDERROR("Internal communication error inverter 2", "E932"));
IF(GETBIT(MODBUSR(H, 955, Uint16),14)=1, ADDERROR("Internal communication error inverter 3", "E933"));
IF(GETBIT(MODBUSR(H, 955, Uint16),15)=1, ADDERROR("Fault PFC inverter 1", "E941"));

IF(GETBIT(MODBUSR(H, 956, Uint16),0)=1, ADDERROR("Fault PFC inverter 2", "E942"));
IF(GETBIT(MODBUSR(H, 956, Uint16),1)=1, ADDERROR("Fault PFC inverter 3", "E943"));
IF(GETBIT(MODBUSR(H, 956, Uint16),2)=1, ADDERROR("Probe error inverter 1", "E951"));
IF(GETBIT(MODBUSR(H, 956, Uint16),3)=1, ADDERROR("Probe error inverter 2", "E952"));
IF(GETBIT(MODBUSR(H, 956, Uint16),4)=1, ADDERROR("Probe error inverter 3", "E953"));
IF(GETBIT(MODBUSR(H, 956, Uint16),5)=1, ADDERROR("Abnormal condition inverter 1", "E961"));
IF(GETBIT(MODBUSR(H, 956, Uint16),6)=1, ADDERROR("Abnormal condition inverter 2", "E962"));
IF(GETBIT(MODBUSR(H, 956, Uint16),7)=1, ADDERROR("Abnormal condition inverter 3", "E963"));
IF(GETBIT(MODBUSR(H, 956, Uint16),8)=1, ADDERROR("Inverter 1 EEPROM error", "E971"));
IF(GETBIT(MODBUSR(H, 956, Uint16),9)=1, ADDERROR("Inverter 2 EEPROM error", "E972"));
IF(GETBIT(MODBUSR(H, 956, Uint16),10)=1, ADDERROR("Inverter 3 EEPROM error", "E973"));
IF(GETBIT(MODBUSR(H, 956, Uint16),11)=1, ADDERROR("High discharge temperature of Cp3", "E029"));
IF(GETBIT(MODBUSR(H, 956, Uint16),12)=1, ADDWARNING("Anti-legionella performed correctly", "E060"));
IF(GETBIT(MODBUSR(H, 956, Uint16),13)=1, ADDERROR("Anti-legionella failed or stopped", "E061"));
```

Service Attributes

Compressor 1 runtime

```taphome
MODBUSR(H, 305, Uint16) + "h"
```

Compressor 2 runtime

```taphome
MODBUSR(H, 307, Uint16) + "h"
```

Compressor 3 runtime

```taphome
MODBUSR(H, 309, Uint16) + "h"
```

Compressor 1 runtime (circuit 2)

```taphome
MODBUSR(H, 313, Uint16) + "h"
```

Compressor 2 runtime (circuit 2)

```taphome
MODBUSR(H, 315, Uint16) + "h"
```

Compressor 3 runtime (circuit 2)

```taphome
MODBUSR(H, 317, Uint16) + "h"
```

Active Mode Multi-value Switch Read and write

Operating mode selector — Stand by, Cool, Heat, Sanitary (DHW), Cool+DHW, Heat+DHW

Register: H:200 → H:7200 Int16 numeric

Values / States: Stand by · Cool · Heat · Cool+DHW · Heat+DHW

Service Actions

|                         |                                                      |
|-------------------------|------------------------------------------------------|
| DHW (Sanitary) Setpoint | Set domestic hot water temperature target (25–55 °C) |

Read switch state

```taphome
MODBUSR(H, 200, Int16)
```

Write switch state

```taphome
MODBUSW(H, 7200, int16, Mu)
```

Service Actions

DHW (sanitary) setpoint

Parameters: Temp setpoint (25–55 ts)

```taphome
MODBUSW(H, 7205, Uint16, ts*10);
```

Compressor Discharge Temperature Temperature Sensor Read-only

Compressor 1 discharge temperature with service attributes for all compressor discharge sensors across both circuits

Register: H:433 Int16 Unit: °C numeric

Service Attributes

|                                    |
|------------------------------------|
| Compressor Discharge 1             |
| Compressor Discharge 2             |
| Compressor Discharge 3             |
| Compressor Inhalation (Circuit 2)  |
| Compressor 1 Discharge (Circuit 2) |
| Compressor 2 Discharge (Circuit 2) |
| Compressor 3 Discharge (Circuit 2) |

Read temperature

```taphome
MODBUSR(H, 433, Int16) / 10
```

Service Attributes

Compressor discharge 1

```taphome
var temp := MODBUSR(H, 433, Int16);
if(temp = 32766, "Not configured", temp/10 + "°C");
```

Compressor discharge 2

```taphome
var temp := MODBUSR(H, 434, Int16);
if(temp = 32766, "Not configured", temp/10 + "°C");
```

Compressor discharge 3

```taphome
var temp := MODBUSR(H, 435, Int16);
if(temp = 32766, "Not configured", temp/10 + "°C");
```

Compressor inhalation (circuit 2)

```taphome
var temp := MODBUSR(H, 20422, Int16);
if(temp = 32766, "Not configured", temp/10 + "°C");
```

Compressor 1 discharge (circuit 2)

```taphome
var temp := MODBUSR(H, 20433, Int16);
if(temp = 32766, "Not configured", temp/10 + "°C");
```

Compressor 2 discharge (circuit 2)

```taphome
var temp := MODBUSR(H, 20434, Int16);
if(temp = 32766, "Not configured", temp/10 + "°C");
```

Compressor 3 discharge (circuit 2)

```taphome
var temp := MODBUSR(H, 20435, Int16);
if(temp = 32766, "Not configured", temp/10 + "°C");
```

Cool Setpoint Thermostat Read and write

Cooling setpoint thermostat — current temperature from plant mixing tank

Register: H:1001 Int16 Unit: °C numeric

Read temperature

```taphome
MODBUSR(H, 440, Int16)/10
```

Read desired temperature

```taphome
MODBUSR(H, 1001, Int16) / 10
```

Write desired temperature

```taphome
MODBUSW(H, 1001, Int16, Se * 10)
```

DHW Temperature Temperature Sensor Read-only

Domestic hot water temperature with fault detection (Not configured / Fault warnings)

Register: H:405 Int16 Unit: °C numeric

Service Attributes

|        |
|--------|
| Status |

Read temperature

```taphome
var reg := MODBUSR(H, 405, Int16);
SWITCH(reg, 32766, ADDWARNING("DHW temperature not configured"), 32767, ADDWARNING("DHW temperature at fault"), Return(reg/10));
Return (nan);
```

Service Attributes

Status

```taphome
SWITCH(MODBUSR(H, 405, Uint16), 32766, "Not configured", 32767, "Fault", "Ok")
```

Fan Speed Dimmer Read-only

Read-only fan speed as percentage

Register: H:7000 Int16 Unit: % numeric

Read level

```taphome
MODBUSR(H, 7000, Int16)/1000
```

Heat Setpoint Thermostat Read and write

Heating setpoint thermostat — current temperature from plant mixing tank

Register: H:1002 Int16 Unit: °C numeric

Read temperature

```taphome
MODBUSR(H, 440, Int16)/10
```

Read desired temperature

```taphome
MODBUSR(H, 1002, Int16) / 10
```

Write desired temperature

```taphome
MODBUSW(H, 1002, Int16, Se * 10)
```

High Pressure Variable Read-only

Refrigerant high-side pressure in bar with circuit 2 service attribute

Register: H:406 Int16 Unit: bar numeric

Service Attributes

|                         |
|-------------------------|
| High Pressure Circuit 2 |

Read

```taphome
MODBUSR(H, 406, Int16)/100
```

Service Attributes

High Pressure Circuit 2

```taphome
MODBUSR(H, 20406, Int16)/100 + " bar"
```

Low Pressure Variable Read-only

Refrigerant low-side pressure in bar with circuit 2 service attribute

Register: H:414 Int16 Unit: bar numeric

Service Attributes

|                        |
|------------------------|
| Low Pressure Circuit 2 |

Read

```taphome
MODBUSR(H, 414, Int16)/100
```

Service Attributes

Low Pressure Circuit 2

```taphome
MODBUSR(H, 20414, Int16)/100 + " bar"
```

Outside Temperature Temperature Sensor Read-only

Register: H:428 Int16 Unit: °C numeric

Read temperature

```taphome
MODBUSR(H, 428, int16) / 10
```

Plant Temperature (Mixing Tank) Temperature Sensor Read-only

Buffer/mixing tank temperature — also used as current temperature reference for heating and cooling thermostats

Register: H:440 Int16 Unit: °C numeric

Read temperature

```taphome
MODBUSR(H, 440, Int16)/10
```

Pump Speed Dimmer Read-only

Read-only circulation pump speed as percentage

Register: H:7001 Int16 Unit: % numeric

Read level

```taphome
MODBUSR(H, 7001, Int16)/1000
```

Water Flow Rate Variable Read-only

Water flow rate in l/min with fault detection (Not configured / Fault warnings)

Register: H:444 Int16 Unit: l/min numeric

Service Attributes

|        |
|--------|
| Status |

Read

```taphome
var reg := MODBUSR(H, 444, Int16);
SWITCH(reg, 32766, ADDWARNING("Water flow not configured"), 32767, ADDWARNING("Water flow at fault"), Return(reg/10));
Return (nan);
```

Service Attributes

Status

```taphome
SWITCH(MODBUSR(H, 405, Uint16), 32766, "Not configured", 32767, "Fault", "Ok")
```

Water Inlet Temperature Temperature Sensor Read-only

Register: H:400 Int16 Unit: °C numeric

Read temperature

```taphome
MODBUSR(H, 400, Int16) / 10
```

Water Outlet Temperature Temperature Sensor Read-only

Register: H:401 Int16 Unit: °C numeric

Read temperature

```taphome
MODBUSR(H, 401, Int16) / 10
```

**Connection:** Modbus RTU • 9600 baud• 8E1 • Slave ID: $\[SlaveId]

Possible improvements (2)

- H:422 Compressor Inhalation Temperature — Int16, /10 = °C. Register H:422 is listed in report but template device named 'Compressor inhalation' actually reads H:433 (discharge). True inhalation temp is not exposed as a primary device
- H:7201 Remote Write Enable (direct access) — UInt16 bit 0 — module readscript auto-enables this on every poll. Not exposed as a standalone device but could be useful for manual override

## Import parameters

Enter these values when you import the XML.

| Asked in the app | Default       |
|------------------|---------------|
| Slave Id         | `1`           |
| IP address       | `192.168.1.0` |

## Related Documentation

- [Modbus Integration](https://taphome.com/en/compatibility/modbus-guide/)
- [Modbus](https://taphome.com/en/docs/integration/modbus/)
- [Simple configuration using templates](https://taphome.com/en/docs/integration/modbus/templates/)
- [Modbus scripts and prefetch](https://taphome.com/en/docs/script/modbus-scripts/)
- [Modbus functions](https://taphome.com/en/docs/script/modbus/)
- [Modbus data types](https://taphome.com/en/docs/script/modbus-data-types/)

