Last week we interviewed Andy Stanford-Clark on his smart home integration with Twitter and now we have a document published by computer science student Justin Wickett giving his open source script to do the same. Read on for the code that gets your home communicating with you via SMS text message to your mobile plus all the other advantages Twitter offers.
Finally, this code relies on the Summize.com search engine, which parses and indexes every public message sent to Twitter. I could not poll Twitter.com because of rate limiting issues. My code polls Summize’s REST API (which is simply a Web URL) every second checking to see if there has been an update. This polling method is not efficient and taxes Summize’s servers. I recommend subscribing to and parsing Twitter’s Pub Sub Jabber feed (see http://groups.google.com/group/twitter-development-talk/web/jabber-pubsub). Below is my quick and dirty Python code that can be easily ported over to other languages:
#Copyright 2008 Justin Wickett
#This program is free software: you can redistribute it and/or modify
#it under the terms of the GNU General Public License as published by
#the Free Software Foundation, either version 3 of the License, or
#(at your option) any later version.
#This program is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
#GNU General Public License for more details.
#You should have received a copy of the GNU General Public License
#along with this program. If not, see <http://www.gnu.org/licenses/>.
import feedparser, os, time #The ‘feedparser’ library can be installed from http://www.feedparser.org/
#TODO: Replace the username as well as the INSTEON address with the appropriate values
#TODO: Also make sure that the path is correctly set in the system command to icmd’s path on your local machine
lastTweet = 0 #Used to keep track of the last Tweet received to make Summize queries less expensive
username = “xxxxxxxx” #Twitter username who is sending the commands to control the electrical network
insteonAddress = “xx.xx.xx” #INSTEON address of the device you want to turn on and off
feedUrl = “http://summize.com/search.atom?q=from%3A”+username+”&since_id=”+str(lastTweet) #Polling Summize
feed = feedparser.parse(feedUrl)
if len(feed[‘entries’]) > 0 and feed[‘entries’].link.split(‘/’)[-1] > lastTweet:
if cmp(feed[‘entries’][‘title’], “Bedroom lights on”) == 0: #Check for the “ON” command
os.system(“icmd “+insteonAddress+” ON 255”) #Turn the lights controlled by my switch on
if cmp(feed[‘entries’][‘title’], “Bedroom lights off”) == 0: #Check for the “OFF” command
os.system(“icmd “+insteonAddress+” OFF 255”) #Turn the lights controlled by my switch off
lastTweet = feed[‘entries’].link.split(‘/’)[-1] #Save the last Tweet so we aren’t stepping over ourselves
time.sleep(1) #Sleep one second, and execute code again
Justin Wickett’s Site http://people.duke.edu/~jyw2/ : Follow Automated Home on Twitter