TapHome

Systemair SAVE VTR 700

Modbus RTU
Submitted by
Last updated: 03. 2026
Systemair SAVE VTR 700

The Systemair SAVE VTR 700 is a residential heat recovery ventilation unit (HRV) that communicates with TapHome via Modbus RTU over a 3-wire RS-485 connection (A, B, GND). The template provides control over user modes, fan speed, ECO mode, free cooling, and monitors temperatures, CO2 levels, humidity and fan RPM. A comprehensive alarm monitoring system reports 30+ alarm conditions directly in TapHome.

The SAVE VTR 700 is part of the Systemair SAVE family. Other SAVE models (VSR 300, VSR 500, VTC, VTR) using the same control platform should be compatible with this template, as they share the same Modbus register map.

Hardware connection

RS-485 wiring

Connect using a 3-wire RS-485 connection to the Connection Board (CB) inside the unit:

  • A → A+/D+ on TapHome RS-485
  • B → B-/D- on TapHome RS-485
  • GND → GND on TapHome power supply (mandatory)

Important — Grounding

The GND wire must be connected between the Systemair unit and the TapHome power supply. Without proper grounding, communication errors may occur.

Technical specifications
  • Protocol: Modbus RTU Slave, RS-485
  • Baud rate: 9600 to 115200 (configurable)
  • Default baud rate: 115200
  • Parity: None, Even, or Odd (configurable)
  • Stop bits: 1
  • Slave address: 1–247 (configurable)
  • All registers: 16-bit integers

Configuration

Enabling Modbus communication

Modbus RTU is available on the Connection Board (CB) as standard. Communication parameters can be changed through the unit’s Control Panel:

  1. Navigate to Service → Communication → Modbus
  2. Set the Slave address (default: 1)
  3. Set the Baud rate (template default: 115200)
  4. Set Parity (template default: None)
  5. Confirm and restart if required

For TapHome: Configure TapHome to match the unit’s settings — 115200 baud, no parity, 1 stop bit, matching Slave ID.

Modbus TCP alternative — Systemair offers the Internet Access Module (IAM, Art. No. 211243) as an accessory, which provides Modbus TCP access over Ethernet on port 502. This can be used as an alternative to direct RS-485 wiring.

Initialize script

The template runs an initialization script that sets the fan speed regulation type to “Manual %” (H:1273=0) and enables fan stop detection (H:1352=1). These settings are applied automatically when TapHome connects to the unit.

Device capabilities

User mode control

Active User Mode — a multi-value switch that reads the current mode from I:1160 and writes mode changes via H:1161. Ten operating modes are available:

ValueModeDescription
0AutoAutomatic ventilation based on demand control (CO2/RH sensors)
1ManualFixed fan speed set by the Fan Speed device
2CrowdedIncreased ventilation for occupied spaces (timed)
3RefreshMaximum ventilation burst (timed)
4FireplaceReduced extract air to create positive pressure for fireplaces (timed)
5AwayReduced ventilation during absence (timed)
6HolidayMinimum ventilation for extended absence (timed)
7Cooker HoodIncreased extract for kitchen ventilation (timed)
8Vacuum CleanerAdjusted airflow for central vacuum systems (timed)
9Pressure GuardMaintains pressure balance when external devices affect airflow

Each mode has configurable supply and extract fan speeds visible as service attributes (22 in total), showing the actual fan speed percentage for both supply air fan (SAF) and extract air fan (EAF) in each mode.

Fan speed control

Fan Speed — a 4-level multi-value switch (H:1130) with offset conversion (read: −1, write: +1):

ValueLevel
0Off
1Low
2Normal
3High

Fan speed applies when the unit is in Manual mode. In other modes, the fan speed is determined by the active user mode configuration.

Supply Fan Speed and Extract Fan Speed — analog input devices that monitor the current fan operation. Each has a service attribute showing the actual fan RPM from the TACHO sensor (I:12400 for supply, I:12401 for extract).

Temperature monitoring

