wilsto / pool-monitor-card

The "Pool Monitor Card" is a home assistant plugin that display information of 1 to 12 pre-defined sensors of your swimming pool : temperature, pH, ORP levels and TDS but also if you need them : salinity, CYA, calcium, phosphate, alkalinity, filter pressure , free chlorine, total chlorine
54 stars 13 forks source link
home-assistant home-automation lovelace-custom-card monitor pool

Pool Monitor Card

hacs_badge

all Click me to see more screenshots

Multilanguage ReadMe

Click on the following button to choose the language of your ReadMe : fr en

TOC


Description

The "Pool Monitor Card" is a home assistant plugin that display information of 12 pre-defined sensors of your swimming pool : temperature, pH, ORP levels and TDS but also if you need them : salinity, CYA, calcium, phosphate, alkalinity, free chlorine, total chlorine, filter pressure

Click me to continue to list 8 other possible sensors - **Salinity**: This measures the amount of salt in the water. A saltwater pool requires a specific range of salt to function properly. The ideal range for salt in a saltwater pool is between 2500 and 3500 ppm. - **CYA**: This stands for Cyanuric Acid and measures the amount of stabilizer in the water. Stabilizer helps to protect the chlorine from being broken down by sunlight. The ideal range for CYA in a pool is between 30 and 50 ppm. - **Calcium**: This measures the amount of calcium in the water. High levels of calcium can lead to scaling on pool surfaces and equipment. The ideal range for calcium hardness in a pool is between 200 and 400 ppm. - **Phosphate**: This measures the amount of phosphate in the water. Phosphates in the water can provide food for algae to grow. The ideal range for phosphate in a pool is below 200-300 ppm. - **Alkalinity**: This measures the ability of the water to resist changes in pH. Proper alkalinity can help to prevent the water from becoming too acidic or alkaline. The ideal range for alkalinity in a pool is between 80 and 120 ppm. - **Free Chlorine**: This measures the amount of active chlorine in the water that is available to sanitize the pool. The ideal range for free chlorine in a pool is between 1 and 3 ppm. - **Total Chlorine**: This measures the combined concentration of both free chlorine and chlorine that has combined with contaminants in the water. The ideal range for total chlorine in a pool is up to 5 ppm. - **Filter pressure**: This measures the pressure inside the pool filter. A high filter pressure can indicate that the filter is dirty and needs to be cleaned. The ideal filter pressure can vary depending on the make and model of the pool filter.


With the "Pool Monitor Card", you can easily monitor these important aspects of your swimming pool and make any necessary adjustments to ensure that the water is safe and comfortable for swimming.


Support

Hey dude! Help me out for a couple of :beers: or a :coffee:!

coffee


Install

via HACS

Until the Home Assistant Pool Monitor card is available by default in the HACS directory, click on: Open your Home Assistant instance and open a repository inside the Home Assistant Community Store.

Manualy

  1. Download the pool_monitor_card.js file from the latest release available and save it in your configuration/www folder.
  2. Go to Configuration > Lovelace dashboard > Resources in Home Assistant and click on Add resource.
    1. Add /local/community/pool-monitor-card/pool_monitor_card.js to the URL.
    2. Choose Javascript Module as Resource type.

Lovelace Set up

Using UI

Not yet possible.

Using YAML

  1. You just need to add a new empty card with type: 'custom:pool-monitor-card' to your cards list and any of the config that you will find below if you want to customize more your card.

Example of code

type: 'custom:pool-monitor-card'
temperature: sensor.your_temperature_sensor
ph: sensor.your_ph_sensor

Parameters

Sensors Options

Here's a list of sensors that may be important to monitor, depending on your pool's specific needs. Maintaining levels within the recommended ranges is essential to keep your pool healthy and swimmable.

*All are optionals but you need to define at least one of theses entities

