Elle est de
110 % pour l'humidité relative,
81.1 °C pour la température, le windchill et le point de rosée
360 ° pour la direction du vent.
0 pour la force du vent et la pluvio instantannée
Lorsque WS3600SQL calcule les données à enregistrer dans les tables data et MiniMaxidata, on se retrouve, bien normalement d'ailleur, avec des valeurs totalement incohérentes et cela empêche l'affichage normal des graphiques et fausse les statistiques .
(En effet, je ne me sert plus de graphweather pour faire les statistiques journalière, mensuelle, annuelle et totale. Elle sont générées en PHP)
Les champs impactés sont winddir, outdoorhumidity, outdoortemperature, windchill, outdoorheatindex, dewpoint, pressurealtitude, cloudbase dans la table data et les champs maxi et moy de certains de ces paramètres dans la table MiniMaxidata.
La solution que j'ai trouvé pour pallier à ce problème, est de
1. Forcer la valeur des données erronées de la table data à "null", comme cela elle ne sont pas affichées dans les graphiques highcharts,
2. Recalculer pour les valeurs erronées de la table MiniMaxidata les valeurs maxi, TStamp_maxi, recdate_maxi, recdateTZ_maxi et moy en fonction des valeurs non erronées de la table data.
Pour cela j'ai fait un script en PHP que je met ici.
Code : Tout sélectionner
<?php
// appel du script de connexion
require("../meteo/GraphDynamic/mysqli_connect.php");
// Test primaire pour savoir s'il y a des erreurs non encore corrigées
// Test pour savoir si des erreurs ont déja été corrigées
$sql="SELECT count(*) AS NbErreur FROM data WHERE winddir='360'";
$query = mysqli_query($conn,$sql);
$list=mysqli_fetch_array($query);
$NbErreur=$list['NbErreur']*1;
if ($NbErreur==0) {
exit("Il n'y a pas d'erreurs dans votre base de données");}
elseif ($NbErreur>0) {
$msg="$NbErreur erreurs ont déja été corrigées dans votre base de données";
// test pour savoir s'il reste encore des erreurs à corriger
$sql="SELECT count(*) AS NbErreur FROM data WHERE winddir='360' AND outdoortemperature='81.1'";
$query = mysqli_query($conn,$sql);
$list=mysqli_fetch_array($query);
$NbErreur2=$list['NbErreur'];
if ($NbErreur2==0) {
exit($msg);}
}
// Récupération des jours en erreur
echo "Recupération des jours en erreur". "<br />\n"."Patientez SVP". "<br />\n";
ob_flush();
flush();
ob_flush();
flush();
$sql = "SELECT SUBSTR(recdateTZ,1,8) AS JourErreur FROM data WHERE winddir='360' AND outdoortemperature='81.1' GROUP BY 1 ORDER BY 1 ASC";
$query = mysqli_query($conn,$sql);
$j=0;
while ($list = mysqli_fetch_assoc($query)) {
$JourEnErreur[$j]=$list['JourErreur'];
$NbJourEnErreur=$j*1;
$j++;
}
// Exécution de la requete de correction de la table data
echo "Correction des données dans la table data". "<br />\n"."Patientez SVP". "<br />\n";
ob_flush();
flush();
ob_flush();
flush();
$sql = "UPDATE data SET outdoorhumidity=null, outdoortemperature=null, windchill=null, outdoorheatindex=null, dewpoint=null, pressurealtitude=null, cloudbase=null WHERE winddir='360'";
$query = mysqli_query($conn,$sql);
// Requete pour correction de t_out_maxi de la table MiniMaxidata
echo "Correction des données t_out_maxi dans la table MiniMaxidata". "<br />\n"."Patientez SVP". "<br />\n";
ob_flush();
flush();
ob_flush();
flush();
$i=0;
for ($i=0; $i <= $NbJourEnErreur; $i++) {
// 1 Récupération de la valeur maxi dans la table data
$sql="SELECT tstamp, recdateUTC, recdateTZ, outdoortemperature FROM data WHERE SUBSTR(recdateTZ,1,8)='$JourEnErreur[$i]' ORDER BY 4 DESC , 1 DESC LIMIT 1";
$query = mysqli_query($conn,$sql);
$x=0;
while ($list = mysqli_fetch_assoc($query)) {
$Newtstamp[$x]=$list['tstamp']*1;
$NewrecdateUTC[$x]=$list['recdateUTC']*1;
$NewrecdateTZ[$x]=$list['recdateTZ']*1;
$Newoutdoortemperature[$x]=$list['outdoortemperature']*1;
// Correction de t_out_maxi de la table MiniMaxidata
$sql2="UPDATE MiniMaxidata SET t_out_maxi=$Newoutdoortemperature[$x], TStamp_t_out_maxi=$Newtstamp[$x], recdate_t_out_maxi=$NewrecdateUTC[$x], recdateTZ_t_out_maxi=$NewrecdateTZ[$x] WHERE SUBSTR(recdateTZ,1,8)='$JourEnErreur[$i]'";
$query2 = mysqli_query($conn,$sql2);
$x++;
}
}
// Requete pour correction de t_out_moy de la table MiniMaxidata
echo "Correction des données t_out_moy dans la table MiniMaxidata". "<br />\n"."Patientez SVP". "<br />\n";
ob_flush();
flush();
ob_flush();
flush();
$i=0;
for ($i=0; $i <= $NbJourEnErreur; $i++) {
// 1 Récupération de la valeur moyenne dans la table data
$sql="SELECT AVG(outdoortemperature) FROM data WHERE SUBSTR(recdateTZ,1,8)='$JourEnErreur[$i]'";
$query = mysqli_query($conn,$sql);
$x=0;
while ($list = mysqli_fetch_assoc($query)) {
$Newt_out_moy[$x]=number_format($list['AVG(outdoortemperature)']*1,1);
// Correction de h_out_moy de la table MiniMaxidata
$sql2="UPDATE MiniMaxidata SET t_out_moy=$Newt_out_moy[$x] WHERE SUBSTR(recdateTZ,1,8)='$JourEnErreur[$i]'";
$query2 = mysqli_query($conn,$sql2);
$x++;
}
}
// Requete pour correction de h_out_maxi de la table MiniMaxidata
echo "Correction des données h_out_maxi dans la table MiniMaxidata". "<br />\n"."Patientez SVP". "<br />\n";
ob_flush();
flush();
ob_flush();
flush();
$i=0;
for ($i=0; $i <= $NbJourEnErreur; $i++) {
// 1 Récupération de la valeur maxi dans la table data
$sql="SELECT tstamp, recdateUTC, recdateTZ, outdoorhumidity FROM data WHERE SUBSTR(recdateTZ,1,8)='$JourEnErreur[$i]' ORDER BY 4 DESC , 1 DESC LIMIT 1";
$query = mysqli_query($conn,$sql);
$x=0;
while ($list = mysqli_fetch_assoc($query)) {
$Newtstamp[$x]=$list['tstamp']*1;
$NewrecdateUTC[$x]=$list['recdateUTC']*1;
$NewrecdateTZ[$x]=$list['recdateTZ']*1;
$Newoutdoorhumidity[$x]=$list['outdoorhumidity']*1;
// Correction de h_out_maxi de la table MiniMaxidata
$sql2="UPDATE MiniMaxidata SET h_out_maxi=$Newoutdoorhumidity[$x], TStamp_h_out_maxi=$Newtstamp[$x], recdate_h_out_maxi=$NewrecdateUTC[$x], recdateTZ_h_out_maxi=$NewrecdateTZ[$x] WHERE SUBSTR(recdateTZ,1,8)='$JourEnErreur[$i]'";
$query2 = mysqli_query($conn,$sql2);
$x++;
}
}
// Requete pour correction de h_out_moy de la table MiniMaxidata
echo "Correction des données h_out_moy dans la table MiniMaxidata". "<br />\n"."Patientez SVP". "<br />\n";
ob_flush();
flush();
ob_flush();
flush();
$i=0;
for ($i=0; $i <= $NbJourEnErreur; $i++) {
// 1 Récupération de la valeur moyenne dans la table data
$sql="SELECT AVG(outdoorhumidity) FROM data WHERE SUBSTR(recdateTZ,1,8)='$JourEnErreur[$i]'";
$query = mysqli_query($conn,$sql);
$x=0;
while ($list = mysqli_fetch_assoc($query)) {
$Newh_out_moy[$x]=number_format($list['AVG(outdoorhumidity)']*1,1);
// Correction de h_out_moy de la table MiniMaxidata
$sql2="UPDATE MiniMaxidata SET h_out_moy=$Newh_out_moy[$x] WHERE SUBSTR(recdateTZ,1,8)='$JourEnErreur[$i]'";
$query2 = mysqli_query($conn,$sql2);
$x++;
}
}
// Requete pour correction de chill_maxi de la table MiniMaxidata
echo "Correction des données chill_maxi dans la table MiniMaxidata". "<br />\n"."Patientez SVP". "<br />\n";
ob_flush();
flush();
ob_flush();
flush();
$i=0;
for ($i=0; $i <= $NbJourEnErreur; $i++) {
// 1 Récupération de la valeur maxi dans la table data
$sql="SELECT tstamp, recdateUTC, recdateTZ, windchill FROM data WHERE SUBSTR(recdateTZ,1,8)='$JourEnErreur[$i]' ORDER BY 4 DESC , 1 DESC LIMIT 1";
$query = mysqli_query($conn,$sql);
$x=0;
while ($list = mysqli_fetch_assoc($query)) {
$Newtstamp[$x]=$list['tstamp']*1;
$NewrecdateUTC[$x]=$list['recdateUTC']*1;
$NewrecdateTZ[$x]=$list['recdateTZ']*1;
$Newchill_maxi[$x]=$list['windchill']*1;
// Correction de chill_maxi de la table MiniMaxidata
$sql2="UPDATE MiniMaxidata SET chill_maxi=$Newchill_maxi[$x], TStamp_chill_maxi=$Newtstamp[$x], recdate_chill_maxi=$NewrecdateUTC[$x], recdateTZ_chill_maxi=$NewrecdateTZ[$x] WHERE SUBSTR(recdateTZ,1,8)='$JourEnErreur[$i]'";
$query2 = mysqli_query($conn,$sql2);
$x++;
}
}
// Requete pour correction de chill_moy de la table MiniMaxidata
echo "Correction des données chill_moy dans la table MiniMaxidata". "<br />\n"."Patientez SVP". "<br />\n";
ob_flush();
flush();
ob_flush();
flush();
$i=0;
for ($i=0; $i <= $NbJourEnErreur; $i++) {
// 1 Récupération de la valeur moyenne dans la table data
$sql="SELECT AVG(windchill) FROM data WHERE SUBSTR(recdateTZ,1,8)='$JourEnErreur[$i]'";
$query = mysqli_query($conn,$sql);
$x=0;
while ($list = mysqli_fetch_assoc($query)) {
$Newchill_moy[$x]=number_format($list['AVG(windchill)']*1,1);
// Correction de chill_moy de la table MiniMaxidata
$sql2="UPDATE MiniMaxidata SET chill_moy=$Newchill_moy[$x] WHERE SUBSTR(recdateTZ,1,8)='$JourEnErreur[$i]'";
$query2 = mysqli_query($conn,$sql2);
$x++;
}
}
// Requete pour correction de dew_maxi de la table MiniMaxidata
echo "Correction des données dew_maxi dans la table MiniMaxidata". "<br />\n"."Patientez SVP". "<br />\n";
ob_flush();
flush();
ob_flush();
flush();
$i=0;
for ($i=0; $i <= $NbJourEnErreur; $i++) {
// 1 Récupération de la valeur maxi dans la table data
$sql="SELECT tstamp, recdateUTC, recdateTZ, dewpoint FROM data WHERE SUBSTR(recdateTZ,1,8)='$JourEnErreur[$i]' ORDER BY 4 DESC , 1 DESC LIMIT 1";
$query = mysqli_query($conn,$sql);
$x=0;
while ($list = mysqli_fetch_assoc($query)) {
$Newtstamp[$x]=$list['tstamp']*1;
$NewrecdateUTC[$x]=$list['recdateUTC']*1;
$NewrecdateTZ[$x]=$list['recdateTZ']*1;
$Newdew_maxi[$x]=$list['dewpoint']*1;
// Correction de chill_maxi de la table MiniMaxidata
$sql2="UPDATE MiniMaxidata SET dew_maxi=$Newdew_maxi[$x], TStamp_dew_maxi=$Newtstamp[$x], recdate_dew_maxi=$NewrecdateUTC[$x], recdateTZ_dew_maxi=$NewrecdateTZ[$x] WHERE SUBSTR(recdateTZ,1,8)='$JourEnErreur[$i]'";
$query2 = mysqli_query($conn,$sql2);
$x++;
}
}
// Requete pour correction de dew_moy de la table MiniMaxidata
echo "Correction des données dew_moy dans la table MiniMaxidata". "<br />\n"."Patientez SVP". "<br />\n";
ob_flush();
flush();
ob_flush();
flush();
$i=0;
for ($i=0; $i <= $NbJourEnErreur; $i++) {
// 1 Récupération de la valeur moyenne dans la table data
$sql="SELECT AVG(dewpoint) FROM data WHERE SUBSTR(recdateTZ,1,8)='$JourEnErreur[$i]'";
$query = mysqli_query($conn,$sql);
$x=0;
while ($list = mysqli_fetch_assoc($query)) {
$Newdew_moy[$x]=number_format($list['AVG(dewpoint)']*1,1);
// Correction de dew_moy de la table MiniMaxidata
$sql2="UPDATE MiniMaxidata SET dew_moy=$Newdew_moy[$x] WHERE SUBSTR(recdateTZ,1,8)='$JourEnErreur[$i]'";
$query2 = mysqli_query($conn,$sql2);
$x++;
}
}
// Requete pour correction de heat_maxi de la table MiniMaxidata
echo "Correction des données heat_maxi dans la table MiniMaxidata". "<br />\n"."Patientez SVP". "<br />\n";
ob_flush();
flush();
ob_flush();
flush();
$i=0;
for ($i=0; $i <= $NbJourEnErreur; $i++) {
// 1 Récupération de la valeur maxi dans la table data
$sql="SELECT tstamp, recdateUTC, recdateTZ, outdoorheatindex FROM data WHERE SUBSTR(recdateTZ,1,8)='$JourEnErreur[$i]' ORDER BY 4 DESC , 1 DESC LIMIT 1";
$query = mysqli_query($conn,$sql);
$x=0;
while ($list = mysqli_fetch_assoc($query)) {
$Newtstamp[$x]=$list['tstamp']*1;
$NewrecdateUTC[$x]=$list['recdateUTC']*1;
$NewrecdateTZ[$x]=$list['recdateTZ']*1;
$Newheat_maxi[$x]=$list['outdoorheatindex']*1;
// Correction de chill_maxi de la table MiniMaxidata
$sql2="UPDATE MiniMaxidata SET heat_maxi=$Newheat_maxi[$x], TStamp_heat_maxi=$Newtstamp[$x], recdate_heat_maxi=$NewrecdateUTC[$x], recdateTZ_heat_maxi=$NewrecdateTZ[$x] WHERE SUBSTR(recdateTZ,1,8)='$JourEnErreur[$i]'";
$query2 = mysqli_query($conn,$sql2);
$x++;
}
}
$FermerConnexion= mysqli_close($conn);
Echo "Mise à jour des corrections terminée";
?>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="iso-8859-1">
<title>Document sans titre</title>
</head>
<body>
</body>
</html>
De plus, c'est cette valeur qui me sert à trouver les enregistrements en erreur.
Voila, voila.
A+
Pascal