Skip to content
Extraits de code Groupes Projets
Valider cc0a3d69 rédigé par Eric Lupinacci's avatar Eric Lupinacci
Parcourir les fichiers

Ajout du calcul du point de rosée pour les services ne le fournissant pas...

Ajout du calcul du point de rosée pour les services ne le fournissant pas nativement (formule de Magnus).
La température ressentie n'est pas une température mais un indice : on supprimer donc l'unité de température.
Il faut recharger les configurations pour utiliser ces modifications soit en allant dans l'admin plugin soit en le faisant manuellement.
parent dc803c17
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -307,6 +307,18 @@ function inc_meteo_charger_dist(string $lieu, ?string $mode = 'conditions', ?str
$donnees['risque_uv'] = indice2risque_uv($donnees['indice_uv']);
}
// -- Calcul du point de rosée pour les conditions si celui-ci n'est pas fourni
if (
($mode === 'conditions')
and !is_float($donnees['point_rosee'])
) {
$donnees['point_rosee'] = temperature2pointrosee(
$donnees['temperature_reelle'],
$donnees['humidite'],
$configuration_service['unite']
);
}
// 5- Ajout du bloc à l'index en cours
if ($_periode === -1) {
$tableau[$_index_jour] = $donnees;
......
......@@ -121,7 +121,7 @@ function indice2risque_uv(?float $indice_uv = null) : string {
* @return null|float La valeur réelle correspondante convertie en miles
*/
function kilometre2mile(?float $kilometre = null) {
return $kilometre !== null ? 0.6215 * $kilometre : null;
return $kilometre !== null ? 0.621371 * $kilometre : null;
}
/**
......@@ -132,7 +132,7 @@ function kilometre2mile(?float $kilometre = null) {
* @return null|float La valeur réelle correspondante convertie en kilomètres
*/
function mile2kilometre(?float $miles = null) {
return $miles !== null ? $miles / 0.6215 : null;
return $miles !== null ? $miles / 0.621371 : null;
}
/**
......@@ -180,7 +180,42 @@ function millibar2inch(?float $millibar = null) {
}
/**
* Calcule la température ressentie (refroidissement éolien) en degrés celsius.
* Calcule la température de rosée en fonction de la température ambiente et de l'humidité (en pourcentage).
* On utilise la formule de Heinrich Gustav Magnus-Tetens.
*
* @param null|float $temperature Température réelle mesurée en celsius.
* @param null|float $humidite Pourcentage d'humidité.
* @param null|string $unite Système d'unité métrique (`m`, défaut) ou impérial (`s`)
*
* @return null|float La température du point de rosée.
*/
function temperature2pointrosee(?float $temperature = null, ?float $humidite = null, ?string $unite = 'm') {
$point_rosee = null;
// Vérifier les bornes de validité de la formule.
if (
is_float($temperature)
and ($temperature > 0)
and ($temperature < 60)
and is_float($humidite)
and $humidite > 1
and ($humidite < 100)
) {
// On convertit en système métrique pour effectuer le calcul
if ($unite !== 'm') {
$temperature = farenheit2celsius($temperature);
}
// Formule de calcul Heinrich Gustav Magnus-Tetens
$alpha = (17.27 * $temperature) / (237.7 + $temperature) + log($humidite / 100);
$point_rosee = (237.7 * $alpha) / (17.27 - $alpha);
}
return $point_rosee;
}
/**
* Calcule la température ressentie en degrés celsius par refroidissement éolien.
*
* Le calcul n'a de sens que pour des températures réelles supérieures à -50°C et inférieures à 10°C.
* Au-delà de ces valeurs, la fonction renvoie la température réelle fournie en entrée.
......@@ -191,7 +226,7 @@ function millibar2inch(?float $millibar = null) {
*
* @return null|float Température ressentie arrondie en entier et exprimée en degrés celsius.
*/
function temperature2ressenti(float $temperature, float $vitesse_vent, ?string $unite = 'm') {
function temperature2ressenti(?float $temperature = null, ?float $vitesse_vent = null, ?string $unite = 'm') {
// Initialisation de la température à null dans le cas où l'une des données d'entrée est null
$ressenti = null;
......
......@@ -6,7 +6,7 @@
logo="rainette.svg"
demonstration="demo/rainette"
documentation="https://contrib.spip.net/article4949"
schema="11"
schema="12"
>
<nom>Rainette</nom>
<!-- La météo au quotidien -->
......
......@@ -73,6 +73,11 @@ function rainette_upgrade(string $nom_meta_base_version, string $version_cible)
['rainette_configurer'],
];
// La température ressentie est un indice pas une vraie température
$maj['12'] = [
['rainette_configurer'],
];
include_spip('base/upgrade');
maj_plugin($nom_meta_base_version, $version_cible, $maj);
}
......
......@@ -180,7 +180,7 @@ conditions:
historisable: true
temperature_ressentie:
type_php: 'float'
type_unite: 'temperature'
type_unite: 'indice'
groupe: 'donnees_temperatures'
historisable: true
vitesse_vent:
......@@ -693,5 +693,5 @@ historiques:
# Bloc de gestion de la version de configuration
# ----------------------------------------------
version:
numero: '8'
date: '2023-11-18'
numero: '9'
date: '2023-11-26'
......@@ -18,8 +18,8 @@ service:
nom: 'Meteo Concept'
# -- Version de la configuration du service
version:
numero: '6'
date: '2023-11-18'
numero: '7'
date: '2023-11-26'
# -- URL de base des requêtes et des icones (éventuellement)
endpoint_requete: 'https://api.meteo-concept.com/api/'
endpoint_icone: ''
......@@ -224,6 +224,7 @@ conditions:
cle: [ 'rh2m' ]
point_rosee:
cle: [ ]
calcul: true
pression:
cle: [ ]
tendance_pression:
......
......@@ -18,8 +18,8 @@ service:
nom: 'Open-Meteo'
# -- Version de la configuration du service
version:
numero: '5'
date: '2023-11-18'
numero: '6'
date: '2023-11-26'
# -- URL de base des requêtes et des icones (éventuellement)
endpoint_requete: 'https://api.open-meteo.com/v1/forecast'
endpoint_icone: ''
......@@ -161,6 +161,7 @@ conditions:
cle: [ 'relativehumidity_2m' ]
point_rosee:
cle: [ ]
calcul: true
pression:
cle: [ 'surface_pressure' ]
tendance_pression:
......
......@@ -16,8 +16,8 @@ service:
nom: 'OpenWeather'
# -- Version de la configuration du service
version:
numero: '5'
date: '2023-11-18'
numero: '6'
date: '2023-11-26'
# -- URL de base des requêtes et des icones (éventuellement)
endpoint_requete: 'https://api.openweathermap.org/data/2.5/'
endpoint_icone: 'http://openweathermap.org/img/w'
......@@ -164,6 +164,7 @@ conditions:
cle: ['main', 'humidity']
point_rosee:
cle: [ ]
calcul: true
pression:
cle: ['main', 'pressure']
tendance_pression:
......
......@@ -16,8 +16,8 @@ service:
nom: 'WeatherAPI'
# -- Version de la configuration du service
version:
numero: '5'
date: '2023-11-18'
numero: '6'
date: '2023-11-26'
# -- URL de base des requêtes et des icones (éventuellement)
endpoint_requete: 'https://api.weatherapi.com/v1'
endpoint_icone: ''
......@@ -159,6 +159,7 @@ conditions:
cle: [ 'humidity' ]
point_rosee:
cle: [ ]
calcul: true
pression:
cle: [ 'pressure_' ]
suffixe_unite: { id_cle: 0, m: 'mb', s: 'in' }
......
......@@ -16,8 +16,8 @@ service:
nom: 'World Weather Online'
# -- Version de la configuration du service
version:
numero: '5'
date: '2023-11-18'
numero: '6'
date: '2023-11-26'
# -- URL de base des requêtes et des icones (éventuellement)
endpoint_requete: 'https://api.worldweatheronline.com/premium/v1/weather.ashx'
endpoint_icone: ''
......@@ -158,6 +158,7 @@ conditions:
cle: [ 'humidity' ]
point_rosee:
cle: [ ]
calcul: true
pression:
cle: [ 'pressure' ]
suffixe_unite: { id_cle: 0, m: '', s: 'Inches' }
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter