TapHome

SVC Heat Pump

Modbus TCP
Submitted by
Last updated: 06. 2026
SVC Heat Pump

The SVC template is a generic Modbus TCP integration for a reversible air-to-water heat pump controller that exposes sensors, mode selection and three thermostats (space heating, space cooling and domestic hot water) over the local network. TapHome connects directly to the heat pump’s Ethernet interface — no RS-485 wiring and no gateway is required.

Manufacturer identity is not confirmed. The string SVC comes from the <Producer> field in the original TapHome XML template and is almost certainly a generic / whitelabel designation rather than a consumer brand. Before importing this template, verify that your controller uses the exact register map documented below (holding registers H:0–H:34, mode at H:30 with values 0–6, out water temperature at H:8, heat/cool thermostat setpoints at H:31/H:32 with ×1 scaling, tank thermostat setpoint at H:33 with ×10 scaling). If any register does not match, this template will misread or misconfigure the device.

The register map, mode enumeration and scaling described on this page are extracted directly from the canonical TapHome XML. No vendor manual is available.

Hardware connection

The SVC controller uses the ModbusTcpCCU CCU model, meaning TapHome speaks Modbus TCP directly to the heat pump’s LAN interface.

  • Protocol: Modbus TCP
  • Port: 502 (standard)
  • Register type: all holding registers (H)
  • Data type: all registers are Int16, big-endian
  • Byte order: standard Modbus (high byte first)
  • Register range: H:0 – H:34 (registers 9–14, 17–19, 21–23 and 27–29 are not referenced by the template and should not be assumed present on the controller)
Network requirements
  1. Connect the heat pump’s Ethernet / LAN port to the same local network as the TapHome Core.
  2. Assign the heat pump a stable IP address — either configure a static IP on the controller or add a DHCP reservation in the router based on the MAC address. The template’s default 192.168.0.1 is a placeholder.
  3. Ensure no firewall between TapHome Core and the heat pump blocks TCP port 502.

The template does not use mDNS / Zeroconf discovery — the heat pump’s IP address must be entered manually during import.

Configuration

Enabling Modbus communication

Because the manufacturer of this controller is unknown, there is no vendor-specific procedure documented here. The general approach for this class of heat pump controller is:

  1. Enter the service / installer menu on the heat pump’s wired controller or on a built-in display (typically protected by a PIN).
  2. Locate the communication or network settings section.
  3. Enable Modbus TCP if it is not active by default.
  4. Set the IP address (static recommended) and, if applicable, subnet mask and gateway.
  5. Confirm or set the Modbus slave (unit) ID — the template default is 1.
  6. Save and reboot the controller if required.

Consult the service manual supplied with the unit for the exact menu path. If Modbus TCP is not an option in the controller’s menu, this template cannot be used.

Import parameters

When importing the template in TapHome, provide:

ParameterDescriptionDefault
IP AddressLocal IP of the heat pump controller192.168.0.1
Slave IDModbus unit identifier1

Verify connectivity from the TapHome Core host before import by pinging the heat pump’s IP, and — if possible — by probing TCP port 502 with a tool such as nc or a Modbus client. This catches networking issues before they show up as template-level errors.

Register map

The template exposes the following holding registers. All registers are Int16. Temperature scaling /10 means the raw integer value is divided by 10 to obtain degrees Celsius (e.g. raw 23523.5 °C).

AddrNameR/WScalingUnitNotes
H:0Out ambient tempR/10°COutdoor ambient at the outdoor unit
H:1Out coil tempR/10°COutdoor refrigerant coil
H:2Discharge tempR/10°CCompressor discharge line
H:3Suction tempR/10°CCompressor suction line
H:4In ambient temp (reversed)R/10°CIndoor-side sensor; “(reversed)” note from XML is unexplained
H:5Tank tempR/10°CDHW buffer tank; also used as current-temp source for Tank Thermostat
H:6In coil tempR/10°CIndoor refrigerant coil
H:7In water tempR/10°CWater inlet to the heat exchanger
H:8Out water tempR/10°CWater outlet from the heat exchanger; also used as current-temp source for both Heat and Cool Thermostats
H:15Output statusRrawRaw integer, semantics undocumented
H:16Run statusRrawRaw integer, semantics undocumented
H:20Main valveRrawRaw integer, likely 4-way reversing valve state
H:24Power [Watt]RrawWInt16 — clips at ±32767 W
H:25Low pressure [kPa]RrawkPaSuction-side refrigerant pressure
H:26High pressure [kPa]RrawkPaDischarge-side refrigerant pressure
H:30ModeR/WenumSee Operating modes below
H:31Heat thermostat setpointR/W×1°CInteger-degree resolution
H:32Cool thermostat setpointR/W×1°CInteger-degree resolution
H:33Tank thermostat setpointR/W×10°CDecimal resolution — write value Se*10
H:34Difference temp of restartR/Wraw°CHysteresis / restart differential

