Motivated mostly by curiosity, I was recently in the market for a cheap IP camera. After a little bit of research, I settled on a Foscam FI9821P (I got mine for ~$45 as an Amazon Warehouse Deal). The app provided by Foscam is pretty nice, but I wanted to integrate it with my home automation setup as well. In particular, I wanted to accomplish the following:
- Secure access. Any communication with the camera should require some secure authentication mechanism.
- SmartThings integration. I wanted a device in SmartThings I could play around with.
- REST endpoint. Although I could probably get most of what I want done with SmartThings alone, I didn’t want to be bound to it.
SmartThings has a device type for cameras, so as long as there’s some way to access the camera within SmartThings, (2) is easy. In a previous post, I outlined a setup that uses HMAC to secure communication with smart home devices. I leveraged it in this project as well.
I should mention that I stumbled across some existing attempts at this, but nothing that would’ve given (1) and (3).
I put together this route for my home automation gateway, which accomplishes (1) and (3). With it, I can capture a snapshot and control some rudimentary functionalities of the camera. I can, for example, request a snapshot of what the camera is currently seeing simply by accessing this URL (with the appropriate security headers in place):
http://HA_GATWAY_URL/camera/foscam1/snapshot.jpg
You can see that there’s baked in support for multiple cameras (since the endpoint is scoped by a camera name). While I don’t anticipate buying more cameras, I figured adding support would make this project more generally useful.
To integrate with SmartThings, I created a virtual device (code embedded below). It allows me to request an image, shift the camera to one of three preset positions, and to start/stop recording. Here’s a demo of the interface:
This project was a lot of fun, and quite a bit easier than I was anticipating. My favorite thing this has enabled is a SmartThings SmartApp that signals the camera to take a picture when my front door opens. To avoid being too creepy, this only happens when no one is home. If I can muster the motivation, I’ll probably write a separate post about that.
Chris,
This is an awesome write up! I am trying to configure my foscam which I currently access using a DDNS.
Do I overwrite the below:
http://HA_GATWAY_URL/camera/foscam1/snapshot.jpg
with
http://DDNS:port/camera/foscam1/snapshot.jpg
Many thanks in advance for your timely response.
Hi Allan,
Yes, that should work (assuming, of course, you have appropriate firewall/router configurations in place).
Note that if you’ve enabled security on ha_gateway, you’ll need to provide HMAC headers in order for the request to succeed. Documentation is available in ha_gateway’s github README:
https://github.com/sidoh/ha_gateway#security
Hi,
Is there a detailed instruction to install fiscal with your method in smart things? I saw also this :
<ha_gateway_url> what this should be replaced with?
Thanks
Hi,
Basically, you’ll need to run a small server on your local network. The project’s README goes into how to run and configure it:
https://github.com/sidoh/ha_gateway/blob/master/README.md
The URL you mentioned would be your external IP. It’d need to route to the aforementioned server, so you’d have to configure your router appropriately.
This post goes into a little more about the overall setup.