ラズパイとBluetooth体重計で猫の体重を記録したい(問題編)

シェアする

さて、というわけでみんな大好きRaspberry Pi(手持ちのは2)を使って猫の体重を簡単に記録したいってのが事の発端です。ちなみに、この記事では結局体重計からの重量読み出しに成功してませんのでご注意ください。あくまで経緯のご報告となります。

アプローチとしてはラズパイに1400円ぐらいの圧力センサーを4つ繋いでそれを猫のトイレの下に敷く方法や手っ取り早くBluetooth体重計を使う方法などが考えられました。弊宅ではトイレを2個置いてるので、めんどくさくなさそうな後者を選択。(前者だとラズパイ2個とセンサー8つ必要なので…)

だいたい引っかかるのがこちらの記事
3000円の Bluetooth 対応体重計を Raspberry Pi を使って Google Fit に対応させてみた その1
おーなるほど、と思い早速体重計を購入。3,400円也。ラズパイは今買うなら3ですね。

 

要件としては以下の通り

  • 電源自動ON
  • 荷重がかかっても電源自動OFF
  • データ自動送信

電源自動ONはいいとして、なぜ荷重がかかってても電源が切れてほしいのかと言うと、体重計に猫のトイレを乗せておくわけですね、そこに猫が乗ったら電源ON、降りるかしばらくしたら電源OFFになってほしいわけです。

届いた体重計で実際にやってみると、電源は自動的に入るし、自動的に切れる。トイレが乗ってても電源は入るし切れる(荷重の変化を感じて電源が入り、数値が安定した後一定時間で切れる)仕様でした。完璧!(これがだめなら自分ちの体重計にして使うかメルカリで売ろうとしてた)

っていうか数年前に買ったTANITAの体重計は通信機能なんかもちろんなく、電源も手動だし1万円ぐらいしたし、家電の進化って恐ろしいですね…アプリ起動して体重計乗るだけでグラフ出来上がっちゃうんだから。

さて、記事の通りnode.jsやbluezなどをインストールして早速データを受信。型番は受信できました。サンプルのJSを実行した状態で体重計に乗るとデータが受信できて型番などが表示される。これは簡単じゃねーか!と先に進めていくのですが体重っぽいデータが全然通知されてこない!1日格闘した挙げ句この記事を発見。

体重計でコーヒー豆消費量の統計を出したい話(問題編)

デバイス名がHealth Scaleで一緒だから同系統の機械を使ってるものと思われる。しかし解決編がない。おそらく断念したのではないかと…

事象としては、一番最初の記事の体重計と違って、独自領域でのデータ通知ではなく、Bluetooth LEの仕様の一つであるBody Composition Serviceというものを使用している模様。ところが、通知を購読していっこうにデータが流れてくる様子がない。このへんはAndroidのBluetoothデバッガ

nRF Connect for Mobile – Google Play のアプリ

で確認。余談だけどこの体重計、すぐスリープモードに入ってしまうため検証が超大変。そんなこんなでBody Composition ServiceのUUIDである2a9cを見てても、やっぱりデータが更新されているフシがない。これはおそらくマルチユーザ機能があるからユーザIDを書き込まないとデータ送られてこないのか…とアタリをつけて仕様書を確認。

https://www.bluetooth.com/ja-jp/specifications/gatt
というわけでこっから仕様書をダウンロードして読み込んだところ、Body composition serviceはデータ量が多く、LEでは1回でデータ送らないよーって書いてある。マジカ!しかし送信させる方法がいまいちわからねぇ。(ノンエンジニアの限界)

というわけでここまでのまとめ

  • 体重計の機種にもよるけど、リアルタイムデータを垂れ流してくれない体重計もある。
  • 独自実装ではなくBT LEの仕様に沿ったデータ送信をしてくれてそう(てことは仕様を読み解けば体重も取得できるかも)。
  • 余談だけどTANITAの体重計と比べたら200gぐらいこっちが重く、体脂肪率は4%ぐらい多めに出た。
  • アプリが取得できてるんだからなんとかなるだろ

これ解決できるんだろうか…おそらくプロパティがwritableのどこかに指定値を連続的に書き込むとかでデータが送られてくるような気がするんだけど、コマンドラインのgatttoolで一個一個やって試すしかないのかなー。挫折する予感がします。せめて重量だけでも普通にnotifyで垂れ流してくれる仕様ならいいのに。

スポンサードリンク
 
シェアする