TapHome

Sistema Sistema-Home 4..18(T)

Modbus RTU
Submitted by
Last updated: 04. 2026

Requires external gateway

TapHome Modbus RTU CCU — product page

Sistema Sistema-Home 4..18(T)

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
  • GNDGND (mandatory for reliable communication)

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:

ParameterValue
Baud rate9600
Data bits8
ParityEven
Stop bits1
Slave ID1 (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:

ValueModeDescription
0Stand byHeat pump idle
1CoolCooling only
2HeatHeating only
4SanitaryDHW production only
5Cool+DHWCooling with DHW
6Heat+DHWHeating 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 discharge temperatures for all compressors across both refrigerant circuits

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).

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

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)

Sistema-Home 4..18(T) heatpump

Read (module)
#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
MODBUSR(H, 305, Uint16) + "h"
Compressor 2 runtime
MODBUSR(H, 307, Uint16) + "h"
Compressor 3 runtime
MODBUSR(H, 309, Uint16) + "h"
Compressor 1 runtime (circuit 2)
MODBUSR(H, 313, Uint16) + "h"
Compressor 2 runtime (circuit 2)
MODBUSR(H, 315, Uint16) + "h"
Compressor 3 runtime (circuit 2)
MODBUSR(H, 317, Uint16) + "h"
Active Mode Multi-value Switch

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

Register: H:200H:7200 Int16 numeric
Values / States: Stand by · Cool · Heat · Sanitary · Cool+DHW · Heat+DHW
Service Actions
DHW (Sanitary) SetpointSet domestic hot water temperature target (25–55 °C)

Active Mode

Read switch state
MODBUSR(H, 200, Int16)
Write switch state
MODBUSW(H, 7200, int16, Mu)
Service Actions
DHW (sanitary) setpoint
Parameters: Temp setpoint (25–55 ts)
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)

Compressor Discharge Temperature

Read temperature
MODBUSR(H, 433, Int16) / 10
Service Attributes
Compressor discharge 1
var temp := MODBUSR(H, 433, Int16);
if(temp = 32766, "Not configured", temp/10 + "°C");
Compressor discharge 2
var temp := MODBUSR(H, 434, Int16);
if(temp = 32766, "Not configured", temp/10 + "°C");
Compressor discharge 3
var temp := MODBUSR(H, 435, Int16);
if(temp = 32766, "Not configured", temp/10 + "°C");
Compressor inhalation (circuit 2)
var temp := MODBUSR(H, 20422, Int16);
if(temp = 32766, "Not configured", temp/10 + "°C");
Compressor 1 discharge (circuit 2)
var temp := MODBUSR(H, 20433, Int16);
if(temp = 32766, "Not configured", temp/10 + "°C");
Compressor 2 discharge (circuit 2)
var temp := MODBUSR(H, 20434, Int16);
if(temp = 32766, "Not configured", temp/10 + "°C");
Compressor 3 discharge (circuit 2)
var temp := MODBUSR(H, 20435, Int16);
if(temp = 32766, "Not configured", temp/10 + "°C");
Cool Setpoint Thermostat

Cooling setpoint thermostat — current temperature from plant mixing tank

Register: H:1001 Int16 Unit: °C numeric

Cool Setpoint

Read temperature
MODBUSR(H, 440, Int16)/10
Read desired temperature
MODBUSR(H, 1001, Int16) / 10
Write desired temperature
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

DHW Temperature

Read temperature
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
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

Fan Speed

Read level
MODBUSR(H, 7000, Int16)/1000
Heat Setpoint Thermostat

Heating setpoint thermostat — current temperature from plant mixing tank

Register: H:1002 Int16 Unit: °C numeric

Heat Setpoint

Read temperature
MODBUSR(H, 440, Int16)/10
Read desired temperature
MODBUSR(H, 1002, Int16) / 10
Write desired temperature
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

High Pressure

Read
MODBUSR(H, 406, Int16)/100
Service Attributes
High Pressure Circuit 2
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

Low Pressure

Read
MODBUSR(H, 414, Int16)/100
Service Attributes
Low Pressure Circuit 2
MODBUSR(H, 20414, Int16)/100 + " bar"
Outside Temperature Temperature Sensor Read-only
Register: H:428 Int16 Unit: °C numeric

Outside Temperature

Read temperature
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

Plant Temperature (Mixing Tank)

Read temperature
MODBUSR(H, 440, Int16)/10
Pump Speed Dimmer Read-only

Read-only circulation pump speed as percentage

Register: H:7001 Int16 Unit: % numeric

Pump Speed

Read level
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

Water Flow Rate

Read
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
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

Water Inlet Temperature

Read temperature
MODBUSR(H, 400, Int16) / 10
Water Outlet Temperature Temperature Sensor Read-only
Register: H:401 Int16 Unit: °C numeric

Water Outlet Temperature

Read temperature
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