体重がまったく増えなくて困ってるので、毎日きちんと管理しようと思うも体重計に乗るのが面倒でサボる始末。
これじゃいかんと言うことで、モチベーションを上がる素敵なツールがないかなぁと探してたら Withings Body Cardio(現Nokia) という体重計を発見。乗ったら自動的にWi-Fiでアップロードしてくれる機能があるらしい。
本当はGarmin Index Smart Scales がそのまま Garmin Connect にアップロードされていいんだけど、肝心の体重計の精度がよくないとのことなので見送り。
ってことで、Withings Body Cardioをamazonでポチる。年末に頼んでごめんなさい・・・
薄い。届いた時点で充電は60%ほど。なのでとりあえず充電。
サイドにMicroUSBの差し込み口があるのでここから充電。となりは電源ボタン。
といっても、毎回電源ボタンを押す必要はなく、乗ったら勝手に電源が入って測定が始まる。
ちなみにバッテリの持ちは1日1回計測してひと月で10%程度減ってたので、10か月くらいは充電なしで動きそう。
ともあれ、スマホに Withingsの Health Mate というアプリをインストールしてアカウント登録&ペアリング。手順は非常に簡単。
早速測定してみた。そこそこ時間はかかるけど、TANITAのインナースキャン50Vを今まで使ってたからさほど気にならず。20秒くらい?
精度の程はタニタが50g単位で計測できるのに対しBody Cardioは100gなので微妙に差がでるけど、100g単位に直せば同じだったので信頼できそう。
体脂肪率はタニタに比べて1%ほど低めに出たけど・・・
<2017.9.23追記>
体脂肪率は病院のタニタで計測したところ、Body Cardioより5%ほど低く表示された。
体脂肪率の測定方法は難しいらしいので、相対値で参考程度にするのがよさそう
さて、ここまでだと単なる体重計レビューで何の面白みもないので、Body Cardioで遊んでみる。
まずはZwiftと連携。Zwiftで重要になってくるパワーウェイトレシオ。本来、体重は日々変わるので毎日、体重を変更するべきなのだろうけどそんなこと手動でやってられない。
ということで、Withingsのデータを自動で連携する機能がZwiftに実装されているのでアカウント連携。
方法はhttps://my.zwift.com/settings/connectionsから登録するだけ。
つづいてやることは Body Cardio のデータを Garmin Connect に同期!
ちょっとググってみたところ、 MyFitnessPal というアプリを経由することで同期させるというモノ。
Health Mate -> MyFitnessPal -> Garmin Connect ということですね。
えぇ、ダサすぎます。さすがにこんなダサいことはしたくないので Health Mate -> Garmin Connect で同期する手段を探したところ、GitHub にPythonスクリプトが上がってた。
WithingsもGarminもAPIを公開してるので誰か作ってくれてるだろうと思ったけど、あってよかった。
ってことで、CentOS上で作業
# 最小構成でインストールしているのでgitをインストール sudo yum install git # pythonのrequestsモジュールをインストール sudo yum install python-pip sudo pip install requests # githubからダウンロード sudo git clone https://github.com/charoneko/withings-garmin-v2.git withings-garmin-v2 #修正前バージョン #sudo git clone https://github.com/jaroslawhartman/withings-garmin-v2.git withings-garmin-v2 cd withings-garmin-v2/
さてここからは自分の環境にあった修正。
==================================================
[2016/1/6追記]
以下の作業の変更を反映したモノをgithubに上げました。
https://github.com/charoneko/withings-garmin-v2
<参考>
withingsのデータをgarmin connectに同期する | 三日坊主の軌跡
==================================================
https://github.com/jaroslawhartman/withings-garmin-v2 を元にした場合は以下、参考にして下さい。
まずはsync.py
sudo vi sync.py WITHINGS_USERNMAE = 'hoge@test.local' WITHINGS_PASSWORD = '12345678' # ショートネームは体重計に表示される3文字 WITHINGS_SHORTNAME = 'ABC' GARMIN_USERNAME = 'hoge@test.local' GARMIN_PASSWORD = 'PASSWORD' # 以下の3行をコメントアウト。昔の設定? ユーザーの公開、非公開情報を判定しているみたいだが・・・ # if not user.ispublic: # print 'user %s has not opened withings data' % withings_shortname # return
つづいてgarmin.py
と、ここは調べたら同じようにはまっていた人がいたので参考にさせていただく。
https://back2nature.jp/computer/web/withings-to-garmin-connect2
とりあえず、これでスクリプトを実行すれば同期されるはず。
が、上記で同期されるのは”体重”と”体脂肪率”のみ!
これはMyFitnessPalも同様らしい。ダサい・・・
ってことで他の項目も同期させてみる。
修正するのはwithings.py
以下をそれぞれ適当な場所に追加。
#そのうちGitHubに上げよう・・・
# withings の生データをそのままGarmin Connect に送ると不具合があるのでスクリプト中で調整
def get_hydration(self): """convinient function to get hydration""" for measure in self.measures: if measure.type == WithingsMeasure.TYPE_HYDRATION: return (100 - measure.get_value()) return None # Withingsの筋肉量を使用する場合はコメントアウトを外す # def get_muscle_mass(self): # """convinient function to get muscle mass""" # for measure in self.measures: # if measure.type == WithingsMeasure.TYPE_MUSCLE_MASS: # return measure.get_value() # return None # Garmin基準の筋肉量を使用する場合はこのまま。Withings基準を使用する場合はコメントアウト def get_muscle_mass(self): """convinient function to get muscle mass""" for measure in self.measures: if measure.type == WithingsMeasure.TYPE_FAT_FREE_MASS: return (measure.get_value()/2) return None def get_bone_mass(self): """convinient function to get bone mass""" for measure in self.measures: if measure.type == WithingsMeasure.TYPE_BONE_MASS: return measure.get_value() return None TYPE_MUSCLE_MASS = 76 TYPE_HYDRATION = 77 TYPE_BONE_MASS = 88 elif (self.type == self.TYPE_HYDRATION): type_s = 'Hydration' unit_s = '%' elif (self.type == self.TYPE_BONE_MASS): type_s = 'Bone Mass' unit_s = 'kg' elif (self.type == self.TYPE_MUSCLE_MASS): type_s = 'Muscle Mass' unit_s = 'kg'
続いて sync.py
+行を追加。
dt = group.get_datetime() weight = group.get_weight() fat_ratio = group.get_fat_ratio() + muscle_mass = group.get_muscle_mass() + hydration = group.get_hydration() + bone_mass = group.get_bone_mass() fit.write_device_info(timestamp=dt) fit.write_weight_scale(timestamp=dt, weight=weight, percent_fat=fat_ratio, + muscle_mass=muscle_mass, + bone_mass=bone_mass, + percent_hydration=hydration
以上で体水分、骨格筋量、骨量もGarmin Connect で表示されるようになる。
ちなみに一度同期が取られたデータについては再同期しても上書きされないので、同日等でやり直す場合はGarmin Connect で先に体重データを削除してから sync.py を実行すること。
あとは cron に登録すればok。Windows もそんなに難しくはないはず。