Name Type Requirement Description Default
type string Required custom:pool-monitor-card
temperature string **Optional*** The entity that measures the water temperature. none
ph string **Optional*** The entity that measures the acidity or basicity of the water. none
orp string **Optional*** The entity that measures the Oxidation Reduction Potential of the water. none
tds String **Optional*** The entity that measures the Total Dissolved Solids in the water. none
salinity String **Optional*** The entity that measures the salt level in the water (for saltwater pools). none
cya String **Optional*** The entity that measures the Cyanuric Acid level in the water. none
calcium String **Optional*** The entity that measures the Calcium Hardness level in the water. none
phosphate String **Optional*** The entity that measures the Phosphate level in the water. none
free_chlorine String **Optional*** The entity that measures the concentration of free chlorine in the water. none
total_chlorine String **Optional*** The entity that measures the concentration of both free chlorine and combined chlorine in the water. none
alkalinity String **Optional*** The entity that measures the alkalinity of the water. none
pressure String **Optional*** The entity that measures the filter pressure in the pool. none

Advanced options

You can go further with the card by modifying the user interface (UI).

User eXperience (UX)

Name Type Requirement Description Default
title string Optional Pool Monitor Card Title none
compact boolean Optional Compact Mode false
show_names boolean Optional Display the name of the entity true
show_labels boolean Optional Display the state qualification (Low, Ideal, High) true
show_last_updated boolean Optional Display the last updated sensor relative date [Only for compact = false] false
language string Optional Interface language (en, fr, es) en

Needed to change the unit, setpoint, and steps ? No problem, see additionnal parameters below for each measured entity .

Temperature

click me to open | Name | Type | Requirement | Description | Default | | -------------- | ----------- | ------------ | ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `temperature_name` | String | **Optional** | Sensor Name |`Temperature` [Multilanguage]| | `temperature_unit` | String | **Optional** | Temperature Unit (°C or °F) |`°C`| | `temperature_setpoint` | Number | **Optional** | Temperature Set Point |If unit=°C:`27`
If unit=°F:`80`| | `temperature_step` | Number | **Optional** | Temperature Step |If unit=°C:`1`
If unit=°F:`2`|

NOTE: I added a second parameter named temperature_2 (with same logic for unit, setpoint, step) for thoses who have multiple temperature sensors.

pH

click me to open | Name | Type | Requirement | Description | Default | | -------------- | ----------- | ------------ | ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `ph_name` | String | **Optional** | Sensor Name |`pH` [Multilanguage]| | `ph_unit` | String | **Optional** | pH Unit |`pH`| | `ph_setpoint` | Number | **Optional** | pH Set Point |`7.2`| | `ph_step` | Number | **Optional** | pH Step |`0.2`|

ORP

click me to open | Name | Type | Requirement | Description | Default | | -------------- | ----------- | ------------ | ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `orp_name` | String | **Optional** | Sensor Name |`ORP` [Multilanguage]| | `orp_unit` | String | **Optional** | ORP Unit |`mV`| | `orp_setpoint` | Number | **Optional** | ORP Set Point |`700`| | `orp_step` | Number | **Optional** | ORP Step |`50`|

TDS

click me to open | Name | Type | Requirement | Description | Default | | -------------- | ----------- | ------------ | ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `tds_name` | String | **Optional** | Sensor Name |`TDS` [Multilanguage]| | `tds_unit` | String | **Optional** | TDS Unit (g/L or ppm) |`g/L`| | `tds_setpoint` | Number | **Optional** | TDS Set Point |If unit=g/L:`4`
If unit=ppm:`4000`| | `tds_step` | Number | **Optional** | TDS Step |If unit=g/L:`1`
If unit=ppm:`1000`|

Salinity

click me to open | Name | Type | Requirement | Description | Default | | -------------- | ----------- | ------------ | ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `salinity_name` | String | **Optional** | Sensor Name |`Salinity` [Multilanguage]| | `salinity_unit` | String | **Optional** | Salinity Unit (ppm or g/L) |`ppm`| | `salinity_setpoint` | Number | **Optional** | Salinity Set Point |If unit=g/L:`4.5`
If unit=ppm:`3000`| | `salinity_step` | Number | **Optional** | Salinity Step |If unit=g/L:`0.5`
If unit=ppm:`500`|

Cyanuric Acid

