Adoucisseur Domao et domotique
J'ai fait installer un adoucisseur Domao 100. Distribué principalement par Cédeo, Brossette et le groupe Saint-Gobain), c'est un appareil vendu en marque blanche. Il s'agit en réalité d'un modèle fabriqué par la société américaine WaterBoss (ou sa maison mère Hague Quality Water / AO Smith), et on le retrouve sous d'autres marques selon les canaux de distribution (AEG, EcoWater, ...). Rien d'original pour cet appareil somme toute assez archaïque.
Il ne s'agit pas d'un appareil connecté, ça existe, mais d'une part c'est bien plus onéreux, et d'autre par propriétaire, souvent inexploitable, avec une application verrouillée et probablement collectrice de données. Un mode connecté pourrait remonter le volume d'eau perdu lors de la régénération, d'éventuelles fuites, le niveau de sel et les phases actives.
Outre les réglages liés à la dureté de l'eau qui doivent êtres réalisées par l'installateur après mesure on peu régler sur ces adoucisseurs l'heure de la régénération et surtout le mode.
Auto (position -—) + Mode 97% ON :l'adoucisseur attend le dernier moment pour lancer la régénération. Très économique en eau, mais peut avoir une incidence sur la prolifération bactérienne.Auto (position -—) + Mode 97% OFF :l'adoucisseur régénère à l'heure programmée (02:00 par défaut) dès que la réserve estimée est insuffisante.Tous les x jours + Mode 97% ON ou OFF :l'adoucisseur forcera la régénération tous les x jours, même en absence. Ca peut être une réponse face à une possible prolifération bactérienne
Les différentes documentations que j'ai trouvées (rien n'est livré) sur ces produits et leur DHM ne sont pas claires et très mal traduites. Tout ceci reste donc de la déduction.
En préalable à toute manipulation, je vous invite à lire cet avertissement important.
Afin de remonter toutes les informations il faudrait installer un débitmètre pour l'eau et un capteur de niveau pour le sel. Ces adoucisseurs consomment quasi pas d'électricité et peu de sel, par contre une centaine de litres d'eau par régénération. Je ne vais pas traiter ces deux sujets pour l'instant, mais uniquement remonter les périodes de régénération, et ce sans souder quoi que ce soit afin de ne pas perdre la garantie du produit.
Information de régénération
Sur la carte électronique (très accessible) il existe une sortie auxiliaire (J4) et dans les menus une option pour commander cette sortie qui est annoncée pour 28 volts CC et ou le + et le - ne sont pas repérés ⚠. Il s'agit de deux bornes Faston de taille différente
J4.1 = 4.8 mm. :➕ (positif)J4.2 = 6.3 mm. :➖ (négatif)
Le fait qu'elles ne soient pas repérées mais de taille différente laisse à penser qu'il s'agit ici que le technicien ne puisse se tromper en connectant un équipement maison. Mais aussi d'éviter tout équipement externe. Faire et fournir un schéma en CC (courant continu) sans indications c'est vraiment n'importe quoi.

Mon idée est d'utiliser cette sortie pour y connecter un optocoupleur et ensuite remonter l'information à Home Assistant via un simple détecteur de fuite Zigbee détourné (un ESP ou un Shelly Uni aurait pu faire le job). Pour cela il faut dans le menu aller configurer l'état de cette sortie en interprétant la documentation qui a du être traduite à l'arrache.

En fait je pense que c'est prévu pour activer des équipements (vannes, etc.) et que la description indique la fonction, ainsi le OFF n'envie aucune tension sur la sortie J4 alors que BP envoie 24 volts CC pendant la régénération. Je n'ai pas testé les autres modes car c'est celui ci qui m'intéresse afin de remonter cette indication.
Le reste est un jeu d'enfant, on découpe les bornes du capteur de fuite afin de les insérer dans l'optocoupleur, on respecte la polarité et on prépare un câble avec les connecteurs Faston et leur isolant, le 4.8 mm sur le rouge (+) et le 6.3 mm sur le noir (-).

Ensuite on teste le montage avec une simple pile de 9 volts, la led doit s'allumer et le binary_sensor: de notre détecteur de fuite, préalablement appairé et configuré, doit passer de OFF à ON (not running / running, ça se configure dans ses paramètres).

