hitode909の日記

趣味はマリンスポーツですの日記です

GARMINのBody BatteryをSlack statusに設定する

GARMINのBody Batteryを計測できる時計が身の回りで流行っていて、Slackに「いまbody battery70です」とか書いて元気さをアピールしたり、Body Batteryめっちゃ下がってるので難しいことをする気力はないという表明をしたりしていた。
わざわざ近況を手で書かなくても、Slackのstatusとして見えるようになってると便利そうと思ったので自動化するスクリプトを書いてみることにした。

既存手法と実装方針

GARMINはfitbitとちがって個人向けのAPIを用意してくれていない。同僚が申請してみたところビジネスプランを書けって弾かれたと話していた。そのため人々はさまざまな苦労の末にデータを取り出している。

一日中スクショを撮りまくるわけにもいかないのでPuppeteerを使うことにして、Slackに投稿する部分はとりあえず手抜きでlegacy tokenを使うことにした(のでそのうち動かなくなる)。
これでもバージョン2のプロトタイプで、バージョン1として書いてみた版ではより治安が悪くて、ブラウザでログインして得たセッションcookieをハードコードしたRubyのスクリプトで、定期実行はBitBarのディレクトリに放り込むことで1分ごとに自動実行する、BitBar as a cronというアーキテクチャを構築していた。
24時間ほどすると動かなくなったので、ログインセッションが永久に続くわけではないことが分かったので、Puppeteerを使うように切り替えることにした。
github.com

ぽくつなさんの記事を思い出してgtsを使ってみたらTypeScriptをすぐに書き始められて便利だった。
blog.pokutuna.com

様子

スクリプトを実行するとこういうステータスになる。体力21 ストレス31 心拍数70 コンディションは😣ということがわかる。今週ずっと低調で寝てもあまりシャキッとしない。今日は家でチャングムの誓いを見てたら一日が終わった。

f:id:hitode909:20200307185054p:plain
体力21 ストレス31 心拍数70 コンディションは😣

ストレスの表示がいけてないと思っていて、🧠30と🧠80が並んでるときにどっちが何なのかわからない。正解は🧠30だとリラックスしていて🧠80だと緊張感が上がっている。
ステータスの絵文字は10段階で😫😖😣😞😉🙂😅😃😆🤩が出る。カスタマイズも可能で、絵文字のカスタマイズもできるようにしている。EMOJIS=':ant: :butterfly: :bee:'で調子悪いときは🐜、平常時は🦋、調子良いときは🐝が出る。
プロトタイプなのだからべつに絵文字変えられなくてもいいのだけど日によって気分を変えたいかと切り替えられるようにしてみた。

そんなにリアルタイムに送られるわけでもなく、まず時計で計測がおこなわれ、スマホに転送されたのちにスクリプトを実行されてようやく反映されるので、たとえば会議中にゲキ詰めされていて、その結果ストレスがぐんぐん上がる様子が観測される、みたいな精度は出なくて、今日の午後は体力ぼちぼちですね、くらいの頻度に落ち着くと思われる。精度や即時性を求める人は、時計の文字盤にカメラをくくりつけてライブ中継するのが良いと思う。

しばらく様子を見て便利だったらSlackとの認証をちゃんとしたOAuthにしたり、パスワード預かりたくはないのでウェブアプリにする線はなしで、Electronアプリにしたらよいかなと考えている。GARMIN Connectへのスクレイピングもやめたいので、ちゃんと起業してプライバシーポリシーやビジネスプランなど用意してちゃんと申請したい気もする。

GARMIN機器を持ってない人はとりあえず買ってみてください。昨年10月に買ってまだ気に入っていて会う人全員に勧めている。

blog.sushi.money