「もうすぐ帰る」をゆるく伝える仕掛けの作り方

「もうすぐ帰る」をゆるく伝える仕掛けの作り方
Page content

もうすぐ帰る→ライト点灯の自動化

2019年3月の終わり頃、Slackで「今から帰る」を伝える夫婦 自動化してストレスが減った話というウェブ記事がTwitterで話題になっていた。生活の中で複数のクラウドサービスやスマートスピーカーを組み合わせて家族のコミュニケーションに活用している話で、そりゃあ良いツールがあるのだったら、自動化が適したところは自動化して負担減らしていくほうが楽しいですよね。

我が家では、私が勤務先から帰路に就いて自宅のそばに近づいたら、リビングにある小型スポットライトが自動で点灯する仕掛けを作っていて、2018年夏頃から運用している。しかし上記の記事をきっかけに、相方から「どういう仕掛けでやってるか知らない」という声が聞こえてきたので、我が家の仕掛けについてここに記しておこう。

帰宅を伝えるインターフェースとしては、Slack・LINEの通知やGoogle Homeでの発声 (例: google-home-notifier) も技術的には可能であるが、何通りか試した結果、生活を刺激しない程度にゆるくて、物理空間に残る通知が可能な、ライトを点灯させるインターフェースがちょうど良いかもなと思っている。

ちなみに、「ライトの点灯に気づいたら夕食の味噌汁など温め始めるようにしているよ」とのこと。実は単に仕掛けを作ってみたかっただけの、私の想像を超える有効活用をしてもらっていて、ありがたいです……。

仕掛けに必要な物と各動作

「平日夜に私の帰宅が近づいたら、自動で自宅リビングのライトが点灯する仕掛け」は、次のような物を用いて実現している。

仕掛けは、次の各動作の連携から成る。

  1. アプリTriggerで、次のタスクを設定しておく: 「月~金の18:00~22:00の間に、スマホが自宅を中心とする数百メートル圏内に入ったら、Taskerのタスクsendmail_iftttを実行」
  2. Taskerのタスクsendmail_iftttは、Termux環境のsendmail_ifttt.shを実行する
  3. bashスクリプトであるsendmail_ifttt.shは、Muttを使ってメールをtrigger@applet.ifttt.com宛に送信する
  4. IFTTTのAppletで、「特定のタグのメールがIFTTTに届いたらスマートプラグの電源をONする」を設定しておく
  5. 自宅リビングに置いたスポットライトの電源制御をスマートプラグで行う

このような動作を連携させておけば、スマホを持つ私が所定の時間帯に自宅に接近することがトリガーになってTriggerが動き出し、次の表の流れでランプ点灯までの仕掛けが自動的に発動するわけだ。

仕掛けの在り処連携の流れ
[1] AndroidスマホTrigger → Tasker → bash → Mutt → [2]
[2] クラウド→ Gmail → IFTTT → Smart Life → [3]
[3] 自宅→ スマートプラグ → ライト点灯

仕掛けの作り方

Step-1: スマートプラグのIFTTT連携を設定

自宅の好みのところに取り付けたライトの、電源の制御をスマートプラグで行うように物理配線をする。次に、ウェブサービス同士を連携させるIFTTTからスマートプラグが制御できるように設定を行う。

私の場合は、IFTTT対応のスマートプラグのアプリがSmart Life - Smart Livingというものであったので、次のページを参考に、スマートプラグとIFTTTを連携させた。

Step-2: Termuxをスマホにインストール

Android上でLinuxの端末環境を実現するアプリ、Termuxをスマホにインストールする。Termux上のスクリプトをTaskerから実行するためには、オプションの「Termux:Task」が別途必要なのでこれもインストールする。

Step-3: Termux環境にMuttをインストールして設定

人間の操作 (インタラクション) 無しに自動的にメールを送信するツールとして、Termux環境のMuttを用いる。これをTermux画面でpkg install muttしてインストールし、~/.muttrcにGmailの送受信設定を書く。

Gmailの送受信設定として、私の場合は、Consolify your Gmail with MUTTを参考に次のような.muttrcを用意した。「YOUR-APPLICATION-PASSWORD」には、Googleアカウントの「アプリ パスワード」で作成できる、今回のMutt用のパスワードを記述する。

set from = 'YOUR-ADDRESS@gmail.com'
set realname = 'YOUR-REAL-NAME'
set imap_user = 'YOUR-ADDRESS@gmail.com'
set imap_pass = 'YOUR-APPLICATION-PASSWORD'

# REMOTE GMAIL FOLDERS
set folder = 'imaps://imap.gmail.com:993'
set spoolfile = '+INBOX'
set postponed ='+[Google Mail]/Drafts'
set trash = '+[Google Mail]/Trash'
#set any_label = '+[Google Mail]/any_label'

# LOCAL FOLDERS FOR CACHED HEADERS AND CERTIFICATES
set header_cache =~/.mutt/cache/headers
set message_cachedir =~/.mutt/cache/bodies
set certificate_file =~/.mutt/certificates

# SMTP SETTINGS
set smtp_url = 'smtp://YOUR-ADDRESS@smtp.gmail.com:587/'
set smtp_pass = 'YOUR-APPLICATION-PASSWORD' # use the same password as for IMAP

# SECURING
set move = no #Stop asking to move read messages to mbox!
set imap_keepalive = 900

さらに、TaskerからTermux上のスクリプトを起動するためには、スクリプトをディレクトリ~/.termux/tasker/に保存しておく必要がある (symlinkされたものでも構わない)。このディレクトリ内に、たとえばsendmail_ifttt.shという名前で次のbashスクリプトを保存して実行属性を付加する。

#!/bin/bash

MUTT_SUBJECT=$1
MUTT_TO='trigger@applet.ifttt.com'
MUTT_PATH='/data/data/com.termux/files/usr/bin/mutt'

${MUTT_PATH} -s "#${MUTT_SUBJECT}" "${MUTT_TO}" < /dev/null

Step-4: メールをトリガーにするIFTTTアプレットを作成

IFTTTにて、「タグ#area_homeのメールがIFTTTに届いたらスマートプラグの電源をONする」Appletを次の手順で作成する。ちなみにIFTTTでは、受信メールのSubjectの冒頭に「#」があれば、以降のSubject内容がメールのタグとして認識される。

  1. https://ifttt.com/create を開く
  2. 「+this」をクリック
  3. Serviceとして「Email」を選択
  4. Triggerとして「Send IFTTT an email tagged」を選択
  5. Tagとして「area_home」を入力
  6. 「+that」をクリック
  7. Serviceとして「Smart Life」を選択
  8. Actionとして「Turn on」を選択
  9. 「Which device/group?」で操作したいスマートプラグを選択
  10. 「Create action」を押す

Step-5: メール送信でのライト点灯をテスト

Termux環境から次のコマンドを実行すると、Subjectが「#area_home」であるメールがIFTTT宛に送信されるはず。本Stepまでの諸々の設定が問題なく行えていれば、およそ十秒以内の反応速度で、自宅のライトが点灯状態に切り替わる。

~/.termux/tasker/sendmail_ifttt.sh area_home

Step-6: Trigger,Taskerをスマホにインストールして設定

ある条件を満たすときに特定の動作をさせるためのアプリ、TriggerTaskerをAndroidスマホにインストールする。

この2つのアプリは、あるきっかけでタスクを動作させる点は同じだが、Taskerでは変数や条件分岐を用いて細かいプログラミングを行うこともできる。私の場合は、Taskerを各種タスクの保管庫のような扱いにして、そのタスクをTriggerなど他のアプリから実行するような使い分けをしている。

Taskerにsendmail_ifttt.shを呼び出すタスクを設定

Taskerに、上記のテストと同様の、Termuxにて~/.termux/tasker/sendmail_ifttt.sh area_homeを実行するタスクを作成する (コマンド実行の引数が「area_home」になる)。タスクの名前をここでは仮に「sendmail_ifttt (area_home)」としておく。

作成方法の概要は、次のページのUsageを参照のこと。

Triggerに“帰宅”のトリガー条件を設定

Triggerにて、自身の帰宅時の状況に該当する、例えば「月~金の18:00~22:00の間に、スマホが自宅を中心とする数百メートル圏内に入ったら」というような、位置情報 (Geofence) とお好みの曜日・時間帯等をAND条件で組み合わせたタスクを作成し、そのアクションとして、上記で作成したTaskerのタスク「sendmail_ifttt (area_home)」が実行されるように設定する。

Step-7: 本番環境でテスト

実際にスマホを持って自宅圏内へ入ってみて、ライトを点灯させることができるかを試してみる。本番環境でのみうまく行かない場合は、“帰宅”のトリガー条件の見直しが必要になると思われる。

ここだけの話

文字ばかりの説明で長かったですが、本記事がみなさまの生活の役に立つようであれば、嬉しいです。

さて、上記のStep-6のTriggerにて、トリガー条件を「平日夕方に勤務先を離れたら」と設定することも、もちろん可能です。しかし律儀にこうすると、帰宅途中の気ままな寄り道がやりにくくなりそうなので私は採用しておりません。あしからずご了承ください!