Récupérer facilement des prévisions via l'API OpenWeatherMap dans Jeedom

Bonjour,

Récemment j’ai voulu essayer de conditionner le comportement de ma chatière connectée en tenant compte de la météo. Au vu des messages ici et , il semblerait que le développement du plugin ne soit pas une priorité.
Et vu que je vis hors de France je ne peux pas compter sur le plugin Météo France.

Mon besoin :

Avoir des données plus fiables que la moyenne des 8 enregistrements de 3h journaliers que propose le plugin Météo

Du coup, j’ai cherché à récupérer directement les infos qui m’intéressent via Jeedom et l’API OpenWeatherMap.

Pré-requis :

  • Créer une clé API sur OpenWeatherMap
  • Installer le plugin Script sur Jeedom

Ce qui va nous intéresser, c’est cette branche de l’API : 5 day weather forecast - OpenWeatherMap, celle déjà utilisée par le plugin météo.
Je ne vais pas redire en moins bien ce que dit la doc, mais on va par exemple pouvoir via requête HTTP récupérer l’ensemble des données de prévisions pour Paris :

https://api.openweathermap.org/data/2.5/forecast?q=Paris&appid=MA_CLE_API

Je constate que je récupère beaucoup de données, tout ce qu’il m’est possible de récupérer en réalité via l’API, à savoir les 8 (24 heures divisées par step de 3h) * 5 jours = 40 sets de valeurs.

Je vais limiter le nombre de retours avec le paramètre cnt, si par exemple cnt=1, alors je récupèrerai les infos pour la tranche des 3h actuelles, j’écris ce message à 9h30, donc je récupère les infos pour la tranche 9h-12h.
Et de surcroît je souhaite récupérer la température sur Nivelles en Belgique :

https://api.openweathermap.org/data/2.5/forecast?q=Nivelles,BE&cnt=1&appid=MA_CLE_API

Le résultat :

{
   "cod":"200",
   "message":0,
   "cnt":1,
   "list":[
      {
         "dt":1690102800,
         "main":{
            "temp":287.65,
            "feels_like":287.53,
            "temp_min":287.65,
            "temp_max":287.76,
            "pressure":1009,
            "sea_level":1009,
            "grnd_level":996,
            "humidity":91,
            "temp_kf":-0.11
         },
         "weather":[
            {
               "id":500,
               "main":"Rain",
               "description":"light rain",
               "icon":"10d"
            }
         ],
         "clouds":{
            "all":75
         },
         "wind":{
            "speed":8.27,
            "deg":208,
            "gust":15.71
         },
         "visibility":10000,
         "pop":0.91,
         "rain":{
            "3h":1.04
         },
         "sys":{
            "pod":"d"
         },
         "dt_txt":"2023-07-23 09:00:00"
      }
   ],
   "city":{
      "id":2790101,
      "name":"Nivelles",
      "coord":{
         "lat":50.5983,
         "lon":4.3285
      },
      "country":"BE",
      "population":24149,
      "timezone":7200,
      "sunrise":1690084599,
      "sunset":1690141279
   }
}

Le champ qui m’intéresse ici :

         "rain":{
            "3h":1.04
         }

Je vais créer un équipement dans le plugin script :

J’ajouter une commande Info et de type JSON nommée getRain3h, car c’est le formattage utilisé par l’API pour renvoyer les données

Dans requête, je décris le chemin pour arriver jusqu’à la valeur souhaitée, dans mon cas :

Clé « list » → « 0 » [car le premier array commence à 0, puis 1, 2, etc…)] → « rain » → « 3h »
que j’écris :

list>0>rain>3h

Si j’avais voulu récupérer les prévisions des 2 * 3 prochaines heures, j’ajoute une nouvelle commande
getRainNext3h avec pour URL :

https://api.openweathermap.org/data/2.5/forecast?q=Nivelles,BE&cnt=2&appid=MA_CLE_API

et avec pour Requête :

list>1>rain>3h

Libre à moi de faire les opérations arithmétiques que je souhaite avec les valeurs de getRain3h et getRainNext3h.

