* Adding a button for camera reboot function
This series of commits will add a camera reboot function to the
control interface if supported by the camera configuration.
* Adding reboot function option to contorl configuration
This patch adds a reboot option to the camera control configuration
view.
* Adding Reboot field to Controls table
This patch adds a Reboot field to the Controls table to support
a camera reboot control option.
* Correcting button value to match reset
* Updating language files
I'm not sure of the proper procedure to trigger updating of
non-english language files so I'm updating them all with English
hoping that that will draw attention to the changes and others
will translate accordingly.
* Add missing forward slash
* Adding a presetHome method
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)
* Adjusting naming of private methods and adding POD
* Adding relative focus methods
This patch also adds the return value of the get request used to
send the command to the camera.
Furthermore, it fixes a small bug in the authentication of requests
sent to the camera after the connection is opened. I really have no
idea why the problem occurred and it appeared to have no practical
effect on the execution of the command. It showed up when I enabled
debug, so this attempts to fix it or at least quiet it.
* Adding POD for the new relative focus methods
Also doing a bit of cleanup on POD in general.
* Adding some documentation to demystify control motion types
This was not clear to me at the outset, and I could not locate existing
documentation which explained the prioritization and exclusion aspects.
Maybe it will help someone else.
* Renaming private methods and adding more POD
This patch renames private methods by prefixing an underscore to
them. This at least helps visually distinguish them as private
when reading through the code.
It also adds more documentation on public methods.
* Grouping all relative motion methods together
This makes for easier reading.
* Adding in a reset method from Issue #2414
This method was supplied by kobold81 who got it from
bobylapointe69300 who posted it in the following forum post:
https://forums.zoneminder.com/viewtopic.php?f=9&t=27000&p=104601&hilit=dahua#p104601
This patch also includes some POD cleanup.
* Adding continuous movement methods and fixing reset
This patch adds the continuous movement methods provided in the patch
for Issue #2414. Note that these are not truly continuous as they
result in movement for less than a ms. Adapting the code to support
truly continuous movement would invovle some considerable work.
This patch also correct the reset method and adds a reboot method.
The two are different creatures with different effects.
POD added as well.
* Removing redundant get request code
Two slightly different versions of code are currently used to post
the get request to the camera in order to execute commands. This
patch modifies the open method in order to allow its re-use and
removes redundant code.
Note: This is the first installment on changes towards improving
the way the HTTP transactions are handled.
* Making authenication failures fatal
Authentication failures result in camera commands not being executed.
They may as well be fatal and return the general reason to the user
directly.
* Work on persistent sessions
I think this will have to wait since it appears that the camera expects
some sort of keepalive/heartbeat signal to keep the session open.
* Restoring accidentally deleted code
* Introduce ZM_COOKIE_LIFETIME which sets the life of the SESSION cookie, instead of using what is in php.ini
* Use zm specific session functions, which are now located in includes/session.php. Be more agressive about clearing session on logout.
* Move session code to includes/session.php
* remove duplicate line
* Move is_session_open to session.php. Move code to clear a session into session.php
* improve debug line when there is a problem updating config entry
* split description into description and help text for COOKIE_LIFETIME
* Remove redirect on line. We do it in javascript on postlogin view so that we can say logging in before switching to console
* If there is a username in the session, then we are logged in, but we need to load the user object from the db. We can't just trust it from the session. The user may have been deleted and having that data in the session can be a security risk. So load the user object on every request.
* Use session_regenerate_id instead of our broken code to do the same
* Move auth code to includes/auth.php
* add autocomplete tags to username and password inputs
* Don't redirect to login if we are already viewing login. Put auth before including skin includes
* need to include session.php in auth.php
* update to php namespace
* Add a control module to support the current Amcrest HTTP API
This patch adds ZoneMinder::Control::Amcrest_HTTP
This module is adapted and improved from one available on the ZoneMinder
forums.[1] It appears that a number of individuals have contributed to
it. This is an attempt to correct some of its interactions with ZM::Control
and friends as well as enhance and extend supported control features
for Amcrest cameras.
This work is based on Amcrest HTTP Protocol API Specifications
Rev. 2.12 2017-03-15
[1]https://forums.zoneminder.com/download/file.php?id=1878
* Fixing zoom methods
* Misc. cleanup of comments, etc.
* Fixing up POD, etc.
* Converting line endings to Unix
* Fixing up preset methods
The current Amcrest HTTP API does not support a Home command per se. So this
method is set up to send the camera to the first preset position. Of course,
this presupposes that the user will setup a preset #1 otherwise the command
will fail on a bad preset error.
If a future version of the API supports a true Home command, we'll adjust
at that point. For now this seems to be a useful workaround.
* Removing duplicate home method
* Adding moveAbs method
I'm putting this in, but absolute camera movement does not seem to be well
supported in the classic skin ATM. Reading
www/skins/classic/include/control_functions.php seems to indicate
a faulty implementation, unless I'm reading it wrong. I see nowhere
where the user is able to specify the absolute location to move to. Rather,
the call is passed back movement in increments of 1 unit. At least with the
Amcrest/Duhua API this would result in the camera moving to the 1* or 0* etc.
position.
moveAbsUp, Down, Left, Right, etc. Doesn't make sense given the definition
of Absolute movement.
* Adding a note about the moveMap method
This method does not appear to be implemented in the classic skin,
but we'll leave it here for future implementation. Caveat: It may
or may not work as-is.
* Fixing up zoomConTele/Wide methods
* Adding a vanilla control type for the Amcrest HTTP API
Please note that this control type matches (mostly) the currently
available control options in Amcrest_HTTP.pm. It does not match
all (or possibly any) of the control options available on a specific
Amcrest camera. The user may need to create their own control type
specific to the camera model they are using.
* Removing misplaced comment
Thanks to connortechnology for pointing this out!
* Set CSRF on as the default for new installs. Not sure we can impact config on existing installations.
* Fix the spelling mistake that I noticed after editing this.
* Control plugin for Dahua PTZ cameras
* Update http/https protocol handling
* Update doc and license
* Remove license from top of file
* Use named regex capture groups for ControlAddress parsing
* Remove trailing whitespace in Trendnet.pm
* initial implementation of privacy popup
* split the privacy text and run it through translate
* change style of toggle button, validate the form
* fix copy/paste error
* fix typos
* display privacy view inline rather than popup
* display privacy inline if show_privacy flag set
* redirect to console after selection is made
* typo
* css formatting
* update privacy verbiage
* create and load default.php
* fix typos
* fix erroneous copy/paste
* initial implementation of privacy popup
* split the privacy text and run it through translate
* change style of toggle button, validate the form
* fix copy/paste error
* fix typos
* display privacy view inline rather than popup
* display privacy inline if show_privacy flag set
* redirect to console after selection is made
* typo
* css formatting
* update privacy verbiage
* push privacy text to all language files
This is the first step for GDPR compliance. A future pr will add a prompt which explains what the telemetry pr is for and whether they want to turn it on.
* implement website monitor
* don't check certain fields when using website monitor
* continue to fix javascript errors for website monitors
* check $monitor, not $new_monitor here
* add website monitor documentation
was somehow left out of the initial commit
* fix corruption of functions.php
* add missing comma
* remove errors by testing for existence of key. If it's a new monitor, then none of the keys will be valid
* If the monitor type is WebSite, then default Status to Running.
* put back start function that got lost in merge. Don't start StreamCmd's if it's a WebSite
* Add midding comma
* Hide unrelated tabs when type is WebSite. Put back input fields for Type=WebSite
* Don't show control or any of the status fields for WebSite type monitors
* add some parenthesis to ensure order of operations, seems to fix fps and status fields not being shown for regular monitors
* added alarm_cause as a test
* initial attempt to integrate with notes
* testing sizeof
* add zone labels
* fixed typo
* fixed typo
* comments and formatting
* Downgraded invalid attribute to error
* Removed Error downgrade. Instead do a undefined check on field params
* Added help text
* Fix install location for config files when building to alternate directory.
With the previous code, we ended up with a directory structure like the following:
$ find /etc/zm/conf.d/
/etc/zm/conf.d/
/etc/zm/conf.d/01-system-paths.conf
/etc/zm/conf.d/conf.d
/etc/zm/conf.d/conf.d/README
/etc/zm/conf.d/conf.d/02-multiserver.conf
* Omitted README file that should have appeared in /etc/zm/conf.d
* Fix location for configs when building to alternate directory.
* Fix works, but this should go on a branch instead.
* Fix works, but this should go on a branch instead.
* Fix location for configs when building to alternate directory.
With the previous code, we ended up with a directory structure like the following:
$ find /etc/zm/conf.d/
/etc/zm/conf.d/
/etc/zm/conf.d/01-system-paths.conf
/etc/zm/conf.d/conf.d
/etc/zm/conf.d/conf.d/README
/etc/zm/conf.d/conf.d/02-multiserver.conf
* Remove double quotes. This is a list of paths.
* Allow SSL database connection to be secured with SSL.
* Fix incorrect variable name
* Fix PHP syntax errors
* SSL connection parameters must also be passed in API.
* Revert fixes to build files; they should not be in this branch.
* initial commit to migrate contents of Options->Paths to zm.conf
* remove paths items from configdata.pm
* remove paths tab from options
* update deb packaging scripts with new cmake vars
* remove extraneous file
* save custom paths variables to config file before dB is freshened
* don't check configs if the dB version is >= 1.31.0
* cmake changes to support conf.d
* php changes to support conf.d
* perl changes to support conf.d
* C changes to support conf.d
* add conf.d support to rpmspecfile
* fix typo
* specify ZM_CONFIG_SUBDIR in relevant target distros
* put back my config_file perl definition
* remove quotes from ZM macros
* fix snprintf
* add README to conf.d folder
* adjust rpm specfile
* remove custom permissions from README in rpmspecfile
* modify rpm README documentation to reflect conf.d support
* set ZM_CONFIG_SUBDIR in debian rules file
The tests in the script General.pm that determine the format for superuser calls on the target environment may leak debug messages to STDOUT. This can be replicated on a Docker installation of Zoneminder lacking sudo. Starting the Zoneminder process will display an intimidating series of error messages that can safely be ignored by the user:
e.g.
'''
root@2bfdd23cc27a:~# service zoneminder start
Starting ZoneMinder: Can't exec "sudo": No such file or directory at /usr/share/perl5/ZoneMinder/General.pm line 1 10.
Use of uninitialized value $output in scalar chomp at /usr/share/perl5/ZoneMinder/General.pm line 119.
Use of uninitialized value $output in concatenation (.) or string at /usr/share/perl5/ZoneMinder/General.pm line 1 20.
success
'''
This patch redirects STDERR from the qx(...) calls to the debug message., And if the output of qx(...) is undefined, replaces it with any error in $! resulting from the qx(...) call.
Mobile application ZM View uses relative move commands and presetGoto
commands which were not supported by the previous version of the script.
Add these commands based on documentation in
http://www.foscam.es/descarga/ipcam_cgi_sdk.pdf
Commands were tested on an FI8908W camera running version 11.37.2.65
firmware