Remplissage sécurisé d'une piscine

De GCE Electronics
Révision datée du 28 novembre 2020 à 10:03 par Fgtoul (discussion | contributions) (→‎Gestion du remplissage)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigation Aller à la recherche



Remplissage sécurisé

RemplWidget.png
Nom Remplissage sécurisé
Famille Widgets
Wiki créé le 11/11/2020
Wiki mis à jour le 11/11/2020
Auteur fgtoul

Présentation

Dans cet article, vous allez voir comment programmer le remplissage automatique d'une piscine, être averti en cas de fuite et pouvoir sécuriser le circuit d'alimentation en eau, même loin de chez vous.

Le principe

Un capteur de niveau d'eau détecte le niveau bas dans le bassin et transmet l'information à l'IPX800 V4. Si vous avez autorisé le remplissage en mode Automatique, alors l'électrovanne s'ouvre pour permettre le remplissage. L'avantage d'un remplissage automatique, c'est que le bassin est toujours à son niveau optimal et vous évitez ainsi les problèmes sur la pompe de filtration en cas de manque d'eau. Cependant une fuite sur le réseau hydraulique ou dans le bassin peut passer inaperçue et faire très vite grimper vos factures d'eau. Il faut donc impérativement sécuriser le système, être averti en cas de fuite et pouvoir sécuriser l'installation (même à distance).

En cas de fuite, l’ipx800 envoie le volume d’eau perdue par mail ou SMS, toutes les heures. Ainsi, nous pouvons prendre la décision, ou pas, de fermer manuellement la vanne de sécurité via le widget et ainsi stopper la fonction de remplissage automatique en fonction du débit de la fuite. Il faudra une intervention manuelle pour acquitter le statut de fuite et réactiver le remplissage automatique. Après tout, une fuite disparaît rarement seule

Le matériel

Mon arrivée d'eau étant en cuivre, j'ai préféré que le corps de mes électrovannes soient en Laiton. Si votre installation est en Polypropylène (PP) , vous pouvez adapter l'assemblage, ou choisir des vannes avec corps en PVC.

Le capteur de niveau

Niveauflotteur.png

Comme je vous l'ai dit au dessus, il faut un capteur de niveau d'eau. Le plus simple est d'utiliser un capteur à flotteur que vous pourrez fixer dans un skimmer. Qu'il soit de type 'Normalement fermé' ou 'Normalement Ouvert' ce capteur convient parfaitement.

Voici quelques exemples de montage (partagés par la communauté), dans un skimmer ou un bac tampon :

@jweb @fgtoul @Henri66

@Henri66 a monté deux capteurs (niveau haut / niveau bas) dans la goulotte, reliés indépendamment sur 2 entrées digitales.

Pensez à protéger le flotteur des éventuels débris flottants afin d'éviter tout blocage.

Remarque : Un retard de 3 minutes a été configuré sur la sortie virtuelle qui pilote le remplissage, pour éviter qu'elle n'oscille entre état haut et état bas de manière répétée à cause des vagues. Il faudra donc que le niveau bas soit observé pendant ces 180 secondes pour que l'ipx800 ouvre l'électrovanne.

L'électrovanne Normalement Fermée

Personnellement, j'utilise une électrovanne dont l'alimentation de la bobine est de 12V.

Electrovanne12vNC.png

Son alimentation sera commandée par un relais de l'IPX800 V4. Le solénoïde doit être alimenté en 12Vcc pour que l'électrovanne reste ouverte. En cas de coupure de courant, elle se referme automatiquement. Elle se connecte avec 2 fils et sera branchée sur les bornes NO de la sortie Relais nommée "relais.Electrovanne.1". Cette sortie relais sera surveillée. Une alerte sera envoyée si le remplissage se poursuit au delà d'un temps imparti. Il sera alors possible de stopper le système et fermer la vanne de sécurité en cas de suspicion de fuite.

Un compteur d'eau à impulsion

Le compteur d'eau à impulsions pourra vous indiquer le volume d'eau utilisé pour le remplissage du bassin.

Connecté sur l'entrée digitale nommée "compteur.impulsion", le modèle vendu par GCE émet 1 impulsion par litre ce qui permet une configuration très simple sur l'IPX800. Chaque impulsion reçue provoque l'incrémentation d'un index général. Personnellement, j'incrémente un deuxième index simultanément, pour connaître le volume d'eau utilisé pendant la saison.

CompteurEauFroide.png

