Automatic Thermostat Control Based on Location and Weather

The Pittsburgh Perl Workshop will be held at the Carnegie Mellon University on October 9-10, 2010. The PPW is a gathering of Perl programmers from around the world (and near Pittsburgh) to learn more and discuss the future of Perl.

At this year’s PPW, I will be giving a talk called, “Connecting the Internet of Things with Perl“ (visit pghpw.org for schedule info). I will also explain how to create an Internet of Things application using off-the-shelf Perl modules and web control technology by ioBridge.

As you may or may not know, Perl is a really powerful programming language that enables everything from fast prototyping of web applications to large-scale software platforms. What makes the language unique is the library of modules available to you. If you get a great new idea for a web app, you can get started quickly and find modules that others have written. In some cases, it’s literally copy-and-paste.

A big movement for the past few years is this concept of The Internet of Things. More things will be on the Internet than people in the next few years, so my talk is to highlight why Perl is still relevant after 20 years and needs to be apart of this emerging technology. Internet of Things applications involve connecting sensors and controllers to the web. Perl is perfect for parsing lots of data, pushing data into databases, and connecting services together, known as “mashups”.

My Internet of Things project, written in Perl, allows your current location and home weather conditions to control your home heating and cooling system.

Location Aware Home Automation using Google Latitude API and ioBridge API

I call it,  ”Location Aware Home Automation”. You don’t have to do anything to control your HVAC/Thermostat, it all happens based on where you are. If you are home, the thermostat regulates the inside temperature as normal. When you leave, systems turn off or enter power saving modes. When you get near your home, the heating/cooling system kicks back on so you have a comfortable temperature by the time you get back home. In order to pull off all of this passive and automatic functionality, I have mashed up several APIs from Google Latitude, WeatherBug, and ioBridge.

Using the API for Google Latitude, I track the location of my Android mobile phone. When I get near my home, I check the weather using Google Weather API, WeatherBug API, and my home temperature (via ioBridge) to see if I need to to use the air conditioner, the heater, or neither. If I do need to control the HVAC, I send the control commands using the ioBridge API that routes the commands to the IO-204 controller that’s hooked up to my thermostat.

This application is really just a beginning. Right after I got everything working, I started having a flood of ideas. I can see some real power here.

The ‘How To’ Portion of the Show

Google Latitude

You have to enable Google Latitude on your mobile phone and get your Badge ID. This ID represents your position in the world, your latitude and longitude. Visit the Google Latitude API site for more information.

Install the latest Geo::Google::Latitude Perl module from CPAN.org – this module completely abstracts the access to the Google Latitude API for you. All you have to do us pass your ID and the module returns the date, time, last known latitude and longitude (the values are in decimal degrees).

use Geo::Google::Latitude;
my $gl=Geo::Google::Latitude->new;
my $id="7832225593622256926";
my $badge=$gl->get($id);
my ($lat2, $lon2) = $badge->point->latlon;

Calculating how far you are away  from home

You have to figure out how far you are from home, you do this by doing some math. Oh wait, there’s a Perl module for that. Install Geo::Distance and all you have to do is tell it what latitude and longitude to compare and it spits out the distance.

use Geo::Distance;
my $geo = new Geo::Distance;
### Home Location
my $lon1 = "-79.76408";
my $lat1 = "39.980342";
### Calculated Distance
my $distance = $geo->distance( 'mile', $lon1, $lat1 =>; $lon2, $lat2 ); # Use 'meter' to calculate distance in meters

Getting the Weather

You can use a number of weather APIs to get weather data for your home location. All you need to know is where you live. The easiest to implement is Google Weather (Weather::Google), but the WeatherBug API has a lot more information you can use for other Internet of Things things you may do.

 use Weather::Google;
my $gw = new Weather::Google(15401); # Zipcode
my $current_outside = $gw->current->{temp_f}; #Use temp_c for Celsius

