TapHome
Community Beta HVAC integration

Flexit Nordic S2

Flexit Nordic S2 heat recovery ventilation unit with a rotary heat exchanger in TapHome over BACnet/IP on its Ethernet connection. Ventilation mode, operating state, Home and Away temperature setpoints, supply, extract and exhaust air temperatures, fan speeds, heat recovery efficiency, filter status and fan setpoints per mode.

Packet Parser → UDP26 devicesRevision 1.0 Last updated: November 10, 2026

Submitted by jozef

Flexit Nordic S2

Import into the TapHome appHardware › Packet Parser › Add from template

Download Template
On this page

Network address

TapHome reaches this device at the address entered on import. Give the device a fixed address — an IP reservation in the router, or its mDNS name if it supports one — otherwise the integration stops working when the router changes the address.

Network Preparation

Integration guide

The Flexit Nordic S2 is a heat recovery ventilation unit for homes with a rotary heat exchanger. TapHome communicates with it over BACnet/IP (UDP) on the unit’s Ethernet connection, through the TapHome PacketParser UDP module, which sends BACnet ReadProperty and WriteProperty requests as binary datagrams and parses the binary replies.

The template sets the ventilation mode, shows the operating state, sets the supply air temperature setpoints for the Home and Away modes, reads the supply, extract and exhaust air temperatures, the fan speeds and the heat exchanger, shows the filter status and sets the fan levels for each mode. This is a community template. For Flexit EcoNordic WH4 / W4 units connected over Modbus RTU, see Flexit EcoNordic.

Hardware connection

According to Flexit, units of the Nordic and EcoNordic series are equipped with BACnet IP as standard. No extra module and no activation step is needed: the unit only has to be connected to the local network of the building.

  • Connect an Ethernet network cable on top of the unit to the network of the building (for example the home router or a switch).
  • The installation manual recommends laying a conduit of at least Ø20 mm between the unit and the home’s router for the network cable.
  • Keep signal cables at least 30 cm away from power cables.
  • The TapHome Core and the unit must be in the same local network, and UDP traffic on port 47808 must pass between them.
Flexit Nordic S2 installation manual, planning page: network cable conduit of at least Ø20 mm between the unit and the home's router, conduits for the control panel and accessory cables, power supply requirements.

All electrical connections must be carried out by a qualified electrician, and the unit should be installed with an earth fault breaker. The power plug serves as the service switch and must stay accessible.

Configuration

BACnet settings in Flexit GO

The BACnet settings of the unit are changed in the Flexit GO mobile app. The unit must already be connected to the local network.

  1. Connect the mobile phone or tablet to the same local network as the unit and launch the Flexit GO app.
  2. Connect to the unit as installer, with the installer code 1000.
  3. Go to Other → Installer → BACnet settings.
  4. Check or change the Device ID (default 2), the IP address or DHCP, the subnet mask and the default gateway.
  5. Save the changes. The unit restarts and the new settings take effect.
Flexit GO BACnet instruction, page 8: BACnet IP as standard, default Device ID 2, installer login (1000) and Other > Installer > BACnet settings in Flexit GO, Ethernet cable connected on top of the unit.

Flexit does not state the default IP address or whether DHCP is enabled by default. Give the unit a static IP address in the BACnet settings, or reserve its address in the DHCP server of the router, so that the address does not change after a restart.

ParameterDefault valueDescription
IP address—Static IP address or DHCP reservation of the unit
BACnet Device ID2Identifier of the unit in the BACnet network
UDP port47808Standard BACnet/IP port
Poll interval30 sHow often the template reads the unit

Flexit’s BACnet instruction does not give the port number itself, only a “UDP port” setting; 47808 is the standard BACnet/IP port. The instruction applies to units with application software 2.419 and later.

Alternative: BACnet tool YABE

