May 182010
 

I have been into home automation and home entertainment for several years. When I was having my current house built, I had a lot of pre-wire placed in the walls for security keypads, thermostats, cameras, speakers, and video. And I also placed empty conduit in my walls in a few strategic places just in case I hadn’t thought of everything when I built the house (I didn’t, because I have already needed the conduit. Several times.) Here, I thought I would discuss my Home Automation (HA) setup.

First, I have the ultimate in home security, the Elk M1G. It is fantastic because it allows ethernet connectivity for monitoring by Elk specific programs or third-party applications, such as PowerHome. The end result is, if I open a door that is monitored by my security system, my home automation software, PowerHome, can detect that and react as I so designate. For instance, if I open my front door, the Elk tells PowerHome that the front door is open. PowerHome can check to see if it is dark outside, and if it is, it can turn my porch light on automatically. Then after I close the door, it will turn the lights off after four minutes. Want a text message if your security system alarm goes off? The Elk can handle this quite easily. Throw PowerHome on top of that and I could also have all the lights in the house start flashing. Starting to get the idea?

I have mentioned PowerHome already, so let me tell you about it. PowerHome is a very customizable and programmable Home Automation program. The best way to use it is to keep it running 24/7 on an HA PC. HA PCs are nothing special (but it is probably a good idea to find one that draws as little electricity as possible). I also use my HA PC as a Home Theater (HT) PC. PowerHome can easily interface with my security system, the Elk M1G, my lighting control system, Insteon, and other human interfaces such as infrared remote controls, email, and text messages. Because of the excellent integration between the Elk and PowerHome, I can easily write PowerHome programs to monitor my security system and react to changes. Similar to the example above, I have also written a PowerHome program that monitors my motion detectors in my house. If no motion is detected for 45 minutes and the system is not armed, PowerHome sends my work email and cell phones text messages asking if I forgot to set the burglar alarm. I can also monitor my garage door, turn on my garage lights automatically when I open the door, turn on lights at sunset and turn them back off at sunrise, and many other handy convenient features.

So, how do I turn on my lights? I use a lighting control system called Insteon. It allows me to link lights to switches in nearly infinite configurations. For instance, if I wanted my bathroom light switch to also turn on my garage light, I could do that. I don’t know why I would, but I could. I can also set up lighting scenes, such as movie watching and entertainment. Insteon devices primarily communicate with each other over the powerlines themselves, so they are very easy to set up. And the beauty of PowerHome and Insteon… they can talk to each other. PowerHome does this by the use of a USB Insteon module that plugs into a wall outlet. So, if I do turn on my bathroom light, PowerHome can also know about it and also open my garage door, or tun my stereo off. Again, I don’t know why, but I could. And PowerHome can also tell lights to turn on and off as well, such as at sunset/sunrise or upon a door opening.

Since my security system, lighting, and PowerHome are all so tightly integrated, I can also use a web browser from anywhere in the world, or my cell phone, and turn lights on and off, arm and disarm the system, and open and close the garage door. Not only is this convenient, but it also increases the home security and safety of the house. I don’t forget to arm my alarm, close the garage door, or turn the porch light on at sunset. Lights come on as I enter dark rooms. And I can monitor the whole system very easily.

May 112010
 

I’ve mentioned my Panasonic BL-C1A network cameras before in a post about monitoring the garage door. I happen to have two of these cameras, and I have automated them to do quite a lot for me. The software that comes with the cameras is pretty lousy, and it makes you think you have to use Internet Explorer and nothing else to look at the images coming out of the camera. Well, I can tell you it’s not true. Although, if you want to use the ActiveX controlling software that comes with the camera, you are limited to only IE. Not good enough for me. I want to be able to see the images on my cell phone, and I don’t like being tied to a single browser, especially IE. For instance, wget (as I used in yesterday’s post about pulling images from a web site) could be used to pull the images from the camera. I also want the images to be saved on a web server so that if my cameras themselves are stolen, or if my home computer is stolen, I will still have a backup of the images. Now, I don’t normally store or watch video from the cameras, but instead focus on storing still images. I can watch video, but I don’t currently know of an easy way to save the video to my web server.

There will be several steps to this process. First install the camera. Next, set up the port forwarding on your router so you can view the camera from outside your local network. Then we will set up some cron jobs on the web server to retrieve and save the images. Finally we will set up a web page so we can view the images that have been saved. If desired, the entire system can be controlled by the home automation system, and I will show you how I did that as well.

