Provided by: zoneminder_1.36.24+dfsg1-1_amd64 bug

NAME

       ZoneMinder::Control::Dahua - Perl module for Dahua cameras

SYNOPSIS

       use ZoneMinder::Control::Dahua; place this in /usr/share/perl5/ZoneMinder/Control

DESCRIPTION

       This module is an implementation of the Dahua IP camera HTTP control API.

COPYRIGHT AND LICENSE

       Copyright (C) 2018 ZoneMinder LLC

       This library is free software; you can redistribute it and/or modify it under the terms of
       the GNU General Public License as published by the Free Software Foundation; either
       version 2 of the License, or (at your option) any later version.

       This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
       without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
       See the GNU General Public License for more details.

       You should have received a copy of the GNU General Public License along with this program;
       if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
       Boston, MA 02110-1301 USA.

Private Methods

           Methods intended for use internally but documented here for future developers.

   _sendAbsolutePositionCommand( $arg1, $arg2, $arg3, $arg4 )
           Where:

               $arg1 = Horizontal angle 0° to 360°
               $arg2 = Vertical angle 0° to -90°
               $arg3 = Zoom multiplier
               $arg4 = Speed 1 to 8

           This is an private method used to send an absolute position command to the
           camera.

Public Methods

           Methods made available to control.pl via ZoneMinder::Control

   Notes:
           Which methods are invoked depends on which types of movement are selected in
           the camera control type. For example: if the 'Can Move Continuous' option is
           checked, then methods including 'Con' in their names are invoked. Likewise if
           the 'Can Move Relative" option is checked, then methods including 'Rel' in
           their names are invoked.

           At present, these types of movement are prioritized and exclusive. This applies
           to all types of movement, not just PTZ, but focus, iris, etc. as well. The options
           are tested in the following order:

           1.  Continuous

           2.  Relative

           3.  Absolute

           These types are exclusive meaning that the first one that matches is the one
           ZoneMinder will use to control with. It would be nice to allow the user to
           select the type used given that some cameras support all three types of
           movement.

   new
           This method instantiates a new control object based upon this control module
           and sets the 'id' attribute to the value passed in.

   open
           This method opens an HTTP connection to the camera. It handles authentication,
           etc. Upon success it sets the 'state' attribute to 'open.'

   close
           This method effectively closes the HTTP connection to the camera. It sets the
           'state' attribute to 'close.'

   printMsg
           This method appears to be used for debugging.

   moveCon<direction>
           This set of methods invoke continuous movement in the direction indicated by
           the <direction> portion of their name. They accept no arguments and move the
           camera at a speed of 1 for 0ms. The speed index of 1 is the lowest of the
           accepted range of 1-8.

           NOTE:

           This is not true continuous movmement as currently implemented.

   focusCon<range>
           This set of methods invoke continuous focus in the range direction indicated
           by the <range> portion of their name. They accept no arguments.

           NOTE:

           This is not true continuous movmement as currently implemented.

   moveRel<direction>
           This set of methods invoke relatvie movement in the direction indicated by
           the <direction> portion of their name. They accept no arguments and move the
           camera at a speed of 4 for 500ms. The speed index of 4 is half-way between
           the accepted range of 1-8.

   focusRel<range>
           This set of methods invoke realtive focus in the range direction indicated by
           the <range> portion of their name. They accept no arguments.

           NOTE:

           This only just does work. The Dahua API specifies "multiples" as the input.
           We pass in a 1 for that as it does not seem to matter what number (0-8) is
           provided, the camera focus behaves the same.

   irisRel<Large/Small>
           This set of methods invoke realtive iris size in the direction indicated by
           the <Large/Small> portion of their name. They accept no arguments.

           NOTE:

           This only just does work. The Dahua API specifies "multiples" as the input.
           We pass in a 1 for that as it does not seem to matter what number (0-8) is
           provided, the camera iris behaves the same.

   moveStop
           This method attempts to stop the camera. The problem is that if continuous
           motion is occurring in multiple directions, this will only stop the motion
           in the 'Up' direction. Dahua does not support an "all-stop" command.

   presetHome
           This method "homes" the camera to a preset position. It accepts no arguments.
           When either continuous or relative movement is enabled, pressing the center
           button on the movement controls invokes this method.

           NOTE:

           The Dahua protocol does not appear to support a preset Home feature. We could
           allow the user to assign a preset slot as the "home" slot. Dahua does appear
           to support naming presets which may lend itself to this sort of thing. At
           this point, we'll just send the camera back to center and zoom wide. (0°,0°,0)

   reset
           This method will reset the PTZ controls to their "default." It is not clear
           what that is.

   reboot
           This method performs a reboot of the camera. This will take the camera offline
           for the time it takes to reboot.