
The NIBE SMO S40 is a wall-mounted control module for NIBE air/water heat pump systems (F2040, F2120, F2030, F2300, HBS 05, AMS 10). It features a touchscreen display, WiFi and Ethernet connectivity, and a built-in Modbus TCP server. TapHome connects directly over the local network — no additional gateway is required.
The template provides 26 devices covering temperature monitoring (outdoor, room, supply, return, hot water), heating system control (heating curve, offset curve, degree minutes), hot water demand selection, operating mode and priority monitoring, flow monitoring, load monitor current sensors, pump status, and alarm management.
Hardware connection
The SMO S40 has an RJ45 Ethernet port (XF8) on the display unit (AA4) and built-in WiFi (2.4 GHz). Connect it to the same local network as TapHome Core using either a standard Ethernet cable or WiFi.
- Protocol: Modbus TCP
- Port: 502
- Default Slave ID: 1
- Network: Ethernet (XF8) or WiFi (2.4 GHz, 802.11)
The RS-485 terminal block X9 (pins 4=A, 5=B, 6=GND) is used exclusively for communication between the SMO S40 and connected NIBE heat pumps. Do not use X9 for TapHome — use the Ethernet port (XF8) or WiFi for Modbus TCP.
Component layout

Key connectors relevant for TapHome integration:
| Connector | Location | Function |
|---|---|---|
| XF8 | Display unit (AA4) | Ethernet — Modbus TCP communication with TapHome |
| X9:4–6 | Joint card (AA100) | RS-485 bus to connected heat pumps (A, B, GND) — not for TapHome |
| X10 | Joint card (AA100) | Sensor inputs (BT1, BT50, BT6, BT7, BT25, BT71, AUX) |
| X11 | Joint card (AA100) | Common GND for all sensor inputs |
| X14 | Joint card (AA100) | Load monitor current sensors (BE1, BE2, BE3) |
Sensor wiring


All temperature sensors connect to terminal block X10 with common GND on X11. Use min 0.5 mm² cable up to 50 m (EKKX, LiYY or equivalent). Do not route sensor and communication cables alongside power cables.
| Pin (X10) | Sensor | Register | Description |
|---|---|---|---|
| 1 | BT1 | A:1 | Outdoor temperature — place in shade on north/north-west wall |
| 2 | BT50 | A:26 | Room temperature — activate in menu 1.3, place 1.5 m above floor |
| 3 | BT6 | A:9 | Hot water charging — placed in submerged tube on water heater |
| 4 | BT7 | A:8 | Hot water top — at top of tank |
| 5 | BT25 | A:39 | External supply line temperature |
| 6 | BT71 | A:88 | External return line temperature |
Load monitor current sensors (BE1–BE3) are connected to terminal block X14 with GND on X13. Each sensor is a CT clamp installed on an incoming phase conductor.
Configuration
Enabling Modbus communication
Modbus TCP is activated through the installer menu. The following steps are required:
- Connect to network — plug in an Ethernet cable to XF8, or configure WiFi in menu 5.2.1
- Configure TCP/IP settings — in menu 5.2, select Automatic (DHCP) or Manual (static IP, netmask, gateway, DNS)
- Enable Modbus TCP/IP — navigate to menu 7.5.9 and set Modbus TCP/IP to On
- Verify network status — check menu 3.1.13 (“Connections”) for the assigned IP address
Software version 2.2.1 or later is required for Modbus TCP support. The available registers depend on the installed and activated accessories.
When importing the template in TapHome, provide:
- IP Address — the SMO S40’s IP on the local network
- Slave ID — Modbus slave address (default: 1)
Assign a static IP address or create a DHCP reservation for the SMO S40 in the router settings. The unit does not support mDNS, so a changing IP address will break the connection.
The SMO S40 can export its register list to a USB drive. Insert a USB memory stick and go to menu 7.5.9 → “Export most used registers” or “Export all registers” (CSV format). This is useful for verifying which registers are available on the specific installation.
Device capabilities
The template exposes 26 devices organised into six functional groups: temperature monitoring, heating system control, hot water management, system status, flow and pump monitoring, and electrical monitoring.
Temperature monitoring
Six temperature sensors provide a complete thermal picture of the heating system:
- Outdoor Temperature (BT1) — outdoor air temperature from the BT1 sensor (register A:1, Int16, factor 10). Place the sensor in shade on a north or north-west facing wall.
- Room Temperature (BT50) — room air temperature (register A:26, Int16, factor 10). Must be activated in menu 1.3. Place 1.5 m above floor on a free inner wall.
- External Supply Line Temperature (BT25) — supply line temperature after the heat pump (register A:39, Int16, factor 10). Tells the heat pump when to start producing heating or cooling.
- Return Temperature (BT71) — return line temperature (register A:88, Int16, factor 10). Used to verify the climate system is correctly adjusted.
- Hot Water Top Temperature (BT7) — temperature at the top of the hot water tank (register A:8, Int16, factor 10). Indicates available hot water temperature.
- Hot Water Charging Temperature (BT6) — charging sensor temperature in the submerged tube (register A:9, Int16, factor 10). Controls hot water production start/stop.
Two calculated temperatures are also available:
- Calculated Supply Temperature — the target supply line temperature calculated by the controller (register A:1017, Int16, factor 10).
- Calculated Supply Temperature (Cooling) — target supply temperature for cooling mode (register A:1567, Int16, factor 10). Only relevant when cooling is active.
Heating system control
The template provides direct control over the heating curve parameters:
- Heating Curve — read/write coefficient that determines the relationship between outdoor temperature and supply temperature (register H:26, Int16). A higher value produces a steeper curve and higher supply temperatures at low outdoor temperatures.
- Offset Curve — read/write parallel offset for the heating curve (register H:30, Int16). A positive offset shifts the supply temperature up, resulting in warmer rooms.
- Degree Minutes — read/write heating demand indicator (register H:18, Int16, factor 10). Negative values indicate heat demand; the compressor starts at a configurable threshold (default -60 DM). Range: -3000 to 100.
- Degree Minutes (Cooling) — read/write cooling demand indicator (register H:20, Int16). Positive values indicate cooling demand.
- Supply Temperature Min — lower limit for supply line temperature (register H:34, Int16, factor 10). Read-only.
- Supply Temperature Max — upper limit for supply line temperature (register H:38, Int16, factor 10). Read-only. Protects underfloor heating from overheating.
Hot water management
- Hot Water Demand — read/write multi-value selector for hot water demand level (register H:56, Int16). Values: 0 = Small, 1 = Medium, 2 = Large, 3 = Smart control. Small/Medium/Large control hot water temperature setpoints; Smart control uses an adaptive algorithm.
System status and control
- Operating Mode — read-only indicator of the current operating mode (register H:237, Int16). Values: 0 = Auto, 1 = Manual, 2 = Add. heat only. Auto mode uses outdoor temperature and degree minutes to control heating, cooling, and hot water automatically.
- Operating Prioritisation — read-only indicator of the current system priority (register A:1028, Int16). Values: 10 = Off, 20 = Hot Water, 30 = Heat, 40 = Pool, 60 = Cooling.
- Alarm Number — read-only active alarm code (register A:1975, UInt16). A value of 0 means no alarm. Alarm codes are device-specific — refer to the NIBE installer manual for code definitions.
- Reset Alarm — read/write switch to acknowledge and clear the active alarm (register H:22, Bool). The value resets automatically after writing. Always investigate the alarm cause before resetting.
Pump status
- External Heating Pump (GP10) — read-only on/off status of the external heating medium circulation pump (register A:1066, Bool). GP10 is connected to terminal X5:2.
- Charge Pump Speed (GP12) — read-only charge pump speed for heat pump EB100 (register A:1636, Int16). GP12 is the circulation pump between the SMO S40 and the connected air/water heat pump.
Flow monitoring
- Flow Sensor (BF1) — read-only heating medium flow rate from flow sensor BF1 (register A:40, Int16, factor 10, l/m). Optional sensor useful for monitoring heating system performance and COP estimation.
Electrical monitoring (load monitor)
Three current sensors monitor the incoming phase conductors:
- Current Phase 1 (BE1) — phase 1 current from CT sensor BE1 (register A:50, UInt32, factor 10).
- Current Phase 2 (BE2) — phase 2 current from CT sensor BE2 (register A:48, UInt32, factor 10).
- Current Phase 3 (BE3) — phase 3 current from CT sensor BE3 (register A:46, UInt32, factor 10).
The load monitor prevents the property’s main fuse from tripping by reducing additional heat steps when current consumption is high. Configure the fuse size in menu 7.1.9.
Run time statistics
- Total Run Time Additional Heat — cumulative operating hours of the electric additional heater (register A:1025, Int32, factor 10). Useful for monitoring additional heat usage and energy efficiency.
Additional capabilities
The SMO S40 exposes over 1400 registers in total. Beyond the 26 devices in the template, the unit also provides compressor status and run time (EB100), compressor start count, current status bitmask (heating/hot water/cooling flags), energy flow measurements (hot water, heating, pool — both compressor-only and compressor + additional heat), pulse energy meter readings (BE6/BE7), degree minutes thresholds for compressor and additional heat start, alarm action configuration, and holiday function control. These can be added to the TapHome template in a future update.
Troubleshooting
No Modbus communication
- Verify the Ethernet cable is connected to the XF8 port on the display unit (not the X9 RS-485 terminal block)
- Check menu 7.5.9 — Modbus TCP/IP must be set to On
- Verify the IP address in menu 3.1.13 (“Connections”)
- Ensure TapHome Core and the SMO S40 are on the same network/subnet
- Confirm no firewall is blocking port 502
- Check that firmware version is 2.2.1 or later
IP address changes after reboot
The SMO S40 does not support mDNS. If using DHCP, the IP address may change after a power cycle or lease renewal. Create a DHCP reservation in the router or configure a static IP in menu 5.2.
Missing sensor readings
Not all sensors are installed by default. BT50 (room sensor) must be activated in menu 1.3 after physical installation. BT6, BT7, BT25, and BT71 require the corresponding sensor to be connected to terminal block X10. If a sensor is not installed, the register will return a default or error value.
Register addressing note
The TapHome template uses NIBE’s native register numbering. Community libraries (e.g., the nibe Python library) use a +1 offset for input registers — for example, BT1 is register 1 in TapHome but register 30002 in the library. This is a known NIBE convention difference, not an error.
