Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

有没有可能弄一个strava同步到garmin connect的自动化脚本 #146

Closed
ustccuikai opened this issue Jun 22, 2021 · 40 comments
Closed

Comments

@ustccuikai
Copy link

由于跑步的时候喜欢用apple watch自带的健身app记录跑步,同时,strava也支持在应用内导入健身app记录的跑步轨迹。我在想有没有可能弄一个strava自动同步运动记录到garmin connect的脚本,而很多其他的app都支持连接garmin的数据,garmin connect作为一个载体,可以让跑步的数据保持在更多的地方。

@yihong0618
Copy link
Owner

我猜有点难度但可以尝试

  1. strava 的返回数据不是 gpx, 需要生成相应的 gpx,但可以尝试,但会丢掉数据的准确性
  2. @geekplux 的方案很棒,是用 Garmin 作为数据源,https://twitter.com/GeekPlux/status/1376851119989657605
  3. 我不确定能不能搞定 garmin 的自动上传,猜测是能的,但最近可能没有太多精力,有精力我会尝试的哈哈

@ustccuikai
Copy link
Author

我猜有点难度但可以尝试

  1. strava 的返回数据不是 gpx, 需要生成相应的 gpx,但可以尝试,但会丢掉数据的准确性
  2. @geekplux 的方案很棒,是用 Garmin 作为数据源,https://twitter.com/GeekPlux/status/1376851119989657605
  3. 我不确定能不能搞定 garmin 的自动上传,猜测是能的,但最近可能没有太多精力,有精力我会尝试的哈哈

是的,有一块Garmin的手表的话就很容易解决。之前刚从Garmin过渡到Apple watch,所以看能不能也有个类似的方案

@yihong0618
Copy link
Owner

我猜有点难度但可以尝试

  1. strava 的返回数据不是 gpx, 需要生成相应的 gpx,但可以尝试,但会丢掉数据的准确性
  2. @geekplux 的方案很棒,是用 Garmin 作为数据源,https://twitter.com/GeekPlux/status/1376851119989657605
  3. 我不确定能不能搞定 garmin 的自动上传,猜测是能的,但最近可能没有太多精力,有精力我会尝试的哈哈

是的,有一块Garmin的手表的话就很容易解决。之前刚从Garmin过渡到Apple watch,所以看能不能也有个类似的方案

我有时间试试

@yihong0618
Copy link
Owner

yihong0618 commented Jun 22, 2021

@ustccuikai

查了下 @leeeboo 的方案目前看很棒 https://twitter.com/leeeboo/status/1403512678396485639 但我感觉 strava 生成 gpx 会丢失些精度,等我写完测一下吧

@leeeboo
Copy link

leeeboo commented Jun 22, 2021 via email

@yihong0618
Copy link
Owner

是的 gpx 会丢失一些信息,平台之间的同步尽可能用原始.fit文件 yihong @.***>于2021年6月22日 周二11:01写道:
@ustccuikai https://github.com/ustccuikai 查了下 @leeeboo https://github.com/leeeboo 的方案目前看很棒 https://twitter.com/leeeboo/status/1403512678396485639,但我感觉 strava 生成 gpx 会丢失些精度,等我写完测一下吧 — You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub <#146 (comment)>, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAGWK47OLYSDIQDDNI2C4Z3TT74ILANCNFSM47CVFHVQ .
-- 李博 Albert +65 87982050

strava 的 api 我仔细看了下,应该拿不到 .fit 只能是自己生成没那么准确的 gpx.

@yihong0618
Copy link
Owner

目前的设计的流程如下,但 strava api 有 limit rate, 每天最多 100 个采用这种办法同步。
image

之后更新,但没经过测试。

@yihong0618
Copy link
Owner

@ustccuikai 可以测试看看,需要配置好 secret type 选择 strava_to_garmin 或 strava_to_garmin_cn
可以本地先跑一下, 有问题的话留言

@ustccuikai
Copy link
Author

ustccuikai commented Jun 25, 2021

测试了一下,同步成功了,非常感谢,Action里面有些笔误(加粗的地方),需要修改下

  • name: Run sync Strava to Garmin(Run with strava(or others upload to strava) data backup in Garmin)
    if: env.RUN_TYPE == 'strava_to_garmin'
    run: |
    python scripts/strava_to_garmin_sync.py ${{ secrets.STRAVA_CLIENT_ID }} ${{ secrets.STRAVA_CLIENT_SECRET }} ${{ secrets.STRAVA_CLIENT_REFRESH_TOKEN }} ${{ secrets.GRAMIN_EMAIL }} ${{ secrets.GARMIN_PASSWORD }}

  • name: Run sync Strava to Garmin-cn(Run with strava(or others upload to strava) data backup in Garmin-cn)
    if: env.RUN_TYPE == 'strava_to_garmin_cn'
    run: |
    python scripts/strava_to_garmin_sync.py ${{ secrets.STRAVA_CLIENT_ID }} ${{ secrets.STRAVA_CLIENT_SECRET }} ${{ secrets.STRAVA_CLIENT_REFRESH_TOKEN }} ${{ secrets.GRAMIN_EMAIL }} ${{ secrets.GARMIN_PASSWORD }} --is-cn

