Couple a myUplink-connected heat pump (NIBE, CTC, and other myUplink brands) to a Loxone Miniserver. The plugin polls the myUplink cloud API, publishes every device data point to the LoxBerry MQTT Gateway, and writes setpoints back to the heat pump when Loxone changes a value.
The MQTT Gateway forwards topics to Loxone, so no additional Loxone-side software is required beyond Virtual Inputs / Virtual Outputs.
myUplink is the cloud connectivity platform developed by NIBE Industrier AB. Every brand in the NIBE group that ships with a myUplink-connected control board can be used with this plugin.
| Brand | Representative models |
|---|---|
| NIBE | F1145, F1155, F1245, F1255, F1345 (ground source); S1155, S1255, S1255 PC, S1355 (split); F730, F750 (air/water); VVM 225, VVM 310, VVM 320, VVM 500 (system managers); SMO 20, SMO 40 (outdoor system managers); AMS 10 (air/water) |
| CTC | CTC EcoLogik Air, CTC EcoZenith i250/i550 Pro, CTC EcoAir |
| Novelan | LAV, LW, SWC, SWP series |
| Alpha Innotec | LW, LWD, SWC, SWP, SWCV series |
| Perfica | PF series heat pumps |
The parameter IDs published by each unit depend on the hardware and firmware version. Run the plugin once and inspect the
points_jsonMQTT topic to discover the full list for your device. The Parameter reference section below lists IDs captured from an MSW2 unit as an example.
- OAuth2 (authorization-code) login – handled in the web UI, runs unattended thereafter.
- Automatic access-token refresh; authorize once and the bridge keeps going.
- Polls all systems and devices on your myUplink account on a configurable interval.
- Publishes each data point to
myuplink/<deviceId>/<parameterId>(retained) plus apoints_jsonfull-snapshot topic and aconnectionStatetopic. - Optional bidirectional control: Loxone writes to
.../<parameterId>/setand the bridge PATCHes the value back to myUplink (gated by an "Allow writes" switch). - Reads MQTT broker credentials directly from the LoxBerry MQTT Gateway.
- A myUplink user account at https://myuplink.com with at least one registered heat pump
- A free developer application at https://dev.myuplink.com (gives you the Client ID + Secret needed for API access)
- LoxBerry 3.0.0 or newer
- The MQTT Gateway plugin installed and running
- Python packages
requestsandpaho-mqtt(installed automatically via theaptfile)
- Download the latest installable ZIP from the Releases page.
- In LoxBerry: Plugin install → upload the ZIP.
- Open the plugin page from the LoxBerry main menu.
Go to https://dev.myuplink.com, sign in with your myUplink account, and create a new application. Copy the Client ID and Client Secret — you will paste these into the plugin.
Callback URL: before saving the application, copy the Callback URL from the plugin settings page (it looks like
http://<loxberry-ip>/admin/plugins/myuplink/oauth_callback.cgi) and paste it verbatim into the application's Redirect URI field on the developer portal. The URL must match exactly — a mismatch causes the OAuth flow to fail with a redirect error.
Open the plugin page from the LoxBerry main menu, go to the Settings tab, and fill in:
| Field | What to enter |
|---|---|
| Client ID | From the developer portal |
| Client Secret | From the developer portal |
| Poll interval (s) | How often to fetch data from myUplink (minimum 60 s recommended) |
| MQTT topic prefix | Base topic for all published values (default: myuplink) |
| Allow writes from Loxone | Enable only if you want Loxone to send setpoints back to the heat pump |
Click Save settings.
Click Connect to myUplink. Your browser opens the myUplink OAuth consent screen:
Log in with your myUplink account credentials and click Allow. myUplink redirects you back to LoxBerry and the plugin displays a success confirmation:
The plugin has stored a refresh token — you will not need to authorize again unless you explicitly revoke access in the myUplink developer portal.
Return to the plugin Settings tab. The Connection section should now show:
✓ Authorized. The bridge has a valid refresh token.
The daemon will automatically refresh the access token every hour using the stored refresh token. No action is needed on your part.
The Parameter filter tab lists every data point discovered on your last poll, grouped by device. Uncheck parameters you do not need — they will be excluded from MQTT publishing, keeping your topic tree clean.
In the LoxBerry MQTT Gateway plugin, add a subscription for myuplink/# and point it
at your Miniserver. Within one poll cycle you should see live values arriving:
Each data point is published as a retained message on
<prefix>/<deviceId>/<parameterId> (e.g. myuplink/abc123/40067 for outdoor temperature).
Inspect the points_json topic to discover the full parameter list for your device.
| Topic | Direction | Meaning |
|---|---|---|
myuplink/<deviceId>/<parameterId> |
plugin → Loxone | Current parameter value (retained) |
myuplink/<deviceId>/connectionState |
plugin → Loxone | Device online / offline state |
myuplink/<deviceId>/points_json |
plugin → Loxone | Full JSON snapshot of all points |
myuplink/<deviceId>/<parameterId>/set |
Loxone → plugin | Write a new setpoint |
<parameterId> values come from the myUplink API (e.g. 40067 for outdoor temperature).
Inspect points_json after the first poll to discover what your unit exposes.
The parameter IDs below were captured from MSW2-6S / MSW2-9S units.
Other myUplink devices expose different IDs — inspect the points_json topic after first poll
to discover your unit's full list.
W = writable from Loxone (enable Allow writes in plugin settings first).
| Parameter ID | Name | Unit | W |
|---|---|---|---|
| 0 | flow | °C | |
| 1 | return | °C | |
| 2 | return target | °C | |
| 5 | outdoor temp. | °C | |
| 6 | DHW | °C | |
| 7 | DHW target | °C | |
| 22 | mix circ1 target | °C | |
| 23 | mix circ1 flow | °C | |
| 39 | outdoor temp. ø (averaged) | °C | |
| 40004 | current room temp. | °C | |
| 40010 | DHW (alternate) | °C | |
| 41 | current room temp. (alternate) | °C | |
| 5002 | coverage HP | °C | |
| 5110 | release OT | °C | yes |
| Parameter ID | Name | Unit | W |
|---|---|---|---|
| 17 | operation mode | ||
| 21 | Heating capacity | kW | |
| 31 | flow rate | l/h | |
| 32 | HUP (heating circuit pump) | ||
| 33 | ZUP (circulation pump) | ||
| 42 | EVU (utility lock) | ||
| 45 | Status Heating | ||
| 46 | Status DHW | ||
| 47 | Status Cooling | ||
| 50 | release cooling | ||
| 51 | el. heater active | ||
| 52 | immers. heater last active | ||
| 57 | error code | ||
| 58 | running time | ||
| 63 | ASD | ||
| 64 | HD (high pressure switch) | ||
| 65 | MOT | ||
| 66 | HD (high pressure) | bar | |
| 67 | ND (low pressure) | bar | |
| 68 | BUP - DHW pump | ||
| 69 | VBO (brine pump) | ||
| 70 | VD1 (compressor) | ||
| 72 | ZIP | ||
| 73 | ZWE 1 (aux. heater 1) | ||
| 74 | ZWE 2 - SST (aux. heater 2) | ||
| 6006 | output | % | |
| 6039 | VBO alternate | ||
| 6168 | output min. | % | |
| 6169 | output max. | % | |
| 40001 | mode of operation (zone 1) | yes | |
| 40003 | mode of operation (zone 2) | yes | |
| 40007 | mode of operation (zone 3) | yes | |
| 40009 | mode of operation (zone 4) | yes | |
| 5003 | mode of operation (alt.) | yes | |
| 5004 | mode of operation (alt.) | yes | |
| 5108 | mode of operation (DHW) | yes |
| Parameter ID | Name | Unit |
|---|---|---|
| 5668 | operating hours HP | h |
| 5669 | operating hours VD1 | h |
| 5671 | operating hours ZWE1 | h |
| 5674 | impulse VD1 (compressor starts) | |
| 5728 | operat. hours heating | h |
| 5729 | operating hours DHW | h |
| 5730 | operat. hours cooling | h |
| Parameter ID | Name | Unit |
|---|---|---|
| 5001 | temperature offset (±) | °C |
| 5105 | DHW desired value | °C |
| 5700 | heating limit (outdoor cutoff) | °C |
| 6146 | DHW target value | °C |
| 6147 | duration extra DHW | s |
| 6148 | desired room temp. | °C |
| 40005 | desired room temp. (zone) | °C |
| 25000 | high-speed charge (on/off) | |
| 25001 | Extra DHW (on/off) |
| Parameter ID | Name |
|---|---|
| 40011 | MAC address of device |
- In the MQTT Gateway, subscribe to
myuplink/#and enable forwarding to Virtual Inputs. - In Loxone Config, create Virtual Inputs for each parameter topic you need (e.g. hot-water temperature, outdoor temperature).
- For control, create Virtual Outputs publishing to
.../<parameterId>/set(e.g. hot-water target setpoint).
| Symptom | Fix |
|---|---|
| "Not authorized" | Save Client ID/Secret first, then click Connect. Check the Callback URL is registered verbatim in the myUplink portal. |
| Data in MQTT but not in Loxone | In the MQTT Gateway plugin, add a subscription for myuplink/# and point it at your Miniserver. |
| No data in MQTT | Check the plugin log (LoxBerry → Logs). Common causes: daemon not running, no refresh token (authorize first), myUplink API unreachable. |
| Writes are ignored | The "Allow writes from Loxone" switch must be enabled in the plugin settings. |
MIT © 2026 Jochim Vandorpe






