Propluvia intégré à Jeedom

Salut @OUARZA

J’ai modifié et fait tourner mon code pour faire remonter la légende en fonction des suffixes pro, part ou sans rien.
Cependant je n’ai vu absolument aucune différence dans l’intitulé des légendes sur les 3 types. Es-tu sur que ça remonte quelque chose de différent ?

Hello @elmer69 ,
Oui oui, regarde
https://eau.api.agriculture.gouv.fr/apis/propluvia/editoriaux/?idEditorial=legende_alerte_part
https://eau.api.agriculture.gouv.fr/apis/propluvia/editoriaux/?idEditorial=legende_alerte_pro

Tu as repris mon code ? Je pense qu’il y a un souci avec. J’ai toujours vigilance pour ma commune alors que le site donne autre chose…
Je veux bien ton code du coup :slight_smile:

Mathieu

ok effectivement je n’avait testé sur « alerte »
sur « crise » et « vigilance » ça ne change absolument rien de ce que j’ai pu voir

je finalise un petit truc et je partage mon nouveau code. J’ai bien avancé :grin:

Bon voilà ça marche !
je récupère les infos de la zone qui me concernent uniquement, en différenciant les zones eau superficielle et eau souterraine.
la légende pro/part semble marcher mais je n’ai pas pu tester tous les cas. Si tu peux vérifier chez toi

$date = date('Y-m-d');
$codeInseeCommune = '69027';
$typeInfo = 'pro'; // part, pro ou vide

if (!empty($typeInfo)){
  $typeInfo = '_'.$typeInfo;
} else {
  $typeInfo = '';
}

//récupération nom commune
$url = 'https://geo.api.gouv.fr/communes?code='.$codeInseeCommune.'&fields=code,nom,contour&format=geojson&geometry=contour';
$request_http = new com_http($url);
$request_http->setCURLOPT_HTTPAUTH(CURLAUTH_DIGEST);
$jsonData=json_decode(trim($request_http->exec()), true);
if(is_array($jsonData)){
  $nomCommune = $jsonData['features']['0']['properties']['nom'];
}

//récupération info arreté
$url = 'https://eau.api.agriculture.gouv.fr/apis/propluvia/arretes/'.$date.'/commune/'.$codeInseeCommune;
$request_http = new com_http($url);
$request_http->setCURLOPT_HTTPAUTH(CURLAUTH_DIGEST);
$jsonData=json_decode(trim($request_http->exec()), true);
if(is_array($jsonData)){
  $codeInseeDepartement = $jsonData[0]['codeInseeDepartement'];
  $dateDebutValiditeArrete = $jsonData[0]['dateDebutValiditeArrete'];
  $dateFinValiditeArrete = $jsonData[0]['dateFinValiditeArrete'];
  //affichage info arreté
  $scenario->setlog('Département            : '.$codeInseeDepartement);
  $scenario->setlog('Début validité arreté  : '.$dateDebutValiditeArrete);
  $scenario->setlog('Fin validité arreté    : '.$dateFinValiditeArrete);
  $scenario->setlog('Commune                : '.$nomCommune);
  
  //balayage des zones
  foreach ($jsonData[0]['restrictions'] as $value=>$jsonKey) {       
    $nomNiveau = $jsonKey['nomNiveau'];
    $nomZone =  $jsonKey['zoneAlerte']['nomZone'];
    $typeZone = $jsonKey['zoneAlerte']['typeZone'];
    
    //balayage des communes pour récupérer uniquement info de celle recherchée
    foreach ($jsonKey['zoneAlerte']['communes'] as $value2=>$jsonKey2) {
      if ( $jsonKey2['codeInseeCommune'] == $codeInseeCommune) {
        //recupération info détaillé sur le niveau d'alerte
        $url_legende = 'https://eau.api.agriculture.gouv.fr/apis/propluvia/editoriaux/?idEditorial=legende_'.strtolower($nomNiveau).$typeInfo;    
        $request_http_legende = new com_http($url_legende);
        $request_http_legende->setCURLOPT_HTTPAUTH(CURLAUTH_DIGEST);
        $legende=json_decode(trim($request_http_legende->exec()), true);

        //affichage résultat
        $scenario->setlog('');
        $scenario->setlog('----------'.strtoupper($nomZone.' ['.$typeZone.']').'----------');
        $scenario->setlog('Niveau >> '.$nomNiveau);
        $scenario->setlog($legende[0]['contenuEditorial']);
        //$scenario->setlog('URL legende -> '.$url_legende);
      }
    }
  }
}