Le compteur d'eau sera également utilisé en détecteur de fuite. Un scénario simple suffit sur l'Ipx800 : si l'électrovanne 12V est fermée, alors la consommation d'eau devrait être nulle. Le compteur devrait par conséquent n'émettre aucune impulsion. Si une impulsion est malgré tout détectée sur l'entrée digitale, une notification de fuite est envoyée.

L'électrovanne de sécurisation

Pour la sécurisation du circuit d'alimentation d'eau, nous utiliserons une deuxième électrovanne, que nous pourrons fermer à distance en cas de réception d'une notification de fuite. J'ai choisi un modèle pour circuit d'alimentation principale qui nécessite une alimentation électrique seulement pendant quelques secondes, pour permettre le mouvement d'ouverture ou de fermeture. C'est une vanne à sphère, motorisée, qui comporte 3 fils ( Neutre, Ouverture, Fermeture).

Electrovane Secure240vac.png

Elle sera alimentée en 240Vac et pilotée par 2 relais de l'ipx800,

  • le premier, nommé "relais.alim.sec", pilote l'alimentation 240Vac, pendant 30 secondes afin de permettre un mouvement d'ouverture ou de fermeture.
  • le second, nommé "relais.sens.sec", détermine le sens du mouvement. Sur les bornes NO, nous aurons l'ouverture, sur NC nous aurons la fermeture.

ElectrovanneSecure.jpeg

Le coût du projet

  • Compteur d'eau froide à impulsion : 75€
  • Vanne à sphère, motorisée 240Vac  : 50€
  • électrovanne à solénoïde 12V  : 30€
  • capteur à flotteur  : 8.5€

Hors plomberie, le coût s'élève à 165€ environ, ce qui peut paraître peu par rapport au coût engendré par une éventuelle fuite d'eau.

Le montage

Pour une détection de fuite efficace, le compteur d'eau doit être en amont des 2 électrovannes.

CircuitDetectionFuite.png

Attention, chaque dispositif doit être correctement monté dans le sens du débit

Un effet d'eau, assemblé avec des pièces PVC, sera monté sur le skimmer. N'oubliez pas les joints de chaque côté de la traversée.

RemplEffetDeau.png RemplEffetDeau2.png

La programmation sur IPX800

Les ressources utilisées

  • les entrées/sorties physiques
    • une entrée digitale (ED) recevant les impulsions du compteur d'eau, nNommée "compteur.impulsion",
    • une entrée digitale (ED) connectée au bouton poussoir d'acquit . nommée "acquit.fuite",
    • une entrée digitale (ED) connectée au capteur de niveau, nommée "Niveau.Bas"
    • une sortie physique connectée à l'électrovanne de remplissage (Tb à déterminer), nommée "relais.Electrovanne.1",
    • une sortie physique qui pilotera le sens du mouvement de la vanne de Secuité, nommée "relais.sens.sec"
    • une sortie physique pour alimenter la vanne de sécurité pendant 30 s (Tb=30 ), nommée "relais.alim.sec"
  • Les Sorties Virtuelles
    • 1 SV nommée "Rempl.statut.fuite". Elle sera ON en cas de fuite, jusqu'à l'acquit,
    • 1 SV nommée "Rempl.tempo.1h". Elle permettra une temporisation d'une heure entre 2 notifications de fuite. Elle aura tb=3600,
    • 1 SV nommée "Niveau.Statut.Bas". Elle sera ON lorsque le niveau sera insuffisant, elle aura Ta=180
    • 1 SV nommée "Rempl.Statut.AUTO". Elle sera ON lorsque le remplissage automatique sera autorisé,
    • 1 SV nommée "RemplManuelDemande". Elle sera ON lors d'une demande de remplissage manuel,
    • 1 SV nommée "RemplAutoDemande". Elle sera ON lorsque le niveau sera bas et lorsque le remplissage automatique sera autorisé,
    • 1 SV nommée "RemplStatutEnCours". Elle sera ON pendant un remplissage automatique ou manuel, Tb=temps maxi de remplissage
    • 1 SV nommée "RemplSec". Elle sera ON lorsque l'électrovanne de sécurité sera fermée,
    • 1 SV nommée "StatutFuite". Elle sera ON en cas de fuite.
    • 1 SV nommée "BtnDashRempl". Elle aura Tb=1 et sera pilotée par le bouton "Remplissage Manuel" du widget,
    • 1 SV nommée "BtnDashRemplAuto". Elle aura Tb=1 et sera pilotée par le bouton "mode auto / manuel" du widget
    • 1 SV nommée "BtnSecure" qui sera pilotée par le bouton "Secure" du widget. Mettre Tb=1
  • Les compteurs
    • un compteur pour la consommation d'eau cumulée. Nommé CPT1,
    • un compteur pour le volume d'eau perdue. Nommé CPT2,
  • Les PUSH
    • Preset "Eau.Niveau.Bas"
      PushEauNiveauBas.png

    • Preset "Rempl.En.Cours"
      PushRemplEnCours.png

    • Preset "Alerte.Fuite"
      PushEauFuite.png
      Adaptez le nom de l'étiquette afin d'envoyer l'index du compteur CPT2

    • Preset "Alerte.Temps.Max"
      Alerte.temps.max.png

