diff --git a/inc/meteo_charger.php b/inc/meteo_charger.php index 837ea5342f526de336f80c27f6446ad69d2e173d..82673ea518ce4b286a2085939dc3b617a7dd2325 100644 --- a/inc/meteo_charger.php +++ b/inc/meteo_charger.php @@ -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; diff --git a/inc/rainette_convertir.php b/inc/rainette_convertir.php index 1ace08d4a4c29d84ebc3e4ec0465d6c94cc46091..e54c6990074c37309aac2c9b0c65ff78f7e29c3b 100644 --- a/inc/rainette_convertir.php +++ b/inc/rainette_convertir.php @@ -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; diff --git a/paquet.xml b/paquet.xml index 6f4f3eadc6658f0b2f5e6f1724ece5b84f3e2a16..33c2c41ac340f245e83ad68980a4799cefcffe1c 100644 --- a/paquet.xml +++ b/paquet.xml @@ -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 --> diff --git a/rainette_administrations.php b/rainette_administrations.php index 9d50df3e0b2e23c079d3c2d8c838cbb1578d3353..f81593e404a223a93330faab07451d0c60279e7f 100644 --- a/rainette_administrations.php +++ b/rainette_administrations.php @@ -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); } diff --git a/services/config/rainette.yaml b/services/config/rainette.yaml index db7585ddea3d14f0e2e9c9368c1b01fa0e6e8605..0e3d21c5f0ed29a74c08b94d0a62a73bd8408431 100644 --- a/services/config/rainette.yaml +++ b/services/config/rainette.yaml @@ -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' diff --git a/services/meteoconcept.yaml b/services/meteoconcept.yaml index c8f2c616abc030e3150f4174262ac975d181b63f..3a385ad4aa7b1e39bc07db9aa605a3c6874bad42 100644 --- a/services/meteoconcept.yaml +++ b/services/meteoconcept.yaml @@ -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: diff --git a/services/openmeteo.yaml b/services/openmeteo.yaml index 09e72eaaca5039fdfec1476e0e6c5f4b0b19df77..cc76986ca484d3fc6f955fed0da7cbfa965c73d0 100644 --- a/services/openmeteo.yaml +++ b/services/openmeteo.yaml @@ -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: diff --git a/services/owm.yaml b/services/owm.yaml index 00bc69c0175d75cde12a7ab452c4feeaf8efb660..bdfa4457d1b65d868ca965cedc56f77d27288bbd 100644 --- a/services/owm.yaml +++ b/services/owm.yaml @@ -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: diff --git a/services/weatherapi.yaml b/services/weatherapi.yaml index 1a409dfd3336b2d60888c4d307c8da90919a15ba..86ca5542f06bf4d7563ffd5f334a6d6737181a6f 100644 --- a/services/weatherapi.yaml +++ b/services/weatherapi.yaml @@ -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' } diff --git a/services/wwo.yaml b/services/wwo.yaml index 20d78a6824cb27b44dc79678907dc20f8f21771f..0846ae07af56404f505576d1c1402dfc08a5e463 100644 --- a/services/wwo.yaml +++ b/services/wwo.yaml @@ -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' }