The Washington Post IoT Infographic

The Washington Post just published a series of infographics depicting the history of appliances and the Internet.

MyToaster Washington Post IoT

They listed that MyToaster from 2008 was a significant event that shaped Connected Appliance and the Consumer Internet of Things Products.

2008 – @mytoaster joins Twitter. It’s a toaster that Tweets. Hans Scharler rigged up his toaster to his Twitter so the appliance Tweets one of two things: Toasting or Done Toasting.

Send Your Windows Server’s Disk Free Space to ThingSpeak Using PowerShell

I manage a lot of servers. One of the things that I am always curious about is how much disk space is left on my servers. I know there are a lot of ways to track this, but almost always it seems the service that I am using changes on me or breaks over time.

My super simple solution for tracking server disk space is to use Windows PowerShell and ThingSpeak. I went to the trouble to release the code to GitHub, so that you can try this out for yourself. This can be used on any Windows Server as long as you have the ability to execute PowerShell scripts. ThingSpeak gives you a place to store data from anything. In this case, I am sending my disk free space to ThingSpeak once per day by scheduling a Windows Task.

Check out the open source code on GitHub!

ThingSpeak: Building My Own Twitter (for Things)

Over the past several months I have been working on software to allow “things” to form social networks and send status updates via the Internet. At first glance this may sound very impractical. Hopefully, in a few years this will make more sense as better applications come out. Remember how ridiculous my toaster sounded three years ago? I gave that thing a voice and since has been on TV and more people are interested in it than my Twitnot not saying ter status updates. More proof? At CES 2011 there were at least 10 appliances that could send Twitter status updates. I am not saying that I created them, but I am that they didn’t know about My  Toaster and it’s 600+ followers on Twitter. With this project, I wanted to take it a few steps further and build something from the ground up that’s focused on collecting enormous amounts of data from everyday objects, allowing devices to interact with each other, and building applications to present some meaning. The ThingSpeak project is finally ready to go and open to anyone that wants to start building applications.

My Problem

One problem with the Internet of Things is the concept of “the killer app” – the app that defines a new industry. The internet connected refrigerator is our poster child. Recently, Ryan Rusnak connected a mini fridge to the iPhone via ioBridge, added a motor controlled beer selector, and strapped on an air cannon to fire beers to his couch from 25 feet away – now that’s a killer app. So, my problem was trying to find an application that highlights key features of ThingSpeak and why it’s different.

My App

What I come up with is the idea of “my_house”. “my_house” is a collection of “rooms” that all hold computers, appliances, and sensors aka things. I recently installed some light sensors in “my_room” that push light levels to the ThingSpeak API. I did this to remind me when to turn my lights on so I don’t work in the dark when I get plugged in. And an interesting side benefit was that now I can detect whether or not someone is in the room based on the light level. I will admit this could have been done other ways, but sometimes you solve problems with what you have lying around. “my_house” already keeps track of my location using Google Latitude to control my thermostat.

Eureka moment…

Now I can tell when my mom goes into my room when I am out on the town, most likely Sheetz!!!

Below is a screenshot of the demo app and how I aggregate the data collected by my light sensors. Here are a few things I want to point out:

  • “my_house” is sending the status updates via a collection of networked sensors
  • The status updates were generated by the light sensor device itself
  • The timestamps were recorded by the ThingSpeak API
  • If you click the chart icon you get what the actual light level was
  • The app works in real-time and you can check it out here

"Twitter of Things" ThingSpeak Demo App

The Technical Details

The light sensor uses a Netduino Plus that connects to my home network over Ethernet. This device uses Microsoft .NET Micro Framework and I wrote an application that interfaces with the ThingSpeak API. I also wrote a tutorial over at the ThingSpeak community site on how to use the Netduino Plus for those that want to get started with it fast.

The front-end application is written using only HTML, CSS, and jQuery. I have the fully documented source code attached and you can also see the app live in your web browser.

Light Sensor Netduino Plus

Project Files:

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.

New Gig, Less Hotels

A few months ago, I decided to join ioBridge full-time. I will be leading the software development for a whole bunch of commercial products that license our technology. ioBridge will announce a few major developments in the coming weeks that made this transition possible. I am excited for the new challenges and look forward to working with a start-up company.

My first project with ioBridge was building a remote sensor network web interface on top of the Google Maps API. The sensor network allows for the real-time monitoring of tide levels. The project got written up on MIT’s Technology Review blog and the ioBridge Projects blog. You can demo the tide monitoring application at www.TideAlerts.com.