A partit de cet état il est bien sur possible d'envoyer des notifications mais surtout de produire des statistiques.
On crée deux sensor: de type history_stats :
sensor:
- platform: history_stats
name: "Durée régénération aujourd'hui"
entity_id: binary_sensor.adoucisseur_regeneration
state: "on"
type: time
start: "{{ today_at('00:00') }}"
end: "{{ now() }}"
min_state_duration: "00:02:00"
- platform: history_stats
name: "Nombre régénérations aujourd'hui"
entity_id: binary_sensor.adoucisseur_regeneration
state: "on"
type: count
start: "{{ today_at('00:00') }}"
end: "{{ now() }}"
min_state_duration: "00:02:00"Ensuite on crée des utility_meter: qui vont nous permettre de conserver des statistiques mensuelles et annuelles (voire plus..) :
utility_meter:
# ==========================================
# CUMUL DES DURÉES DE RÉGÉNÉRATION
# ==========================================
um_adoucisseur_duree_regeneration_mois:
source: sensor.adoucisseur_regenerations_time
name: "Durée régénération (Mois)"
cycle: monthly
um_adoucisseur_duree_regeneration_annee:
source: sensor.adoucisseur_regenerations_time
name: "Durée régénération (Année)"
cycle: yearly
# ==========================================
# CUMUL DU NOMBRE DE RÉGÉNÉRATIONS
# ==========================================
um_adoucisseur_nombre_regenerations_mois:
source: sensor.adoucisseur_regenerations_count
name: "Nombre régénérations (Mois)"
cycle: monthly
um_adoucisseur_nombre_regenerations_annee:
source: sensor.adoucisseur_regenerations_count
name: "Nombre régénérations (Année)"
cycle: yearlyOn peut également faire ça via l'interface pour les réfractaires au YAML
Et en bonus une petite carte basic

type: custom:vertical-stack-in-card
cards:
- type: history-graph
entities:
- binary_sensor.tuya_sensor_02
show_names: false
expand_legend: false
- type: entities
entities:
- entities:
- entity: sensor.adoucisseur_regenerations_time
name: 'Regénération de nuit :'
format: duration-h
entity: binary_sensor.tuya_sensor_02
name: Etat
secondary_info: last-changed
type: custom:multiple-entity-row
column: true
toggle: false
- show_state: false
entities:
- entity: sensor.um_adoucisseur_temps_de_regeneration_mensuel
name: 'Mois :'
format: duration-h
- entity: sensor.um_adoucisseur_temps_de_regeneration_annuel
name: 'Année :'
format: duration-h
entity: sensor.adoucisseur_regenerations_time
name: Temps de regénération
secondary_info: last-changed
type: custom:multiple-entity-row
column: true
toggle: false
icon: mdi:timetable
- show_state: false
entities:
- entity: sensor.um_adoucisseur_nombre_de_regenerations_mensuel
name: 'Mois :'
- entity: sensor.um_adoucisseur_nombre_de_regenerations_annuel
name: 'Année :'
entity: sensor.adoucisseur_regenerations_count
name: Nombre de regénérations
secondary_info: last-changed
type: custom:multiple-entity-row
column: true
toggle: false
icon: mdi:counter
title: AdoucisseurOn peu aussi envoyer une notification (Mobile, Slack, Telegram, SMTP, etc.) et remplir un calendrier (local ou partagé :
alias: GUI - Notification - Adoucisseur
description: ''
triggers:
- trigger: state
entity_id: binary_sensor.tuya_sensor_02
to: 'on'
from: 'off'
for: "00:05:00" # Temporisation lors de mes tests
id: start
- trigger: state
entity_id: binary_sensor.tuya_sensor_02
to: 'off'
from: 'on'
for: "00:05:00"
id: stop
conditions: []
actions:
- choose:
- conditions:
- condition: trigger
id:
- start
sequence:
- action: notify.send_message
metadata: {}
target:
device_id: 94f3851266509b81c284288c4c48cced
data:
message: '{{ states.sensor.date_time.state}} : Début de la régénération'
title: Adoucisseur
- conditions:
- condition: trigger
id:
- stop
sequence:
- action: notify.send_message
metadata: {}
target:
device_id: 94f3851266509b81c284288c4c48cced
data:
message: >-
{{ states.sensor.date_time.state}} : Fin de la régénération -
Durée totale : {{ ((trigger.to_state.last_changed -
trigger.from_state.last_changed).total_seconds() / 60) |
round(0) }} minute(s).
title: Adoucisseur
- action: calendar.create_event
target:
entity_id: calendar.canaletto
data:
summary: Régénération
description: >-
Durée totale : {{ ((trigger.to_state.last_changed -
trigger.from_state.last_changed).total_seconds() / 60) |
round(0) }} minute(s).
start_date_time: '{{ trigger.from_state.last_changed.isoformat() }}'
end_date_time: '{{ trigger.to_state.last_changed.isoformat() }}'
mode: singleCe montage est adaptable à d'autres situations, je l'utilise par exemple comme détecteur de présence électrique avec un optocoupleur AC 230 volts ou pour surveiller plusieurs équipements avec un carte comportant 8 optocoupleurs AC 230 volts, comme je l'avais décrit dans cet article (qui mériterais un rafraichissement).