TapHome
Community Beta HVAC integration

LinkedGo ST802-B Fan Coil Thermostat (Powered by Shelly)

LinkedGo ST802-B is a Wi-Fi wall thermostat for fan coils and floor heating, powered by Shelly. TapHome uses its local HTTP API to read room temperature and humidity and to set target temperature, fan speed, working mode, on/off, anti-freeze and target humidity. Community template, beta.

LinkedGoPacket Parser → HTTP6 devicesRevision 1.0 Last updated: November 10, 2026

Submitted by Libor Kratochvíl

LinkedGo ST802-B Fan Coil Thermostat (Powered by Shelly)

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 LinkedGo ST802-B is a flush-mounted wall thermostat for fan coil units and floor heating, “Powered by Shelly”. It switches the fan coil’s three fan speeds, the fan coil valve and the floor heating valve itself, and has a built-in room temperature and humidity sensor. TapHome talks to it over the local Shelly RPC API (HTTP on port 80, Wi-Fi) — no cloud connection is needed.

The template reads the room temperature and humidity and sets the target temperature, fan speed, working mode, on/off, anti-freeze and target humidity. This is a community template by Libor Kratochvíl.

Hardware connection

The thermostat is mounted in a 60 mm flush wall box, indoors only (IP20). It is powered from 230 V AC mains; the Shelly knowledge base lists an input range of 90–240 V AC, 50/60 Hz. Maximum load is 1 A inductive or 2 A resistive. Installation and every change of the wiring belong to a qualified electrician, with the terminals disconnected from the mains.

Terminals

TerminalFunction
N, Lpower supply, neutral and live
H, M, Lofan high, medium and low speed — 230 V output, 1 A each
NO, NCfan coil valve — relay with normally open and normally closed contact, 230 V
FLfloor heating valve — 230 V output
C1, C2dry contact (digital output) to switch a heat pump or gas boiler on and off
0-10V, GNDanalog output for the speed of a DC fan motor, and common
A1/B1, A2/B2RS485 — not used by this template
ST802-B terminal layout: N, L, H, M, Lo, NO, NC, FL mains terminals with fan and valve connections, plus low-voltage terminals A1/B1, A2/B2, C1/C2, GND, 0-10V.

Wiring per thermostat function (parameter H02)

How the fan and valves are wired depends on the system type, which is set on the thermostat by the installer parameter H02. The LinkedGo technical instruction shows one diagram per H02 value:

H02SystemModes offered
02-pipe AC fan coil — fan on H/M/Lo, fan coil valve on NO/NCcooling, heating, dry, ventilation
1DC fan coil — fan speed from the 0-10V output, fan coil valve on NO/NCcooling, heating, dry, ventilation
2floor heating only — floor heating valve on FLfloor heating
3AC fan coil cooling + floor heatingfan coil cooling, floor heating
4AC fan coil cooling and heating + floor heatingcooling, heating, floor heating, dry, ventilation
6DC fan coil cooling + floor heatingfan coil cooling, floor heating, dry, ventilation
7DC fan coil cooling and heating + floor heatingcooling, heating, floor heating, dry, ventilation
174-pipe AC fan coil — cooling valve on NO/NC, heating valve on FLcooling, heating, dry, ventilation
LinkedGo ST802 electrical diagrams for H02 settings 0, 1, 2, 3/4, 6/7 and 17 (fan coil and floor heating valve wiring) and RS485 network, with the H02 function table.

Configuration

Connecting the thermostat to Wi-Fi

The thermostat is added to the network with the free Shelly Smart Control app (App Store, Google Play or AppGallery; a free Shelly account is required). Use a 2.4 GHz Wi-Fi network and turn Bluetooth on in the phone before you start.

  1. Open the Shelly Smart Control app and tap + in the bottom right corner.
  2. Select Add via Bluetooth and tap Next; a list of supported devices appears.
  3. Select the thermostat and tap Next.
  4. Enter the Wi-Fi name and password and tap Add device. Adding can take a few minutes; a success message appears at the end.
  5. Give the device a name and picture, pick a room and tap Save.