click me to open | Name | Type | Requirement | Description | Default | | -------------- | ----------- | ------------ | ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `cya_name` | String | **Optional** | Sensor Name |`Cyanuric Acid` [Multilanguage]| | `cya_unit` | String | **Optional** | Cyanuric Acid Unit |`ppm`| | `cya_setpoint` | Number | **Optional** | Cyanuric Acid Set Point | `40` | | `cya_step` | Number | **Optional** | Cyanuric Acid Step |`10`|

Calcium

click me to open | Name | Type | Requirement | Description | Default | | -------------- | ----------- | ------------ | ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `calcium_name` | String | **Optional** | Sensor Name |`Calcium` [Multilanguage]| | `calcium_unit` | String | **Optional** | Calcium Unit |`ppm`| | `calcium_setpoint` | Number | **Optional** | Calcium Set Point | `300` | | `calcium_step` | Number | **Optional** | Calcium Step |`100`|

Phosphate

click me to open | Name | Type | Requirement | Description | Default | | -------------- | ----------- | ------------ | ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `phosphate_name` | String | **Optional** | Sensor Name |`Phosphate` [Multilanguage]| | `phosphate_unit` | String | **Optional** | Phosphate Unit |`ppb`| | `phosphate_setpoint` | Number | **Optional** | Phosphate Set Point | `100` | | `phosphate_step` | Number | **Optional** | Phosphate Step |`100`|

Alkalinity

click me to open | Name | Type | Requirement | Description | Default | | -------------- | ----------- | ------------ | ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `alkalinity_name` | String | **Optional** | Sensor Name |`Alkalinity` [Multilanguage]| | `alkalinity_unit` | String | **Optional** | Alkalinity Unit |`ppm`| | `alkalinity_setpoint` | Number | **Optional** | Alkalinity Set Point | `100` | | `alkalinity_step` | Number | **Optional** | Alkalinity Step |`20`|

Free Chlorine

click me to open | Name | Type | Requirement | Description | Default | | -------------- | ----------- | ------------ | ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `free_chlorine_name` | String | **Optional** | Sensor Name |`Free Chlorine` [Multilanguage]| | `free_chlorine_unit` | String | **Optional** | Free Chlorine Unit |`ppm`| | `free_chlorine_setpoint` | Number | **Optional** | Free Chlorine Set Point | `2` | | `free_chlorine_step` | Number | **Optional** | Free Chlorine Step |`1`|

Total Chlorine

click me to open | Name | Type | Requirement | Description | Default | | -------------- | ----------- | ------------ | ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `total_chlorine_name` | String | **Optional** | Sensor Name |`Total Chlorine` [Multilanguage]| | `total_chlorine_unit` | String | **Optional** | Total Chlorine Unit |`ppm`| | `total_chlorine_setpoint` | Number | **Optional** | Total Chlorine Set Point | `3` | | `total_chlorine_step` | Number | **Optional** | Total Chlorine Step |`1`|

Filter Pressure

click me to open | Name | Type | Requirement | Description | Default | | -------------- | ----------- | ------------ | ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `pressure_name` | String | **Optional** | Sensor Name |`Filter Pressure` [Multilanguage]| | `pressure_unit` | String | **Optional** | Filter Pressure Unit (psi or bar) |`psi`| | `pressure_setpoint` | Number | **Optional** | Filter Pressure Set Point | `20` | | `pressure_step` | Number | **Optional** | Filter Pressure Step |`10`|

Hardware

Here is a non-exhaustive, non-tested and non-affiliated list of different materials that may capture some of the above values:

Brand Model Temp pH ORP TDS HA Support
Bluerriot Blue Connect Plus Gold ✔️ ✔️ ✔️ ✔️ Blog
Flipr AnalysR ✔️ ✔️ ✔️ Component
Inkbird IBS-P01R Bluetooth ✔️ Component
iopool ECO ✔️ ✔️ ✔️ Tuto fr @mguyard
Ondilo ICO Pool ✔️ ✔️ ✔️ ✔️ Component
Zodiac iAqualink eXO iQ ✔️ ✔️ ✔️ Tuto via nodeRED

NOTE: ✔️ indicates that the model is able to measure the specified parameter, while ❌ indicates it is not. The last column is about info to connect it to Home Assistant.

Click me to see more hardware