The template provides two temperature sensors with automatic °C × 10 conversion:

  • Outdoor Air Temperature (H:12101) — outdoor air temperature from the frost protection sensor. Service attribute: Room Air Temperature (I:12103, accessory sensor)
  • Supply Air Temperature (H:12102) — supply air temperature after the heat exchanger. Three service attributes: Extract Air Temperature (I:12104), Frost Protection Temperature (I:12100), and Overheat Temperature (I:12107)
Air quality monitoring
  • Highest CO2 (H:1001) — highest reading across all connected CO2 sensors, in ppm. Five service attributes show individual sensor values (I:12150–I:12154)
  • Highest Humidity (H:1000) — highest reading across all connected RH sensors, in % (value ÷ 100 conversion)
ECO mode

ECO Mode (H:2504) — a boolean switch that enables energy-saving operation. When active, ECO mode reduces heating energy by applying a configurable temperature offset to the heating setpoint.

  • Service attribute: Heating Offset During ECO Mode (H:2503, ÷10, °C) — shows the current offset
  • Service action: Set Temperature Offset — configures the heating offset (1–10°C)
Free cooling

Free Cooling Enable (H:4100) — a boolean switch that enables night-time free cooling. When outdoor temperatures are low enough, the unit uses cool outdoor air to pre-cool the building without running the active cooling system.

  • Service attribute: Free Cooling Active (I:4110) — indicates whether free cooling is currently being performed
Alarm monitoring

The module monitors 30+ alarm conditions through the ReadScript. When an alarm is active, it is reported as an error in TapHome. Monitored alarms include:

  • Fan alarms: SAF/EAF control, SAF/EAF RPM
  • Protection alarms: Frost protection, defrosting, overheat, fire
  • Sensor alarms: FPT, OAT, SAT, RAT, EAT, ECT, EFT, OHT, EMT temperature sensors
  • System alarms: RGS (rotating guard), BYS (bypass), secondary air, filter, external stop
  • Air quality alarms: RH, CO2, low SAT
  • Other: Manual override outputs, PDM sensors, manual fan stop

A Clear All Alarms service action writes to all 30 alarm clear registers, resetting all alarm states at once.

Service diagnostics

The module exposes five service attributes for monitoring system status:

  • System Time (H:6001–H:6006) — current date and time formatted as HH:MM DD.MM.YYYY
  • Actual Season (H:1038) — Summer or Winter
  • Indoor IAQ Level (I:1122) — Economic, Good, or Improving
  • Fan Speed Regulation Type (H:1273) — Manual %, Manual RPM, Constant Pressure, Constant Flow, or External
  • Demand Control (I:1003) — CO2 or RH

Two service actions allow setting the unit’s clock:

  • Set Date — writes year (2020–2999), month (1–12), day (1–31)
  • Set Time — writes hour (0–23), minute (0–59), second (0–59)

A Set Fan Speed Regulation Type service action allows switching between Manual %, Manual RPM, Pressure, Flow, and External regulation modes.

Additional capabilities

The SAVE VTR 700 also exposes Modbus registers for temperature setpoint control (H:2001, range 12–30°C with supply/room/extract control mode selection), a separate ECO mode enable register, ECO function active status, actual fan speed output percentages (SAF/EAF 0–100%), filter replacement period tracking with remaining time, individual extract air temperature and relative humidity sensors, and a complete 7-day week schedule with two periods per day and temperature offsets. These can be added in a future template update.

The temperature setpoint register (H:2001) is not included in the current template. To control the supply air setpoint, it can be added as a custom Modbus device in TapHome using holding register 2001 with a value range of 120–300 (representing 12.0–30.0°C with ÷10 conversion).

Troubleshooting

No Modbus communication
  1. Check RS-485 cables:
    • A correctly connected to A+/D+ on TapHome
    • B correctly connected to B-/D- on TapHome
    • GND connected to TapHome power supply ground — most common issue
  2. Verify the Modbus Slave address matches between the unit and TapHome
  3. Confirm TapHome is set to: 115200 baud, no parity, 1 stop bit (or matching the unit’s configured parameters)
  4. Check the Connection Board (CB) for proper RS-485 terminal connections
User mode not changing
  1. Verify the unit is not in a timed mode (Crowded, Refresh, Fireplace, Away, Holiday) — timed modes must expire or be manually cancelled before switching
  2. Check that the write register (H:1161) is responding — the read register (I:1160) and write register are different addresses
  3. Mode value 12 (PressureGuard) is automatically mapped to value 9 in the template