Maintenant je pense que je vais me faire un widget pour afficher tout ça proprement. Peut-être en as tu déjà fait un que je puisse reprendre?

non seulement il est extrêmement long à l’affichage mais je pense que le site est complètement à la ramasse: il me dit aucune alerte alors que la carte et toute rouge écarlate…

1 « J'aime »

Merci @elmer69 ,
Ton code est bien plus digeste que le mien.
Oui, le site n’est pas une valeur sûre ce qui est bien dommage pour celles et ceux qui se fient à un site du gouvernement pour être dans les clous :smiley:

Concernant le widget, non je n’ai rien fait. En principe je fais un truc très simple avec le module widget intégré à Jeedom et des icones Font Awesome.

Si tu veux quand même que je regarde, je peux :slight_smile:

Mathieu

J’ai poussé les infos dans un virtuel. C’est fonctionnel mais pas franchement beau
Si tu as des idées pour rendre ça un peu plus friendly :smile:
image
Un plugin permettrait de créer une tuile vraiment adapté avec des couleurs qui pourrait reprendre les echelles de couleur du site par exemple. C’est hors de mes compétences pour l’instant.

1 « J'aime »

Bonjour à tous, hello @elmer69 ,
J’ai apporté une petite modification pour afficher la date dans le bon format.
image

  $scenario->setlog('Début validité arreté  : '.date("d/m/Y",strtotime("$dateDebutValiditeArrete")));
  $scenario->setlog('Fin validité arreté    : '.date("d/m/Y",strtotime("$dateFinValiditeArrete")));

As-tu une version « finale » de ton code ?

Tu veux un truc comme ça ?
image

ou
image

Mathieu

1 « J'aime »

Hello @OUARZA
Merci pour le coup de main :smiley:
Je viens d’intégrer ta contribution sur le formatage de la date. voici donc la dernière version de mon code :

$date = date('Y-m-d');
$codeInseeCommune = '69027';
$typeInfo = 'part'; // part, pro ou vide

if (!empty($typeInfo)){
  $typeInfo = '_'.$typeInfo;
} else {
  $typeInfo = '';
}

//récupération nom commune
$url = 'https://geo.api.gouv.fr/communes?code='.$codeInseeCommune.'&fields=code,nom,contour&format=geojson&geometry=contour';
$request_http = new com_http($url);
$request_http->setCURLOPT_HTTPAUTH(CURLAUTH_DIGEST);
$jsonData=json_decode(trim($request_http->exec()), true);
if(is_array($jsonData)){
  $nomCommune = $jsonData['features']['0']['properties']['nom'];
}

//récupération info arrêté
$url = 'https://eau.api.agriculture.gouv.fr/apis/propluvia/arretes/'.$date.'/commune/'.$codeInseeCommune;
$request_http = new com_http($url);
$request_http->setCURLOPT_HTTPAUTH(CURLAUTH_DIGEST);
$jsonData=json_decode(trim($request_http->exec()), true);
if(is_array($jsonData)){
  $codeInseeDepartement = $jsonData[0]['codeInseeDepartement'];
  $dateDebutValiditeArrete = date("d/m/Y",strtotime($jsonData[0]['dateDebutValiditeArrete']));
  $dateFinValiditeArrete = date("d/m/Y",strtotime($jsonData[0]['dateFinValiditeArrete']));
  //affichage info arreté
  $scenario->setlog('Département            : '.$codeInseeDepartement);
  $scenario->setlog('Début validité arrêté  : '.$dateDebutValiditeArrete);
  $scenario->setlog('Fin validité arrêté    : '.$dateFinValiditeArrete);
  $scenario->setlog('Commune                : '.$nomCommune);
  //mise à jour des commmandes du virtuel
  cmd::byString('#[Info][Propluvia info][Département]#')->event($codeInseeDepartement);
  cmd::byString('#[Info][Propluvia info][Date début arrêté]#')->event($dateDebutValiditeArrete);
  cmd::byString('#[Info][Propluvia info][Date fin arrêté]#')->event($dateFinValiditeArrete);
  cmd::byString('#[Info][Propluvia info][Commune]#')->event($nomCommune);
  
  //balayage des zones
  foreach ($jsonData[0]['restrictions'] as $value=>$jsonKey) {       
    $niveauRestriction = $jsonKey['niveauRestriction'];
    $nomNiveau = $jsonKey['nomNiveau'];
    $nomZone =  $jsonKey['zoneAlerte']['nomZone'];
    $typeZone = $jsonKey['zoneAlerte']['typeZone'];
    
    //balayage des communes pour récupérer uniquement info de celle recherchée
    foreach ($jsonKey['zoneAlerte']['communes'] as $value2=>$jsonKey2) {
      if ( $jsonKey2['codeInseeCommune'] == $codeInseeCommune) {
        //recupération info détaillé sur le niveau d'alerte
        $url_legende = 'https://eau.api.agriculture.gouv.fr/apis/propluvia/editoriaux/?idEditorial=legende_'.strtolower($nomNiveau).$typeInfo;    
        $request_http_legende = new com_http($url_legende);
        $request_http_legende->setCURLOPT_HTTPAUTH(CURLAUTH_DIGEST);
        $legende=json_decode(trim($request_http_legende->exec()), true);
        if(is_array($legende)){
        	$contenuEditorial = $legende[0]['contenuEditorial'];
        }
        
        //affichage résultat dans le log scénario
        $scenario->setlog('');
        $scenario->setlog('----------'.strtoupper($nomZone.' ['.$typeZone.']').'----------');
        $scenario->setlog('Niveau >> '.$nomNiveau.' ('.$niveauRestriction.')');
        $scenario->setlog($contenuEditorial);
        //$scenario->setlog('URL legende -> '.$url_legende);
        
        //mise à jour des commmandes du virtuel
        if ($typeZone == 'SUP') {
          cmd::byString('#[Info][Propluvia info][Nom zone SUP]#')->event($nomZone);
          cmd::byString('#[Info][Propluvia info][Niveau restriction zone SUP]#')->event($niveauRestriction);
          cmd::byString('#[Info][Propluvia info][Nom restriction zone SUP]#')->event($nomNiveau);
          cmd::byString('#[Info][Propluvia info][Editorial zone SUP]#')->event($contenuEditorial);
        } elseif ($typeZone == 'SOU') {
          cmd::byString('#[Info][Propluvia info][Nom zone SOU]#')->event($nomZone);
          cmd::byString('#[Info][Propluvia info][Niveau restriction zone SOU]#')->event($niveauRestriction);
          cmd::byString('#[Info][Propluvia info][Nom restriction zone SOU]#')->event($nomNiveau);
          cmd::byString('#[Info][Propluvia info][Editorial zone SOU]#')->event($contenuEditorial);
        } else {
          cmd::byString('#[Info][Propluvia info][Nom zone SUP]#')->event(NULL);
          cmd::byString('#[Info][Propluvia info][Niveau restriction zone SUP]#')->event(NULL);
          cmd::byString('#[Info][Propluvia info][Nom restriction zone SUP]#')->event(NULL);
          cmd::byString('#[Info][Propluvia info][Editorial zone SUP]#')->event(NULL);
          cmd::byString('#[Info][Propluvia info][Nom zone SOU]#')->event(NULL);
          cmd::byString('#[Info][Propluvia info][Niveau restriction zone SOU]#')->event(NULL);
          cmd::byString('#[Info][Propluvia info][Nom restriction zone SOU]#')->event(NULL);
          cmd::byString('#[Info][Propluvia info][Editorial zone SOU]#')->event(NULL);
        }  
      }
    }
  }
}

Comme tu as pu le constater je mets à jour directement les commandes du virtuel créé pour l’occasion.
Concernant l’affichage, mon idée serait de graduer le niveau d’alerte avec le même code couleur que le site. Soit sur le texte ou une pastille qui reprenne la couleur. Tes 2 propositions sont intéressantes, à voir celle qui donnerai le meilleur rendu sur l’ensemble.

2 « J'aime »

@elmer69,
C’est pas fifou mais ça t’irait ?

image

Sinon lolilol:
image

Mathieu

Hello @OUARZA, oui j’aime bien l’idée, à tester.
Bon faut pas que ça ne plaise qu’à moi non plus, fait aussi comme toi tu le sens

il se passe quoi là???

1 « J'aime »

Oui oui ça me plait bien :slight_smile:

C’est sur le site: Propluvia (developpement-durable.gouv.fr)

Mathieu

@elmer69 ,
As-tu prévu ce cas là (aucune restriction) ?
https://eau.api.agriculture.gouv.fr/apis/propluvia/arretes/2022-08-10/commune/18033

C’est pour l’affichage du widget :slight_smile:

J’y connais rien, mais je pense que je vais me lancer avec l’aide de ce tuto https://doc.jeedom.com/fr_FR/dev/tutorial_plugin

Mathieu

Pas complètement. cad sur les zones ça ne devrait rien afficher (valeurs vides) mais pour la première partie je ne sais pas comment ça va réagir.
Malheureusement ce matin la commune dans ton lien renvoie sur des restrictions, je ne peux donc pas le verifier. Il faudrait trouver une commune qui n’a pas encore de restriction (si cela existe encore…)
Si j’en trouve une, je ferai les modifs en conséquence.

c’est en faisant que l’on apprend :wink: n’hésites pas à me solliciter pour faire des tests ou autre.
Bon courage

Je viens de modifier le code pour prévoir ce cas là, et de le tester avec la commune d’Amiens.
Voici donc le nouveau code :

$date = date('Y-m-d');
$codeInseeCommune = '69027'; 
$typeInfo = 'part'; // part, pro ou vide

if (!empty($typeInfo)){
  $typeInfo = '_'.$typeInfo;
} else {
  $typeInfo = '';
}

//récupération nom commune
$url = 'https://geo.api.gouv.fr/communes?code='.$codeInseeCommune.'&fields=code,nom,contour&format=geojson&geometry=contour';
$request_http = new com_http($url);
$request_http->setCURLOPT_HTTPAUTH(CURLAUTH_DIGEST);
$jsonData=json_decode(trim($request_http->exec()), true);
if(is_array($jsonData)){
  $nomCommune = $jsonData['features']['0']['properties']['nom'];
}

//récupération info arrêté
$url = 'https://eau.api.agriculture.gouv.fr/apis/propluvia/arretes/'.$date.'/commune/'.$codeInseeCommune;
$request_http = new com_http($url);
$request_http->setCURLOPT_HTTPAUTH(CURLAUTH_DIGEST);
$jsonData=json_decode(trim($request_http->exec()), true);
if(is_array($jsonData)){
  //vérifie qu'un arrêté existe
  if ($jsonData['message'] != NULL) {
    $scenario->setlog('Aucun arrêté trouvé à la date du '.$date. ' pour la commune de '.$nomCommune);
    // mise à jour virtuel
    cmd::byString('#[Info][Propluvia info][Département]#')->event('');
    cmd::byString('#[Info][Propluvia info][Date début arrêté]#')->event('Aucun arrêté trouvé à la date du '.$date);
    cmd::byString('#[Info][Propluvia info][Date fin arrêté]#')->event('');
    cmd::byString('#[Info][Propluvia info][Commune]#')->event($nomCommune);
    cmd::byString('#[Info][Propluvia info][Nom zone SUP]#')->event('');
    cmd::byString('#[Info][Propluvia info][Niveau restriction zone SUP]#')->event('');
    cmd::byString('#[Info][Propluvia info][Nom restriction zone SUP]#')->event('');
    cmd::byString('#[Info][Propluvia info][Editorial zone SUP]#')->event('');
    cmd::byString('#[Info][Propluvia info][Nom zone SOU]#')->event('');
    cmd::byString('#[Info][Propluvia info][Niveau restriction zone SOU]#')->event('');
    cmd::byString('#[Info][Propluvia info][Nom restriction zone SOU]#')->event('');
    cmd::byString('#[Info][Propluvia info][Editorial zone SOU]#')->event('');
     
  } else {
    $codeInseeDepartement = $jsonData[0]['codeInseeDepartement'];
    $dateDebutValiditeArrete = date("d/m/Y",strtotime($jsonData[0]['dateDebutValiditeArrete']));
    $dateFinValiditeArrete = date("d/m/Y",strtotime($jsonData[0]['dateFinValiditeArrete']));
    //affichage info arreté
    $scenario->setlog('Département            : '.$codeInseeDepartement);
    $scenario->setlog('Début validité arrêté  : '.$dateDebutValiditeArrete);
    $scenario->setlog('Fin validité arrêté    : '.$dateFinValiditeArrete);
    $scenario->setlog('Commune                : '.$nomCommune);
    //mise à jour des commmandes du virtuel
    cmd::byString('#[Info][Propluvia info][Département]#')->event($codeInseeDepartement);
    cmd::byString('#[Info][Propluvia info][Date début arrêté]#')->event($dateDebutValiditeArrete);
    cmd::byString('#[Info][Propluvia info][Date fin arrêté]#')->event($dateFinValiditeArrete);
    cmd::byString('#[Info][Propluvia info][Commune]#')->event($nomCommune);

    //balayage des zones
    foreach ($jsonData[0]['restrictions'] as $value=>$jsonKey) {       
      $niveauRestriction = $jsonKey['niveauRestriction'];
      $nomNiveau = $jsonKey['nomNiveau'];
      $nomZone =  $jsonKey['zoneAlerte']['nomZone'];
      $typeZone = $jsonKey['zoneAlerte']['typeZone'];

      //balayage des communes pour récupérer uniquement info de celle recherchée
      foreach ($jsonKey['zoneAlerte']['communes'] as $value2=>$jsonKey2) {
        if ( $jsonKey2['codeInseeCommune'] == $codeInseeCommune) {
          //recupération info détaillé sur le niveau d'alerte
          $url_legende = 'https://eau.api.agriculture.gouv.fr/apis/propluvia/editoriaux/?idEditorial=legende_'.strtolower($nomNiveau).$typeInfo;    
          $request_http_legende = new com_http($url_legende);
          $request_http_legende->setCURLOPT_HTTPAUTH(CURLAUTH_DIGEST);
          $legende=json_decode(trim($request_http_legende->exec()), true);
          if(is_array($legende)){
              $contenuEditorial = $legende[0]['contenuEditorial'];
          }

          //affichage résultat dans le log scénario
          $scenario->setlog('');
          $scenario->setlog('----------'.strtoupper($nomZone.' ['.$typeZone.']').'----------');
          $scenario->setlog('Niveau >> '.$nomNiveau.' ('.$niveauRestriction.')');
          $scenario->setlog($contenuEditorial);
          //$scenario->setlog('URL legende -> '.$url_legende);

          //mise à jour des commmandes du virtuel
          if ($typeZone == 'SUP') {
            cmd::byString('#[Info][Propluvia info][Nom zone SUP]#')->event($nomZone);
            cmd::byString('#[Info][Propluvia info][Niveau restriction zone SUP]#')->event($niveauRestriction);
            cmd::byString('#[Info][Propluvia info][Nom restriction zone SUP]#')->event($nomNiveau);
            cmd::byString('#[Info][Propluvia info][Editorial zone SUP]#')->event($contenuEditorial);
          } elseif ($typeZone == 'SOU') {
            cmd::byString('#[Info][Propluvia info][Nom zone SOU]#')->event($nomZone);
            cmd::byString('#[Info][Propluvia info][Niveau restriction zone SOU]#')->event($niveauRestriction);
            cmd::byString('#[Info][Propluvia info][Nom restriction zone SOU]#')->event($nomNiveau);
            cmd::byString('#[Info][Propluvia info][Editorial zone SOU]#')->event($contenuEditorial);
          } else {
            cmd::byString('#[Info][Propluvia info][Nom zone SUP]#')->event('');
            cmd::byString('#[Info][Propluvia info][Niveau restriction zone SUP]#')->event('');
            cmd::byString('#[Info][Propluvia info][Nom restriction zone SUP]#')->event('');
            cmd::byString('#[Info][Propluvia info][Editorial zone SUP]#')->event('');
            cmd::byString('#[Info][Propluvia info][Nom zone SOU]#')->event('');
            cmd::byString('#[Info][Propluvia info][Niveau restriction zone SOU]#')->event('');
            cmd::byString('#[Info][Propluvia info][Nom restriction zone SOU]#')->event('');
            cmd::byString('#[Info][Propluvia info][Editorial zone SOU]#')->event('');
          }  
        }
      }
    }
  }
}
1 « J'aime »

