えいのうにっき

a-knowの日記です

Pixela への活動記録をスマホとNFCタグで自動化する(iOS / Android)

Pixela は、さまざまな数値情報を記録・可視化できる無料のWebサービスです。私が開発・運営しています。

pixe.la

今回、記事タイトルの内容を自分でもやってみて、比較的カンタンに実現できたので紹介します。これを使えば、何かの回数とか時間とかを Pixela に記録するのが、より手軽にできるようになると思います。

この記事では一例として、「自分の自動車の運転時間の計測」を題材に、iOS / Android 両OSの場合の実現方法をご紹介します。ちなみに iPhone は、「iPhone XR」「iPhone SE(第2世代)」「XS 以降の iPhone」で、ここで紹介する方法が利用可能です。Android スマートフォンであれば、現代のスマートフォンであればだいたいどれでも利用可能なのではないかと思います(NFCに対応していれば大丈夫だと思います)。

【OS共通】事前準備

NFCタグを購入する

NFCタグとは、こういう↓やつです。

f:id:a-know:20200719095406j:plainf:id:a-know:20200719095448j:plain

今回僕はAmazonで購入しました。

Pixela にユーザー登録などをするためのツールをPCにインストールする

ユーザー登録などをするための方法はいくつかあるのですが、今回は以下のツールを使います(これも私が作ったものです)。WindowsとMac、両方に対応しています。以下のページを見ながら、お使いのPCにツールをインストールしてください。

blog.a-know.me

Pixela にユーザー登録・グラフを作成しておく

この作業は上記のツールを使って実施します。今回は「自動車の運転時間の計測」なので、ユーザーIDを a-know-driving 、グラフIDを driving-time としたいと思います。

まずはユーザー登録。以下のようなコマンドを、Windowsの場合は「コマンドプロンプト」から、Macの場合は「ターミナル」から、実行します。

pi users create --username a-know-driving --token thisissecret --agree-terms-of-service yes --not-minor yes

thisissecret はいわゆるパスワード的なものなので、今後も何度となく利用します。適当に、かつ、あなたにしかわからない文字列に置き換えてください。

上記のコマンドを実行した結果、 {"message":"Success.","isSuccess":true} といった表示がされていれば成功です。以降、パスワードをいちいち入力しなくても済むように、以下の作業を実施しておきましょう(環境変数へのパスワードの設定)。

  • Windows の場合
    • 以下のコマンドを実行します。
    • set PIXELA_USER_TOKEN=thisissecret
  • Mac の場合
    • 以下のコマンドを実行します。
    • export PIXELA_USER_TOKEN=thisissecret

続いてグラフの作成。これもコマンドを実行します。

pi graphs create -u a-know-driving -g driving-time -n "自動車の運転時間" -i "分" -t int -c shibafu -z "Asia/Tokyo"

これに対しても {"message":"Success.","isSuccess":true} といった表示がされていればOKです。これで事前準備は完了です。

NFCタグで自動化・iPhone編

iPhone の場合の説明を見る iPhone の場合、「ショートカット」という Apple 公式のアプリをインストールする必要があります。無料です。

ショートカット

ショートカット

  • Apple
  • 仕事効率化
  • 無料
apps.apple.com

インストールできたら、アプリのアイコンをタップして、以降のスクリーンショットに従って設定をおこなっていきます。

f:id:a-know:20200719153051j:plain
1. 画面下部の「オートメーション」をタップします

f:id:a-know:20200719153148j:plain
2. 「個人用オートメーション」をタップします

f:id:a-know:20200719153243j:plain
3. 画面をスクロールして、「NFC」をタップします

f:id:a-know:20200719153349j:plain
4. 「スキャン」をタップします

f:id:a-know:20200719153430j:plain
5. このような画面になるので、ここでNFCタグに iPhone をかざします

たしかここで、NFCタグの名前を設定する必要があったように思います。スクリーンショットを撮り忘れたためうろ覚えです。

f:id:a-know:20200719153546j:plain
6. 「アクションを追加」のところをタップします

f:id:a-know:20200719153742j:plain
7. アクションの種類のうち「Web」を選び、その後表示されるアイテムのなかから「URL」を探して、タップします

するとURLを入力できるようになるので、https://pixe.la/v1/users/a-know-driving/graphs/driving-time/stopwatch と入力します。a-know-driving のところはあなたのユーザーIDを、 driving-time のところはあなたのグラフIDを、それぞれ指定してください。

入力を終えると 6. の画面に戻るので、もう一度「アクションを追加」をタップします。

f:id:a-know:20200719154302j:plain

「App およびアクションを検索」の入力窓のところに 内容を取得 と入力すると検索ができます。検索結果のなかから「URLの内容を取得」というアクションを探してタップすると、以下のような表示になると思います。

f:id:a-know:20200719154552j:plain
8. 「表示を増やす」のところをタップすると、画面のような表示になります。赤枠の部分には、以下のように情報を選択・入力します

  • 方法
    • POST を選択します
  • ヘッダ
    • 新規ヘッダを追加 をタップしたあとに、
    • キー
      • X-USER-TOKEN と入力します
    • テキスト
      • あなたのパスワード(例: thisissecret )を入力します

f:id:a-know:20200719154940j:plain
9. 入力できたら、下の方に少し見えている「+」をタップします

f:id:a-know:20200719155101j:plain
10. 「App およびアクションを検索」の入力窓のところに今度は「振動」と入力して検索し、出てきた「デバイスを振動させる」をタップします

f:id:a-know:20200719155221j:plain
11. こんなかんじになります。画像では「result に追加」「result を表示」などを追加していますが、これは追加しない方が便利でした。

f:id:a-know:20200719160356j:plain
12. こんなかんじになっていれば設定完了です。ちなみに「実行の前に尋ねる」は、用途にもよりますが今回のケースだとオフにしておいたほうが使いやすいです

iPhone の場合は以上で準備完了です。

NFCタグで自動化・Android編

Androidスマートフォンの場合の説明を見る Androidの場合、「さまざまな操作を自動化するためのアプリ」と「NFCタグを読み込むアプリ」の2種類をインストールする必要があります。その選択肢はいくつかありそうなのですが、今回私は、前者のためのアプリとして Tasker を、後者のためのアプリとして Trigger を、それぞれ利用しました。Tasker については有料アプリなのでご注意ください。無料でもいいものがあるかもしれません。

Tasker - Google Play のアプリ

Trigger - Google Play のアプリ

Tasker側でタスクを作成する

Taskerを起動し、以下のスクリーンショットのように画面をタップしていきます。

f:id:a-know:20200719115653p:plain
1. 「タスク」に切り替えて、右下の「+」をタップします

f:id:a-know:20200719115911p:plain
2. これから作るタスクに適当に名前を付けます

f:id:a-know:20200719120140p:plain
3. すると、このタスクのアクションを設定できる画面になるので、右下の「+」をタップします

f:id:a-know:20200719120353p:plain
4. 設定するアクションのカテゴリを選べるので、「ネット」をタップします

f:id:a-know:20200719120543p:plain
5. 「ネット」カテゴリ内のアクションから、「HTTPリクエスト」を選んでタップします(その下にあるものは非推奨になっているそうです)

ここまでの手順を踏むと、以下のような画面が表示されていると思います。

f:id:a-know:20200719120757p:plain
「HTTPリクエスト」アクションの設定画面

この画面で最低限、設定が必要なのは 方式 URL ヘッダー の3つだけです。以下のように入力します。

  • 方式
    • POST を選択します。
  • URL
    • https://pixe.la/v1/users/a-know-driving/graphs/driving-time/stopwatch と入力します。
    • a-know-driving のところはあなたのユーザーIDを、 driving-time のところはあなたのグラフIDを、それぞれ指定してください。
  • ヘッダー
    • X-USER-TOKEN:thisissecret と入力します。
    • thisissecret はあなたのパスワードに置き換えてください。

以上の入力ができたら、画面左上の をタップすると、設定が保存され前の画面に戻ります。ちょっとわかりにくい画面です。

ここまでの操作が無事できたら、以下のような画面になっていると思います。

f:id:a-know:20200719120924p:plain

ひとつのHTTPリクエストアクションを持つタスクの作成が完了しました。

Tasker でプロファイルを作成する

続いて、上記で作成したタスクを設定したプロファイルを作成します。これも Tasker での操作になります。以下のスクリーンショットのように操作を進めてください。

f:id:a-know:20200719121225p:plain
1. 「プロファイル」をタップしたあと、右下の「+」をタップします

f:id:a-know:20200719121725p:plain
2. 「アプリ」をタップします

f:id:a-know:20200719121931p:plain
3. 列挙されているアプリの中から「Trigger」をタップし、画面左上の「←」をタップします

f:id:a-know:20200719122129p:plain
4. すると作成済みタスクの一覧が表示されるので、さきほど作成したタスクを選んでタップします

これでプロファイルの作成も完了です。それと、Tasker から Pixela にアクセスすることになるので、Tasker の設定で以下の「外部アクセスを許可する」をオンにしておいてください。

f:id:a-know:20200719122322p:plain

Tasker側の作業は以上です。続いて Trigger 側での作業に移ります。

Trigger でタスクを作成する

これまでと同じように、以下のスクリーンショットのように操作を進めてください。

f:id:a-know:20200719122444p:plain
1. Trigger アプリを起動して、「自分のタスクを作成」をタップします

