0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Fit8sから自動で体重を取得して体重を晒す vesync

Last updated at Posted at 2023-04-16

突然ですがダイエットしてますか?

私は暴飲暴食をしていたら体重が72キロになってしまいました
このままではやばい、そう思いましたがダイエットは三日坊主になってしまいます

体重計からデータが取れたらダイエットをDXできる?

エンジニアですので何をするにしても効率化や自動化を行ってしまいます
Amazonにて検索して上位に出てきたFit8sという体重計を使います
image.png

通信

スマホを経由して体重計がクラウドにデータを上げてくれるのが理想ですね
データを使う側ではAPIを叩くだけだといいのですが、5000円以下の体重計にはその様な機能はありません
Amazonの商品ページを読む限りBluetoothを使ってアプリと通信しているようです
ということはBluetoothが付いているRaspberry piから通信できそうですね

BLE

Bluetoothには2種類あります
Bluetooth ClassicとBLE (Bluetooth low energy)です
前者はイヤフォンなどで音楽をストリームするために使われることが多いようです
後者はIoT機器などで使わる事が多いようです、ボタン電池1個で1年間動かす実例もあるとか
例によって体重計もBLEでした

通信をキャプチャー

humble-explorerという神ツールを使ってBLEの通信をキャプチャーできます
https://github.com/koenvervloesem/humble-explorer

通信を解析する時の鉄則ですが、外から操作できる値を操作してdiffを取るにつきます
何度も体重計をON OFFしていたらdiffがある値を見つけました
どうやらBLEのアドバタイズビーコンに体重がブロードキャストで飛んでくるみたいです
特に認証とか暗号化とかはありません、体重なので重要ではないとの認識なのでしょうね

image.png

アドレス

アドレス開始 終了 用途
10 12 体重(有効桁2桁です)
15 15 安定(値が確定したら1になります)

体重は有効桁2桁で送られてきますが体重計は1桁です
体重計では四捨五入された値が表示されているようです

雑にデコードすると以下のコードになります

public record WeightData(float Weight, bool Stable);
public static WeightData Parse(IList<byte> bytes)
{
    var weightInt = (bytes[10] & 255) | ((bytes[11] & 255) << 8) | ((bytes[12] & 255) << 16);
    var stable = bytes[15] == 1;
    return new WeightData((float)weightInt / 1000, stable);
}

アプリ化

体重計と通信するコンソールアプリを作りました
Discordと通信したりDBに値をいれたりできます
https://github.com/aijkl/open-weight

Discordに晒す

常時、体重計の値を監視して体重が送られてくるとDiscordの名前を変える機能を実装しました
image.png

Scribanというテンプレートエンジンを使って、ニックネームを動的に生成できるようにしました
サーバーごとに元になる名前を変える事ができます
みかん@72キロのサーバーもあれば 花子@72キロというサーバーも用意できます

{
  "token": "",
  "guildUsers": [
    {
      "guildId": 836823009527332884,
      "userId": 536802665498411013,
      "scribanPattern": "みかん@{{event_data.data.weight}}キロ"
    }
  ],
  "intervalMs": 10000,
  "errorIntervalMs": 300000
}

DBに入れる

SQlite3に体重とタイムスタンプを記録してみました
データがたまれば解析できそうです

Matlabでグラフも描画してみる

データが1週間分しかないので変動が激しいですね
1か月後ぐらいでデータが十分に集まるはずなので記事を更新します
image.png

今度こそ痩せたい!!!!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?