花了半个下午看看有没有办法从我的划船机导出实时运动数据

91 天前
 amet

多年前刷到电视剧《纸牌屋》里有一幕是某人边看新闻边用划船机健身,于是这个想法就深深烙在我脑海里了,以至于直至今日,我虽没完整看过一集纸牌屋,也忘了当初场景里出现的是哪个角色,还是在年初购入了某品牌的磁阻划船机(刚好夹在两次健身器材享受国补之间不是,哥们)。

不过,除了边划船边看新闻和讲座,要是能更身临其境一点就好了,比如我已经关注 Kayak VR: MirageRoadmap: Rowing machine support 这个议题很久了。

厂商倒是做了个手机 APP ,用户运动时会播放预先录制好的视频……还有一种就是 3D 游戏,一打开宣传视频就能回到塞班时代……

那么有没有开放自己动手的选项呢?迪卡侬倒是有 SDK,不过他们家划船机的价格大概是我这款的 3 倍。

鉴于厂商的网站根本打不开(明明他们 5 月又发布了一款跑步机新品),也不知道有没有支持 FTMS 协议。

另外有个侵入式的方案 Open Rowing Monitor,通过磁性传感器捕获飞轮的转动情况,推算桨频、速度、功率等数据,我这还没过保修期,只能作罢。

由于划船机是通过蓝牙与 iOS App 通信的,在 App 里删除配对,再试着用 bleak 扫描蓝牙设备,果然看到了个熟悉的名字。

成功建立连接后监听所有 notify 消息,收到了来自某个主题持续不断的报文,长度固定为 20 个字节。摆弄下划船机,发现报文有变化,停止摆弄过一会后又不变了,但是与初始报文有所不同。

那么,如果厂商只是把数据简单拼接起来传输,没有对报文进行二次加密或混淆的话,是不是可以解读出原始数据?试着将每个字节按小端字节序转换为无符号整型,再用 matplotlib 绘制跟踪曲线。20 个数据指标着实有点看花眼,于是设置当一个数据项 10 次报文都相同时,就不再绘制,直到数值发生变化。

果然世界上确实有这等好事,经过一段时间的运动观察,得出结论:

还有一些曲线和做功有明显对应关系,但是机器没有对应的仪表盘,不好判断是什么含义(要不等周一问问客服好了)

接下来就等哪位大佬做个支持输入数据的 3A 划船游戏了(不是)

1194 次点击
所在节点    分享发现
10 条回复
siknet
91 天前
往复式的好像都可以用自行车的里程表来计数,不知道你玩过没有,玩过应该知道我说什么
abcde51111
91 天前
@siknet 里程表没用,里程表是获取的 GPS 数据好像,可以试试踏频器,获取到频率就可以了
hanguofu
91 天前
有意思:) 我觉得 可以把 这些 原始数据 收集起来,在某个 github 上汇总,这样,大家就可以根据这些数据写一些 安卓、linux 的应用练起来~~~
xyx0826
90 天前
手机 App 能连接机器蓝牙并显示数据吗?有这个功能的话,可以考虑逆向 App 获得蓝牙数据解析的算法。
siknet
90 天前
@abcde51111 普通的码表就是电磁感应啊,很简单的原理,轮胎每走一圈都经过一轮感应器,然后根据周长计数
amet
90 天前
@siknet Open Rowing Monitor 这个项目就是这么做的,不过我看得拆机器才能摸着里面的结构,所以就没弄。而且我还没研究过不同阻力下飞轮的转动和距离是否维持线形关系。
amet
90 天前
@xyx0826 看了下 iOS App 逆向的资料,准备工作确实有一些。也许可以试试 Android App 。
goodryb
90 天前
有点意思,如果是想玩玩技术可以,如果只是想用的话不如花钱买个成品
amet
90 天前
看了下 Android App ,似乎接收完数据就送到 Flutter 去了,简单搜了下,反编译 libapp.so 好像还没有什么傻瓜式的工具
korvin
89 天前
我的划船机已经被立墙边两年了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1137196

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX