2017年11月20日 更新
どうも、クラゲです。 今回はIFTTT(イフト)を使って、簡単にメール送信したいと思います。 ラズパイに接続されたボタンを押すとメールが即座に送信されます。
ボタンではなく何かのセンサーにしたり、センシングしたデータを定期的にメール送信するなど、様々な応用も可能です。
IFTTT(イフト)とは、スマホのアプリやインターネット上のサービスを連携させて、自動化するサービスです。 IFTTT は If This Then Thatのそれぞれの頭文字を意味します。例えば、「もし、明日の天気が、雨ならば、ツイッターでつぶやく」などのサービスをプログラムを書くことなく簡単に自動化できます。 このサービスとラズパイを組み合わせることにより、ボタン1発でメール送信するサービスが簡単に作成できます。 では、早速 IFTTT で Sign up しましょう!
以下のURLへアクセスします https://ifttt.com/login
中央下の小さな"Sign up"ボタンをクリック
メールアドレスとパスワードを入力して"Sign up"をクリックします
こんな感じで右上にメールアドレスが表示されると思います。 これで登録完了です。簡単!
RaspberryPiからいきなりIFTTTの"Mail"送信アクションには繋がりません。アクションを起こすにはトリガーが必要です つまり、RaspberryPi送信 -> IFTTTトリガー -> IFTTTアクション の順です。 なお、RaspberryPiと接続できるIFTTTのトリガーは"Webhooks"というサービスのみです。ちなみに、2017年5月以前までは"Maker Channel"というサービス名でした。 詳細には RaspberryPI送信 -> IFTTTにてWebhooks受信 -> IFTTTからMail送信 という流れになります。
トリガーのkeyを入手
Serchボタンを押して、検索バーで "webhook" と入力します。 そうすると"Webhooks"というサービスが現れると思います。 "Webhooks"をクリックします
Connectをクリックします
Documentationをクリックすると新たなタブが開きます
このときに表示されている太字がKeyです。後でPythonのプログラムで使います。
トリガーのEvent Nameを設定
先ほどのタブに戻って、この度は "My Applets" をクリックします。
右上の "New Applet" をクリックします
"this"をクリックします
検索バーに"web"と入力すると"Webhooks"が現れます これをクリック
"Receive a web request"をクリック
Event Nameは自由に決めて構いません。 入力したら"Create trigger"ボタンをクリック 今回イベント名は"email"にしました。後でPythonプログラムで使います。
アクションを設定
今度は"that"をクリックします
検索バーで "email" と入力します。 そうするとEmailというサービスが現れると思います Emailをクリックします
"Send me an email"をクリックします
ここでは題名やメール本文のフォーマットを編集することができます。 後でも変更可能なので、とりあえずそのまま"Create action"をクリック
"Finish"をクリックして完成です。 これで、Webhooksがemailという名前のイベントを受け取ったときに、自分のメールアドレスにメールを送信するというサービスが出来ました。その際、変数value1に文字列を割り当てることにより、その文字列がメール本文に書かれます。
IFTTTのWebhooksにイベントを通知するPythonプログラムを書きます。 Requestsモジュールを使ってとても簡単に記述できます。 例えば "mail.py"というファイル名でnanoエディタを使って新規作成します。
nano mail.py
keyの * の部分はWebhooksサービスで得たkeyに書き換えてください。。 なお、Event Nameを "email" 以外にしている場合は、eventに代入している文字列も変更してください。 メール本文に書く文章として string に文字列を代入しています。ここは各自お好みで変えてください。
#!/usr/bin/python
# coding:utf-8
import requests
#IFTTT設定と送信する文字列
event = "email"
key = "*******************************************"
string = "RaspberryPiからこんにちは!"
try:
print("Try...")
#IFTTT経由でメール送信
payload = {"value1" : string }
url = "https://maker.ifttt.com/trigger/" + event +"/with/key/" + key
requests.post(url, json = payload)
print("Done!")
except:
print("Error")
nanoを保存(Ctrl + O, Enter)して終了(Ctrl + X)してpythonを実行します。
python mail.py
数秒くらいでメールが届くと思います。
メールの題名とか本文のフォーマットを変えたい人はこのページの最後の項を参照してください。
先ほどのままだとコマンド打ち込みが必要ですが、物理的なボタンを押したらメール送信されるようにします。 簡単な回路とGPIO制御が必要となりますが、詳細解説はこちらの記事を参照してください。 ここでは作り方だけ紹介します。
部品
回路
左下から3番目のGroundと6番目のピン(18pin)にジャンパー線を繋ぎます。 タクトスイッチは向きがあるので注意してください。
プログラム
Pythonで作成しています。 先ほどと同じ手順でkey変更など行ってください。
#!/usr/bin/python
# coding:utf-8
import time
import requests
#IFTTT設定と送信する文字列
event = "email"
key = "*******************************************"
string = "ボタン押されました!!"
#GPIOの初期設定
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
#GPIO18pin:入力モード、pull up設定
GPIO.setup(18,GPIO.IN,pull_up_down=GPIO.PUD_UP)
while True:
print("スイッチを押すとメール送信します")
#立下りエッジを検出するまで待つ
GPIO.wait_for_edge(18, GPIO.FALLING)
try:
print("Try...")
#IFTTT経由でメール送信
payload = {"value1" : string }
url = "https://maker.ifttt.com/trigger/" + event +"/with/key/" + key
requests.post(url, json = payload)
print("Done!")
except:
print("Error")
#チャタリング対策
time.sleep(0.3)
これで実行すると、ボタンを押す度にメール送信されるようになりました。 無限ループなので、終了するときは Ctrl + Z で中断してください。
現状のままだと、メールの題名が以下の文章で
The event named "email" occurred on the Maker Webhooks service
メール本文が以下のような内容になっています。
What: email When: November 20, 2017 at 09:42PM Extra Data: ボタン押されました!!, , ,
これはIFTTTのWebページで簡単に変更できます。
"My Applet"をクリックします
作成したサービスをクリック
右上の歯車アイコンをっクリック
ここの内容を変更することでフォーマットを変更できます。
シンプルに変更してみました
結果はこんな感じ。すっきりしました! PythonのPayLoad変数にJSON形式で変数を増やせば、題名にも変数を使うことが可能です。 色々試してみてください!
以上、RaspberryPiで物理ボタン押したらメール送信でした!