Pelican Wireless Thermostats
Cloud REST integration for Pelican Wireless commercial
thermostats and the broader Pelican site management platform. Targets the per-account
subdomain (e.g. acme.officeclimatecontrol.net) and provides per-thermostat setpoint,
mode, fan, and schedule control plus temperature, humidity, and equipment status readback.
Pelican is heavily deployed in restaurants, retail chains, schools, and multi-tenant office buildings — anywhere a single back-office user manages dozens to hundreds of zones across many physical sites. The same driver fits both the residential one-site case and the enterprise multi-site case (one device per site).
Prerequisites
- A Pelican Wireless account with at least one site and at least one Pelican-branded thermostat (TS200H, TS300, TS400, etc.) installed.
- The account email and login password for a user that has API Access enabled on the Pelican dashboard (Settings → Users → API Access).
- The site subdomain — the part before
.officeclimatecontrol.neton the customer dashboard URL. For example, if the dashboard is athttps://acme.officeclimatecontrol.net, the site value isacme.
Setup steps
- Sign in to the Pelican customer dashboard and confirm the site subdomain in the browser URL bar.
- In Settings → Users, give the API user account API permissions if it does not already have them. The same email and password used in the Pelican mobile app works.
- In GEM admin, go to System → Devices → Add Device
(Open Devices) and choose the Pelican Wireless Thermostats
driver. Fill in:
site— the subdomain (e.g.acme)username— the account emailpassword— the account password (encrypted automatically by GEM)
- Save and connect the device. Run the
get_thermostatscommand to list all thermostats visible to this account. TheNamefield of each is the zone address you use below. - For each thermostat you want to control from GEM, create a zone bound to this device:
zone.address= the thermostat Name as shown byget_thermostats(exact match, case-sensitive).- File it under the Climate subsystem — the zone editor pre-selects Climate for
you, because this driver reports a
climatesubsystem hint that matches the built-in Climate subsystem. (hvacis not one of the stock subsystems, so the editor will not pre-select it; you would have to create that subsystem first and pick it by hand.)
This driver does not create zones for you. On connect it confirms the credentials,
then the status loop polls only the zones you have already created and bound to it,
reading temperature, humidity, setpoints, mode, fan, schedule, and equipment status every
status_interval ms (default 30 s, configurable 5–600 s). Until a zone exists with a
matching thermostat Name in zone.address, the device connects but has nowhere to
publish state.
Attribute reference
Device attributes
| Name | Type | Required | Description |
|---|---|---|---|
site | string | yes | Subdomain — the part before .officeclimatecontrol.net. |
username | string | yes | Pelican account email. |
password | string | yes | Pelican account password. Stored encrypted. |
status_interval | int | no | Poll interval in ms. Default 30000 (range 5000–600000). |
Zone attributes (populated by the status loop)
| Name | Type | Description |
|---|---|---|
temperature | float | Current room temperature in °F. |
humidity | float | Relative humidity %. Only on thermostats with the optional humidity sensor (-H suffix). |
setpoint | float | Active setpoint (heat in Heat mode, cool in Cool mode, midpoint in Auto). |
heat_setpoint | float | Configured heat setpoint °F. |
cool_setpoint | float | Configured cool setpoint °F. |
mode | string | One of off, heat, cool, auto. |
fan_mode | string | One of auto, on. |
schedule | string | Active Pelican schedule name, or Hold while a manual override is in effect. |
running | string | Equipment state reported by the thermostat (e.g. Heat1, Cool1, Off). |
state | string | Derived: off when system mode is Off, else on. |
Zone address format
The zone address is the thermostat Name field exactly as it appears in the Pelican
dashboard (and as returned by get_thermostats). Names are case-sensitive and must match
exactly — including any spaces or punctuation. Renaming a thermostat in the Pelican
dashboard will break GEM zone routing until the address is updated.
Commands
| Command | Args | Notes |
|---|---|---|
on | address | Sets system mode to Auto. |
off | address | Sets system mode to Off. |
set_mode | address, mode | mode ∈ off, heat, cool, auto. |
set_fan_mode | address, fan_mode | fan_mode ∈ auto, on. |
set_setpoint | address, level | Writes the cool setpoint when the thermostat is in Cool mode, otherwise the heat setpoint (so Heat, Auto, and Off all write the heat setpoint). Use set_heat_setpoint / set_cool_setpoint to target a specific one regardless of mode. |
set_heat_setpoint | address, level | Direct heat setpoint write in °F. |
set_cool_setpoint | address, level | Direct cool setpoint write in °F. |
hold_schedule | address | Hold current setpoint indefinitely. |
resume_schedule | address | Cancel any active hold and resume the schedule. |
get_thermostats | — | List all thermostats on the site. |
get_status | address | Fetch current state of a single thermostat. |
Known limitations / not yet supported
- No event push / COV. The driver polls; it does not subscribe to Pelican event streams. Setpoint changes made from the Pelican dashboard or mobile app become visible on the next status interval.
- No multi-stage equipment control. Pelican exposes per-stage outputs on some
thermostats; the driver only reads the aggregate
runStatusfield. - No schedule editing. The driver can hold or resume the active schedule but does not yet expose schedule CRUD operations. The Pelican API supports them; they have not been wired in this driver pass.
- No site / zone discovery beyond thermostats. Pelican accounts can include other object types (Sensor, Outdoor, Channel) — only Thermostat objects are surfaced today.
- Fractional setpoints round server-side. The Pelican API rounds setpoints to whole °F; the driver passes the raw value through without client-side rounding.
Troubleshooting
pelican xml parse failedon every request — The site URL is probably wrong. Pelican returns an HTML 404 page for unknown subdomains, which fails XML parsing. Re-check thesiteattribute (no.officeclimatecontrol.net, no scheme, no slashes).Authentication Failedin response messages — Verify the API user account has API Access permission on the Pelican dashboard. The mobile-app password and the dashboard password are the same; if you can sign in to the dashboard manually, the credentials are correct and the missing piece is the API-Access checkbox.get_thermostatsreturns an empty list — The account has no thermostats, or the API user has been scoped to a subset that excludes them all. Check user permissions on the dashboard.- Setpoints written from GEM revert after a few seconds — Pelican's scheduling engine
may be re-applying the active schedule. Issue
hold_schedulebefore / after the write, or move the zone's schedule to a custom one that does not actively overwrite holds. - TLS errors / cert mismatch — Pelican uses a wildcard
*.officeclimatecontrol.netcertificate. If the controller has an outdated root store, refresh CA certificates on the host OS.
Related documentation
- Devices — adding the Pelican controller, secure attributes, and Reload.
- Zones — creating the per-thermostat zones this driver publishes state onto.
- Subsystems — the Climate subsystem these zones live under.
- Commands — running
set_mode,set_setpoint,hold_schedule, and the read-onlyget_thermostats/get_statusfrom the command tester, macros, and triggers.
References
- Pelican Wireless API documentation — public docs covering request format, supported objects, and field reference.