同步指定时间的Garmin运动记录到不同账号

最近带着小朋友在运动,小朋友看到运动记录都在我的Garmin Connect活动在一起,还有点不开心,希望有自己的账号,只有他自己的运动记录。于是就有了下面忙活的内容。 现在博客跑步的内容是通过yihong0618大佬的running_page实现跑步记录自动生成博文,详细可以看《跑步记录自动生成Markdown发布博文》。 大致思路就是如下: 申请一个新的Garmin Connect账号; python脚本实现:做一个fit文件的缓存;根据指定的时间找到对应的fit文件;上次fit文件到新注册的Garmin Connect账号; shell脚本实现:接收时间参数;获取Garmin Connect账号密钥;执行python脚本。 Garmin Connect账号注册 账号注册时需要注意,Garmin有国内账号和国际账号的区分,因此如果这方面需求的可以稍微注意一下。 国内账号地址:[[https://connect.garmin.cn/]] 国际账号地址:[[https://connectus.garmin.cn/]] python同步脚本 下面的脚本放在run_page工程下的run_page目录下: import argparse import asyncio import json import os from datetime import datetime import config from garmin_sync import Garmin from gpxtrackposter.track_loader import load_fit_file FIT_FOLDER = os.path.join(config.parent, "FIT_OUT") FIT_CACHE_FILE = os.path.join(config.parent, "fit_cache.json") def save_fit_cache_list(fit_cache_list): with open(FIT_CACHE_FILE, "w") as f: json.dump(fit_cache_list, f) def load_fit_cache_list(): if os.path.exists(FIT_CACHE_FILE): with open(FIT_CACHE_FILE, "r") as f: try: return json.load(f) except Exception as e: print(f"json load {FIT_CACHE_FILE} \nerror {e}") pass return {} def upload_files_to_garmin(options): print("Need to load all fit files maybe take some time") fit_cache_list = load_fit_cache_list() file_names = [] for file_name in os.listdir(FIT_FOLDER): if file_name.endswith('.fit') and file_name not in fit_cache_list: file_names.append(file_name) for file_name in file_names: track = load_fit_file(os.path.join(FIT_FOLDER, file_name)) if track.start_time_local: fit_cache_list[file_name] = datetime.strftime(track.start_time_local, "%Y-%m-%d:%H:%M:%S") save_fit_cache_list(fit_cache_list) to_upload_files = [] if options.dt is not None: dts = options.dt.split(",") for dt in dts: for file_name in fit_cache_list: if fit_cache_list[file_name].startswith(dt): to_upload_files.append(os.path.join(FIT_FOLDER, file_name)) break print("Uploading files to Garmin...") garmin_auth_domain = "CN" if options.is_cn else "" garmin_client = Garmin(options.secret_string, garmin_auth_domain) loop = asyncio.get_event_loop() future = asyncio.ensure_future( garmin_client.upload_activities_files(to_upload_files) ) loop.run_until_complete(future) if __name__ == "__main__": if not os.path.exists(FIT_FOLDER): os.mkdir(FIT_FOLDER) parser = argparse.ArgumentParser() parser.add_argument( "secret_string", nargs="?", help="secret_string fro get_garmin_secret.py" ) parser.add_argument( "--dt", dest="dt", help="if upload to strava all without check last time", ) parser.add_argument( "--is-cn", dest="is_cn", action="store_true", help="if garmin account is cn", ) upload_files_to_garmin(parser.parse_args()) 使用方式,如上传2025-06-22:20,2025-06-22:21两个时间相关的运动记录到新账号。 ...

六月 28, 2025 · 2 分钟 · 274 字 · Byter ·  Garmin

跑步记录自动生成Markdown发布博文

通过yihong0618大佬的running_page实现跑步记录自动生成博文,自动发布的工作核心如下图所示。 graph TB subgraph APP [APP Type] direction LR Garmin ~~~ Nike Nike ~~~ Keep end subgraph run [running_page] direction LR laps_drawer --> running_page running_page --> id1[(data.db)] end APP --> running_page id1[(data.db)] -->|gen_svg gen_md|obsidian obsidian --> |maestral|Hugo 首先简单介绍一下yihong0618大佬的running_page功能,支持Nike、Strava、佳明(佳明中国)及 Keep 等自动备份 GPX 数据,生产静态的网页数据,打造个人跑步主页。它是这样工作。 接下来介绍我是怎么使用,我平时是使用Garmin(佳明)手表,数据会通过APP上传到佳明中国。使用步骤如下: 通过running_page使用Garmin-CN to Garmin功能实现数据同步到本地,还实现了一个很棒的功能将数据同步到佳明全球。这个时候你可以通过在Strava里配置,实现将佳明全球的数据同步到你的Strava账号下。 python3 run_page/garmin_sync_cn_global.py $garmin_cn_secret $garmin_secret 生成跑步路线svg和对应的md文件,示例20240317(21.12 km),参考running_page的功能,自己编写的一个生成跑步路线的laps_drawer(示例代码),通过调用gen_svg(示例代码)实现跑步路线的svg文件,然后再统计了一些跑步的统计信息,生产跑步记录md文件。 # gen_svg.py 文件放到running_page工程下的run_page目录,参数参考说明,程序会自动将生成到$blog_path下,需要看代码修改一些相对位置 # laps_drawer.py 文件放到running_page工程下的run_page/gpxtrackposter目录 python3 run_page/gen_svg.py --from-db --title "Running Maps" --type laps --athlete $athlete --track-color "#6B9CF0" --special-color "#83C67B" --special-color2 "#E49A52" --special-distance 10 --special-distance2 15 --min-distance 0.5 --use-localtime --only-run --background-color "#1A1A1A" --animation-time 20 --no-background --blog-dir $blog_path 生成跑步总结统计数据,示例跑步总结,参考running_page的功能,提取跑步信息,结合EChart生成跑量和趋势图。这里也是自己编写的一个python程序gen_md(示例代码)。 # gen_md.py 文件放到running_page工程下的run_page目录,参数参考说明,程序会自动将生成到$blog_path下,需要看代码修改一些相对位置 python3 run_page/gen_md.py --from-db --use-localtime --only-run --min-distance 0.5 --track-color "#6B9CF0" --special-color "#83C67B" --special-color2 "#E49A52" --blog-dir $blog_path Obsidian可以查看生成的md文件,根据文件的位置再调整python程序的相对路径。 通过maestral将新生成的文件自动同步到服务器,然后Hugo编译发布成静态页面。

八月 17, 2024 · 1 分钟 · 110 字 · Byter ·  Garmin ·  Run