Energy Management
Integrate with solar and electricity prices.
Smart pool and spa control gives you automatic water quality monitoring, remote control of pumps, heaters, and lights, plus energy-saving automations. With Home Assistant, you can integrate everything into one unified system.
| Monitor | HA Integration | Measures | Price | Status |
|---|---|---|---|---|
| PoolSense | ✅ Native | pH, ORP, temp | 💰💰 | ✅ Active |
| WaterGuru S2 | ❌ App only | pH, Cl, TA, CYA, CH | 💰💰💰 | ✅ Active |
| iopool EcO | ❌ App only | ORP, pH, temp | 💰💰 | ✅ Active |
| DIY ESPHome | ✅ Full local | pH, ORP, temp | 💰 | ✅ Active |
| ⚠️ HACS | pH, Cl, alk | - | ❌ Closing Oct 2025 | |
| - | - | - | ❌ Discontinued 2021 |
Price: ~$200
Only water quality monitor with native Home Assistant integration:
# Settings → Devices → Add Integration# Search for "PoolSense"
# Requires:# - PoolSense email# - PoolSense password
# Entities created:# - sensor.poolsense_ph# - sensor.poolsense_orp# - sensor.poolsense_water_temperature# - sensor.poolsense_batteryautomation: - alias: "Pool - Low pH alarm" trigger: - platform: numeric_state entity_id: sensor.poolsense_ph below: 7.0 for: "01:00:00" action: - service: notify.mobile_app data: title: "⚠️ Pool pH too low!" message: > Pool pH is {{ states('sensor.poolsense_ph') }}. Add pH increaser (base) to raise pH.
- alias: "Pool - High ORP (enough chlorine)" trigger: - platform: numeric_state entity_id: sensor.poolsense_orp above: 750 action: - service: switch.turn_off entity_id: switch.pool_chlorinatorBuy: PoolSense, Amazon
Price: $300 + cassettes ($15/month)
Most advanced optical measurements:
# No official HA integration# Data only available via WaterGuru app
# Workaround: Manual input helpersinput_number: pool_fc: name: Pool Free Chlorine min: 0 max: 10 step: 0.1 unit_of_measurement: "ppm" pool_ph_manual: name: Pool pH (manual) min: 6.5 max: 8.5 step: 0.1Buy: WaterGuru.com, Amazon
Price: ~$200 (including gateway)
Floating water quality monitor:
Buy: iopool.com
Price: ~$50-100
Cheapest solution with full local control:
Components:
esphome: name: pool-sensor platform: ESP32 board: esp32dev
wifi: ssid: !secret wifi_ssid password: !secret wifi_password
api:ota:
# pH Sensor (analog)sensor: - platform: adc pin: GPIO34 name: "Pool pH" id: pool_ph update_interval: 60s unit_of_measurement: "pH" accuracy_decimals: 2 filters: - calibrate_linear: - 0.0 -> 0.0 - 3.3 -> 14.0 # Calibrate with buffer solutions! # pH 4.0 buffer = X volts # pH 7.0 buffer = Y volts # pH 10.0 buffer = Z volts
# ORP Sensor - platform: adc pin: GPIO35 name: "Pool ORP" id: pool_orp update_interval: 60s unit_of_measurement: "mV" accuracy_decimals: 0 filters: - multiply: 1000 # Adjust per module
# Temperature (DS18B20) - platform: dallas_temp address: 0x1234567890ABCDEF # Your sensor address name: "Pool Temperature" update_interval: 60s
# OneWire bus for temp sensorone_wire: - pin: GPIO4calibrate_linear filterfilters: - calibrate_linear: - 2.5 -> 7.0 # Midpoint - 3.0 -> 4.0 # Acidic - 2.0 -> 10.0 # BasicORP typically doesn’t require calibration, but check:
Price: ~$2,000+ (complete system)
Premium pool automation:
# HACS → Custom Repositories# https://github.com/dwradcliffe/intellicenter
# Entities created:# - climate.pool (temperature control)# - climate.spa# - switch.pool_pump# - switch.spa_pump# - switch.pool_heater# - light.pool_light (with color effects)# - sensor.pool_water_temperature# - sensor.air_temperatureautomation: # Sun-based pump operation - alias: "Pool - Run pump during sun hours" trigger: - platform: sun event: sunrise offset: "+01:00:00" action: - service: switch.turn_on entity_id: switch.pool_pump
- alias: "Pool - Stop pump after sunset" trigger: - platform: sun event: sunset offset: "+02:00:00" action: - service: switch.turn_off entity_id: switch.pool_pump
# Energy-optimized heating - alias: "Pool - Heat during low electricity price" trigger: - platform: numeric_state entity_id: sensor.electricity_price below: 0.10 condition: - condition: numeric_state entity_id: sensor.pool_water_temperature below: 78 action: - service: climate.set_temperature entity_id: climate.pool data: temperature: 82Price: ~$2,500+
Competitor to Pentair:
# Settings → Devices → Add Integration# Search for "Hayward OmniLogic"
# Requires Hayward app login# Cloud polling - not local
# Entities:# - sensor.omnilogic_air_temp# - sensor.omnilogic_water_temp# - switch.omnilogic_pump# - switch.omnilogic_heater# - light.omnilogic_lights# For local UDP control:# HACS → Custom Repositories# https://github.com/cryptk/haomnilogic-local
# Requires static IP on OmniLogic# Much faster response than cloudautomation: - alias: "Pool - Adjust chlorinator by ORP" trigger: - platform: numeric_state entity_id: sensor.pool_orp below: 650 for: "00:30:00" action: - service: omnilogic.set_chlor_timed_percent target: entity_id: switch.chlorinator data: timed_percent: 80Native Home Assistant Integration!
Balboa Spa Client supports spas with:
Features:
# Auto-discovered or:# Settings → Devices → Add Integration# Search for "Balboa Spa Client"
# Enter IP address of spa WiFi module
# Entities:# - climate.balboa_spa (temperature)# - switch.balboa_pump_1# - switch.balboa_pump_2# - fan.balboa_blower# - light.balboa_light# - binary_sensor.balboa_heatingautomation: # Preheat spa before use - alias: "Spa - Preheat for weekend" trigger: - platform: time at: "16:00:00" condition: - condition: time weekday: - fri - sat action: - service: climate.set_temperature entity_id: climate.balboa_spa data: temperature: 100
# Energy saving - alias: "Spa - Lower temp at night" trigger: - platform: time at: "23:00:00" action: - service: climate.set_temperature entity_id: climate.balboa_spa data: temperature: 93
# Notification when ready - alias: "Spa - Temperature reached" trigger: - platform: numeric_state entity_id: climate.balboa_spa attribute: current_temperature above: 99 condition: - condition: state entity_id: binary_sensor.balboa_heating state: "on" action: - service: notify.mobile_app data: title: "🛁 Spa is ready!" message: "Water temperature has reached {{ state_attr('climate.balboa_spa', 'current_temperature') }}°F"HACS Lovelace Card for beautiful pool visualization:
# HACS → Frontend → Search "Pool Monitor Card"# Install and restart
# Dashboard configurationtype: custom:pool-monitor-cardsensors: temperature: - entity: sensor.pool_temperature name: "Water Temperature" setpoint: 78 ph: - entity: sensor.pool_ph name: "pH" setpoint: 7.4 step: 0.1 orp: - entity: sensor.pool_orp name: "ORP" setpoint: 700 unit: "mV"type: vertical-stackcards: # Pool Monitor Card - type: custom:pool-monitor-card sensors: temperature: - entity: sensor.pool_temperature ph: - entity: sensor.pool_ph orp: - entity: sensor.pool_orp
# Control buttons - type: horizontal-stack cards: - type: button entity: switch.pool_pump name: Pump icon: mdi:pump - type: button entity: switch.pool_heater name: Heater icon: mdi:water-boiler - type: button entity: light.pool_light name: Light icon: mdi:lightbulb
# Graphs - type: history-graph title: "Pool Temperature (24 hours)" entities: - entity: sensor.pool_temperature hours_to_show: 24automation: # Daily pump cycle based on sun - alias: "Pool - Smart pump operation" trigger: - platform: sun event: sunrise offset: "+02:00:00" action: - service: switch.turn_on entity_id: switch.pool_pump - wait_for_trigger: - platform: sun event: sunset offset: "-01:00:00" - service: switch.turn_off entity_id: switch.pool_pump
# Water quality alarm - alias: "Pool - Water quality problem" trigger: - platform: numeric_state entity_id: sensor.pool_ph above: 7.8 - platform: numeric_state entity_id: sensor.pool_ph below: 7.0 - platform: numeric_state entity_id: sensor.pool_orp below: 600 action: - service: notify.mobile_app data: title: "⚠️ Pool water quality" message: > pH: {{ states('sensor.pool_ph') }} ORP: {{ states('sensor.pool_orp') }} mV Check chemicals!
# Pool party mode - alias: "Pool - Party mode" trigger: - platform: state entity_id: input_boolean.pool_party_mode to: "on" action: - service: light.turn_on entity_id: light.pool_light data: effect: "color_cycle" - service: switch.turn_on entity_id: switch.pool_waterfallEnergy Management
Integrate with solar and electricity prices.
ESPHome Guide
Build your own sensors.
Last updated: December 2025