
The Nibe VVM S320 is an indoor heat pump module that combines heating, hot water production, and ventilation (ERS 1 energy recovery) in a single unit. TapHome connects directly via built-in Modbus TCP/IP over Ethernet or WiFi — no external gateway or accessory is required. The VVM S325 uses the same register set and is fully interchangeable.
The template provides 82 service attributes covering temperature monitoring, heating curve management, hot water demand control, ERS 1 fan speed configuration, degree-minute indicators, energy metering, compressor statistics, and alarm handling.
Network connection
The VVM S320 has built-in Modbus TCP/IP support, activated through the unit’s touchscreen display. Connect the unit to the same local network as TapHome Core using either Ethernet (menu 5.2.2) or WiFi (menu 5.2.1).
- Protocol: Modbus TCP
- Port: 502
- Default Slave ID: 1 (some installations may use 0)
- Registers: Input (FC04) for read-only sensors, Holding (FC03) for read/write settings
Assign a static IP address to the VVM S320 via your router’s DHCP reservation settings. The current network configuration can be verified in menu 3.1.13 (“Connections”) on the unit’s display.
Enabling Modbus communication
Modbus TCP must be explicitly enabled on the heat pump before TapHome can connect:
- On the VVM S320 touchscreen, tap the menu icon (three horizontal lines) to open the main menu
- Navigate to My system (menu 4) > Advanced settings > Modbus TCP/IP (menu 7.5.9)
- Toggle Connected to ON
- Leave Modbus ext. calc. supply (7.5.9.1) set to OFF
- Leave Modbus ext. sensor input (7.5.9.2) set to ALL OFF
When importing the template in TapHome, provide:
- IP Address — the unit’s IP on the local network (check menu 3.1.13 or the router’s DHCP table)
- Slave ID — Modbus slave address (default: 1)
If Modbus TCP is not enabled in menu 7.5.9, TapHome will receive “Error on read request” responses. This is a pump configuration issue, not a network problem.
Firmware version 2.2.1 or later is recommended. Updates can be downloaded from myuplink.com and applied via the USB port on the display unit.
Device capabilities
The template exposes the following devices, grouped by function:
Temperature monitoring
Seven temperature sensors read from input registers with automatic divide-by-10 conversion:
| Sensor | Register | Description |
|---|---|---|
| Outdoor Temperature (BT1) | A:1 | Current outdoor air temperature |
| Supply Temperature (BT2) | A:5 | Supply line temperature |
| Return Temperature (BT3) | A:7 | Return line temperature |
| Hot Water Top (BT7) | A:8 | Hot water tank top temperature |
| Hot Water Charging (BT6) | A:9 | Hot water charging temperature |
| Room Temperature (BT50) | A:26 | Room sensor temperature (optional sensor) |
| Supply Temperature (BT63) | A:72 | Additional heat supply temperature |
Additional air-side temperature sensors are available through the ventilation module:
- Exhaust Air (BT20) — reads H:19, exhaust air from the ERS 1 heat exchanger
- Extract Air (BT21) — reads H:20 (see Known limitations)
- Calculated Supply Temperature — reads A:1017, the system-calculated target supply line temperature
Operating mode control
- Operating Mode — reads/writes H:237. Selects between Auto (0), Manual (1), and Add. heat only (2). In Auto mode the heat pump manages heating demand automatically; Manual allows direct control; Add. heat only disables the compressor.
- Operating Priority — reads A:1028. Shows the current system priority: 10=off, 20=hot water, 30=heat, 40=pool, 60=cooling.
Heating curve management
The template provides full control over the weather-compensated heating curve for climate system 1:
- Heating Curve — reads/writes H:26 (range 0–15, default 9). The curve slope determines how aggressively supply temperature rises as outdoor temperature drops.
- Curve Offset — reads/writes H:30 (range -10 to +10, default 0). Parallel shift of the entire curve up or down.
- Supply Temp Min / Max — reads/writes H:34 and H:38 (divide by 10 for °C). Clamps the calculated supply temperature to a safe range.
- Own Curve P1–P7 — reads/writes H:39–H:45. Seven custom heating curve points at outdoor temperatures from +20 °C (P7) down to -40 °C (P1), allowing a fully user-defined curve.
External climate adjustment
Four read-only sensors show the current external adjustment values for climate systems 1–4:
- External Adjustment Climate S1–S4 — reads A:1054–A:1057
Two writable registers allow external override:
- External Adjustment Climate — reads/writes H:51 (range -10 to +10)
- External Adjust Room Sensor Cooling 1 — reads/writes H:4153 (divide by 10 for °C)
Degree minutes
Degree minutes are the primary heat demand indicator in Nibe systems — a negative value means the house needs heating, and the more negative it gets, the harder the system works:
- Degree Minutes — reads/writes H:18 (divide by 10, range -3000 to +3000 DM). The main heat demand indicator. Writing a large negative value forces immediate compressor start.
- Degree Minutes Cooling — reads/writes H:20. Cooling demand indicator.
- DM Start Additional Heat — reads A:97. Threshold for engaging the additional electric heater.
- DM Start Compressor — reads A:159. Threshold for starting the compressor.
Hot water management
- Hot Water Demand Mode — reads/writes H:56. Selects between Small (0), Medium (1), Large (2), and Smart Control (3). The mode determines how aggressively the system maintains hot water temperature.
- Hot Water Top Temperature (BT7) — reads A:8 (divide by 10 for °C)
- Hot Water Charging Temperature (BT6) — reads A:9 (divide by 10 for °C)
- Hot Water Circulation Outgoing Temperature — reads A:87, outgoing hot water from BT70 sensor
- Current Hot Water Control — reads A:137, identifies which subsystem currently controls HW production
Ventilation (ERS 1) fan speed control
The VVM S320 includes an integrated ERS 1 (Energy Recovery System) with configurable fan speeds for both supply and exhaust air. Each fan has four speed levels plus a normal operating speed:
| Setting | Supply Register | Exhaust Register | Default |
|---|---|---|---|
| Speed 1 (minimum) | H:1041 | H:1024 | 0% |
| Speed 2 (low) | H:1040 | H:1023 | 30% |
| Speed 3 (medium) | H:1039 | H:1022 | 80% |
| Speed 4 (maximum) | H:1038 | H:1021 | 100% |
| Normal | H:1042 | H:1025 | 60% / 75% |
Additional ventilation controls:
- Ventilation Mode — reads/writes H:104, selects the ventilation operating mode
- Return Time Fan 1–4 — reads/writes H:115–H:118, sets the hours before a fan returns from a speed override back to normal (1–24 h, default 4 h)
- Bypass Temperature — reads/writes H:1044 (range 2–10 °C, default 4 °C), the temperature threshold for bypassing the heat exchanger
Energy monitoring
The template includes energy production and consumption meters:
- Energy Produced (Heat) — reads A:2283 (divide by 100 for kWh)
- Energy Produced (Hot Water) — reads A:2285
- Energy Used (Heat) — reads A:2291
- Energy Used (Hot Water) — reads A:2293 (divide by 100 for kWh)
- Energy Used (Add. Heater) — reads A:2299
- Current Power — reads A:2305 (divide by 100 for kW)
- Energy Flow (Compressor + Add. Heat) — reads A:1577 (uInt32, divide by 10 for kWh)
- Energy Flow (Hot Water, Comp. + Add. Heat) — reads A:1575 (Int32, divide by 10 for kWh)
Compressor statistics
- Compressor Total Time EP14 / EP15 — reads A:2335 and A:2337, total operating hours
- Compressor Heat Time EP14 / EP15 — reads A:2339 and A:2341, heating-specific operating hours
- Total Run Time (Add. Heat) — reads A:1025, additional heater runtime (available as both 16-bit and 32-bit variants)
System health and alarms
- Alarm Number — reads A:1975, the currently active alarm code
- Alarm Reset — writes to H:22, clears the active alarm
- Alarm Lower Room Temperature — reads H:196, alarm action threshold for room temperature
- Alarm Lower HW Temperature — reads H:197, alarm action threshold for hot water temperature
- Additional Heat Steps — reads A:1029, number of active internal electric heater steps
Additional devices
- Flow Sensor — reads A:40 (divide by 10 for l/min), heating medium flow rate from BF1
- Heating Medium Pump Speed — reads A:1636, GP1 pump speed percentage
- Pump Speed (S135) — reads/writes H:1036, ventilation module pump speed (1–100%, default 70%)
- Shunt Valve QN11 (EM1) — reads A:1034, shunt valve status (10=off, 20=active, 30=passive, 40=opening, 50=closing)
- Floor Drying — reads/writes H:120, enables/disables floor drying program (0=off, 1=on)
- Filter Replacement Interval — reads/writes H:119, months between filter replacements (1–24, default 3)
- Humidity Setpoint — reads/writes H:997, relative humidity setpoint (30–90%, default 60%)
- HTS 1 — reads/writes H:998, high temperature setting on/off
- OPT — reads/writes H:1015, energy optimiser on/off
- OPT DM Start Difference — reads/writes H:1016, degree-minute start difference for OPT (10–2000, default 700)
Known limitations
The template contains four register mapping inconsistencies inherited from the XML source. These do not prevent normal operation but may affect specific readings:
H:20 dual mapping — Register H:20 is mapped to both “Degree Minutes Cooling” (R/W) and “Extract Air BT21” (read-only). The nibe library confirms H:20 is “Cooling degree minutes” (FC03, R/W). The BT21 extract air sensor is actually at input register A:20 (FC04). The template likely has an incorrect function code for BT21.
H:51 dual mapping — Register H:51 is mapped to both “External Adjustment Room Sensor Climate” and “External Adjustment Climate”. Both read/write the same register. The “room sensor” variant may have been intended for H:55 (a different register) but was mapped to H:51 in the template.
A:1025 dual mapping — Register A:1025 appears as both a 16-bit (“CAS CHODU TOTAL”) and 32-bit (“TOTAL RUN TIME”) service attribute. The nibe library confirms this is a 32-bit register (s32, 6 bytes). The 16-bit variant may overflow for units with long runtimes.
Energy register scaling — Energy registers use inconsistent scale factors: A:2283 and A:2293 use /100, while A:2285, A:2291, and A:2299 have no scale factor. This may indicate different units (kWh vs MWh) or missing conversion factors in the template. Verify readings against the unit’s display.
Troubleshooting
No Modbus communication
- Verify Modbus TCP/IP is enabled in menu 7.5.9 on the unit’s display — toggle “Connected” must be ON
- Check the unit’s IP address in menu 3.1.13 (“Connections”)
- Ensure TapHome Core and the VVM S320 are on the same network/subnet
- Try Slave ID 0 if the default 1 does not respond
- Set the Modbus timeout to at least 14 seconds with 3 retries
Incorrect temperature readings
All temperature registers use a scale factor of 10 (divide raw value by 10 to get °C). If readings appear 10x too high, verify the divide-by-10 conversion is applied. Registers A:87 (hot water circulation) and H:19 (exhaust air) may also require divide-by-10 but the template does not include the conversion — verify against the unit’s display.
Fan speed changes not taking effect
ERS 1 fan speeds are configured as percentages (0–100%). If a fan speed change appears to have no effect, check the ventilation mode (H:104) — the unit may be in a mode that overrides manual fan speed settings. Also verify the return time (H:115–H:118) has not elapsed, which would revert the fan to normal speed.
Energy readings inconsistent
Due to mixed scale factors in the energy registers, some readings may appear orders of magnitude off. Cross-reference with the unit’s display values. Registers with /100 factor show values in kWh; registers without a factor may be in a different unit. See Known limitations above.
