Skip to main content

Schluter DITRA-HEAT-E-WiFi (Cloud)

GEM controls Schluter DITRA-HEAT-E-WiFi floor-heating thermostats through the ditra-heat-e-wifi.schluter.com cloud REST API. One GEM device represents one Schluter account; each thermostat registered to the account appears as a zone underneath it, keyed by its serial number. Zones are created automatically on the first poll after connect.

The thermostat is an OJ Electronics OWD5 white-label. It has no local API — the cloud portal is the only programmatic control surface, so state freshness is bounded by the poll interval (60 seconds by default).

Prerequisites

  • A Schluter DITRA-HEAT-E-WiFi account (created in the mobile app or at ditra-heat-e-wifi.schluter.com) with the thermostats registered to it.
  • Outbound HTTPS (port 443) from the GEM server to ditra-heat-e-wifi.schluter.com.

If you can sign into the Schluter app and see the thermostat, the driver will be able to reach it.

Setup

  1. Add a new device of type Schluter DITRA-HEAT-E-WiFi (Cloud) under System → Devices.
  2. Set:
    • Schluter Account Email — same email used to sign into the Schluter app.
    • Schluter Account Password — same password (stored encrypted as a secure attribute).
  3. Save and reload. On the first poll the driver creates one Climate zone per registered thermostat, addressed by serial number and using the Climate (Setpoint) control. Rename the zones and assign them to site spaces as you like — the driver never rewrites a zone it has already created.
  4. Optional: run the get_thermostats command from System → Commands (or the Script Console) to see what the account reports; the response is an array of {serial_number, room, group, temperature, setpoint, regulation_mode, heating, online, sw_version}.

The driver polls the account every 60 seconds (configurable via status_interval) and surfaces temperature, setpoint, state, demand, regulation_mode, online, watts, sw_version, and error_code per zone.

Zone auto-creation

Auto-creation is on by default and can be turned off with the auto_create_zones device attribute, which leaves zone mapping entirely manual (Address = thermostat serial number, subsystem = Climate).

The zone label comes from the thermostat's room name in the Schluter app, prefixed by the group name when the account uses one — a thermostat in room Primary 1 becomes a zone labelled Primary 1. When neither is set, the label falls back to thermostat <serial>.

The driver will not recreate a zone you disabled — disabling a zone is how you tell it to leave a thermostat alone. If the derived zone name collides with an unrelated zone, the new zone is created with the serial number appended; if that is taken too, the create is skipped and logged.

Temperature units

The Schluter API works in centi-degrees Celsius (2450 = 24.5 °C). The driver converts to whole degrees Fahrenheit for all GEM zone attributes and converts back on writes, snapping setpoints to the thermostat's 0.5 °C steps.

Attribute reference

Device attributes

AttributeRequiredTypeDefaultNotes
usernameyesstringSchluter account email
passwordyesstring (secure)Schluter account password
status_intervalnoint60000Cloud poll interval in ms (minimum 15000)
auto_create_zonesnobooltrueCreate a Climate zone per thermostat the account reports. Turn off to map zones by hand.

Zone attributes

AttributeRequiredTypeNotes
addressyesstringThermostat serial number from get_thermostats. Filled in automatically when auto_create_zones is on.
minnointLower setpoint clamp (°F); defaults to the thermostat's own limit
maxnointUpper setpoint clamp (°F); defaults to the thermostat's own limit

Zone state attributes (driver-maintained)

AttributeTypeNotes
temperatureintFloor temperature (°F)
setpointintActive target temperature (°F)
statestringon while the relay is heating, else off
demandboolSame signal as state, boolean form
regulation_modestringschedule, comfort, manual, or vacation
onlineboolThermostat reachable from the Schluter cloud
wattsintMeasured heating load, when the thermostat reports one
error_codeint0 when healthy — non-zero indicates a fault (GFCI trip, sensor fault)
sw_versionstringThermostat firmware version

Commands

CommandArgsNotes
setpointaddress, setpoint (°F)Permanent manual hold at the given temperature
regulation_modeaddress, mode (schedule | manual)schedule follows the program; manual holds the current setpoint
resume_scheduleaddressCancel any hold and return to the programmed schedule
get_thermostatsList all thermostats on the account

comfort (temporary hold) and vacation modes are reported when set from the Schluter app but cannot be written from GEM — comfort requires an end time and vacation a date window, neither of which the portal accepts on a bare mode write.

Behavior notes

  • Session handling — the portal expires sessions server-side without notice. The driver re-authenticates on 401 and retries the request once; on invalid credentials it stops polling entirely until the device is reloaded with corrected values.
  • Backoff — when the cloud is unreachable the poll interval backs off exponentially (capped at 15 minutes) and the device is flagged disconnected after 5 consecutive failures.
  • Setpoint writes are confirmed by a fast follow-up poll about 3 seconds after the write.

Troubleshooting

SymptomCheck
Login fails / device never connectsVerify credentials by signing into ditra-heat-e-wifi.schluter.com. Reload the device after correcting them.
No zones were createdConfirm a Climate subsystem exists and auto_create_zones is on. Run get_thermostats — a thermostat the portal does not list cannot be auto-created. A zone you previously disabled is deliberately not recreated.
get_thermostats returns nothingConfirm the thermostats are assigned to this account in the Schluter app — on WiFi alone is not enough.
One zone offline while others updateThe portal reports that thermostat offline — check its WiFi from the thermostat screen (Settings → WiFi). A tripped GFCI also drops it offline.
Setpoint accepted but the floor stays coldCheck the error_code attribute and the thermostat screen — a GFCI trip or floor-sensor fault blocks heating regardless of setpoint.