A makeshift python tool that generates TCX files from Huawei HiTrack files.
Users of Huawei Watches/Bands sync their fitness data with the Huawei Health App. It is notoriously difficult to get the data out of this app, but through some cunning you can find HiTrack
files which seem to contain some run data. This program allows you to take these files and generate .TCX
files for use in your tracking app of choice (e.g. Strava). The outputted .TCX
files will contain timestamped GPS, altitude, heart-rate, and cadence data where available.
- Open the Huawei Health app and open the exercise that you want to convert to view it's trajectory. This ensures that its HiTrack file is generated.
If you have a rooted phone you can simply navigate to: data/data/com.huawei.health/files/
where you should find a number of files prefixed HiTrack
.
If you have an unrooted phone then:
- Download the Huawei Backup App onto your phone.
- Start a new unencrypted backup of the Huawei Health app data to your external storage (SD Card)
- Navigate to
Huawei/Backup/***/backupFiles/***/
and copycom.huawei.health.tar
to your computer. - Unzip the file and navigate to
com.huawei.health/files/
and you should should see a number ofHiTrack
files.
You need python 3
to use this tool.
Download the Huawei TCX Converter and save it as a Python script in the same folder as your HiTrack file.
The tool is run on the command line by passing it the name of your file as a command line argument. Other command line arguments:
-v
- validate the final TCX file in order to check that the conversion has worked (requires xmlschema and an internet connection to download the TCX schema to check against)-f
- attempt to filter out any records in which GPS signal was lost-b
- change sport to Biking
You can rename your HiTrack files if you wish, but for clarity in the examples below I leave mine exactly as I found it.
I have copied the Huawei-TCX-Converter.py
file to the directory containing my HiTrack file (HiTrack_1551732120000155173259000030001
). Now I can run the tool as follows:
python Huawei-TCX-Converter.py HiTrack_1551732120000155173259000030001 -f -v
This gives me the output:
---- Input File ----
reading: OKAY
filtering: OKAY
processing gps: OKAY
processing heart-rate/cadence: OKAY
---- Details ----
sport: Running
start: 2019-03-04 20:42:00
duration: 00:07:49
distance: 1700m
---- XML file ----
generating: OKAY
saving: OKAY
validating: OKAY
I've included both the HiTrack file and the resultant TCX file in the Examples folder for you to have a go with. You can also visualise the data online.
Some users have recommended the TCX Converter tool to add altitude data to your TCX files once they've been converted. This may overwrite altitude data extracted from your device, if it collects this.
This is an image of the GPS trace from the .tcx file. The command line output above also lists the start time as 2019-03-04 20:42:00, the distance as 1.70km, and the duration as 00:07:49.
For comparison, below is the data visable on the Huawei Health App. You can see that the distance is off by about 80m, and the duration off by 1 second, but the GPS trace is spot on.
This is a very early alpha version of this tool, so please help me by making it better! There are some scripts in the Development Tools folder that I find useful for debugging. I'll accept any improvements, but if you're looking for inspiration you could start with this to-do list:
Remove reliance on using the original filenameEnable changing sport type from running (default) to bikingRead timestamped heart-rate, cadence, and altitude data where availableSee if we really need to add the unused data elements (e.g. Calories) to the TCX (edit: we do as there is no minOccurs in the schema)- Add a GUI to make life easier for users who aren't familiar with the command line
- Build for common platforms so that users don't need to install python independently (Android?)
- Work with API's (i.e. Strava/Garmin) for automating tcx upload
- Check that this works for files other than those generated using the Huawei Band 2 Pro:
- Confirmed working on a file from a Huawei Watch GT
- Improve the distance measurement method (currently using Viscenty's Formulae)
- Try and work out what
tp=b-p-m
is - Add interpolated heart-rate/pace/average speed data to each location element
- Work on splitting data into
Laps
/Tracks
rather than shoving it all into one - Try to call on an open API to get altitude data for location points that don't have it
- Inspect other files in
com.huawei.health
to see if we can get any more relevant data out of them