TapHome
Community Beta Sensors

MSpa Mono Eco

Community template for the MSpa Mono Eco (F-MO062WE) inflatable hot tub, connected through the MSpa cloud over HTTPS. The spa must be bound to an MSpa Link account over 2.4 GHz Wi-Fi. Water temperature thermostat, heater, filtration, three-level bubbles, UVC sanitizer, filter life, safety lock and online status, plus an estimated power draw.

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

Submitted by Tomáš Ďurkech

MSpa Mono Eco

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

Download Template
On this page

Integration guide

The MSpa Mono Eco (model F-MO062WE) is a round inflatable hot tub of the MSpa FRAME series for up to 6 persons (930 L). Its external control box contains a 2200 W heater, a three-level air bubble blower, a filter pump and a UVC sanitizer, and connects over 2.4 GHz Wi-Fi to the MSpa cloud, which the MSpa Link mobile app uses for remote control.

This community template connects TapHome to the same MSpa cloud over HTTPS (api.iot.the-mspa.com, port 443). There is no local connection between the TapHome Control Unit and the spa: the template reads the spa state from the data object returned by the cloud and sends changes to the cloud endpoint /api/device/command. It is not an official MSpa integration.

1
[Spa control box] --2.4 GHz Wi-Fi--> [router] --internet--> [MSpa cloud] <--HTTPS 443-- [TapHome Control Unit]
Hardware connection

The spa is not wired to TapHome. The only electrical connection is the mains supply of the control box:

  • Plug the spa directly into a grounded (earthed) socket. The MSpa manual forbids extension cords, timers, plug adaptors and converter plugs in the supply, so the spa is controlled through the cloud only, not by switching its power.
  • Use the spa only with the RCD (residual current device) on its power cord, rated residual operating current not exceeding 30 mA. Test the RCD before each use: press RESET (the indicator turns red), press TEST (the red indicator must disappear), then press RESET again.
  • After power-up and RCD reset, the LED display shows the current water temperature.
All-in-one control panel of the MSpa Mono Eco: LED display, Heater, Filter, Bubble, Timer, UVC buttons, Up and Down buttons, safety lock.
Configuration
Network requirements
  • The control box supports 2.4 GHz Wi-Fi only (2412–2472 MHz). Do not use a network with the _5G suffix; if the router does not show a 2.4 GHz network, enable it in the router settings.
  • Set the router security to WPA2. The MSpa Link app may reject a network whose SSID contains special (non-alphanumeric) characters.
  • Keep the spa, the router and the phone used for pairing as close to each other as possible for a strong Wi-Fi signal.
  • The spa and the TapHome Control Unit do not have to be in the same local network, but the Control Unit needs internet access (outgoing HTTPS, port 443) to api.iot.the-mspa.com.
  • api.iot.the-mspa.com is the MSpa cloud for Europe and the rest of the world. Spas registered in the US and Canada region (api.usiot.the-mspa.com) or in the China region use a different cloud address than the one set in the template.

The spa must first be bound to an account in the MSpa Link app (iOS 9.0 or later, Android 7.0 or later; search for “MSpa Link” in the app store).

MSpa Link app, getting ready: 2.4 GHz Wi-Fi check and account sign-up screens (email, verification code, password).
  1. Open the app and tap Sign Up. Do not continue as Visitor — TapHome needs the email address and password of a registered account.
  2. Select your country and enter your email address.
  3. Enter the verification code from the email (valid for 15 minutes; it can be resent after 60 seconds).
  4. Set a password of 6–15 letters or numbers.
Binding the spa to the account
  1. Make sure the spa is turned on and the phone is connected to the 2.4 GHz Wi-Fi network with Bluetooth on.
  2. In the app, tap ADD DEVICE and choose the controller type (CONTROL BOX).
  3. Long-press the UP button on the control box until the Wi-Fi icon starts to flash, then tap CONFIRM.
  4. Enter the password of the Wi-Fi network.
  5. Choose the found spa (MSPA MONO); this step needs Bluetooth authorization.
  6. Wait until the binding process is completed.
MSpa Link app, binding the spa: Add Device, choose Control Box, long-press UP button until the Wi-Fi icon flashes, enter 2.4 GHz Wi-Fi password.