If the app does not find the thermostat, hold the ON/OFF button on the thermostat for 10 seconds and scan again. Once the thermostat is connected, the Wi-Fi signal icon appears on its display.

Fixed IP address

TapHome reaches the thermostat by its IP address. Give it a fixed address — the simplest way is a DHCP reservation for the thermostat’s MAC address in the router — so the address does not change after a router or thermostat restart. You need this address when importing the template.

Password protection off

Leave password protection of the thermostat turned off in the Shelly app. TapHome does not support the HTTP Digest authentication of Shelly Gen2+ devices; with a password set, the thermostat answers HTTP 401 and every TapHome device shows the error “Thermostat asks for a password (HTTP 401)”.

To check it, open http://<thermostat IP>/rpc/Shelly.GetDeviceInfo in a browser on the same network. If it returns JSON without asking for a login, TapHome can read the thermostat.

Temperature unit in °C

Keep the thermostat’s temperature unit set to degrees Celsius. TapHome reads all temperatures as °C; when the thermostat is set to Fahrenheit, the module shows the warning “Thermostat uses degrees Fahrenheit”. The current setting is visible at http://<thermostat IP>/rpc/Service.GetConfig?id=0 ("temp_unit": "C").

Installer parameters on the thermostat

Set the installer parameters on the thermostat’s keypad before connecting it to TapHome, because they decide which modes and set points the thermostat accepts:

  • H02 — system type and the working modes the thermostat offers (table above).
  • H05 — 0 heating and cooling, 1 cooling only, 2 heating only.
  • H23 / H24 — minimum and maximum set point (default 5 °C and 35 °C).
  • A05 / A06 — antifreeze protection on/off and its room temperature point (0–21 °C, default 5 °C).

To enter the installer parameters, hold the Mode button for 5 seconds; the display shows the parameter groups (H, P, F …). Select the group and parameter with the up and down buttons, change the value and save it. The full parameter list is in the LinkedGo technical instruction.

Adding the thermostat in TapHome

In TapHome, add the module from this template under a Packet Parser interface and enter the thermostat’s IP address.

Device capabilities

DeviceWhat it does
Thermostatroom temperature, target temperature (5–35 °C, step 0.5 °C) and room humidity
Fan speedAuto, Low, Medium, High
Working modeCool, Heat, Dry, Ventilation, Floor heating
Thermostat on/offswitches the thermostat’s control function on or off
Anti-freezefrost protection on or off
Target humidityhumidity set point for the Dry mode (40–75 %)

Which working modes the thermostat accepts depends on H02. A unit configured for a 2-pipe AC fan coil (H02 = 0) offers Cool, Dry, Heat and Ventilation. If you pick a mode the thermostat does not offer (for example Floor heating without a floor heating valve), the thermostat refuses it and TapHome shows the mode that stays active. A mode the template does not know is shown as an error on the Working mode device.

Module information and service actions

The module shows the Wi-Fi network, IP address, signal strength, MAC address, the service state, the thermostat mode (cool, heat or auto), the temperature unit and the temperature and humidity calibration offsets. It warns when a firmware update is available, when a restart is required, when the thermostat reports a service error and when it is set to degrees Fahrenheit. Service actions: firmware update and reboot.

Which relay output is switched at the moment (fan speed, fan coil valve, floor heating valve) is not available in the Shelly API, so TapHome cannot show it.

Behaviour worth knowing

  • After a TapHome Core restart every device reads its value from the thermostat, so a change made on the thermostat’s keypad while Core was off is kept, never overwritten.
  • A value outside the thermostat’s range (for example target humidity 80 %, or a set point outside H23–H24) is refused by the thermostat; TapHome then shows the value that stays set.
  • Values are polled every 5–15 seconds; a change on the keypad appears in TapHome within that time.

Troubleshooting

All devices show “HTTP 401”

Password protection is turned on in the thermostat. Turn it off in the Shelly app, then check http://<thermostat IP>/rpc/Shelly.GetDeviceInfo in a browser — it must answer without a login prompt.

