Pool Monitor Card
Keep your swimming pool safe and crystal clear by monitoring up to 25 water chemistry parameters at a glance.
Visual editor included — configure everything from the UI, no YAML needed.

See all configurations and visual tests
Upgrading from v1? The sensor configuration format changed in v2. See the Migration Guide.
Why this card?
Whether you have a chlorine pool, a saltwater system, or a heated spa, this card gives you an instant visual overview of your water quality — right from your Home Assistant dashboard.
Color-coded gradient bars show you at a glance if each parameter is in its ideal range. No need to memorize numbers or look up charts.
Preset ideal ranges for all 20 pool parameters mean you can get started with just an entity ID — the card knows what "good" looks like for pool water.
What you can do
- Check if the water is safe before letting the kids swim
- Monitor pH and ORP trends after adding chemicals to see the effect over time
- Track chlorine levels to catch sanitization drops early
- Watch filter pressure to know when to backwash
- Compare pool vs. spa temperature with multiple sensors per type
Sensors (25 presets)
Every sensor comes with preset ideal ranges — just point to your entity and the card handles the rest. Override any value to match your setup.
Essential Water Chemistry
The core parameters every pool owner should monitor for safe, comfortable swimming.

| Sensor | Key | Unit | Default Setpoint |
|---|---|---|---|
| Temperature | temperature |
°C | 27 |
| pH | ph |
pH | 7.2 |
| ORP | orp |
mV | 700 |
| TDS | tds |
g/L | 5 |
| Electrical Conductivity | ec |
µS/cm | 4000 |
Chemical Balance
Keeping these balanced prevents algae, scaling, and equipment damage.

| Sensor | Key | Unit | Default Setpoint |
|---|---|---|---|
| Salinity | salinity |
ppm | 3000 |
| Cyanuric Acid | cya |
ppm | 40 |
| Calcium | calcium |
ppm | 300 |
| Phosphate | phosphate |
ppb | 50 |
| Alkalinity | alkalinity |
ppm | 100 |
Treatment & Sanitization
These tell you if your disinfection system is working properly.

| Sensor | Key | Unit | Default Setpoint |
|---|---|---|---|
| Free Chlorine | free_chlorine |
ppm | 3 |
| Total Chlorine | total_chlorine |
ppm | 3 |
| Bromine | bromine |
ppm | 4 |
| Filter Pressure | pressure |
psi | 12 |
| Specific Gravity | specific_gravity |
sg | 1.1 |
| Magnesium | magnesium |
ppm | 1200 |
| Chlorinator Setting | chlorinator |
% | 50 |
Equipment & Maintenance
Track the health of your pool equipment and supply levels.

| Sensor | Key | Unit | Default Setpoint |
|---|---|---|---|
| Water Level | water_level |
% | 100 |
| Flow Rate | flow_rate |
m³/h | 10 |
| UV Radiation | uv_radiation |
mW/cm² | 4 |
| Product Volume | product_volume |
L | 20 |
| Product Weight | product_weight |
kg | 25 |
| Pump Speed | pump_speed |
% | 50 |
| Light Brightness | light_brightness |
% | 80 |
| Heat Pump Setpoint | heat_pump_setpoint |
°C | 28 |
Hayward OmniLogic users: The
chlorinator,pump_speedandheat_pump_setpointpresets map directly to OmniLogic entities (sensor.*_chlorinator_setting,sensor.*_pump_speed, etc.). Useavailability_entityto gray out equipment rows when the device is off.
For detailed explanations of each sensor and why it matters, see Sensor Details.
Compatible Hardware
Community-tested devices and their supported parameters:
| Brand | Model | Temp | pH | ORP | TDS | HA Support |
|---|---|---|---|---|---|---|
| Bluerriot | Bluerriot Blue Connect | ✔️ | ✔️ | ✔️ | ❌ | Blog |
| Bluerriot | Bluerriot Blue Connect Plus Gold | ✔️ | ✔️ | ✔️ | ✔️ | Blog |
| Flipr | Flipr AnalysR | ✔️ | ✔️ | ✔️ | ❌ | Component |
| Inkbird | Inkbird IBS-P01R | ✔️ | ❌ | ❌ | ❌ | Component |
| iopool | iopool ECO | ✔️ | ✔️ | ✔️ | ❌ | Tuto fr |
| Ondilo | Ondilo ICO Pool | ✔️ | ✔️ | ✔️ | ✔️ | Component |
| Zodiac | Zodiac iAqualink eXO iQ | ✔️ | ✔️ | ✔️ | ❌ | Tuto via nodeRED |
| Tuya | Tuya BLE-YL01 | ✔️ | ✔️ | ✔️ | ✔️ | Tuto |
| Hayward | OmniLogic / OmniPL | ✔️ | ✔️ | ✔️ | ❌ | Component |
✔️ = supported, ❌ = not supported. See more hardware
Know a device that works? Open an issue to add it!
Installation
HACS (recommended)
- Open HACS → Frontend → search for Pool Monitor Card
- Install and reload your browser
Manual
- Download
pool-monitor-card.jsfrom the latest release - Copy to
config/www/community/pool-monitor-card/ - Add resource:
/local/community/pool-monitor-card/pool-monitor-card.js(type: module)
Quick Start
Visual Editor (recommended)
- In your dashboard, click Edit Dashboard (pencil icon)
- Click + Add Card → select Manual → type
custom:pool-monitor-card - Click Show Visual Editor to configure sensors, display options and colors — no YAML needed

