Différences entre les versions de « Niveau de liquide dans une cuve ou un forage »

De GCE Electronics
Aller à la navigation Aller à la recherche
Ligne 207 : Ligne 207 :
<source>
<source>
var intervalle=23;  //intervalle entre 2 flotteurs en cm;
var intervalle=23;  //intervalle entre 2 flotteurs en cm;
var hauteurEau=(datasources["STATUS"]["response"]["vin15"] == 1)*intervalle ;
var intervalle=14; //intervalle entre 2 flotteurs en cm;
    hauteurEau=hauteurEau+(datasources["STATUS"]["response"]["vin16"] == 1)*intervalle ;
var basDeCuve=20;//hauteur sous le flotteur du bas
    hauteurEau=hauteurEau+(datasources["STATUS"]["response"]["vin17"] == 1)*intervalle ;
var hauteurEau=(datasources["STATUS_IPX"]["response"]["btn20"] == 0) * basDeCuve ;
    hauteurEau=hauteurEau+(datasources["STATUS"]["response"]["vin18"] == 1)*intervalle ;
hauteurEau=hauteurEau+(datasources["STATUS_IPX"]["response"]["btn21"] == 0) * intervalle ;
    hauteurEau=hauteurEau+(datasources["STATUS"]["response"]["vin19"] == 1)*intervalle  
hauteurEau=hauteurEau+(datasources["STATUS_IPX"]["response"]["btn22"] == 0) * intervalle ;
   
hauteurEau=hauteurEau+(datasources["STATUS_IPX"]["response"]["btn23"] == 0) * intervalle ;
var largeurCuve=120; //largeur cuve en cm
hauteurEau=hauteurEau+(datasources["STATUS_IPX"]["response"]["btn24"] == 0) * intervalle ;
   
hauteurEau=hauteurEau+(datasources["STATUS_IPX"]["response"]["btn25"] == 0) * intervalle ;
var hauteurCuve=118; //hauteur cuve en cm
hauteurEau=hauteurEau+(datasources["STATUS_IPX"]["response"]["btn26"] == 0)*intervalle ;
var longueurCuve=270; //longueur cuve en cm
hauteurEau=hauteurEau+(datasources["STATUS_IPX"]["response"]["btn27"] == 0)*intervalle ;


var largeurCuve=104; //largeur cuve en cm
var hauteurCuve=117; //hauteur cuve en cm
var longueurCuve=250; //longueur cuve en cm
//calcul du ratio
//calcul du ratio
var pourcentage=100-(hauteurEau/hauteurCuve)*100;
var pourcentage=(hauteurEau/hauteurCuve)*100;
 
//calcul volume Eau et volume total
//calcul volume Eau et volume total
var ve=0; var vt=0;
var ve=0; var vt=0;
ve=hauteurEau*largeurCuve*longueurCuve;
ve=hauteurEau * largeurCuve * longueurCuve;
ve=(ve/1000).toFixed(0);
ve=(ve/1000).toFixed(0);
vt=hauteurCuve*largeurCuve*longueurCuve;
vt=hauteurCuve * largeurCuve * longueurCuve;
vt=(vt/1000).toFixed(0);
vt=(vt/1000).toFixed(0);
if (hauteurEau <= 20) {
couleurEau="#e25d6b";
} else {
couleurEau="#5dade2";
}
return `
return `
<style>
<style>
body {  
body {  
   background:#0;  
   background:#0;  
Ligne 236 : Ligne 244 :
   color:#fff;  
   color:#fff;  
}  
}  
.box{  
.box{  
   height: 70px;
   height: 70px;
Ligne 247 : Ligne 256 :
   overflow: hidden;  
   overflow: hidden;  
}
}
 
  .eau{  
  .eau{  
     position: absolute;
     position: absolute;
Ligne 255 : Ligne 263 :
     height: 70px;
     height: 70px;
transform:translate(0,${100-pourcentage}%);
transform:translate(0,${100-pourcentage}%);
     background: #5dade2 ;
     background: ${couleurEau} ;
   }  
   }  
</style>
</style>
Ligne 268 : Ligne 276 :
<span style="font-weight:bold;">Volume Eau : ${ve}  litres</span><br>
<span style="font-weight:bold;">Volume Eau : ${ve}  litres</span><br>
     <span >Ratio volume : ${(ve/vt*100).toFixed(2)}</span> %<br>  
     <span >Ratio volume : ${(ve/vt*100).toFixed(2)}</span> %<br>  
</div>  
</div>
 
`;
`;
   
</source>
</source>
</div></div>
</div></div>

Version du 4 octobre 2020 à 20:13

Niveau de liquide

Netatmo presentation3.png
Nom Niveau de liquide
Famille Widget
Wiki créé le 04/10/2020
Wiki mis à jour le 04/10/2020
Auteur fgtoul

Présentation

Voici quelques widgets écrits en javascript et HTML. Vous pourrez les personnaliser et les utiliser sur les dashboards de votre IPX800 V4.

Attention, si vous mesurez le niveau d'un hydrocarbure (fioul, ...) dans une cuve, il faudra utiliser un capteur spécifique.

exemples avec un capteur analogique

Il existe différents types de capteurs permettant de mesurer un niveau.

  • à laser, infrarouges ou ultrasons, ils mesurent la hauteur vide en haut de cuve. Le niveau de liquide s'obtient par soustraction à partir de la hauteur totale de la cuve.
  • composés d'une sonde immergée, ils calculent la hauteur de liquide grâce à la pression lue en fond de cuve. La sonde à pression différentielle est plus précise car elle réajuste la mesure en fonction de la pression athmosphérique.

la hauteur de liquide est en lecture directe.

  • résistifs ou capacitifs, ils sont mesurent la hauteur d'eau en contact avec leur partie immergée (tige, fil conducteur, ...)


Nous admettrons que vous avez correctement configuré votre entrée analogique afin d'obtenir une hauteur en centimètres. Pour cela, vous aurez adapté les formules de conversion dans la configuration de l'entrée analogique concernée, en fonction des caractéristiques du capteur.

Cas d'une cuve cylindrique

NiveauCylindrique.png

usage :

  • Sur le dashboard, créez une source de données nommée STATUS vers le fichier Status.xml de l'ipx800.
  • Renseignez le volume total de la cuve en litres, le diamètre de la cuve en cm, puis liez la variable hauteurFuel à la datasource, sur l’analogique de la sonde . La hauteur est attendue en cm.
  • créez un widget de type HTML, hauteur 2 blocs.
  • insérez et ajustez ce code dans le widget :
 afficher le code
 
var hauteurFuel==(datasources["STATUS"]["response"]["analog0"] * 100).toFixed(2);


var diametreCuve=86; //diametre en cm
var volumeCuve=2000; //volume cuve pleine en litres

var pourcentage=100 - (100*hauteurFuel/diametreCuve);

var vc=volumeCuve/1000; //conversion en m3
var d=diametreCuve/100; //conversion en m
var r=d/2;
var h=hauteurFuel/100; //conversion en m

//calcul de la longueur de la cuve
var lc=(vc/Math.PI/Math.pow(r,2)).toFixed(2); 

//calcul volume Fuel
var vf=0;

if(h<=r && h>=0){// hauteur inférieure à rayon cuve
    vf=(Math.sqrt(r*r-(h-r)*(h-r))*(h-r)+r*r*Math.asin(Math.sqrt(r*r-(h-r)*(h-r))/r))*vc/(Math.PI*r*r);
}
else if (h>r && h<=2*r) {//  hauteur supérieure à rayon cuve
    vf=(Math.PI*r*r-Math.sqrt(r*r-(2*r-h-r)*(2*r-h-r))*(2*r-h-r)-r*r*Math.asin(Math.sqrt(r*r-(2*r-h-r)*(2*r-h-r))/r))*vc/(Math.PI*r*r);
}

vf=(vf*1000).toFixed(0);
return `
<style>
.box{ 
  height: 80px;
  width: 80px;
  position: absolute;
  top: 50%;
  left: 10px;
  transform: translate(0, -50%);
  background: #666666;
  border-radius:100%;
  overflow: hidden; 
}
   
 .fuel{ 
    position: absolute;
    left: 0;
    top: 0;
    width: 80px;
    height: 80px;
transform:translate(0,${pourcentage}%);
    background:#76B558;
  } 
</style>
<div class="box"> 
  <div id="fuel" class="fuel"></div> 
</div> 
<div style="float:left;margin-left:100px;margin-top:15px;font-size:12px;"> 
	<span >Contenance cuve: ${volumeCuve}</span> litres<br>
	<span >Longueur cuve: ${lc}</span> m<br>
	<span >Diamètre cuve : ${diametreCuve} </span> cm<br>
	<span >Hauteur Fioul : ${hauteurFuel}</span> cm<br>
	<span style="font-weight:bold;">Volume Fioul : ${vf}  litres</span><br>
<span >Ratio volume : ${(vf/volumeCuve*100).toFixed(2)}</span> %<br> 
</div> 

`;

cas d'une cuve rectangulaire

NiveauCubique.png

usage :

  • Sur le dashboard, créez une source de données nommée STATUS vers le fichier Status.xml de l'ipx800.
  • Renseignez le volume total de la cuve en litres, la hauteur et la longueur de la cuve en cm, puis liez la variable hauteurFuel à la datasource, sur l’analogique de la sonde . la hauteur est attendue en cm.
  • creez un widget de type HTML, hauteur 2 blocs.
  • insérez et ajustez ce code dans le widget :
 afficher le code
 
var hauteurFuel=(datasources["STATUS"]["response"]["analog0"] * 100).toFixed(2);

var hauteurCuve=120; //hauteur cuve en cm
var largeurCuve=120; //largeur cuve en cm
var longueurCuve=209; //longueur cuve en cm
var volumeCuve=3000; //volume cuve pleine en litres

var pourcentage=100 - (100*hauteurFuel/hauteurCuve);

//calcul de la consommation à partir de la baisse du niveau
var consommation=((hauteurCuve-hauteurFuel)*largeurCuve*longueurCuve)/1000 //consommation en litres

//calcul volume Fuel
var vf=0;
vf=hauteurFuel*largeurCuve*longueurCuve;
vf=(vf/1000).toFixed(0);
return `
<style>

body { 
  background:$bgColor; 
  font: 14px/1 'Open Sans', helvetica, sans-serif; 
  -webkit-font-smoothing: antialiased; 
  color:#fff; 
} 
.box{ 
  height: 80px;
  width: 80px;
  position: absolute;
  top: 50%;
  left: 10px;
  transform: translate(0, -50%);
  background: #666666;
  border-radius:15%;
  overflow: hidden; 
}
   
 .fuel{ 
    position: absolute;
    left: 0;
    top: 0;
    width: 80px;
    height: 80px;
transform:translate(0,${pourcentage}%);
    background:#76B558;
  } 
</style>
<div class="box"> 
  <div id="fuel" class="fuel"></div> 
</div> 
<div style="float:left;margin-left:100px;margin-top:15px;font-size:12px;"> 
	<span >Contenance cuve: ${volumeCuve}</span> litres<br>
	<span >consommation : ${consommation} </span> litres<br>
	<span >Hauteur Fioul : ${hauteurFuel}</span> cm<br>
	<span style="font-weight:bold;">Volume Fioul : ${vf}  litres</span><br>
    <span >Ratio volume : ${(vf/volumeCuve*100).toFixed(2)}</span> %<br> 
</div> 

`;

exemples avec des capteurs tout ou rien (interrupteurs à flotteur)

cas d'une cuve cylindrique

cas d'une cuve rectangulaire

NiveauCubiqueTOR.png

usage :

  • Sur le dashboard, créez une source de données nommée STATUS vers le fichier Status.xml de l'ipx800.
  • Renseignez le volume total de la cuve en litres, la hauteur et la longueur de la cuve en cm, puis liez la variable hauteurFuel à la datasource, sur l’analogique de la sonde . la hauteur est attendue en cm.
  • creez un widget de type HTML, hauteur 2 blocs.
  • insérez et ajustez ce code dans le widget :
 afficher le code
 
var intervalle=23;  //intervalle entre 2 flotteurs en cm;
var intervalle=14; //intervalle entre 2 flotteurs en cm;
var basDeCuve=20;//hauteur sous le flotteur du bas
var hauteurEau=(datasources["STATUS_IPX"]["response"]["btn20"] == 0) * basDeCuve ;
hauteurEau=hauteurEau+(datasources["STATUS_IPX"]["response"]["btn21"] == 0) * intervalle ;
hauteurEau=hauteurEau+(datasources["STATUS_IPX"]["response"]["btn22"] == 0) * intervalle ;
hauteurEau=hauteurEau+(datasources["STATUS_IPX"]["response"]["btn23"] == 0) * intervalle ;
hauteurEau=hauteurEau+(datasources["STATUS_IPX"]["response"]["btn24"] == 0) * intervalle ;
hauteurEau=hauteurEau+(datasources["STATUS_IPX"]["response"]["btn25"] == 0) * intervalle ;
hauteurEau=hauteurEau+(datasources["STATUS_IPX"]["response"]["btn26"] == 0)*intervalle ;
hauteurEau=hauteurEau+(datasources["STATUS_IPX"]["response"]["btn27"] == 0)*intervalle ;

var largeurCuve=104; //largeur cuve en cm
var hauteurCuve=117; //hauteur cuve en cm
var longueurCuve=250; //longueur cuve en cm
//calcul du ratio
var pourcentage=(hauteurEau/hauteurCuve)*100;
//calcul volume Eau et volume total
var ve=0; var vt=0;
ve=hauteurEau * largeurCuve * longueurCuve;
ve=(ve/1000).toFixed(0);
vt=hauteurCuve * largeurCuve * longueurCuve;
vt=(vt/1000).toFixed(0);

if (hauteurEau <= 20) {
couleurEau="#e25d6b";
} else {
couleurEau="#5dade2";
}

return `
<style>
body { 
  background:#0; 
  font: 14px/1 'Open Sans', helvetica, sans-serif; 
  -webkit-font-smoothing: antialiased; 
  color:#fff; 
} 

.box{ 
  height: 70px;
  width: 70px;
  position: absolute;
  top: 50%;
  left: 10px;
  transform: translate(0, -50%);
  background: #666666;
  border-radius:15%;
  overflow: hidden; 
}
 .eau{ 
    position: absolute;
    left: 0;
    top: 0;
    width: 70px;
    height: 70px;
transform:translate(0,${100-pourcentage}%);
    background: ${couleurEau} ;
  } 
</style>
<body>
<div class="box"> 
  <div id="eau" class="eau"></div> 
</div> 
<div style="float:left;margin-left:100px;margin-top:15px;font-size:12px;">
	<br>
	<span >Contenance cuve: ${vt}</span> litres<br>
	<span >Hauteur Eau : ${hauteurEau}</span> cm<br>
	<span style="font-weight:bold;">Volume Eau : ${ve}  litres</span><br>
    <span >Ratio volume : ${(ve/vt*100).toFixed(2)}</span> %<br> 
</div>

`;