EBC Exercise 32 ifttt

ifttt (If This Then That) is a slick web service that lets you attach event triggers to actions. See the ifttt website for examples of what it can do. Here I'll show you how to use the Maker channel to trigger events from the Bone and have the Bone receive events.

Sending an SMS message from the Bone
There are three steps needed to send SMS messages, set up ifttt, edit a script on the Bone, and then run the script.

Set up ifttt

 * 1) Create an account on ifttt and
 * 2) Go to https://ifttt.com/my_applets
 * 3) then click New Applet
 * 4) next click the big blue this
 * 5) type "web" in the search box and click "Webhooks"
 * 6) click the blue "Receive a web request"
 * 7) enter "sms" for the Event Name and click "Create Trigger"
 * 8) click on the blue "that"
 * 9) enter "sms" and click on "ClickSend SMS"
 * 10) click on the "Send SMS"
 * 11) Enter a To phone, but leave the From field blank.
 * 12) enter a message to send.  You can click on the Add ingredient to insert things into the message.
 * 13) click "Continue"
 * 14) edit the Recipe Title if you want.  (I remove "update phone number")
 * 15) click "Finish"

Set up the Bone
The file send.py on github is a simple example that triggers ifttt events. bone$  source setup.sh
 * 1) Go to https://ifttt.com/services/maker_webhooks/settings channel and copy your key. It's the string following URL https://maker.ifttt.com/use/
 * 2) edit send.py and make sure the event matches the event name you entered ("sms").
 * 3) save your file and make sure it's executable.
 * 4) edit setup.sh put your key in it.
 * 5) source the setup.sh.

Run the script
Once everything is set up all you do is run: bone$ ./send.py  Congratulations! You've fired the sms event

You are allowed to pass three parameters (value1, value2 and value3), which the script does. You can set your recipe to send these values in the sms message.

Triggering Events with curl
You can also trigger the event with curl. bone$ curl -X POST -H "Content-Type: application/json" -d '{"value1":"My","value2":"Test 2","value3":"BeagleBone"}' https://maker.ifttt.com/trigger/sms/with/key/EG33hBxy7L7W3DvKnNoCi

It's easy to see that sms is the event to trigger. The string following /key/ is the key and the three values follow the -d. The curl command must be all one line.

Getting triggers events from ifttt
ifttt can be set up to access a web page when a trigger occurs. Here will run a web server on the Bone and have ifttt access it when you get an email.

The web server
The file receive.js on github is a simple web server. If the page /on is accessed, the LED on P9_14 is turned on. If /off is accessed the LED is turned off.

Setting up your host computer
These instructions assume your Bone is attached to your host over the USB so the Bone isn't visible to the world. You can make it accessible by using port forwarding. host$ cd exercises/setup host$ ifconfig Note which interface your host is using. It may be eth0 or wlan0, or something like it. host$ ./portForward.sh eth0 9090 Now when you access your host on port 9090, it will forward the request to the Bone.

This may be messy if you are running a virtual machine. If so, you need to have the virtual machine's host (Windows I assume) port forward to the virtual machine and then have the VM forward to the bone.

Setting up ifttt

 * 1) Browse to https://ifttt.com/myrecipes/personal and click "New Applet"
 * 2) click the blue "if"
 * 3) search and click Gmail
 * 4) click "Any new email in inbox
 * 5) click "that"
 * 6) search and click "Webhooks"
 * 7) click "Make a web request"
 * 8) Fill in the URL for your Host computer, port 9090.  Mine is 137.112.41.36:9090/on
 * 9) select Method: GET, Content Type: text/plain and put in the Body where you want
 * 10) click "Create Action"
 * 11) clean up the Recipe Title and click "Create Recipe"
 * 12) Go to https://ifttt.com/gmail
 * 13) Click on Settings
 * 14) Click on Edit connection
 * 15) Select the gmail account to use
 * 16) Click Allow
 * 17) Wait a bit

Start the server and test
bone$ ./receive.js Listening on 9090 Send an email to your gmail account and the bone should respond with path: /on {}