Home » Featured, Home Automation, IPhone, Linux, Perl

Home Automation with Belkin Wemo, Twilio, and Siri

Submitted by on December 31, 2013 – 2:57 am 987 views One Comment

Ultimate Hack Mashup – Belkin Wemo + Twilio + Siri

 

belkin_twilio_siri

A quick note: For another home automation trick and those interested in finding out about the earlier Twillio callbox+TV popup/notification hack check out STEM (https://github.com/ericblue/STEM).  Certain models of Samsung TVs allow popups for incoming phone calls for Samsung phones, but this can be extended to support any situation through the API.

Last year around this time on an ambitious evening I had an idea to quickly mashup some APIs, and make a cool and useful home automation hack.  This is overdue, but a hack worth sharing, so I’ve uploaded to GitHub and have basic instructions so others can put this to good use.  This example uses the Belkin Wemo power switches, my Perl API (WebService::Belkin::WeMo) for controlling them, the Twilio cloud-based API for sending and processing text messages, and the built in features of voice control with Siri on the iPhone.  It sounds complicated, but with relatively little code you can automatically turn your lights on and off in your home by either sending a text message, or even using voice commands (ex: “Computer turn all lights on!”)

Overview Diagram

wemo_twilio_siri_hack

Belkin WeMo Perl API

Last year when I first got my Belkin WeMo switches I was disappointed to see there was no API out there yet.  And, given my goto language for quick ‘hacks’ is Perl I decided to reverse engineer how it works.  Luckily it’s based on UPNP (Universal Plug n’ Play) and didn’t take too much work to figure out how to search for switches and sensors, and send commands to toggle electrical outlets on and off.  The code has been available on GitHub for some time, and I just recently uploaded to CPAN to make distribution and inclusion easier.

Step by Step Instructions

[API and SMS server]

  1. Find a computer located on the same network as your Belkin Devices.  Ensure your firewall/router can open up port 9000 (default) and map to your computer.
  2. Check out the Perl Belkin Wemo API from CPAN (v1.0 as of this writing) for the latest stable version, or Github for the latest developments.
  3. Scan your local network to find all Belkin Wemo Switches and save into your /etc/belkin.db file (see examples/scan.pl under the Perl Wemo API dist)
  4. Create a simple test script to turn a switch on and off to make sure things are working OK
  5. Download the SMS server example at https://github.com/ericblue/Belkin-WeMo-Twilio-Server.  The commands, your cell number, and the names of your switches should be changed.
  6. You can launch the server (launch.sh) or in debug mode.  Going to http://your_internal_ip:9000/ should show a simple text welcome message.

[Twilio Setup]

  1. Go to http://twilio.com and setup an account (Note: this is NOT free, but the cost is minimal for sending/receiving calls and texts)
  2. Register a new number and define the messaging request url as ‘http://your_public_ip:9000/sms/ and POST.  Port 9000 is the default port, and should be mapped in your firewall from your public IP to internal IP of your SMS server.
  3. Send a text/SMS message to this computer ‘get devices’ and you should get a list of all Belkin Switches on your Network

[iPhone/Siri for Voice Control]

  1. See this article on setting up Siri for voice control - http://www.dummies.com/how-to/content/how-to-use-siri-for-texting.html
  2. Add your Twilio SMS server as a contact.  I named mine ‘Computer’ (think Star Trek :), but you can name it whatever you want
  3. You’ll need to add a nickname or relationship/label as ‘Computer’ so when you hold down the button for Siri you can say ‘text Computer <say command here>’

Example commands:

my $valid_commands = {
            ’1′ => ‘test’,
            ’2′ => ‘get devices’,
            ’3′ => ‘get commands’,
            ’4′ => ‘turn all lights on’,
            ’5′ => ‘turn all lights off’,
            ’6′ => ‘turn upstairs lights on’,
            ’7′ => ‘turn upstairs lights off’,
            ’8′ => ‘turn downstairs lights on’,
            ’9′ => ‘turn downstairs lights off’
        };

If you look at the sms_server.pl file you can see it’s a VERY simple and crude processor for some basic commands and translates words such as ‘upstairs’ and ‘downstairs’ to specific devices.  This was created very quickly, so to customize you could modify to suit your needs or add something more sophisticated like a rule processor or XML-based config for mapping commands and devices.

That’s it!  I hope you enjoyed this relatively simple hack and have fun!

 

Post to Twitter Post to Delicious

One Comment »

Leave a comment!

Add your comment below, or trackback from your own site. You can also subscribe to these comments via RSS.

Be nice. Keep it clean. Stay on topic. No spam.

You can use these tags:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

This is a Gravatar-enabled weblog. To get your own globally-recognized-avatar, please register at Gravatar.