Skip to main content

Hayward Omnilogic

The Hayward Omnilogic driver controls Hayward's HLBASE / HLPRO pool & spa controllers via the public Hayward customer-portal API. It authenticates against haywardomnilogic.com, polls telemetry for the configured MSP site, and dispatches equipment commands (filter pumps, lights, heaters, valves, auxiliary relays) on demand. It is cloud-only — there is no on-LAN protocol published by the vendor.

Status

Built against the public HAAPI XML endpoint. Read paths (Login, GetSiteList, GetMspConfigFile, GetTelemetryData) and write paths (SetUIEquipmentCmd, SetHeaterEnable, SetUIHeaterCmd, SetStandAloneLightShow) are implemented. Schedule create/update, chemistry control, and salt-system commands are not yet wired — capture the EquipmentIds with get_config and use the equipment-on/off path until they land.

Prerequisites

  • Active account at https://www.haywardomnilogic.com — same credentials as the Omnilogic mobile app.
  • The Omnilogic controller is registered to the account and visible in the mobile app.
  • Outbound HTTPS from the GEM controller to www.haywardomnilogic.com (port 443).

Setup

  1. Verify the mobile app works. If the Omnilogic mobile app cannot reach the controller, this driver cannot either — the cloud is the only published path home.
  2. Create the device under System > Devices with driver hayward_omnilogic. Set:
    • username — your haywardomnilogic.com email
    • password — your haywardomnilogic.com password (stored encrypted)
  3. Verify connection. From the Script Console:
    await gem.command({device: <device_id>, action: 'get_sites'});
    You should see one or more entries like [{MspSystemID: 12345, ...}]. The driver auto-selects the first site if the account owns one site; otherwise set msp_system_id explicitly:
    await gem.setAttribute('device', <device_id>, 'msp_system_id', '12345');
  4. Discover equipment IDs.
    await gem.command({device: <device_id>, action: 'get_config'});
    The response includes the full MSP configuration with EquipmentId values per pump / light / heater / aux. Note them down.
  5. (Optional) Create one zone per piece of equipment with address set to the EquipmentId. The poller will surface state changes on each zone.
  6. Test a command.
    await gem.command({device: <device_id>, action: 'set_equipment', address: 8, on: true});

Attributes

Device

AttributeRequiredTypeNotes
usernameyesstringHayward portal email.
passwordyesstring (secure)Hayward portal password.
msp_system_idnostringOmnilogic site ID. Auto-discovered if the account owns a single site; required for multi-site accounts.
polling_intervalnointTelemetry poll interval in ms. Default 60000, minimum 10000.
request_timeoutnointHTTP request timeout in ms. Default 15000.

Runtime-populated (read-only, written by the poller):

AttributeTypeSource
air_temp_fintBackyard.@_airTemp from the parsed telemetry blob
water_temp_fintBodyOfWater.@_waterTemp
flow_statestringBodyOfWater.@_flow
system_statusstringBackyard.@_status

Zone

Zone address is optional. If set, it must match an Omnilogic EquipmentId from get_config.

AttributeTypeSource
statestringon / off derived from the equipment's reported state attribute
speedintfor variable-speed pumps
temp_fintfor heater equipment items

Commands

NameArgsDescription
get_sitesList MSP system IDs visible to the account.
get_configFull MSP configuration (equipment IDs, names, capabilities).
get_telemetryCurrent telemetry snapshot. Refreshes attributes.
set_equipmentaddress, onTurn an equipment item on/off. address = EquipmentId.
set_heateraddress, enabledEnable/disable a heater. address = HeaterId.
set_heater_setpointaddress, temperatureSet heater setpoint in Fahrenheit.
set_light_showaddress, showSet a ColorLogic light show by integer show ID.

Known limitations

  • Cloud-only. There is no LAN path; all traffic goes through haywardomnilogic.com.
  • Telemetry can lag a real-world equipment change by 30–60 seconds.
  • Schedule create / edit / delete is not yet implemented.
  • Salt chlorinator setpoint, ORP/pH dosing, and chemistry feeder commands are not yet implemented.
  • Multi-body-of-water sites (pool + separate spa) are partially handled — telemetry parses the first BodyOfWater; per-body command targeting needs the EquipmentId from get_config.

Troubleshooting

SymptomCheck
login status 2 or http 401 on first connectEmail or password is wrong. Sign in at https://www.haywardomnilogic.com manually to confirm the credentials work.
GetTelemetryData returns empty Parameters blockOmnilogic controller is offline (no WAN path home). Check the controller display + home wifi.
set_equipment returns success but the pool equipment never reactsEquipmentId is wrong, OR an active schedule is overriding the manual command. Verify the EquipmentId via get_config; pause schedules in the Omnilogic mobile app to test.
connect timeoutGEM controller cannot reach www.haywardomnilogic.com. Check DNS + outbound 443.
auth: re-auth: ... repeating in the device logThe portal is rejecting the credentials. Confirm the account is active and not locked out by a password policy.