Devices show “Thermostat answered HTTP …” or no values

  1. Check that the thermostat shows the Wi-Fi icon and that its IP address has not changed (fixed address or DHCP reservation).
  2. Open http://<thermostat IP>/rpc/Shelly.GetDeviceInfo from a device in the same network as TapHome Core — if it returns JSON, the thermostat is reachable.
  3. Make sure TapHome Core and the thermostat are in the same network or that routing between them is allowed.

Temperatures look wrong

  • Check the temperature unit — the module warns when the thermostat is set to Fahrenheit.
  • Check the temperature and humidity calibration offsets shown on the module.

Working mode or fan speed shows an error

The thermostat reported a value the template does not know. The Shelly API lists the fan speeds auto, low, medium and high; the LinkedGo technical instruction lists five speeds for a DC fan coil. Check the H02 setting and the value on the thermostat’s display.

Display shows E03

E03 is the LinkedGo alarm code for a room sensor failure. Errors that the thermostat reports through the Shelly API appear on the module as the warning “Thermostat reports: …”.

Available devices 6

These devices appear in TapHome after import.

LinkedGo ST802-B Module
Service Attributes
Wi-Fi
${ipAddress}
${xml_signal_strength} [dB]
MAC
Service state
Thermostat mode
Temperature unit
Temperature offset
Humidity offset [%]
Service Actions
${xml_update_fw}
Reboot
Custom Variables
SysStatus (string)
WiFiStatus (string)
ServiceConfig (string)
ServiceStatus (string)

LinkedGo ST802-B

Read (module)
VAR r := SENDHTTPREQUEST("/rpc/Sys.GetStatus");
IF r.IsSuccess
    SysStatus := r.Content;
ELSE
    IF r.StatusCode = 401
        ADDERROR(401, "Thermostat asks for a password (HTTP 401). Turn off password protection in the Shelly app, TapHome does not support HTTP Digest.");
    ELSE
        ADDERROR(1, "Thermostat answered HTTP " + TOSTRING(r.StatusCode));
    END
    RETURN(0);
END
r := SENDHTTPREQUEST("/rpc/WiFi.GetStatus");
IF r.IsSuccess
    WiFiStatus := r.Content;
END
r := SENDHTTPREQUEST("/rpc/Service.GetConfig?id=0");
IF r.IsSuccess
    ServiceConfig := r.Content;
END
r := SENDHTTPREQUEST("/rpc/Service.GetStatus?id=0");
IF r.IsSuccess
    ServiceStatus := r.Content;
END
IF PARSEJSON(ServiceConfig, "$.temp_unit", true) = "F"
    ADDWARNING(4, "Thermostat uses degrees Fahrenheit. Set the temperature unit to Celsius in the Shelly app, TapHome reads the values as degrees Celsius.");
END
VAR errors := PARSEJSON(ServiceStatus, "$.errors", true);
IF ! ISNULL(errors)
    ADDWARNING(5, "Thermostat reports: " + TOSTRING(errors));
END
IF ! ISNULL(PARSEJSON(SysStatus, "available_updates.stable", true))
    ADDWARNING(2, "New firmware update is available");
END
IF PARSEJSON(SysStatus, "restart_required", true)
    ADDWARNING(3, "Restart required");
END
Service Attributes
Wi-Fi
PARSEJSON(WiFiStatus, "ssid", true)
${ipAddress}
PARSEJSON(WiFiStatus, "sta_ip", true)
${xml_signal_strength} [dB]
PARSEJSON(WiFiStatus, "rssi", true)
MAC
PARSEJSON(SysStatus, "mac", true)
Service state
PARSEJSON(ServiceStatus, "state", true)
Thermostat mode
PARSEJSON(ServiceConfig, "thermostat_mode", true)
Temperature unit
PARSEJSON(ServiceConfig, "temp_unit", true)
Temperature offset
PARSEJSON(ServiceConfig, "temp_offset", true)
Humidity offset [%]
PARSEJSON(ServiceConfig, "humidity_offset", true)
Service Actions
${xml_update_fw}
VAR r := SENDHTTPREQUEST("/rpc/Shelly.Update?stage=\"stable\"");
IF r.IsSuccess
    RETURN("OK");
ELSE
    RETURN("Error " + TOSTRING(r.StatusCode));
END
Reboot
VAR r := SENDHTTPREQUEST("/rpc/Shelly.Reboot");
IF r.IsSuccess
    RETURN("OK");
ELSE
    RETURN("Error " + TOSTRING(r.StatusCode));
END
Thermostat Thermostat

Thermostat

Read temperature
VAR r := SENDHTTPREQUEST("/rpc/Number.GetStatus?owner=\"service:0\"&role=\"current_temperature\"");
IF r.IsSuccess
    RETURN(PARSEJSON(r.Content, "$.value"));
END
IF r.StatusCode = 401
    ADDERROR(401, "Thermostat asks for a password (HTTP 401). Turn off password protection in the Shelly app, TapHome does not support HTTP Digest.");
ELSE
    ADDERROR(1, "Thermostat answered HTTP " + TOSTRING(r.StatusCode));
END
RETURN(NaN);
Read humidity
VAR r := SENDHTTPREQUEST("/rpc/Number.GetStatus?owner=\"service:0\"&role=\"current_humidity\"");
IF r.IsSuccess
    RETURN(PARSEJSON(r.Content, "$.value"));
END
IF r.StatusCode = 401
    ADDERROR(401, "Thermostat asks for a password (HTTP 401). Turn off password protection in the Shelly app, TapHome does not support HTTP Digest.");
ELSE
    ADDERROR(1, "Thermostat answered HTTP " + TOSTRING(r.StatusCode));
END
RETURN(NaN);
Read desired temperature
VAR r := SENDHTTPREQUEST("/rpc/Number.GetStatus?owner=\"service:0\"&role=\"target_temperature\"");
IF r.IsSuccess
    RETURN(PARSEJSON(r.Content, "$.value"));
END
IF r.StatusCode = 401
    ADDERROR(401, "Thermostat asks for a password (HTTP 401). Turn off password protection in the Shelly app, TapHome does not support HTTP Digest.");
ELSE
    ADDERROR(1, "Thermostat answered HTTP " + TOSTRING(r.StatusCode));
END
RETURN(NaN);
Write desired temperature
SENDHTTPREQUEST("/rpc/Number.Set?owner=\"service:0\"&role=\"target_temperature\"&value=" + TOSTRING(Se, "F1"));
Fan speed Multi-value Switch
Values / States: Auto · Low · Medium · High

Fan speed

Read switch state
VAR r := SENDHTTPREQUEST("/rpc/Enum.GetStatus?owner=\"service:0\"&role=\"fan_speed\"");
IF r.IsSuccess = false
    IF r.StatusCode = 401
        ADDERROR(401, "Thermostat asks for a password (HTTP 401). Turn off password protection in the Shelly app, TapHome does not support HTTP Digest.");
    ELSE
        ADDERROR(1, "Thermostat answered HTTP " + TOSTRING(r.StatusCode));
    END
    RETURN(NaN);
END
VAR v := PARSEJSON(r.Content, "$.value", true);
IF v = "auto"
    RETURN(0);
ELSEIF v = "low"
    RETURN(1);
ELSEIF v = "medium"
    RETURN(2);
ELSEIF v = "high"
    RETURN(3);
END
ADDERROR(2, "Unknown fan speed: " + TOSTRING(v));
RETURN(NaN);
Write switch state
VAR val := "high";
IF Mu = 0
    val := "auto";
ELSEIF Mu = 1
    val := "low";
ELSEIF Mu = 2
    val := "medium";
END
SENDHTTPREQUEST("/rpc/Enum.Set?owner=\"service:0\"&role=\"fan_speed\"&value=\"" + val + "\"");
Working mode Multi-value Switch
Values / States: Cool · Heat · Dry · Ventilation · Floor Heating

Working mode

Read switch state
VAR r := SENDHTTPREQUEST("/rpc/Enum.GetStatus?owner=\"service:0\"&role=\"working_mode\"");
IF r.IsSuccess = false
    IF r.StatusCode = 401
        ADDERROR(401, "Thermostat asks for a password (HTTP 401). Turn off password protection in the Shelly app, TapHome does not support HTTP Digest.");
    ELSE
        ADDERROR(1, "Thermostat answered HTTP " + TOSTRING(r.StatusCode));
    END
    RETURN(NaN);
END
VAR v := PARSEJSON(r.Content, "$.value", true);
IF v = "cool"
    RETURN(0);
ELSEIF v = "heat"
    RETURN(1);
ELSEIF v = "dry"
    RETURN(2);
ELSEIF v = "ventilation"
    RETURN(3);
ELSEIF v = "floor_heating"
    RETURN(4);
END
ADDERROR(2, "Unknown working mode: " + TOSTRING(v));
RETURN(NaN);
Write switch state
VAR val := "floor_heating";
IF Mu = 0
    val := "cool";
ELSEIF Mu = 1
    val := "heat";
ELSEIF Mu = 2
    val := "dry";
ELSEIF Mu = 3
    val := "ventilation";
END
SENDHTTPREQUEST("/rpc/Enum.Set?owner=\"service:0\"&role=\"working_mode\"&value=\"" + val + "\"");
Thermostat on/off Switch
Values / States: ON · OFF

Thermostat on/off

Read switch state
VAR r := SENDHTTPREQUEST("/rpc/Boolean.GetStatus?owner=\"service:0\"&role=\"enable\"");
IF r.IsSuccess
    RETURN(PARSEJSON(r.Content, "$.value"));
END
IF r.StatusCode = 401
    ADDERROR(401, "Thermostat asks for a password (HTTP 401). Turn off password protection in the Shelly app, TapHome does not support HTTP Digest.");
ELSE
    ADDERROR(1, "Thermostat answered HTTP " + TOSTRING(r.StatusCode));
END
RETURN(NaN);
Write switch state
SENDHTTPREQUEST("/rpc/Boolean.Set?owner=\"service:0\"&role=\"enable\"&value=" + IF(St, "true", "false"));
Anti-freeze Switch
Values / States: ON · OFF

Anti-freeze

Read switch state
VAR r := SENDHTTPREQUEST("/rpc/Boolean.GetStatus?owner=\"service:0\"&role=\"anti_freeze\"");
IF r.IsSuccess
    RETURN(PARSEJSON(r.Content, "$.value"));
END
IF r.StatusCode = 401
    ADDERROR(401, "Thermostat asks for a password (HTTP 401). Turn off password protection in the Shelly app, TapHome does not support HTTP Digest.");
ELSE
    ADDERROR(1, "Thermostat answered HTTP " + TOSTRING(r.StatusCode));
END
RETURN(NaN);
Write switch state
SENDHTTPREQUEST("/rpc/Boolean.Set?owner=\"service:0\"&role=\"anti_freeze\"&value=" + IF(St, "true", "false"));
Target humidity Variable

Target humidity

Read
VAR r := SENDHTTPREQUEST("/rpc/Number.GetStatus?owner=\"service:0\"&role=\"target_humidity\"");
IF r.IsSuccess
    RETURN(PARSEJSON(r.Content, "$.value"));
END
IF r.StatusCode = 401
    ADDERROR(401, "Thermostat asks for a password (HTTP 401). Turn off password protection in the Shelly app, TapHome does not support HTTP Digest.");
ELSE
    ADDERROR(1, "Thermostat answered HTTP " + TOSTRING(r.StatusCode));
END
RETURN(NaN);
Write
SENDHTTPREQUEST("/rpc/Number.Set?owner=\"service:0\"&role=\"target_humidity\"&value=" + TOSTRING(Va, "F0"));
Connection: Packet Parser → HTTP

Import parameters

Enter these values when you import the XML.

Asked in the appDefault
IP address192.168.1.100

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 LinkedGo ST802-B Fan Coil Thermostat (Powered by Shelly) 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 → HTTP View in TapHome portal