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 là, 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.