PEANUT996

可视化你的苹果健康数据

随着苹果公司 Apple Watch 的迭代,它的功能也越来越强大了。Apple Watch 内置有多种传感器,如加速度计、陀螺仪和心率监测器,可以实时追踪用户的活动水平,包括步数、运动量、站立时间以及心率等。Apple Watch 无时无刻不在收集这些数据,并且上传到 iCloud,用户可以通过 iPhone 自带的“健康”APP,查看各种各样的指标,当然你也可以获取这些数据,手动进行数据分析。今天我们就来介绍如何获取你的全部健康数据并且将其导入到 Grafana 进行数据可视化。

获取你的健康数据

对于开发者来说,健康数据可以通过 Health Kit 套件读写,那不是开发者的普通人就没办法获取了吗? 当然有:

以 XML 格式共享健康和健身数据

你可以从“健康”将所有健康和健身数据导出为 XML 格式,这是 App 之间共享数据的一种常用格式。

  1. 轻点右上方你的头像或姓名首字母。

    如果没有看到你的头像或姓名首字母,请轻点屏幕底部的“摘要”或“浏览”,然后滚动到屏幕顶部。

  2. 轻点“导出所有健康数据”,然后选取一种共享数据的方式。

通常需要等待片刻,然后便会打包出一个名为导出.zip 压缩包,大小不确定,主要和数据量大小相关,解压后,它的目录结构通常是这样的:

└───apple_health_export
    │   导出.xml
    │   export_cda.xml
    ├───electrocardiograms
    │       ecg_*.csv
    └───workout-routes
            route_*.gpx

其中最重要的就是 导出.xmlexport_cda.xml 文件,里面保存了大量的数据。

拿到这些数据后,就可以使用各种工具进行数据可视化了。

通过 Grafana 进行数据可视化

Grafana 是一个开源的指标分析和可视化工具,它被广泛用于展示和监控云基础设施和应用程序的实时数据。Grafana 提供了一个强大且易于使用的界面,允许用户创建各种图表、图形和仪表盘,以直观地展示和分析数据。它支持多种数据源,包括 Prometheus、InfluxDB、Elasticsearch 等,使得它可以与各种监控系统和数据库集成。

在 Grafana 支持的数据源里有一个 InfluxDB, 它是一个开源的时间序列数据库(TSDB),专门设计用于处理高写入和查询负载,非常适合存储和检索时间序列数据。

恰好 Apple 健康数据里面大量记录都是以时间序列存储的,那么接下来的事情就简单了,只需要把我们的健康数据写入到 Influx DB,就可以通过 Grafana 进行数据可视化了。

整体的工作量还是不小的,但是别人已经造好了现成的轮子:

https://github.com/k0rventen/apple-health-grafana

接下来只需要几个简单的步骤就可以完成数据导入了。

检查数据

由于作者并未支持中文用户,对于中文用户拿到的压缩包,需要把压缩包内的导出.xml改为export.xml ,然后再将其压缩回去,将你的压缩包文件改为 export.zip 即可

启动项目

首先 clone 仓库,进入仓库目录,将刚刚的 export.zip 移动到仓库目录下,修改 docker-compose.yml 文件:

    volumes:
    - ./export.zip:/export.zip

数据准备完毕后,使用以下命令即可启动 grafana 并将数据导入:

# 拉取镜像
docker-compose pull

# 启动grafana和influx db
docker-compose up -d grafana influx

# 数据导入
docker-compose up ingester

到你看到 All done ! You can now check grafana. 这句话,说明数据已经迁移完成,接下来就可以进入 grafana 查看数据了。

查看数据

grafana 启动后的默认地址http://localhost:3000,账号密码是 admin:health

当你看到这个酷炫的界面时,表示数据已经完全导入成功!

默认的 Dashboard 已经把常用的健康数据指标列出来,但是仍然可以手动添加一些可视化数据,比如其他 App 导入的体重数据:

想要实时更新健康数据?

熟悉 Grafana 的小伙伴们都知道,Grafana 主要是用来做实时监控的,那么是否可以实时监控我们的健康数据呢? 答案是有的,但是目前并没有人提供现成的轮子,需要自己探索,这里只提供一个思路:

Apple Store 有一款 Health Auto Export 的 App,可以通过自动化将健康数据投递到任何 Restful API, MQTT broker 或者 DropBox 等等,缺点是要花钱(自己动手写一个更好)

通过自动化的数据导出,并实时将数据导入到 Influx 中,即可完成健康数据的实时监控!