Skip to main content

Loxone Miniserver

Local-LAN driver for the Loxone Miniserver, Miniserver Compact, and Miniserver Go controllers. GEM reads the Loxone structure file (LoxAPP3.json) to enumerate every control, then dispatches commands through the documented /jdev/sps/io/{uuid}/{action} endpoint.

Prerequisites

  • Miniserver firmware 9.x or later, reachable on the LAN.
  • A Loxone user with web-service rights. The default admin user works; in production, create a dedicated automation user.
  • HTTP basic auth enabled on the Miniserver, or GEM running on the same trusted network. Token-based auth (Miniserver 9+) is honored by the Miniserver but not yet negotiated by this driver.
  • TCP port 80 (HTTP) or 443 (HTTPS) open between GEM and the Miniserver. Miniservers on Loxone Cloud DNS still expose the same API on the LAN side.

Setup

  1. Add a device in GEM with driver loxone_miniserver.
  2. Fill in the device attributes:
    • ip — Miniserver IP, e.g. 192.168.1.50.
    • username — Loxone web-service user.
    • password — that user's password (stored encrypted).
    • port (optional) — defaults to 80.
    • use_https (optional) — set when the Miniserver is reverse-proxied or has a Loxone-issued certificate. Self-signed certs are accepted.
    • status_interval (optional) — poll cadence in ms, default 4000.
  3. Save and reload the device. Watch the server log for loxone miniserver connected: … and loxone miniserver controls: <count> to confirm the structure file loaded.
  4. Run the get_devices command from the device's Test Commands page (or the Script Console) to print every Loxone control with its UUID, room, category, and type.
  5. For each Loxone control you want to expose, create a zone under the appropriate subsystem (lights, shades, climate, …) and set zone.address to the Loxone control UUID, e.g. 0f1a3c5b-0007-1234-ffff8b0a3c5d1234. The driver will populate zone.control_type automatically on the next status poll.

Attributes

Device

NameRequiredDescription
ipyesMiniserver IP address.
usernameyesLoxone user with web-service rights.
passwordyesStored encrypted by GEM's secure-attribute system.
portnoDefaults to 80 (or 443 with use_https).
use_httpsnoDefault false. Set to true when the Miniserver is reverse-proxied or has a TLS cert.
status_intervalnoStatus poll cadence in ms, default 4000.

Zone

NameRequiredDescription
addressyesLoxone control UUID (32-hex with embedded dashes — copy from get_devices output).
control_typenoAuto-populated from the structure file. Used to pick the right action verb.

Zone address format

Loxone control UUIDs look like 0f1a3c5b-0007-1234-ffff8b0a3c5d1234. Use them verbatim. The Miniserver's structure file lists every control's UUID in the controls map of LoxAPP3.json; get_devices prints them in a flat list with the room and category attached for easy zone creation.

Commands

CommandArgsNotes
on / offaddressSwitch / dimmer / EIB outputs. Maps to On / Off.
pulseaddressImpulse switches and scene triggers. Maps to Pulse.
open / close / stopaddressJalousie / blind / shade. Maps to FullUp / FullDown / Stop for those types; On / Off / Stop for switch-like controls.
set_leveladdress, level (0–100)Dimmer / analog. The level value is sent verbatim as the action token.
set_valueaddress, valueGeneric analog setpoint (e.g. thermostat target temperature).
get_stateaddressReads one control's current value.
get_devicesRe-downloads LoxAPP3.json and lists every control with its UUID, room, category, type.

Known limitations

  • Token-based auth not implemented. This driver uses HTTP basic auth, which every Miniserver supports as long as you haven't disabled it. Token auth (per-user JWTs negotiated via jdev/sys/keyexchange and jdev/sys/getkey2) is on the roadmap.
  • No WebSocket state push. State changes are picked up by polling. For zones that fire frequently, lower status_interval or wire those controls through attribute_trigger rules upstream of the Miniserver.
  • Complex control types (IRoomControllerV2, AalSmartAlarm, EnergyManager) are returned by get_devices but only the basic Switch / Dimmer / Jalousie verbs are wired through the GEM verb mapper. Use set_value with the literal Loxone action string when you need a verb the mapper doesn't know.
  • Cloud DNS / remote access is unsupported in this driver. Run GEM on the same LAN as the Miniserver, or terminate Loxone Cloud DNS on a reverse proxy and point ip at the proxy.

Troubleshooting

  • loxone miniserver missing credentials — the username or password attribute hasn't been set on the device row. Re-enter them from the device admin page.
  • loxone code 401 / 403 — bad credentials, or the user lacks web-service rights. Verify in Loxone Config under Users → User Management.
  • loxone code 500 on a command — usually means the action verb isn't valid for that control type. Run get_state against the same address to see what type it is, then pick a matching verb (e.g. don't send On to a Jalousie).
  • loxapp3.json missing controls map — the structure file came back empty or in an unexpected shape, almost always a firmware mismatch. Confirm the Miniserver is on firmware 9 or newer.
  • http request error: ECONNREFUSED — port mismatch or the Miniserver is reachable only via HTTPS; toggle use_https and/or set port.