ifttt
IoT
Thingspeak
withings

Nokia体重計(Withings) + IFTTT + ThingSpeakを連携してみた

1. 初めに

Withings + IFTTT + ThingSpeakで全自動体重グラフ化の記事を見て、自分も同じ環境が欲しくて、試してみました。

上記のサイトにある動作イメージがよくまとまっているので、そのまま表示します。
動作イメージ

基本的に、記事の内容通りに進めれば環境構築できるのですが、いくつか私が苦労したところがありましたので、その当たりを含めて書いてみます。

2. 準備

まず、下記の環境を整えます。

2.1. 体重計

以前、Withings製だった体重計は、Nokiaが買収したので、2018/05/01現在ではNokiaの製品となっています。
ただし、WebAPIのサーバはWithingsサーバのまま使用しているようです。
体重以外の項目も表示したくて、わざわざ1万円オーバーのBody+を買いましたが、体重のみをグラフ表示させたいなら、5000円以下のBodyを購入するのもありだと思います。
Nokiaのサイトだけでなく、国内の体重計メーカーのサイトもそうなのですが、ホームページに堂々と「IFTTT対応の体重計です!」って書いてないです。書けばいいのに。。。なので、上記のような記事の動作情報がないとなかなか1万円オーバーの体重計を買う勇気はありませんでした。大手家電量販店の店員に聞いても「IFTTTって何?」みたいなリアクションでしたし。。。本当に上記の記事があって助かりました。

Bluetoothは体重計とスマホが接続できればOK。
BluetoothとWiFiの接続方法はBody+の説明書に記述があるので省略します。
PDFの説明書はここ(ダウンロードリンク)にあります。
体重計の設定を行うときに、Nokia Health Mateというスマホアプリのインストールが必要です。
AndroidもiOSも両方対応しているようです。
私は、SO-02J(OSはAndroid8.0.0)を使用して動作確認しています。

2.2. IFTTT(イフト)

IFTTTは、Webサービス同士を繋ぐWebサービスです。
Googleアカウント、またはFacebookアカウントでSign Inします。
私は、Googleアカウントを使用しています。
ちなみに、「Sign In」ボタンと「Sign Up」ボタンがありますが、本稿でやりたいことはSign Inするだけで十分です。自分でがっつりIFTTT APIのサービスを作りたい人だけが「Sign In」後に「Sign Up」すればよいと思います。
※Sign Upするには、会社名や会社URL、従業員数等を入力する必要があります。(蛇足ですが、会社URL項目で、「-」が付いたURLは受け付けてくれないようです。「-」がURLについている会社はどうすんだろ・・・)

2.3. ThingSpeak

ThingSpeakでアカウントを作成する必要があります。
Sign Inするときに、1点注意が必要です。
ThingSpeakのサイトは、タブブラウザで複数のウィンドウを表示することはできない ようです。
Sign In後のウィンドウが別窓で開いているのに気づかずSign Inしようとすると、パスワード入力後のぐるぐるで固まってしまいます。

3. セットアップ

3.1. ThingSpeakの設定

  • My Channelsページを表示します。
    MyChannels.png
    ThingSpeakでSign In後の画面で、上方のCannelsからMy Channelsを選択します。
    ※この後の操作は、しばらくWithings + IFTTT + ThingSpeakで全自動体重グラフ化の記事のそのままである為、キャプチャは元ネタサイトを参考してください。

  • New Channelボタンを押下します。

  • Name、Description、Field1、Field2、Field3、Field4を入力します。
    フィールド名は後でも変更できるので、まずはこれで進めます。
    「Save Channel」ボタンを押下して設定内容をセーブします。
    これで、ThingSpeakの準備ができました。
    最後に、ThingSpeakのAPIにアクセスする為のAPI Keyを取得します。
    Test Channelページのタブ「API Keys」を選択します。
    このページのWrite API Keyをメモっておきます。

3.2 IFTTTの設定

Webサービス同士を結びつけるルールをIFTTTでは「アプレット(Applet)」と呼びます。以前はレシピと呼ばれていましたが、変更になったようです。

  • IFTTTサイトにSign Inし、右上のログイン名が表示されるプルダウンメニューから「New Applet」を表示します。
  • まず「this」を選択します。
  • 検索バーで「Withings」を入力し(全部入力しなくても候補が絞られる)

Withings.png
を選択します。
※IFTTTのトリガには、「Nokia Sleep」や「Nokia Home」といったトリガが別にありますが、体重計のトリガについては、Withingsのまま登録されています。

  • 次にトリガを選択します。

Withings2.png
これを選択します。
この設定で、Body+とIFTTTが連携できるようになります。

  • 次にthatを選択します。

