Réception météo par SMS

Pensant que cela pourrait intéresser d'autres marins du monde entier, j'ai donc décidé de traduire cette page en anglais (English version).

Requête et réception météo par SMS - Version 2 !

« Loin de la civilisation » (plus de 25-30 milles nautiques des côtes), il est rarement possible de pouvoir obtenir des prévisions météo par VHF, les seules possibilités pour obtenir ces infos par fichier « grib » ou autres sont, soit d’avoir une connexion satellite, soit d’être équipé d’un émetteur/récepteur ondes courtes (BLU) en ayant la licence radio adéquate.

Une alternative intéressante est d’utiliser le Garmin InReach pour envoyer à un serveur basé à terre une requête de prévision météo par SMS pour des positions géographiques choisies et ce, où que vous soyez sur notre (encore) belle planète !

Comme le nombre de caractères pour un SMS, est limité à 160 (encodés sur 7 bits) et afin de profiter au mieux du peu d’espace disponible, toutes les valeurs numériques qui sont habituellement en base 10, sont converties en base 64 en utilisant les caractères suivants « 0123456789 », « abcdefghijklmnopqrstuvwxyz », « ABCDEFGHIJKLMNOPQRSTUVWXYZ » et « &# », ce qui permet de réduire considérablement la taille des données envoyées.

Afin d'optimiser encore la taille, la latitude et la longitude du navire (avec 2 décimales, ce qui est amplement suffisant) sont multipliées par 100 afin d'économiser la virgule décimale et codées sur 2 x 3 caractères en base 64 mais ensuite toutes les autres positions géographiques sont des « offset » basés sur les coordonnées du bateau et donc codées sur seulement 2 x 2 caractères en base 64. La même méthode a été utilisée pour d'autres données quand c'était possible.

Les messages étant codés en base 64, ils ne sont donc pas compréhensibles à l’œil nu, les petites applications suivantes permettent donc de les encoder et de les décoder :

  • « Encodage SMS » qui permet d'encoder une requête à envoyer au serveur et
  • « Décodeur SMS » qui permet de décoder les messages renvoyés par le « Serveur SMS ».

L'application « Encodage SMS »

Comme son nom l'indique, cette application permet de rentrer les données de la requête météo et d'encoder le texte qu'il suffira de copier/coller pour l'envoyer au serveur SMS via l'InReach ou via un portable s'il y a du réseau. La définition des positions autour du navire peut être effectuée automatiquement par rapport à sa position, au cap (suivi ou souhaité), à la distance et à l'angle, ou, manuellement en définissant les positions souhaitées.

Il est possible de modifier la manière dont sont calculées les positions en modifiant le « facteur distance » qui permet d'obtenir une distance décroissante à partir du cap vers l'arrière du bateau (à 180°). Pour mieux comprendre, voici une représentation graphique montrant le bateau (suivant un cap de 135°) et le bout des lignes représentant les positions calculées avec un angle de 30° et une distance N.

Effets du « facteur distance »
Effets du facteur distance

À gauche avec un facteur <0,0> indiquant que toutes les positions autour du bateau sont à égales distances, au milieu avec un facteur de <0,5> (à mon avis la configuration idéale) et à droite avec un facteur de <1.0>.

Il suffit ensuite de copier/coller le texte vers l’application EarthMate qui est connectée à l’InReach via Bluetooth pour envoyer la requête au numéro du serveur. L'application génère aussi un fichier Map Source (.ms) afin de pouvoir visualiser facilement les positions calculées sous Guru Maps.

Voici le résultat des calculs de positions à 40 et 80 milles nautiques (dans la direction du cap donné (ici 315°) avec une distance diminuée vers l’arrière) séparées par un angle de 45°, par rapport à la position actuelle étant [-56.69, -67.61] :

Résultats pour une distance 40 NM
  • Nouvelle position [-56.22, -68.46] pour un cap de 315° et une distance de 40 NM
  • Nouvelle position [-56.11, -67.61] pour un cap de 0° et une distance de 35 NM
  • Nouvelle position [-56.34, -66.97] pour un cap de 45° et une distance de 30 NM
  • Nouvelle position [-56.69, -66.85] pour un cap de 90° et une distance de 25 NM
  • Nouvelle position [-56.92, -67.18] pour un cap de 135° et une distance de 20 NM
  • Nouvelle position [-57.11, -67.61] pour un cap de 180° et une distance de 25 NM
  • Nouvelle position [-57.04, -68.26] pour un cap de 225° et une distance de 30 NM
  • Nouvelle position [-56.69, -68.67] pour un cap de 270° et une distance de 35 NM
Résultats pour une distance 80 NM
  • Nouvelle position [-55.74, -69.28] pour un cap de 315° et une distance de 80 NM
  • Nouvelle position [-55.52, -67.61] pour un cap de 0° et une distance de 70 NM
  • Nouvelle position [-55.98, -66.35] pour un cap de 45° et une distance de 60 NM
  • Nouvelle position [-56.68, -66.09] pour un cap de 90° et une distance de 50 NM
  • Nouvelle position [-57.16, -66.74] pour un cap de 135° et une distance de 40 NM
  • Nouvelle position [-57.52, -67.61] pour un cap de 180° et une distance de 50 NM
  • Nouvelle position [-57.39, -68.92] pour un cap de 225° et une distance de 60 NM
  • Nouvelle position [-56.67, -69.73] pour un cap de 270° et une distance de 70 NM

L'application « Serveur SMS »

Cette application fonctionnant à terre, permet à l'utilisateur d'obtenir les informations météorologiques mais celui-ci se trouvant éventuellement à des milliers de kilomètres n'a pas à s'en soucier.
Voir la de l'app « Serveur SMS ».

Du côté du smartphone (positionné à terre avec une connection Internet), la requête SMS est reçue et l’application la décode puis la transforme en 16 requêtes différentes (une par position géographique) envoyées sur le site stormglass.io. Ensuite, l’application extrait les données requises pour chaque position demandée et les transforme, dans ce cas, en 6 messages de 160 caractères ou moins pour le dernier, avec les prévisions météo des heures demandées (dans cet exemple 12h et 18h) à partir de l'heure actuelle. Toutes les données concernant la date et l'heure sont en UTC.

Pour le cas où les SMS arriveraient dans le désordre, ça arrive, chaque message est précédé d’un nombre à 2 chiffres, le premier chiffre étant le numéro de message et le deuxième, le nombre total de messages.

Finalement, les messages sont renvoyés au numéro ayant effectué la requête (le Garmin InReach ou un smartphone). C’est simple et peu onéreux !

Cette application devra être installée à terre sur un smartphone Android (avec connexion internet), il devra être allumé 24h sur 24 et 7 jours sur 7 et branché sur le secteur puisqu’il devra réagir à tout moment aux requêtes météo envoyées par SMS d’un ou de plusieurs utilisateurs. Il serait préférable que quelqu’un puisse le redémarrer si nécessaire.

