Si vous êtes convaincu, voici une proposition : vous aurez besoin d’un peu de matériel domotique, d’une formule pour calculer quotidiennement la durée optimale, de trois petits scripts et de quelques règles d’automatisation.
J’utilise un micromodule QUBINO 1 Relais [ZMNHAD1] avec sa sonde de température DS18B20 (étanche) : remplacer le programmateur mécanique par le micromodule (par sécurité, je l’ai connecté AVANT le relais du moteur et je ne profite donc pas de la fonction de mesure de consommation). Connecter la sonde de température, et la placer dans l’eau ; chez moi le local est déporté, j’ai percé un petit trou dans le retour des skimmers que j’ai ensuite colmaté avec un produit ad’hoc [on devrait aussi pouvoir bricoler quelque chose avec un collier et porte-sonde pH].
Lorsque la filtration est arrêtée, on fait circuler l’eau toutes les heures pendant 2 minutes (règle + macro) afin de mesurer sa température réelle (et non pas celle du local).
On calcule la moyenne sur 24 heures (par pas de une heure) que l’on stocke sur un périphérique virtuel de type « état - nombre décimal » avec le petit script suivant :
- Code : Tout sélectionner
<?
/* Calcul de la température moyenne de l'eau sur 24 heures :
/doit être lancé toutes les heures, et précédé d'une circulation
d'eau pendant 2 minutes, si la filtration est arrêtée */
// Périphériques
$idperiph1 = xxxxxx ; // Qubino Température H2O - A REMPLACER
$idperiph2 = xxxxxx ; // Etat température H2O - A REMPLACER
$tableau1 = getValue($idperiph1);
$temp = $tableau1["value"] ; // Température de l'eau
// Traitement
$heure = date("G") ; // Format 24 hrs, no leading 0
$cumul = loadvariable('cumul') ; // Cumul des températures
$compteur = loadvariable('compteur') ; // Nombre de mesures
$cumul += $temp ; // Nouveau cumul
$compteur += 1 ; // Incrémentation
if ($heure == 7) {
// Calcul, stockage, et réinitialisation des variables
$moyenne = $cumul / $compteur ; // Calcul
// echo "Moyenne : <i>[$moyenne]</i> <br>" ;
setValue($idperiph2, $moyenne) ; // Stockage
saveVariable('cumul', 0.0) ; // Réinitialisation
saveVariable('compteur', 0) ; // Réinitialisation
} else {
// Incrémentation des variables
saveVariable('cumul', $cumul) ; // Incrémentation
saveVariable('compteur', $compteur) ; // Incrémentation
}
?>
Pour calculer la durée de filtration en minutes, j’utilise la fonction suivante (à partir de 5°C) :
durée = 80.812028 * exp(0.093454 * température moyenne J-1).
En dessous de 5°C : 120 minutes (au dessous de 10°C les algues ne se développent pas).
L’heure de démarrage doit être adaptée à la durée ; j’utilise 11 heures (au dessous de 10°C), 9 heures (de 10 à 26°C), et 7h30 au dessus. Cette heure est calculée quotidiennement (à 7h10) après le calcul de la température moyenne, et stockée sur un périphérique virtuel de type « état - liste de valeurs » avec le petit script suivant :
- Code : Tout sélectionner
<?
// Calcul de l'heure de démarrage de la filtration
// (à lancer quotidiennement par règle avant 7h30)
$idperiph1 = xxxxxx ; // Etat température H2O - A REMPLACER
$tableau1 = getValue($idperiph1);
$temp = $tableau1["value"] ; // Température de l'eau
$idperiph2 = xxxxxx ; // Etat démarrage Filtration - A REMPLACER
if ($temp < 10) {
setValue($idperiph2, 11) ; // Démarrage à 11 heures
} else if ($temp >= 10 and $temp < 27) {
setValue($idperiph2, 9) ; // Démarrage à 9 heures
} else {
setValue($idperiph2, 7.5) ; // Démarrage à 7 heures 30 minutes
}
?>
Suivant l’heure de démarrage ainsi calculée, trois règles lancent alors le script suivant qui calcule la durée et active une macro à durée variable sur le relais QUBINO :
- Code : Tout sélectionner
<?
// Périphériques
$idperiph1 = xxxxxx ; // Etat température H2O - A REMPLACER
$tableau1 = getValue($idperiph1) ;
$temp = $tableau1["value"] ; // Température de l'eau
$idperiph2 = xxxxxx ; // Relais Pompe Filtration [QUBINO] - A REMPLACER
$idmacro2 = xxxxxx ; // filtration [x] minutes [macro à durée variable sur relais QUBINO]
/*********************************** OPTIONNEL ************************************/
//$idperiph3 = xxxxxx ; // Indicateur (virtuel) Filtration en cours (pour information)
//$idmacro3 = xxxxxx ; // ON [x] minutes [macro à durée variable sur indicateur vrtuel]
/*********************************** OPTIONNEL ************************************/
$minutes = 0 ; /*Durée de filtration en minutes*/
if ($temp <= 5.0) {
$minutes = 120 ; // Durée 120 minutes
} else {
// durée (en minutes) = 80.812028 * exp(0.093454 * température Celsius)
$a = 0.093454 ;
$b = 80.812028 ;
$ax = $temp * $a ;
$minutes = exp($ax) * $b ;
}
if ($minutes >= 1440) {
$minutes = 24 * 60 ;
} else {
$minutes = round($minutes) ;
}
$json_result = setMacro($idperiph2, $idmacro2, $dynamic_value = $minutes) ;
//$json_result = setMacro($idperiph3, $idmacro3, $dynamic_value = $minutes) ; // OPTIONNEL
/*echo "La macro <b>[$idmacro2]</b> a été demandée pour votre périphérique dont le code API est <b>[$idperiph2]</b><br>";
echo "Température de l'eau : <i>[$temp]</i> <br>";
echo "Durée de filtration calculée en heures : <i>[$heures]</i> <br>";
echo "Pour info, le résultat de la demande est : <i>[$json_result]</i> <br>"; */
?>