The first thing to do is install the cameras. Install the cameras using the software provided, but don’t worry. We won’t be sticking with that software. Make sure you can connect to your camera from a computer on your local network, using the software provided. I would now recommend that you set static IP addresses for your cameras. It defaults that way, so this should not be a problem. The default IP address should be something like 192.168.x.253, where ‘x’ is the same number as the rest of your networked computers, probably a 1 or a 0. Also, set the port to some high number, such as 8001. You will also want to set usernames and passwords for the camera. Next, using the IP address for the camera, use your NON-Internet Explorer web browser to view the images by going to this website:
192.168.x.253:8001?mode=local
If that works, then we have lots of other options:

http://192.168.x.253:8001/SnapshotJPEG?Resolution=320×240&Quality=Precision&mode=local

http://192.168.x.253:8001/SnapshotJpeg?Resolution=640×480&Quality=Standard&mode=local

http://192.168.x.253:8001/ImageViewer?Resolution=640×480&Quality=Standard&mode=local

There is a little more information about these addresses here:

http://tatethatcher.com/wp/archives/57

Great. Now we can see the images with any web browser. Video still requires a web browser that can handle java. Now let’s set it up so we can view the images from outside our local network by using port forwarding.

If you have a cable modem or DSL that is connected to the internet all the time, then you can probably set up port forwarding with that device. I use the world famous Linksys WRT-54G with the upgraded firmware DD-WRT. I certainly can’t tell you how to do this on every device out there, but port forwarding is quite common and searching google for “port forwarding yourdevicename” should give you a good place to start. However, the idea is simple. You want your router to recognize incoming traffic on a certain port and then automatically forward it to another port, such as 8001 in this case. The idea here is that you could be on a public computer in your library and go to http://some_site_yet_to_be_named.com:someportnumber and you will see the video on that camera. If you have more than one camera, you would go to the same site, but a different port number, such as http://some_site_yet_to_be_named.com:someotherportnumber. I used the same portnumber, 8001, but you could use a different one. So I can go to http://mysecretsite:8001 from any browser and see the video. So I need to go into the firmware settings for the router, and I will want to forward any traffic that comes into http://mysecretsite:8001 to http://192.168.x.253:8001. The port forwarding rules will not need to know anything about “mysecretsite”, so you won’t find any place to enter that setting. All you will have to enter is the incoming port, outgoing IP address and outgoing port. The incoming and outgoing ports in this case are both 8001 and the outgoing IP address is 192.168.x.253. At this point you could check and make sure the port forwarding is working by going to your router’s IP address (find it by going to http://whatismyip.com) followed by :8001, such as http://123.45.67.890:8001.

Related to the port forwarding is dynamic DNS. If you are lucky enough to have a static IP address, you can skip this paragraph. Otherwise you will need to follow the steps here to create a dynamic DNS host name. You can set up a free account at http://dyndns.com. Once your account is set up, add a host service with a hostname that you can remember. Have it point to your current IP address for now, but you will want to configure automatic updating. You can either use free software or even easier, you might be able to configure the automatic updating right within your router. If it works, you should be able to go to your new host:

http://mynewhost.homedns.org:8001/SnapshotJpeg?Resolution=640×480&Quality=Standard&mode=local

and see the images from the camera. At this point step two is complete. You can save that URL and you will always be able to view your camera from any web browser on the internet.