@ustccuikai
Copy link
Author

@yihong0618 生成的gpx上传到Garmin Connect后好像不能触发其他软件同步Garmin的数据
我手动测试了这里的工具 https://github.com/pR0Ps/strava-backup ,生成fit文件后上传能触发Garmin向其他软件同步

@yihong0618
Copy link
Owner

@yihong0618 生成的gpx上传到Garmin Connect后好像不能触发其他软件同步Garmin的数据
我手动测试了这里的工具 https://github.com/pR0Ps/strava-backup ,生成fit文件后上传能触发Garmin向其他软件同步

这个不行,没法自动化的,这个本质是导出。可能是我们得生成 .fit 文件,我对 .fit 不了解,这个需要时间了,可能下周我看看,这周忙一些。

@yihong0618
Copy link
Owner

@yihong0618 生成的gpx上传到Garmin Connect后好像不能触发其他软件同步Garmin的数据
我手动测试了这里的工具 https://github.com/pR0Ps/strava-backup ,生成fit文件后上传能触发Garmin向其他软件同步

这个不行,没法自动化的,这个本质是导出。可能是我们得生成 .fit 文件,我对 .fit 不了解,这个需要时间了,可能下周我看看,这周忙一些。

你能介绍下你是怎么用这个工具生成 .fit 的么?

@ustccuikai
Copy link
Author

就按照ReadMe里面的说明安装了后pip install strava-backup
执行strava-backup --config strava-backup.conf
strava-backup.conf里面同时填了client id和token 还有strava的用户名和密码

@yihong0618
Copy link
Owner

能指定 .fit 么?我搜索了下他上面没看到 .fit 的代码。我晚上再看一下。

@ustccuikai
Copy link
Author

导出的文件在activities目录下,按照年份组织
没看到指定类型的地方,导出的文件格式有.fit 或者 .tcx(不知道strava的规则是什么)。都是Garmin能支持上传的类型

@yihong0618
Copy link
Owner

感觉不太行。可能目前还是原来的方式,我看了下他代码,这个导出是上传格式的。

@ustccuikai
Copy link
Author

感觉不太行。可能目前还是原来的方式,我看了下他代码,这个导出是上传格式的。

这就说的通了,之前有些我是从Garmin导出tcx上传到strava的,还有一部分是在strava应用内通过连接apple health导进去的。那看来strava集成apple health时,拿的都还是原始的fit文件格式,所以通过strava连接apple health导入的活动导出的都是fit格式

@yihong0618
Copy link
Owner

是的,Apple Watch 很有意思,有些用的是 gpx, 有些用的是 fit. 今天学到了。

@ustccuikai
Copy link
Author

ustccuikai commented Jun 30, 2021

@yihong0618 由于strava中我是通过Apple health导入的,所以原始格式是fit的
现在用https://github.com/pR0Ps/stravaweblib 这个工具导出对应activity id的原始fit格式文件,然后再上传到garmin的

@yihong0618
Copy link
Owner

@ustccuikai
理论上可以自动化,我看看时间。

@ustccuikai
Copy link
Author

我简单改了下,已经可以自动化了。
python入门级别,有些地方可能写的不好
image
image

@yihong0618
Copy link
Owner

@ustccuikai 感兴趣可以提个 pr
但是 garmin 那块不同的类型 upload 的上传的 url 是不同的,别忘了改。

@ustccuikai
Copy link
Author

我先测试两天看看

@ustccuikai
Copy link
Author

pr已经提交了 #150

ben-29 pushed a commit to ben-29/workouts_page that referenced this issue Sep 5, 2021
ben-29 pushed a commit to ben-29/workouts_page that referenced this issue Sep 5, 2021
ben-29 pushed a commit to ben-29/workouts_page that referenced this issue Sep 5, 2021
ben-29 pushed a commit to ben-29/workouts_page that referenced this issue Sep 6, 2021
@superleeyom
Copy link
Contributor