Les scénarios

Gestion du remplissage

scène 0 : Statut Niveau Bas avec capteur NF. Utiliser NON ED pour un capteur NO
événement : ED(Niveau.Bas) 
Action : ON/OFF
Résultat : SV(Niveau.Statut.Bas)
scène 1 : Alerte Niveau Bas
événement : SV(Niveau.Statut.Bas) 
Action : ON/OFF
Résultat : PUSH(preset "Eau.Niveau.Bas")
scène 2 : Demande Rempl. Manuel 
événement : SV(BtnDashRempl) ET SV(Niveau.Statut.Bas)
Action : ON
Résultat : SV(RemplManuelDemande)
scène 3 : Demande Rempl. Auto 
événement : SV(Rempl.Statut.AUTO) ET SV(Niveau.Statut.Bas)
Action : ON/OFF
Résultat : SV(RemplAutoDemande)
scène 4 : Pilotage electrovanne remplissage 
événement : SV(RemplManuelDemande) OU SV(RemplAutoDemande)
Action : ON/OFF
Résultat : Relais(relais.Electrovanne.1) ; PUSH(preset "Rempl.En.Cours") ; SV(RemplStatutEnCours)
scène 5 : Surveillance temps remplissage 
événement : NON SV(RemplStatutEnCours) ET Relais(relais.Electrovanne.1)
Action : ON/OFF
Résultat : PUSH(preset "Alerte.Temps.max")
scène 6 : Arret rempl. Manuel 
événement : NON SV(Niveau.Statut.Bas)
Action : OFF
Résultat : SV(RemplManuelDemande)

Index conso

scène 7 : conso globale eau [CPT1]
événement : ED(compteur.impulsion) 
Action : ON 
Résultat : CPT1(Inc 1);

Cas de fuite

scène 8 : incrément CPT conso fuite [CPT2]
événement : ED(compteur.impulsion) ET NON relais(relais.Electrovanne.1)
Action : ON 
Résultat : CPT2(Inc 1); SV(Rempl.statut.fuite)
scène 9 : tempo 1h entre 2 mails avec index compteur
événement : SV(Rempl.statut.fuite) ET NON SV(Rempl.tempo.1h)
Action : ON
Résultat : PUSH(preset "Alerte.Fuite") ; SV(Rempl.tempo.1h)
scène 10 : reset compteur fuite si BP acquit
événement : ED(acquit.fuite)
Action : ON 
Résultat : CPT2(Set 0)
scène 11 : Acquit statut fuite si appui sur BP
événement : ED(acquit.fuite)
Action : OFF
Résultat : SV(Rempl.statut.fuite)
scène 12 : Reset CPT2 si Remplissage demandé
événement : relais(relais.Electrovanne.1)
Action : ON
Résultat : CPT2(Set 0)

Remplissage Mode AUTO ou Manuel

scène 13 : Rempl Mode Auto
événement : BtnDashRemplAuto
Action : SWITCH
Résultat : SV(Rempl.Statut.AUTO)

Sécurisation

scène 14 : Rempl Mode Auto
événement : SV(BtnSecure)
Action : SWITCH
Résultat : SV(RemplSec)
scène 15 : Sens Ouverture/Fermeture Vanne SECURE
événement : SV(RemplSec)
Action : ON/OFF
Résultat : SV(relais.sens.sec)
scène 16 : Alimentation Vanne SECURE
événement : SV(BtnSecure)
Action : ON
Résultat : SV(relais.alim.sec)

Le Widget

