Gestion d'une pompe de piscine
L’été commence à pointer le bout de son nez, c’est le moment d’envisager la remise en marche de la piscine…
Après plusieurs essais et réflexions diverses sur comment automatiser la filtration (et le robot !), je suis arrivé à un compromis entre complexité d’implémentation et efficacité à l’usage.
Tout d’abord le matériel
Pour activer une pompe, il faut juste mettre en place un interrupteur qu’on prend soin de relier au télérupteur, normalement mis en place dans le boîtier électrique.
Libre à vous de mettre l’interrupteur de votre choix.
Pour ma part, j’ai installé un Sonoff Dual R2, seul modèle à l’époque disposant de 2 relais indépendants.
Et oui, quitte à installer un équipement intelligent, autant qu’il prenne le maximum de fonction :
- activation de la pompe
- activation du projecteur
Comme toujours, les modules Sonoff sont flashés avec un firmware alternatif (EspEASY, EspHome, Tasmota, ...), je parlerai ici de Tasmota que je connais bien.
Principe Général
J’ai décidé que la filtration serait en marche 3 fois sur 24h.
Pourquoi 3 plages ?
Parce-que :)
Plus sérieusement, pas vraiment de recommandations là-dessus mais je pars sur le principe d’avoir besoin de filtrer la journée, avec une pause le midi.
La nuit, la photosynthèse est inactive mais je laisse un moment de filtration pour continuer de répartir les produits dans le bassin (et passer l’eau dans le filtre à sable).
Le temps de filtration va dépendre de la température de l’eau du bassin.
C’est principalement cette valeur qui va varier tout au long de la saison.
Les systèmes vendus avec les piscines sont basés sur une horloge, sur laquelle on active les plages horaires (par 30min en général) de filtration.
On ne va pas réinventer la roue et faire un système basé sur un algorithme de malade pour choisir si c'est mieux de filtrer à 11h52 ou 15h28. Non, nous allons juste reprogrammer une horloge en fonction de critères prédéfinis.
Les explications initiales étant terminées, voici comment j’ai automatisé tout cela.
Configuration Tasmota
De ce côté rien de particulier à faire car nous allons utiliser la fonction Timers (https://tasmota.github.io/docs/Timers/) qui permet de configurer des plages horaires durant lesquelles les relais sont activés/désactivés.
Vous allez me dire que ce n’est finalement pas super automatisé cette affaire, mais c’est là qu’Home Assistant vient rendre tout ça « smart ».
La commande Timer<x>
permet de faire une action sur un relais à une heure donnée.
Les paramètres configurables sont les suivants :
Enable
: activation/désactivation du TimerTime
: l’heure du triggerDays
: liste de jour où le trigger est valide SMTWTFSRepeat
: 1 seule activation ou multiplesOutput
: l’ID du relaisAction
: activation/désactivation
Exemple :
Timer1 {"Enable":1,"Time":"02:23","Window":0,"Days":"--TW--S","Repeat":1,"Output":1,"Action":1}
On a décidé d'avoir 3 plages horaires donc... 6 Timers (start et stop)
Dans la configuration présentée, le Sonoff est sur le topic home/tasmota/piscine-dual
Quelques commandes à passer sur Tasmota pour un comportement logique du relais (état des relais au boot, flag retain ou non sur les topics MQTT, configuration de l'heure, la timezone, summer-time et scan Wi-Fi régulier) :
SwitchRetain 0
PowerOnState 3
timestd 0 0 10 1 3 60
timedst 0 0 3 1 2 120
timezone 99
so56 on
so57 on
Configuration Home Assistant
Nous avons donc besoin de 6 Timers, et plus particulièrement 6 « heures »
- 3 start
- 3 stop
La configuration est la même pour tous les jours de la semaine (SMTWTFS
dans le JSON envoyé à Tasmota)
On utilise donc des input_datetime
Input DateTime : 3 plages horaires
#### HASS ############################################################
#
# input_datetime section
#
#
######################################################################
#### Pool
#
# Filtration Piscine Plage 1 - Start
piscine_start_1:
name: Filtration Nuit Start
has_date: false
has_time: true
# Filtration Piscine Plage 1 - Stop
piscine_stop_1:
name: Filtration Nuit Stop
has_date: false
has_time: true
# Filtration Piscine Plage 2 - Start
piscine_start_2:
name: Filtration Matin Start
has_date: false
has_time: true
# Filtration Piscine Plage 2 - Stop
piscine_stop_2:
name: Filtration Matin Stop
has_date: false
has_time: true
# Filtration Piscine Plage 3 - Start
piscine_start_3:
name: Filtration Aprem Start
has_date: false
has_time: true
# Filtration Piscine Plage 3 - Stop
piscine_stop_3:
name: Filtration Aprem Stop
has_date: false
has_time: true
#
Automation : Configuration Horloge de l'interrupteur
######################################################################
#
# Reconfiguration Timer Sonoff Dual sur changement plages filtration
# - Plage Matin
# - Plage Aprem
# - Plage Soir
#
- alias: '[POOL] [FILTRATION] ReConfiguration Horloge'
id: abcdefgh-398e-4d1f-bcc3-ef9d8eef1fe1
initial_state: true
mode: single
max_exceeded: silent
trigger:
- platform: state
entity_id: input_datetime.piscine_start_1
- platform: state
entity_id: input_datetime.piscine_stop_1
- platform: state
entity_id: input_datetime.piscine_start_2
- platform: state
entity_id: input_datetime.piscine_stop_2
- platform: state
entity_id: input_datetime.piscine_start_3
- platform: state
entity_id: input_datetime.piscine_stop_3
action:
# Pause 5s
- delay: 5 # seconds
# Activation Timers
- service: mqtt.publish
data:
topic: 'home/tasmota/piscine-dual/cmnd/timers'
payload: on
retain: false
#### Piscine Filtration Plage Nuit:
# - Définition Plage 1 (nuit)
# - Input DateTime Plage 1
# - MQTT Pub cmnd Timer1 et Timer2
# START
- service: mqtt.publish
data:
topic: 'home/tasmota/piscine-dual/cmnd/Timer1'
payload_template: '{"Enable":1,"Time":"{{ states.input_datetime.piscine_start_1.state }}","Window":0,"Days":"SMTWTFS","Repeat":1,"Output":1,"Action":1}'
retain: false
# STOP
- service: mqtt.publish
data:
topic: 'home/tasmota/piscine-dual/cmnd/Timer2'
payload_template: '{"Enable":1,"Time":"{{ states.input_datetime.piscine_stop_1.state }}","Window":0,"Days":"SMTWTFS","Repeat":1,"Output":1,"Action":0}'
retain: false
#### Piscine Filtration Plage Matin:
# - Définition Plage 2 (matin)
# - Input DateTime Plage 2
# - MQTT Pub cmnd Timer3 et Timer4
# START
- service: mqtt.publish
data:
topic: 'home/tasmota/piscine-dual/cmnd/Timer3'
payload_template: '{"Enable":1,"Time":"{{ states.input_datetime.piscine_start_2.state }}","Window":0,"Days":"SMTWTFS","Repeat":1,"Output":1,"Action":1}'
retain: false
# STOP
- service: mqtt.publish
data:
topic: 'home/tasmota/piscine-dual/cmnd/Timer4'
payload_template: '{"Enable":1,"Time":"{{ states.input_datetime.piscine_stop_2.state }}","Window":0,"Days":"SMTWTFS","Repeat":1,"Output":1,"Action":0}'
retain: false
#### Piscine Filtration Plage Aprem:
# - Définition Plage 3 (aprem)
# - Input DateTime Plage 3
# - MQTT Pub cmnd Timer5 et Timer6
# START
- service: mqtt.publish
data:
topic: 'home/tasmota/piscine-dual/cmnd/Timer5'
payload_template: '{"Enable":1,"Time":"{{ states.input_datetime.piscine_start_3.state }}","Window":0,"Days":"SMTWTFS","Repeat":1,"Output":1,"Action":1}'
retain: false
# STOP
- service: mqtt.publish
data:
topic: 'home/tasmota/piscine-dual/cmnd/Timer6'
payload_template: '{"Enable":1,"Time":"{{ states.input_datetime.piscine_stop_3.state }}","Window":0,"Days":"SMTWTFS","Repeat":1,"Output":1,"Action":0}'
retain: false
#
On est maintenant capable de faire varier la durée de filtration de la pompe de la piscine avec Home Assistant.
Pourquoi envoyer des plages horaires (Timers
) plutôt qu’un simple Power ON
ou Power OFF
sur Tasmota ?
Tout simplement pour rendre « autonome » la filtration.
Si HA est DOWN, ou inaccessible, ou tout simplement si l'on a fait une erreur de configuration par ailleurs, l'interrupteur Tasmota fonctionne toujours sur la dernière conf envoyée.
La filtration sera toujours opérationnelle.
Home Assistant reprogramme l’horloge de Tasmota.
Tasmota fait fonctionner la pompe en fonction des données envoyées par HA.
Le step suivant : faire varier « automatiquement » les plages de filtration.
Libre à vous de définir de multiples plages horaires.
Dans notre exemple, on va en configurer 3 pour simplifier l’affichage.
On va avoir besoin ici d’ input_select
: une liste déroulante avec nos différentes plages.
Input Select : mode de filtration
# Selecteur T° Piscine
filtration_piscine:
name: 'Filtration Piscine'
options:
- 'All Night'
- '25°C'
- '28°C'
Ensuite nous avons notre seconde automation
qui consiste à modifier les input_datetime
en fonction de la sélection de l’input_select
(en bonus, une notification sur l’application HA Android) :
Automation : programmation des Input DateTime
#
######################################################################
#
# Reconfiguration input_datetime from input_select
#
#### Piscine Programmation Filtration
#
- alias: '[POOL] [FILTRATION] Programmation'
id: abcdefgh-b5a3-4910-ae77-025d32bf1301
mode: single
initial_state: true
trigger:
platform: state
entity_id: input_select.filtration_piscine
condition:
- condition: template
value_template: "{{ trigger.to_state.state != trigger.from_state.state }}"
action:
# Chooser
- choose:
#
#### T° eau 25°C (8h)
# - Plage 1 (nuit) : '01:00:00' - '02:00:00'
# - Plage 2 (matin) : '10:00:00' - '12:30:00'
# - Plage 3 (aprem) : '14:00:00' - '18:30:00'
- conditions:
- "{{ is_state('input_select.filtration_piscine', '25°C') }}"
sequence:
- service: input_datetime.set_datetime
entity_id: input_datetime.piscine_start_1
data:
time: '01:00:00'
- service: input_datetime.set_datetime
entity_id: input_datetime.piscine_stop_1
data:
time: '02:00:00'
- service: input_datetime.set_datetime
entity_id: input_datetime.piscine_start_2
data:
time: '10:00:00'
- service: input_datetime.set_datetime
entity_id: input_datetime.piscine_stop_2
data:
time: '12:30:00'
- service: input_datetime.set_datetime
entity_id: input_datetime.piscine_start_3
data:
time: '14:00:00'
- service: input_datetime.set_datetime
entity_id: input_datetime.piscine_stop_3
data:
time: '18:30:00'
# Notify Android App
- service: notify.mobile_app_android-1
data:
title: "Piscine"
message: "Reconfiguration Pompe : 8h"
data:
subject: "01:00-02:00 10:00-12:30 14:00-18:30"
channel: "Pool"
tag: "pool-prog"
#
#### T° eau 28°C (10h)
# - Plage 1 (nuit) : '01:00:00' - '02:00:00'
# - Plage 2 (matin) : '09:00:00' - '13:00:00'
# - Plage 3 (aprem) : '14:00:00' - '19:00:00'
- conditions:
- "{{ is_state('input_select.filtration_piscine', '28°C') }}"
sequence:
- service: input_datetime.set_datetime
entity_id: input_datetime.piscine_start_1
data:
time: '01:00:00'
- service: input_datetime.set_datetime
entity_id: input_datetime.piscine_stop_1
data:
time: '02:00:00'
- service: input_datetime.set_datetime
entity_id: input_datetime.piscine_start_2
data:
time: '09:00:00'
- service: input_datetime.set_datetime
entity_id: input_datetime.piscine_stop_2
data:
time: '13:00:00'
- service: input_datetime.set_datetime
entity_id: input_datetime.piscine_start_3
data:
time: '14:00:00'
- service: input_datetime.set_datetime
entity_id: input_datetime.piscine_stop_3
data:
time: '19:00:00'
# Notify Android App
- service: notify.mobile_app_android-1
data:
title: "Piscine"
message: "Reconfiguration Pompe : 10h"
data:
subject: "01:00-02:00 19:00-13:00 14:00-19:00"
channel: Pool
tag: "pool-prog"
#
#### Filtration All Night
# - Plage 1 (nuit) : '22:30:00' - '06:30:00'
#
- conditions:
- "{{ is_state('input_select.filtration_piscine', 'All Night') }}"
sequence:
- service: input_datetime.set_datetime
entity_id: input_datetime.piscine_start_1
data:
time: '22:30:00'
- service: input_datetime.set_datetime
entity_id: input_datetime.piscine_stop_1
data:
time: '06:10:00'
# Notify Android App
- service: notify.mobile_app_android-1
data:
title: "Piscine"
message: "Reconfiguration Pompe : all night"
data:
subject: "22:30-06:10"
channel: Pool
tag: "pool-prog"
#
#Etc. Etc..
Dashboard Lovelace
Un petit Dashboard pour afficher les infos et surveiller l'état de la pompe :
Conclusion et améliorations
Le step ultime (que je n’ai toujours pas implémenté) c’est de faire une dernière automation
qui fait varier l’input_select
en fonction de la température de l’eau.
Avec celle-ci, il n’y aura plus rien à toucher dans HA tout le long de l'année.
La T° de l’eau ferait varier l’input_select
qui modifie les input_datetime
qui envoient les nouvelles plages horaires à Tasmota.
Simple !
Voici comment automatiser de manière relativement simple et pas trop complexe la filtration d’une piscine.
Enjoy !