Raspberry PiとIFTTTのMaker Webhooksを使って家事カウンターを作ってみた
2017/08/10更新
夫婦の1か月の家事回数をグラフ化した結果を載せました。
こんにちは、だいぱんまん(@donchan922)です。
先日妻から
私の方が家事してる!ご褒美ちょうだい!
と迫られたんですが、僕もそれなりに家事をしているつもりなんだけどなあと反論すると、
じゃあ家事をした回数を記録するようにしてよ!
とさらに勢いよく言われたので、夫婦のどちらがどれくらい家事をしているかをカウントする「家事カウンター」をRaspberry Piを使って作ってみました。我が家のRaspberry Pi大活躍!
完成形がこちら
Raspberry PiとIFTTTのMaker Webhooksを使って家事カウンターを作りました。 pic.twitter.com/B2eATX7GFg
— donchan🐶 (@donchan922) 2017年7月6日
今回は記録する家事の種類は以下の3つです。
- 掃除
- 洗濯
- 料理
家事をするたびに指定のスイッチを押すと、Googleスプレッドシートに家事の記録が追記される仕組みです。これで夫婦のどちらが家事をしているかわかります。
必要なもの
まずは以下のものを用意しましょう。
Raspberry Pi
前提として、Raspberry Piのセットアップが完了しているものとします。セットアップに必要な機器および手順は以下の記事でまとめています。
ブレッドボード
ジャンパワイヤ(メス-オス)
ジャンパワイヤ(オス-オス)
タクトスイッチ
家事カウンターの仕組み
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への通知は、タクトスイッチの押下時に行うことにします。
実装手順
- IFTTTの設定を行う
- Raspberry Piの設定を行う
- 家事カウンターを実装する
IFTTTの設定を行う
まずはIFTTTのページに行き、アカウントを作成します。次に、Maker Webhooksをトリガーにして、Googleスプレッドシートに書き込む設定を行います。以下その手順です。
アカウントが作成できれば、右上の「New Applet」を選択します。
「+this」を選択します。
検索ボックスに「Maker Webhook」を入力し、候補から「Maker Webhook」を選択します。
「Receive a web request」を選択します。
「Event Name」にイベント名を入力します。今回のトリガーはボタンを押す「button_pressed」としました。
「+that」を選択します。
「Google Drive」と入力し、候補から「Google Drive」を選択します。
「Add row to spreadsheet」を選択します。
「Spreadsheet name」はデフォルトのままにしました。お好きな名前を設定してください。
「Formatted row」は以下の3つを指定しました。
- Value1
- Value2
- Value3
パラメータは最大3つまで指定できるようです。今回の家事カウンターでは、各パラメータはそれぞれ以下として使います。
- 実施日時
- 実施者(妻 or 夫)
- 家事種別(掃除 or 洗濯 or 料理)
Maker Webhooksのロゴを選択します。
「Documentation」を選択します。
このページに、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}
Googleスプレッドシートに書き込めていたらOKです。
Raspberry Piの設定を行う
IFTTTの設定が完了すれば、次はRaspberry Pi側の設定を行います。具体的には、タクトスイッチを押したときにMaker Webhooksへ家事情報を通知する仕組みをつくります。
回路図は上記のとおりです。抵抗はRaspberry Pi内部のものを使うことにしました。
各タクトスイッチの役割は以下の通りです。(上から順番に)
- 夫が掃除した
- 夫が洗濯した
- 夫が料理した
- 妻が掃除した
- 妻が洗濯した
- 妻が料理した
プログラムはPython3で書きました。EVENT
とKEY
の箇所はご自身の環境に合わせてください。ファイル名は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
夫婦の家事実施回数をグラフ化しました
約4日間の夫婦の家事回数をグラフ化したものがこちらです。完全に妻の方が家事してます!ご褒美あげなくては……
約1か月間の夫婦の家事実施回数をグラフ化したのがこちら。意外と僕(夫)頑張ってません?
まとめ
Googleスプレッドシートに書き込んだあとにそれをグラフ化させるような仕組みをつくるとさらに面白そうですね。
子供がいるご家庭なら、子供用のスイッチを設置して「月に何回家事をしたからお駄賃これだけね」みたいなやりとりもできるのかと。