The same settings can be changed with the BACnet tool YABE in object Infra’NwkPortIP (264:0): Device instance number (property 4832), Device name (4833), Enable (IP) DHCP (4874), IP default gateway (4875), IP subnet mask (4876), IP address (4877), UDP port (4878), Network number (4879) and BACnet MAC address (4883). To save the changes, set property 4894 to 1; the unit restarts.

When writing to the unit with any BACnet tool, Flexit allows only priority 13 for objects that have a priority array. Writing with another priority may set the unit out of control.

Adding the unit in TapHome

Import the template and enter the unit’s IP address and BACnet Device ID; keep the port at 47808.

Device capabilities

The device names in the template are in Slovak and appear in TapHome exactly as written below. Flexit lists the BACnet objects of the unit in a separate document called “BACnet list”; the object numbers below are the ones the template reads and writes.

Ventilation mode and operating state

Ventilation mode (Režim vetrania) selects the operating mode of the unit (multi-state value 42). The template offers seven values:

ValueName in TapHomeMeaning
1StopUnit stopped
2OdchodAway — reduced airflow
3DomovHome — normal operation
4Vysoký výkonHigh — increased airflow
5Odsávač párCooker hood — kitchen extraction
6KrbFireplace — temporary ventilation when the fireplace is lit
7Dočasný vysoký výkonTemporary high — short increase of airflow

Operating state (Prevádzkový stav) is a read-only device that shows the current state of the unit, including transitional states (multi-state value 361).

Comfort button (Komfortné tlačidlo) and Cooker hood (Odsávač pár) are on/off switches for the comfort button and cooker hood functions of the unit.

Temperature control

The template provides two thermostats:

  • Temperature setpoint — Home (Teplotný setpoint — Domov) shows the room temperature and sets the supply air temperature setpoint for the Home mode (analog value 1994).
  • Temperature setpoint — Away (Teplotný setpoint — Odchod) shows the outdoor temperature and sets the supply air temperature setpoint for the Away mode (analog value 1985).

Read-only temperature sensors:

  • Supply air temperature (Teplota prívodu vzduchu) — analog input 4
  • Extract air temperature (Teplota extraktovaného vzduchu), air extracted from the rooms — analog input 59
  • Exhaust air temperature (Teplota výfukového vzduchu) — analog input 11

Fans

  • Supply fan speed (Rýchlosť prívodu vzduchu) — read and write in % (analog output 3)
  • Exhaust fan speed (Rýchlosť odťahu vzduchu) — read and write in % (analog output 4)
  • Supply fan RPM (Otáčky ventilátora prívodu) — measured speed, read-only (analog input 5)
  • Exhaust fan RPM (Otáčky ventilátora odťahu) — measured speed, read-only (analog input 12)

Heat recovery

  • Heat recovery efficiency (Účinnosť rekuperácie tepla) — current efficiency in %, read-only (analog value 2023)
  • Heat exchanger rotor speed (Rýchlosť rotora výmenníka) — read and write in % (analog output 0)

Filter

Filter pollution (Znečistenie filtra) shows whether the filter is clean (Čistý) or polluted (Znečistený) (binary value 522). The device also has:

  • service attribute Filter operating hours (Prevádzkové hodiny filtra) — analog value 285
  • service attribute Filter replacement interval (Interval výmeny filtra) — analog value 286
  • service action Filter timer reset (Vynulovanie časovača filtra) — multi-state value 613

Fan setpoints per mode

Ten writable devices set the fan level in % for each operating mode:

ModeSupply airExhaust air
HighSetpoint prívodu — Vysoký výkon (analog value 1835)Setpoint odťahu — Vysoký výkon (analog value 1840)
HomeSetpoint prívodu — Domov (analog value 1836)Setpoint odťahu — Domov (analog value 1841)
AwaySetpoint prívodu — Odchod (analog value 1837)Setpoint odťahu — Odchod (analog value 1842)
FireplaceSetpoint prívodu — Krb (analog value 1838)Setpoint odťahu — Krb (analog value 1843)
Cooker hoodSetpoint prívodu — Odsávač pár (analog value 1839)Setpoint odťahu — Odsávač pár (analog value 1844)