Change is not always easy. I had a great job and got to see all of the United States minus Alaska, Hawaii, and Idaho (yes, Idaho, I have flown all over you but never landed on you…). I got to design, maintain, pen test, and provide training for some of the largest networks in the US for utilities and telecommunications providers over a 10 year period. Yes, you can blame me the next time your call drops.

This also means I saw a lot of hotels and airports. I probably stayed at a Hampton Inn from 30 different states. I can’t tell you how many times I woke up to a USA Today being crammed under my door. For whatever reason on my first trip to a DSL testing company in Manchester, New Hampshire, I saved the room key. I know you are supposed to return them, but maybe in the excitement of it all, I kept it. This tradition continued with my next project in Lincoln, Nebraska and the next and the next. When I got home I would shove the room key in a box. I just dumped it out and could not believe it…Here’s a photo so you can see what I am saying…

IMG_0059

I don’t advocate stealing room keys, but this pile is  a quick snap shot of 1000’s of trips and projects and experiences. With the new gig, I will travel less and that might be good. I am looking forward to it and might even join a bowling league where I can actually make the games. I will keep you updated on the progress. It’s time to start-up (.com).

TouchShield Slide Two-way Communications

Over last summer, I got the GamePack from Liquidware which includes a touch screen display, joystick, microcontroller, and battery pack. With this kit you can make a GameBoy from scratch. With some blood, sweat, and tears, I was able to re-create some games like Asteroids and Tetris.

The touch screen is called the TouchShield Slide which is a 320×240 OLED and resistive touch screen. The screen also has a microcontroller that is Arduino compatible and expands your program space. Since the screen is really a microcontroller in disguise, it can be used for many types of projects. Overall I am very happy with the screen, but I realized I didn’t know how to use it very well. I set out to learn and develop a protocol / reusable library that allows the screen to talk to a microcontroller and vice-verse. So I wanted to take a moment and explain what I learned – maybe you can get going faster than I did.

The Goal

My goal is to be able to display data on the screen that has been received from another device. The data requested would be initiated by a touch on the screen. The protocol has to be consistent and reliable, while being flexible enough to be the basis for future projects.

Touch -> TouchShield Slide -> Arduino -> TouchShield Slide

Programming Tips and Tricks

I found quite a few libraries and resources on liquidware.com.  I also discovered quite a few important things through my trial and error. My biggest frustration was with programming and figuring out the IDE. Here are some tips.

  • To program the screen use the Antipasto Arduino / Aardvark IDE
  • Program the screen and Arduino separately – make sure the IDE has the proper device selected
  • To put the screen in program mode, press the switch beside the power connector – it’s in program mode when the LED on the backside is red

TouchShield Slide Serial

Serial data sent and received by the TouchShield Slide uses the hardware serial lines.

To setup the serial connection, place this line in your setup code block:

Serial.begin(9600);

Now you can read and write to and from the serial buffer. To read in a whole string, use a byte array to store bytes from the serial buffer when serial data is available. To write to the serial buffer, simply use serial print.

char charIn = 0;
byte i = 0;
char stringIn[32] = “”;

while(Serial.available()) {
charIn = Serial.read();
stringIn[i] = charIn;
i += 1;
}

Serial.print(“A”);

Arduino Serial

On the Arduino side, you have to use some form of Software Serial that sends and receives data on Pins 2/3. I have found that the Adafruit SoftSerial Library, “AFSoftSerial.h”, works the best. It seems to be reliable and produce consistent results when talking to the TouchShield Slide. Reading and writing from a software  serial buffer is about the same as a hardware one with this library.

To use software serial, follow these steps:

  • Include the “AFSoftSerial.h” library in your Arduino code header space
  • Define the RX and TX pins
  • Instantiate the software serial
  • Initiate the software serial line
#include AFSoftSerial.h

#define RX_PIN 3
#define TX_PIN 2

AFSoftSerial touchSerial = AFSoftSerial(RX_PIN, TX_PIN);

void setup() {
touchSerial.begin(9600);
}

Demo Project

I took a moment to put together all of the things that I learned into a quick demo project. This project displays a random number on the screen. The random number is being generated by an Arduino, sent via serial, and requested by a touch of the TouchShield Slide.

Random Number from Arduino Displayed after Detecting a Touch…

Visit Liquidware’s App Store to download the source code and library for this demo project.