Stéphane.
AutomationEn cours

Évacuation automatique des condensats de climatisation

Pilotage d'une pompe immergée par Raspberry Pi et prise Shelly : deux flotteurs à contact sec, aucune manipulation du 230 V côté carte, interface Web embarquée et douze sécurités.

Technologies employées

  • Python
  • Flask
  • gpiozero
  • Raspberry Pi OS
  • systemd
  • Shelly RPC
  • pytest
  • ruff

Résumé

Une climatisation rejette ses condensats dans un bac sans écoulement gravitaire. Deux flotteurs à contact sec renseignent un Raspberry Pi sur le niveau ; quand l’eau atteint la sonde haute, une prise Wi-Fi Shelly alimente une pompe immergée qui transfère le bac vers un bidon. Le cycle s’arrête lorsque la sonde basse se découvre.

Climatiseur monobloc Midea posé sur une terrasse en bois. Un bac transparent est glissé sous l’appareil et un tuyau souple rejoint un jerrican gris posé à gauche.
L’installation complète : le groupe extérieur, le bac glissé dessous et le bidon de récupération relié par le tuyau de refoulement.

Contexte

Vider le bac à la main est une corvée quotidienne, et un oubli suffit à faire déborder l’eau. Les solutions du commerce sont soit des pompes à marche continue, soit des contacteurs à flotteur pilotant directement le secteur — sans supervision, sans journal, et sans rien pour arrêter la pompe si le flotteur se bloque.

Bac plastique transparent placé sous la grille de ventilation du climatiseur, laissant voir la pompe et le tuyau à l’intérieur.
Le bac de récupération, glissé sous le groupe : c’est lui que la climatisation remplit et que le système doit vider.

Objectifs

  • Automatiser le cycle de vidange sans intervention.
  • Rendre l’état du système lisible à distance, avec un historique.
  • Ne jamais laisser la pompe tourner à sec ni au-delà de la durée d’un cycle.

Contraintes

  • Le Raspberry Pi ne doit jamais commuter le 230 V. Ses GPIO restent en 3,3 V.
  • Le système doit rester sûr si le Raspberry plante ou perd le réseau.
  • Aucune dépendance à Internet : tout fonctionne en réseau local.
  • Le code doit être développable et testable sans le matériel.

Architecture

Le Raspberry Pi lit les deux flotteurs sur des GPIO en pull-up interne — contacts secs, aucune alimentation ni résistance externe — et commande le secteur indirectement, par requête HTTP vers l’API RPC locale de la prise Shelly. Le cloud du fabricant n’est jamais sollicité.

Gros plan sur l’intérieur du bac : pompe EHEIM posée au fond, câble noir d’alimentation et tuyau souple transparent raccordé à un coude noir et blanc.
Dans le bac : la pompe immergée, son câble d’alimentation vers la prise pilotée, et le tuyau de refoulement avec son raccord.

Le code suit un découpage ports/adaptateurs : la logique métier ne dépend d’aucune bibliothèque matérielle. Les sondes, la prise et le notificateur sont des ports, chacun avec une implémentation réelle et une implémentation simulée. C’est ce qui permet de faire tourner l’ensemble du projet sur un poste de travail.

L’horloge est injectée plutôt que lue globalement : le watchdog de soixante secondes est donc vérifié sans attendre soixante secondes, et la suite complète s’exécute en moins d’une seconde.

Implémentation

Toute la logique — transitions d’état et sécurités — est centralisée dans un unique tick() synchrone appelé par une boucle de contrôle. Un seul endroit décide de l’état de la pompe, ce qui rend l’ensemble des garde-fous lisibles d’un seul tenant plutôt que dispersés dans des rappels asynchrones.

Raspberry Pi posé au sol, relié par des câbles à des bornes de connexion rapide, devant une multiprise verticale dont les prises sont allumées.
Le Raspberry Pi et son câblage basse tension : les paires vers les flotteurs passent par des bornes à levier, la prise pilotée est sur la multiprise.

La géométrie du bac et la position des sondes viennent de la configuration : aucun volume n’est écrit en dur. Le programme refuse de démarrer si une contrainte est violée — sondes inversées, auto-coupure nulle, broche invalide — et émet des avertissements sur les réglages risqués sans jamais les corriger silencieusement.

Une interface Web embarquée sert un tableau de bord temps réel, un journal d’événements et des graphiques historiques, sans aucune ressource externe. Les notifications Telegram sont optionnelles : toutes les sécurités fonctionnent sans Internet.

Difficultés rencontrées

La sécurité la plus difficile à obtenir est celle qui doit survivre à la panne du superviseur lui-même : un watchdog logiciel ne sert à rien si c’est le processus qui l’héberge qui meurt, pompe allumée.

Côté déploiement, le backend GPIO bas niveau ne s’installe pas depuis PyPI sur un Raspberry Pi sans chaîne de compilation complète : le paquet compile une extension C et réclame swig ainsi que les en-têtes Python.

Enfin, arrêter la pompe dès que la sonde haute se découvre produirait un cycle court et un battement continu autour du seuil.

Solutions

La coupure est déléguée au matériel : chaque ordre d’allumage porte un délai d’auto-extinction que la prise applique elle-même. Le Raspberry peut disparaître, la pompe s’arrête. Le watchdog logiciel double ce timer sans le remplacer, et une extinction est forcée si la prise s’allume sans ordre.

Le backend GPIO est installé depuis le paquet système et le venv créé avec --system-site-packages, ce que fait le script d’installation — idempotent, il préserve la configuration locale, les données et les journaux à chaque relance.

Le cycle applique une hystérésis : la sonde haute déclenche, seule la sonde basse arrête. Le volume transféré est estimé à partir de l’écart entre les deux sondes, ce qui donne au passage le suivi de remplissage du bidon.

Résultats

  • Cycle entièrement autonome, avec estimation du volume transféré et du bidon.
  • Douze sécurités documentées, dont deux matérielles, sur le principe fail safe = pompe à l’arrêt.
  • Aucune route de démarrage manuel : impossible de contourner l’anti-marche-à-sec ni le blocage bidon plein depuis l’interface.
  • Suite de tests couvrant la géométrie, la machine d’état, le client de la prise et l’API, exécutable sans matériel.

Améliorations possibles

  • Exposition des métriques pour un suivi long terme du volume évacué.
  • Détection d’un débit anormal, révélateur d’un tuyau partiellement obstrué.
  • Validation physique complète du montage : sens réel des flotteurs, débit et durée de cycle chronométrés, réglage de l’auto-coupure au double de cette durée.