<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://wiki.staging.zoneminder.com/index.php?action=history&amp;feed=atom&amp;title=Wanscam_FR4020A2_Out</id>
	<title>Wanscam FR4020A2 Out - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.staging.zoneminder.com/index.php?action=history&amp;feed=atom&amp;title=Wanscam_FR4020A2_Out"/>
	<link rel="alternate" type="text/html" href="http://wiki.staging.zoneminder.com/index.php?title=Wanscam_FR4020A2_Out&amp;action=history"/>
	<updated>2026-05-03T14:44:56Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>http://wiki.staging.zoneminder.com/index.php?title=Wanscam_FR4020A2_Out&amp;diff=5429&amp;oldid=prev</id>
		<title>Branderco at 20:56, 7 July 2012</title>
		<link rel="alternate" type="text/html" href="http://wiki.staging.zoneminder.com/index.php?title=Wanscam_FR4020A2_Out&amp;diff=5429&amp;oldid=prev"/>
		<updated>2012-07-07T20:56:59Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 16:56, 7 July 2012&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l549&quot;&gt;Line 549:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 549:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;:Type: Remote&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;:Type: Remote&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;:Protocol: Wanscam&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;:Protocol: Wanscam&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;:Can Wake: Tick&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;:Can Sleep: Tick&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;:Can Reset: Tick&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;:Can Reset: Tick&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;Move&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;Move&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Branderco</name></author>
	</entry>
	<entry>
		<id>http://wiki.staging.zoneminder.com/index.php?title=Wanscam_FR4020A2_Out&amp;diff=5428&amp;oldid=prev</id>
		<title>Branderco at 20:25, 7 July 2012</title>
		<link rel="alternate" type="text/html" href="http://wiki.staging.zoneminder.com/index.php?title=Wanscam_FR4020A2_Out&amp;diff=5428&amp;oldid=prev"/>
		<updated>2012-07-07T20:25:35Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 16:25, 7 July 2012&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l2&quot;&gt;Line 2:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 2:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;:Device Firmware Version: 0.35.2.47&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;:Device Firmware Version: 0.35.2.47&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;:Device Embeded Web UI Version: 1.0.0.0&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;:Device Embeded Web UI Version: 1.0.0.0&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;:ZoneMinder Version: 1.25.0&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;:Ubuntu Version: 12.04&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===General Zoneminder Setup===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===General Zoneminder Setup===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Branderco</name></author>
	</entry>
	<entry>
		<id>http://wiki.staging.zoneminder.com/index.php?title=Wanscam_FR4020A2_Out&amp;diff=5425&amp;oldid=prev</id>
		<title>Branderco: Created page with &quot;:http://www.wanscam.com/product/Waterproof%20IR%20IP%20Camera.html :Device Firmware Version: 0.35.2.47 :Device Embeded Web UI Version: 1.0.0.0  ===General Zoneminder Setup===  ;G...&quot;</title>
		<link rel="alternate" type="text/html" href="http://wiki.staging.zoneminder.com/index.php?title=Wanscam_FR4020A2_Out&amp;diff=5425&amp;oldid=prev"/>
		<updated>2012-07-07T20:15:03Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;:http://www.wanscam.com/product/Waterproof%20IR%20IP%20Camera.html :Device Firmware Version: 0.35.2.47 :Device Embeded Web UI Version: 1.0.0.0  ===General Zoneminder Setup===  ;G...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;:http://www.wanscam.com/product/Waterproof%20IR%20IP%20Camera.html&lt;br /&gt;