Pour que l'application puisse obtenir les informations météo provenant de stormglass.io, il suffit de s'enregistrer gratuitement afin de recevoir une clé d'accès, cela permet au « Serveur SMS » d'exécuter 50 requêtes par jour (une requête par position indépendante du nombre d'heures souhaitées qui est au maximum de 240), pour plus de requêtes/jour, il faut payer mais c'est à mon avis largement suffisant pour un ou deux navires ! les prévisions météo disponibles proviennent de differents instituts météorologiques du monde entier (Météo-France, DWD, NOAA, UK MetOffice...), voir les sources et la description de l'API.

Voir une .

Description technique

Numbers in base 64

All values in the SMS are converted into base 64 (signed or unsigned).

Value range1 char2 chars3 chars4 chars
Signed-31...+31-2047...+2047-131071...+131071-8388607...8388607
Unsigned0...630...40950...2621430...16777215

Requested forecast values

There is the possibility to choose values, the more values requested, the more space is needed! The requested forecast value is coded on 3 chars, the relevant bit must be set for each requested value.

BitRequested forecast valueNumber of charsSigned
1Pressure (hPa)2no
2Visibility (NM)2no
3Cloud cover (1/8)1no
4Air temperature (°C)2yes
5Water temperature (°C)2yes
6Wind direction (° coming from)2no
7Wind speed (kn)2no
8Wind gust (kn)1no
9Current direction (° coming from)2no
10Current speed (kn)2no
11Swell direction (° coming from)2no
12Wave height (m)2no
13Wave period (s)2no
14Tide (m) relative to Mean Sea Level (MSL) - Not yet implemented!2no

Forecast request coding

Format of the SMS content sent from « SMS Coding » to the « SMS Server ». The "#" char represents one char coded into base 64.

SignedCoded valueMeaning
FRQSTThis indicates that the received SMS is a Weather forecast request which will be taken into account by the app « SMS Server »
no##SMS size, the server will check if the received SMS has the right size, this is just to avoid errors!
no##...Forecast time(s), one of more time in range 0...250 hours
?A separator
no###An integer containing which values are requested, see Requested forecast values above
no##Vessel course (heading)
yes###Vessel latitude
yes###Vessel longitude
yes####...One or more locations (latitude and longitude offsets in degres based on the ship location)

Forecast request decoding

Format of the SMS content sent from the « SMS Server » to the requester (« SMS decode »). The "#" char represents one char coded into base 64.

The full weather forecast information is in the following format but if the data is longer than 160 chars then the data is divided into packets of 158 chars and numbered with 2 chars (SMS number and Total number of SMS) at the beginning of each SMS.

Header for each received SMS

SignedCoded valueMeaning
no#SMS number
no#Total number of SMS

Data format without information of SMS number and Total number of SMS

SignedCoded valueMeaning
Header
no###UTC dateTime of request YYMM (Year Month, base time)
no###UTC dateTime of request DDHH (Day Hour, base time)
no#Number of forecast times
no###Requested values, see Requested forecast values above
no##Vessel course (heading)
yes###Vessel latitude
yes###Vessel longitude
For each location
yes##Latitude (offset in degres from the ship location)
yes##longitude (offset in degres from the ship location)
For each time forecast
no##Forecast time (offset in hours from the base time given in the header)
no##Pressure (hPa)
no#Visibility (NM)
no#Cloud cover (1/8)
yes##Air temperature (°C)
yes##Water temperature (°C)
no##Wind direction (° coming from)
no##Wind speed (kn)
no#Wind gust (kn) (offset based on wind speed)
no##Current direction (° coming from)
no##Current speed (kn)
no##Swell direction (° coming from)
no##Wave height (m)
no##Wave period (s)
no##Tide (m) relative to Mean Sea Level (MSL) MAYBE!
...and so on for each time forecast
...and so on for each location

L'application « Décodage SMS »

Cette application permet de décoder et de visionner les informations reçues du serveur. Pour cela, il suffit de copier/coller les messages reçus (séparés par [ENTER]) dans le champ prévu à cet effet et d'appuyer sur [DÉCODER]. Toutes les informations météo sont ensuite affichées pour chaque position et chaque interval de temps.

Messages texte

Dans cet exemple, le serveur a envoyé 6 SMS pour encoder toutes les informations concernant ces 16 positions. Au début du premier SMS, le nombre d’heures de prévisions est encodé sur deux caractères avec les informations suivantes pour chaque position et pour chaque heure demandée :

  • Horodatage (au format AAAA-MM-JJ HH:mm UTC),
  • Pression atmosphérique en hPa,
  • Visibilité en milles nautiques,
  • Couverture nuageuse en 1/8 (0 = ciel dégagé, 8 = ciel couvert),
  • Température de l'air en degrés Celsius,
  • Direction (vent soufflant de en °) et vitesse du vent avec rafales en nd,
  • Direction (courant venant de en °) et vitesse du courant marin en nd,
  • Direction des vagues et de la houle en degrés (venant de en °),
  • Hauteur des vagues (mesurée entre la crête et le creux) en mètres,
  • Période des vagues (nombre de secondes qui sépare le passage de 2 crêtes successives) en secondes.

L’exemple montrait comment obtenir une prévision météo pour 16 positions à 2 intervalles de temps différents mais rien n’empêche de faire une requête pour plus (ou moins) de points avec plus ou moins d'informations, d’autres intervalles de temps (prévision maximum à 240h) et d'autres angles multiples de 360 (10°, 15°, 20°, 30°, 40°, 45° ...).

Sur un voilier, obtenir de bonnes infos météo est primordiale mais une bonne visualisation de ces données enrichit considérablement les informations reçues, en particulier pour ce qui concerne les vents et courants.

La visualisation de fichiers KML sous Google-Earth est bien à condition de posséder un ordinateur (Mac ou PC) avec connexion internet. Après avoir recherché d'autres possibilités, j'ai trouvé l'application gratuite « Guru Maps » (pour Android et IOS) qui permet entre autres de visualiser le monde entier avec des cartes hors-ligne (c'est à dire fonctionnant sans connexion internet) et d'insérer des superpositions vectorielles avec les fichiers « Map Source » (.ms) basés sur les fichiers « .geojson » et « .mapcss ».

L'application exporte donc ces fichiers et voici le résultat dans la capture d'écran suivante :

Visualisation sous Guru Maps de la position du navire et des positions calculées avec l'application
En bleu, pression, direction et vitesse du courant, direction de le houle, hauteur et période des vagues.
En noir, horodatage, visibilité, couverture nuageuse, température de l'air et de l'eau, direction et vitesse du vent (rafales).

Tout ceci peut paraître compliqué mais ça ne l'est vraiment pas car après avoir rentré les paramètres souhaités dans l'app « Encodage SMS », ce qui ne prend que quelques secondes, il suffit de copier/coller la requête codée vers l'app EarthMate pour que l'InReach l'envoie au serveur. Après quelques minutes, le ou les SMS contenant les prévisions demandées arrivent sur EarthMate et il suffit juste de les copier/coller vers l'app « Décodage SMS » pour en lire le contenu.

Avec le Garmin InReach qui fonctionne dans le monde entier (car utilisant le système Iridium) pour un prix assez raisonnable, environ 350€ pour l’InReach mini et un forfait mensuel acceptable de 59,99€ avec un contrat annuel, ça reste cher mais l'avantage est de bénéficier de la messagerie texte bidirectionnelle (SMS) illimitée afin de pouvoir communiquer avec ses proches, de pouvoir localiser l'Inreach à tout moment sur le site EXPLORE ainsi que d’une sécurité supplémentaire avec la couverture SOS de GEOS, tout ça utilisable dans le monde entier !

Les quelques tests que j'ai effectués avec l'InReach sont concluants et tout semble fonctionner parfaitement. Après avoir lancé une requête avec 8 positions et 2 heures de prévision, les 2 premiers SMSs sont arrivés après environ 5 minutes, le dernier SMS est arrivé environ une vingtaine de minutes plus tard, ce n’est pas très rapide mais largement suffisant, je suppose que c’est dû à la position des satellites.

Tout ceci nécessite quelques étapes mais ça fonctionne et surtout, c'est du « sur-mesure » et ça ne coûte pas trop cher ! Il est évident que l’utilisation de fichiers « grib » est plus confortable et plus riche en informations mais à un coût bien supérieur.

Je compte donc utiliser ce système afin d'obtenir les prévisions météo. Mon départ n'est prévu que pour l'été 2021 (retardé à cause de la pandémie et pour d'autres raisons).

Toutes ces applications tournent sur Android, j'ai aussi créé ces 2 applications (« Encodage SMS » et « Décodage SMS ») pour IOS mais comme je ne les ai pas mises sur l'AppStore, je ne peux fournir que la source qu'il suffit de compiler avec Xcode.

La conception d'un logiciel demande beaucoup de travail, elle commence par l'idée générale suivie par la conception, la programmation et ensuite la phase de test. J'ai donc fait de mon mieux pour la réalisation mais c'est à l'utilisation qu'on découvre presque toujours des erreurs (bugs). Donc si vous utilisez ces quelques applications, n'hésitez pas à me faire part des problèmes rencontrés.

Pour celles ou ceux qui seraient intéressés, voici plus bas le code source de toutes ces applications ainsi que les exécutables (seulement pour Android). En cas de problème (bug) ou pour obtenir plus d'information, utiliser « Contact » au bas de cette page.

Apple permet de créer des applications pour OS-X et IOS avec Xcode mais malheureusement la pomme inclut aussi une limitation plutôt génante, à moins d’avoir un compte développeur annuel payant, les applis installées à l’aide d’un identifiant Apple expirent au bout de sept jours :-(

Afin que les utilisateurs IOS puissent quand même utiliser ce système, j'ai maintenant créé l'équivalent des 2 applications (« Encodage SMS » et « Décodage SMS ») en HTML et JavaScript, ça fonctionne parfaitement et peut être utilisé avec la plupart des navigateurs Internet, voir Météo via SMS V2.2.

InReach Mini
InReach Mini

Application newPoints-v2
Application Encodage SMS

Choix des données pour la requête
Choix des données pour la requête

L'application « Serveur SMS » après la réception d'une requête
L'application « Serveur SMS » après la réception d'une requête

Visualisation des données reçues sur « decodage SMS »
Visualisation des données reçues sur « decodage SMS »

Détail des informations visualisé sous « Guru Maps »
Détail des informations visualisé sous « Guru Maps »