RemplWidget.png RemplWidget2.png

  • Ajoutez une source de données sur le Dashboard.
    Elle doit se connecter au fichier Status.xml de l'IPX800. Nommez la STATUS.
    DataSTATUS.JPG


  • Ajoutez un widget HTML sur le dashboard, 2 blocs de hauteur puis collez le code ci-dessous
  • ajustez les variables en lignes 1 à 16


 Afficher le code du widget
 
let d=datasources["STATUS"]["response"];

//gestion remplissage
let svNiveauStattBas=49;     //n° de la SV Niveau.Statut.Bas
let svRemplStatutAuto=50;    //n° de la SV Rempl.Statut.AUTO
let svRemplManuelDemande=51; //n° de la SV RemplManuelDemande
let svBtnDashRempl=53;       //n° de la SV BtnDashRempl
let svRemplStatutEnCours=54; //n° de la SV RemplStatutEnCours
let svBtnDashRemplAuto=58;   //n° de la SV BtnDashRemplAuto

//gestion fuite
let svBtnSecure=59;          //n° de la SV BtnSecure
let svRemplSec=60;           //n° de la SV RemplSec
let svStatutFuite=42;        //n° de la SV StatutFuite
let cptFuite=6;              //n° du compteur CPT2

// Ne rien modifier ci-dessous

let coulNiveau= (d["vout"+svNiveauStatutBas]==1 ? "#f00" : "#ccc");
let coulRempl= (d["vout"+svRemplStatutEnCours]==1 ? "#0f0" : "#ccc");
let coulMode=(d["vout"+svRemplStatutAuto]==1 ? "#0f0" : "#ccc");

let c1="00000000" + d["cpt"+cptFuite];
c1= c1.substring(c1.length, c1.length - 6);
coulFuite= (d["vout"+svStatutFuite]==1 ? "#f00" : "#ccc");
coulSecure= (d["vout"+svRemplSec]==1 ? "#f00" : "#ccc");

return `
<style>
    hr.style-six{
        border:0;
        height:0;
        border-top: 1px solid rgba(0, 0, 0, 0.1);
    border-bottom: 1px solid rgba(255, 255, 255, 0.3);
    }
</style>

<input type="button" id="bouton2" class="bouton2 vout${svBtnDashRempl} btnV4vout${svBtnDashRempl}" style="font-size:10px;position:absolute;margin-left:25px;margin-top:6px;width: 110px;" name="Rempl. Manuel|Rempl. Manuel" onclick="newAJAXCommand('io.cgi?vout=${svBtnDashRempl}');" value="Rempl. Manuel">
<input type="button" id="bouton2" class="bouton2 vout${svBtnDashRemplAuto} btnV4vout${svBtnDashRemplAuto}" style="font-size:10px;position:absolute;margin-left:145px;margin-top:6px;width: 110px;" name="Mode Auto/Off|Mode Auto/Off" onclick="newAJAXCommand('io.cgi?vout=${svBtnDashRemplAuto}');" value="Mode Auto/Off">


<center>
    <span style="position:absolute;left:40px;top:35px;font-size:18px;">
<span id=nivB class="glyphicons glyphicons-pool" color='${coulNiveau}'></span>&nbsp;&nbsp;&nbsp;&nbsp;
<span id=rempl class="glyphicons glyphicons-drop" color='${coulRempl}'></span>
<span class=info  id=mAutoR style='margin-left:105px;width:35px;font-size:12px;color:${coulMode}'>AUTO</span></>
       <hr class=style-six>
    </span>
</center>

<span style="position:absolute;left:35px;top:80px;font-size:28px;color:${coulFuite}"><span id=nivB class="glyphicons glyphicons-tint"></span>
<span class=info  id=fuit style='position:absolute;top:0px;margin-left:5px;width:55px;font-size:12px'>FUITE</span></>
<span class=info  id=cfuit style='position:absolute;top:20px;margin-left:5px;width:85px;font-size:12px'>${c1} litres</span></> 
<input type="button" id="bouton2" class="bouton2 vout${svBtnSecure} btnV4vout${svBtnSecure}" style="font-size:10px;position:absolute;margin-left:95px;width: 55px;" name="Secure|Secure" onclick="newAJAXCommand('io.cgi?vout=${svBtnSecure}');" value="Secure">
<span style="font-size:14px;position:absolute;margin-left:175px;margin-top: 8px;width: 110px;color:${coulSecure}"><span id=secR class="glyphicons glyphicons-lock"></span>
`;