Asymmetric thermostat scaling — easy to miss. The DHW Tank Thermostat (H:33) uses ×10 scaling, while the Heat Thermostat (H:31) and Cool Thermostat (H:32) use ×1 scaling. This means Tank setpoint supports decimals (e.g. 48.5 °C) but Heat / Cool setpoints are whole degrees only. This asymmetry comes from the controller firmware, not from TapHome.

The XML sets IsReadOnly=False on registers H:15, H:16, H:20, H:24, H:25 and H:26, but no WriteState formula is provided for any of them. These registers are therefore effectively read-only through the template.

Device capabilities

The template exposes 20 devices covering sensors, a mode selector, three thermostats and a restart-differential parameter.

Temperature sensors

Nine read-only temperature sensors cover the refrigerant circuit, the hydronic loop and ambient conditions:

  • Outdoor Ambient Temperature (H:0) — outdoor air temperature at the outdoor unit.
  • Outdoor Coil Temperature (H:1) — refrigerant coil on the outdoor side (evaporator in heating, condenser in cooling).
  • Indoor Coil Temperature (H:6) — refrigerant coil on the indoor side (condenser in heating, evaporator in cooling).
  • Compressor Discharge Temperature (H:2) — hot-side refrigerant leaving the compressor.
  • Compressor Suction Temperature (H:3) — cool-side refrigerant returning to the compressor.
  • Indoor Ambient Temperature (reversed) (H:4) — indoor-side ambient sensor. The (reversed) suffix is carried verbatim from the XML; without vendor documentation its precise meaning cannot be confirmed — it may indicate inverted sensor polarity or an indoor-facing placement on the outdoor unit.
  • DHW Tank Temperature (H:5) — domestic hot water buffer tank. This register is also used as the current-temperature source for the DHW Tank Thermostat.
  • Water Inlet Temperature (H:7) — water returning from the hydronic loop into the heat exchanger.
  • Water Outlet Temperature (H:8) — water leaving the heat exchanger. This register is also used as the current-temperature source for both the Heat Thermostat and the Cool Thermostat.

Shared current-temperature source. Registers H:5 (Tank temp) and H:8 (Out water temp) are used twice each — once as a standalone sensor and again as the current-temperature source for a thermostat. In particular, the Heat Thermostat and Cool Thermostat both read H:8, so the template cannot distinguish a separate “zone current temperature” for heating versus cooling. The controller simply does not expose independent zone sensors.

Operating mode

The Operating Mode selector (H:30, Read/Write) is exposed as a multi-value switch with the following values:

ValueModeMeaning
0Power OffHeat pump off
1HeatSpace heating only
2Powerful HeatBoost / forced heating
3Tank HeatDHW only
4CoolSpace cooling only
5Heat + Tank HeatSpace heating combined with DHW
6Cool + Tank HeatSpace cooling combined with DHW

Values 71, 72 and 73 appear in the XML as placeholder slots with raw digit names ("7", "8", "9") — they are reserved in the firmware and should not be used.

Thermostats

Three thermostats are exposed, each as a separate TapHome device with its own setpoint and a shared current-temperature source:

  • Space Heating Thermostat (H:31, Read/Write, ×1 scaling) — whole-degree setpoint for space heating. Current temperature is read from H:8 (Out water temp).
  • Space Cooling Thermostat (H:32, Read/Write, ×1 scaling) — whole-degree setpoint for space cooling. Current temperature is also read from H:8.
  • DHW Tank Thermostat (H:33, Read/Write, ×10 scaling) — decimal-resolution setpoint for the DHW tank. Current temperature is read from H:5 (Tank temp). No valve feedback is available (ReadValveState is hard-coded to 0).

The heat pump’s internal logic decides whether the heating or cooling setpoint is active based on the selected Operating Mode at H:30. Writing to a setpoint register does not itself switch the unit between heating and cooling — change the mode first, then adjust the corresponding setpoint.

Power and refrigerant pressures
  • Electrical Power (H:24) — instantaneous power consumption of the heat pump in watts (W). Because the register is Int16, the value clips at ±32767 W; large commercial units may exceed this range.
  • Low-Side Pressure (H:25) — suction-side refrigerant pressure in kilopascals (kPa). Typical R410A / R32 low-side values fall in the ~100–700 kPa range.
  • High-Side Pressure (H:26) — discharge-side refrigerant pressure in kilopascals (kPa). Typical R410A / R32 high-side values fall in the ~1500–4500 kPa range.
Status variables (raw)

Three status registers are exposed as raw Int16 readings because the controller vendor has not documented any bitmask or enumeration for them:

  • Output Status (H:15)
  • Run Status (H:16)
  • Main Valve State (H:20) — likely the 4-way reversing valve state (heating vs. cooling refrigerant path), but this interpretation is not confirmed.

