技術を磨くだいぱんまん

散歩とインターネットが大好きなシステムエンジニア。暮らし、おでかけ、テクノロジーについて書いています。

Raspberry PiとIFTTTのMaker Webhooksを使って家事カウンターを作ってみた

f:id:donchan922:20170706213503j:plain

2017/08/10更新
夫婦の1か月の家事回数をグラフ化した結果を載せました。

こんにちは、だいぱんまん(@donchan922)です。

先日妻から

私の方が家事してる!ご褒美ちょうだい!

と迫られたんですが、僕もそれなりに家事をしているつもりなんだけどなあと反論すると、

じゃあ家事をした回数を記録するようにしてよ!

とさらに勢いよく言われたので、夫婦のどちらがどれくらい家事をしているかをカウントする「家事カウンター」をRaspberry Piを使って作ってみました。我が家のRaspberry Pi大活躍!

完成形がこちら

今回は記録する家事の種類は以下の3つです。

  1. 掃除
  2. 洗濯
  3. 料理

家事をするたびに指定のスイッチを押すと、Googleスプレッドシートに家事の記録が追記される仕組みです。これで夫婦のどちらが家事をしているかわかります。

必要なもの

まずは以下のものを用意しましょう。

Raspberry Pi

前提として、Raspberry Piのセットアップが完了しているものとします。セットアップに必要な機器および手順は以下の記事でまとめています。

Raspberry Pi 3をディスプレイ、キーボード、マウスなしでセットアップする方法 - 技術を磨くだいぱんまん

家事カウンターの仕組み

f:id:donchan922:20170705230102p:plain
Raspberry Piからの通知(家事カウンター情報)をIFTTTのMaker Webhooksで受け、その情報をGoogleスプレッドシートに書き込みます。

IFTTTは「If This Then That(これをしたら、次にあれをする)」の略で、Webサービス同士を連携させることができるサービスです。例えば、以下のようなことが実現できます。

  • Gmailにメールが届いたら、LINEに転送する
  • Facebookのプロフィール写真を変えたら、Twitterのアイコンも変更する
  • Kindleの日替わりセール情報が更新されたらiPhoneに通知する

Maker Webhooksは、あるサービスからのリクエストを受けて、別サービスにリクエストを送信するサービスです。Webサービス間の中継役といったところでしょうか。今回の場合、Raspberry Piからの通知(家事カウンター情報)を受けて、その情報をGoogleスプレッドシートに送信します。

Raspberry PiからMaker Webhooksへの通知は、タクトスイッチの押下時に行うことにします。

実装手順

  1. IFTTTの設定を行う
  2. Raspberry Piの設定を行う
  3. 家事カウンターを実装する

IFTTTの設定を行う

まずはIFTTTのページに行き、アカウントを作成します。次に、Maker Webhooksをトリガーにして、Googleスプレッドシートに書き込む設定を行います。以下その手順です。


f:id:donchan922:20170705075716p:plain
アカウントが作成できれば、右上の「New Applet」を選択します。


f:id:donchan922:20170705075643p:plain
「+this」を選択します。


f:id:donchan922:20170705075646p:plain
検索ボックスに「Maker Webhook」を入力し、候補から「Maker Webhook」を選択します。


f:id:donchan922:20170705075652p:plain
「Receive a web request」を選択します。


f:id:donchan922:20170705075656p:plain
「Event Name」にイベント名を入力します。今回のトリガーはボタンを押す「button_pressed」としました。


f:id:donchan922:20170705075700p:plain
「+that」を選択します。


f:id:donchan922:20170705075703p:plain
「Google Drive」と入力し、候補から「Google Drive」を選択します。


f:id:donchan922:20170705075706p:plain
「Add row to spreadsheet」を選択します。


f:id:donchan922:20170705220519p:plain
「Spreadsheet name」はデフォルトのままにしました。お好きな名前を設定してください。


f:id:donchan922:20170705220523p:plain
「Formatted row」は以下の3つを指定しました。

  • Value1
  • Value2
  • Value3

パラメータは最大3つまで指定できるようです。今回の家事カウンターでは、各パラメータはそれぞれ以下として使います。

  • 実施日時
  • 実施者(妻 or 夫)
  • 家事種別(掃除 or 洗濯 or 料理)


