Python :
fichiers GPS - OMD |
Convertir les fichiers OMD des montres ONMOVE 500 Décathlon CoachTélécharger le programme Python permettant de convertir les données OMD en tableau de données (voir les mises à jour en bas de page): >> omd_to_txt02.py génère automatiquement un graphique représentatif de votre course >> omd_to_txt01.py : génère en plus un fichier GPX maj: 26/12/2020 >> omd_to_txt.py maj: 13/12/2020 Depuis une mise à jour de sécurité Windows, il n'est plus possible de lire les fichiers Cardio/GPS de la montre ONMOVE 500 de décathlon. Il ne restait plus qu'a la jeter à la poubelle apres seulement quelques mois après son achat. La solution était d'ailleurs problématique pour les linuxiens qui n'avaient pas de solution du tout. Heureusement, une solution sous linux a été développé par Colin Pitrat pour la montre ONMOVE200. A ma connaissance, il n'existe pas de solution sous Windows, et je me suis penché sur le problème en m'aidant des programmes Linux et en le traitant sous un outil multiplateforme Python. Onmove 200 => https://github.com/rboninsegna/OnMove200 Récupérer les fichiers OMD de la montreEn connectant la montre sur le pc par USB, il est possible de récuperer les fichiers OMD et OMH. Je n'exploite ici que les OMD que je colle dans le dossier d'installation de Python (en général, quelque chose qui ressemble à c:\Python) (Remarque, ce programme utilisé ici est Python 3.6).Dans notre exemple ici, nous exploiterons le fichier appelé ACT_0000.OMD Structure du fichier OMDLes fichiers OMD sont des fichiers dits "binaires", c'est a dire qu'ils se présentent sous des octets écrits les uns derrière les autres. En les ouvrant avec le BlocNote, ils sont illisibles par les humains.Les octets présentés sous leur forme hexadécimale se présentent ainsi sous Notepad++. On y remarque un motif récurent :
Ces fichiers OMD sont cependant structurés, et en les convertissant en valeurs décimales, on fait apparaitre cette structure en les rangeant dans un tableau de 60 colonnes (ici les 60 colonnes sont représentées chacunes sur 3 lignes finissant par F1, F1 et F2.
Ce tableau est produit par le fichier Python que je vous propose sur cette page. Par tatonnement, et grace aux commentaires du programme en C évoqu" plus haut, j'ai déduit quelles étaient les informations contenues dans chaque colonne. F1, F1, F2Il faut bien voir que mes 20 premieres valeurs (Type F1, partie 1) correspondent à un point de mesure, suivies de 20 nouvelle valeurs (type F1, partie 2), et suivit à nouveaux de 20 valeurs (Type F2).En fait F2 est composé lui meme de 2 fois 10 valeurs: les 10 premieres venant complété le point de mesure "F1, partie1", et les 10 valeurs suivantes complétant le point de mesure "F1, partie 2". En résumé sur une ligne de 60 colonnes, nous avons 2 points de mesures Quant à la dernière ligne, si elle ne comporte qu'un seul point de mesure, il n'y aura alors que 40 colonnes, les premiers F1, suivi d'un F2 dont les 9 dernieres valeurs seront nulles pas de deuxieme valeur F1) et la derniere correspondant à F2=242. Remarque, dans ce cas, le programme python ne lit pas ce derniere point de mesure. Les informations disponibleslat / 4 octets = latitude (x1.000.000°)lon / 4 octets = longitude (x1.000.000°) dist / 4 octets = distance parcourue (m) tps / 2 octets = temps (s) depuis le départ (1 point de mesure toutes les 5 secondes) alt / 2 octets = altitude (m) (ATTENTION, cette information est peut etre codée sur d'avantage d'octets, voir plus loin) vit / 2 octets = vitesse (100 m/h, si donne 1234, alors la vitesse est d e12.34km/h) KCal / 2 octets =?? selon le programme Linux serait les kcalories dépensées (je n'ai pas vérifié, et j'ai oublié d'exporter cette donnée dans le fichier final) coeur / 1 octet = rythme cardiaque (battements par minute) inc = information inconnue moitierF2 = 0 car c'est pour marquer le milieu de la structure de F2 On remarque que certaines valeurs sont codées sur plusieurs octets (la latitude est en effet codée sur 4 octets, tandis que le coeur sur 1 seul) 1 octet peut prendre entre 0 et 255 valeurs, ce qui est suffisant pour le ryhtnme cardiaque. 4 octets donnent des valeurs comprises entre 0 et 4.294.967.295 necessaire pour coder une lattitude avec suffisament de précision (exemple dans nos régions : 49,123456 sera codé 49.123.456) Dans cet exemple, la latitude aura pour valeur (à un facteur 1000.000 pres) lat3*256^3 + lat2*256^2 + lat1*256 + lat0 (256 étant le nombre de valeurs maximales codées sur 1 octet) L'altitude est codée sur 2 octets (65.535 valeurs), mais pourrait etre codé sur davantage d'octets, notamment pour prendre en considération les altitudes négatives qui peuvent apparaitre en différents points du monde, mais je n'ai pas eu les moyens de vérifier cela, et cela reste marginal. Le tableau de données sortant du programme python donne ainsi les info suivantes (toutes les 5 secondes) Exemple:
Programme PythonAprès avoir installé Python, il suffit de glisser le fichier suivant dans le dossier python (habituellement, un nom de dossier qui ressemble à ceci C:\Python36\). C'est également dans ce même dossier que vous glisserez le fichier OMD provenant de votre montre (pour l'exemple, mon fichier porte le nom ACT_0000.OMD
Comment lire les fichiers résultants sous Excel ou OpenOffice, ou LibreOfficeLe programme python permet de générer les données brutes Hexadécimales (fichier ACT_0000.OMD ) en un tableau de données brutes au format décimal (ACT_0000DATA0.txt), ainsi qu'un second fichier ACT_0000DATA1.txt basé sur ce modèle:
Les colonnes sont séparées par des tabulations. Ce séparateur (variable sep )peut être modifié dans le programme python sep="\t" #separateur \t = tabulation Si vous désirez avoir un point virgule à la place de la tabultaiton, vous définirez sep ainsi: sep=";" Ce fichier peut être lu avec le BlocNote, mais l'idée est de l'ouvrir avec un tableur Excel, OpenOffice, LibreOffice ou tout autre logiciel afin que vous traciez vos propres courbes de données. Exemple:
Mises à jour
|