Connect to ioBridge

All you have to do to connect with ioBridge is to send command via the ioBridge Widget API. First you create the control widgets for your heating and cooling system. For mine, I can use relays. Others may need serial strings, which you can send as well. Once you have the widgets created, locate there widget ID’s and send them to the API.

use LWP::Simple;
my $Air_Conditioner_widgetID = "Gb2Q1FUKPmzZ"; ### Replace with your widget ID's
my $Heater_widgetID = "9c3WEGHKemnzJ";
my $Inside_Temp_widgetID = "D32SDghy98iOu";
my $ioBridgeAPI = "";
$ioBridgeAPI = "http://www.iobridge.com/widgets/static/id=" . $Inside_Temp_widgetID . "&value=1&format=text";
my $current_inside = get($ioBridgeAPI);
### Test if the heater or the air condition should be turned on
if ($current_outside >= 78 && $current_inside >= 72) {
$ioBridgeAPI = "http://www.iobridge.com/widgets/static/id=" . $Air_Conditioner_widgetID . "&value=1&format=text";
get($ioBridgeAPI);
}
elsif ($current_outside $ioBridgeAPI = "http://www.iobridge.com/widgets/static/id=" . $Heater_widgetID . "&value=1&format=text";
get("$ioBridgeAPI");
}

Putting it all together

Once you have the entire built all you have to do is call the app periodically using CRON Linux or Task Scheduler on Windows. Here is a TXT file of the Perl application with all of the parts tied together, probably will be easier to read and understand.

The hardware side uses the ioBridge IO-204 connected to the control lines of a thermostat or an HVAC control box. The lines switch at 12 volts, so I use relays trigger them. Other thermostats that I researched use serial lines which the IO-204 can tap into using RS-232.

It may seem like a lot of work, but just think about what is happening. Feeds from Google Latitude and WeatherBug are being processed and passed to your home network via the Internet. All of this is happening without your direct interaction – your things are working for you. I hope that you can see that is a start of some pretty amazing applications of technologies that will advance over time. A lot has changed in the past year, I can’t image what comes next.

If you get around to building a project like this, please drop me a line. I love this stuff.

Toaster + Twitter = Internet of Things

Really?

You might be hearing this new buzz-phrase, “Internet of Things” quite a bit lately. You might be wondering what it’s all about. Let me try to explain.

A “thing” could be a lot of things, but it’s not people (and definitely not places). That leaves everything else. Now according to the Internet, there are 6,767,805,208 people on Earth and of those 6,767,805,208 people 1,802,330,457 have used the Internet. That’s (only) 26%. So, that means one out of four people do not know what Numa Numa is all about. This also means there are a lot more things than people. A thing could be a camera, mobile device, sensors, your air conditioner, a river, and even a toaster.

The trick to the “Internet of Things” or the “Web of Things” will be providing connectivity to all of those things. Once we do, we will be able to gain access to a lot of information. The next challenge will be making that data useful in our everyday lives. We are just at the start of this, that’s why we are just starting to hear about it (with some help with IBM commercials).

I have been fascinated by this concept since I first joined the Internet, back where GeoCities and L’Hotel Chat were the hip spots. For me the interest started off by controlling things over the web. Then, I started wondering what are my things doing. What temperature is it at my house? What’s going on with my freezer? Is it time to refill my humidor? How much power is my computer using?

Over a year and half ago, I placed my toaster on Twitter (@mytoaster). Since then, my toaster starting using other social networks and discovered online dating all by itself. That is a weird thought, “What if things get smarter and smarter?” Things will eventually be able to socialize with other things. My (sentient) toaster might even find another compatible toaster using eHarmony.

I am not saying that this is the best example of the Internet of Things, but what I am saying is that it’s a start. I believe in a future of connected things so strongly that I joined a start up company that enabled my toaster way back when I was more interesting than my things.