Temperature readings incorrect
  1. Temperature values use ÷10 conversion — a raw value of 215 means 21.5°C
  2. Verify the correct sensor is connected: Outdoor Air uses H:12101 (frost protection sensor), Supply Air uses H:12102
  3. Accessory sensors (room air, extract air) require optional sensor hardware to be installed

Available devices

Systemair SAVE VTR 700 Module
Service Attributes
System Time
Actual Season
Indoor IAQ Level
Fan Speed Regulation Type
Demand Control
Service Actions
Set Date
Set Time
Set Fan Speed Regulation Type
Clear All Alarms

SAVE VTR 700

Read (module)
#alarms
IF(MODBUSR(H, 15001, Uint16) = 1, ADDERROR("SAF_CTRL_ALARM"));
IF(MODBUSR(H, 15008, Uint16) = 1, ADDERROR("EAF_CTRL_ALARM"));
IF(MODBUSR(H, 15015, Uint16) = 1, ADDERROR("FROST_PROT_ALARM"));
IF(MODBUSR(H, 15022, Uint16) = 1, ADDERROR("DEFROSTING_ALARM"));
IF(MODBUSR(H, 15029, Uint16) = 1, ADDERROR("SAF_RPM_ALARM"));
IF(MODBUSR(H, 15036, Uint16) = 1, ADDERROR("EAF_RPM_ALARM"));
IF(MODBUSR(H, 15057, Uint16) = 1, ADDERROR("FTP_ALARM"));
IF(MODBUSR(H, 15064, Uint16) = 1, ADDERROR("OAT_ALARM"));
IF(MODBUSR(H, 15071, Uint16) = 1, ADDERROR("SAT_ALARM"));
IF(MODBUSR(H, 15078, Uint16) = 1, ADDERROR("RAT_ALARM"));
IF(MODBUSR(H, 15085, Uint16) = 1, ADDERROR("EAT_ALARM"));
IF(MODBUSR(H, 15092, Uint16) = 1, ADDERROR("ECT_ALARM"));
IF(MODBUSR(H, 15099, Uint16) = 1, ADDERROR("EFT_ALARM"));
IF(MODBUSR(H, 15106, Uint16) = 1, ADDERROR("OHT_ALARM"));
IF(MODBUSR(H, 15113, Uint16) = 1, ADDERROR("EMT_ALARM"));
IF(MODBUSR(H, 15120, Uint16) = 1, ADDERROR("RGS_ALARM"));
IF(MODBUSR(H, 15127, Uint16) = 1, ADDERROR("BYS_ALARM"));
IF(MODBUSR(H, 15134, Uint16) = 1, ADDERROR("SECONDARY_AIR_ALARM"));
IF(MODBUSR(H, 15141, Uint16) = 1, ADDERROR("FILTER_ALARM"));
IF(MODBUSR(H, 15148, Uint16) = 1, ADDERROR("EXTRA_CONTROLLER_ALARM"));
IF(MODBUSR(H, 15155, Uint16) = 1, ADDERROR("EXTERNAL_STOP_ALARM"));
IF(MODBUSR(H, 15162, Uint16) = 1, ADDERROR("RH_ALARM"));
IF(MODBUSR(H, 15169, Uint16) = 1, ADDERROR("CO2_ALARM"));
IF(MODBUSR(H, 15176, Uint16) = 1, ADDERROR("LOW_SAT_ALARM"));
IF(MODBUSR(H, 15501, Uint16) = 1, ADDERROR("MANUAL_OVERRIDE_OUTPUTS_ALARM"));
IF(MODBUSR(H, 15508, Uint16) = 1, ADDERROR("PDM_RHS_ALARM"));
IF(MODBUSR(H, 15515, Uint16) = 1, ADDERROR("PDM_EAT_ALARM"));
IF(MODBUSR(H, 15522, Uint16) = 1, ADDERROR("MANUAL_FAN_STOP_ALARM"));
IF(MODBUSR(H, 15529, Uint16) = 1, ADDERROR("OVERHEAT_TEMPERATURE_ALARM"));
IF(MODBUSR(H, 15536, Uint16) = 1, ADDERROR("FIRE_ALARM"));
Service Attributes
System Time
var year := MODBUSR(H, 6000, Uint16);
var month := MODBUSR(H, 6001, Uint16);
var day := MODBUSR(H, 6002, Uint16);
var hour := MODBUSR(H, 6003, Uint16);
var minute := MODBUSR(H, 6004, Uint16);
var second := MODBUSR(H, 6005, Uint16);
RETURN(hour + ":" + minute + "  " 
+ day + ". " + month + ". " + year);
Actual season
SWITCH(MODBUSR(H, 1038, uint16), 0, "Summer", 1, "Winter", "Error")
Indoors IAQ level
SWITCH(MODBUSR(A, 1122, Uint16), 0, "Economic", 1, "Good", 2, "Improving", "Error");
Type of fan speed regulation
SWITCH(MODBUSR(H, 1273, Uint16),
 0, "Manual %",
 1, "Manual RPM",
 2, "Constant Pressure", 
 3, "Constant Flow",
 4, "External",
 "Error");