我最近也遇到了这个需求,就是把 Apple Watch 自带的体能训练「跑步」数据导入 Strava,然后再把 Strava 的数据,借助 Running Page 上传到 garmin connect(国际区),以 garmin connect 作为载体,再将数据同步到 Nike Run Club(简称 NRC),目前发现数据虽然能导入到 garmin connect,但是实际无法触发 garmin connect 向其他软件「这里我是 NRC」同步,NRC 目前已确定和 garmin connect 绑定成功,我看了下 garmin connect 里面的数据,发现它的运动类型是「其他」,手动在 garmin connect 上将其修改为「跑步」类型,依然没有效果,这就很神奇,对 Garmin 和 Nike 之间数据同步逻辑很迷惑,所以想和各位请教下
@leeeboo @yihong0618 @ustccuikai

@yihong0618
Copy link
Owner

我记得我设置了自动修改。。。

@superleeyom
Copy link
Contributor

@yihong0618 这个是在 garmin connect 上设置的吗?

@yihong0618
Copy link
Owner

@superleeyom

这个我后来没研究了,你感兴趣可以看看。
https://github.com/yihong0618/running_page/blob/master/scripts/garmin_sync.py#L185-L216

@ustccuikai
Copy link
Author

ustccuikai commented Sep 23, 2022

我很早之前弄的一个脚本是可以的,strava -> garnmin cn -> 悦跑圈/keep,每次同步后都可以的
这是历史Actions https://github.com/ustccuikai/running_page/actions
需要注意的是用 strava_web_client.get_activity_data(i.id, fmt=format)去拿数据,如果从apple导入strava的话,拿到的是fit类型的数据
具体可以参考https://github.com/ustccuikai/running_page/blob/master/scripts/strava_to_garmin_sync.py

{'uploadId': 3933576143, 'uploadUuid': {'uuid': '4ce73496-e4c6-45c5-b8b2-e02ded73424e'}, 'owner': 9271632, 'fileSize': 106347, 'processingTime': 882, 'creationDate': '2022-09-22 23:05:12.23 GMT', 'ipAddress': None, 'fileName': '7851755917.fit', 'report': None, 'successes': [{'internalId': 209760055, 'externalId': '1032822191', 'messages': None}], 'failures': []}

@superleeyom
Copy link
Contributor

@ustccuikai 好的,我参考下,感谢

@superleeyom
Copy link
Contributor

@yihong0618 我试试 @ustccuikai 的脚本

@yihong0618 yihong0618 reopened this Sep 23, 2022
@yihong0618
Copy link
Owner

@superleeyom @ustccuikai

PR welcome ...
I forget that why the last pr closed...

@yihong0618
Copy link
Owner

@superleeyom

Strava 不是自动能同步 garmin-com 么?
之前的需求是 cn

@superleeyom
Copy link
Contributor

@yihong0618 可以同步到garmin国际区,但是无法触发 garmin 同步到 Nike,目前 Nike 已经和 garmin 绑定了,问题在这里,好像无解

@superleeyom
Copy link
Contributor

今天早上测试了下,用的 @ustccuikai 的脚本同步,目前 strava 能正常同步到 garmin,类型也都正确,如图所示:
IMG_9168
然后我看了眼 Nike 的数据,发现确实同步了,但是吧,它没有距离和时间,这个就很奇葩,如图所示:
IMG_9170
IMG_9169

@yihong0618
Copy link
Owner

你把 fit 转成 gpx 试试?

@ustccuikai
Copy link
Author

今天早上测试了下,用的 @ustccuikai 的脚本同步,目前 strava 能正常同步到 garmin,类型也都正确,如图所示:
IMG_9168
然后我看了眼 Nike 的数据,发现确实同步了,但是吧,它没有距离和时间,这个就很奇葩,如图所示:
IMG_9170
IMG_9169

upload_to_activities( garmin_client_nrc, strava_client, strava_web_client, DataFormat.TCX)

这个方案在之前同步到国内NRC的时候是work的,你试下把DataFormat.ORIGINAL改成DataFormat.TCX

@superleeyom
Copy link
Contributor

@superleeyom
Copy link
Contributor

@ustccuikai 重新改回了 DataFormat.ORIGINAL,就能正常上传了 garmin,否则无法上传,
https://github.com/superleeyom/running_page/actions/runs/3122137344/jobs/5063886830
今天是在是跑步机上跑的,没有在室外跑,刚看了眼 NRC,数据有距离、心率、卡路里,时间没有,garmin connect 上的数据倒是正常的,对 garmin 同步到 nrc 的逻辑感到疑惑
image

@yihong0618
Copy link
Owner

谢谢
@ustccuikai @superleeyom

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants