Pentair IntelliCenter
The pentair_ip driver integrates GEM with the Pentair IntelliCenter pool/spa controller. It talks directly to the IntelliCenter outdoor automation panel over your LAN — there is no protocol adapter in front of it. For the older IntelliTouch / EasyTouch controllers (which use a ScreenLogic2 adapter), pick the Pentair ScreenLogic driver instead — it speaks a completely different protocol on a different port, and the two are not interchangeable.
IntelliCenter exposes a newline-delimited JSON command protocol on local TCP port 6681. No password or pairing is required — the controller trusts any client on the LAN, so reach it on a trusted network segment.
What this driver supports
- Automatic zone creation — on connect (and again whenever the device reloads) the driver reads the controller's hardware definition, discovers every circuit, body, feature and light, and creates one GEM zone per item. Bodies (Pool, Spa) land in the Water subsystem with an on/off + heat-setpoint control; light circuits land in the Lights subsystem; every other circuit (pumps, cleaners, water features, AUX outputs) lands in the Water subsystem as a plain on/off zone. The sync is additive — it only ever creates zones for addresses that don't already have one, and never modifies, renames, re-subsystems or removes an existing zone.
- Circuit and body on/off — turn any auto-created zone on or off. Body zones (Pool/Spa) and circuit zones are switched through the appropriate IntelliCenter command automatically; you do not need to know which is which.
- Light level / dimming — for dimmable and color lights, set a brightness level of 0–100. Sending
0also turns the light off. - High / Medium / Low light presets — one-tap preset levels for light circuits. By default these send 100 / 50 / 25, and you can override them per zone (see the zone attribute table).
- Heat setpoint — set the heat setpoint on a Pool or Spa body zone.
- Live status — circuit on/off state, light level, water temperature, pump speed, heat mode, setpoint and the controller's configured temperature limits are mirrored onto each zone. IntelliCenter pushes changes the moment they happen (a wall control, the Pentair Home app, or a schedule firing), and the driver also polls each zone on a fixed interval as a backstop, so GEM stays in sync without you doing anything.
Prerequisites
- A Pentair IntelliCenter controller on the same LAN as GEM, with TCP port 6681 reachable (no firewall or VLAN block between GEM and the panel).
- The IntelliCenter on a reserved DHCP lease or static IP — GEM references it by address, so a changing IP breaks the connection after a reboot.
- IntelliCenter firmware that exposes the local API (1.040 or newer). On older builds you may need to enable the IntelliCenter app/remote access in the panel's Settings → Network menu.
Setup steps
- Reserve an IP for the IntelliCenter panel in your router so GEM can find it after a reboot.
- On the Devices page choose System → Devices → Add Device and pick the driver
pentair_ip. Set:- IntelliCenter IP (
ip) — the panel's local IP. - Port (
port) — leave at 6681 unless you are tunneling through another box. - Status Poll Interval (ms) (
status_interval) — optional, default 5000 (5 s). This is the backstop poll; live changes still arrive instantly via push.
- IntelliCenter IP (
- Save and reload the device. Within a few seconds the driver reads the hardware definition and begins creating zones.
- The driver auto-creates one GEM zone per discovered item on connect — no manual zone setup is required. Open the Zones page to see them:
- Pool and Spa bodies land in the Water subsystem with the Water On/Off + Setpoint control — a tile that shows live water temperature, the heat setpoint with up/down adjustment, and on/off buttons.
- Light circuits (IntelliBrite, GloBrite, MagicStream, ColorCascade, dimmers and similar) land in the Lights subsystem as light switches.
- All other circuits (pumps, cleaners, water features, valves, generic AUX) land in the Water subsystem as plain on/off zones.
- Each zone's address is the IntelliCenter object id (for example
C0006for a circuit,B1101for a body) and its label is the circuit name configured in the controller.
- Auto-create is additive: a later reload only adds zones for new objects it hasn't seen — it never touches the ones already created. So you can freely disable any auto-created zone you don't want, and change the subsystem, control or label of the ones you keep; the next sync leaves your edits in place. Add equipment in the Pentair app and reload the GEM device to pick up the new circuits.
- Trigger an
on/offcommand on a zone from the Zones page to confirm the round-trip before subscribing UI widgets to it.
Pool/spa bodies and lights are auto-assigned a working control surface. Other equipment circuits (pumps, cleaners, features) are created with a basic on/off control that does not currently render its own tile. If one of those zones shows no control surface, open it on the Zones page and set its Control to Water On/Off — the on/off commands themselves work regardless.
Attribute reference
Device attributes
| Attribute | Type | Required | Description |
|---|---|---|---|
ip | string | yes | Local IP of the IntelliCenter panel. |
port | int | no (default 6681) | TCP port the panel listens on. |
status_interval | int | no (default 5000) | Backstop poll interval in milliseconds. Live changes arrive via push notifications; this poll re-reads each zone's status in case a push was missed. |
The IntelliCenter requires no password, so there is no credential attribute on this driver.
Zone attributes
The driver writes these onto each zone. Some are set once at discovery; the rest update live as the controller reports changes.
| Attribute | Type | Set by | Description |
|---|---|---|---|
pentair_object_type | string | discovery | The IntelliCenter object class (CIRCUIT, BODY, …). Drives how the driver switches and polls the zone — informational, don't edit. |
pentair_subtype | string | discovery | The circuit subtype reported by the controller (e.g. the specific light type). Informational. |
state | string | live | on / off. |
level | int | live | Light brightness 0–100. |
temperature | int | live | Live water temperature in the controller's configured unit. |
setpoint | int | live | Current heat setpoint (body zones). |
min / max | int | live | The body's low / high temperature limits as reported by the controller. |
speed | int | live | Pump speed reported by variable-speed pumps. |
mode | string | live | Heat mode reported by a body. |
usage | int | live | Reported circuit usage value. |
high_value / medium_value / low_value | int | you (optional) | The brightness the High / Medium / Low commands send to a light zone. Defaults are 100 / 50 / 25 — set these on a zone to customize its presets. |
Zone address format
The IntelliCenter object id, auto-populated at discovery. The first letter indicates the object type:
| Prefix | Meaning |
|---|---|
C#### | Circuit (lights, pumps, features, AUX) — e.g. C0006 |
B#### | Body (Pool / Spa) — e.g. B1101 |
F#### | Feature |
Use the exact id the controller reports — the numbering is per-install and is not fixed. The driver fills the address in for you on discovery; you should rarely need to type one by hand.
Commands
Every zone command's address argument is a zone picker in the command/macro builder, so you select the zone rather than typing an id.
| Command | Args | Description |
|---|---|---|
on | address | Turn the addressed zone on (works for both circuit and body zones). |
off | address | Turn the addressed zone off. |
level | address, level | Set a light circuit's brightness, 0–100. 0 also turns it off. |
high | address | Set a light to its High preset (zone high_value, default 100). |
medium | address | Set a light to its Medium preset (zone medium_value, default 50). |
low | address | Set a light to its Low preset (zone low_value, default 25). |
setpoint | address, setpoint | Set the heat setpoint on a Pool/Spa body zone, in the controller's configured units. |
get_config | query | Diagnostic: run a named query against the controller. Leave query blank to fetch the full hardware definition (the data used for discovery). Run from the Script Console. |
get_status | — | Diagnostic: returns the controller's full hardware definition. Day to day you don't need this — zone state updates automatically from push notifications and the backstop poll. |
High / Medium / Low are convenience verbs that map to a brightness value, so they're useful for keypad buttons and scenes without hard-coding a number. For a specific brightness use level with the exact 0–100 value. Both target light circuits; on a non-dimmable circuit a level command has no visible effect.
Known limitations
- Discovery needs the Water and Lights subsystems. Auto-created zones are placed in the Water and Lights subsystems, which GEM creates by default. If a site has removed one of them, the matching zones can't be created — re-add it on the Subsystems page and reload the device.
levelwrites the light's brightness register directly. It is intended for dimmable and color light circuits. Sending it to a non-dimmable on/off circuit won't change its output.- Light colors / themes are not exposed as commands. IntelliBrite and MagicStream color and theme selection is not currently sent by this driver — only on/off and brightness.
- Chemistry and detailed pump telemetry beyond speed are not surfaced. The driver mirrors circuit state, light level, water temperature, setpoints and pump speed. IntelliChem chlorine/pH/ORP readings and other extended telemetry are not currently parsed.
- Schedules are not edited from GEM. Manage IntelliCenter schedules in the Pentair app; GEM reads and writes live runtime state, not the controller's schedule configuration.
Troubleshooting
| Symptom | What to check |
|---|---|
| Connection refused | Confirm the IntelliCenter exposes TCP 6681 (firmware 1.040+). On older builds, enable the IntelliCenter app / remote access in the panel's Settings → Network menu. Verify no firewall or VLAN blocks 6681 between GEM and the panel. |
| Zones never appear | On first connect the driver issues a hardware-definition query. If zones are missing, run the get_config command with query left blank from the Script Console and check the response. Also confirm the Water and Lights subsystems exist on the Subsystems page. |
| A zone has no control surface | Auto-created pump/feature/AUX zones use a basic on/off control. Open the zone on the Zones page and set its Control to Water On/Off. The on/off commands work regardless of the control. |
| State doesn't update after a change at the panel | The controller pushes changes live; the backstop poll runs every status_interval (default 5 s). If updates lag, lower status_interval, and confirm the device shows as connected (reload it and watch for zone values to repopulate). |
| Heat setpoint won't take effect | The controller enforces its own min/max heat range. Confirm the value you sent falls within the body's configured limits in the Pentair app. |
| Temperatures are in the wrong unit | IntelliCenter reports in the unit it is configured for. Change it on the controller (or in the Pentair app) — the driver does not convert the value. |
Choosing between pentair_ip and pentair_screenlogic
| Your controller | Driver |
|---|---|
| IntelliCenter (any model) | pentair_ip |
| IntelliTouch (i5 / i7 / i9 / i10+) with ScreenLogic adapter | pentair_screenlogic |
| EasyTouch (4 / 8) with ScreenLogic adapter | pentair_screenlogic |
IntelliCenter talks directly on TCP 6681 in its own newline-delimited JSON protocol; the IntelliTouch/EasyTouch family talks through a ScreenLogic2 adapter on TCP 80 in a binary protocol. Use the driver that matches your hardware — they cannot be used interchangeably.
Related Documentation
- Devices — adding and managing the IntelliCenter device
- Zones — the auto-created pool/spa/light zones and their controls
- Subsystems — where pool and light zones live (Water and Lights)
- Commands — running driver commands and building macros
- Pentair ScreenLogic — the driver for older IntelliTouch / EasyTouch controllers