:Device Firmware Version: 0.35.2.47&lt;br /&gt;
:Device Embeded Web UI Version: 1.0.0.0&lt;br /&gt;
&lt;br /&gt;
===General Zoneminder Setup===&lt;br /&gt;
&lt;br /&gt;
;General:&lt;br /&gt;
:Name: Wanscam2&lt;br /&gt;
:Source Type: Remote&lt;br /&gt;
:Function: Modect&lt;br /&gt;
:Enabled: Tick&lt;br /&gt;
:Maximum FPS: Empty&lt;br /&gt;
:Alarm Maximum FPS: Empty&lt;br /&gt;
;Source&lt;br /&gt;
:Remote Protocol: HTTP&lt;br /&gt;
:Remote Method: Simple&lt;br /&gt;
:Remote Host Name: 192.168.1.99 &amp;#039;&amp;#039;(IP used by camera)&amp;#039;&amp;#039;&lt;br /&gt;
:Remote Host Port: 99 &amp;#039;&amp;#039;(Port used by camera)&amp;#039;&amp;#039;&lt;br /&gt;
:Remote Host Path: /videostream.cgi?user=admin&amp;amp;pwd=pass &amp;#039;&amp;#039;(user=admin, password=pass)&amp;#039;&amp;#039;&lt;br /&gt;
:Remote Image Colours: 24 bit colour&lt;br /&gt;
:Capture Width: 640&lt;br /&gt;
:Capture Height: 480&lt;br /&gt;
;Control&lt;br /&gt;
&lt;br /&gt;
Note: This tab and its options will only appear if you have selected the ZM_OPT_CONTROL option to indicated that your system contains cameras which are able to be controlled via Pan/Tilt/Zoom or other mechanisms. &lt;br /&gt;
&lt;br /&gt;
:Controllable: Tick&lt;br /&gt;
:Control Type: WanscamOut &amp;#039;&amp;#039;(need to create this first using Edit link)&amp;#039;&amp;#039;&lt;br /&gt;
:Control Device: Empty&lt;br /&gt;
:Control Address: admin:pass@192.168.1.99:99 &amp;#039;&amp;#039;(user:password@IP:Port used by camera)&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
===Control Setup===&lt;br /&gt;
&lt;br /&gt;
Create /usr/share/perl5/ZoneMinder/Control/Wanscam.pm with following contents.  This script supports a superset of camera controls and should work with any Wanscam camera. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# ==========================================================================&lt;br /&gt;
#&lt;br /&gt;
# ZoneMinder Wanscam Control Protocol Module, $Date: 2009-11-25 09:20:00 +0000 (Wed, 04 Nov 2009) $, $Revision: 0001 $&lt;br /&gt;
# Copyright (C) 2001-2008 Philip Coombes&lt;br /&gt;
# Modified for use with Foscam FI8918W IP Camera by Dave Harris&lt;br /&gt;
# Modified Feb 2011 by Howard Durdle (http://durdl.es/x) to:&lt;br /&gt;
#      fix horizontal panning, add presets and IR on/off&lt;br /&gt;
#      use Control Device field to pass username and password&lt;br /&gt;
# Modified June 5th, 2012 by Chris Bagwell to:&lt;br /&gt;
#   Rename to IPCAM since its common protocol with wide range of cameras.&lt;br /&gt;
#   Work with Logger module instead of Debug module.&lt;br /&gt;
#   Fix off-by-1 preset bug.&lt;br /&gt;
#   Support optional autostop timeout.&lt;br /&gt;
#   Add Zoom, Brightness, and Contrast support.&lt;br /&gt;
# Modified July 7th, 2012 by Patrik Brander to:&lt;br /&gt;
#   Rename to Wanscam&lt;br /&gt;
#   Pan Left/Right switched&lt;br /&gt;
#   IR On/Off switched&lt;br /&gt;
#   Brightness Increase/Decrease in 16 steps &lt;br /&gt;
#   &lt;br /&gt;
#&lt;br /&gt;
# This program is free software; you can redistribute it and/or&lt;br /&gt;
# modify it under the terms of the GNU General Public License&lt;br /&gt;
# as published by the Free Software Foundation; either version 2&lt;br /&gt;
# of the License, or (at your option) any later version.&lt;br /&gt;
#&lt;br /&gt;
# This program is distributed in the hope that it will be useful,&lt;br /&gt;
# but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the&lt;br /&gt;
# GNU General Public License for more details.&lt;br /&gt;
#&lt;br /&gt;
# You should have received a copy of the GNU General Public License&lt;br /&gt;
# along with this program; if not, write to the Free Software&lt;br /&gt;
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.&lt;br /&gt;
#&lt;br /&gt;
# ==========================================================================&lt;br /&gt;
#&lt;br /&gt;
# This module contains the implementation of the Wanscam camera control&lt;br /&gt;
# protocol.&lt;br /&gt;
#&lt;br /&gt;
# This is a protocol shared by a wide range of affordable cameras that&lt;br /&gt;
# appear to share similar reference design and software.  Examples&lt;br /&gt;
# include Foscam, Agasio, Wansview, etc.&lt;br /&gt;
#&lt;br /&gt;
# The basis for CGI based API can be found on internet by searching for&lt;br /&gt;
# &amp;quot;IPCAM CGI SDK 2.1&amp;quot;. Here is sample site that also developes replacement&lt;br /&gt;
# firmware for some hardware versions.&lt;br /&gt;
#&lt;br /&gt;
# http://www.openipcam.com/files/Manuals/IPCAM%20CGI%20SDK%202.1.pdf&lt;br /&gt;
#&lt;br /&gt;
package ZoneMinder::Control::Wanscam;&lt;br /&gt;
&lt;br /&gt;
use 5.006;&lt;br /&gt;
use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
&lt;br /&gt;
require ZoneMinder::Base;&lt;br /&gt;
require ZoneMinder::Control;&lt;br /&gt;
&lt;br /&gt;
our @ISA = qw(ZoneMinder::Control);&lt;br /&gt;
&lt;br /&gt;
our $VERSION = $ZoneMinder::Base::VERSION;&lt;br /&gt;
&lt;br /&gt;
# ==========================================================================&lt;br /&gt;
#&lt;br /&gt;
# Wanscam Control Protocol&lt;br /&gt;
#&lt;br /&gt;
# ==========================================================================&lt;br /&gt;
&lt;br /&gt;
use ZoneMinder::Logger qw(:all);&lt;br /&gt;
use ZoneMinder::Config qw(:all);&lt;br /&gt;
&lt;br /&gt;
use Time::HiRes qw( usleep );&lt;br /&gt;
&lt;br /&gt;
sub new&lt;br /&gt;
{&lt;br /&gt;
    my $class = shift;&lt;br /&gt;
    my $id = shift;&lt;br /&gt;
    my $self = ZoneMinder::Control-&amp;gt;new( $id );&lt;br /&gt;
    my $logindetails = &amp;quot;&amp;quot;;&lt;br /&gt;
    bless( $self, $class );&lt;br /&gt;
    srand( time() );&lt;br /&gt;
    return $self;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
our $AUTOLOAD;&lt;br /&gt;
&lt;br /&gt;
sub AUTOLOAD&lt;br /&gt;
{&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $class = ref($self) || croak( &amp;quot;$self not object&amp;quot; );&lt;br /&gt;
    my $name = $AUTOLOAD;&lt;br /&gt;
    $name =~ s/.*://;&lt;br /&gt;
    if ( exists($self-&amp;gt;{$name}) )&lt;br /&gt;
    {&lt;br /&gt;
	return( $self-&amp;gt;{$name} );&lt;br /&gt;
    }&lt;br /&gt;
    Fatal( &amp;quot;Can&amp;#039;t access $name member of object of class $class&amp;quot; );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub open&lt;br /&gt;
{&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;loadMonitor();&lt;br /&gt;
&lt;br /&gt;
    use LWP::UserAgent;&lt;br /&gt;
    $self-&amp;gt;{ua} = LWP::UserAgent-&amp;gt;new;&lt;br /&gt;
    $self-&amp;gt;{ua}-&amp;gt;agent( &amp;quot;ZoneMinder Control Agent/&amp;quot;.ZM_VERSION );&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;{state} = &amp;#039;open&amp;#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub close&lt;br /&gt;
{&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    $self-&amp;gt;{state} = &amp;#039;closed&amp;#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub printMsg&lt;br /&gt;
{&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $msg = shift;&lt;br /&gt;
    my $msg_len = length($msg);&lt;br /&gt;
&lt;br /&gt;
    Debug( $msg.&amp;quot;[&amp;quot;.$msg_len.&amp;quot;]&amp;quot; );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub sendCmd&lt;br /&gt;
{&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $cmd = shift;&lt;br /&gt;
    my $result = undef;&lt;br /&gt;
    printMsg( $cmd, &amp;quot;Tx&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
    my $req = HTTP::Request-&amp;gt;new( GET=&amp;gt;&amp;quot;http://&amp;quot;.$self-&amp;gt;{Monitor}-&amp;gt;{ControlAddress}.&amp;quot;/$cmd&amp;quot;.$self-&amp;gt;{Monitor}-&amp;gt;{ControlDevice} );&lt;br /&gt;
    my $res = $self-&amp;gt;{ua}-&amp;gt;request($req);&lt;br /&gt;
&lt;br /&gt;
    if ( $res-&amp;gt;is_success )&lt;br /&gt;
    {&lt;br /&gt;
	$result = $res-&amp;gt;decoded_content;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
	Error( &amp;quot;Error check failed:&amp;#039;&amp;quot;.$res-&amp;gt;status_line().&amp;quot;&amp;#039;&amp;quot; );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return( $result );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Turn IO on (can be internally wired to IR&amp;#039;s)&lt;br /&gt;
sub wake&lt;br /&gt;
{&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    Debug( &amp;quot;Wake - IO on&amp;quot; );&lt;br /&gt;
    my $cmd = &amp;quot;decoder_control.cgi?command=94&amp;amp;&amp;quot;;&lt;br /&gt;
    $self-&amp;gt;sendCmd( $cmd );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Turn IO off (can be internally wired to IR&amp;#039;s)&lt;br /&gt;
sub sleep&lt;br /&gt;
{&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    Debug( &amp;quot;Sleep - IO off&amp;quot; );&lt;br /&gt;
    my $cmd = &amp;quot;decoder_control.cgi?command=95&amp;amp;&amp;quot;;&lt;br /&gt;
    $self-&amp;gt;sendCmd( $cmd );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub reset&lt;br /&gt;
{&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    Debug( &amp;quot;Camera Reset&amp;quot; );&lt;br /&gt;
    my $cmd = &amp;quot;reboot.cgi?&amp;quot;;&lt;br /&gt;
    $self-&amp;gt;sendCmd( $cmd );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub moveConUp&lt;br /&gt;
{&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $params = shift;&lt;br /&gt;
    Debug( &amp;quot;Move Up&amp;quot; );&lt;br /&gt;
    my $cmd = &amp;quot;decoder_control.cgi?command=0&amp;amp;&amp;quot;;&lt;br /&gt;
    $self-&amp;gt;sendCmd( $cmd );&lt;br /&gt;
    my $autostop = $self-&amp;gt;getParam( $params, &amp;#039;autostop&amp;#039;, 0 );&lt;br /&gt;
    if ( $autostop &amp;amp;&amp;amp; $self-&amp;gt;{Monitor}-&amp;gt;{AutoStopTimeout} )&lt;br /&gt;
    {&lt;br /&gt;
        usleep( $self-&amp;gt;{Monitor}-&amp;gt;{AutoStopTimeout} );&lt;br /&gt;
        $self-&amp;gt;moveStop( $params );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub moveConDown&lt;br /&gt;
{&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $params = shift;&lt;br /&gt;
    Debug( &amp;quot;Move Down&amp;quot; );&lt;br /&gt;
    my $cmd = &amp;quot;decoder_control.cgi?command=2&amp;amp;&amp;quot;;&lt;br /&gt;
    $self-&amp;gt;sendCmd( $cmd );&lt;br /&gt;
    my $autostop = $self-&amp;gt;getParam( $params, &amp;#039;autostop&amp;#039;, 0 );&lt;br /&gt;
    if ( $autostop &amp;amp;&amp;amp; $self-&amp;gt;{Monitor}-&amp;gt;{AutoStopTimeout} )&lt;br /&gt;
    {&lt;br /&gt;
        usleep( $self-&amp;gt;{Monitor}-&amp;gt;{AutoStopTimeout} );&lt;br /&gt;
        $self-&amp;gt;moveStop( $params );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub moveConRight&lt;br /&gt;
{&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $params = shift;&lt;br /&gt;
    Debug( &amp;quot;Move Right&amp;quot; );&lt;br /&gt;
    my $cmd = &amp;quot;decoder_control.cgi?command=4&amp;amp;&amp;quot;;&lt;br /&gt;
    $self-&amp;gt;sendCmd( $cmd );&lt;br /&gt;
    my $autostop = $self-&amp;gt;getParam( $params, &amp;#039;autostop&amp;#039;, 0 );&lt;br /&gt;
    if ( $autostop &amp;amp;&amp;amp; $self-&amp;gt;{Monitor}-&amp;gt;{AutoStopTimeout} )&lt;br /&gt;
    {&lt;br /&gt;
        usleep( $self-&amp;gt;{Monitor}-&amp;gt;{AutoStopTimeout} );&lt;br /&gt;
        $self-&amp;gt;moveStop( $params );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub moveConLeft&lt;br /&gt;
{&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $params = shift;&lt;br /&gt;
    Debug( &amp;quot;Move Left&amp;quot; );&lt;br /&gt;
    my $cmd = &amp;quot;decoder_control.cgi?command=6&amp;amp;&amp;quot;;&lt;br /&gt;
    $self-&amp;gt;sendCmd( $cmd );&lt;br /&gt;
    my $autostop = $self-&amp;gt;getParam( $params, &amp;#039;autostop&amp;#039;, 0 );&lt;br /&gt;
    if ( $autostop &amp;amp;&amp;amp; $self-&amp;gt;{Monitor}-&amp;gt;{AutoStopTimeout} )&lt;br /&gt;
    {&lt;br /&gt;
        usleep( $self-&amp;gt;{Monitor}-&amp;gt;{AutoStopTimeout} );&lt;br /&gt;
        $self-&amp;gt;moveStop( $params );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub moveConUpLeft&lt;br /&gt;
{&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $params = shift;&lt;br /&gt;
    Debug( &amp;quot;Move Diagonally Up Left&amp;quot; );&lt;br /&gt;
    my $cmd = &amp;quot;decoder_control.cgi?command=91&amp;amp;&amp;quot;;&lt;br /&gt;
    $self-&amp;gt;sendCmd( $cmd );&lt;br /&gt;
    my $autostop = $self-&amp;gt;getParam( $params, &amp;#039;autostop&amp;#039;, 0 );&lt;br /&gt;
    if ( $autostop &amp;amp;&amp;amp; $self-&amp;gt;{Monitor}-&amp;gt;{AutoStopTimeout} )&lt;br /&gt;
    {&lt;br /&gt;
        usleep( $self-&amp;gt;{Monitor}-&amp;gt;{AutoStopTimeout} );&lt;br /&gt;
        $self-&amp;gt;moveStop( $params );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub moveConDownLeft&lt;br /&gt;
{&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $params = shift;&lt;br /&gt;
    Debug( &amp;quot;Move Diagonally Down Left&amp;quot; );&lt;br /&gt;
    my $cmd = &amp;quot;decoder_control.cgi?command=93&amp;amp;&amp;quot;;&lt;br /&gt;
    $self-&amp;gt;sendCmd( $cmd );&lt;br /&gt;
    my $autostop = $self-&amp;gt;getParam( $params, &amp;#039;autostop&amp;#039;, 0 );&lt;br /&gt;
    if ( $autostop &amp;amp;&amp;amp; $self-&amp;gt;{Monitor}-&amp;gt;{AutoStopTimeout} )&lt;br /&gt;
    {&lt;br /&gt;
        usleep( $self-&amp;gt;{Monitor}-&amp;gt;{AutoStopTimeout} );&lt;br /&gt;
        $self-&amp;gt;moveStop( $params );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub moveConUpRight&lt;br /&gt;
{&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $params = shift;&lt;br /&gt;
    Debug( &amp;quot;Move Diagonally Up Right&amp;quot; );&lt;br /&gt;
    my $cmd = &amp;quot;decoder_control.cgi?command=90&amp;amp;&amp;quot;;&lt;br /&gt;
    $self-&amp;gt;sendCmd( $cmd );&lt;br /&gt;
    my $autostop = $self-&amp;gt;getParam( $params, &amp;#039;autostop&amp;#039;, 0 );&lt;br /&gt;
    if ( $autostop &amp;amp;&amp;amp; $self-&amp;gt;{Monitor}-&amp;gt;{AutoStopTimeout} )&lt;br /&gt;
    {&lt;br /&gt;
        usleep( $self-&amp;gt;{Monitor}-&amp;gt;{AutoStopTimeout} );&lt;br /&gt;
        $self-&amp;gt;moveStop( $params );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub moveConDownRight&lt;br /&gt;
{&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $params = shift;&lt;br /&gt;
    Debug( &amp;quot;Move Diagonally Down Right&amp;quot; );&lt;br /&gt;
    my $cmd = &amp;quot;decoder_control.cgi?command=92&amp;amp;&amp;quot;;&lt;br /&gt;
    $self-&amp;gt;sendCmd( $cmd );&lt;br /&gt;
    my $autostop = $self-&amp;gt;getParam( $params, &amp;#039;autostop&amp;#039;, 0 );&lt;br /&gt;
    if ( $autostop &amp;amp;&amp;amp; $self-&amp;gt;{Monitor}-&amp;gt;{AutoStopTimeout} )&lt;br /&gt;
    {&lt;br /&gt;
        usleep( $self-&amp;gt;{Monitor}-&amp;gt;{AutoStopTimeout} );&lt;br /&gt;
        $self-&amp;gt;moveStop( $params );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# command=1 is technically Up Stop but seems to work for all stops.&lt;br /&gt;
sub moveStop&lt;br /&gt;
{&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    Debug( &amp;quot;Move Stop&amp;quot; );&lt;br /&gt;
    print(&amp;quot;autostop\n&amp;quot;);&lt;br /&gt;
    my $cmd = &amp;quot;decoder_control.cgi?command=1&amp;amp;&amp;quot;;&lt;br /&gt;
    $self-&amp;gt;sendCmd( $cmd );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub zoomConTele&lt;br /&gt;
{&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $params = shift;&lt;br /&gt;
    Debug( &amp;quot;Zoom Tele&amp;quot; );&lt;br /&gt;
    my $cmd = &amp;quot;decoder_control.cgi?command=16&amp;amp;&amp;quot;;&lt;br /&gt;
    $self-&amp;gt;sendCmd( $cmd );&lt;br /&gt;
    my $autostop = $self-&amp;gt;getParam( $params, &amp;#039;autostop&amp;#039;, 0 );&lt;br /&gt;
    if ( $autostop &amp;amp;&amp;amp; $self-&amp;gt;{Monitor}-&amp;gt;{AutoStopTimeout} )&lt;br /&gt;
    {&lt;br /&gt;
        usleep( $self-&amp;gt;{Monitor}-&amp;gt;{AutoStopTimeout} );&lt;br /&gt;
	$cmd = &amp;quot;decoder_control.cgi?command=17&amp;amp;&amp;quot;;&lt;br /&gt;
	$self-&amp;gt;sendCmd( $cmd );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub zoomConWide&lt;br /&gt;
{&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $params = shift;&lt;br /&gt;
    Debug( &amp;quot;Zoom Wide&amp;quot; );&lt;br /&gt;
    my $cmd = &amp;quot;decoder_control.cgi?command=18&amp;amp;&amp;quot;;&lt;br /&gt;
    $self-&amp;gt;sendCmd( $cmd );&lt;br /&gt;
    my $autostop = $self-&amp;gt;getParam( $params, &amp;#039;autostop&amp;#039;, 0 );&lt;br /&gt;
    if ( $autostop &amp;amp;&amp;amp; $self-&amp;gt;{Monitor}-&amp;gt;{AutoStopTimeout} )&lt;br /&gt;
    {&lt;br /&gt;
        usleep( $self-&amp;gt;{Monitor}-&amp;gt;{AutoStopTimeout} );&lt;br /&gt;
	$cmd = &amp;quot;decoder_control.cgi?command=19&amp;amp;&amp;quot;;&lt;br /&gt;
	$self-&amp;gt;sendCmd( $cmd );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub zoomConStop&lt;br /&gt;
{&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $params = shift;&lt;br /&gt;
    Debug( &amp;quot;Zoom Stop&amp;quot; );&lt;br /&gt;
    my $cmd = &amp;quot;decoder_control.cgi?command=17&amp;amp;&amp;quot;;&lt;br /&gt;
    $self-&amp;gt;sendCmd( $cmd );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Increase Brightness&lt;br /&gt;
sub irisAbsOpen&lt;br /&gt;
{&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $params = shift;&lt;br /&gt;
    my $step = $self-&amp;gt;getParam( $params, &amp;#039;step&amp;#039; );&lt;br /&gt;
    my $brightness = 100;&lt;br /&gt;
&lt;br /&gt;
    my $cmd = &amp;quot;get_camera_params.cgi?&amp;quot;;&lt;br /&gt;
    my $resp = $self-&amp;gt;sendCmd( $cmd );&lt;br /&gt;
&lt;br /&gt;
    $brightness = int($1) if ( $resp =~ m/var brightness=([0-9]*);/ );&lt;br /&gt;
    $brightness += $step * 16;&lt;br /&gt;
    $brightness = 255 if ($brightness &amp;gt; 255);&lt;br /&gt;
    Debug( &amp;quot;Iris Open $brightness&amp;quot; );&lt;br /&gt;
    $cmd = &amp;quot;camera_control.cgi?param=1&amp;amp;value=&amp;quot;.$brightness.&amp;quot;&amp;amp;&amp;quot;;&lt;br /&gt;
    $self-&amp;gt;sendCmd( $cmd );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Decrease Brightness&lt;br /&gt;
sub irisAbsClose&lt;br /&gt;
{&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $params = shift;&lt;br /&gt;
    my $step = $self-&amp;gt;getParam( $params, &amp;#039;step&amp;#039; );&lt;br /&gt;
    my $brightness = 100;&lt;br /&gt;
&lt;br /&gt;
    my $cmd = &amp;quot;get_camera_params.cgi?&amp;quot;;&lt;br /&gt;
    my $resp = $self-&amp;gt;sendCmd( $cmd );&lt;br /&gt;
&lt;br /&gt;
    $brightness = int($1) if ( $resp =~ m/var brightness=([0-9]*);/ );&lt;br /&gt;
    $brightness -= $step * 16;&lt;br /&gt;
    $brightness = 0 if ($brightness &amp;lt; 0);&lt;br /&gt;
    Debug( &amp;quot;Iris Close $brightness&amp;quot; );&lt;br /&gt;
    $cmd = &amp;quot;camera_control.cgi?param=1&amp;amp;value=&amp;quot;.$brightness.&amp;quot;&amp;amp;&amp;quot;;&lt;br /&gt;
    $self-&amp;gt;sendCmd( $cmd );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Increase Contrast&lt;br /&gt;
sub whiteAbsIn&lt;br /&gt;
{&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $params = shift;&lt;br /&gt;
    my $step = $self-&amp;gt;getParam( $params, &amp;#039;step&amp;#039; );&lt;br /&gt;
    my $contrast = 5;&lt;br /&gt;
&lt;br /&gt;
    my $cmd = &amp;quot;get_camera_params.cgi?&amp;quot;;&lt;br /&gt;
    my $resp = $self-&amp;gt;sendCmd( $cmd );&lt;br /&gt;
&lt;br /&gt;
    $contrast = int($1) if ( $resp =~ m/var contrast=([0-9]*);/ );&lt;br /&gt;
    $contrast += $step;&lt;br /&gt;
    $contrast = 6 if ($contrast &amp;gt; 6);&lt;br /&gt;
    Debug( &amp;quot;White In $contrast&amp;quot; );&lt;br /&gt;
    $cmd = &amp;quot;camera_control.cgi?param=2&amp;amp;value=&amp;quot;.$contrast.&amp;quot;&amp;amp;&amp;quot;;&lt;br /&gt;
    $self-&amp;gt;sendCmd( $cmd );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Decrease Contrast&lt;br /&gt;
sub whiteAbsOut&lt;br /&gt;
{&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $params = shift;&lt;br /&gt;
    my $step = $self-&amp;gt;getParam( $params, &amp;#039;step&amp;#039; );&lt;br /&gt;
    my $contrast = 5;&lt;br /&gt;
&lt;br /&gt;
    my $cmd = &amp;quot;get_camera_params.cgi?&amp;quot;;&lt;br /&gt;
    my $resp = $self-&amp;gt;sendCmd( $cmd );&lt;br /&gt;
&lt;br /&gt;
    $contrast = int($1) if ( $resp =~ m/var contrast=([0-9]*);/ );&lt;br /&gt;
    $contrast -= $step;&lt;br /&gt;
    $contrast = 0 if ($contrast &amp;lt; 0);&lt;br /&gt;
    Debug( &amp;quot;White Out $contrast&amp;quot; );&lt;br /&gt;
    $cmd = &amp;quot;camera_control.cgi?param=2&amp;amp;value=&amp;quot;.$contrast.&amp;quot;&amp;amp;&amp;quot;;&lt;br /&gt;
    $self-&amp;gt;sendCmd( $cmd );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub presetHome&lt;br /&gt;
{&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    Debug( &amp;quot;Home Preset&amp;quot; );&lt;br /&gt;
    my $cmd = &amp;quot;decoder_control.cgi?command=25&amp;amp;&amp;quot;;&lt;br /&gt;
    $self-&amp;gt;sendCmd( $cmd );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub presetSet&lt;br /&gt;
{&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $params = shift;&lt;br /&gt;
    my $preset = $self-&amp;gt;getParam( $params, &amp;#039;preset&amp;#039; );&lt;br /&gt;
    my $presetCmd = 30 + (($preset-1)*2);&lt;br /&gt;
    Debug( &amp;quot;Set Preset $preset with cmd $presetCmd&amp;quot; );&lt;br /&gt;
    my $cmd = &amp;quot;decoder_control.cgi?command=$presetCmd&amp;amp;&amp;quot;;&lt;br /&gt;
    $self-&amp;gt;sendCmd( $cmd );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub presetGoto&lt;br /&gt;
{&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $params = shift;&lt;br /&gt;
    my $preset = $self-&amp;gt;getParam( $params, &amp;#039;preset&amp;#039; );&lt;br /&gt;
    my $presetCmd = 31 + (($preset-1)*2);&lt;br /&gt;
    Debug( &amp;quot;Goto Preset $preset with cmd $presetCmd&amp;quot; );&lt;br /&gt;
    my $cmd = &amp;quot;decoder_control.cgi?command=$presetCmd&amp;amp;&amp;quot;;&lt;br /&gt;
    $self-&amp;gt;sendCmd( $cmd );&lt;br /&gt;
}&lt;br /&gt;
1;&lt;br /&gt;
__END__&lt;br /&gt;
# Below is stub documentation for your module. You&amp;#039;d better edit it!&lt;br /&gt;
&lt;br /&gt;
=head1 NAME&lt;br /&gt;
&lt;br /&gt;
ZoneMinder::Database - Perl extension for blah blah blah&lt;br /&gt;
&lt;br /&gt;
=head1 SYNOPSIS&lt;br /&gt;
&lt;br /&gt;
  use ZoneMinder::Database;&lt;br /&gt;
  blah blah blah&lt;br /&gt;
&lt;br /&gt;
=head1 DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
Stub documentation for ZoneMinder, created by h2xs. It looks like the&lt;br /&gt;
author of the extension was negligent enough to leave the stub&lt;br /&gt;
unedited.&lt;br /&gt;
&lt;br /&gt;
Blah blah blah.&lt;br /&gt;
&lt;br /&gt;
=head2 EXPORT&lt;br /&gt;
&lt;br /&gt;
None by default.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=head1 SEE ALSO&lt;br /&gt;
&lt;br /&gt;
Mention other useful documentation such as the documentation of&lt;br /&gt;
related modules or operating system documentation (such as man pages&lt;br /&gt;
in UNIX), or any relevant external documentation such as RFCs or&lt;br /&gt;
standards.&lt;br /&gt;
&lt;br /&gt;
If you have a mailing list set up for your module, mention it here.&lt;br /&gt;
&lt;br /&gt;
If you have a web site set up for your module, mention it here.&lt;br /&gt;
&lt;br /&gt;
=head1 AUTHOR&lt;br /&gt;
&lt;br /&gt;
Philip Coombes, E&amp;lt;lt&amp;gt;philip.coombes@zoneminder.comE&amp;lt;gt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=head1 COPYRIGHT AND LICENSE&lt;br /&gt;
&lt;br /&gt;
Copyright (C) 2001-2008  Philip Coombes&lt;br /&gt;
&lt;br /&gt;
This library is free software; you can redistribute it and/or modify&lt;br /&gt;
it under the same terms as Perl itself, either Perl version 5.8.3 or,&lt;br /&gt;
at your option, any later version of Perl 5 you may have available.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=cut&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
From here, Zoneminder must be configured to know about Wanscam controls. This is done by clicking the &amp;quot;Edit&amp;quot; link pointed out during general setup and then on the &amp;quot;Add New Control&amp;quot; button on new window.&lt;br /&gt;
&lt;br /&gt;
;Main&lt;br /&gt;
:Name: WanscamOut&lt;br /&gt;
:Type: Remote&lt;br /&gt;
:Protocol: Wanscam&lt;br /&gt;
:Can Wake: Tick&lt;br /&gt;
:Can Sleep: Tick&lt;br /&gt;
:Can Reset: Tick&lt;br /&gt;
;Move&lt;br /&gt;
&amp;#039;&amp;#039;Device cannot move&amp;#039;&amp;#039;&lt;br /&gt;
;Pan&lt;br /&gt;
&amp;#039;&amp;#039;Device cannot pan&amp;#039;&amp;#039;&lt;br /&gt;
;Tilt&lt;br /&gt;
&amp;#039;&amp;#039;Device cannot tilt&amp;#039;&amp;#039;&lt;br /&gt;
;Zoom&lt;br /&gt;
&amp;#039;&amp;#039;Device cannot zoom&amp;#039;&amp;#039;&lt;br /&gt;
;Focus&lt;br /&gt;
&amp;#039;&amp;#039;Device cannot focus&amp;#039;&amp;#039;&lt;br /&gt;
;White&lt;br /&gt;
:Can White Balance: Tick&lt;br /&gt;
:Can White Balance Absolute: Tick&lt;br /&gt;
:Min White Bal. Range: 0&lt;br /&gt;
:Max White Bal. Range: 16&lt;br /&gt;
;Iris&lt;br /&gt;
:Can Iris: Tick&lt;br /&gt;
:Can Iris Absolute: Tick&lt;br /&gt;
:Min Iris Range: 0&lt;br /&gt;
:Max Iris Range: 6&lt;br /&gt;
;Presets&lt;br /&gt;
&amp;#039;&amp;#039;Device cannot preset&amp;#039;&amp;#039;&lt;/div&gt;</summary>
		<author><name>Branderco</name></author>
	</entry>
</feed>