Contrôler une pompe IntelliFlo depuis Home Assistant

Contrôler une pompe IntelliFlo depuis Home Assistant

Il y a quelques semaines, nous avons partagé avec vous les premiers pas de l'intégration d'un système de régulation de piscine existant dans Home Assistant. Cet article fait suite à ce projet, avec le remplacement de l'ancienne pompe à vitesse fixe par une pompe à vitesse variable IntelliFlo Whisterflo VSF, que nous contrôlerons à l'aide d'un Yocto-RS485-V2.



Pourquoi cette nouvelle pompe ?

L'intérêt majeur du remplacement de l'ancienne pompe de circulation par une pompe à vitesse variable est l'économie d'énergie. En effet, non seulement la technologie de moteur sans balais à aimant permanent piloté par un contrôleur électronique est plus efficace à régime égal, mais en plus elle permet d'adapter le régime de pompage au point idéal en fonction de l'installation de filtration et des conditions environnementales.

Les pompes de circulation de piscine à vitesse variable les plus renommées sont fabriqué par la firme Pentair, sous la dénomination IntelliFlo VSF. Les modèles varient en fonction de la capacité, de la région d'achat et du canal de vente, mais le fonctionnement semble être très similaire pour tous. En Suisse, le pisciniste nous a proposé le modèle IntelliFlo WhisperFlo VSF

La nouvelle pompe de course
La nouvelle pompe de course


La pompe inclut une horloge et peut donc parfaitement fonctionner sur des horaires préprogrammés de manière autonome. Mais même si l'autonomie de la pompe est un critère de fiabilité intéressant, nous aimerions évidemment pouvoir en plus contrôler son fonctionnement sur le panneau de contrôle Home Assistant que nous avons mis en place il y a quelques semaines, en commençant par la remontée d'informations sur le régime de fonctionnement de la pompe.

Comment contrôler une pompe Pentair IntelliFlo VSF ?

Les pompe Pentair sont équipées d'une interface RS485 destinée à les relier à panneau de contrôle Pentair. Il est donc avéré qu' il est possible d'obtenir les informations de la pompe et de la configurer depuis cette interface. Malheureusement, les messages échangés ne suivent pas le standard MODBUS, mais utilisent un protocole propriétaire de Pentair, qui n'est pas officiellement documenté. Il va donc falloir chercher un peu...

Première source d'information, nous avons acheté avec la pompe un petit module de commande externe Pentair IntelliCom 2 qui permet d'activer la pompe en fonction de contacts externes. En branchant notre Yocto-RS485-V2 sur le même bus, nous pouvons observer les messages échangés et essayer de les rejouer pour piloter la pompe directement.

Deuxièmement, le protocole Pentair a été analysé et décodé par quelques propriétaires de systèmes de contrôle Pentair. On trouve notamment sur GitHub le projet OPNpool, qui permet de contrôler un système de filtration de piscine Pentair complet avec une interface de domotique, en se basant sur un module ESP32. Nous ne pouvons pas réutiliser directement ce projet, car il s'appuie sur la présence d'un panneau de contrôle Pentair alors que nous voulons un contrôle direct de la pompe, mais sa documentation contient les explications nécessaires pour comprendre comment fonctionne le protocole RS485 de Pentair.

Protocole utilisé par la pompe Pentair

Les messages ont la forme suivante:

FF 00 FF A5 00 {dst} {src} {type} {len} ... {chksum}


Les octets {dst} {src} indiquent la direction du message:

  • 60 10 si le message est pour la pompe
  • 10 60 si le message vient de la pompe

Les octets {type} {len} indiquent le type de message et sa longueur, par exemple:

  • 07 00 pour une demande de statut à la pompe
  • 07 0f ... pour la réponse de statut (codée sur 15 octets, voir ci-dessous)
  • 04 01 FF pour verrouiller la commande manuelle sur la pompe
  • 04 01 00 pour déverrouiller la commande manuelle sur la pompe
  • 01 04 {reg} {val} pour modifier la configuration de la pompe

La somme de contrôle {chksum} codée sur les deux derniers octets est directement la somme des octets du message, en big endian, à partir de l'octet A5 (les FF 00 FF ne sont pas pris en compte dans la somme).

La pompe n'envoie pas spontanément de message, mais elle répond à tous les messages corrects qu'elle reçoit.

Message de statut

Le message de statut de la pompe est l'un des plus intéressant, car il fournit une quantité d'informations sur son état, encodées sur 15 octets:

  • ready (un octet): 04 si la pompe a été désactivée, 0A si elle est prête à pomper
  • prog (un octet): le numéro du programme en cours d'exécution
  • state (un octet): état de pompage, normalement 02. Il vaudrait 00 en cas d'erreur, et 01 ou 04 durant la mise en eau, mais nous n'avons pas eu l'occasion de le vérifier
  • power (deux octets, big-endian): puissance consommée, en Watt
  • rpm (deux octets, big-endian): vitesse de rotation, en tours par minute
  • flow (un octet): débit dans la pompe, en gallons par minute
  • pct (un octet): pourcentage de la puissance de la pompe (?)
  • ?? (un octet): un octet mystérieux...
  • err (un octet): code d'erreur, ou 00 si tout va bien
  • remain (deux octets, HH:mm): temps d'exécution restant du programme en cours
  • timeOfDay (deux octets, HH:mm): l'heure actuelle d'après la pompe