f:id:donchan922:20170705075737p:plain
Maker Webhooksのロゴを選択します。


f:id:donchan922:20170705075723p:plain
「Documentation」を選択します。


f:id:donchan922:20170705075726p:plain
このページに、Maker Webhooksを利用するためのキー情報が記載されています。メモしておきましょう。あとMaker Webhooksの基本的な使い方や動作確認の方法が書かれています。

以下コマンドで動作確認を行います。{event}は先ほど設定したイベント名、{key}は自身のキー情報です。コマンドからでなくても画面の「Test it」を押せばOKです。

curl -X POST -H "Content-Type: application/json" -d '{"value1":"2017/07/05/20:00","value2":"妻","value3":"洗濯"}' https://maker.ifttt.com/trigger/{event}/with/key/{key}


f:id:donchan922:20170705220531p:plain
Googleスプレッドシートに書き込めていたらOKです。

Raspberry Piの設定を行う

f:id:donchan922:20170706224347p:plain
IFTTTの設定が完了すれば、次はRaspberry Pi側の設定を行います。具体的には、タクトスイッチを押したときにMaker Webhooksへ家事情報を通知する仕組みをつくります。

回路図は上記のとおりです。抵抗はRaspberry Pi内部のものを使うことにしました。

各タクトスイッチの役割は以下の通りです。(上から順番に)

  1. 夫が掃除した
  2. 夫が洗濯した
  3. 夫が料理した
  4. 妻が掃除した
  5. 妻が洗濯した
  6. 妻が料理した

プログラムはPython3で書きました。EVENTKEYの箇所はご自身の環境に合わせてください。ファイル名はhousework_counter.pyとします。

import RPi.GPIO as GPIO
from datetime import datetime
import requests
from time import sleep

# Maker Webhooksのイベント名
EVENT = "button_pressed"
# Maker Webhooksのkey
KEY = ""

def addRowToSpreadsheet(value2, value3):
    # 現在日時
    date = datetime.now().strftime("%Y/%m/%d %H:%M")
    # Maker WebhooksのPOSTリクエスト用URL
    url = "https://maker.ifttt.com/trigger/" + EVENT + "/with/key/" + KEY
    # Maker WebhooksのPOSTリクエスト用データ
    data = {
        "value1": date,
        "value2": value2,
        "value3": value3
    }
    requests.post(url=url, data=data)

GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(27, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(22, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(23, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(24, GPIO.IN, pull_up_down=GPIO.PUD_UP)

try:
    while True:
        if GPIO.input(18) == GPIO.LOW:
            addRowToSpreadsheet("妻", "料理")
        if GPIO.input(17) == GPIO.LOW:
            addRowToSpreadsheet("妻", "洗濯")
        if GPIO.input(27) == GPIO.LOW:
            addRowToSpreadsheet("妻", "掃除")
        if GPIO.input(22) == GPIO.LOW:
            addRowToSpreadsheet("夫", "料理")
        if GPIO.input(23) == GPIO.LOW:
            addRowToSpreadsheet("夫", "洗濯")
        if GPIO.input(24) == GPIO.LOW:
            addRowToSpreadsheet("夫", "掃除")
        sleep(0.01)

except KeyboardInterrupt:
    pass

GPIO.cleanup()

以下コマンドで実行します。スイッチが押されるたびにGoogleスプレッドシートに家事情報を書き込むようにしています。これで家事カウンターの完成!お疲れさまでした。

$ python housework_counter.py

夫婦の家事実施回数をグラフ化しました

f:id:donchan922:20170711182641p:plain
約4日間の夫婦の家事回数をグラフ化したものがこちらです。完全に妻の方が家事してます!ご褒美あげなくては……


f:id:donchan922:20170810210316p:plain
約1か月間の夫婦の家事実施回数をグラフ化したのがこちら。意外と僕(夫)頑張ってません?

まとめ

Googleスプレッドシートに書き込んだあとにそれをグラフ化させるような仕組みをつくるとさらに面白そうですね。

子供がいるご家庭なら、子供用のスイッチを設置して「月に何回家事をしたからお駄賃これだけね」みたいなやりとりもできるのかと。