Demand Control
SWITCH(MODBUSR(A, 1003, Uint16), 0, "CO₂", 1, "RH", "Error")
Service Actions
Set Date
Parameters: Year (2020–2999 y), Month (1–12 mo), Day (1–31 da)
MODBUSW(H, 6000, Uint16, y);
MODBUSW(H, 6001, Uint16, mo);
MODBUSW(H, 6002, Uint16, da);
Set Time
Parameters: Hour (0–23 ho), Minute (0–59 mi), Second (0–59 se)
MODBUSW(H, 6003, Uint16, ho);
MODBUSW(H, 6004, Uint16, mi);
MODBUSW(H, 6005, Uint16, se);
Set Fan Speed Regulation Type
Parameters: Regulation_unit
MODBUSW(H, 1273, Uint16, ru);
Clear all alarms
MODBUSW(H, 15002, Uint16, 1);
MODBUSW(H, 15009, Uint16, 1);
MODBUSW(H, 15016, Uint16, 1);
MODBUSW(H, 15023, Uint16, 1);
MODBUSW(H, 15030, Uint16, 1);
MODBUSW(H, 15037, Uint16, 1);
MODBUSW(H, 15058, Uint16, 1);
MODBUSW(H, 15065, Uint16, 1);
MODBUSW(H, 15072, Uint16, 1);
MODBUSW(H, 15079, Uint16, 1);
MODBUSW(H, 15086, Uint16, 1);
MODBUSW(H, 15093, Uint16, 1);
MODBUSW(H, 15100, Uint16, 1);
MODBUSW(H, 15107, Uint16, 1);
MODBUSW(H, 15114, Uint16, 1);
MODBUSW(H, 15121, Uint16, 1);
MODBUSW(H, 15128, Uint16, 1);
MODBUSW(H, 15135, Uint16, 1);
MODBUSW(H, 15142, Uint16, 1);
MODBUSW(H, 15149, Uint16, 1);
MODBUSW(H, 15156, Uint16, 1);
MODBUSW(H, 15163, Uint16, 1);
MODBUSW(H, 15170, Uint16, 1);
MODBUSW(H, 15177, Uint16, 1);
MODBUSW(H, 15184, Uint16, 1);
MODBUSW(H, 15502, Uint16, 1);
MODBUSW(H, 15509, Uint16, 1);
MODBUSW(H, 15510, Uint16, 1);
MODBUSW(H, 15516, Uint16, 1);
MODBUSW(H, 15523, Uint16, 1);
MODBUSW(H, 15530, Uint16, 1);
MODBUSW(H, 15537, Uint16, 1);
MODBUSW(H, 15544, Uint16, 1);
Active User Mode Multi-value Switch

Ventilation operating mode — Auto, Manual, Crowded, Refresh, Fireplace, Away, Holiday, Cooker Hood, Vacuum Cleaner, Pressure Guard

Register: I:1160H:1161 UInt16 multi-value
Values / States: Auto · Manual · Crowded · Refresh · Fireplace · Away · Holiday · Cooker Hood · Vacuum Cleaner · Pressure Guard

Active User Mode