Hello le monde,
Si jamais vous souhaitez participer, n’hésitez pas.
Je ne suis pas un développeur :slight_smile:

J’en suis à cette partie: Documentation Jeedom

Mathieu

2 « J'aime »

Hello,
Si quelqu’un d’entre vous souhaite contribuer, c’est avec plaisir :slight_smile:

Mathieu

super idée.
je suis repartie de ce code. Mais j’ai une erreur dans les logs
savez vous d’où ca vient?

------------------------------------
[2022-08-28 18:27:38][SCENARIO] -- Start : Scenario lance manuellement.
[2022-08-28 18:27:38][SCENARIO] - Exécution du sous-élément de type [action] : code
[2022-08-28 18:27:38][SCENARIO] Exécution d'un bloc code 
[2022-08-28 18:27:40][SCENARIO] Département            : 31
[2022-08-28 18:27:40][SCENARIO] Début validité arrêté  : 25/08/2022
[2022-08-28 18:27:40][SCENARIO] Fin validité arrêté    : 30/09/2022
[2022-08-28 18:27:40][SCENARIO] Commune                : Flourens
[2022-08-28 18:27:40][SCENARIO]
[2022-08-28 18:27:40][SCENARIO] ----------SAUNE [SUP]----------
[2022-08-28 18:27:40][SCENARIO] Niveau >> Alerte renforcée (4)
[2022-08-28 18:27:40][SCENARIO]
[2022-08-28 18:27:41][SCENARIO]
[2022-08-28 18:27:41][SCENARIO] ----------SECTEUR RIVE DROITE GARONNE DES PETITS COURS D'EAU NON RéALIMENTéS NON INSTRUMENTéS [SUP]----------
[2022-08-28 18:27:41][SCENARIO] Niveau >> Crise (5)
[2022-08-28 18:27:41][SCENARIO] Arrêt des prélèvements non prioritaires y compris des prélèvements à des fins agricoles. Seuls les prélèvements permettant d'assurer l'exercice des usages prioritaires sont autorisés (santé, sécurité civile, eau potable, salubrité). Consultez l’arrêté préfectoral pour accéder au détail des mesures.
[2022-08-28 18:27:41][SCENARIO] [MySQL] Error code : 22001 (1406). Data too long for column 'value' at row 1  : REPLACE INTO history
SET cmd_id=:cmd_id,
`datetime`=:datetime,
value=:value
[2022-08-28 18:27:41][SCENARIO] Fin correcte du scénario

Regarde si tu n’as pas une commande info historisée qui fait plus de 127 caractères.
Si oui, décoche la case historisé de cette commande.

ok ca fonctionne sauf que les infos souterraines sont vide. il doit pas en avoir sur toulouse, j’arrive pas à les retrouver sur le site propluvia.

Hello @anthopocket ,
Merci de l’intérêt que tu portes au projet.
Rien sur Toulouse.

Tu peux tenter avec Ussel qui est en Alerte renforcée pour les eaux souterraines : 19275

Mathieu