Différences entre les versions de « Remplissage sécurisé d'une piscine »

De GCE Electronics
Aller à la navigation Aller à la recherche
Ligne 105 : Ligne 105 :
** Preset "Eau.Niveau.Bas"<br>[[fichier:PushEauNiveauBas.png]]
** Preset "Eau.Niveau.Bas"<br>[[fichier:PushEauNiveauBas.png]]
** Preset "Rempl.En.Cours"<br>[[fichier:PushRemplEnCours.png]]
** Preset "Rempl.En.Cours"<br>[[fichier:PushRemplEnCours.png]]
** Preset "Alerte.Fuite" Mail/SMS ">>> Fuite : $CPT2 litres perdus"<br>[[fichier:PushRemplEnCours.png]]
** Preset "Alerte.Fuite" Mail/SMS ">>> Fuite : $CPT2 litres perdus"<br>[[fichier:PushEauFuite.png]]





Version du 12 novembre 2020 à 01:02



Remplissage sécurisé

Contribution.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 aini 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

Le capteur de niveau

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

L'électrovanne NF

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.

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 une entrée digitale de l'IPX800 V4, 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. Personnellemt, j'incrémente un duxiè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 ne 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.

Electrovanne d'alimentation principale

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 ne nécessite une alimentation électrique seulement pendant quelques secondes pendant le mouvement d'ouverture ou de fermeture. C'est une vanne à sphère, motorisée, qui comporte 3 fils ( Ground, ouverture, Fermeture).

Electrovane Secure240vac.png

Elle sera alimentée en 240Vac et pilotée par 2 relais de l'ipx800, sur les bornes NO de chacun.

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

ElectrovanneSecure.jpeg


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

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. Nommée "compteur.impulsion",
    • une entrée digitale (ED) connectée au bouton poussoir d'acquit . Nommé ED "acquit.fuite",
    • une sortie physique connectée à l'électrovanne de remplissage . Nommée "relais.Electrovanne.1",
    • une sortie physique qui pilotera le sens du mouvement de la vanne de Secuité, EN NC : Fermeture, EN NO : Ouverture, 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=3
    • 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,
    • 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" Mail/SMS ">>> Fuite : $CPT2 litres perdus"
      PushEauFuite.png


Les scénarios

Gestion du remplissage

scène 0 : Statut Niveau Bas
é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(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(Rempl.En.Cours) ; SV(RemplStatutEnCours)
scène 5 : Arret rempl. Manuel 
événement : NON SV(Niveau.Statut.Bas)
Action : OFF
Résultat : SV(RemplManuelDemande)


Index conso

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

Cas de fuite

scène 7 : 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 8 : 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 9 : reset compteur fuite si BP acquit
événement : ED(acquit.fuite)
Action : ON 
Résultat : CPT2(Set 0)
scène 10 : Acquit statut fuite si appui sur BP
événement : ED(acquit.fuite)
Action : OFF
Résultat : SV(Rempl.statut.fuite)
scène 11 : 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 12 : Rempl Mode Auto
événement : BtnDashRemplAuto
Action : SWITCH
Résultat : SV(Rempl.Statut.AUTO)

Sécurisation

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

Le Widget

RemplWidget.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

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 - 8);
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:55px;font-size:12px'>${c1}</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>
`;