Read switch state
var mod := MODBUSR(A, 1160, uInt16);
if(mod = 12, 9, mod);
Write switch state
MODBUSWNE(H, 1161 ,Uint16, Mu+1)
Service Attributes
Crowded Supply Speed
MODBUSR(A, 1204, Uint16) + " %";
Crowded Extract Speed
MODBUSR(A, 1205, Uint16) + " %";
Refresh Supply Speed
MODBUSR(A, 1206, Uint16) + " %";
Refresh Extract Speed
MODBUSR(A, 1207, Uint16) + " %";
Fireplace Supply Speed
MODBUSR(A, 1208, Uint16) + " %";
Fireplace Extract Speed
MODBUSR(A, 1209, Uint16) + " %";
Away Supply Speed
MODBUSR(A, 1210, Uint16) + " %";
Away Extract Speed
MODBUSR(A, 1211, Uint16) + " %";
Holiday Supply Speed
MODBUSR(A, 1212, Uint16) + " %";
Holiday Extract Speed
MODBUSR(A, 1213, Uint16) + " %";
Cooker Supply Speed
MODBUSR(A, 1215, Uint16) + " %";
Cooker Extract Speed
MODBUSR(A, 1216, Uint16) + " %";
Vacuum Supply Speed
MODBUSR(A, 1217, Uint16) + " %";
Vacuum Extract Speed
MODBUSR(A, 1218, Uint16) + " %";
Supply Active User Mode
MODBUSR(A, 1230, Uint16) + " %";
Extract Active User Mode
MODBUSR(A, 1231, Uint16) + " %";
Manual Supply Speed
MODBUSR(A, 1200, Uint16) + " %";
Manual Extract Speed
MODBUSR(A, 1201, Uint16) + " %";
Auto Supply Speed
MODBUSR(A, 1202, Uint16) + " %";
Auto Extract Speed
MODBUSR(A, 1203, Uint16) + " %";
Low Fan Supply Speed
MODBUSR(A, 1218, Uint16) + " %";
Low Fan Extract Speed
MODBUSR(A, 1219, Uint16) + " %";
ECO Mode Switch

Energy-saving mode — reduces heating by applying a configurable temperature offset

Register: H:2504 Bool
Service Actions
Set temperature offset [°C]

ECO Mode

Read switch state
MODBUSR(H, 2504, Bool)
Write switch state
MODBUSW(H, 2504, Bool, St)
Service Attributes
Heating offset during ECO mode
MODBUSR(H, 2503, Uint16)/10 + " °C";
Service Actions
Set temperature offset [°C]
Parameters: Offset (1–10 off)
MODBUSW(H, 2503, Uint16, off*10);
Extract Fan Speed Analog Input Read-only

Extract air fan speed with RPM monitoring from TACHO sensor

UInt16 numeric
Service Attributes
Extract Fan r/min

Extract Fan Speed

Read input level
MODBUSR(H, 14001, uint16)/100
Service Attributes
Extract Fan r/min
MODBUSR(A, 12401, Uint16) + " rpm";
Fan Speed Multi-value Switch

Manual fan speed level — Off, Low, Normal, High

Register: H:1130 UInt16 multi-value
Values / States: ${level_0Of3} · ${level_1Of3} · Normal · ${level_3Of3}

Fan Speed

Read switch state
MODBUSR(H, 1130, Uint16)-1
Write switch state
MODBUSW(H, 1130, Uint16, Mu+1)
Free Cooling Enable Switch

Night-time free cooling using outdoor air to pre-cool the building

Register: H:4100 Bool

Free Cooling Enable

Read switch state
MODBUSR(H, 4100, Bool)
Write switch state
MODBUSW(H, 4100, Bool, St)
Service Attributes
Free Cooling Active
IF(MODBUSR(A, 4110, Uint16) = 1, "Yes", "No")
Highest CO2 Variable Read-only

Highest CO2 reading across all connected sensors, with individual sensor values

Register: H:1001 UInt16 Unit: ppm numeric
Service Attributes
Sensor 1
Sensor 2
Sensor 3
Sensor 4
Sensor 5

Highest CO2