To unbind the spa, press the HEATER and TIMER buttons at the same time.

One spa can be paired with only one main user at a time. If another account pairs the spa, the previous user is disconnected from it. Do not pair the spa a second time from the account intended for TapHome.

Account used by TapHome

The MSpa cloud keeps one valid login token per account — a new login with the same account invalidates the previous one. When TapHome and the MSpa Link app use the same account, they can log each other out and the TapHome connection drops intermittently. Use a separate guest account with its own email address and password for TapHome; registered MSpa Link users can share the spa with other users.

Import parameters

The template asks for four parameters when it is imported:

ParameterMeaningHow to obtain
EmailEmail address of the MSpa Link account used by TapHomeThe address used at sign-up
PasswordMd5MD5 hash of the account password — 32 characters, lowercase hexadecimal. Not the readable passwordCompute it locally with any MD5 tool (see below)
DeviceIdIdentifier of the spa in the MSpa cloudDevice list of the account, field device_id
ProductIdIdentifier of the spa product in the MSpa cloudDevice list of the account, field product_id

The MSpa cloud does not accept the password in readable form, only its MD5 hash. Example commands:

1
2
3
4
5
6
# Windows (PowerShell)
$p = "YourPassword"
-join ([Security.Cryptography.MD5]::Create().ComputeHash([Text.Encoding]::UTF8.GetBytes($p)) | % { $_.ToString("x2") })

# Linux
printf '%s' 'YourPassword' | md5sum

Use printf, not echo: echo adds a newline to the end of the password, the hash is then different and the login fails without a clear error. Do not use online MD5 generators — they would receive the password.

The MSpa documentation does not say where the app displays the device identifiers. The MSpa cloud returns them in the device list of the account (/api/enduser/devices/, list items with device_id and product_id) after a login at /api/enduser/get_token/.

In TapHome, import the template on the Control Unit and fill in Email, PasswordMd5, DeviceId and ProductId in the import dialog.

Device capabilities
Water temperature and heating
  • Water temperature (thermostat) — shows the current water temperature and sets the target temperature in the range 20–40 °C. The cloud transfers temperatures in half-degree steps (value × 2), the template converts them to °C.
  • Water temperature sensor — read-only current water temperature.
  • Heater — switches heating on and off. Switching it on also switches on filtration; the spa itself starts filtration whenever heating is on.
  • Heating state — heating phase reported by the spa; the template treats 2 as preheating and 3 as heating.
  • Heated by — estimate of when the water reaches the target temperature, calculated from the heating rate the spa reports, or from the module variable HeatRate (default 1.8 °C per hour) when the spa reports none. Zero when the heater is off or the target is reached.
  • Heating time (min) and Heating time switch — read-only values heat_time and heat_time_switch as reported by the cloud.
Filtration and water care
  • Filtration — switches the filter pump on and off. Switching filtration off also switches the heater off.
  • UVC sterilization — switches the UVC sanitizer on and off.
  • Filter remaining and Filter usage — remaining filter life and filter operating hours, in hours.
Massage
  • Bubbles — multi-value switch with the states Off, Low, Medium and High; level and on/off state are sent in one command. According to MSpa, the blower draws 300 W, 500 W or 720 W depending on the level and switches off automatically after 20 minutes of operation.
  • Jets — switch for MSpa models with hydro jets. The Mono Eco control panel has no jet function; the device can be deleted after import.

MSpa warns not to turn on the bubble massage while the cover is attached — air can accumulate inside the spa and cause damage and injury. Keep this in mind for remote control and automations that switch the bubbles.

Status and settings
  • Online status — Online or Offline connection of the spa to the MSpa cloud.
  • Safety lock — state of the control panel lock (Locked / Unlocked), read-only in TapHome.
  • Temperature unit — switches the unit used by the spa between °C and °F.
  • Auto-inflate — read-only auto-inflation value reported by the spa.
  • Wi-Fi firmware version — firmware version of the spa Wi-Fi module.
  • Module service attributes: error code, heating state, filter remaining and filter usage.
Power and energy estimate

The template does not measure electricity. Power (W) is an estimate calculated from the states of filtration, bubbles and heating and from nominal values stored in module variables:

VariableDefaultAdded when
PumpW60 Wfiltration is on
BubbleW900 Wbubbles are on
HeaterPreheatW1500 Wheater is on and the heating state is 2 (preheating)
HeaterHeatW2000 Wheater is on and the heating state is 3 (heating)

Energy (kWh) shows the value of the module variable kWhTotal; it is not a meter reading.

The MSpa manual lists for the Mono Eco a heater of 2200 W, a bubble blower of 300 / 500 / 720 W per level and a rated power of 2300 W. Adjust the module variables to these values for a closer estimate.

Troubleshooting
The app does not find the spa during binding
  • Check that Bluetooth is on and the MSpa Link app is allowed to use it.
  • If the previous steps took too long, the spa may have left the pairing mode. Stay on the search page and long-press the UP button on the control box again.
Binding fails
  • Failure to connect the device — usually a weak signal; move the phone, the spa and the router closer together.
  • Failure to connect the device to the Wi-Fi network — check the Wi-Fi password and set the router security to WPA2; use a 2.4 GHz network.
  • Failure to bind the device to the account — make sure the Wi-Fi network is stable and try again.
No values in TapHome
  • Check that PasswordMd5 is the 32-character lowercase MD5 hash of exactly the account password (no trailing newline).
  • Check DeviceId and ProductId against the device list of the account.
  • Check that the spa is registered in the Europe / rest of world region of the MSpa cloud.
  • Check Online status and the Wi-Fi connection of the spa.
TapHome connection drops while the app is in use

The app and TapHome are logged in with the same account and invalidate each other’s login. Use a separate account for TapHome (see Account used by TapHome).

Water heats slowly or the temperature differs

According to MSpa, heating is slower at an ambient temperature below 10 °C, at wind speeds above 3.5–5.4 m/s, with the bubbles running during heating, or without the cover properly in place. The displayed water temperature may differ from the actual one by about 1 °C.

Available devices 20

These devices appear in TapHome after import.

MSpa Mono Eco Module
Service Attributes
Chybový kód
Stav ohrevu
Zostatok filtra
Využitie filtra
Custom Variables
Email (string)
PasswordMd5 (string)
DeviceId (string)
ProductId (string)
Token (string)
status (string)
HeatRate (numeric) = 1.8
PumpW (numeric) = 60
BubbleW (numeric) = 900
HeaterPreheatW (numeric) = 1500
HeaterHeatW (numeric) = 2000
kWhTotal (numeric)

MSpa Mono Eco

Service Attributes
Chybový kód
PARSEJSON(status, "$.data.fault", true)
Stav ohrevu
PARSEJSON(status, "$.data.heat_state", true)
Zostatok filtra
PARSEJSON(status, "$.data.filter_life", true)
Využitie filtra
PARSEJSON(status, "$.data.filter_current", true)
Teplota vody Thermostat

Teplota vody

Read temperature
RETURN(PARSEJSON(status, "$.data.water_temperature", true) / 2);
Read desired temperature
RETURN(PARSEJSON(status, "$.data.temperature_setting", true) / 2);
Write desired temperature
VAR raw := ROUND(Se * 2);
VAR body := "{\"device_id\":\"" + DeviceId + "\",\"product_id\":\"" + ProductId + "\",\"desired\":\"{\\\"state\\\":{\\\"desired\\\":{\\\"temperature_setting\\\":" + raw + "}}}\"}";
VAR r := SENDHTTPREQUEST("/api/device/command", "POST", body, "push_type:Android", "appid:e1c8e068f9ca11eba4dc0242ac120002", "nonce:a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6", "ts:1789995194", "sign:FA1BBED849DB468E4FCA74D814A96E6F", "lan_code:EN", "content-type:application/json; charset=UTF-8", "authorization:token " + Token);
Ohrev Switch
Values / States: ON · OFF

Ohrev

Read switch state
RETURN(PARSEJSON(status, "$.data.heater_state", true));
Write switch state
VAR d := SWITCH(St, 1, "\\\"heater_state\\\":1,\\\"filter_state\\\":1", "\\\"heater_state\\\":0");
VAR body := "{\"device_id\":\"" + DeviceId + "\",\"product_id\":\"" + ProductId + "\",\"desired\":\"{\\\"state\\\":{\\\"desired\\\":{" + d + "}}}\"}";
VAR r := SENDHTTPREQUEST("/api/device/command", "POST", body, "push_type:Android", "appid:e1c8e068f9ca11eba4dc0242ac120002", "nonce:a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6", "ts:1789995194", "sign:FA1BBED849DB468E4FCA74D814A96E6F", "lan_code:EN", "content-type:application/json; charset=UTF-8", "authorization:token " + Token);
Filtrácia Switch
Values / States: ON · OFF

Filtrácia

Read switch state
RETURN(PARSEJSON(status, "$.data.filter_state", true));
Write switch state
VAR d := SWITCH(St, 0, "\\\"filter_state\\\":0,\\\"heater_state\\\":0", "\\\"filter_state\\\":1");
VAR body := "{\"device_id\":\"" + DeviceId + "\",\"product_id\":\"" + ProductId + "\",\"desired\":\"{\\\"state\\\":{\\\"desired\\\":{" + d + "}}}\"}";
VAR r := SENDHTTPREQUEST("/api/device/command", "POST", body, "push_type:Android", "appid:e1c8e068f9ca11eba4dc0242ac120002", "nonce:a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6", "ts:1789995194", "sign:FA1BBED849DB468E4FCA74D814A96E6F", "lan_code:EN", "content-type:application/json; charset=UTF-8", "authorization:token " + Token);
Bubliny Multi-value Switch
Values / States: Vypnuté · Nízka · Stredná · Vysoká

Bubliny

Read switch state
VAR bs := PARSEJSON(status, "$.data.bubble_state", true);
IF (bs = 0)
RETURN(0);
END
RETURN(PARSEJSON(status, "$.data.bubble_level", true));
Write switch state
VAR d := SWITCH(Mu, 0, "\\\"bubble_state\\\":0", 1, "\\\"bubble_state\\\":1,\\\"bubble_level\\\":1", 2, "\\\"bubble_state\\\":1,\\\"bubble_level\\\":2", "\\\"bubble_state\\\":1,\\\"bubble_level\\\":3");
VAR body := "{\"device_id\":\"" + DeviceId + "\",\"product_id\":\"" + ProductId + "\",\"desired\":\"{\\\"state\\\":{\\\"desired\\\":{" + d + "}}}\"}";
VAR r := SENDHTTPREQUEST("/api/device/command", "POST", body, "push_type:Android", "appid:e1c8e068f9ca11eba4dc0242ac120002", "nonce:a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6", "ts:1789995194", "sign:FA1BBED849DB468E4FCA74D814A96E6F", "lan_code:EN", "content-type:application/json; charset=UTF-8", "authorization:token " + Token);
Jet trysky Switch
Values / States: ON · OFF

Jet trysky

Read switch state
RETURN(PARSEJSON(status, "$.data.jet_state", true));
Write switch state
VAR body := "{\"device_id\":\"" + DeviceId + "\",\"product_id\":\"" + ProductId + "\",\"desired\":\"{\\\"state\\\":{\\\"desired\\\":{\\\"jet_state\\\":" + St + "}}}\"}";
VAR r := SENDHTTPREQUEST("/api/device/command", "POST", body, "push_type:Android", "appid:e1c8e068f9ca11eba4dc0242ac120002", "nonce:a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6", "ts:1789995194", "sign:FA1BBED849DB468E4FCA74D814A96E6F", "lan_code:EN", "content-type:application/json; charset=UTF-8", "authorization:token " + Token);
UVC sterilizácia Switch
Values / States: ON · OFF

UVC sterilizácia

Read switch state
RETURN(PARSEJSON(status, "$.data.uvc_state", true));
Write switch state
VAR body := "{\"device_id\":\"" + DeviceId + "\",\"product_id\":\"" + ProductId + "\",\"desired\":\"{\\\"state\\\":{\\\"desired\\\":{\\\"uvc_state\\\":" + St + "}}}\"}";
VAR r := SENDHTTPREQUEST("/api/device/command", "POST", body, "push_type:Android", "appid:e1c8e068f9ca11eba4dc0242ac120002", "nonce:a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6", "ts:1789995194", "sign:FA1BBED849DB468E4FCA74D814A96E6F", "lan_code:EN", "content-type:application/json; charset=UTF-8", "authorization:token " + Token);
Snímač teploty vody Temperature Sensor

Snímač teploty vody

Read temperature
RETURN(PARSEJSON(status, "$.data.water_temperature", true) / 2);
Vykúrené o Variable

Vykúrené o

Read
VAR heater := PARSEJSON(status, "$.data.heater_state", true);
VAR setpoint := PARSEJSON(status, "$.data.temperature_setting", true) / 2;
VAR actual := PARSEJSON(status, "$.data.water_temperature", true) / 2;
VAR perhour := PARSEJSON(status, "$.data.device_heat_perhour", true);
VAR rate := SWITCH(perhour > 0, 1, perhour / 10, HeatRate);
VAR go := SWITCH(heater = 1 AND setpoint > actual, 1, 1, 0);
VAR fin := DATETIMEADD(NOW(), 0, 0, 0, 0, ROUND((setpoint - actual) / rate * 60), 0, 0);
RETURN((TODOUBLE(TOSTRING(fin, "HH")) * 3600 + TODOUBLE(TOSTRING(fin, "mm")) * 60) * go);
Zostatok filtra Variable

Zostatok filtra

Read
RETURN(PARSEJSON(status, "$.data.filter_life", true));
Využitie filtra Variable

Využitie filtra

Read
RETURN(PARSEJSON(status, "$.data.filter_current", true));
Detská poistka Reed Contact

Detská poistka

Read
RETURN(PARSEJSON(status, "$.data.safety_lock", true));
Stav ohrevu Variable

Stav ohrevu

Read
RETURN(PARSEJSON(status, "$.data.heat_state", true));
Online stav Reed Contact

Online stav

Read
RETURN(PARSEJSON(status, "$.data.is_online", true));
Príkon Variable

Príkon

Read
VAR p := 0;
IF (PARSEJSON(status, "$.data.filter_state", true) = 1)
p := p + PumpW;
END
IF (PARSEJSON(status, "$.data.bubble_state", true) = 1)
p := p + BubbleW;
END
IF (PARSEJSON(status, "$.data.heater_state", true) = 1)
IF (PARSEJSON(status, "$.data.heat_state", true) = 3)
p := p + HeaterHeatW;
END
IF (PARSEJSON(status, "$.data.heat_state", true) = 2)
p := p + HeaterPreheatW;
END
END
RETURN(p);
Jednotka teploty Switch
Values / States: °F · °C

Jednotka teploty

Read switch state
RETURN(PARSEJSON(status, "$.data.temperature_unit", true));
Write switch state
VAR body := "{\"device_id\":\"" + DeviceId + "\",\"product_id\":\"" + ProductId + "\",\"desired\":\"{\\\"state\\\":{\\\"desired\\\":{\\\"temperature_unit\\\":" + St + "}}}\"}";
VAR r := SENDHTTPREQUEST("/api/device/command", "POST", body, "push_type:Android", "appid:e1c8e068f9ca11eba4dc0242ac120002", "nonce:a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6", "ts:1789995194", "sign:FA1BBED849DB468E4FCA74D814A96E6F", "lan_code:EN", "content-type:application/json; charset=UTF-8", "authorization:token " + Token);
Čas ohrevu Variable

Čas ohrevu

Read
RETURN(PARSEJSON(status, "$.data.heat_time", true));
Prepínač ohrevu Variable

Prepínač ohrevu

Read
RETURN(PARSEJSON(status, "$.data.heat_time_switch", true));
Auto-nafúknutie Variable

Auto-nafúknutie

Read
RETURN(PARSEJSON(status, "$.data.auto_inflate", true));
Verzia firmvéru WiFi Variable

Verzia firmvéru WiFi

Read
RETURN(PARSEJSON(status, "$.data.wifivertion", true));
Spotreba Variable

Spotreba

Read
RETURN(kWhTotal);
Connection: Packet Parser → HTTP

Import parameters

Enter these values when you import the XML.

Asked in the appDefault
Email (MSpa účet)Enter at import
Heslo MD5 (MSpa)Enter at import
Device IDEnter at import
Product IDEnter at import

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 MSpa Mono Eco 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