GarminPlugin
GarminPlugin copied to clipboard
can't find activities to upload on a virtual device
I'm trying to use the plugin to transfer files from a "virtual device" (http://www.andreas-diesner.de/garminplugin/doku.php?id=virtual_devices), which is just a directory that contains TCX files transferred from my TomTom GPS watch:
I added the following stanza to my garminplugin.xml
file:
<Device enabled="true">
<Name>TomTom GPS Sport Watch</Name>
<StoragePath>/home/me/Dropbox/tcx</StoragePath>
<StorageCommand></StorageCommand>
<FitnessDataPath>/home/me/Dropbox/tcx</FitnessDataPath>
</Device>
There are plenty of TCX files in that directory, and I have verified that they I can manually upload them correctly to Garmin Connect.
When I visit http://connect.garmin.com/transfer/upload, the plugin finds my device, but doesn't list any of the TCX files in the directory:
Same goes if I convert them to GPX format. Is there some special naming convention that the files must obey, or some setting that I've overlooked to get the plugin to recognize the TCX files that I want to transfer?
I've tried giving the files the exact same naming convention as produced by my Garmin 405 (YYYY-MM-DD-HHmmSS.TCX
), but that doesn't make a difference :-(
I guess you are using an uppercase extension on a partition that supports upper/lowercase. With the method you are using, the device searches for lowercase *.gpx and lowercase *.tcx.
There is another (not well documented way) to create a virtual device (if you do not want to rename to lowercase tcx)
<Device enabled="true">
<Name>TomTom GPS Sport Watch</Name>
<StoragePath>/home/me/Dropbox/</StoragePath>
<StorageCommand></StorageCommand>
<FitnessDataPath></FitnessDataPath>
</Device>
Directory structure:
/home/me/Dropbox/Garmin/
/home/me/Dropbox/Garmin/GarminDevice.xml
/home/me/Dropbox/Garmin/TCX/*.TCX
/home/me/Dropbox/Garmin/GPX/*.GPX
GarminDevice.xml
<?xml version="1.0" encoding="UTF-8"?>
<Device xmlns="http://www.garmin.com/xmlschemas/GarminDevice/v2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.garmin.com/xmlschemas/GarminDevice/v2 http://www.garmin.com/xmlschemas/GarminDevicev2.xsd">
<Model>
<PartNumber>006-B0625-00</PartNumber>
<SoftwareVersion>330</SoftwareVersion>
<Description>TomTom GPS Sport Watch</Description>
</Model>
<Id>3456561955</Id>
<MassStorageMode>
<DataType>
<Name>GPSData</Name>
<File>
<Specification>
<Identifier>http://www.topografix.com/GPX/1/1</Identifier>
<Documentation>http://www.topografix.com/GPX/1/1/gpx.xsd</Documentation>
</Specification>
<Location>
<Path>Garmin/GPX</Path>
<FileExtension>GPX</FileExtension>
</Location>
<TransferDirection>InputToUnit</TransferDirection>
</File>
<File>
<Specification>
<Identifier>http://www.topografix.com/GPX/1/1</Identifier>
<Documentation>http://www.topografix.com/GPX/1/1/gpx.xsd</Documentation>
</Specification>
<Location>
<Path>Garmin/GPX</Path>
<FileExtension>GPX</FileExtension>
</Location>
<TransferDirection>OutputFromUnit</TransferDirection>
</File>
</DataType>
<DataType>
<Name>UnitSoftwareUpdate</Name>
<File>
<Specification>
<Identifier>GCD</Identifier>
</Specification>
<Location>
<Path>Garmin</Path>
<BaseName>GUPDATE</BaseName>
<FileExtension>GCD</FileExtension>
</Location>
<TransferDirection>InputToUnit</TransferDirection>
</File>
</DataType>
<DataType>
<Name>BaseMaps</Name>
<File>
<Specification>
<Identifier>IMG</Identifier>
</Specification>
<Location>
<Path>Garmin</Path>
<BaseName>gmapbmap</BaseName>
<FileExtension>IMG</FileExtension>
</Location>
<TransferDirection>InputOutput</TransferDirection>
</File>
</DataType>
<DataType>
<Name>PreProgrammedMaps</Name>
<File>
<Specification>
<Identifier>IMG</Identifier>
</Specification>
<Location>
<Path>Garmin</Path>
<BaseName>gmapprom</BaseName>
<FileExtension>IMG</FileExtension>
</Location>
<TransferDirection>InputOutput</TransferDirection>
</File>
</DataType>
<DataType>
<Name>SupplementalMaps</Name>
<File>
<Specification>
<Identifier>IMG</Identifier>
</Specification>
<Location>
<Path>Garmin</Path>
<BaseName>gmapsupp</BaseName>
<FileExtension>IMG</FileExtension>
</Location>
<TransferDirection>InputOutput</TransferDirection>
</File>
</DataType>
<DataType>
<Name>FTLImageVersion</Name>
<File>
<Specification>
<Identifier>VER</Identifier>
</Specification>
<Location>
<Path>Garmin</Path>
<BaseName>fs_image</BaseName>
<FileExtension>ver</FileExtension>
</Location>
<TransferDirection>InputOutput</TransferDirection>
</File>
</DataType>
<DataType>
<Name>FitnessHistory</Name>
<File>
<Specification>
<Identifier>http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2</Identifier>
<Documentation>http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd</Documentation>
</Specification>
<Location>
<Path>Garmin/History</Path>
<FileExtension>tcx</FileExtension>
</Location>
<TransferDirection>OutputFromUnit</TransferDirection>
</File>
</DataType>
<DataType>
<Name>FitnessUserProfile</Name>
<File>
<Specification>
<Identifier>http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2</Identifier>
<Documentation>http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd</Documentation>
</Specification>
<Location>
<Path>Garmin/Profile</Path>
<BaseName>UserProfile</BaseName>
<FileExtension>tcx</FileExtension>
</Location>
<TransferDirection>InputOutput</TransferDirection>
</File>
</DataType>
<DataType>
<Name>FitnessCourses</Name>
<File>
<Specification>
<Identifier>http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2</Identifier>
<Documentation>http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd</Documentation>
</Specification>
<Location>
<Path>Garmin/Courses</Path>
<FileExtension>tcx</FileExtension>
</Location>
<TransferDirection>InputOutput</TransferDirection>
</File>
</DataType>
<DataType>
<Name>FitnessWorkouts</Name>
<File>
<Specification>
<Identifier>http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2</Identifier>
<Documentation>http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd</Documentation>
</Specification>
<Location>
<Path>Garmin/TCX</Path>
<FileExtension>TCX</FileExtension>
</Location>
<TransferDirection>InputOutput</TransferDirection>
</File>
</DataType>
<UpdateFile>
<PartNumber>006-B0625-00</PartNumber>
<Version>
<Major>3</Major>
<Minor>30</Minor>
</Version>
<Path>Garmin/</Path>
<FileName>gupdate.GCD</FileName>
</UpdateFile>
<UpdateFile>
<PartNumber>006-B0617-00</PartNumber>
<Version>
<Major>2</Major>
<Minor>10</Minor>
</Version>
<Path>Garmin/RemoteSW/</Path>
<FileName>006B061700.bin</FileName>
</UpdateFile>
</MassStorageMode>
<GarminMode>
<Protocols>
<Link Id="1"/>
<Application Id="10"></Application>
<Application Id="100"><DataType>110</DataType></Application>
<Application Id="201"><DataType>202</DataType><DataType>110</DataType><DataType>210</DataType></Application>
<Application Id="301"><DataType>312</DataType><DataType>304</DataType></Application>
<Application Id="400"><DataType>110</DataType></Application>
<Application Id="600"><DataType>600</DataType></Application>
<Application Id="601"><DataType>601</DataType></Application>
<Application Id="700"><DataType>700</DataType></Application>
<Application Id="800"><DataType>800</DataType></Application>
<Application Id="900"></Application>
<Application Id="902"></Application>
<Application Id="903"></Application>
<Application Id="907"><DataType>907</DataType><DataType>908</DataType><DataType>909</DataType><DataType>910</DataType></Application>
<Transport Id="1"/>
</Protocols>
<MemoryRegion>
<Id>5</Id>
<PartNumber>006-B0476-00</PartNumber>
<IsErased>0</IsErased>
<IsRemoved>0</IsRemoved>
<IsUserUpdateable>1</IsUserUpdateable>
</MemoryRegion>
<MemoryRegion>
<Id>14</Id>
<PartNumber>006-B0476-00</PartNumber>
<IsErased>0</IsErased>
<IsRemoved>0</IsRemoved>
<IsUserUpdateable>1</IsUserUpdateable>
</MemoryRegion>
</GarminMode>
<Extensions>
<DeviceExtension xmlns="http://www.garmin.com/xmlschemas/GarminDeviceExtensions/v1"
xsi:schemaLocation="http://www.garmin.com/xmlschemas/GarminDeviceExtensions/v1 http://www.garmin.com/xmlschemas/GarminDeviceExtensionv1.xsd">
<Ifix>581590809</Ifix>
</DeviceExtension>
</Extensions>
</Device>
In the xml, you can adjust the pathes and the extension:
<DataType>
<Name>FitnessWorkouts</Name>
[...]
<Location>
<Path>Garmin/TCX</Path>
<FileExtension>TCX</FileExtension>
</Location>
<TransferDirection>InputOutput</TransferDirection>
</File>
Hmmm... I'm a bit confused. The TCX files from my TomTom do have the lowercase extension (.tcx
). I was just showing how the names appeared in Windows. I tried explicitly renaming them to lowercase on Linux and it still didn't work.
Do I actually need the GarminDevice.xml
file to make the plugin work? I thought that garminplugin.xml
would be sufficient.
I even tried adding a "real" Garmin device and the plugin doesn't detect this one either:
<Device enabled="true">
<Name>Garmin 405</Name>
<StoragePath>/home/me/Dropbox/3826706810</StoragePath>
<FitnessDataPath>/home/me/Dropbox/3826706810/History</FitnessDataPath>
<StorageCommand></StorageCommand>
</Device>
The 3826706810
directory contains all the files created by Garmin's own tools on my Windows computer:
...
DeviceSettings.xml
GarminDevice.xml
...
History/
History/2015-01-14-051533.TCX
History/2015-01-15-133508.TCX
History/2015-01-16-145121.TCX
...
And GarminDevice.xml
contains the FitnessWorkouts
and FitnessHistory
sections, with uppercase FileExtension:
<DataType>
<Name>FitnessWorkouts</Name>
<File>
<Specification>
<Identifier>http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2</Identifier>
<Documentation>http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd</Documentation>
</Specification>
<Location>
<Path>History</Path>
<FileExtension>TCX</FileExtension>
</Location>
<TransferDirection>InputOutput</TransferDirection>
</File>
<Extensions>
<WorkoutLimits xmlns="http://www.garmin.com/xmlschemas/FitnessDeviceLimits/v1">
<MaxWorkouts>200</MaxWorkouts>
<MaxUnscheduledWorkouts>25</MaxUnscheduledWorkouts>
<MaxOccurrences>200</MaxOccurrences>
</WorkoutLimits>
</Extensions>
</DataType>
<DataType>
<Name>FitnessHistory</Name>
<File>
<Specification>
<Identifier>http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2</Identifier>
<Documentation>http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd</Documentation>
</Specification>
<Location>
<Path>History</Path>
<FileExtension>TCX</FileExtension>
</Location>
<TransferDirection>InputOutput</TransferDirection>
</File>
</DataType>
Again, the plugin "sees" the device, but does not find any activities on it:
Aha! Problem solved.
I realized from reading the log file output that the FitnessDataPath
must be a relative path, not an absolute path. With that fixed, everything works fine :+1:
<Device enabled="true">
<Name>TomTom GPS Sport Watch</Name>
<StoragePath>/home/me/Dropbox/tcx</StoragePath>
<StorageCommand></StorageCommand>
<FitnessDataPath>.</FitnessDataPath>
</Device>
It may be worthwhile to mention this in the docs to avoid confusing others.