Read
MODBUSR(H, 1001, Uint16)
Service Attributes
Sensor 1
MODBUSR(A, 12150, Uint16) + " ppm";
Sensor 2
MODBUSR(A, 12151, Uint16) + " ppm";
Sensor 3
MODBUSR(A, 12152, Uint16) + " ppm";
Sensor 4
MODBUSR(A, 12153, Uint16) + " ppm";
Sensor 5
MODBUSR(A, 12154, Uint16) + " ppm";
Highest Humidity Variable Read-only

Highest relative humidity reading across all connected RH sensors

Register: H:1000 UInt16 Unit: % numeric

Highest Humidity

Read
MODBUSR(H, 1000, UInt16)/100
Outdoor Air Temperature Temperature Sensor Read-only
Register: H:12101 Int16 Unit: °C numeric
Service Attributes
Room Air Temperature sensor

Outdoor Air Temperature

Read temperature
MODBUSR(H, 12101, Int16) / 10
Service Attributes
Room Air Temperature sensor
MODBUSR(A, 12103, Uint16)/10 + "°C";
Supply Air Temperature Temperature Sensor Read-only
Register: H:12102 Int16 Unit: °C numeric
Service Attributes
Extract Air Temperature sensor
Frost Protection Temperature Sensor
Overheat Temperature sensor

Supply Air Temperature

Read temperature
MODBUSR(H, 12102, Int16) / 10
Service Attributes
Extract Air Temperature sensor
MODBUSR(A, 12104, Uint16)/10 + "°C";
Frost Protection Temperature Sensor
MODBUSR(A, 12100, Uint16)/10 + "°C";
Overheat Temperature sensor
MODBUSR(A, 12107, Uint16)/10 + "°C";
Supply Fan Speed Analog Input Read-only

Supply air fan speed with RPM monitoring from TACHO sensor

UInt16 numeric
Service Attributes
Supply fan r/min

Supply Fan Speed

Read input level
MODBUSR(H, 14000, Uint16)/100
Service Attributes
Supply fan r/min
MODBUSR(A, 12400, Uint16) + " rpm"
Connection: Modbus RTU • 115200 baud• 8N1 • Slave ID: $[SlaveId]
Possible improvements (11)
  • H:2001 Temperature Setpoint — REG_TC_SP (H:2001, 12.0–30.0°C, /10 conversion) — primary temperature setpoint for supply air temperature control
  • H:2031 Temperature Control Mode — REG_TC_CONTROL_MODE (H:2031); 0=Supply, 1=Room, 2=Extract — selects which temperature sensor drives the control loop
  • H:1162 User Mode Change Request — REG_USERMODE_HMI_CHANGE_REQUEST (H:1162); direct mode switch 0–7 without multi-value switch — alternative to Active User Mode device
  • I:1111/1112 User Mode Remaining Time — 32-bit value (low + high word) showing remaining time for timed user modes (Holiday, Away, Fireplace, Refresh, Crowded)
  • H:2505 ECO Mode Enable — REG_ECO_MODE_ON_OFF (H:2505); separate from ECO offset — template uses H:2504 (offset) as the switch
  • I:2506 ECO Function Active — REG_ECO_FUNCTION_ACTIVE (I:2506); indicates if ECO mode conditions are currently met
  • I:14001/14002 SAF/EAF Fan Speed Output — REG_OUTPUT_SAF (I:14001) and REG_OUTPUT_EAF (I:14002); actual fan speed output 0–100%
  • H:7001 Filter Replacement Period — REG_FILTER_PERIOD (H:7001, 3–15 months) and remaining time (I:7005/7006) — filter maintenance tracking
  • I:12105 Extract Air Temperature — REG_SENSOR_EAT (H:12105, /10 °C); extract air temperature — available as accessory sensor
  • I:12109 Relative Humidity Sensor — REG_SENSOR_RHS (H:12109, 0–100%); relative humidity — accessory sensor, useful alongside Highest Humidity device
  • H:5001–5114 Week Schedule — Complete 7-day, 2-period schedule with temperature offsets and fan levels — complex multi-register configuration

Sources

  • Systemair SAVE Modbus Variable List Rev.36
    2026-03-20
  • Home Assistant Systemair Integration
    github.com 2026-03-20