For a good primer on the Internet of Things, check the recent article on Silicon.com called, “Cheat Sheet: The internet of things”. My toaster even gets a tongue-in-cheek reference. Actually there are lots of great sites that are covering the Internet of Things and making things happen in this emerging industry – Singularity HubReadWriteWeb, Wired.com to name a few.

My guess is that you will hear more and more about The Internet of Things until it hits Smart Grid proportions, then you will hear about the next big thing – the smart internet of things grid perhaps.

She Thinks My Toaster is Hot

One day you put your toaster on a social networking site. And then on another day you find out that your toaster has more friends than you.

Twitter Toaster System

This little story sounds made up. Well, it’s not.

My toaster has had a Twitter page since December 2008, tweeting the status of my toast making habits for all of the world to follow. On occasion people even write to the toaster to ask what it’s toasting. Oddly enough, it can tell you.

I get asked, “Why have your toaster on the Internet?” Well, it’s a starting point for future projects and part sarcasm. I have been working on gizmos, web control, and power / resource management projects with my friend Jason Winters of ioBridge for over a decade. One day I had the idea to overlay appliance usage data onto a graph of my power consumption for my house. My theory is to use this appliance meta data to reduce the power I use everyday by pointing directly to the power hogs. It’s a start to my internet of things at my house. If you want to get start your own Skynet, visit Wired’s Wiki on making things talk. I use the IO-204 control and monitor module from ioBridge.com.

OK, mostly it’s sarcasm.

My Toaster has been recently written about on Wired.com, ReadWriteWeb, PC World, Tiscali, De Morgen, XYCity China, etc. If you want to hear about it straight from the bread slot, you can get live updates from my toaster by following @MyToaster on Twitter.

I am now jealous of my toaster which has made for awkward moments when I want some crunchy Wonder Bread.

Social Networking for My Toaster

My Toaster Tweets

That statement sounds odd. Well, let me explain. My friends would describe me as the kind of person that has a lot of time on their hands. They would be right. That time is never put to productive use, but over Thanksgiving I got the gumption to start a new project. Sometimes, I start little servo, robotic, web-based projects for my own gratification, but I get fed up with all of the time I invest just so I can impress my 3 friends that also have nothing do to over the holidays.

My friend Jason Winters has been working on an module that simplifies the connecting of projects to the internet. He sent me one of his ioBridge modules to beta test and my mind started spinning. My goal this Thanksgiving was to think of a crazy project that would be the most senseless thing someone has ever heard of before.

Again, My Toaster Tweets…

Twitter is a social networking site that allows you to tell the world your current status – kind of like a microscopic blog that gets to the point. You can write, “Hans is going to lunch” or “Hans is tired”, etc. It’s fun to follow people and see what they can do creatively with just a few characters of updates.

I use my toaster when I am home and I thought that the world may want to know when I’m toasting.

Twitter Screen Shot

How do you make a toaster twitter?

I grabbed my old bagel / toast toaster and glued a switch to the outside, so when the slider gets pressed down it triggers the switch and when it pops up, the switch opens (couldn’t be any more binary than that).

Toasting Position

The ioBridge module has a digital input that I can hook the switch up to and monitor that state of toasting or not. Using a terminal board, a pull up resistor (1k), and some alligator clips, I hooked up the resistor from the digital input to the +5v source from the module, and clipped my clips on the resistor and the ground. A few pictures are worth more than my description.

Toaster Hookup Close Up

Module Hookup

Here is the whole system hooked together:

Twitter Toaster System

The Web Stuff

Using the ioBridge website, I created an event widget that monitors the input state of that particular digital input. And when the input is “high”, the site sends an HTTP POST to the ThingSpeak API to send a message to Twitter. ThingSpeak calls this “ThingTweet” and is one of many services that you can use to build Internet of Things projects.

MyToaster IoT Gadget

Follow My Toaster on Twitter at twitter.com/mytoaster. I think that I proved that I have too much time on my hands.