These values can be monitored for change detection, but they cannot be translated into user-friendly labels without vendor documentation.

Service parameter
  • Restart Temperature Differential (H:34, Read/Write, raw integer in °C) — the hysteresis value that determines how many degrees below the active setpoint must be reached before the compressor restarts. Typical controllers in this class use values between 1 and 15 °C, but the valid range for this specific device has not been verified.

Troubleshooting

No Modbus communication
  1. Confirm the heat pump’s Ethernet port is physically connected and linked (check the controller’s network status LED if present).
  2. Verify the IP address — inspect the controller’s network settings menu or check the router’s DHCP lease table.
  3. Ensure TapHome Core and the heat pump are on the same subnet, or that routing between subnets allows TCP port 502.
  4. Check that no firewall or VLAN rule blocks port 502.
  5. Confirm Modbus TCP is actually enabled in the controller’s service menu (some controllers ship with it disabled by default).
Values look clearly wrong (garbled temperatures, impossible numbers)

If temperatures read as thousands of degrees, pressures read as tiny numbers or the mode selector shows unknown values, your heat pump most likely uses a different register map than the one this template expects. The SVC label covers an unidentified OEM controller — other OEM heat pumps (SPRSUN / Carel, Fairland, Gree Versati, Midea / Clivet / Kaisai, LG Therma V, Aermec, Sibotherm) all use different register layouts. Do not keep the template running against a mismatched device, as writes to mode and thermostat registers could alter unrelated settings.

Setpoint changes appear to “halve” or “tenfold”

This is almost always a scaling mismatch. The Tank Thermostat (H:33) uses ×10 scaling while the Heat (H:31) and Cool (H:32) thermostats use ×1 scaling. If you see a setpoint applied 10× larger or smaller than expected, confirm you are writing to the right thermostat — the template already applies the correct scaling per-device, so the most likely cause is that the controller firmware differs from the assumed map.

Heat and Cool thermostats show the same current temperature

This is expected. Both the Heat Thermostat and the Cool Thermostat read current temperature from register H:8 (Water Outlet Temperature). The template cannot separate “heating zone current temp” from “cooling zone current temp” because the controller exposes only a single outlet sensor. If you need distinct zone sensors, add separate TapHome temperature sensors (wired directly to TapHome IO).

Power reading is stuck at 32767 or –32768

The H:24 Power register is a signed 16-bit integer, so instantaneous consumption above 32 767 W (32.77 kW) overflows. This affects large commercial units only — residential units typically stay well under this limit.

Available devices

SVC Module
Outdoor Ambient Temperature Temperature Sensor Read-only

Outdoor ambient air temperature measured at the outdoor unit

Register: H:0 Int16 Unit: °C

Outdoor Ambient Temperature

Read temperature
MODBUSR(H, 0, Int16) / 10
Operating Mode Multi-value Switch

Heat pump operating mode — Power Off, Heat, Powerful Heat (boost), Tank Heat (DHW only), Cool, Heat + Tank Heat (combined heating + DHW), Cool + Tank Heat (combined cooling + DHW)

Register: H:30 Int16 numeric
Values / States: Power Off · Heat · Powerful Heat · Tank Heat · Cool · Heat + Tank Heat · Cool + Tank Heat

Operating Mode

Read switch state
MODBUSR(H, 30, Int16)
Write switch state
MODBUSWNE(H, 30, Int16, Mu)
Outdoor Coil Temperature Temperature Sensor Read-only

Refrigerant coil temperature on the outdoor side — evaporator in heating mode, condenser in cooling mode

Register: H:1 Int16 Unit: °C

Outdoor Coil Temperature

Read temperature
MODBUSR(H, 1, Int16) / 10
Compressor Discharge Temperature Temperature Sensor Read-only

Hot-side refrigerant temperature leaving the compressor

Register: H:2 Int16 Unit: °C

Compressor Discharge Temperature

Read temperature
MODBUSR(H, 2, Int16) / 10
Compressor Suction Temperature Temperature Sensor Read-only

Cool-side refrigerant temperature returning to the compressor

Register: H:3 Int16 Unit: °C

Compressor Suction Temperature

Read temperature
MODBUSR(H, 3, Int16) / 10
Indoor Ambient Temperature Temperature Sensor Read-only

Indoor-side ambient sensor — the XML '(reversed)' label suggests either polarity-reversed wiring or indoor-facing placement on the outdoor unit (not confirmed by vendor)

Register: H:4 Int16 Unit: °C

Indoor Ambient Temperature

Read temperature
MODBUSR(H, 4, Int16) / 10
DHW Tank Temperature Temperature Sensor Read-only

Domestic hot water buffer tank temperature — also used as the current-temperature source for the DHW Tank Thermostat