YAML
type: custom:pool-monitor-card
title: "My Pool"
sensors:
temperature:
entity: sensor.your_temperature_sensor
ph:
entity: sensor.your_ph_sensor
orp:
entity: sensor.your_orp_sensor
That's it! The card uses sensible defaults for everything else.
Configuration
All options below are also available in the visual editor.
| Option | Type | Default | Description |
|---|---|---|---|
title |
string | — | Card title |
sensors |
object | — | Sensor definitions (see below) |
display.compact |
boolean | false |
Compact display mode |
display.show_names |
boolean | true |
Show sensor names |
display.show_icons |
boolean | true |
Show sensor icons |
display.show_units |
boolean | true |
Show units |
display.show_labels |
boolean | true |
Show range labels |
display.gradient |
boolean | true |
Show gradient bar |
display.show_last_updated |
boolean | false |
Show last update time |
display.show_icons |
boolean | true |
Show sensor icons |
language |
string | en |
Language code |
Per-sensor options
sensors:
temperature:
entity: sensor.xxx # required
name: Custom Name # override display name
unit: "°C" # override unit
setpoint: 25 # ideal value
min: 10 # min of the range
max: 40 # max of the range
step: 2 # threshold step for colors
icon: mdi:thermometer # MDI icon
mode: centric # centric | heatflow
availability_entity: binary_sensor.heat_pump # gray out when off/unavailable
| Option | Type | Description |
|---|---|---|
entity |
string | Required. Entity ID |
name |
string | Override display name |
unit |
string | Override unit |
setpoint |
number | Ideal value |
min / max |
number | Range boundaries |
step |
number | Threshold step for colors |
icon |
string | MDI icon (e.g. mdi:thermometer) |
mode |
string | centric or heatflow |
availability_entity |
string | Entity to track — grays out the row when off or unavailable |
Color modes
| Mode | Gradient | Badge color | Best for |
|---|---|---|---|
centric |
warn → low → normal → low → warn | Matches gradient zone | pH, ORP — ideal value in the center |
heatflow |
cool → low → warn (blue → orange → red) | Green when ideal | Temperature — natural thermal scale |
In centric mode, the gradient and badge use the same colors — you see at a glance which zone the value is in.
In heatflow mode, the gradient shows the physical temperature scale (cold to hot), while the badge uses green to indicate the value is in the ideal range. Two complementary readings: where on the scale vs is it good.
Multiple sensors of the same type
sensors:
temperature:
- entity: sensor.sensor_1
name: Location 1
- entity: sensor.sensor_2
name: Location 2
Languages
12 languages supported: 🇬🇧 English, 🇫🇷 French, 🇩🇪 German, 🇪🇸 Spanish, 🇮🇹 Italian, 🇵🇹 Portuguese, 🇳🇱 Dutch, 🇵🇱 Polish, 🇨🇿 Czech, 🇸🇰 Slovak, 🇮🇱 Hebrew, 🇷🇺 Russian.
Support
Acknowledgments
This card wouldn't be what it is today without our amazing contributors!
- Gregtakacs — Min/Max Tickers and custom bar colors
- Djgel — Specific gravity measurements + Portuguese translation
- JDeighty4 — Magnesium sensor support
- Sebaer1976 — German translation
- Splitti — German translation
- jorgemiguel4 — Portuguese translation
- CosminFRC — Romanian translation
- Misa1515 — Slovak translation
- ViPeR5000 — Polish translation
- Yehuda — Hebrew translation
- MrSnakeSPb — Russian translation
- hlaffez — Tuya BLE-YL01 compatibility
- DAVIZINH0 — Bluerriot compatibility information
- Sangoku — Bromine sensor support
- smashtup — Display precision fix (Entity Registry)
- taczirjak — Hungarian translation
- KIDNORswe — Swedish translation
- FejbyK — Czech translation
Monitor Cards Family
This card is part of the monitor-cards family — same rendering engine, same features, different presets:
| Card | For | Sensors |
|---|---|---|
| Pool Monitor Card | Pool & spa owners | 25 presets ← you are here |
| Aquarium Monitor Card | Freshwater & saltwater aquarium keepers | 15 presets |
| Air Quality Card | Homeowners concerned about indoor air quality | 12 presets |
| Sensor Monitor Card | Home Assistant power users | unlimited (custom) |
