Données domotiques : transformer un tableau HTML en XML via Google Drive4 minute(s) de lecture

Nos serveur domotiques peuvent sans trop de difficultés lire des données XML.  Les sites web offrent souvent la possibilité de consulter des données au format HTML.  Il peut être intéressant de récupérer ces données présentées dans des tableaux HTML dans son système domotique mais il faut penser à convertir le format de ces données pour y arriver.  Google Drive peut nous aider à transformer ces données au format XML sans développement.  Exemple avec le suivi des relevés de la hauteur d’eau issu de Vigicrues.

Il y a quelques semaines je vous avait parlé du service Vigicrues qui permettait de récupérer des alertes de vigilances des crues de nos fleuves et nos rivières.  L’une des questions remontée suite à la lecture de l’article avait été: peut-on récupérer les données chiffrées pour les intégrer dans un système domotique?  Peut-on récupérer la hauteur du niveau de l’eau et suivre son évolution dans son système domotique.  La réponse est oui et.. sans développement.

Du web à la feuille de calcul

La première étape consiste à récupérer des données du tableau HTML dans une feuille de calcul Google Drive.

  • Sur le site Vigicrues, relever l’URL de la station que vous souhaitez surveiller.  En ce qui me concerne ce sera la station mesurant la hauteur de la Seine à Suresnes:
http://www.vigicrues.gouv.fr/niveau3.php?idstation=1316&idspc=7&typegraphe=h&AffProfondeur=24&AffRef=auto&AffPrevi=non&nbrstations=0&ong=2
  • Ouvrir ensuite Google Drive et créer une nouvelle feuille de calcul.

  • Comme vous l’aurez certainement remarqué, le données numériques du site Vigicrues sont en séparateur décimal ‘point’ et non ‘virgule’.  Pour récupérer correctement les données, l’astuce consiste à changer les paramètres par défaut de la feuille de calcul afin de sélectionner les paramètres régionaux du “Royaume-Uni”.
  • Dans la cellule A1 on écrira la formule suivante :
=ImportHtml("http://www.vigicrues.gouv.fr/niveau3.php?idstation=1316&idspc=7&typegraphe=h&AffProfondeur=24&AffRef=auto&AffPrevi=non&nbrstations=0&ong=2&"& year(now()) & month(now()) & day(now()) & hour(now()) & minute(now());"table";01)
  • Appuyez sur Entrée et c’est fini pour cette étape.

Facile non?

On utilise ici la formule “ImportHtml” qui permet de brancher dans une feuille de calcul Google Drive, une page Web et plus particulièrement en ce qui nous concerne le 1er tableau HTML de la page concernant la station de Suresnes sur le site Vigicrues.

Le type de données (tableau) et le tableau à récupérer est précisé par les mots :

"table";01)

Vous remarquerez qu’à la fin de l’URL correspondante aux données de la Suresnes, j’ai rajouté les mots suivants:

& year(now()) & month(now()) & day(now()) & hour(now()) & minute(now())

Cela permet de forcer le rafraîchissement de la feuille de calcul sans que l’on ait rien de plus à faire.  Sans cette astuce les données ne se mettent pas forcément à jour lorsqu’on les consulte par la suite.  Ils viennent rajouter à l’URL la date et l’heure courante et n’interfèrent pas avec la “vrai” URL.

De la feuille de calcul au fichier XML

La feuille de calcul est prête, les données à récupérer sont branchées.  Il faut les convertir au format XML.  Là encore Google Drive propose une manière simple de permettre cela.

  • Aller dans le menu Fichier => Publier sur le Web

  • Paramétrer votre feuille de calcul pour qu’elle puisse être vue via Internet au format RSS

Notez bien l’URL en bas de cet écran c’est celle qui sera à renseigner dans votre serveur domotique.

Du fichier XML au serveur domotique

Le travail préparatoire est fait.  Il ne vous reste plus qu’à utiliser les données ainsi transformées dans votre serveur domotique.

Sur une eedomus vous pourrez définir un Capteur HTTP de la manière suivante:

La requête aura comme URL celle de votre document feuille de calcul présenté au format RSS (XML).

Le chemin XPath à spécifier sera a suivant:

 substring-after(/rss/channel/item/description,': ')

Conclusion

Cette méthode est très simple à utiliser.  La petite astuce qui consiste à rajouter la date et l’heure à l’URL de la page Web à surveiller permet d’assurer un rafraîchissement automatique de la donnée.  Ici la donnée était présentée “correctement” pour notre besoin à savoir dans l’ordre chronologique décroissant.  Si ça n’avait pas été le cas le travail aurait été un peu plus long.

Lorsque vous prenez les données de Vigicrue, pensez à prendre une profondeur de 24 heures au moins.  En ce qui concerne Suresnes les données sont mises à jour au mieux 3 fois par jour.  Lors de ces 3 fois ce sont plusieurs points qui sont rendus publiques.  L’idéal aurait été que les relevés horaires soient communiqués toutes les heures.  En effet à cause de cela, la courbe ne sera pas bien lisse et présentera des paliers.  Si votre besoin est de prendre connaissance du dernier relevé et non pas de retracer tout l’historique heure par heure, le contrat est rempli.

11 Comments

  1. Orangina_L said:

    Très intéressant, par contre j’ai essayé l’exemple mais cela fait une erreur dans google doc : la formule passe pas, cela met “Erreur d’analyse”

    23 juillet 2013
    Reply
    • Avatar photo Hervé said:

      L’analyse de Thioneb est correcte. En mettant des ; au lieu des , ça marche aussi.

      Chez moi j’ai des ‘,’ car le données numériques du site Vigicrues sont en séparateur décimal ‘point’ et non ‘virgule’. Pour récupérer correctement les données, l’astuce consiste à changer les paramètres par défaut de la feuille de calcul afin de sélectionner les paramètres régionaux du “Royaume-Uni”. Avec ces paramètres régionaux dans les formules le , ou le ; fonctionnent.

      J’ai modifié l’article en conséquence pour rajouter les paramètres régionaux que j’avais oublié ainsi que la modif en “;”.

      24 juillet 2013
      Reply
      • Orangina_L said:

        Effectivement, cela fonctionne au poile ! Merci, j’ai même réussi à faire planter mon EEdomus en appliquant ta méthode pour d’autres données. Le SAV a été extrêmement réactif en déplantant ma box et en corrigeant pour que cela n’arrive plus !

        25 juillet 2013
        Reply
  2. Thioneb said:

    En fait, dans la syntaxe il faut mettre des “;” au lieu des virgules “,”

    23 juillet 2013
    Reply
    • Avatar photo Hervé said:

      Merci pour ce point. Les ‘,’ fonctionnaient chez moi car j’avais modifié les paramètres régionaux. L’article a été modifié.

      24 juillet 2013
      Reply
  3. Thioneb said:

    Je viens de le faire et ça marche très bien avec la station la plus proche de chez moi. Merci beaucoup, je crois que je vais bien utiliser cette astuce ! Au fait, où avez vous trouvé votre icône pour le capteur ? Merci d’avance !

    23 juillet 2013
    Reply
  4. Thioneb said:

    Bon je m’excuse, il suffisait d’ouvrir les yeux : l’icône se trouve dans la liste des icônes par défaut… 🙂

    23 juillet 2013
    Reply
    • Avatar photo Hervé said:

      Pas de soucis, l’important c’est que cela fonctionne!

      24 juillet 2013
      Reply
  5. youplaboum said:

    bonjour,
    je cherche l’info partout sur internet sans trouver et je pense qu’avec votre outils nous sommes pas loin!

    Savez vous comment transposer les pures données html en xml;
    par exemple le site mobile de transilien qui permet d’avoir des infos intéressantes sur les horaires et les retard et peut permettre de décaler un réveil le matin. 🙂

    http://transilien.mobi/TempReelSaisieSubmit.do?etapeDepart=1&etapeArrivee=0&codeGareDepart=PSL&debutArrivee=facultatif&trouver.x=17&trouver.y=8

    merci!

    1 août 2013
    Reply
    • Avatar photo Hervé said:

      @youplaboum
      L’article du jour devrait te plaire!

      2 septembre 2013
      Reply
  6. Evrard said:

    Bonjour,
    Merci pour ces informations qui m’ont été très utiles pour mettre en place un système d’alerte par sms pour les membres d’un club d’aviron.
    Olivier

    13 septembre 2016
    Reply

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Prouvez que vous êtes humain: * Time limit is exhausted. Please reload CAPTCHA.