Resurrecting the Veo Observer

In my recent piece on RegHardware about home automation, I mentioned that one of the ways you can do some of this is via your own scripting, linking together different bits of kit that can be controlled via the web and even, in some cases, resurrecting devices that were originally designed to be Windows only.

One of those is the Veo Observer IP camera; I already had one webcam in the home, but wanted another to monitor a different room, and found the Observer tucked away in the corner of my office. The company that made it is long since gone, so there are no software updates, and the built in software relies on a plug-in for Internet Explorer to stream images. So, at first glance, it seems like something that isn’t going to be much use now that most of the computers I use at home are Macs or portable devices that don’t take kindly to being told to install an ActiveX control.

To the rescue

Thanks to some handy scripts, the Veo Observer rides again, and lets me see what's going on in my living room

Fortunately, I’m not the only person to have had this problem in the past, and Google is your friend in situations like this. There are a few pages around explaining how people have managed to work out the format of the images, and the controls that can be sent to the camera. Start at Kahunaburger for a brief overview, and sample Perl code, though it’s worth noting that there are more up to date versions of the scripts available, which offer more control over the camera.

In particular, visit Acacia Projects, where you’ll find download links to two important things – the Veo.pm perl module, and a cgi script, which can sit on your webserver. These seem to be the most up to date versions. I’ve put both in a folder on a hosted web server, and then in the cgi script (which I’ve named veo.pl) you need to edit a few lines at the top, with user name, host and password information – if you can find a Windows machine to run the Veo software – which can be downloaded here – then you can create extra user names and set their permissions.

Since the web server is outside my firewall, I have opened port 1600, which is the one used by the Veo Observer, allowing requests only from the web server to pass through to the camera, which has a fixed IP address on my home network. This means that the only way to access the images is via a page on that web server; you might prefer to do things differently, but it suits me.

The other thing you need to do is change a line in the cgi script that tells it where to return to when it’s finished executing; mine says:

my $URL= "call.php";

as call.php is the name of the page that I’m using to control the camera, though it could equally well be a plain HTML file, or whatever you fancy. Although the script says you don’t need to edit anything further, you may want to change the path in the &SendImage lines the display a ‘busy’ image – I found it most reliable to add a full path to my image.

Camera controls
A quick skim through the code for the script will reveal the various commands that can be implemented, which I’ve used to put together the control page shown here.

First, to get the image, I simply use this tag:

<img src="veo.pl?action=getimage" />

Obviously, if the script isn’t called veo.pl on your server, or it’s not in the same folder as the calling page, you’ll need to amend that accordingly.

The link to move up is simply

<a href="veo.pl?move=up">&uarr;</a>

and similarly there are move commands ‘left’, ‘right’, ‘fullleft’, ‘fullright’, ‘down’,'fulldown’, ‘fullup’ – though the ‘full’ versions of each one actually just seem to move a large chunk of the way, rather than to the furthest extreme on my camera.

Setting the light level to Daylight is done with a call

veo.pl?action=setlight&val1=0

and you can change the last value to 1 for Backlit, or 2 for Night.

Another useful command is setstatuslight, and which allows you to turn off the light on the front of the camera with

veo.pl?action=setstatuslight&val1=0

or use 1 to turn it back on. Similarly, image brightness can be set using setbrightness and values of 0, 1 or 2 for val1.

It’s not wonderfully slick, and the camera’s prone to hanging if it gets too many requests, but you can get moving images of a sort with frequent refreshes, and I’ve even set it up using the ‘getimage’ command as a generic IP camera in the software I run on my iPod touch. So, despite being ‘Active-X only’ in theory, in practise, thanks to the work of the people I’ve linked to here, you really can resurrect a Veo Observer and make it do useful things.