
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
SVCcomes 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 registersH:0–H:34, mode atH:30with values0–6, out water temperature atH:8, heat/cool thermostat setpoints atH:31/H:32with ×1 scaling, tank thermostat setpoint atH:33with ×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
- Connect the heat pump’s Ethernet / LAN port to the same local network as the TapHome Core.
- 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.1is a placeholder. - 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:
- Enter the service / installer menu on the heat pump’s wired controller or on a built-in display (typically protected by a PIN).
- Locate the communication or network settings section.
- Enable Modbus TCP if it is not active by default.
- Set the IP address (static recommended) and, if applicable, subnet mask and gateway.
- Confirm or set the Modbus slave (unit) ID — the template default is
1. - 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:
| Parameter | Description | Default |
|---|---|---|
| IP Address | Local IP of the heat pump controller | 192.168.0.1 |
| Slave ID | Modbus unit identifier | 1 |
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
ncor 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 235 → 23.5 °C).
| Addr | Name | R/W | Scaling | Unit | Notes |
|---|---|---|---|---|---|
| H:0 | Out ambient temp | R | /10 | °C | Outdoor ambient at the outdoor unit |
| H:1 | Out coil temp | R | /10 | °C | Outdoor refrigerant coil |
| H:2 | Discharge temp | R | /10 | °C | Compressor discharge line |
| H:3 | Suction temp | R | /10 | °C | Compressor suction line |
| H:4 | In ambient temp (reversed) | R | /10 | °C | Indoor-side sensor; “(reversed)” note from XML is unexplained |
| H:5 | Tank temp | R | /10 | °C | DHW buffer tank; also used as current-temp source for Tank Thermostat |
| H:6 | In coil temp | R | /10 | °C | Indoor refrigerant coil |
| H:7 | In water temp | R | /10 | °C | Water inlet to the heat exchanger |
| H:8 | Out water temp | R | /10 | °C | Water outlet from the heat exchanger; also used as current-temp source for both Heat and Cool Thermostats |
| H:15 | Output status | R | raw | — | Raw integer, semantics undocumented |
| H:16 | Run status | R | raw | — | Raw integer, semantics undocumented |
| H:20 | Main valve | R | raw | — | Raw integer, likely 4-way reversing valve state |
| H:24 | Power [Watt] | R | raw | W | Int16 — clips at ±32767 W |
| H:25 | Low pressure [kPa] | R | raw | kPa | Suction-side refrigerant pressure |
| H:26 | High pressure [kPa] | R | raw | kPa | Discharge-side refrigerant pressure |
| H:30 | Mode | R/W | enum | — | See Operating modes below |
| H:31 | Heat thermostat setpoint | R/W | ×1 | °C | Integer-degree resolution |
| H:32 | Cool thermostat setpoint | R/W | ×1 | °C | Integer-degree resolution |
| H:33 | Tank thermostat setpoint | R/W | ×10 | °C | Decimal resolution — write value Se*10 |
| H:34 | Difference temp of restart | R/W | raw | °C | Hysteresis / restart differential |
Asymmetric thermostat scaling — easy to miss. The DHW Tank Thermostat (
H:33) uses×10scaling, while the Heat Thermostat (H:31) and Cool Thermostat (H:32) use×1scaling. 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=Falseon registersH:15,H:16,H:20,H:24,H:25andH:26, but noWriteStateformula 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) andH: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 readH: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:
| Value | Mode | Meaning |
|---|---|---|
| 0 | Power Off | Heat pump off |
| 1 | Heat | Space heating only |
| 2 | Powerful Heat | Boost / forced heating |
| 3 | Tank Heat | DHW only |
| 4 | Cool | Space cooling only |
| 5 | Heat + Tank Heat | Space heating combined with DHW |
| 6 | Cool + Tank Heat | Space 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 fromH:8(Out water temp). - Space Cooling Thermostat (
H:32, Read/Write, ×1 scaling) — whole-degree setpoint for space cooling. Current temperature is also read fromH:8. - DHW Tank Thermostat (
H:33, Read/Write, ×10 scaling) — decimal-resolution setpoint for the DHW tank. Current temperature is read fromH:5(Tank temp). No valve feedback is available (ReadValveStateis hard-coded to0).
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 isInt16, 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
- Confirm the heat pump’s Ethernet port is physically connected and linked (check the controller’s network status LED if present).
- Verify the IP address — inspect the controller’s network settings menu or check the router’s DHCP lease table.
- Ensure TapHome Core and the heat pump are on the same subnet, or that routing between subnets allows TCP port 502.
- Check that no firewall or VLAN rule blocks port 502.
- 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.