Voici un exemple d'interrogation de la pompe fait manuellement avec le Yocto-RS485-V2, en le raccordant directement à la pompe (sans rien d'autre sur le bus RS485):

Demande de statut et réponse
Demande de statut et réponse


Les quinze octets de statut sont:

0A 06 02 02 C1 08 FF 33 0E 00 00 04 1D 11 1F


On y voit donc que:

  • la pompe est prête
  • elle exécute le programme 6
  • elle est en mode pompage
  • elle consomme 705 W (en hexadécimal: 0x02c1)
  • elle tourne à 2303 rpm(en hexadécimal: 0x08ff)
  • le débit est de 51 gpm (en hexadécimal: 0x33)

On peut donc effectivement d'obtenir en temps réel tous les paramètres importants de la pompe par le bus RS485 comme on l'espérait.

Activation de la pompe à distance

Pour activer la pompe à distance, il faut utiliser la commande générique 01 qui sert à modifier la configuration de la pompe. La manière la plus officielle consiste à configurer préalablement sur la pompe un ou plusieurs des 4 programmes externes disponibles - correspondant à des vitesses différentes, par exemple - et à activer le programme désiré en envoyant la commande 01 pour écrire dans le registre 0321 de la pompe l'une des valeurs 08, 10, 18 ou 20 respectivement pour les programmes externes 1, 2, 3 ou 4. C'est la méthode utilisée par le module Pentair IntelliCom 2 que nous avons analysé.

L'activation d'un programme externe par cette méthode ne dure qu'une minute. Après, la pompe s'arrête automatiquement, probablement par mesure de sécurité. C'est pourquoi le module Pentair IntelliCom 2 répète la commande toutes les 45 secondes, tant que le programme doit être maintenu actif. En observant les messages envoyés par le module IntelliCom 2, nous avons aussi découvert le message qui permet de déverrouiller le panneau de contrôle sur la pompe. En effet, après la réception de la plupart des messages, le panneau de commande manuel sur la pompe reste verrouillé pour quelques dizaines de secondes. La commande 04 01 00 fait exception, puisqu'elle sert justement à déverrouiller immédiatement le panneau de commande. Le déverrouillage est très important pour permettre un fonctionnement manuel directement sur la pompe, par exemple pour la désactiver lors d'opérations de maintenance ou pour déclencher manuellement un contre-lavage du filtre.

Voici donc la trace d'un Yocto-RS485-V2 qui génère les mêmes messages que le module Pentair IntelliCom 2 pour demander l'activation du programme externe no 1, mais demande en plus le statut de la pompe avant de libérer immédiatement le panneau de commande sur la pompe:

Activation du programme externe no 1 et demande de statut
Activation du programme externe no 1 et demande de statut


Mettre ensemble tous les morceaux

Maintenant que nous savons comment contrôler la pompe, il ne reste plus qu'à mettre tous les morceaux ensemble pour intégrer la pompe IntelliFlo WhisperFlo VSF dans notre panneau de contrôle piscine dans Home Assistant: la pompe est raccordée par RS485 au Yocto-RS485-V2, branché à un YoctoHub-Ethernet qui se connecte directement au broker MQTT utilisé par Home Assistant.

Intégration de la pompe IntelliFlo jusqu'à Home Assistant
Intégration de la pompe IntelliFlo jusqu'à Home Assistant


Configuration du Yocto-RS485

Pour commencer, à l'aide de l'outil VirtualHub, nous donnons le nom logique IntelliFlo au module Yocto-RS485, pour ne pas le confondre avec celui qui sert à interroger le compteur électrique de la piscine. Nous le configurons pour 9600 bauds 8/N/1, puisque ce sont les conventions utilisées par la pompe Pentair IntelliFlo.

Pour remonter les informations sur l'état de la pompe au broker MQTT, la meilleure méthode consiste à configurer sur le Yocto-RS485-V2 un job d'interrogation automatique. Ainsi, les valeurs mesurées seront publiées automatiquement à travers les fonctions genericSensor du module, sans qu'il soit nécessaire de configurer Home Assistant pour gérer explicitement la communication série.

On configure donc sur le Yocto-RS485-V2 un nouveau job de type custom protocol, qui exécute périodiquement (toutes les 45 secondes) les commandes suivantes:

writeHexFF00FFA50060100401FF0219
expectFF00FFA50010600401FF0219
writeHexFF00FFA50060100700011C
expectFF00FFA5001060070F($ready:BYTE)($prog:BYTE)($state:BYTE)
   ($power:WORD)($rpm:WORD)($flow:BYTE)($pct:BYTE)(WORD)
   ($remHour:BYTE)($remMin:BYTE)(DWORD)
writeHexFF00FFA5006010040100011A
expectFF00FFA5001060040100011A


La commande writeHex envoie les octets passés en paramètre au format hexadécimal, tandis que la commande expect attend la réponse correspondante. Nous avons mis en gras la partie qui correspond aux commandes elles-mêmes, telles que décrites précédemment.

Dans la commande expect qui reçoit le message de statut, les expressions entre parenthèses servent à assigner la valeur lue à cet endroit du message à une variable, pour pouvoir ensuite la publier à travers un genericSensor1..7 à l'aide des expressions suivantes qui sont rajoutées au job:

compute$1 = $power
compute$2 = $rpm
compute$3 = $flow * 0.2271
compute$4 = $pct
compute$5 = ($ready != 0xa ? -1 : $state)
compute$6 = $prog
compute$7 = $remHour*60+$remMin


En réalité, pour les variables comme la puissance ($power) qui sont publiées telles quelles, on aurait pu mettre $1 directement dans l'expression expect. Mais le fait de passer par une variable rend l'expression plus explicite, ce que nous préférons. Pour le débit ($flow), l'expression nous permet de faire la conversion d'unité de Gallon/min à m3/h au passage. Enfin, l'expression permet aussi de rassembler plusieurs variables dans une seule valeur dans un seul genericSensor lorsque cela se justifie.

Il ne reste plus qu'à configurer le nom logique et l'unité de mesure des genericSensor que nous avons utilisés, afin qu'ils soient facilement repérables dans Home Assistant:

Configuration du Yocto-RS485-V2
Configuration du Yocto-RS485-V2


Et surtout, ne pas oublier d'activer les timed reports à la fréquence désirée pour l'envoi des informations sur MQTT:

Configuration de la fréquence de transmission des mesures
Configuration de la fréquence de transmission des mesures



Une fois le job lancé, on peut vérifier dans la fenêtre d'interface du Yocto-RS485-V2 (accessible par l'interface Web du YoctoHub-Ethernet) que la communication se passe comme prévu. On peut aussi voir les valeurs mesurées dans la liste des modules si on active l'option show device functions.


Communication automatique avec la pompe Valeurs mesurées collectées



Récupération des mesures dans Home Assistant

Grâce au callback MQTT configuré sur le YoctoHub-Ethernet lors de notre précédent article, ces nouvelles valeurs sont directement mises à disposition de Home Assistant. Si l'on navigue dans la liste des Devices MQTT, on y trouve notre interface RS485 nommée IntelliFlo:

Interface RS485 détectée par la discovery MQTT
Interface RS485 détectée par la discovery MQTT


En cliquant dessus, on obtient les mesures de la pompe, en direct:

Les mesures détectées par la discovery MQTT
Les mesures détectées par la discovery MQTT


On peut donc les ajouter au panneau de contrôle de la piscine sur Home Assistant par un simple click sur le lien Add to dashboard. Quelques clicks supplémentaires permettent de mettre des icônes personnalisées, et le tour est joué:

La pompe IntelliFlo est intégrée au panneau de contrôle
La pompe IntelliFlo est intégrée au panneau de contrôle


En cliquant sur une mesure, on obtient directement le graphique de l'historique. Voici par exemple l'historique de la puissance consommée par la pompe, qui est pour l'instant configurée pour fonctionner de manière autonome (sur horaire) en filtration à débit fixe de 12 m3/h:

Consommation de la pompe IntelliFlo à flux constant
Consommation de la pompe IntelliFlo à flux constant


On constate une intéressante augmentation de la puissance consommée, alors que le débit demandé n'a pas changé. Pourquoi? Parce que le filtre à sable commençait à être sérieusement sale. Un petit contre-lavage du filtre, et le consommation électrique rebaisse de 20%. Intéressant...

La consommation baisse de 20% après un contre-lavage
La consommation baisse de 20% après un contre-lavage



Conclusion

Nous avons pu vérifier qu'il suffit d'un Yocto-RS485-V2 pour tirer le meilleur d'une pompe à vitesse variable Pentair IntelliFlo VSF. L'ajout d'un YoctoHub-Ethernet nous permet d'y accéder directement par le réseau, mais nous aurions aussi pu mettre à la place un mini-PC à proximité avec l'outil VirtualHub: le résultat aurait été identique.

On constate qu'à débit équivalent, selon le manomètre du le filtre à sable, la nouvelle pompe consomme environ 20% de moins que l'ancienne. Mais on peut faire des économies supplémentaires en filtrant à débit un peu plus faible, et plus longtemps. La possibilité d'obtenir toutes les mesures permettra d'optimiser ce paramètre.

La remontée des informations de la pompe vers Home Assistant fonctionne parfaitement, avec un bénéfice inattendu: il sera possible de mettre en place une notification automatique quand le moment est venu de laver le filtre, et ce lavage à une incidence vraiment significative sur la consommation électrique de la circulation de la piscine.

Enfin, verrons dans un prochain article comment déclencher depuis Home Assistant les commandes pour activer des périodes de filtration supplémentaires lorsque le mesure de température de l'eau indique que c'est nécessaire.

Commenter aucun commentaire Retour au blog












Yoctopuce, get your stuff connected.