Le script a été codéveloppé par dommarion et opa95.
Il utilise openweather http://api.openweathermap.org/data/3.0/onecall (données météo) et http://api.openweathermap.org/data/3.0/air_pollution (qualité de l'air) pour la collecte des données et http://api-adresse.data.gouv.fr/ ou (http://api.openweathermap.org/geo/1.0/) pour la localisation.
L'utilisation des api openweather nécessite l'ouverture (gratuite) d'un compte pour l'obtention d'une clé (https://openweathermap.org/home/sign_up) qui peut se faire à partir de l'installateur du PLUGIN. Se connecter sur le site OpenWeather.com avec le lien. Créer son compte. Ensuite cliquer sur API, et cliquer sur "Subscribe" de l'API "Current Weather Data", après scrolling vers le bas cliquer sur Get API Key de la colonne "Free". L'accès à cette page est le suivant https://openweathermap.org/price/
La description des informations est donnée sur le site https://openweathermap.org/ (https://openweathermap.org/api/one-call-api pour les données météo et https://openweathermap.org/api/air-pollution pour la qualité de l'air).
Les données récupérées sont nombreuses et toutes accessibles,
pour la qualité de l'air : Indice de qualité, taux CO, NO, NO2, O3, SO2, NH3, particules 2.5 et 10 microns
pour les données météo : Les données du jour, les prévisions horaires sur les 48h suivantes et les prévisions journalières sur la semaine. Dans chaque cas, on obtient la température, la température ressentie, l'humidité, le point de rosée, le vent, l'état météo, le lever et coucher du soleil et de la lune, DJU prévu pour le lendemain, les alertes météo...
Le plugin proposé permet d'obtenir les informations et opérations de base.
Depuis le store eedomus, cliquez sur le bouton « Créer » situé sous l'icone du plugin.
Cela vous donnera ensuite accès à l'interface d'installation du périphérique qu'il vous faudra paramétrer.
Par défaut le périphérique principal sera nommé Ville station météo, mais il pourra être renommé plus tard.
N'oubliez pas de lui affecter une pièce si vous voulez trouver facilement votre périphérique
Choisir une commune en donnant ses coordonnées GPS (lat,lon) (séparateur ',')ou son nom ou son code postal (zip). On peut en changer plus tard. S'il existe plusieurs communes avec le même nom ou correspondant au même code postal, on peut mettre le nom suivi du code postal (séparateur ',').
Choisir un pays (code ISO 3166, 2 Lettres https://www.atlas-monde.net/codes-iso/) ou un état et un pays (USA, séparateur ','). On peut en changer plus tard. Par défaut, le code pays est 'FR', il est indispensable si la commune n'est pas définie par ses coordonnées GPS.
Renseigner la clé OpenWeather ou la demander en cliquant sur le lien et la recopier dans le champ prévu à cet effet.
Allemagne : DE, Andorre : AD, Antarctique : AQ, Belgique : BE, Danemark : DK, Espagne : ES, Etats-Unis : US, Finlande : FI, France FR, Guyane française GF, Guadeloupe : GP, Guernesey : GG, Irlande : IE, Jersey : JE, Luxembourg : LU, Madagascar : MG, Martinique : MQ, Maurice : MU, Monaco : MC, Nouvelle-Calédonie : NC, Réunion : RE, Royaume-Uni : GB, Saint-Barthélemy : BL, Saint-Martin (France) : MF, Saint-Pierre-et-Miquelon : PM, Suisse : CH, Terres Australes : TF.
Le device Maître (Ville station météo) interroge régulièrement les diverses api (toutes les 2 minutes par défaut, ne pas mettre moins) et met les résultats en mémoire. Les autres devices ne font que relire la mémoire sans appels aux api. Si la commune n'a pas changé, le device principal ne redemande pas la localisation et utilise les coordonnées déjà mémorisées, sinon il la redemande.
Le nombre d'appels aux api est donc de 30 par heure (météo et qualité de l'air), soit 720 par jour par API, inférieur au nombre autorisé (1000 pour la version gratuite de OpenWeather).
L'installation du plugin crée :
Il permet aussi de vérifier si la commune correspond bien à la position souhaitée (sinon il faudra modifier VAR1 et VAR3 dans le device).
Il est possible, par la suite de dupliquer des devices et de modifier le XPATH pour avoir d'autres informations.
Se rendre dans l'interface du device pour le dupliquer et/ou le modifier en agissant directement sur la requête ou le XPATH.
Le master ne doit pas être dupliqué, sauf si l'on veut connaître les données météo dans plusieurs communes.
Dans ce cas, on peur recopier le second master en lui affectant un nom différent et une mémoire de sauvegarde différente (voir plus bas &mem=xxx
). Il faudra aussi changer la fréquence de requête de tous les masters pour ne pas dépasser la limite autorisée (1000 par jour, donc environ 40 par heure : 3 ou 4 minutes pour 2 masters, 5 minutes pour 3 masters... ).
Les autres devices, liés au nouveau master, devront faire référence à la même mémoire.
On pourrait tenter d'installer un second ensemble complet en l'affectant à une autre pièce et en changeant les noms des devices (même remarque que précédemment pour la mémoire et les fréquences de requête).
La device maître correspond à tout nom commençant par Master (majuscules ou minuscules); tout autre nom correspond à un Sensor.
Requête simple
http://localhost/script/?exec=openweather.php&device=Master&commune=[VAR1]&key=[VAR2]
Requête complète
http://localhost/script/?exec=openweather.php&device=Master&commune=[VAR1]&key=[VAR2]&country=[VAR3]
Requêtes complexes
http://localhost/script/?exec=openweather.php&device=Master&commune=[VAR1]&key=[VAR2]&country=[VAR3]&state=xxx&mem=xml&debug=0&reloc=0&format=short
Paramètres complémentaires (directement dans l'url)
&mem=nom_memoire
permet d'utiliser une autre mémoire pour connaître les valeurs dans un second lieu :
exemple &mem=vacances
(les devices liés devront comporter le même nom). Par défaut &mem=xml
.
En mode debug, on peut éviter la mise en mémoire avec &mem=no
.
&format=[short/long]
format de sortie du XML :
long est le format classique
<tags><tag_1>'data1'<tag_1>...<tag_n>'data_n'</tag_n></tags>
et short le format condensé
<tags 'tag_1'='data_1' ...'tag_n'='data_n' />
Par défaut &format=short
(variables réduites d'un quart).
&debug=[0/1]
mode débogage (debug=1) :
passer en mode test pour avoir accès à toutes les valeurs, le résultat du XPATH sera invalide (ce n'est pas un format xml).
Par défaut debug=0.
&reloc=[0/1]
mode relocalisation (reloc=1) :
En mode debug, force le recalcul de la position. Par défaut reloc=0.
en mode debug, (debug=1), on peut éviter la modification de la mémoire en mettant &mem=no.
Requête simple
http://localhost/script/?exec=openweather.php
Requête complète
http://localhost/script/?exec=openweather.php&device=Sensor&mem=xml&mode=_xxx&device_id=yyyyyyyy
Par défaut &device=Sensor
(ou n'importequoi différent de Master), &mem=xml
, &mode=
et &periph_id=
(vides). Normalement, le champ &device est inutile, sauf évolution future.
Paramètres complémentaires (directement dans l'url)
&mem=nom_memoire
permet d'utiliser une autre mémoire pour connaître les valeurs dans un second lieu (cf. device Master)
&mode=_xxx
permet d'afficher une partie du XML seulement.
_xxx
vide (ensemble), _com
(commune), _cur
(current), _alr
(alertes), _pre
(précipitation), _dju
(DJU), _hor
(prévisions horaires), _day
(prévisions journalières),_qua
(qualité de l'air)
si _xxx
différent de _hor
,
_0H
à _47H
(prévision actuelle à prévision dans 47h).
_0
à _23
(prévision à minuit à prévision à 23h, à partir de l'heure courante).
_*0
à _*23
(prévision à minuit à prévision à 23h, à partir de l'heure courante du lendemain).
si _xxx
différent de _day
,
_0J
à _7J
(prévision actuelle à prévision dans 7 jours).
_auj
ou _dim
à _sam
(prévision au jour demandé).
&periph_id=
periph_id où periph_id représente l'id d'un actionneur. permet de définir le mode de façon dynamique pour daily ou hourly. Les valeurs définies doivent correspondre à (ou ne remplir que les valeurs utiles et définir des noms plus parlants : Dimanche, Midi, Minuit, H+1, H+3) :
0,1...7 pour les valeurs _auj,_1J.._7J
100 ... 106 pour les valeurs _dim,.._sam
200 ... 247 pour les valeurs _0H,.._47H
300 ... 347 pour les valeurs _0..._23
, _*0..._*23
Utilisées seulement pour le master.
VAR1 : Commune
[VAR1] = lat,lon
ou [VAR1] = lat,lon,country
ou [VAR1] = lat,lon,state,country
[VAR1] = nom_commune
ou [VAR1] = nom_commune,zip
ou [VAR1] = nom_commune,country
ou
[VAR1] = nom_commune,state,country
[VAR1] = zip
ou [VAR1] = zip,country
ou [VAR1] = zip,state,country
VAR2 : Clef openweather
[VAR3]
vide ou [VAR3] = country
ou [VAR3] = state,country
En cas de conflit, Commune est prioritaire sur Country et sur State et donc [VAR1] est prioritaire sur [VAR3].
Le script affiche les résultats de la requête sous forme XML dont les données pourront ensuite être exploitées par le XPATH. Passer en mode test pour explorer les diverses valeurs et tester le résultat. Faire une première lecture en restant dans le mode Utiliser l'URL : puis faire les essais suivants dans le mode Utiliser le résultat XML, ce qui évite des appels au device.
La description des informations est donnée sur le site https://openweathermap.org/ (https://openweathermap.org/api/one-call-api pour les données météo et https://openweathermap.org/api/air-pollution pour la qualité de l'air).
Les données sont sorties par bloc
Bloc 1 : Données de localisation (commune)
Bloc 2 : Erreurs de connexion
Bloc 3 : Données courantes (température, humidité... actuelles)
Bloc 4 : Alertes (MeteoFrance...nombre de blocs variable alert0, alert1 ...)
Bloc 5 : Précipitations (dans l'heure)
Bloc 6 : Prévisions horaires (H+0 à H+47h -> 48 blocs)
Bloc 7 : Prévisions journalières (J+0 à J+7 -> 8 blocs)
Bloc 8 : Qualité de l'Air (actuelle)
Pour le format long, il suffit de supprimer les '@'
.
Bloc 1 : Données de localisation (commune)
//@city_GPS
exemple : Saint-Leu-la-Forêt : Île-de-France GPS: 49.0133 deg , 2.2429 deg//@country
exemple : FR//@state
exemple : Île-de-France//@zip
exemple : 95320//@lat
exemple : 49.0133//@lon
exemple : 2.2429//@timezone
exemple : Europe/Paris//@timezone_offset
exemple : 7200 (décalage en secondes)Bloc 2 : Erreurs de connexion
//@retour_API_meteo
code erreur connexion météo (200, 400, 401, 404, 429)//@message_API_meteo
message connexion météo (OK, wrong latitude, voir la documentation Openweather : https://openweathermap.org/faq#api-errors)//@retour_API_qualite
message connexion qualité (200, 400, 401, 404, 429)//@message_API_qualite
code erreur connexion qualité (OK, wrong latitude, voir la documentation Openweather : https://openweathermap.org/faq#api-errors)Bloc 3 : Données actuelles
Les valeurs entre [] sont directement reprises des données équivalentes d'OpenWeather.
[chd]
données identiques aux données current, hourly et daily.
[*hd]
données identiques aux données hourly et daily, recalculées ou estimées pour current.
[--d]
données identiques aux données daily, inexistantes pour current et hourly.
[*]
données inexistantes dans OpenWeather.
//@num
{Numéro} exemple : 0 [*]//@nom
{Nom} exemple : now [*]//@dt
{Date Unix, GMT secondes} exemple : 1661890548 (gmt) [chd]//@date_loc_str
{Date locale} exemple : 2002-09-14 (heure locale) [*]//@heure_loc_str
{Heure locale} exemple : 22:15 (heure locale) [*]//@heure_loc_semaine
{Jour semaine, 0=Dimanche} exemple : 3 (heure locale) [*]//@heure_loc_fr
{Jour semaine} exemple : Mercredi (heure locale) [*]//@sunrise
{Date Unix} exemple : 1661835876 (gmt) [c*d]//@sunset
{Date Unix} exemple : 1661884757 (gmt) [c*d]//@sunrise_hloc
{Heure locale} exemple : 2022-08-30 7:04 [**]//@sunset_hloc
{Heure locale} exemple : 2022-08-30 20:39 [**]//@moonrise
{Date Unix} exemple : 1661835876 [**d]//@moonset
{Date Unix} exemple : 1661884757 [**d]//@moonrise_hloc
{Heure locale} exemple : 2022-08-30 7:04 [**]//@moonset_hloc
{Heure locale} exemple : 2022-08-30 20:39 [**]//@moon_phase_
{0 ou 1 -> NL, 0.5 -> PL} exemple : 0.50 [**d]//@night
{0 -> jour, 1 -> nuit} exemple : 1 [*]//@temperature
{Température actuelle} exemple : 22.25 (°C) [ch*]//@temp_morn
{Température matin} exemple : 22.25 (°C) [**d]//@temp_day
{Température midi} exemple : 22.25 (°C) [**d]//@temp_eve
{Température soir} exemple : 22.25 (°C) [**d]//@temp_night
{Température matin} exemple : 22.25 (°C) [**d]//@feels_like
{Température actuelle ressentie} exemple : 21.81 (°C) [ch*]//@temp_like_morn
{Température ressentie matin} exemple : 22.25 (°C) [**d]//@temp_like_day
{Température ressentie midi} exemple : 22.25 (°C) [**d]//@temp_like_eve
{Température ressentie soir} exemple : 22.25 (°C) [**d]//@temp_like_night
{Température ressentie nuit} exemple : 22.25 (°C) [**d]//@pressure
{Pression atmosphérique actuelle} exemple : 1018 (hPa) [chd]//@humidity
{humidité actuelle} exemple : 49 (%) [chd]//@dew_point
{Point de rosée actuel} exemple : 11.04 (°C) [chd]//@wind_speed
{Vitesse du vent} exemple : 7.416 (km/h) [chd]//@wind_gust
{Vitesse des rafales} exemple : 7.416 (km/h) [chd]//@wind_deg
{Direction du vent} exemple : 330 (deg) [chd]//@clouds
{Pourcentage de nuages} exemple : 0 (%) [chd]//@uvi
{Indice UV actuel} exemple : 0 (1 .. 11+) [chd]//@visibility
{Visibilité} exemple : 10000 (m) [ch*]//@pop
{Probabilité de pluie} exemple : 0 (%) [*hd]//@rain
{hauteur de pluie dans l'heure} exemple : 0 (mm) [ch-]//@rain
{hauteur de pluie dans la journée} exemple : 0 (mm) [--d]//@snow
{hauteur de neige dans l'heure}exemple : 0 (mm) [ch-]//@snow
{hauteur de neige dans la journée}exemple : 0 (mm) [--d]//@weather_id
{code temps, mais 800->900 si nuit} exemple : 900 [ch]//@weather_main
{Etat du ciel (anglais)} exemple : clear [ch]//@weather_des
{Etat du ciel (langue locale)} exemple : ciel dégagé [ch]Bloc 4 : Alertes (nombre de blocs variable alert0, alert1 ...)
//@alert_0/@sender
exemple : METEO-FRANCE//@alert_0/@evenement
exemple : Moderate thunderstorm warning//@alert_0/@debut
exemple : 1661832000 (gmt)//@alert_0/@fin
exemple : 1661918400 (gmt)//@alert_0/@debut_hloc
exemple : 2022-08-30 6:00 (heure locale)//@alert_0/@fin_hloc
exemple : 2022-08-31 6:00 (heure locale)//@alert_0/@description
exemple : Although rather usual ... rising streams or high waves)//@alert_0//@Tag0
exemple : Thunderstorm (Tag0, tag1 ... )Bloc 5 : Précipitations
//@averse_hauteur
exemple : 0 (mm cumulés sur l'averse)//@averse_duree
exemple : 60 (minutes)//@averse_debut_hloc
exemple : 22:15 (heure début)//@averse_fin_hloc
exemple : 23:15 (heure fin)Bloc 6 : Prévisions horaires (0 à 47h -> 48 blocs)
Si l'affichage est partiel, les commandes sont identiques au mode 2.
Si l'affichage est complet, remplacer //
par
//hour[@num=4]/
pour avoir la valeur dans 4h : exemple //hour[@num=4]/@temperature
ou
//hour[@nom=12]/
pour avoir la valeur à midi : exemple //hour[@om=12]/@temperature
Bloc 7 : Prévisions journalières (0 à 7 -> 8 blocs) (voir bloc 2)
Si l'affichage est partiel, les commandes sont identiques au mode 2.
Si l'affichage est complet, remplacer //
par
//day[@num=4]/
pour avoir la valeur dans 4 jours : exemple //day[@num=4]/@temperature
ou
//day[@nom="dim"]/
pour avoir la valeur dimanche : exemple //day[@om="dim"]/@temperature
Bloc 8 : Qualité de l'Air
//@donnees_qualite/@dt
exemple : 1661890548 (gmt)//@aqi
exemple : 2 (1 :bon .. 5:très mauvais)//@air_no
exemple : 0 (µg/m3)//@air_no2
exemple : 4.76 (µg/m3)//@air_o3
exemple : 105.86 (µg/m3)//@air_so2
exemple : 2.3 (µg/m3)//@air_co
exemple : 201.94 (µg/m3)//@air_pm2_5
exemple : 12.43 (µg/m3)//@air_pm_10
exemple : 14.37 (µg/m3)Résultat du XML (le résultat peut être différent, format short)
```xml
Bloc 1 : Données générales
```xml
Bloc 2 : Erreurs de connexion
```xml
ou
ou
ou
...
````
Bloc 3 : Données actuelles
```xml
Bloc 4 : Alertes
```xml
Bloc 5 : Précipitations
```xml
Bloc 6 : Prévisions horaires (cf bloc 2)
Bloc 7 : Prévisions journalières (cf bloc 2)
Bloc 8 : Qualité de l'Air
xml
<donnees_qualite dt="1663225810" air_aqi="2" air_no="0.87" air_no2="8.74" air_o3="26.82" air_so2="0.84" air_co="216.96" air_pm2_5="11.23" air_pm10="13.18" air_nh3="1.92" />
Il est préférable de tout supprimer et de recharger, mais on peut modifier les devices existants.
On peut passer la fréquence de la requête à 2 minutes (valeur minimale).
URL de la requête : http://localhost/script/?exec=openweather.php&commune=[VAR1]&key=[VAR2]&country=[VAR3]&device=MasterData
XPATH : //@city_GPS
URL de la requête : http://localhost/script/?exec=openweather2.php&mode=_cur
modifier XPATH en rajoutant un @
après les //
XPATH exemple //@temperature
Pour la météo, les //code_weather
deviennent //@weather_id
et les autres //xxxx_weather
deviennent //@weather_xxxx
(xxxx = main ou xxxx=desc).
URL de la requête : http://localhost/script/?exec=openweather2.php&mode=_qua
modifier XPATH en rajoutant un @
après les //
XPATH exemple //@air_co
Remplacer les unités de ppm
ou ppb
en µg/m3