Ce Forum passera en lecture seule en janvier 2020
Image
Merci de vous rendre sur https://community.jeedom.com maintenant pour vos prochains postes ;)

Relevés météo temps réel - Infoclimat

Pour échanger sur les plugins classés en catégorie "Météo"
Avatar de l’utilisateur
3issa
Timide
Messages : 36
Inscription : 27 juil. 2018, 08:33

Relevés météo temps réel - Infoclimat

Message par 3issa » 21 juin 2019, 16:00

Bonjour,

Cela fait quelques temps que je suis à la recherche d'un moyen d'intégrer à mon Jeedom des relevés météo en temps réels qui soient fiables.

Les capteurs, c'est bien. Notamment car c'est de la donnée locale et donc que l'on maitrise. Mais niveau fiabilité, je trouve que ce n'est pas ce qu'il y a de mieux, sauf à y mettre des moyens non négligeables.

En cherchant un peu, j'ai trouvé le site Infoclimat qui donne utilise des équipements de qualité professionnelle dont les données sont utilisées par MeteoFrance. Ce site affiche les données en temps réel (un relevé toutes les 10 min) sur une page par station météo. Par chance, j'ai une station qui se trouve à 300m de chez moi, j'ai donc chercher à récupérer ces données.

Infoclimat dispose d'une api gratuite mais seulement pour les prévisions (prévisions auto sans corrections humaines). Je dois donc parser la page html de la station qui se trouve près de chez moi. Vu que je n'ai jamais fait ça auparavant, j'ai du un peu me documenter. Pour compliquer les choses, le tableau présentant les données change régulièrement : une colonne est ajoutée à chaque fois que quelqu'un fait une observation météo. D'autres données apparaissent ou disparaissent selon les relevés (temp ressentie, radiations solaires). Tout ça fait que je n'ai pas réussi à utiliser les outils mis à disposition du plugin Script.

Au final, j'ai réussi à venir au bout de mes peines et le résultat me satisfait. Je me dis que je ne suis peut-être pas le seul à souhaiter disposer de telles infos, aussi je viens partager ma solution. Cela pourra être revu par quelqu'un maitrisant mieux le sujet que moi mais aussi être utile à d'autres.

J'ai donc créer un virtuel pour recevoir toutes les données que je souhaitais récupérer. Puis, j'ai mis en place le scénario suivant qui se déclenche toutes les 10 minutes ( à partir de la minute 2) :

Code : Tout sélectionner

  $url = "https://www.infoclimat.fr/observations-meteo/temps-reel/paris-20eme-porte-de-vincennes/000EW.html";
  $data = file_get_contents($url);
  @$dom = new DOMDocument();
  libxml_use_internal_errors(true);
  $dom->loadHTML($data);
  libxml_use_internal_errors(false);

  $xpath = new DomXPath($dom);

  $node = $xpath->query("//*[@id=\"tableau-releves\"]/thead/tr/th[2]/a");
  $val = $node[0]->nodeValue;
  $j = 0;
  if ($val === "Temps") {
    //Ajout d'une colonne dans le tableau
    $j++;
  }
  
  //Heure
  $i = 1;
  $node = $xpath->query("//*[@id=\"cdata0\"]/td[".$i."]/span");
  $cmd = cmd::byId(468);
  $cmd->event($node[0]->nodeValue);

  //Température
  $i = 2 + $j;
  $node = $xpath->query("//*[@id=\"cdata0\"]/td[".$i."]/span[1]");
  $cmd = cmd::byId(469);
  $cmd->event($node[0]->nodeValue);

  //Température ressentie
  $i = 3 + $j;
  $node = $xpath->query("//*[@id=\"cdata0\"]/td[".$i."]/span[1]");
  $cmd = cmd::byId(470);
  $cmd->event($node[0]->nodeValue);

  //Radiations solaires
  $i = 3 + $j;
  $node = $xpath->query("//*[@id=\"cdata0\"]/td[".$i."]/a/span");
  $cmd = cmd::byId(471);
  $cmd->event($node[0]->nodeValue);

  //Pluie
  $i = 4 + $j;
  $node = $xpath->query("//*[@id=\"cdata0\"]/td[".$i."]/span/text()");
  $cmd = cmd::byId(472);
  $cmd->event($node[0]->nodeValue);


  //Humidité
  $i = 5 + $j;
  $node = $xpath->query("//*[@id=\"cdata0\"]/td[".$i."]/span");
  $cmd = cmd::byId(473);
  $cmd->event($node[0]->nodeValue);

  //Vent
  $i = 7 + $j;
  $node = $xpath->query("//*[@id=\"cdata0\"]/td[".$i."]/span[1]");
  $cmd = cmd::byId(474);
  $cmd->event($node[0]->nodeValue);

  //Rafales
  $i = 7 + $j;
  $node = $xpath->query("//*[@id=\"cdata0\"]/td[".$i."]/span[3]");
  $cmd = cmd::byId(475);
  $cmd->event($node[0]->nodeValue);

  //Pression
  $i = 8 + $j;
  $node = $xpath->query("//*[@id=\"cdata0\"]/td[".$i."]/text()");
  $cmd = cmd::byId(476);
  $cmd->event($node[0]->nodeValue);
Les chiffres passés en attribut des commandes "cmd::byId" correspondent aux id des infos de mon virtuel qui doit recevoir les données.

Sûrement y a t'il une meilleure façon de faire, aussi je suis curieux de lire vos suggestions.

Jerome33
Timide
Messages : 11
Inscription : 01 déc. 2016, 10:52
Localisation : Cadaujac 33140

Re: Relevés météo temps réel - Infoclimat

Message par Jerome33 » 15 août 2019, 22:15

Super, merci pour ton partage

Répondre

Revenir vers « [Catégorie] Météo »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 7 invités