3 « J'aime »

Trop top comme manip, je l’ai mis en place et j’ai récupéré la température aussi !
Pour le coup j’avais jamais creusé mais c’est un peu dommage que le #plugin-meteo prévoit pas ces prévisions à court terme.

1 « J'aime »

Hello,
J’essaie pour bien comprendre le truc :+1:
Merci

L’idéal aurait été de pouvoir ajouter des commandes au plugin Météo en réalité, mais si c’est possible je n’ai pas trouvé comment faire, hormis en allant chipoter dans les sources.

Oui c’est la première chose que je suis allé vérifier en voyant le post initial ! Mais non, rien de tel dans le plugin meteo

Après quelques jours d’utilisation j’ai deux problèmes :

  • quand il n’y a pas de pluie annoncée, l’api n’affiche plus la clé « rain » et donc la valeur retournée par le script est vide au lieu de 0. Dommange
  • j’ai régulièrement des messages d’erreur de timeout :
0038|[2023-07-27 16:55:10][ERROR] : Erreur pour [Maison][Prevision météo ][Pluie à 3h] : Echec de la requête HTTP : https://api.openweathermap.org/data/2.5/forecast?q=<maville>&cnt=1&appid=<macléAPI> cURL error : Operation timed out after 2001 milliseconds with 0 bytes received
0039|[2023-07-27 16:55:17][ERROR] : Erreur pour [Maison][Prevision météo ][Pluie à 3-6h] : Echec de la requête HTTP : https://api.openweathermap.org/data/2.5/forecast?q=<maville>&cnt=2&appid=<macléAPI> cURL error : Failed to connect to api.openweathermap.org port 443: Connection timed out
0040|[2023-07-27 16:55:37][ERROR] : Erreur pour [Maison][Prevision météo ][T° à 6h] : Echec de la requête HTTP : https://api.openweathermap.org/data/2.5/forecast?q=<maville>&cnt=2&appid=<macléAPI> cURL error : Resolving timed out after 2000 milliseconds

(j’ai volontairement masqué maville et macléAPI)
Je me demande si ces requêtes peuvent être en conflit avec celles du plugin météo ?

Salut, je vais regarder du week-end, je n’ai pas encore eu le cas je pense. Il n’arrête pas de pleuvoir :frowning:
Si vraiment il renvoie un champ vide s’il n’y a pas de pluie, ce que je trouve étrange au passage, alors une condition de test dans un scenario permettrait de mapper le vide vers un 0 je pense.
Je regarde dès que je peux. :slight_smile:

Le résultat brut de la requête :

{"cod":"200","message":0,"cnt":1,"list":[{"dt":1690545600,"main":{"temp":299.27,"feels_like":299.27,"temp_min":296.8,"temp_max":299.27,"pressure":1014,"sea_level":1014,"grnd_level":1014,"humidity":65,"temp_kf":2.47},"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01d"}],"clouds":{"all":0},"wind":{"speed":4.04,"deg":252,"gust":4.69},"visibility":10000,"pop":0.21,"sys":{"pod":"d"},"dt_txt":"2023-07-28 12:00:00"}],"city":{"id":3006283,"name":"La Teste-de-Buch","coord":{"lat":44.6287,"lon":-1.1406},"country":"FR","population":27253,"timezone":7200,"sunrise":1690519556,"sunset":1690572957}}

Il n’y a pas mention de « rain »

Je me réponds après avoir regardé sur le site d’openweather :

Weather fields in API response

If you do not see some of the parameters in your API response it means that these weather phenomena are just not happened for the time of measurement for the city or location chosen. Only really measured or calculated data is displayed in API response.

J’ai donc juste la chance d’être dans une région plus sympa que la tienne :rofl:

Je confirme tes observations.
Du coup j’ai juste ajouté une vérification de valeur vide dans mon scenario de gestion de la chatière.

1 « J'aime »

Ce sujet a été automatiquement fermé après 30 jours. Aucune réponse n’est permise dorénavant.