Further device capabilities

The unit offers more functions that this version of the template does not include:

  • Electric heater (only on the S2 RE variants) — heater state, nominal power and current power consumption.
  • Humidity sensors — extract air humidity and humidity in zones 1 to 3.
  • Temporary fireplace ventilation and rapid ventilation as separate trigger actions with a configurable duration.

Troubleshooting

TapHome reads no values

  1. Check the IP address and the BACnet Device ID in the import parameters of the template. The Device ID must match the value in Flexit GO (Other → Installer → BACnet settings).
  2. Ping the IP address of the unit from the network of the TapHome Core.
  3. Make sure that UDP port 47808 is not blocked between the Core and the unit. BACnet/IP uses UDP, not TCP.
  4. If the IP address of the unit changed after a restart, set a static IP address or a DHCP reservation.
  5. Check that the unit runs application software 2.419 or later, the version Flexit’s BACnet instruction applies to. Units connected to the internet have access to updates through Flexit’s cloud services.

Several Flexit units in one network

The default Device ID is 2 on every unit. With more than one Flexit unit in the network, give each unit a unique Device ID in Flexit GO and enter the matching value in TapHome.

Values react slowly

The template polls the unit every 30 seconds, so a change made on the unit or in Flexit GO appears in TapHome with a delay of up to 30 seconds. The interval can be shortened, but should not go below 10 seconds so that the unit is not flooded with requests.

Available devices 26

These devices appear in TapHome after import.

Flexit Nordic S2 Module
Custom Variables
bvMode (numeric)
bvOpMode (numeric)
bvComfort (numeric)
bvCooker (numeric)
bvSetHome (numeric)
bvSetAway (numeric)
bvSupplyTemp (numeric)
bvOutsideTemp (numeric)
bvExtractTemp (numeric)
bvRoomTemp (numeric)
bvExhaustTemp (numeric)
bvFanSupply (numeric)
bvFanExhaust (numeric)
bvTachoSupply (numeric)
bvTachoExhaust (numeric)
bvHxEff (numeric)
bvHxSpeed (numeric)
bvFilterDirty (numeric)
bvFilterTime (numeric)
bvFilterInterval (numeric)
bvFireRemain (numeric)
bvRapidRemain (numeric)
bvFsp1 (numeric)
bvFsp2 (numeric)
bvFsp3 (numeric)
bvFsp4 (numeric)
bvFsp5 (numeric)
bvFsp6 (numeric)
bvFsp7 (numeric)
bvFsp8 (numeric)
bvFsp9 (numeric)
bvFsp10 (numeric)

Flexit Nordic S2

Read (module)
SENDDATA(BYTECOLLECTION("810A001101040204010C04C0002A1955"));
SENDDATA(BYTECOLLECTION("810A001101040204020C04C001691955"));
SENDDATA(BYTECOLLECTION("810A001101040204030C014000321955"));
SENDDATA(BYTECOLLECTION("810A001101040204040C014001921955"));
SENDDATA(BYTECOLLECTION("810A001101040204050C008007CA1955"));
SENDDATA(BYTECOLLECTION("810A001101040204060C008007C11955"));
SENDDATA(BYTECOLLECTION("810A001101040204070C000000011955"));
SENDDATA(BYTECOLLECTION("810A001101040204080C000000041955"));
SENDDATA(BYTECOLLECTION("810A001101040204090C000000591955"));
SENDDATA(BYTECOLLECTION("810A00110104020404B0C000000011955"));
SENDDATA(BYTECOLLECTION("810A001101040204040C00000000B1955"));
SENDDATA(BYTECOLLECTION("810A001101040204040C004000031955"));
SENDDATA(BYTECOLLECTION("810A001101040204040C004000041955"));
SENDDATA(BYTECOLLECTION("810A001101040204040C000000051955"));
SENDDATA(BYTECOLLECTION("810A001101040204040C00000000C1955"));
SENDDATA(BYTECOLLECTION("810A001101040204040C008007E71955"));
SENDDATA(BYTECOLLECTION("810A001101040204040C004000001955"));
SENDDATA(BYTECOLLECTION("810A001101040204040C0140020A1955"));
SENDDATA(BYTECOLLECTION("810A001101040204040C0080011D1955"));
SENDDATA(BYTECOLLECTION("810A001101040204040C0080011E1955"));
SENDDATA(BYTECOLLECTION("810A001101040204040C008007F61955"));
SENDDATA(BYTECOLLECTION("810A001101040204040C008007EF1955"));
SENDDATA(BYTECOLLECTION("810A001101040204040C0080072B1955"));
SENDDATA(BYTECOLLECTION("810A001101040204040C0080072C1955"));
SENDDATA(BYTECOLLECTION("810A001101040204040C0080072D1955"));
SENDDATA(BYTECOLLECTION("810A001101040204040C0080072E1955"));
SENDDATA(BYTECOLLECTION("810A001101040204040C0080072F1955"));
SENDDATA(BYTECOLLECTION("810A001101040204040C008007301955"));
SENDDATA(BYTECOLLECTION("810A001101040204040C008007311955"));
SENDDATA(BYTECOLLECTION("810A001101040204040C008007321955"));
SENDDATA(BYTECOLLECTION("810A001101040204040C008007331955"));
SENDDATA(BYTECOLLECTION("810A001101040204040C008007341955"));
Listener
VAR invokeId := GETBYTE(RECEIVEDBYTES, 7);
VAR apduType := GETBYTE(RECEIVEDBYTES, 6);
IF (apduType != 48)
    RETURN(0);
END
VAR valByte := GETBYTE(RECEIVEDBYTES, 18);
IF (invokeId = 1)
    bvMode := valByte;
END
IF (invokeId = 2)
    bvOpMode := valByte;
END
IF (invokeId = 3)
    bvComfort := valByte;
END
IF (invokeId = 4)
    bvCooker := valByte;
END
IF (invokeId = 7)
    bvOutsideTemp := GETBYTE(RECEIVEDBYTES, 19) * 256 + GETBYTE(RECEIVEDBYTES, 20);
END
IF (invokeId = 8)
    bvSupplyTemp := GETBYTE(RECEIVEDBYTES, 19) * 256 + GETBYTE(RECEIVEDBYTES, 20);
END
IF (invokeId = 9)
    bvExtractTemp := GETBYTE(RECEIVEDBYTES, 19) * 256 + GETBYTE(RECEIVEDBYTES, 20);
END
IF (invokeId = 11)
    bvRoomTemp := GETBYTE(RECEIVEDBYTES, 19) * 256 + GETBYTE(RECEIVEDBYTES, 20);
END
IF (invokeId = 12)
    bvExhaustTemp := GETBYTE(RECEIVEDBYTES, 19) * 256 + GETBYTE(RECEIVEDBYTES, 20);
END
IF (invokeId = 13)
    bvFanSupply := valByte;
END
IF (invokeId = 14)
    bvFanExhaust := valByte;
END
IF (invokeId = 15)
    bvTachoSupply := GETBYTE(RECEIVEDBYTES, 19) * 256 + GETBYTE(RECEIVEDBYTES, 20);
END
IF (invokeId = 16)
    bvTachoExhaust := GETBYTE(RECEIVEDBYTES, 19) * 256 + GETBYTE(RECEIVEDBYTES, 20);
END
IF (invokeId = 17)
    bvHxEff := valByte;
END
IF (invokeId = 18)
    bvHxSpeed := valByte;
END
IF (invokeId = 19)
    bvFilterDirty := valByte;
END
IF (invokeId = 20)
    bvFilterTime := GETBYTE(RECEIVEDBYTES, 19) * 256 + GETBYTE(RECEIVEDBYTES, 20);
END
IF (invokeId = 21)
    bvFilterInterval := GETBYTE(RECEIVEDBYTES, 19) * 256 + GETBYTE(RECEIVEDBYTES, 20);
END
IF (invokeId = 22)
    bvFireRemain := valByte;
END
IF (invokeId = 23)
    bvRapidRemain := valByte;
END
IF (invokeId = 24)
    bvFsp1 := valByte;
END
IF (invokeId = 25)
    bvFsp2 := valByte;
END
IF (invokeId = 26)
    bvFsp3 := valByte;
END
IF (invokeId = 27)
    bvFsp4 := valByte;
END
IF (invokeId = 28)
    bvFsp5 := valByte;
END
IF (invokeId = 29)
    bvFsp6 := valByte;
END
IF (invokeId = 30)
    bvFsp7 := valByte;
END
IF (invokeId = 31)
    bvFsp8 := valByte;
END
IF (invokeId = 32)
    bvFsp9 := valByte;
END
IF (invokeId = 33)
    bvFsp10 := valByte;
END
IF (invokeId = 5)
    bvSetHome := valByte;
END
IF (invokeId = 6)
    bvSetAway := valByte;
END
Režim vetrania Multi-value Switch
Values / States: Stop · Odchod · Domov · Vysoký výkon · Odsávač pár · Krb · Dočasný vysoký výkon

Režim vetrania

Write switch state
SENDDATA(BYTECOLLECTION("810A001601040204010F0C04C0002A195530211355214D554D553F"));
Listener
Mu := bvMode;
Prevádzkový stav Multi-value Switch
Values / States: Stop · Odchod · Domov · Vysoký výkon · Odsávač pár · Krb · Dočasný vysoký výkon

Prevádzkový stav

Listener
Mu := bvOpMode;
Komfortné tlačidlo Switch
Values / States: ON · OFF

Komfortné tlačidlo

Write switch state
SENDDATA(BYTECOLLECTION("810A001201040204030F0C014000321955301101113F"));
Listener
St := bvComfort;
Odsávač pár Switch
Values / States: ON · OFF

Odsávač pár

Write switch state
SENDDATA(BYTECOLLECTION("810A001201040204040F0C014001921955301101St3F"));
Listener
St := bvCooker;
Teplotný setpoint — Domov Thermostat

Teplotný setpoint — Domov

Read temperature
RETURN(bvRoomTemp);
Read desired temperature
RETURN(bvSetHome);
Write desired temperature
SENDDATA(BYTECOLLECTION("810A001601040204050F0C008007CA195530441144000000003F"));
Teplotný setpoint — Odchod Thermostat

Teplotný setpoint — Odchod

Read temperature
RETURN(bvOutsideTemp);
Read desired temperature
RETURN(bvSetAway);
Write desired temperature
SENDDATA(BYTECOLLECTION("810A001601040204060F0C008007C1195530441144000000003F"));
Teplota prívodu vzduchu Temperature Sensor

Teplota prívodu vzduchu

Read temperature
RETURN(bvSupplyTemp);
Teplota extraktovaného vzduchu Temperature Sensor

Teplota extraktovaného vzduchu

Read temperature
RETURN(bvExtractTemp);
Teplota výfukového vzduchu Temperature Sensor

Teplota výfukového vzduchu

Read temperature
RETURN(bvExhaustTemp);
Rýchlosť prívodu vzduchu Variable

Rýchlosť prívodu vzduchu

Write
SENDDATA(BYTECOLLECTION("810A001601040204130F0C004000031955304411440000000003F"));
Listener
Va := bvFanSupply;
Rýchlosť odťahu vzduchu Variable

Rýchlosť odťahu vzduchu

Write
SENDDATA(BYTECOLLECTION("810A001601040204140F0C004000041955304411440000000003F"));
Listener
Va := bvFanExhaust;
Otáčky ventilátora prívodu Variable

Otáčky ventilátora prívodu

Listener
Va := bvTachoSupply;
Otáčky ventilátora odťahu Variable

Otáčky ventilátora odťahu

Listener
Va := bvTachoExhaust;
Účinnosť rekuperácie tepla Variable

Účinnosť rekuperácie tepla

Listener
Va := bvHxEff;
Rýchlosť rotora výmenníka Variable

Rýchlosť rotora výmenníka

Write
SENDDATA(BYTECOLLECTION("810A001601040204120F0C004000001955304411440000000003F"));
Listener
Va := bvHxSpeed;
Znečistenie filtra Reed Contact
Service Attributes
Prevádzkové hodiny filtra
Interval výmeny filtra
Service Actions
Vynulovanie časovača filtra

Znečistenie filtra

Listener
Rc := bvFilterDirty;
Service Attributes
Prevádzkové hodiny filtra
TOSTRING(bvFilterTime) + " h"
Interval výmeny filtra
TOSTRING(bvFilterInterval) + " h"
Service Actions
Vynulovanie časovača filtra
SENDDATA(BYTECOLLECTION("810A001201040204110F0C04C002651955302111013F"));
Setpoint prívodu — Vysoký výkon Variable

Setpoint prívodu — Vysoký výkon

Write
SENDDATA(BYTECOLLECTION("810A001601040204180F0C0080072B1955304411440000000003F"));
Listener
Va := bvFsp1;
Setpoint prívodu — Domov Variable

Setpoint prívodu — Domov

Write
SENDDATA(BYTECOLLECTION("810A001601040204190F0C0080072C1955304411440000000003F"));
Listener
Va := bvFsp2;
Setpoint prívodu — Odchod Variable

Setpoint prívodu — Odchod

Write
SENDDATA(BYTECOLLECTION("810A00160104020420F0C0080072D1955304411440000000003F"));
Listener
Va := bvFsp3;
Setpoint prívodu — Krb Variable

Setpoint prívodu — Krb

Write
SENDDATA(BYTECOLLECTION("810A001601040204210F0C0080072E1955304411440000000003F"));
Listener
Va := bvFsp4;
Setpoint prívodu — Odsávač pár Variable

Setpoint prívodu — Odsávač pár

Write
SENDDATA(BYTECOLLECTION("810A001601040204280F0C0080072F1955304411440000000003F"));
Listener
Va := bvFsp5;
Setpoint odťahu — Vysoký výkon Variable

Setpoint odťahu — Vysoký výkon

Write
SENDDATA(BYTECOLLECTION("810A001601040204290F0C008007301955304411440000000003F"));
Listener
Va := bvFsp6;
Setpoint odťahu — Domov Variable

Setpoint odťahu — Domov

Write
SENDDATA(BYTECOLLECTION("810A00160104020430F0C008007311955304411440000000003F"));
Listener
Va := bvFsp7;
Setpoint odťahu — Odchod Variable

Setpoint odťahu — Odchod

Write
SENDDATA(BYTECOLLECTION("810A001601040204310F0C008007321955304411440000000003F"));
Listener
Va := bvFsp8;
Setpoint odťahu — Krb Variable

Setpoint odťahu — Krb

Write
SENDDATA(BYTECOLLECTION("810A001601040204320F0C008007331955304411440000000003F"));
Listener
Va := bvFsp9;
Setpoint odťahu — Odsávač pár Variable

Setpoint odťahu — Odsávač pár

Write
SENDDATA(BYTECOLLECTION("810A001601040204330F0C008007341955304411440000000003F"));
Listener
Va := bvFsp10;
Connection: Packet Parser → UDP

Import parameters

Enter these values when you import the XML.

Asked in the appDefault
IP address192.168.1.10
BACnet Device ID2
Port47808

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.

Template · TapHome portal Flexit Nordic S2 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. Packet Parser → UDP View in TapHome portal