Skip to main content

Lennox S30 / S40

Lennox iComfort S30 and S40 smart thermostats are controlled directly from GEM — system mode, fan, and setpoints — with the current temperature, humidity, and setpoints read back live. One thermostat system becomes one GEM device, and each thermostat zone it reports becomes one GEM zone, discovered and created automatically.

The thermostat can be reached two ways:

  • Local — over your LAN, directly to the thermostat's IP. No internet dependency, fastest to respond. Requires the thermostat's local API to be turned on.
  • Cloud — through the Lennox iComfort cloud, using the homeowner's iComfort account (username + password). Works when the thermostat isn't reachable on the local network.

What's controlled

  • System mode — heat, cool, auto, off
  • Fan mode — auto, on, circulate
  • Setpoints — independent heat and cool setpoints (a true dual setpoint when the system is in auto)
  • Live readback — current temperature, relative humidity, the active heat/cool setpoints, and the current system and fan modes, refreshed roughly every 10 seconds and again right after a command

There is no separate power command — selecting the off system mode turns the system off. Humidity is reported for display only; this integration does not set a humidity target.

Prerequisites

  • A Lennox S30 or S40 already commissioned and registered in the homeowner's iComfort account.
  • Local mode: the thermostat's local API access enabled in its network settings (the S30/S40 exposes a local control interface over HTTPS that is off by default). Give the thermostat a static IP or DHCP reservation so its address never moves.
  • Cloud mode: valid iComfort account credentials with the thermostat showing in the iComfort app.
  • GEM's bundled Python environment, which is installed as part of GEM setup. The Lennox protocol is handled by a helper that ships with GEM; if it is missing you will see a lennox s30 missing python helper warning in the logs and the device will not connect.

Add the device

  1. Go to System → Devices and click Add Device. Open Devices
  2. Pick the Lennox S30 / S40 driver.
  3. Fill in the connection fields for the path you're using:
    • Local — enter the Thermostat IP; leave the username and password blank.
    • Cloud — leave Thermostat IP blank and enter the iComfort Username and iComfort Password.
  4. Save. GEM starts the Lennox helper, which connects and reports the thermostat's zones.
tip

If you fill in both an IP and cloud credentials, local mode takes precedence — the IP is used and the credentials are ignored. Pick one path per device. The connection retries on its own: if it drops or the credentials are momentarily wrong, GEM relaunches the helper every 5 seconds until it reconnects.

Zones are created automatically

You do not create the climate zones by hand. On the first successful connect, GEM creates one zone per thermostat zone the system reports:

  • The zone lands under the Climate subsystem.
  • The zone's address is the Lennox zone id — typically 0 on a single-zone thermostat, and one address per zone on a zoned (multi-zone damper) system.
  • The zone is pre-set to the Climate (Default) control, so the standard thermostat tile appears on touchpanels, dashboards, and the homeowner UI without any extra configuration.

If a thermostat is renamed in iComfort, the zone's label updates on the next connect. The zones show up under System → Zones (Open Zones) and are organized under System → Subsystems → Climate (Open Subsystems).

Device settings

Both connection groups are optional in the form, but you must supply either an IP or a username + password — with neither, the device logs lennox s30 missing ip or credentials and never starts.

Field (UI label)Attribute keyRequiredNotes
Thermostat IPipLocal modeLAN IP of the S30/S40. Leave blank for cloud mode.
iComfort UsernameusernameCloud modeThe Lennox iComfort account email. Cloud mode only.
iComfort PasswordpasswordCloud modeiComfort account password. Stored encrypted. Cloud mode only.

Zone readback attributes

Each climate zone carries these values, written by GEM as the thermostat reports them. They are live mirrors of the thermostat — drive automations and triggers off them, but don't edit them by hand. All are cataloged, so they autocomplete in the Attribute editor and appear in attribute-trigger pickers.

AttributeTypeMeaning
temperatureintegerCurrent measured temperature at the zone
humidityintegerCurrent relative humidity (%)
system_modetextCurrent mode: heat, cool, auto, or off (Lennox's "heat and cool" is shown as auto)
fan_modetextCurrent fan mode: on, auto, or circulate
cool_setpointintegerActive cooling setpoint
heat_setpointintegerActive heating setpoint

Temperatures and setpoints are shown in whatever unit the thermostat itself is set to (°F in a typical US install) — GEM displays the value the thermostat reports.

Commands

These three commands are how GEM (the homeowner tile, a macro, or a trigger) changes the thermostat. The address identifies which thermostat zone to act on; when you target a zone, GEM fills it in from the zone automatically, and in a macro the address field offers a zone picker rather than a raw number.

CommandArgumentsWhat it does
setpointmode (cool or heat), setpoint, addressSets the cooling or heating setpoint for the zone
system_modemode (heat, cool, auto, off), addressChanges the system mode
fan_modemode (on, auto, circulate), addressChanges the fan mode

Setpoint changes are deliberately rate-limited: if you nudge a setpoint several times quickly, GEM collapses the changes and sends the final value after a short pause (about 2 seconds at the tile, plus a ~5-second guard in the driver) so the thermostat isn't flooded.

Using it on a touchpanel or dashboard

The Climate (Default) tile that GEM assigns to each Lennox zone shows the current temperature (large), the humidity, and a mode indicator, with up/down arrows to adjust the setpoint and a gear icon that opens the advanced System and Fan buttons.

  • In auto mode the tile shows both the cool and heat setpoints. Tap one to choose which the arrows move; GEM keeps a minimum gap between them (the deadband, default ) so they can't cross.
  • The setpoint range defaults to 60–90°. Override per zone with the zone min / max attributes, and set the deadband either per zone (deadband) or as the Climate subsystem default.
  • The System buttons (Heat / Cool / Auto / Off) match what this thermostat supports out of the box.
Showing the Circulate fan option

By default the tile's fan controls only show Auto and On. To expose Lennox's Circulate fan mode on the touchpanel, add a fan_modes attribute to the zone listing the modes you want — for example auto, on, circulate. The tile then shows a button for each.

Automations

  • Triggers — fire on temperature, humidity, setpoint, or mode changes (each is a cataloged zone attribute). For example, alert when a zone's temperature rises above a threshold while system_mode is cool. See Triggers.
  • Macros — drop in a setpoint, system_mode, or fan_mode step targeting the climate zone to build setback scenes (a "Night" macro that lowers the heat setpoint, an "Away" macro that sets the system to a wider band). See Macros.

Troubleshooting

Symptom (log message)Likely cause / fix
lennox s30 missing ip or credentialsNeither an IP nor a username/password was entered. Fill in one connection path.
lennox s30 missing python helperGEM's bundled Python environment isn't installed or the Lennox helper is absent. Reinstall / repair the GEM Python environment.
lennox s30 python exited. restarting in 5sec...Usually transient — the helper restarts itself. If it loops continuously, verify the thermostat IP is reachable (local mode) or that the iComfort credentials are correct (cloud mode).
No zones appear after savingConfirm the device shows connected. In local mode the thermostat's local API must be enabled; in cloud mode the credentials must be valid and the thermostat must be visible in the iComfort app.
Setpoint or mode changes feel delayedExpected — rapid changes are intentionally debounced before being sent to the thermostat.