Register: H:5 Int16 Unit: °C

DHW Tank Temperature

Read temperature
MODBUSR(H, 5, Int16) / 10
Indoor Coil Temperature Temperature Sensor Read-only

Refrigerant coil temperature on the indoor side — condenser in heating mode, evaporator in cooling mode

Register: H:6 Int16 Unit: °C

Indoor Coil Temperature

Read temperature
MODBUSR(H, 6, Int16) / 10
Water Inlet Temperature Temperature Sensor Read-only

Water temperature entering the heat pump heat exchanger (return from the hydronic loop)

Register: H:7 Int16 Unit: °C

Water Inlet Temperature

Read temperature
MODBUSR(H, 7, Int16) / 10
Water Outlet Temperature Temperature Sensor Read-only

Water temperature leaving the heat pump heat exchanger — also used as the current-temperature source for both the Space Heating Thermostat and the Space Cooling Thermostat

Register: H:8 Int16 Unit: °C

Water Outlet Temperature

Read temperature
MODBUSR(H, 8, Int16) / 10
Output Status Variable Read-only

Raw output-status value — bitmask or enum semantics are not documented by the manufacturer, so the value is exposed as-is

Register: H:15 Int16 raw-int-value

Output Status

Read
MODBUSR(H, 15, Int16)
Run Status Variable Read-only

Raw run-status value — bitmask or enum semantics are not documented by the manufacturer, so the value is exposed as-is

Register: H:16 Int16 raw-int-value

Run Status

Read
MODBUSR(H, 16, Int16)
Main Valve State Variable Read-only

Raw state of the main valve — likely the 4-way reversing valve that switches between heating and cooling refrigerant paths (interpretation not confirmed)

Register: H:20 Int16 raw-int-value

Main Valve State

Read
MODBUSR(H, 20, Int16)
Electrical Power Variable Read-only

Instantaneous electrical power consumption of the heat pump in watts — clips at ±32767 W because the register is a signed 16-bit integer

Register: H:24 Int16 Unit: W

Electrical Power

Read
MODBUSR(H, 24, Int16)
Low-Side Pressure Variable Read-only

Suction-side refrigerant pressure (low-pressure side of the refrigerant circuit) in kilopascals

Register: H:25 Int16 Unit: kPa

Low-Side Pressure

Read
MODBUSR(H, 25, Int16)
High-Side Pressure Variable Read-only

Discharge-side refrigerant pressure (high-pressure side of the refrigerant circuit) in kilopascals

Register: H:26 Int16 Unit: kPa

High-Side Pressure

Read
MODBUSR(H, 26, Int16)
DHW Tank Thermostat Thermostat

Setpoint for the domestic hot water buffer tank — decimal resolution (×10 scaling), current temperature read from the DHW Tank sensor

Register: H:33 Int16 Unit: °C

DHW Tank Thermostat

Read temperature
MODBUSR(H, 5, Int16) / 10
Read desired temperature
MODBUSR(H, 33, Int16) / 10
Write desired temperature
MODBUSWNE(H, 33, Int16, Se * 10)
Read valve state
0
Space Heating Thermostat Thermostat

Setpoint for space heating — whole-degree resolution (×1 scaling), current temperature read from the Water Outlet sensor and shared with the Space Cooling Thermostat

Register: H:31 Int16 Unit: °C

Space Heating Thermostat

Read temperature
MODBUSR(H, 8, Int16) / 10
Read desired temperature
MODBUSR(H, 31, Int16)
Write desired temperature
MODBUSWNE(H, 31, Int16, Se)
Space Cooling Thermostat Thermostat

Setpoint for space cooling — whole-degree resolution (×1 scaling), current temperature read from the Water Outlet sensor and shared with the Space Heating Thermostat

Register: H:32 Int16 Unit: °C

Space Cooling Thermostat

Read temperature
MODBUSR(H, 8, Int16) / 10
Read desired temperature
MODBUSR(H, 32, Int16)
Write desired temperature
MODBUSWNE(H, 32, Int16, Se)
Restart Temperature Differential Variable

Hysteresis value — how many degrees below the active setpoint must be reached before the compressor restarts

Register: H:34 Int16 Unit: °C

Restart Temperature Differential

Read
MODBUSR(H, 34, Int16)
Write
MODBUSWNE(H, 34, Int16, Va)
Connection: Modbus TCP • Slave ID: $[SlaveId]

Sources

  • TapHome Official Modbus Template (SVC.xml)
    github.com 2026-04-24

Found a problem with this device template?

Tell us what's wrong, what's missing, or how the template should behave. We rely on your feedback to keep the catalog accurate.

Verified by TapHome

Want to use this in your TapHome Core?

Open this template in the Customer Portal to apply it to one of your homes, or to draft a refinement and submit it back to the catalog.

Open in portal