[Python] Version Cartes Vigilance Météo 2024
Publié : 12 mars 2024, 15:48
Bonjour,
voici le tuto pour avoir les vigilances de phénomènes visible sur la carte https://vigilance.meteofrance.fr/fr dans un capteur alerte dans Domoticz
Création de compte sur l'API météofrance
https://portail-api.meteofrance.fr/web/fr/
rechercher "DonneesPubliqueVigilance" dans la barre de recherche
puis cliquer sur "Souscrire à l'API gratuitement" Ensuite cliquer sur votre nom d'utilisateur et ensuite sur "MES API" Et cliquer sur "Générer Token" Vérifier que le "OAuth2" est coché et copier la clé entre "Basic" et le dernier " (guillemet) ATTENTION ne pas le copier
Installer les librairies
Créer un script python et coller celui-ci en remplaçant par vos variables
lancer le une fois, si tous est ok vous devriez avoir ceci :
ensuite ajouter à cron le lancement du script :
le "7-23" exécutera le script toute les heures de 7h à 23h
voici le tuto pour avoir les vigilances de phénomènes visible sur la carte https://vigilance.meteofrance.fr/fr dans un capteur alerte dans Domoticz
Création de compte sur l'API météofrance
https://portail-api.meteofrance.fr/web/fr/
rechercher "DonneesPubliqueVigilance" dans la barre de recherche
puis cliquer sur "Souscrire à l'API gratuitement" Ensuite cliquer sur votre nom d'utilisateur et ensuite sur "MES API" Et cliquer sur "Générer Token" Vérifier que le "OAuth2" est coché et copier la clé entre "Basic" et le dernier " (guillemet) ATTENTION ne pas le copier
Installer les librairies
Code : Tout sélectionner
pip3 install requests json pycurlCréer un script python et coller celui-ci en remplaçant par vos variables
Code : Tout sélectionner
#----- VARIABLES A MODIFIER -----
departement = 38 # votre numero de departement
IP = "192.168.1.1:8080" # votre IP et port de Domoticz
IDX = 131 # l'IDX de votre capteur d'alerte
key = "copier le token ici" # votre token type Oauth2 meteofrance
#----- FIN DES VARIABLES A MODIFIER -----
import requests
import json
import pycurl
url = "https://portail-api.meteofrance.fr/token"
data = {"grant_type": "client_credentials"}
headers = {"Authorization": f"Basic {key}"}
get_token = requests.post(url, data=data, headers=headers)
#print(get_token.text)
token = json.loads(get_token.text)
token = token.get("access_token")
url2 = "https://public-api.meteofrance.fr/public/DPVigilance/v1/cartevigilance/encours"
headers2 = {"accept": "*/*", "Authorization": f"Bearer {token}"}
donneesfull = requests.get(url2, headers=headers2)
#print(donneesfull.text)
#donnees jour en cours
donneesj = json.loads(donneesfull.text)
for periode in donneesj["product"]["periods"]:
if periode["echeance"] == "J1":
donneesj["product"]["periods"].remove(periode)
donneesj = json.dumps(donneesj, indent=2)
#fin donnees jour en cours
donneesj = json.loads(donneesj)
for periode in donneesj["product"]["periods"]:
for domaine in periode["timelaps"]["domain_ids"]:
departement=str(departement)
if domaine["domain_id"] == departement:
donnees_bloc = domaine
donnees_bloc = str(donnees_bloc)
donnees_bloc = donnees_bloc.replace("\'","\"")
break
#print(donnees_bloc)
donnees_bloc = json.loads(donnees_bloc)
color_max = donnees_bloc["max_color_id"]
#print(color_max)
resultats = {}
for item in donnees_bloc["phenomenon_items"]:
phenomenon_id = item["phenomenon_id"]
max_color_id = item["phenomenon_max_color_id"]
resultats[phenomenon_id] = max_color_id
risquef = ""
for phenomenon_id, max_color_id in resultats.items():
#print(f"Phenomenon ID {phenomenon_id}: Max Color ID {max_color_id}")
phenomenon_id = int(phenomenon_id)
max_color_id = int(max_color_id)
#print(phenomenon_id,max_color_id)
if max_color_id > 1 :
if phenomenon_id == 1 :
risque = "vent,"
if phenomenon_id == 2 :
risque = "pluie,"
if phenomenon_id == 3 :
risque = "orages,"
if phenomenon_id == 4 :
risque = "crues,"
if phenomenon_id == 5 :
risque = "neige%2Fverglas,"
if phenomenon_id == 6 :
risque = "canicule,"
if phenomenon_id == 7 :
risque = "grand%20froid,"
if phenomenon_id == 8 :
risque = "avalanches,"
if phenomenon_id == 9 :
risque = "vagues%20submersion,"
else :
risque = ""
#print(risque)
risquef = risquef + risque
risquef = risquef.rstrip(",")
#print(f"Le risque est :{risquef}")
jsnS = requests.get('http://'+IP+'/json.htm?type=command¶m=getdevices&rid='+str(IDX))
dataS = jsnS.json()
risquefold = str(dataS['result'][0]['Data'])
#print(risquefold)
#print(risquefold,risquef)
if risquefold != risquef :
c = pycurl.Curl()
c.setopt(c.URL, 'http://'+IP+'/json.htm?type=command¶m=udevice&idx='+str(IDX)+'&nvalue='+str(color_max)+'&svalue='+ str(risquef))
c.perform()
lancer le une fois, si tous est ok vous devriez avoir ceci :
Code : Tout sélectionner
{
"status" : "OK",
"title" : "Update Device"
}
ensuite ajouter à cron le lancement du script :
Code : Tout sélectionner
crontab -eCode : Tout sélectionner
0 7-23 * * * /usr/bin/python3.9 /home/pi/vigilance.py >/dev/null 2>&1