2021/05/04 - Services Web et Rest-APICes changements ont rendu ce billet désuet. Une nouvelle version intitulée Données de marée au Canada avec Python - nouvelle interface REST (mai 2021) est disponible. On y trouve un script Python qui utilise la nouvelle interface REST qui fournit les données désirées en format JSON en réponse à une simple requête HTTP.
Nous procédons à la désactivation des services WDS (observations et prédictions) du Service hydrographique du Canada le lundi 3 mai à 12h00 HAE. Veuillez-vous référer à la page des services Web pour plus d'informations sur l'utilisation du nouveau REST-API pour un accès direct aux données officielles sur les niveaux d'eau et autres services disponibles.consulté le 2021-10-19
Cette page reste en place parce qu'elle contient des informations difficiles à trouver au sujet de l'utilisation des technologies SOAP et WSDL dans Python. Il est malheureux que l'exemple pratique présenté ci-dessous ne fonctionne plus.
En regardant la rivière à midi, je me demandais si la marée était montante ou descendante. Il n’existe aucun moyen évident de répondre à cette question, sauf peut-être en comparant le niveau actuel de l’eau avec celui qu'on peut apercevoir sur un cliché pris une heure auparavant. Si la maison se trouvait sur la côte est du Nouveau-Brunswick (à environ 70 km), je pourrais probablement m'en rendre compte par le sens de l'écoulement de l'eau, car l'amplitude des marées peut atteindre jusqu'à 17 mètres à certains endroits de la baie de Fundy. Cependant, "notre" rivière, la rivière Shediac, se jette dans la baie de Shediac dans le détroit de Northumberland et l'amplitude des marées dans cette baie est d'un peu plus d'un mètre. Voici les prévisions des marées pour aujourd'hui.
|
Heures et hauteurs des pleines et basses mers
baie de Shediac, 2019-05-18 |
|
|---|---|
| Heure | Hauteur (m) |
| 03h44 | 1,10 |
| 09h35 | 1,20 |
| 16h34 | 0,50 |
Comme on peut le constater, le niveau de l’eau baissait de 10 cm par heure vers midi (approximation linéaire peu précise). Il est très douteux que je puisse percevoir une baisse de 8 mm du niveau de la rivière sur une période de cinq minutes à une distance de 30 mètres. En réalité, la baisse était encore plus petite, car les eaux de marée doivent remonter la rivière sur 4 ou 5 km, de sorte que l’amplitude des marées est probablement beaucoup moins importante devant la maison.
Je pourrais essayer de suivre une feuille ou un autre objet flottant dans la rivière. Cependant, des vents même légers peuvent influer sur le débit des eaux de surface et même renverser la direction du mouvement de ces eaux. les seules méthodes infaillibles que je puisse imaginer pour répondre à la question sont les suivantes :
- consulter les tables des marées pour la baie de Shediac,
- mesurer la hauteur de l'eau dans la rivière à intervalles réguliers en conservant les résultats.
Ces deux solutions m'intéressent, mais je vais parler de la première option ici.
Jeune homme, j'ai étudié les marées et la bonne méthode pour interpoler les données qu'on trouvait dans des tables des marées imprimées. À l'époque, cela était fait en ajustant une courbe sinusoïdale aux données horaires prévisionnelles. Si je me souviens bien, les navigateurs utilisaient une table sinusoïdale pour interpoler les données, tandis que les ingénieurs utilisaient peut-être une règle à calcul. Voilà qui révèle mon âge, car de nos jours l'on doit se servir d'une application qui probablement ajuste un type de spline aux données.
Bien que les tables des marées annuelles soient toujours imprimées et vendues à un prix raisonnable (voir l’illustration à droite), je suis trop radin pour dépenser 6,50 $ CAN pour les Tables des marées et des courants du Canada, volume 2: Golfe du Saint-Laurent. Y a-t-il un marché pour cette publication, lorsque les données sont disponibles gratuitement auprès du Service hydrographique du Canada (SHC) rattaché au ministère Pêches et Océans Canada ? Il existe un service téléphonique sans frais: les niveaux d’eau au bout des doigts ! et une page Web pour chaque station au Canada; voici les prévisions de 2019 des marées de la baie de Shediac. Une année complète de prévisions est peut-être plus que nécessaire à un moment donné. Il y a une autre page à Pêches et Océans qui indique l'heure et la hauteur prévues des mers hautes et basses ainsi que les prévisions horaires sur 7 jours des hauteurs de l'eau : baie de Shediac * (n ° 1805), prévisions de marée de 7 jours. Les données peuvent être affichées sous forme de graphique, de tableau ou de texte. Il ne serait pas trop difficile de « capter ces données » surtout quand elles sont présentées sous forme de texte. De plus, il est possible d’obtenir les niveaux d’eau observés dans la baie de Shediac 24 heures sur 24, toutes les 15 minutes, à partir de la même page.
Il n’était pas difficile de déterminer le format de la requête HTML pour obtenir les prévisions de CHS.
| Param | Valeur | |
|---|---|---|
| LANG | eng | fra | Anglais ou français |
| TYPE | 0 | 1 | Prévisions ou observations (#) |
| YYYY | Année - 4 chiffres | |
| MM | Mois - 2 chiffres | |
| DD | Jour - 2 chiffres | |
| ID | numéro d'identification de la station | See Index des localités |
| TZ | UTC | NDT | NST | ADT | AST | EDT | EST | CDT | CST | MDT | MST | PDT | PST | |
| MODE | 0 | 1 | 2 | Graphique, tableau ou texte |
(#) Les observations sont disponibles uniquement pour les stations, telles que la baie de Shediac, dont le nom est entièrement en majuscules dans l'index des localités. L’heure locale dans les six fuseaux horaires canadiens est définie par rapport au Temps universel coordonné (UTC).
| Heure avancée | Heure normale | ||||
|---|---|---|---|---|---|
| Fuseau | Heure locale | Fuseau | Heure locale | ||
| Terre-Neuve | HATN | UTC -2:30 | HNTN | UTC -3:30 | |
| Atlantique | HAA | UTC -3:00 | HNA | UTC -4:00 | |
| Est | HAE | UTC -4:00 | HNE | UTC -5:00 | |
| Centre | HAC | UTC -5:00 | HNC | UTC -6:00 | |
| Rocheuses | HAR | UTC -6:00 | HNR | UTC -7:00 | |
| Pacifique | HAP | UTC -7:00 | HNP | UTC -8:00 | |
Étrangement, Pêches et Océans définit l' heure normale de l' Atlantique comme étant HNA (Z+4) Heure Normale de l'Atlantique, où Z = Zulu est le nom militaire de GMT (Greenwich Mean Time, prédécesseur de l'UTC). Or Shediac est à l'ouest de Greenwich et l'heure locale y est Z-4. Ce n'est qu'une petite erreur, les heures locales indiquées dans le tableau, les graphiques, etc. sur le site sont correctes.
L'URL permettant d'obtenir un graphique des niveaux d'eau pendant 7 jours à compter du 18 mai 2019 dans la baie de Shediac en français à l'aide de l'heure avancée de l'Atlantique est la suivante:
Voici la partie pertinente de la sortie.

Procéder par capture de données sur l'écran n'est pas très attrayant. J'espérais trouver une interface de programmation (API) REST bien définie pour obtenir les données souhaitées de la même manière que les informations météorologiques peuvent être obtenues (voir L'IPA météorologique de Yahoo en Free Pascal et Autres IPA météorologiques). Contrairement aux informations météorologiques, je ne pouvais pas trouver un site proposant des données de marée (quasi) « universelles » pour utilisation personnelle gratuite. Heureusement, et sans surprise, compte tenu de ce qui précède, le Service hydrographique du Canada (SHC) accorde un accès gratuit à ses services Web sur les niveaux d'eau tant que le Contrat de licence est respecté. De nombreux sites proposant des informations sur les marées pour la baie de Shediac ne mentionnent pas le SHC. Obtiennent-ils l'information d'une autre source que je n'ai pas su identifier ? Utilisent-ils les données du SHC avec un mépris total de la licence pourtant claire sur la nécessité d'afficher la source.
4. L’usager accepte les conditions suivantes régissant l’utilisation des données et du Service :
- Le droit d’auteur des données est la propriété de Sa Majesté la Reine du chef du Canada, représentée par la ministre des Pêches et des Océans, au nom du Service hydrographique du Canada. Le droit d’auteur NE peut PAS faire l’objet d’une vente, d’une licence, d’une location, d’une cession ou d’un don à un tiers.
- L’utilisateur a le droit d’utiliser le Service, de reproduire et de diffuser les données, et de créer ou de faire créer, de vendre ou de faire vendre et d’octroyer ou de faire octroyer de licences des fichiers, des produits ou des publications dérivés ou intégrés ou par tout autre moyen, d’utiliser les données et le Service, en tout ou en partie (« produits dérivés ») et d’octroyer une souslicence pour utiliser et reproduire les données et le Service, AUX CONDITIONS SUIVANTES :
- L’utilisateur reconnaît le SHC comme le détenteur du droit d’auteur des données sur toutes les reproductions des données.
- L’utilisateur inclut l’avis suivant dans un endroit bien en vue de tout produit dérivé contenant des données : « Ce produit a été conçu par ou pour le compte de (insérer la dénomination sociale de l’entreprise de l’utilisateur) et comprend les données et les services offerts par le Service hydrographique du Canada de Pêches et Océans Canada. L’inclusion de données provenant du Service hydrographique du Canada de Pêches et Océans Canada dans ce produit NE signifie PAS que ce Service ou Pêches et Océans Canada appuie ce produit. »
- ...
Les sites ont peut-être un entente avec le SCH pour l'utilisation des données sans attribution. Puisque ce n'est pas mon cas, j'espère que ce qui précède satisfait aux conditions puisque j'ai déjà reproduit des données provenant du SHC.
Au début, il semblait qu'il serait difficile d'accéder aux données du site Web de la SCH, car il utilise des technologies qui me semblaient anciennes et obscures.
Les trois services web utilisent SOAP et XML comme protocole de communication et la langue anglaise pour l’appel des méthodes et l’échange des données. Chacun des trois services possède une description en XML accessible en langage WSDL (i.e. : https://ws-shc.qc.dfo-mpo.gc.ca/predictions?wsdl). Cette description est utile pour engendrer automatiquement (à l’aide d’outils comme WSDL2Java d’Apache Axis) du code pour communiquer avec les services.
Source
Aucune API REST? Pas de sortie au format JSON? WSDL? Tout cela me dépasse. Cependant, il y a une référence à un cookbook (un livre de recettes) sur sourceforge dans les Spécifications techniques pour l’accès aux services web de niveaux d’eau. Ce livre contient un exemple d'utilisation du service en 5 lignes du langage Python.
C'était suffisant pour commencer. Le module SOAPpy n'est installé ni dans
la version 2.7 de Python ni dans la version 3.6 fournie avec Ubuntu 18.04.
Avant de l'installer, il semblait judicieux de faire une petite recherche et
j'ai choisi d'installer le module Zeep, un client SOAP uniquement, car il est activement
mis à jour et disponible pour les deux versions de Python. Les dernières
mises à jour SOAPpy remontent à cinq ans et le module est plus ambitieux
puisqu'il implémente également un serveur SOAP. Voici l'exemple de CHS
utilisant Zeep et sa sortie.
Cette région limitrophe occupe une grande partie de la surface de la
Terre. Je ne suis pas sûr ce qu'elle représente, certainement pas le Canada,
mais cela n'a pas d'importance, car des données ont été obtenues à partir du
site du SHC. La fonction importante pour mon but s'appelle
search. Il est documenté avec quelques exemples aux pages 7, 8
et 9 des Spécifications techniques pour l’accès aux services web de
niveaux d’eau. Grâce à cette information, j'ai pu bricoler un script qui
affiche les heures et les hauteurs en mètres des marées hautes et basses dans
la baie de Shediac sur une journée donnée.
Version téléchargeable du script: tide.py.
Encore une fois, je ne prétends pas écrire de beaux scripts Python, mais au moins celui-ci fonctionne :
Bien entendu, il ne s'agit que d'un script de validation conceptuelle. La partie difficile reste à faire :
- Comment incorporer cela dans mon système domotique. Autant que je sache, il n'y a pas de capteur virtuel déjà élaboré pour les marées hautes et basses dans Domoticz. Peut-être qu'un capteur de texte indiquant l'heure et la hauteur de la marée haute ou basse précédente et l'heure et la hauteur de la prochaine marée haute ou basse serait suffisant pour répondre à ma question initiale: la marée est-elle montante ou descendante ? Peut-être qu'une simple mesure du niveau d'eau courant avec une indication si elle est inférieure ou supérieure à la mesure précédente suffirait.
- Comment mesurer et enregistrer le niveau réel de la rivière devant la maison, car les marées hautes et basses se produisent plus tard que dans la baie. D'ailleurs, les niveaux d'eau ne devraient pas fluctuer autant en amont du fleuve que dans la baie. Avec cette information, je pourrais peut-être déduire des facteurs d'ajustement pour calculer les niveaux d'eau locaux à partir des niveaux prévus dans la baie de Shediac.
- Comment réaliser ceci avec Free Pascal. Ce n'est pas un projet totalement inutile. J'ai utilisé Pascal pour obtenir des informations de Yahoo! Weather, Dark Sky, MET Normay, etc., et il conviendrait de combiner les données météorologiques et les données de marée.
La bonne nouvelle en ce qui concerne le premier point est que le
script tide.py fonctionne sur un Raspberry Pi sous Raspbian. La mauvaise nouvelle est que l'installation de
Zeep a été très compliquée. J'ai essayé beaucoup de choses pour
installer le module et il faudrait partir d'une nouvelle copie du système
d'exploitation pour essayer de déterminer ce qui doit vraiment être fait pour
réaliser cette installation. C’est là que les choses se corsent parfois
lorsque, pour des raisons inconnues, il semble impossible d’installer un
paquet correctement une deuxième fois. On verra.
Il est relativement facile d'installer Zeep sur
Raspbian pour utiliser tide.py. Il
fallait lire les instructions de Michael van Telligent l'auteur principal
du module après avoir installé libxslt1.1 exigé par
lxml.
Les modules pip et son homologue pour Python 3,
pip3, ne sont pas contenus dans la version Stretch
Lite de Raspbian. Ils sont peut-être
inclus dans la version complète de Stretch. En revanche,
pip est automatiquement disponible dans chaque environnement Python
virtuel.
Qu'importe ce que j'ai essayé, je n'ai pu installer lxml
dans Armbian 5.83 sur un Orange Pi Zero. Il me
restait qu'à compiler le module à partir de sa source quand j'ai trouvé une
autre solution qui consiste à utiliser le module suds plutôt que
Zeep. Le module original est vieux (circa fin 2007 avec une
dernière mise à jour le 31 avril 2009), mais il existe de nombreuses fourches
dont suds-community qui semble la plus active. Sa dernière mise à
jour date du 7 février dernier. Son installation ne pouvait pas être plus
simple.
Le script tide.py fonctionnera exactement comme avant
si l'on change
à

Autres IPA météorologiques