みなさん、こんにちは。
今回は私が愛用しているWithingsのBody+体重計とGarmin Venu Sqスマートウォッチのデータ連携についてのお話です。
Withingsの体重計で計測した体重や体組成のデータ、そしてGarminのスマートウォッチで記録した運動や睡眠のデータ、これらの情報は、それぞれの専用アプリ、WithingsとGarmin Connectで確認することができます。どちらのアプリも洗練されていて使いやすいのですが、「できれば一つの場所でまとめてデータを見たい」と感じたことはありませんか? 私は常々そう思っていました。
しかし、残念ながらWithingsとGarminは公式にはデータ連携に対応していません。Withingsの体重計で計測したデータが自動的にGarmin Connectに同期される、といった便利な機能は提供されていないのです。
連携の壁を乗り越えるAPIと有志の力
ここで諦めてしまうのはまだ早いです。実は、WithingsとGarminはそれぞれ開発者向けにAPI(Application Programming Interface)とSDK(Software Development Kit)を公開しています。APIは、異なるソフトウェア同士が情報をやり取りするための共通のルールのようなものです。そして、Garminには外部からデータをインポートするためのAPIも存在します。
この事実に目をつけた有志のエンジニアたちが、Withingsのデータを取得・整形し、Garmin Connectにインポートするためのプログラムを開発し、オープンソースプラットフォームであるGitHubなどで公開してくれています。まさに、コミュニティの力ですね!
過去の苦い経験と再びの挑戦
しかし、この手の連携プログラムには一つ大きな課題がありました。それは、WithingsやGarminのAPI仕様が頻繁に変更されることです。仕様が変更されると、それまで問題なく動作していたプログラムが突然動かなくなってしまう、という事態が何の前触れもなく発生するのです。
私も過去に両社のAPIに大きな仕様変更があった際、利用していた同期プログラムが突然動かなくなり、途方に暮れた経験があります。Github上にIssueがあげられていましたが、作者も忙しかったのか対応する気配がなく、APIの仕様変更を追いかけてまで自分でプログラムを修正する気も進まず、その時は泣く泣くデータ同期を諦めてしまいました。
それでも、「やっぱりデータを一箇所で管理したい」という思いは消えませんでした。そして最近、改めて現状を調べてみたところ、なんと、現在でも比較的安定して動作するプログラムが一つ見つかったのです!
希望の光:「withings-sync」のインストール
そのプログラムこそが、今回ご紹介する「withings-sync」です。
このプロジェクトのリポジトリを覗いてみると、最新のコミットが2024年11月30日(2025年5月17日時点)となっており、他の類似プログラムと比較しても、比較的頻繁にメンテナンスが行われているようです。これは、今後のAPI変更にも対応してくれる可能性が高いことを示唆しており、期待が持てます。
インストールは意外と簡単
それでは、実際に「withings-sync」をインストールする方法を見ていきましょう。基本的には、Pythonのパッケージ管理ツールであるpipを使ってインストールできます。
pip3 install withings-sync
もし、お使いのPCで比較的最近のLinuxディストリビューションを使用していれば、上記のコマンドを実行するだけでインストールが完了するはずです。ただし、Pythonのバージョンが3.8以降である必要がありますので、ご注意ください。
Raspberry Pi環境でのセットアップ
ちなみに、私は普段からRaspberry Piを色々と活用しているので、今回もRaspberry Piのbuster環境にセットアップを試みました。その際、いくつかの準備が必要でしたので、もし同様の環境で試される方がいれば参考にしてください。
まず、Pythonのバージョンを上げるために、pyenvというツールを使ってPython 3.10.12の環境を用意しました。
pyenvの設定方法ついては以下の記事を参照してください。
次に、「withings-sync」のインストールに必要なライブラリをインストールします。
sudo apt-get install libxml2-dev libxslt1-dev
そして、以下のコマンドで「withings-sync」を指定したバージョンでインストールしました。これは、私の環境で動作を確認できたバージョンです。
pip3 install lxml==4.9.3 requests==2.31.0 withings-sync==4.2.5
Withingsの認証情報を取得する
インストールが完了したら、まずはWithingsの認証情報を取得する必要があります。以下のコマンドを実行してください。
-f
オプションでデータ取得を開始する日付を指定します。ここでは例として2019年1月25日を指定しています。-v
オプションは詳細な出力を有効にするものです。
withings-sync -f 2019-01-25 -v
このコマンドを実行すると、以下のようなメッセージが表示されるはずです。
Can't read config file config/withings_user.json
User interaction needed to get Authentification Code from Withings!
Open the following URL in your web browser and copy back the token. You will have *30 seconds* before the token expires. HURRY UP!
(This is one-time activity)
https://account.withings.com/oauth2_user/authorize2?response_type=code&client_id=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&state=OK&scope=user.metrics&redirect_uri=https://wieloryb.uk.to/withings/withings.html&
Token :
Token :
の前に表示されたURLをコピーして、Webブラウザで開いてください(URLは実行するたびに変わります)。Withingsへのログインを求められるので、普段お使いのアカウントでログイン処理を行います。

ログインが成功すると、Webページ上にToken(トークン)が表示されます。

このトークンをコピーして、先ほどのターミナルの Token :
の後に貼り付けて、Enterキーを押してください。これでWithingsの認証は完了です。認証情報は設定ファイルに保存され、次回以降はこの手順は不要になります。
Garmin Connectへのデータインポート
Withingsの認証が完了したら、いよいよデータをGarmin Connectにインポートする準備が整いました。以下のコマンドを実行してください。--garmin-username
と--garmin-password
には、あなたのGarmin Connectのアカウント名(メールアドレス)とパスワードを入力してください。-f
オプションには、再度データ取得を開始する日付を指定します。
withings-sync --garmin-username='あなたのガーミンのアカウント名' --garmin-password='あなたのガーミンのパスワード' -f 2019-01-25
上記のコマンドを実行すると、指定した日付以降のWithingsのデータがGarmin Connectにインポートされます。しばらく時間がかかる場合がありますので、気長に待ちましょう。
次回以降、前回の同期以降の新しいデータのみをインポートしたい場合は、-f
オプションを省略して以下のコマンドを実行します。
withings-sync --garmin-username='あなたのガーミンのアカウント名' --garmin-password='あなたのガーミンのパスワード'
自動化でさらに便利に
毎回手動でコマンドを実行するのは少し手間ですよね。そこで、cronというツールを使って、定期的に自動でデータ同期処理を実行するように設定してみましょう。
crontabに登録することで、指定した時間にコマンドを自動実行できます。以下の例では、毎日1時、9時、23時にデータ同期処理を実行するように設定しています。
まず、which withings-sync
を実行して、withings-sync
コマンドのフルパスを取得し、コピーしてください。
次に、ターミナルで以下のコマンドを実行して、crontabの設定ファイルを編集します。
crontab -e
エディタが開いたら、先頭に以下の行を追加してください。
SHELL=/bin/bash
source /home/your_username/.pyenv/bin/activate
source /home/your_username/.pyenv/versions/your_python_version/bin/activate
your_username
はあなたのユーザー名に、your_python_version
は使用しているPythonのバージョンに置き換えてください。
最後に、最終行に以下を追加してください。
0 1,9,23 * * * /path/to/your/withings-sync --garmin-username='あなたのガーミンのアカウント名' --garmin-password='あなたのガーミンのパスワード'
/path/to/your/withings-sync
の部分をコピーした withings-sync
コマンドのフルパスに置き換えてください。これで設定は完了です。指定した時間になると、自動的にWithingsのデータがGarmin Connectに同期されるようになります。
まとめ
いかがでしたでしょうか? 公式には連携できないWithingsの体重計データとGarmin Connectですが、「withings-sync」という有志の素晴らしいプログラムのおかげで、データを一元管理する道が開かれています。
もちろん、APIの仕様変更などによって、今後も予期せぬ問題が発生する可能性はあります。しかし、このプログラムが比較的頻繁にメンテナンスされていることを考えると、今後も安定した動作が期待できるかもしれません。
IoTデバイスを活用した健康管理は、ますます便利になっています。少しでもプログラミングに興味がある方は、ぜひこの機会に「withings-sync」を試して、よりスマートな健康管理を実現してみてはいかがでしょうか。
今回も最後までお読みいただきありがとうございました。
それではよいIoTライフを!