Oklyn pool controller — custom integration + Lovelace card (HACS)

Hi everyone,

I own an Oklyn pool controller (a French pool monitoring box: pH, ORP, water/air temperature, pump and 2 auxiliary outputs). I originally integrated it with REST sensors, but after building a DIY chlorine doser with a peristaltic pump driven by one of the auxiliaries, the YAML got messy — so I rewrote everything as a proper HACS integration, and I'm sharing it here.

Integration: GitHub - ADNPolymerase/hacs.oklyn: Home Assistant custom integration for Oklyn pool controller · GitHub

  • Full UI config, just paste your API key
  • pH, ORP/RedOx, water & air temperature sensors
  • Pump as a 3-mode select (auto/on/off) with the real running state exposed even in auto mode
  • Both auxiliaries: optional, renamable, and configurable as switch (controllable) or regulator (read-only binary_sensor — that's what I use for my chlorine doser, so I can see it running without being able to toggle it by mistake)

Companion card: GitHub - ADNPolymerase/hacs.oklyn-card: Card for Oklyn integration · GitHub
No dependency, full visual editor: pH/ORP with color thresholds, pump buttons, aux controls, and a pH calibration offset (my probe drifts by ~1, I just set -0.99 and the card shows the corrected value).

Both install via HACS → Custom repositories.

I only have one unit to test with, so feedback from other Oklyn owners is very welcome — especially if your aux 2 is actually wired (mine returns HTTP 400). Issues and PRs open on GitHub!

Big update following early feedback! :tada:

ha-oklyn v0.2.5 (integration):

  • :salt: Salt sensor: new sensor.oklyn_salt entity (g/L) for salt water pools
  • :clipboard: Oklyn model selector in the config flow and options, matching the official lineup:
    • Filtration — temperatures, pump, auxiliaries
    • Filtration + Analysis — adds pH and RedOx
    • Filtration + Analysis + Salt — adds the salt sensor
  • Bonus for the base Filtration model: the integration no longer polls the pH/ORP endpoints at all (fewer API calls, no dead entities)

oklyn-card v0.2.10 (Lovelace card):

  • :clipboard: Same model selector at the top of the card editor: the card only shows the metrics your controller actually has, and the editor only shows the relevant options (no more endless menu)
  • :salt: Salt tile with a configurable green zone (turns orange when out of range)
  • :artist_palette: Customizable auxiliary icons with the native MDI icon picker (search by name)
  • :rainbow: Per-metric color coding: each metric (pH, RedOx, salt, water temperature) has its own toggle that reveals its min/max thresholds
  • :stopwatch: New optional "Filtration 24h" tile: cumulative actual pump runtime over the last rolling 24 hours, computed from the recorder history — scheduled runs and manual ON both count. Handy to verify your filtration target is actually met
  • :wrench: More reliable HACS updates (the card file is now attached as a release asset)

Upgrading: update both through HACS (everything is stable, no beta channel needed), restart HA for the integration, and hard-refresh your browser (Ctrl+Shift+R / Cmd+Shift+R) for the card. Existing configurations migrate automatically — nothing to redo.

I don't own a salt water pool, so the salt sensor is implemented from the API docs without real-world testing: feedback with actual salt readings is very welcome! If everything checks out, v0.3.0 is next. :rocket:

Update: v0.2.5 → v0.5.0

New since the last update:

  • Pump running binary_sensor — reflects the real electrical state of the pump, independent from the commanded mode (useful to detect if the pump physically stopped despite being commanded ON)
  • status attribute on pH, RedOx, temperature and salt sensors — exposes the Oklyn alert level (normal / low / high), which the companion Oklyn Card can use directly for color coding
  • Fixed a bug where the "last reading" timestamp was always empty (the API returns the field as "recorded", not "measured_at")
  • Added 8 new languages: German, Dutch, Spanish, Italian, Swedish, Norwegian, Danish and Polish (on top of English and French)

Also new: a local, read-only companion integration — ha-oklyn-local. It polls the controller directly over your LAN (HTTP, port 80), no cloud, no account, no token needed. Good fit if you just want to read pH/ORP/temperature/pump status without depending on the Oklyn cloud API. Note it's read-only (no pump/AUX control) — for control you still need the cloud integration above.

Still on the roadmap: HACS default store submission is pending review for all three projects (currently in the community PR queue).

Integration (cloud): GitHub - ADNPolymerase/ha-oklyn: Home Assistant custom integration for Oklyn pool controller · GitHub
Integration (local, read-only): GitHub - ADNPolymerase/ha-oklyn-local: POC Home Assistant custom integration: local read-only polling of an Oklyn pool controller (no cloud, no writes). · GitHub
Companion card: GitHub - ADNPolymerase/oklyn-card: Card for Oklyn integration · GitHub

More of my Home Assistant projects: ADNPolymerase — Home Assistant Projects