f:id:a-know:20200719122604p:plain
2. トリガーを選択するダイアログで「NFC」をタップします

f:id:a-know:20200719122749p:plain
3. 「次」をタップします

f:id:a-know:20200719122852p:plain
4. タスクが発動する条件として、NFCタグに接触したときに加えていくつかの条件を指定できるようです。特になければ「完了」をタップします

f:id:a-know:20200719123120p:plain
5. 「次」をタップします

f:id:a-know:20200719144403p:plain
6. すると実行するタスクの種類を選べるので、ここで「Tasker」をタップして「Taskerのタスク」のチェックをオンにしてから、「次」をタップします

f:id:a-know:20200719144603p:plain
7. するとこのような画面になるので、虫眼鏡アイコンをタップします

f:id:a-know:20200719144707p:plain
8. さきほど Tasker 側で作成したタスクがリストアップされるので、タスク名をタップします

f:id:a-know:20200719144835p:plain
9. タスク名が表示されていることを確認してから、「タスクに追加」をタップします

f:id:a-know:20200719145020p:plain
10. 上の方に表示されているのは、このタスクのアクションです。さらにアクションを追加することもできますが、ここでは先に進みます。「名前」にこのタスクの名前を入力してから、右下の「次」をタップします

f:id:a-know:20200719145216p:plain
11. 「完了」をタップします

ここまで無事に進められると、以下のような画面表示になります。

f:id:a-know:20200719145312p:plain

Android スマートフォンがNFCタグの読み取りを待機している状態です。ここで、あらかじめ購入しておいたNFCタグを一枚切り取り、スマートフォンで読み取らせてください。また、スマートフォン本体の設定で以下のスクリーンショットのようにNFCが利用可能である必要があります。

f:id:a-know:20200719145433p:plain

だいたいのケースでは背面部分が読み取り可能な部分になっていると思いますが、スマートフォンのどのあたりで読み込めるのかは機種次第のため、最初のうちは聴診器を当てるようにその位置を探ることになると思います(笑)。ちなみに僕のスマートフォンの Pixel3 は、読み込み可能な位置は指紋認証ボタンの上あたりで、しかも微妙に判定がシビアでした。最初のうちは慣れが必要だと思います。それと、画面ロックを解除した状態でないと読み込めませんでした。これはもしかしたらなんらかの設定でロック解除が不要になるのかもしれません。

無事タグを読み取れると、おそらくスマートフォンが一瞬震え、以下のような画面になります。

f:id:a-know:20200719145523p:plain

これですべての設定は完了です。

ちなみに、「サイレントモードへのアクセス許可」など、いくつかの権限を Tasker や Trigger が要求してくるかもしれません。このあたりはご理解の上、お試しください。

【OS共通】NFCタグの読み取りによる Pixela への記録を試してみる

それでは、設定を終えたスマートフォンで計測を試してみましょう。今回は自動車の運転時間の記録ということで、NFCタグを車のダッシュボードに貼り付けてみました。

f:id:a-know:20200719145602j:plain

車に乗り込んだ際にタッチ。これで計測が開始されます。運転を終え、車を降りる際にもタッチ。ここで計測が終了され、その時間が記録されます。

タッチのタイミングでスマートフォン本体が一瞬震えるので、ちゃんと読み込めたことはわかるはず。

計測結果をみてみましょう。https://pixe.la/v1/users/a-know-driving/graphs/driving-time.html をブラウザで開きます。

f:id:a-know:20200719145619p:plain

ちゃんと記録されていますね!

応用

いくつかある Pixela への数値の記録方法のうち、今回は stopwatch という機能(API)を利用しました。

docs.pixe.la

これは、1回目のタッチと2回目のタッチのあいだの時間を計算して記録してくれるものです。

これ以外にも、「タッチするたびに +1 or -1 or +0.01 or -0.01 する」みたいなことも可能です。

docs.pixe.la

docs.pixe.la

また、Pixela に約100円/月の支援をすると、以下のような詳細な内訳(何回計測したか・いつからいつまでの時間が計測されたのか)も確認することができるようになります。

f:id:a-know:20200719145707p:plain

Pixela の支援等については、以下のページを参照してください。

Patreon を使って Pixela を支援する/限定機能を使う · a-know/Pixela Wiki · GitHub

現在赤字運営状態なので、支援をしていただけると Pixela のサービス維持の観点で大変助かります。

ぜひお試しください

NFCタグをスマホで読み込み、Pixelaへの情報登録を自動化する事例を紹介しました。

今回は「自動車の運転時間」という例でしたが、例えば「スポーツジムの自分のロッカーに貼っておいて......」とか、「職場の自席にタグを設置して......」、など、アイデア次第で使い方は広がると思っています。ぜひお試しください!