The last step is to set up some cron jobs on your web server to grab the images from your camera and save them to a specific directory on your web server. This way you will be able to review past images as needed. It will require you to have a web server that you have shell access to. Some web hosts out there that do allow shell access do not allow scripts to run for extended periods of time. I use dreamhost (http://dreamhost.com), which works perfectly.

#!/bin/bash
# getfamroomwebcam.sh

while :
do
THISFILE=`date +/home/httpdocs/FamilyRoomWebCam/%Y%m%d%H%M%S.jpg`
wget --http-user=camera_user --http-passwd=topsecret -O ${THISFILE} -q http://mynewhost.homedns.org:8001/SnapshotJpeg?Resolution=640x480&Quality=Standard&mode=local
sleep 20
chmod 644 ${THISFILE}
done

As long as this script is running it will grab a new image from the camera every 20 seconds. It saves the images with a timestamped file name. You could configure this to start running at server startup, maybe have a cron job that checks to see if it is running periodically (like once an hour) and if it finds that the script is not running, restart it. I have it set up so that whenever I arm my burglar alarm (Elk M1G), the elk sends an email to my web server with a special code. Procmail reads the email and if it sees the special code, it starts (or stops, on disarming) the script. Here is my Procmail script to start the web cam:
:0
* ^Subject:.*SecretStartCode
{
:0w
| /home/script/getfamroomwebcam.sh &

:0
/dev/null
}

Finally, I have another cron job to delete old pictures every night. Otherwise the picture directory would get very full very fast. I don’t think dreamhost would like that at all.

find /home/httpdocs/FamilyRoomWebCam -mtime +3 -exec rm {} \;

This will delete any pictures older than three days old.

The very last step is I wrote a small web page to display the images. It uses javascript to play the images in a slideshow, or it can display all images from a specific time period. For now I will leave that up to you, but I will post the code for it in a few days.

May 012010
 

I am paranoid about closing my garage door. Or leaving it open. Whatever. I don’t think I’ve ever had anything stolen out of my garage, or any nefarious person (or varmint) enter my house through my open garage door, but I am paranoid about it nonetheless. Have you ever left for work in the morning, walked out to your car to see your garage door wide open?  Or have you ever come home from work to see you garage door open because you forgot to close it on your way out of the driveway in the morning? Me too. So I take matters into my own hands now. It would be impossible for me to leave my garage door open with me at home or away. Can’t happen. Would you like to know how I do it?

First, the required equipment and software:
I have an Elk M1G Security system
I use PowerHome for home automation
Optional, for the really paranoid, I have a Panasonic network camera which can watch the door
and I needed one addition magnetic zone sensor

My house did have a burglar alarm installed when I bought it, with sensors on all of the first floor doors and windows *except* the overhead garage door. I believe this is common practice for new homes, but I may be wrong. My house also came with a very inexpensive, builder’s grade burglar alarm. I immediately replaced it with the Elk M1G because it offers so much in the way of home automation. More about the M1G in later posts here for sure. I then installed a magnetic sensor on the garage door so the M1G would know when the door was open and closed. I have a home theater personal computer (HTPC) which also does my home automation. It is on 24/7 and I don’t know how I would live without it. It is the same closet where my burglar alarm is installed. I have PowerHome installed on that computer, which is capable of communicating with the Elk over IP. Finally, I ran a pair of wires in parallel across the “doorbell” switch in the garage back to a relay output on the Elk. The Elk has inputs and outputs, just like any computer. Zone sensors are inputs, but in this case I hooked up this wire pair to an output. The Elk can control the output (that is, electrically close or open the output) as required. It’s nothing more than a relay. The idea here is I want the Elk to be able to close the garage door, so I gave the Elk its own set of wires which bypass the doorbell switch in the garage. With that, I have everything that I need to complete this project.

The Elk keypads have four programmable buttons which can also be illuminated based on rules. I wrote a rule and function to illuminate a button whenever the garage door was open. I wrote a function to close the output that I connected the doorbell wires to above for one second when I press that button. So I press the button on the Keypad, the Elk interprets that and says “oh, he pushed the button, so I need to close this relay for one second”. Closing the relay for one second is the same thing as pressing the doorbell switch in my garage for one second because I have wired that relay as a bypass in parallel across the doorbell switch. I also added some logic so I can’t accidentally open the garage door from the keypad. The logic checks to see if the door is already closed, and if it is, it doesn’t do anything else. Therefore it won’t accidentally open the door. Great, so I can so look at any keypad in my house and see if the door is open or closed. And if it is open, I can close it. But that’s not good enough.

The Elk M1G is also capable of voice enunciations. I have my Elk connected to a couple of in-wall speakers throughout my house. Now, whenever my garage door is opened, the Elk starts counting down from 60, decrementing by one each minute. When it hits zero it announces throughout my house “Garage door is open” and then resets the counter. So I get hourly reminders that my garage door is open.

I also have PowerHome check to see if the garage door is closed seven minutes after the security system is armed. If the door is not closed, then PowerHome sends me, and my wife text messages on our cell phone, and our work email address a notification that the burglar alarm is armed, but the garage door is open. PowerHome has a built in web server and I have written a front end that can also display the status of the garage door, and of course, it also has a button that I can click and close the garage door. All this is accessible with our cell phones or any web browser.

And yes, I am really, really paranoid, so I also have a Panasonic IP camera in the garage so I can pull up a web page that stores the most recent images from the camera and verify visually whether on not the door is closed.  More on the Panasonic cameras in a later post.

As you can see, I am really paranoid about my garage door.  But I can tell you I have not left it open overnight in years.  Nor have I come home from work to see it wide open either.  This functionality gives me a lot of peace of mind and I am really glad that I have automated every aspect of my garage door.