検索バーで、「web」を入力すると、
webhooks.png
のみが表示されるので、これを選択します。
webhooks2.png
これ1つしか表示されませんが、これを選択します。

  • 次にThingSpeak APIをたたく為の設定です。

URL
https://api.thingspeak.com/update
を指定します。
※元ネタサイトではhttpになっていましたが、動作しなかった為、httpsに変更しました。

Method
「POST」を選択します。

Content Type
「application/x-www-form-urlencoded」を選択します。

Body
api_key=3.1.項で取得したThingSpeakのWrite API Key&field1={{WeightKg}}&field2={{LeanMassKg}}&field3={{FatMassKg}}&field4={{FatPercent}}
を入力します。
=の右辺は、「Add ingredient」ボタンを押下して選択するのがおすすめです。
Withingsから取得できるパラメータは、

AddIngredient.png

のように表示されます。
元ネタサイトから差分はないのですが、最初私は、パラメータを{{}}で囲むことを認識していなかった為、{{}}を入力せずに保存しようとして、エラーになってしまいました。
入力ミスをなくすためにも「Add ingredient」ボタンを活用しましょう。

ThingspeakのAPIに関する仕様は、
チャネルの作成
を参照してください。
これでIFTTTとThingSpeakを連携する準備ができました。

4. 動作確認

4.1 体重計に乗る→ThingSpeakサイトでグラフを確認

実際に体重計に乗って、二日間朝晩測定した結果です。
TestChannelResult.png

※後述するようなミスや試行錯誤の影響で、Field2とField4が逆になっていたり、Field1(体重)だけが測定期間が長いのは気にしないでください。

4.2 体重計操作時のミス

最初思うように動作しなかった為、Nokia Health Mateアプリで体重計のデバイス登録→解除→登録を繰り返していたら、体重計が想定外の表示になりました。
体重計_users.png
体重を測った後に表示されるのですが、最初、足と矢印が表示されているので(Wii Fitの測定みたいに)重心でも図っているのかなと思っていたのですが、どうやら違うようで、体重計に複数のユーザが登録されているので、どれか選択しろっていう選択画面のようです。重心を左や右に移動するとユーザが確定し、その時点で全データがサーバに送られるようです。逆に言えば、ユーザの選択せずにタイムアウトすると、体重のみがサーバに送られ、体脂肪率などの他のパラメータは送信しない、という仕様のようです。
この選択画面が毎回出るのがうざかった為、体重計をリセットしました。
リセット方法は、上記に書いた説明書に書いてあります。
私は、何度測定しても体重計しか取得できないので、そういえば、ネットの記事でNokiaに買収されてから悪いうわさが多いしバグかな、とか思っていましたが単純に自分の認識不足でした。Nokia様ごめんなさい。m(_ _"m)

4.3 デバッグ手段を用意1

自分の敗因は、体重計⇔IFTTT間の問題なのか、IFTTT⇔ThingSpeak間の問題なのか切り分けずに試行錯誤していたことです。
そこで、対策として、IFTTTアプレットにWithingsトリガとGmailを連携するアプレットを作成しました。
GmailのActionのデフォルト設定で、全パラメータが本文に表示されるよう設定してくれるので、ボタンをぽちぽちするだけでアプレット完成です。

4.4 デバッグ手段を用意2

IFTTTもスマホアプリ版が存在します。
これをインストールしておくと、thatアクションが発生したときに、Notificationに通知されます。

4.5 ThingView - ThingSpeak viewerアプリでも確認

ThingSpeakは「ThingView - ThingSpeak viewer」というスマホアプリが用意されています。
アプリを起動し、右下の丸十字ボタンを押下すると、Channel設定画面が表示されます。
ThingView.png
PublicのチェックをOFF、Channel IDとWrite API Keyを入力して、Searchボタンを押下します。
成功すると、チャネルが登録され、グラフが表示できるようになります。
Channel IDは、ThingSpeakの自分のChannelページの上の方に表示されています。

5. 気になる更新周期

タニタ製体重計の IFTTT トリガーを作ってLINE, HUE, Slackと連携してみたという記事によると、「Withings のデータ更新間隔は15分」との記述がありますが、Gmailアクションで時間間隔を測定したところ、1分~6分位でバラツキがありました。
バラツキがどこ(体重計 or Withingsサーバ or IFTTTサーバ)にあるのかは詳しく調べていませんが、グラフ化する分には十分かなと思っています。

6. 最後に

長々と説明してしまいましたが、いかがでしたでしょうか。
実際に試してみた感想ですが、ソースコードを1行も書かずにこんなことができるなんて、すごい時代になったと思いました。
IFTTTのWebhook部分は、応用がいろいろ効きそうで、自分で作成したサーバやスマホアプリと連携するとおもしろそうです。
今年は、IFTTT関連にどっぷりはまりそうです。