文章目录
使用 Fitbit 已经三个多月了,用它来记录每天的运动量以及睡眠质量感觉很方便。
不过因为我用的电脑是笔记本,如果要同步 Fitbit 的数据,就需要把 Fitbit Base Station 连接在笔记本电脑上,然后 Fitbit 的数据才会同步到官网上。
因为家里没有 24 小时开机的电脑,所以没办法直接把 Fitbit Base Station 连接在一台电脑上实现回家自动同步。
但是家里有下载机是 24 小时运行的,于是去 Fitbit 官网看看有没有提供 Linux 下的 Fitbit 同步程序。
很不幸的是,Fitbit 官方只提供了 Windows 和 Mac OS X 版本的同步程序,没有提供 Linux 下的 Fitbit 同步程序。
昨天突然想到去网上找找看有没有非官方的 Linux 平台 Fitbit 同步程序,没想到还真找到了。
在网上找到了两个项目,用来提供跨平台的 Fitbit 同步功能。
开源的 Fitbit 同步程序
libfitbit
项目地址:
libfitbit is an implementation of the data retrieval protocol for the fitbit health tracking device. It also implements a synchronization client for synchronizing data with the fitbit website on platforms not supported by Fitbit currently.
fitbitd
项目地址:
fitbitd synchronises FitBit trackers with the FitBit.com service. You simply leave it running in the background and it will synchronise the tracker periodically, just like the official FitBit software does for Windows or Mac OS.
libfitbit 是用 python 编写的,功能上可能相对简陋一些,而 fitbitd 是使用 C 编写的,功能相对于 libfitbitd 强大一点,并且提供了 Linux 桌面环境中的状态栏插件。
不过因为我是要在 DS211j 上安装,而 DS211j 的 CPU 是 ARM 而非 x86,因此如果要安装这些程序都需要自己来编译。
在多次尝试之后,我选择了 libfitbit 而不是 fitbitd,因为 fitbitd 要用到 dbus,在编译时会遇到很多问题。如果只是为了同步 Fitbit 数据,libfitbit 已经基本够用,并且像 daemon 模式,也可以通过 nohup 来实现。
在 DS211j 上安装包管理程序 ipkg
注意:文中所有在 NAS 上的操作均以 root 用户进行
首先需要在 DS211j 的控件台里启用 SSH 服务,然后使用 SSH 连接到 NAS,安装 ipkg:
wget http://ipkg.nslu2-linux.org/feeds/optware/cs08q1armel/cross/unstable/syno-mvkw-bootstrap_1.2-7_arm.xsh
chmod +x syno-mvkw-bootstrap_1.2-7_arm.xsh
./syno-mvkw-bootstrap_1.2-7_arm.xsh
ipkg update
注意,如果安装完 ipkg 可能需要修改一下 .profile 文件,防止 /opt 可能没有加到 PATH 环境变量的问题,需要把:
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin:/usr/local/bin
export PATH
修改为:
PATH=/opt/bin:/opt/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin:/usr/local/bin
export PATH
安装所需软件
编译以及运行所需软件包如下:
- gcc
- python27
直接使用 ipkg 安装即可:
ipkg install gcc python27
编译 libusb-1.0
DS211j 使用的软件源中的 libusb 是 0.1 版本的,而 libfitbit 需要的是 1.0。如果使用 libusb-0.1 虽然 libfitibt 可以运行,但是无法接收数据。
先去
注意在编译前需要修改 libusb 的 Makefile,默认情况下编译的话,在使用时会出现“undefined reference to `clock_gettime'” 错误。
./configure --prefix=/opt
vi libusb/Makefile
# 修改 LDFLAGS= 为 LDFLAGS=-lrt
make
make install
使用 libfitbit
从
从
这时需要把 Fitbit Base Station 连接到 DS211j 上。
在 NAS 上进入 /root/libfitbit 目录,运行 python2 fitbit.py 测试安装是否正常。
Start reset () {}
sent: ['a4', '01', '4a', '00', 'ef']
received: ['a4', '01', '6f', '20', 'ea']
End reset None
# 其他日志省略...
End open_channel None
Waiting for receive
如果出现 Waiting for receive 就说明 fitbit.py 已经正常运行了,如果有 Fitbit Ultra Tracker 在 Fitbit Base Station 附近,那么就会继续出现其他日志。
接下来就要让 libfitbit 在后台一直运行了。libfitbit 本身提供了每隔 15 分钟同步一次数据的功能,但没有提供后台运行的功能,不过借助于 Linux 中的 nohup 命令可以轻松实现。
nohup python2 fitbit_client.py > /tmp/libfitbit.log &
注意,这里会把 libfitbit 产生的日志输出到 /tmp/libfitbit.log 中,但是 /tmp 的容量不会很大,所以正式使用时,可以直接将日志输出到 /dev/null:
nohup python2 fitbit_client.py > /dev/null &
结语
感谢 Kyle Machulis 带来这么棒的开源项目。
最开始一直尝试在 My Book Live 上配置 libfitbit 和 fitbitd,但是弄到最后突然发现,My Book Live 并没有 USB 接口⋯⋯
如果只是 Linux 用户希望在 Linux 系统下同步数据,如果又刚好是 Ubuntu 或 Mint 用户的话,那么使用 fitbitd 可能是一个更好的选择,因为作者已经提供了一个 PPA 源来直接安装 fitbitd,并且还有状态栏插件可以用。Arch 用户也可以直接用 sudo pacman -Sy fitbitd-git 来安装。
当然,如果你也像我一样,不喜欢电脑上拖着个小尾巴,家里也刚好有个带 USB 接口并且 24 小时运行的 Linux 设备,也么也可以折腾一下。
希望此文对爱好 量化生活 的朋友们有所帮助。
参考资料
- Overview on modifying the Synology Server, bootstrap, ipkg etc
- What kind of CPU does my NAS have
- http://sourceforge.net/projects/libusb/files/libusb-1.0/
- undefined reference to涉及的链接问题
- https://github.com/qdot/libfitbit
- http://sourceforge.net/projects/pyusb/files/PyUSB%201.0/
- http://www.paulburton.eu/projects/fitbitd/
- http://www.fitbit.com/
--- EOF ---
会折腾的人真了不起,羡慕嫉妒恨啊!
话说我在等 Fitbit One ,但这玩意儿只支持 iPhone 4S/5 ,手上还是 iPhone 4 的我汗颜啊,好在 One 也还没发布,5 也还搞不到。。。 :roll:
有蓝牙同步就不用插电脑上了比较方便。
不过只支持 iPhone 还木有 Android 支持也不爽,偶换用 Android 了,哈。
哥 ,我更新了你的goagentx,不能用了啊
Error: Not Found
The requested URL /2 was not found on this server.
重新部署一下服务端,更新一下客户端。
Hello!
Thank you for this very good tutorial.
I followed it step by step but
make
fails with an error:
core.c:1771: error: implicit declaration of function 'usbi_gettimeofday'
make[2]: *** [libusb_1_0_la-core.lo] Error 1
I did change the libusb/Makefile to:
LDFLAGS = -LRT
Do you know how to fix this problem?
Thank you!
Use libusb 1.0.9 and change -LRT to -lrt and have a try?
Using libusb 1.0.8
make
andmake install
were successful.But trying to run
python2 fitbit.py
I receive error:Traceback (most recent call last):
File "fitbit.py", line 386, in
sys.exit(main())
File "fitbit.py", line 352, in main
if not base.open():
File "/root/libfitbit2/antprotocol/bases.py", line 26, in open
if not super(FitBitANT, self).open(vid, pid):
File "/root/libfitbit2/antprotocol/libusb.py", line 63, in open
idProduct = pid)
File "/root/libfitbit2/usb/core.py", line 856, in find
raise ValueError('No backend available')
ValueError: No backend available
It seems Python cannot find libusb in
/opt/lib/
I tried all versions of PyUSB.
Do you plug in your fitbit base station? And you can cd /dev and run ls to see if there has the fitbit base station device.
Fitbit Base is pluged in.
I can see it in /dev/usb and also in DSM.
PATH is correct too.
Do you use Fitbit Ultra? or Fitbit One? Currently this script seems not support Fitbit One.
You can use lsusb to see if there any device match
VID = 0x0fcf
PID = 0x1008
I have a Ultra. lsusb does not find a device with VID = 0x0fcf PID = 0×1008.
My FitBit base matches Vendor:0x10c4 Product:0x84c4.
lsusb reports:
Bus 001 Device 006: ID 10c4:84c4 Cygnal Integrated Products, Inc.
Python can find and load libusb1 correctly.
Your VID and PID are correct, I made a mistake.
I did’t know why you script can not find backend, maybe I modified the script.
Here is a zip of scripts I used, you can download and extract and have a try :)
http://cl.ly/2x460G1e2U0A