---
title: "MSpa Mono Eco"
description: "Control the MSpa Mono Eco hot tub from TapHome via the MSpa cloud: water temperature, heater, filtration, bubbles and UVC. Needs an MSpa Link account."
url: "https://taphome.com/en/compatibility/mspa-mono-eco/"
language: en
lastmod: 2026-11-10
generator: hugo
ai:
  topics: ["http","cloud-api","hot-tub","spa","pool","wifi","2.4-ghz-wifi","https","md5-authentication"]
  questions: ["How to integrate the MSpa Mono Eco hot tub with TapHome?","What can TapHome control on the MSpa Mono Eco?","How to connect the MSpa Mono Eco to TapHome via the MSpa cloud?","How to pair the MSpa Mono Eco with the MSpa Link app over 2.4 GHz Wi-Fi?","How to get the MD5 password hash, Device ID and Product ID for the MSpa Mono Eco template?","Why does the TapHome connection to the MSpa cloud drop while the MSpa Link app is in use?","Does the MSpa Mono Eco TapHome template measure power consumption?"]
---

# MSpa Mono Eco

Communication: Packet Parser → HTTP

## 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.

```
[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.](https://taphome.com/images/compatibility/mspa-mono-eco/control-panel_hu_4a80d741a906a95a.jpg)

##### 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.

###### Creating an MSpa Link account

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).](https://taphome.com/images/compatibility/mspa-mono-eco/mspa-link-app-account_hu_386aa668add128b9.jpg)

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.](https://taphome.com/images/compatibility/mspa-mono-eco/mspa-link-pairing_hu_e348ac2733bbc2d7.jpg)

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

> [!WARNING]
> 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

> [!WARNING]
> 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:

| Parameter | Meaning | How to obtain |
|---|---|---|
| `Email` | Email address of the MSpa Link account used by TapHome | The address used at sign-up |
| `PasswordMd5` | MD5 hash of the account password — 32 characters, lowercase hexadecimal. Not the readable password | Compute it locally with any MD5 tool (see below) |
| `DeviceId` | Identifier of the spa in the MSpa cloud | Device list of the account, field `device_id` |
| `ProductId` | Identifier of the spa product in the MSpa cloud | Device list of the account, field `product_id` |

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

```
## 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.

> [!WARNING]
> 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:

| Variable | Default | Added when |
|---|---|---|
| `PumpW` | 60 W | filtration is on |
| `BubbleW` | 900 W | bubbles are on |
| `HeaterPreheatW` | 1500 W | heater is on and the heating state is 2 (preheating) |
| `HeaterHeatW` | 2000 W | heater 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.

> [!TIP]
> 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)              |

Service Attributes

Chybový kód

```taphome
PARSEJSON(status, "$.data.fault", true)
```

Stav ohrevu

```taphome
PARSEJSON(status, "$.data.heat_state", true)
```

Zostatok filtra

```taphome
PARSEJSON(status, "$.data.filter_life", true)
```

Využitie filtra

```taphome
PARSEJSON(status, "$.data.filter_current", true)
```

Teplota vody Thermostat

Read temperature

```taphome
RETURN(PARSEJSON(status, "$.data.water_temperature", true) / 2);
```

Read desired temperature

```taphome
RETURN(PARSEJSON(status, "$.data.temperature_setting", true) / 2);
```

Write desired temperature

```taphome
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

Read switch state

```taphome
RETURN(PARSEJSON(status, "$.data.heater_state", true));
```

Write switch state

```taphome
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

Read switch state

```taphome
RETURN(PARSEJSON(status, "$.data.filter_state", true));
```

Write switch state

```taphome
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á

Read switch state

```taphome
VAR bs := PARSEJSON(status, "$.data.bubble_state", true);
IF (bs = 0)
RETURN(0);
END
RETURN(PARSEJSON(status, "$.data.bubble_level", true));
```

Write switch state

```taphome
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

Read switch state

```taphome
RETURN(PARSEJSON(status, "$.data.jet_state", true));
```

Write switch state

```taphome
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

Read switch state

```taphome
RETURN(PARSEJSON(status, "$.data.uvc_state", true));
```

Write switch state

```taphome
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

Read temperature

```taphome
RETURN(PARSEJSON(status, "$.data.water_temperature", true) / 2);
```

Vykúrené o Variable

Read

```taphome
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

Read

```taphome
RETURN(PARSEJSON(status, "$.data.filter_life", true));
```

Využitie filtra Variable

Read

```taphome
RETURN(PARSEJSON(status, "$.data.filter_current", true));
```

Detská poistka Reed Contact

Read

```taphome
RETURN(PARSEJSON(status, "$.data.safety_lock", true));
```

Stav ohrevu Variable

Read

```taphome
RETURN(PARSEJSON(status, "$.data.heat_state", true));
```

Online stav Reed Contact

Read

```taphome
RETURN(PARSEJSON(status, "$.data.is_online", true));
```

Príkon Variable

Read

```taphome
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

Read switch state

```taphome
RETURN(PARSEJSON(status, "$.data.temperature_unit", true));
```

Write switch state

```taphome
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

Read

```taphome
RETURN(PARSEJSON(status, "$.data.heat_time", true));
```

Prepínač ohrevu Variable

Read

```taphome
RETURN(PARSEJSON(status, "$.data.heat_time_switch", true));
```

Auto-nafúknutie Variable

Read

```taphome
RETURN(PARSEJSON(status, "$.data.auto_inflate", true));
```

Verzia firmvéru WiFi Variable

Read

```taphome
RETURN(PARSEJSON(status, "$.data.wifivertion", true));
```

Spotreba Variable

Read

```taphome
RETURN(kWhTotal);
```

**Connection:** Packet Parser → HTTP

## Import parameters

Enter these values when you import the XML.

| Asked in the app  | Default         |
|-------------------|-----------------|
| Email (MSpa účet) | Enter at import |
| Heslo MD5 (MSpa)  | Enter at import |
| Device ID         | Enter at import |
| Product ID        | Enter at import |

## Related Documentation

- [Packet Parser Integration](https://taphome.com/en/compatibility/packet-parser-guide/)
- [Packet Parser (HTTP, TCP, UDP, FTP, MQTT)](https://taphome.com/en/docs/integration/packet-parser/)
- [Packet parser functions](https://taphome.com/en/docs/script/packet-parser/)
- [Parsing functions](https://taphome.com/en/docs/script/parsing-functions/)

