Merge branch 'master' into storageareas
commit
89cff287cd
13
CHANGELOG.md
13
CHANGELOG.md
|
@ -1,5 +1,18 @@
|
|||
# Change Log
|
||||
|
||||
## [v1.29.0](https://github.com/ZoneMinder/ZoneMinder/tree/v1.29.0) (2016-02-03)
|
||||
[Full Changelog](https://github.com/ZoneMinder/ZoneMinder/compare/v1.29.0-rc2...v1.29.0)
|
||||
|
||||
**Merged pull requests:**
|
||||
|
||||
- 1253 zms quit cmd [\#1254](https://github.com/ZoneMinder/ZoneMinder/pull/1254) ([pliablepixels](https://github.com/pliablepixels))
|
||||
- Add Debug/Info lines reporting multi-server status [\#1252](https://github.com/ZoneMinder/ZoneMinder/pull/1252) ([connortechnology](https://github.com/connortechnology))
|
||||
- Do debian package mods [\#1244](https://github.com/ZoneMinder/ZoneMinder/pull/1244) ([pliablepixels](https://github.com/pliablepixels))
|
||||
- zmtrigger - process off+time delay condition [\#1240](https://github.com/ZoneMinder/ZoneMinder/pull/1240) ([knnniggett](https://github.com/knnniggett))
|
||||
- Multi server [\#1233](https://github.com/ZoneMinder/ZoneMinder/pull/1233) ([connortechnology](https://github.com/connortechnology))
|
||||
- remove Google open Sans external import [\#1232](https://github.com/ZoneMinder/ZoneMinder/pull/1232) ([connortechnology](https://github.com/connortechnology))
|
||||
- PTZ - Added autostop to Down command on FI8918W [\#1189](https://github.com/ZoneMinder/ZoneMinder/pull/1189) ([marcolino7](https://github.com/marcolino7))
|
||||
|
||||
## [v1.29.0-rc2](https://github.com/ZoneMinder/ZoneMinder/tree/v1.29.0-rc2) (2016-01-05)
|
||||
[Full Changelog](https://github.com/ZoneMinder/ZoneMinder/compare/v1.29.0-rc1...v1.29.0-rc2)
|
||||
|
||||
|
|
|
@ -604,6 +604,8 @@ INSERT INTO Controls VALUES (NULL,'ONVIF Camera','Ffmpeg','onvif',0,0,1,1,0,0,0,
|
|||
INSERT INTO `Controls` VALUES (NULL,'Foscam 9831W','Ffmpeg','FI9831W',0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,16,1,1,1,1,0,0,0,1,1,0,360,0,360,1,0,4,0,0,1,0,90,0,90,0,0,0,0,0,0,0);
|
||||
INSERT INTO `Controls` VALUES (NULL,'Foscam FI8918W','Ffmpeg','FI8918W',0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,8,0,1,1,1,0,0,0,1,1,0,360,0,360,1,0,4,0,0,1,0,90,0,90,1,0,4,0,0,0,0);
|
||||
INSERT INTO `Controls` VALUES (NULL,'SunEyes SP-P1802SWPTZ','Libvlc','SPP1802SWPTZ',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,8,0,1,1,0,0,0,0,1,1,0,0,0,0,1,0,64,0,0,1,0,0,0,0,1,0,64,0,0,0,0);
|
||||
INSERT INTO `Controls` VALUES (NULL,'Wanscam HW0025','Libvlc','WanscamHW0025', 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 16, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 350, 0, 0, 1, 0, 10, 0, 0, 1, 0, 0, 0, 0, 1, 0, 10, 0, 0, 0, 0);
|
||||
INSERT INTO `Controls` VALUES (NULL,'IPCC 7210W','Libvlc','IPCC7210W', 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 16, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 350, 0, 0, 1, 0, 10, 0, 0, 1, 0, 0, 0, 0, 1, 0, 10, 0, 0, 0, 0);
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
--
|
||||
-- This updates a 1.28.106 database to 1.28.107
|
||||
-- This updates a 1.28.108 database to 1.28.109
|
||||
--
|
||||
|
||||
--
|
||||
|
|
|
@ -44,12 +44,10 @@ New installs
|
|||
set during the previous step, you will need to create the ZoneMinder
|
||||
database and configure a database account for ZoneMinder to use:
|
||||
|
||||
mysql -u root -p < /usr/share/zoneminder/db/zm_create.sql
|
||||
mysql -u root -p
|
||||
mysql> grant all
|
||||
on zm.* to 'zmuser'@localhost identified by 'zmpass';
|
||||
mysql> exit;
|
||||
mysqladmin -u root -p reload
|
||||
mysql -uroot -p < /usr/share/zoneminder/db/zm_create.sql
|
||||
mysql -uroot -p -e "grant all on zm.* to \
|
||||
'zmuser'@localhost identified by 'zmpass';"
|
||||
mysqladmin -uroot -p reload
|
||||
|
||||
The database account credentials, zmuser/zmpass, are arbitrary. Set them to
|
||||
anything that suits your envinroment.
|
||||
|
@ -125,9 +123,7 @@ Upgrades
|
|||
have increased. Verify the zmuser database account has been granted all
|
||||
permission to the ZoneMinder database:
|
||||
|
||||
mysql -u root -p
|
||||
mysql> show grants for zmuser@localhost;
|
||||
mysql> exit;
|
||||
mysql -uroot -p -e "show grants for zmuser@localhost;"
|
||||
|
||||
See step 2 of the Installation section to add missing permissions.
|
||||
|
||||
|
|
|
@ -65,7 +65,7 @@ too much degradation of performance.
|
|||
%setup -q -n ZoneMinder-%{version}
|
||||
|
||||
# Change the following default values
|
||||
./utils/zmeditconfigdata.sh ZM_PATH_ZMS /cgi-bin/zm/nph-zms
|
||||
./utils/zmeditconfigdata.sh ZM_PATH_ZMS /cgi-bin-zm/nph-zms
|
||||
./utils/zmeditconfigdata.sh ZM_OPT_CAMBOZOLA yes
|
||||
./utils/zmeditconfigdata.sh ZM_PATH_SWAP /dev/shm
|
||||
./utils/zmeditconfigdata.sh ZM_UPLOAD_FTP_LOC_DIR /var/spool/zoneminder-upload
|
||||
|
@ -138,7 +138,7 @@ fi
|
|||
|
||||
%files
|
||||
%defattr(-,root,root,-)
|
||||
%doc AUTHORS COPYING README.md distros/fedora/README.Fedora distros/fedora/jscalendar-doc
|
||||
%doc AUTHORS COPYING README.md distros/fedora/README.Fedora distros/fedora/README.https distros/fedora/jscalendar-doc
|
||||
%config %attr(640,root,%{zmgid_final}) /etc/zm/zm.conf
|
||||
%config(noreplace) %attr(644,root,root) /etc/httpd/conf.d/zoneminder.conf
|
||||
%config(noreplace) /etc/tmpfiles.d/zoneminder.conf
|
||||
|
|
|
@ -65,7 +65,7 @@ too much degradation of performance.
|
|||
%setup -q -n ZoneMinder-%{version}
|
||||
|
||||
# Change the following default values
|
||||
./utils/zmeditconfigdata.sh ZM_PATH_ZMS /cgi-bin/zm/nph-zms
|
||||
./utils/zmeditconfigdata.sh ZM_PATH_ZMS /cgi-bin-zm/nph-zms
|
||||
./utils/zmeditconfigdata.sh ZM_OPT_CAMBOZOLA yes
|
||||
./utils/zmeditconfigdata.sh ZM_PATH_SWAP /dev/shm
|
||||
./utils/zmeditconfigdata.sh ZM_UPLOAD_FTP_LOC_DIR /var/spool/zoneminder-upload
|
||||
|
@ -138,7 +138,7 @@ fi
|
|||
|
||||
%files
|
||||
%defattr(-,root,root,-)
|
||||
%doc AUTHORS COPYING README.md distros/fedora/README.Fedora distros/fedora/jscalendar-doc
|
||||
%doc AUTHORS COPYING README.md distros/fedora/README.Fedora distros/fedora/README.https distros/fedora/jscalendar-doc
|
||||
%config %attr(640,root,%{zmgid_final}) /etc/zm/zm.conf
|
||||
%config(noreplace) %attr(644,root,root) /etc/httpd/conf.d/zoneminder.conf
|
||||
%config(noreplace) /etc/tmpfiles.d/zoneminder.conf
|
||||
|
|
|
@ -30,12 +30,9 @@ New installs
|
|||
will need to create the ZoneMinder database and configure a database
|
||||
account for ZoneMinder to use:
|
||||
|
||||
mysql -uroot -p
|
||||
mysql> create database zm;
|
||||
mysql> grant all
|
||||
on zm.* to 'zmuser'@localhost identified by 'zmpass';
|
||||
mysql> exit;
|
||||
mysql -uroot -p < /usr/share/zoneminder/db/zm_create.sql
|
||||
mysql -uroot -p -e "grant all on zm.* to \
|
||||
'zmuser'@localhost identified by 'zmpass';"
|
||||
mysqladmin -uroot -p reload
|
||||
|
||||
The database account credentials, zmuser/zmpass, are arbitrary. Set them to
|
||||
|
@ -117,9 +114,7 @@ New installs
|
|||
have increased. Verify the zmuser database account has been granted all
|
||||
permission to the ZoneMinder database:
|
||||
|
||||
mysql -u root -p
|
||||
mysql> show grants for zmuser@localhost;
|
||||
mysql> exit;
|
||||
mysql -uroot -p -e "show grants for zmuser@localhost;"
|
||||
|
||||
See step 2 of the Installation section to add missing permissions.
|
||||
|
||||
|
|
|
@ -32,12 +32,10 @@ New installs
|
|||
will need to create the ZoneMinder database and configure a database
|
||||
account for ZoneMinder to use:
|
||||
|
||||
mysql -u root -p < /usr/share/zoneminder/db/zm_create.sql
|
||||
mysql -u root -p
|
||||
mysql> grant all
|
||||
on zm.* to 'zmuser'@localhost identified by 'zmpass';
|
||||
mysql> exit;
|
||||
mysqladmin -u root -p reload
|
||||
mysql -uroot -p < /usr/share/zoneminder/db/zm_create.sql
|
||||
mysql -uroot -p -e "grant all on zm.* to \
|
||||
'zmuser'@localhost identified by 'zmpass';"
|
||||
mysqladmin -uroot -p reload
|
||||
|
||||
The database account credentials, zmuser/zmpass, are arbitrary. Set them to
|
||||
anything that suits your envinroment.
|
||||
|
@ -112,9 +110,7 @@ Upgrades
|
|||
have increased. Verify the zmuser database account has been granted all
|
||||
permission to the ZoneMinder database:
|
||||
|
||||
mysql -u root -p
|
||||
mysql> show grants for zmuser@localhost;
|
||||
mysql> exit;
|
||||
mysql -uroot -p -e "show grants for zmuser@localhost;"
|
||||
|
||||
See step 2 of the Installation section to add missing permissions.
|
||||
|
||||
|
|
|
@ -130,7 +130,7 @@ rm -rf %{_docdir}/%{name}-%{version}
|
|||
|
||||
%files
|
||||
%defattr(-,root,root,-)
|
||||
%doc AUTHORS BUGS ChangeLog COPYING LICENSE NEWS README.md distros/redhat/README.CentOS distros/redhat/jscalendar-doc
|
||||
%doc AUTHORS BUGS ChangeLog COPYING LICENSE NEWS README.md distros/redhat/README.CentOS distros/redhat/README.https distros/redhat/jscalendar-doc
|
||||
%doc distros/redhat/local_zoneminder.te
|
||||
%config %attr(640,root,%{zmgid_final}) %{_sysconfdir}/zm.conf
|
||||
%config(noreplace) %attr(644,root,root) %{_sysconfdir}/httpd/conf.d/zoneminder.conf
|
||||
|
|
|
@ -137,7 +137,7 @@ fi
|
|||
|
||||
%files
|
||||
%defattr(-,root,root,-)
|
||||
%doc AUTHORS BUGS ChangeLog COPYING LICENSE NEWS README.md distros/redhat/README.Centos7 distros/redhat/jscalendar-doc
|
||||
%doc AUTHORS BUGS ChangeLog COPYING LICENSE NEWS README.md distros/redhat/README.Centos7 distros/redhat/README.https distros/redhat/jscalendar-doc
|
||||
%doc distros/redhat/local_zoneminder.te
|
||||
%config %attr(640,root,%{zmgid_final}) /etc/zm/zm.conf
|
||||
%config(noreplace) %attr(644,root,root) /etc/httpd/conf.d/zoneminder.conf
|
||||
|
|
|
@ -21,7 +21,7 @@ New installs
|
|||
|
||||
1. Follow the normal instructions for your distro for installing ZoneMinder onto all the ZoneMinder servers in the normal fashion. Only a single database will be needed either as standalone, or on one of the ZoneMinder Servers.
|
||||
|
||||
2. On each ZoneMinder server, edit zm.conf. Find the ZM_DB_HOST variable and set it to the name or ip address of your Database Server.
|
||||
2. On each ZoneMinder server, edit zm.conf. Find the ZM_DB_HOST variable and set it to the name or ip address of your Database Server. Find the ZM_SERVER_HOST and enter a name for this ZoneMinder server. Use a name easily recognizable by you. This name is not used by ZoneMinder for dns or any other form of network conectivity.
|
||||
|
||||
3. Copy the file /usr/share/zoneminder/db/zm_create.sql from one of the ZoneMinder Servers to the machine targeted as the Database Server.
|
||||
|
||||
|
@ -34,9 +34,7 @@ New installs
|
|||
::
|
||||
|
||||
mysql -u root -p < zm_create.sql
|
||||
mysql -u root -p
|
||||
mysql> grant all on zm.* to 'zmuser'@'%' identified by 'zmpass';
|
||||
mysql> exit;
|
||||
mysql -uroot -p -e "grant all on zm.* to 'zmuser'@localhost identified by 'zmpass';"
|
||||
mysqladmin -u root -p reload
|
||||
|
||||
The database account credentials, zmuser/zmpass, are arbitrary. Set them to anything that suits your environment.
|
||||
|
@ -52,6 +50,6 @@ Additionally, you must also edit /usr/share/zoneminder/www/api/app/Config/databa
|
|||
|
||||
NOTE: The location of this folder varies by distro. This folder is often found under "/var/lib/zoneminder/events" for RedHat based distros and "/var/cache/zoneminder/events" for Debain based distros. This folder is NOT a Symbolic Link!
|
||||
|
||||
10. Open your browser and point it to the web console on any of the ZoneMinder Servers (they will all be the same). Open Options, click the Servers tab,and populate this screen with all of your ZoneMinder Servers.
|
||||
10. Open your browser and point it to the web console on any of the ZoneMinder Servers (they will all be the same). Open Options, click the Servers tab,and populate this screen with all of your ZoneMinder Servers. Each server has a field for its name and its hostname. The name is what you used for ZM_SERVER_HOST in step 2. The hostname is the network name or ip address ZoneMinder should use.
|
||||
|
||||
11. When creating a new Monitor, remember to select the server the camera will be assigned to from the Server drop down box.
|
||||
|
|
|
@ -2077,6 +2077,21 @@ our @options =
|
|||
type => $types{integer},
|
||||
category => "upload",
|
||||
},
|
||||
{
|
||||
name => "ZM_UPLOAD_STRICT",
|
||||
default => "no",
|
||||
description => "Require strict host key checking for SFTP uploads",
|
||||
help => qqq("
|
||||
You can require SFTP uploads to verify the host key of the remote server
|
||||
for protection against man-in-the-middle attacks. You will need to add the
|
||||
server's key to the known_hosts file. On most systems, this will be
|
||||
~/.ssh/known_hosts, where ~ is the home directory of the web server running
|
||||
ZoneMinder.
|
||||
"),
|
||||
requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ],
|
||||
type => $types{boolean},
|
||||
category => "upload",
|
||||
},
|
||||
{
|
||||
name => "ZM_UPLOAD_FTP_PASSIVE",
|
||||
default => "yes",
|
||||
|
|
|
@ -173,6 +173,7 @@ sub moveConDown
|
|||
Debug( "Move Down" );
|
||||
my $cmd = "decoder_control.cgi?command=2";
|
||||
$self->sendCmd( $cmd );
|
||||
$self->autoStop( $self->{Monitor}->{AutoStopTimeout} );
|
||||
}
|
||||
|
||||
#Left Arrow
|
||||
|
|
|
@ -0,0 +1,377 @@
|
|||
# ==========================================================================
|
||||
#
|
||||
# ZoneMinder IPCC-7210W IP Control Protocol Module, $Date: 2015-11-18$, $Revision: 0001$
|
||||
# Modified for use with IPCC-7210W on Nov 2015
|
||||
#
|
||||
# This program 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 program 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
#
|
||||
# ==========================================================================
|
||||
#
|
||||
# This module contains the implementation of the
|
||||
# IPCC-7210W IP camera control protocol
|
||||
#
|
||||
package ZoneMinder::Control::IPCC-7210W;
|
||||
|
||||
use 5.006;
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
require ZoneMinder::Base;
|
||||
require ZoneMinder::Control;
|
||||
|
||||
our @ISA = qw(ZoneMinder::Control);
|
||||
|
||||
# ==========================================================================
|
||||
#
|
||||
# IPCC-7210W IP Control Protocol
|
||||
#
|
||||
# ==========================================================================
|
||||
|
||||
use ZoneMinder::Logger qw(:all);
|
||||
use ZoneMinder::Config qw(:all);
|
||||
|
||||
use Time::HiRes qw( usleep );
|
||||
|
||||
sub new
|
||||
{
|
||||
my $class = shift;
|
||||
my $id = shift;
|
||||
my $self = ZoneMinder::Control->new( $id );
|
||||
bless( $self, $class );
|
||||
srand( time() );
|
||||
return $self;
|
||||
}
|
||||
|
||||
our $AUTOLOAD;
|
||||
|
||||
sub AUTOLOAD
|
||||
{
|
||||
my $self = shift;
|
||||
my $class = ref($self) || croak( "$self not object" );
|
||||
my $name = $AUTOLOAD;
|
||||
$name =~ s/.*://;
|
||||
if ( exists($self->{$name}) )
|
||||
{
|
||||
return( $self->{$name} );
|
||||
}
|
||||
Fatal( "Can't access $name member of object of class $class" );
|
||||
}
|
||||
|
||||
sub open
|
||||
{
|
||||
my $self = shift;
|
||||
|
||||
$self->loadMonitor();
|
||||
|
||||
use LWP::UserAgent;
|
||||
$self->{ua} = LWP::UserAgent->new;
|
||||
$self->{ua}->agent( "ZoneMinder Control Agent/".ZoneMinder::Base::ZM_VERSION );
|
||||
|
||||
$self->{state} = 'open';
|
||||
}
|
||||
|
||||
sub close
|
||||
{
|
||||
my $self = shift;
|
||||
$self->{state} = 'closed';
|
||||
}
|
||||
|
||||
sub printMsg
|
||||
{
|
||||
my $self = shift;
|
||||
my $msg = shift;
|
||||
my $msg_len = length($msg);
|
||||
|
||||
Debug( $msg."[".$msg_len."]" );
|
||||
}
|
||||
|
||||
sub sendCmd
|
||||
{
|
||||
my $self = shift;
|
||||
my $cmd = shift;
|
||||
|
||||
my $result = undef;
|
||||
|
||||
printMsg( $cmd, "Tx" );
|
||||
|
||||
#print( "http://$address/$cmd\n" );
|
||||
my $req = HTTP::Request->new( GET=>"http://".$self->{Monitor}->{ControlAddress}."/$cmd".$self->{Monitor}->{ControlDevice} );
|
||||
Info( "http://".$self->{Monitor}->{ControlAddress}."/$cmd".$self->{Monitor}->{ControlDevice} );
|
||||
my $res = $self->{ua}->request($req);
|
||||
|
||||
if ( $res->is_success )
|
||||
{
|
||||
$result = !undef;
|
||||
}
|
||||
else
|
||||
{
|
||||
Error( "Error check failed: '".$res->status_line()."'" );
|
||||
}
|
||||
|
||||
return( $result );
|
||||
}
|
||||
|
||||
|
||||
sub cameraReset
|
||||
{
|
||||
my $self = shift;
|
||||
Debug( "Camera Reset" );
|
||||
my $cmd = "reboot.cgi?";
|
||||
$self->sendCmd( $cmd );
|
||||
}
|
||||
|
||||
|
||||
#Up Arrow
|
||||
sub moveConUp
|
||||
{
|
||||
my $self = shift;
|
||||
my $params = shift;
|
||||
Debug( "Move Up" );
|
||||
my $cmd = "decoder_control.cgi?command=0&onestep=1&";
|
||||
$self->sendCmd( $cmd );
|
||||
my $autostop = $self->getParam( $params, 'autostop', 0 );
|
||||
if ( $autostop && $self->{Monitor}->{AutoStopTimeout} )
|
||||
{
|
||||
usleep( $self->{Monitor}->{AutoStopTimeout} );
|
||||
$self->moveStop( $params );
|
||||
}
|
||||
}
|
||||
|
||||
#Down Arrow
|
||||
sub moveConDown
|
||||
{
|
||||
my $self = shift;
|
||||
my $params = shift;
|
||||
Debug( "Move Down" );
|
||||
my $cmd = "decoder_control.cgi?command=2&onestep=1&";
|
||||
$self->sendCmd( $cmd );
|
||||
my $autostop = $self->getParam( $params, 'autostop', 0 );
|
||||
if ( $autostop && $self->{Monitor}->{AutoStopTimeout} )
|
||||
{
|
||||
usleep( $self->{Monitor}->{AutoStopTimeout} );
|
||||
$self->moveStop( $params );
|
||||
}
|
||||
}
|
||||
|
||||
#Left Arrow
|
||||
sub moveConLeft
|
||||
{
|
||||
my $self = shift;
|
||||
my $params = shift;
|
||||
Debug( "Move Left" );
|
||||
my $cmd = "decoder_control.cgi?command=4&onestep=1&";
|
||||
$self->sendCmd( $cmd );
|
||||
my $autostop = $self->getParam( $params, 'autostop', 0 );
|
||||
if ( $autostop && $self->{Monitor}->{AutoStopTimeout} )
|
||||
{
|
||||
usleep( $self->{Monitor}->{AutoStopTimeout} );
|
||||
$self->moveStop( $params );
|
||||
}
|
||||
}
|
||||
|
||||
#Right Arrow
|
||||
sub moveConRight
|
||||
{
|
||||
my $self = shift;
|
||||
my $params = shift;
|
||||
Debug( "Move Right" );
|
||||
my $cmd = "decoder_control.cgi?command=6&onestep=1&";
|
||||
$self->sendCmd( $cmd );
|
||||
my $autostop = $self->getParam( $params, 'autostop', 0 );
|
||||
if ( $autostop && $self->{Monitor}->{AutoStopTimeout} )
|
||||
{
|
||||
usleep( $self->{Monitor}->{AutoStopTimeout} );
|
||||
$self->moveStop( $params );
|
||||
}
|
||||
}
|
||||
|
||||
#Diagonally Up Right Arrow
|
||||
sub moveConUpRight
|
||||
{
|
||||
my $self = shift;
|
||||
my $params = shift;
|
||||
Debug( "Move Diagonally Up Right" );
|
||||
my $cmd = "decoder_control.cgi?command=91&onestep=1&";
|
||||
$self->sendCmd( $cmd );
|
||||
my $autostop = $self->getParam( $params, 'autostop', 0 );
|
||||
if ( $autostop && $self->{Monitor}->{AutoStopTimeout} )
|
||||
{
|
||||
usleep( $self->{Monitor}->{AutoStopTimeout} );
|
||||
$self->moveStop( $params );
|
||||
}
|
||||
}
|
||||
|
||||
#Diagonally Down Right Arrow
|
||||
sub moveConDownRight
|
||||
{
|
||||
my $self = shift;
|
||||
my $params = shift;
|
||||
Debug( "Move Diagonally Down Right" );
|
||||
my $cmd = "decoder_control.cgi?command=93&onestep=1&";
|
||||
$self->sendCmd( $cmd );
|
||||
my $autostop = $self->getParam( $params, 'autostop', 0 );
|
||||
if ( $autostop && $self->{Monitor}->{AutoStopTimeout} )
|
||||
{
|
||||
usleep( $self->{Monitor}->{AutoStopTimeout} );
|
||||
$self->moveStop( $params );
|
||||
}
|
||||
}
|
||||
|
||||
#Diagonally Up Left Arrow
|
||||
sub moveConUpLeft
|
||||
{
|
||||
my $self = shift;
|
||||
my $params = shift;
|
||||
Debug( "Move Diagonally Up Left" );
|
||||
my $cmd = "decoder_control.cgi?command=90&onestep=1&";
|
||||
$self->sendCmd( $cmd );
|
||||
my $autostop = $self->getParam( $params, 'autostop', 0 );
|
||||
if ( $autostop && $self->{Monitor}->{AutoStopTimeout} )
|
||||
{
|
||||
usleep( $self->{Monitor}->{AutoStopTimeout} );
|
||||
$self->moveStop( $params );
|
||||
}
|
||||
}
|
||||
|
||||
#Diagonally Down Left Arrow
|
||||
sub moveConDownLeft
|
||||
{
|
||||
my $self = shift;
|
||||
my $params = shift;
|
||||
Debug( "Move Diagonally Down Left" );
|
||||
my $cmd = "decoder_control.cgi?command=92&onestep=1&";
|
||||
$self->sendCmd( $cmd );
|
||||
my $autostop = $self->getParam( $params, 'autostop', 0 );
|
||||
if ( $autostop && $self->{Monitor}->{AutoStopTimeout} )
|
||||
{
|
||||
usleep( $self->{Monitor}->{AutoStopTimeout} );
|
||||
$self->moveStop( $params );
|
||||
}
|
||||
}
|
||||
|
||||
#Stop
|
||||
sub moveStop
|
||||
{
|
||||
my $self = shift;
|
||||
Debug( "Move Stop" );
|
||||
my $cmd = "decoder_control.cgi?command=1&onestep=1&";
|
||||
$self->sendCmd( $cmd );
|
||||
}
|
||||
|
||||
#Move Camera to Home Position
|
||||
sub presetHome
|
||||
{
|
||||
my $self = shift;
|
||||
Debug( "Home Preset" );
|
||||
my $cmd = "decoder_control.cgi?command=25&onestep=0&";
|
||||
$self->sendCmd( $cmd );
|
||||
}
|
||||
|
||||
# zoom out
|
||||
sub zoomRelTele
|
||||
{
|
||||
my $self = shift;
|
||||
Debug( "Zoom Tele" );
|
||||
my $cmd = "camera_control.cgi?param=17&value=1&";
|
||||
$self->sendCmd( $cmd );
|
||||
}
|
||||
|
||||
#zoom in
|
||||
sub zoomRelWide
|
||||
{
|
||||
my $self = shift;
|
||||
Debug( "Zoom Wide" );
|
||||
my $cmd = "camera_control.cgi?param=18&value=1&";
|
||||
$self->sendCmd( $cmd );
|
||||
}
|
||||
|
||||
|
||||
#Set preset
|
||||
sub presetSet
|
||||
{
|
||||
my $self = shift;
|
||||
my $params = shift;
|
||||
my $preset = $self->getParam( $params, 'preset' );
|
||||
my $presetCmd = 30 + (($preset-1)*2);
|
||||
Debug( "Set Preset $preset with cmd $presetCmd" );
|
||||
my $cmd = "decoder_control.cgi?command=$presetCmd&onestep=0&sit=$presetCmd&";
|
||||
$self->sendCmd( $cmd );
|
||||
}
|
||||
|
||||
#Goto preset
|
||||
sub presetGoto
|
||||
{
|
||||
my $self = shift;
|
||||
my $params = shift;
|
||||
my $preset = $self->getParam( $params, 'preset' );
|
||||
my $presetCmd = 31 + (($preset-1)*2);
|
||||
Debug( "Goto Preset $preset with cmd $presetCmd" );
|
||||
my $cmd = "decoder_control.cgi?command=$presetCmd&onestep=0&sit=$presetCmd&";
|
||||
$self->sendCmd( $cmd );
|
||||
}
|
||||
|
||||
#Turn IR on
|
||||
sub wake
|
||||
{
|
||||
my $self = shift;
|
||||
Debug( "Wake - IR on" );
|
||||
my $cmd = "camera_control.cgi?param=14&value=1&";
|
||||
$self->sendCmd( $cmd );
|
||||
}
|
||||
|
||||
#Turn IR off
|
||||
sub sleep
|
||||
{
|
||||
my $self = shift;
|
||||
Debug( "Sleep - IR off" );
|
||||
my $cmd = "camera_control.cgi?param=14&value=0&";
|
||||
$self->sendCmd( $cmd );
|
||||
}
|
||||
1;
|
||||
__END__
|
||||
|
||||
|
||||
|
||||
# Below is stub documentation for your module. You'd better edit it!
|
||||
|
||||
=head1 NAME
|
||||
|
||||
ZoneMinder::IPCC-7210W - Perl extension for IPCC-7210W PTZ control
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
use ZoneMinder::Control::IPCC
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
This script provides Pan/Tilt/Zoom control for IPCC-7210W camera.
|
||||
|
||||
=head1 SEE ALSO
|
||||
|
||||
ZoneMinder::Control::Wanscam
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
|
||||
|
||||
=head1 COPYRIGHT AND LICENSE
|
||||
|
||||
Copyright (C) 2001-2008
|
||||
|
||||
This library is free software; you can redistribute it and/or modify
|
||||
it under the same terms as Perl itself, either Perl version 5.8.3 or,
|
||||
at your option, any later version of Perl 5 you may have available.
|
||||
|
||||
=cut
|
|
@ -133,8 +133,10 @@ sub sendCmd
|
|||
|
||||
my $result = undef;
|
||||
|
||||
# Pelco P protocol checksum is created by XOR'ing the first seven bytes in the message
|
||||
# including the first byte, the STX sync packet
|
||||
my $checksum = 0x00;
|
||||
for ( my $i = 1; $i < int(@$cmd); $i++ )
|
||||
for ( my $i = 0; $i < int(@$cmd); $i++ )
|
||||
{
|
||||
$checksum ^= $cmd->[$i];
|
||||
}
|
||||
|
|
|
@ -0,0 +1,399 @@
|
|||
# ==========================================================================
|
||||
#
|
||||
# ZoneMinder Wanscam HW0025 IP Control Protocol Module, $Date: 2009-11-25 09:20:00 +0000 (Wed, 04 Nov 2009) $, $Revision: 0001 $
|
||||
# Copyright (C) 2001-2015 Florian Neumair
|
||||
# Modified for use with Foscam FI8918W IP Camera by Dave Harris
|
||||
# Modified Feb 2011 by Howard Durdle (http://durdl.es/x) to:
|
||||
# fix horizontal panning, add presets and IR on/off
|
||||
# use Control Device field to pass username and password
|
||||
#
|
||||
# This program 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 program 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
#
|
||||
# ==========================================================================
|
||||
#
|
||||
# This module contains the implementation of the Wanscam HW0025 IP camera control
|
||||
# protocol
|
||||
#
|
||||
# Known working Devices:
|
||||
# * Wanscam HW0025
|
||||
# * IPCC-7210W
|
||||
#
|
||||
package ZoneMinder::Control::WanscamHW0025;
|
||||
|
||||
use 5.006;
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
require ZoneMinder::Base;
|
||||
require ZoneMinder::Control;
|
||||
|
||||
our @ISA = qw(ZoneMinder::Control);
|
||||
|
||||
# ==========================================================================
|
||||
#
|
||||
# Wanscam HW0025 IP Control Protocol
|
||||
#
|
||||
# ==========================================================================
|
||||
|
||||
use ZoneMinder::Logger qw(:all);
|
||||
use ZoneMinder::Config qw(:all);
|
||||
|
||||
use Time::HiRes qw( usleep );
|
||||
|
||||
sub new
|
||||
{
|
||||
my $class = shift;
|
||||
my $id = shift;
|
||||
my $self = ZoneMinder::Control->new( $id );
|
||||
bless( $self, $class );
|
||||
srand( time() );
|
||||
return $self;
|
||||
}
|
||||
|
||||
our $AUTOLOAD;
|
||||
|
||||
sub AUTOLOAD
|
||||
{
|
||||
my $self = shift;
|
||||
my $class = ref($self) || croak( "$self not object" );
|
||||
my $name = $AUTOLOAD;
|
||||
$name =~ s/.*://;
|
||||
if ( exists($self->{$name}) )
|
||||
{
|
||||
return( $self->{$name} );
|
||||
}
|
||||
Fatal( "Can't access $name member of object of class $class" );
|
||||
}
|
||||
|
||||
sub open
|
||||
{
|
||||
my $self = shift;
|
||||
|
||||
$self->loadMonitor();
|
||||
|
||||
use LWP::UserAgent;
|
||||
$self->{ua} = LWP::UserAgent->new;
|
||||
$self->{ua}->agent( "ZoneMinder Control Agent/".ZoneMinder::Base::ZM_VERSION );
|
||||
|
||||
$self->{state} = 'open';
|
||||
}
|
||||
|
||||
sub close
|
||||
{
|
||||
my $self = shift;
|
||||
$self->{state} = 'closed';
|
||||
}
|
||||
|
||||
sub printMsg
|
||||
{
|
||||
my $self = shift;
|
||||
my $msg = shift;
|
||||
my $msg_len = length($msg);
|
||||
|
||||
Debug( $msg."[".$msg_len."]" );
|
||||
}
|
||||
|
||||
sub sendCmd
|
||||
{
|
||||
my $self = shift;
|
||||
my $cmd = shift;
|
||||
|
||||
my $result = undef;
|
||||
|
||||
printMsg( $cmd, "Tx" );
|
||||
|
||||
#print( "http://$address/$cmd\n" );
|
||||
my $req = HTTP::Request->new( GET=>"http://".$self->{Monitor}->{ControlAddress}."/$cmd".$self->{Monitor}->{ControlDevice} );
|
||||
Info( "http://".$self->{Monitor}->{ControlAddress}."/$cmd".$self->{Monitor}->{ControlDevice} );
|
||||
my $res = $self->{ua}->request($req);
|
||||
|
||||
if ( $res->is_success )
|
||||
{
|
||||
$result = !undef;
|
||||
}
|
||||
else
|
||||
{
|
||||
Error( "Error check failed: '".$res->status_line()."'" );
|
||||
}
|
||||
|
||||
return( $result );
|
||||
}
|
||||
|
||||
|
||||
sub cameraReset
|
||||
{
|
||||
my $self = shift;
|
||||
Debug( "Camera Reset" );
|
||||
my $cmd = "reboot.cgi?";
|
||||
$self->sendCmd( $cmd );
|
||||
}
|
||||
|
||||
#Up Arrow
|
||||
sub moveConUp
|
||||
{
|
||||
my $self = shift;
|
||||
my $params = shift;
|
||||
Debug( "Move Up" );
|
||||
my $cmd = "decoder_control.cgi?command=0&onestep=1&";
|
||||
$self->sendCmd( $cmd );
|
||||
my $autostop = $self->getParam( $params, 'autostop', 0 );
|
||||
if ( $autostop && $self->{Monitor}->{AutoStopTimeout} )
|
||||
{
|
||||
usleep( $self->{Monitor}->{AutoStopTimeout} );
|
||||
$self->moveStop( $params );
|
||||
}
|
||||
}
|
||||
|
||||
#Down Arrow
|
||||
sub moveConDown
|
||||
{
|
||||
my $self = shift;
|
||||
my $params = shift;
|
||||
Debug( "Move Down" );
|
||||
my $cmd = "decoder_control.cgi?command=2&onestep=1&";
|
||||
$self->sendCmd( $cmd );
|
||||
my $autostop = $self->getParam( $params, 'autostop', 0 );
|
||||
if ( $autostop && $self->{Monitor}->{AutoStopTimeout} )
|
||||
{
|
||||
usleep( $self->{Monitor}->{AutoStopTimeout} );
|
||||
$self->moveStop( $params );
|
||||
}
|
||||
}
|
||||
|
||||
#Left Arrow
|
||||
sub moveConLeft
|
||||
{
|
||||
my $self = shift;
|
||||
my $params = shift;
|
||||
Debug( "Move Left" );
|
||||
my $cmd = "decoder_control.cgi?command=4&onestep=1&";
|
||||
$self->sendCmd( $cmd );
|
||||
my $autostop = $self->getParam( $params, 'autostop', 0 );
|
||||
if ( $autostop && $self->{Monitor}->{AutoStopTimeout} )
|
||||
{
|
||||
usleep( $self->{Monitor}->{AutoStopTimeout} );
|
||||
$self->moveStop( $params );
|
||||
}
|
||||
}
|
||||
|
||||
#Right Arrow
|
||||
sub moveConRight
|
||||
{
|
||||
my $self = shift;
|
||||
my $params = shift;
|
||||
Debug( "Move Right" );
|
||||
my $cmd = "decoder_control.cgi?command=6&onestep=1&";
|
||||
$self->sendCmd( $cmd );
|
||||
my $autostop = $self->getParam( $params, 'autostop', 0 );
|
||||
if ( $autostop && $self->{Monitor}->{AutoStopTimeout} )
|
||||
{
|
||||
usleep( $self->{Monitor}->{AutoStopTimeout} );
|
||||
$self->moveStop( $params );
|
||||
}
|
||||
}
|
||||
|
||||
#Diagonally Up Right Arrow
|
||||
sub moveConUpRight
|
||||
{
|
||||
my $self = shift;
|
||||
my $params = shift;
|
||||
Debug( "Move Diagonally Up Right" );
|
||||
my $cmd = "decoder_control.cgi?command=91&onestep=1&";
|
||||
$self->sendCmd( $cmd );
|
||||
my $autostop = $self->getParam( $params, 'autostop', 0 );
|
||||
if ( $autostop && $self->{Monitor}->{AutoStopTimeout} )
|
||||
{
|
||||
usleep( $self->{Monitor}->{AutoStopTimeout} );
|
||||
$self->moveStop( $params );
|
||||
}
|
||||
}
|
||||
|
||||
#Diagonally Down Right Arrow
|
||||
sub moveConDownRight
|
||||
{
|
||||
my $self = shift;
|
||||
my $params = shift;
|
||||
Debug( "Move Diagonally Down Right" );
|
||||
my $cmd = "decoder_control.cgi?command=93&onestep=1&";
|
||||
$self->sendCmd( $cmd );
|
||||
my $autostop = $self->getParam( $params, 'autostop', 0 );
|
||||
if ( $autostop && $self->{Monitor}->{AutoStopTimeout} )
|
||||
{
|
||||
usleep( $self->{Monitor}->{AutoStopTimeout} );
|
||||
$self->moveStop( $params );
|
||||
}
|
||||
}
|
||||
|
||||
#Diagonally Up Left Arrow
|
||||
sub moveConUpLeft
|
||||
{
|
||||
my $self = shift;
|
||||
my $params = shift;
|
||||
Debug( "Move Diagonally Up Left" );
|
||||
my $cmd = "decoder_control.cgi?command=90&onestep=1&";
|
||||
$self->sendCmd( $cmd );
|
||||
my $autostop = $self->getParam( $params, 'autostop', 0 );
|
||||
if ( $autostop && $self->{Monitor}->{AutoStopTimeout} )
|
||||
{
|
||||
usleep( $self->{Monitor}->{AutoStopTimeout} );
|
||||
$self->moveStop( $params );
|
||||
}
|
||||
}
|
||||
|
||||
#Diagonally Down Left Arrow
|
||||
sub moveConDownLeft
|
||||
{
|
||||
my $self = shift;
|
||||
my $params = shift;
|
||||
Debug( "Move Diagonally Down Left" );
|
||||
my $cmd = "decoder_control.cgi?command=92&onestep=1&";
|
||||
$self->sendCmd( $cmd );
|
||||
my $autostop = $self->getParam( $params, 'autostop', 0 );
|
||||
if ( $autostop && $self->{Monitor}->{AutoStopTimeout} )
|
||||
{
|
||||
usleep( $self->{Monitor}->{AutoStopTimeout} );
|
||||
$self->moveStop( $params );
|
||||
}
|
||||
}
|
||||
|
||||
#Stop
|
||||
sub moveStop
|
||||
{
|
||||
my $self = shift;
|
||||
Debug( "Move Stop" );
|
||||
my $cmd = "decoder_control.cgi?command=1&onestep=1&";
|
||||
$self->sendCmd( $cmd );
|
||||
}
|
||||
|
||||
#Move Camera to Home Position
|
||||
sub presetHome
|
||||
{
|
||||
my $self = shift;
|
||||
Debug( "Home Preset" );
|
||||
my $cmd = "decoder_control.cgi?command=25&onestep=0&";
|
||||
$self->sendCmd( $cmd );
|
||||
}
|
||||
|
||||
# zoom out
|
||||
sub zoomRelTele
|
||||
{
|
||||
my $self = shift;
|
||||
Debug( "Zoom Tele" );
|
||||
my $cmd = "camera_control.cgi?param=17&value=1&";
|
||||
$self->sendCmd( $cmd );
|
||||
}
|
||||
|
||||
#zoom in
|
||||
sub zoomRelWide
|
||||
{
|
||||
my $self = shift;
|
||||
Debug( "Zoom Wide" );
|
||||
my $cmd = "camera_control.cgi?param=18&value=1&";
|
||||
$self->sendCmd( $cmd );
|
||||
}
|
||||
|
||||
|
||||
#Set preset
|
||||
sub presetSet
|
||||
{
|
||||
my $self = shift;
|
||||
my $params = shift;
|
||||
my $preset = $self->getParam( $params, 'preset' );
|
||||
my $presetCmd = 30 + (($preset-1)*2);
|
||||
Debug( "Set Preset $preset with cmd $presetCmd" );
|
||||
my $cmd = "decoder_control.cgi?command=$presetCmd&onestep=0&sit=$presetCmd&";
|
||||
$self->sendCmd( $cmd );
|
||||
}
|
||||
|
||||
#Goto preset
|
||||
sub presetGoto
|
||||
{
|
||||
my $self = shift;
|
||||
my $params = shift;
|
||||
my $preset = $self->getParam( $params, 'preset' );
|
||||
my $presetCmd = 31 + (($preset-1)*2);
|
||||
Debug( "Goto Preset $preset with cmd $presetCmd" );
|
||||
my $cmd = "decoder_control.cgi?command=$presetCmd&onestep=0&sit=$presetCmd&";
|
||||
$self->sendCmd( $cmd );
|
||||
}
|
||||
|
||||
#Turn IR on
|
||||
sub wake
|
||||
{
|
||||
my $self = shift;
|
||||
Debug( "Wake - IR on" );
|
||||
my $cmd = "camera_control.cgi?param=14&value=1&";
|
||||
$self->sendCmd( $cmd );
|
||||
}
|
||||
|
||||
#Turn IR off
|
||||
sub sleep
|
||||
{
|
||||
my $self = shift;
|
||||
Debug( "Sleep - IR off" );
|
||||
my $cmd = "camera_control.cgi?param=14&value=0&";
|
||||
$self->sendCmd( $cmd );
|
||||
}
|
||||
1;
|
||||
__END__
|
||||
# Below is stub documentation for your module. You'd better edit it!
|
||||
|
||||
=head1 NAME
|
||||
|
||||
ZoneMinder::Database - Perl extension for blah blah blah
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
use ZoneMinder::Control::Wanscam
|
||||
blah blah blah
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Stub documentation for ZoneMinder, created by h2xs. It looks like the
|
||||
author of the extension was negligent enough to leave the stub
|
||||
unedited.
|
||||
|
||||
Blah blah blah.
|
||||
=head2 EXPORT
|
||||
|
||||
None by default.
|
||||
|
||||
|
||||
|
||||
=head1 SEE ALSO
|
||||
|
||||
Mention other useful documentation such as the documentation of
|
||||
related modules or operating system documentation (such as man pages
|
||||
in UNIX), or any relevant external documentation such as RFCs or
|
||||
standards.
|
||||
|
||||
If you have a mailing list set up for your module, mention it here.
|
||||
|
||||
If you have a web site set up for your module, mention it here.
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Philip Coombes, <philip.coombes@zoneminder.com>
|
||||
|
||||
=head1 COPYRIGHT AND LICENSE
|
||||
|
||||
Copyright (C) 2001-2008 Philip Coombes
|
||||
|
||||
This library is free software; you can redistribute it and/or modify
|
||||
it under the same terms as Perl itself, either Perl version 5.8.3 or,
|
||||
at your option, any later version of Perl 5 you may have available.
|
||||
|
||||
|
||||
=cut
|
|
@ -530,7 +530,8 @@ sub uploadArchFile
|
|||
if $Config{ZM_UPLOAD_PORT};
|
||||
$sftpOptions{timeout} = $Config{ZM_UPLOAD_TIMEOUT}
|
||||
if $Config{ZM_UPLOAD_TIMEOUT};
|
||||
$sftpOptions{more} = [ '-o'=>'StrictHostKeyChecking=no' ];
|
||||
$sftpOptions{more} = [ '-o'=>'StrictHostKeyChecking=no' ]
|
||||
if ! $Config{ZM_UPLOAD_STRICT};
|
||||
$Net::SFTP::Foreign::debug = -1
|
||||
if $Config{ZM_UPLOAD_DEBUG};
|
||||
my $sftp = Net::SFTP::Foreign->new( $Config{ZM_UPLOAD_HOST}, %sftpOptions );
|
||||
|
|
|
@ -504,22 +504,11 @@ sub handleMessage
|
|||
Info( "Set monitor to $state\n" );
|
||||
if ( $delay )
|
||||
{
|
||||
my $action_time = time()+$delay;
|
||||
my $action_text = $id."|".( ($state eq "enable")
|
||||
? "disable"
|
||||
: "enable"
|
||||
)
|
||||
;
|
||||
my $action_array = $actions{$action_time};
|
||||
if ( !$action_array )
|
||||
{
|
||||
$action_array = $actions{$action_time} = [];
|
||||
}
|
||||
push( @$action_array, { connection=>$connection,
|
||||
message=>$action_text
|
||||
}
|
||||
);
|
||||
Debug( "Added timed event '$action_text', expires at $action_time (+$delay secs)\n" );
|
||||
);
|
||||
handleDelay($delay, $connection, $action_text);
|
||||
}
|
||||
}
|
||||
elsif ( $action =~ /^(on|off)(?:[ \+](\d+))?$/ )
|
||||
|
@ -534,43 +523,33 @@ sub handleMessage
|
|||
zmTriggerEventOn( $monitor, $score, $cause, $text );
|
||||
zmTriggerShowtext( $monitor, $showtext ) if defined($showtext);
|
||||
Info( "Trigger '$trigger' '$cause'\n" );
|
||||
if ( $delay )
|
||||
{
|
||||
my $action_text = $id."|cancel";
|
||||
handleDelay($delay, $connection, $action_text);
|
||||
}
|
||||
}
|
||||
elsif ( $trigger eq "off" )
|
||||
{
|
||||
my $last_event = zmGetLastEvent( $monitor );
|
||||
zmTriggerEventOff( $monitor );
|
||||
zmTriggerShowtext( $monitor, $showtext ) if defined($showtext);
|
||||
Info( "Trigger '$trigger'\n" );
|
||||
# Wait til it's finished
|
||||
while( zmInAlarm( $monitor )
|
||||
&& ($last_event == zmGetLastEvent( $monitor ))
|
||||
)
|
||||
if ( $delay )
|
||||
{
|
||||
# Tenth of a second
|
||||
usleep( 100000 );
|
||||
}
|
||||
my $action_text = $id."|off|0|".$cause."|".$text;
|
||||
handleDelay($delay, $connection, $action_text);
|
||||
} else {
|
||||
my $last_event = zmGetLastEvent( $monitor );
|
||||
zmTriggerEventOff( $monitor );
|
||||
zmTriggerShowtext( $monitor, $showtext ) if defined($showtext);
|
||||
Info( "Trigger '$trigger'\n" );
|
||||
# Wait til it's finished
|
||||
while( zmInAlarm( $monitor )
|
||||
&& ($last_event == zmGetLastEvent( $monitor ))
|
||||
)
|
||||
{
|
||||
# Tenth of a second
|
||||
usleep( 100000 );
|
||||
}
|
||||
zmTriggerEventCancel( $monitor );
|
||||
}
|
||||
else
|
||||
{
|
||||
Info( "Trigger '$trigger'\n" );
|
||||
zmTriggerEventCancel( $monitor );
|
||||
}
|
||||
if ( $delay )
|
||||
{
|
||||
my $action_time = time()+$delay;
|
||||
#my $action_text = $id."|cancel|0|".$cause."|".$text;
|
||||
my $action_text = $id."|cancel";
|
||||
my $action_array = $actions{$action_time};
|
||||
if ( !$action_array )
|
||||
{
|
||||
$action_array = $actions{$action_time} = [];
|
||||
}
|
||||
push( @$action_array, { connection=>$connection,
|
||||
message=>$action_text
|
||||
}
|
||||
);
|
||||
Debug( "Added timed event '$action_text', expires at $action_time (+$delay secs)\n" );
|
||||
}
|
||||
}
|
||||
elsif( $action eq "cancel" )
|
||||
|
@ -590,5 +569,23 @@ sub handleMessage
|
|||
}
|
||||
} # end sub handleMessage
|
||||
|
||||
sub handleDelay
|
||||
{
|
||||
my $delay = shift;
|
||||
my $connection = shift;
|
||||
my $action_text = shift;
|
||||
|
||||
my $action_time = time()+$delay;
|
||||
my $action_array = $actions{$action_time};
|
||||
if ( !$action_array )
|
||||
{
|
||||
$action_array = $actions{$action_time} = [];
|
||||
}
|
||||
push( @$action_array, { connection=>$connection,
|
||||
message=>$action_text
|
||||
}
|
||||
);
|
||||
Debug( "Added timed event '$action_text', expires at $action_time (+$delay secs)\n" );
|
||||
}
|
||||
1;
|
||||
__END__
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
|
||||
=head1 NAME
|
||||
|
||||
zmupdate.pl - check and upgrade Zoneminer database
|
||||
zmupdate.pl - check and upgrade ZoneMinder database
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
|
|
|
@ -115,6 +115,7 @@ void zmLoadConfig()
|
|||
if ( ! staticConfig.SERVER_ID ) {
|
||||
if ( ! staticConfig.SERVER_NAME.empty() ) {
|
||||
|
||||
Debug( 1, "Fetching ZM_SERVER_ID For Name = %s", staticConfig.SERVER_NAME.c_str() );
|
||||
std::string sql = stringtf("SELECT Id FROM Servers WHERE Name='%s'", staticConfig.SERVER_NAME.c_str() );
|
||||
if ( MYSQL_ROW dbrow = zmDbFetchOne( sql.c_str() ) ) {
|
||||
staticConfig.SERVER_ID = atoi(dbrow[0]);
|
||||
|
@ -124,6 +125,7 @@ void zmLoadConfig()
|
|||
|
||||
} // end if has SERVER_NAME
|
||||
} else if ( staticConfig.SERVER_NAME.empty() ) {
|
||||
Debug( 1, "Fetching ZM_SERVER_NAME For Id = %d", staticConfig.SERVER_ID );
|
||||
std::string sql = stringtf("SELECT Name FROM Servers WHERE Id='%d'", staticConfig.SERVER_ID );
|
||||
|
||||
if ( MYSQL_ROW dbrow = zmDbFetchOne( sql.c_str() ) ) {
|
||||
|
@ -133,6 +135,11 @@ void zmLoadConfig()
|
|||
}
|
||||
|
||||
}
|
||||
if ( ! staticConfig.SERVER_ID ) {
|
||||
Info( "No Server ID or Name specified in config. Not using Multi-Server Mode." );
|
||||
} else {
|
||||
Info( "Server is %d: using Multi-Server Mode.", staticConfig.SERVER_ID );
|
||||
}
|
||||
}
|
||||
|
||||
StaticConfig staticConfig;
|
||||
|
|
|
@ -1095,6 +1095,11 @@ void EventStream::processCommand( const CmdMsg *msg )
|
|||
Debug( 1, "Got QUERY command, sending STATUS" );
|
||||
break;
|
||||
}
|
||||
case CMD_QUIT :
|
||||
{
|
||||
Info ("User initiated exit - CMD_QUIT");
|
||||
break;
|
||||
}
|
||||
default :
|
||||
{
|
||||
// Do nothing, for now
|
||||
|
@ -1132,6 +1137,9 @@ void EventStream::processCommand( const CmdMsg *msg )
|
|||
exit( -1 );
|
||||
}
|
||||
}
|
||||
// quit after sending a status, if this was a quit request
|
||||
if ((MsgCommand)msg->msg_data[0]==CMD_QUIT)
|
||||
exit(0);
|
||||
|
||||
updateFrameRate( (double)event_data->frame_count/event_data->duration );
|
||||
}
|
||||
|
|
|
@ -2062,9 +2062,9 @@ int Monitor::LoadLocalMonitors( const char *device, Monitor **&monitors, Purpose
|
|||
sql += "'";
|
||||
}
|
||||
if ( staticConfig.SERVER_ID ) {
|
||||
Debug( 1, "Server ID %d", staticConfig.SERVER_ID );
|
||||
sql += stringtf( " AND ServerId=%d", staticConfig.SERVER_ID );
|
||||
}
|
||||
Debug( 1, "Loading Local Monitors with %s", sql.c_str() );
|
||||
|
||||
MYSQL_RES *result = zmDbFetch( sql.c_str() );
|
||||
if ( !result ) {
|
||||
|
@ -2246,6 +2246,7 @@ int Monitor::LoadRemoteMonitors( const char *protocol, const char *host, const c
|
|||
sql += stringtf(" AND Protocol = '%s' and Host = '%s' and Port = '%s' and Path = '%s'", protocol, host, port, path );
|
||||
}
|
||||
|
||||
Debug( 1, "Loading Remote Monitors with %s", sql.c_str() );
|
||||
MYSQL_RES *result = zmDbFetch( sql.c_str() );
|
||||
if ( !result ) {
|
||||
Error( "Can't use query result: %s", mysql_error( &dbconn ) );
|
||||
|
@ -2426,6 +2427,7 @@ int Monitor::LoadFileMonitors( const char *file, Monitor **&monitors, Purpose pu
|
|||
if ( staticConfig.SERVER_ID ) {
|
||||
sql += stringtf( " AND ServerId=%d", staticConfig.SERVER_ID );
|
||||
}
|
||||
Debug( 1, "Loading File Monitors with %s", sql.c_str() );
|
||||
MYSQL_RES *result = zmDbFetch( sql.c_str() );
|
||||
if ( !result )
|
||||
{
|
||||
|
@ -2570,6 +2572,7 @@ int Monitor::LoadFfmpegMonitors( const char *file, Monitor **&monitors, Purpose
|
|||
if ( staticConfig.SERVER_ID ) {
|
||||
sql += stringtf( " AND ServerId=%d", staticConfig.SERVER_ID );
|
||||
}
|
||||
Debug( 1, "Loading FFMPEG Monitors with %s", sql.c_str() );
|
||||
MYSQL_RES *result = zmDbFetch( sql.c_str() );
|
||||
if ( ! result ) {
|
||||
Error( "Cannot load FfmpegMonitors" );
|
||||
|
@ -3937,6 +3940,11 @@ void MonitorStream::processCommand( const CmdMsg *msg )
|
|||
Debug( 1, "Got SCALE command, to %d", scale );
|
||||
break;
|
||||
}
|
||||
case CMD_QUIT :
|
||||
{
|
||||
Info ("User initiated exit - CMD_QUIT");
|
||||
break;
|
||||
}
|
||||
case CMD_QUERY :
|
||||
{
|
||||
Debug( 1, "Got QUERY command, sending STATUS" );
|
||||
|
@ -4002,6 +4010,10 @@ void MonitorStream::processCommand( const CmdMsg *msg )
|
|||
}
|
||||
}
|
||||
|
||||
// quit after sending a status, if this was a quit request
|
||||
if ((MsgCommand)msg->msg_data[0]==CMD_QUIT)
|
||||
exit(0);
|
||||
|
||||
updateFrameRate( monitor->GetFPS() );
|
||||
}
|
||||
|
||||
|
|
|
@ -57,7 +57,7 @@ protected:
|
|||
} DataMsg;
|
||||
|
||||
typedef enum { MSG_CMD=1, MSG_DATA_WATCH, MSG_DATA_EVENT } MsgType;
|
||||
typedef enum { CMD_NONE=0, CMD_PAUSE, CMD_PLAY, CMD_STOP, CMD_FASTFWD, CMD_SLOWFWD, CMD_SLOWREV, CMD_FASTREV, CMD_ZOOMIN, CMD_ZOOMOUT, CMD_PAN, CMD_SCALE, CMD_PREV, CMD_NEXT, CMD_SEEK, CMD_VARPLAY, CMD_GET_IMAGE, CMD_QUERY=99 } MsgCommand;
|
||||
typedef enum { CMD_NONE=0, CMD_PAUSE, CMD_PLAY, CMD_STOP, CMD_FASTFWD, CMD_SLOWFWD, CMD_SLOWREV, CMD_FASTREV, CMD_ZOOMIN, CMD_ZOOMOUT, CMD_PAN, CMD_SCALE, CMD_PREV, CMD_NEXT, CMD_SEEK, CMD_VARPLAY, CMD_GET_IMAGE, CMD_QUIT, CMD_QUERY=99 } MsgCommand;
|
||||
|
||||
protected:
|
||||
Monitor *monitor;
|
||||
|
|
|
@ -1,4 +1,14 @@
|
|||
#!/bin/bash
|
||||
|
||||
if [ "$1" == "clean" ]; then
|
||||
|
||||
read -p "Do you really want to delete existing packages? [y/N]"
|
||||
[[ $REPLY == [yY] ]] && { rm -fr zoneminder*.build zoneminder*.changes zoneminder*.deb; echo "Existing package files deleted"; } || { echo "Packages have NOT been deleted"; }
|
||||
exit;
|
||||
|
||||
fi
|
||||
|
||||
|
||||
DATE=`date -R`
|
||||
DISTRO=$1
|
||||
SNAPSHOT=$2
|
||||
|
@ -6,17 +16,24 @@ if [ "$SNAPSHOT" == "stable" ]; then
|
|||
SNAPSHOT="";
|
||||
fi;
|
||||
|
||||
|
||||
TYPE=$3
|
||||
if [ "$TYPE" == "" ]; then
|
||||
TYPE="source";
|
||||
fi;
|
||||
BRANCH=$4
|
||||
|
||||
|
||||
if [ ! -d 'zoneminder_release' ]; then
|
||||
git clone https://github.com/ZoneMinder/ZoneMinder.git zoneminder_release
|
||||
fi;
|
||||
if [ "$BRANCH" != "" ]; then
|
||||
cd zoneminder_release
|
||||
if [ "$BRANCH" == "stable" ]; then
|
||||
BRANCH=$(git describe --tags $(git rev-list --tags --max-count=1));
|
||||
echo "Latest stable branch is $BRANCH";
|
||||
|
||||
fi
|
||||
git checkout $BRANCH
|
||||
cd ../
|
||||
fi;
|
||||
|
@ -35,12 +52,18 @@ else
|
|||
ln -sf distros/ubuntu1504_cmake debian
|
||||
fi;
|
||||
|
||||
if [ -z `hostname -d` ] ; then
|
||||
AUTHOR="`getent passwd $USER | cut -d ':' -f 5 | cut -d ',' -f 1` <`whoami`@`hostname`.local>"
|
||||
else
|
||||
AUTHOR="`getent passwd $USER | cut -d ':' -f 5 | cut -d ',' -f 1` <`whoami`@`hostname`>"
|
||||
fi
|
||||
|
||||
cat <<EOF > debian/changelog
|
||||
zoneminder ($VERSION-$DISTRO-$SNAPSHOT) $DISTRO; urgency=medium
|
||||
|
||||
*
|
||||
|
||||
-- Isaac Connor <iconnor@connortechnology.com> $DATE
|
||||
-- $AUTHOR $DATE
|
||||
|
||||
EOF
|
||||
#rm -rf .git
|
||||
|
@ -51,11 +74,18 @@ EOF
|
|||
if [ $TYPE == "binary" ]; then
|
||||
debuild
|
||||
else
|
||||
debuild -S -sa
|
||||
if [ $TYPE == "local" ]; then
|
||||
debuild -i -us -uc -b
|
||||
else
|
||||
debuild -S -sa
|
||||
fi;
|
||||
fi;
|
||||
|
||||
cd ../
|
||||
echo "about to delete zoneminder_$VERSION-$DISTRO-$SNAPSHOT.orig. Hit enter to continue."
|
||||
read delete
|
||||
rm -fr zoneminder_$VERSION-$DISTRO-$SNAPSHOT.orig
|
||||
|
||||
read -p "Do you want to keep the checked out version of Zoneminder (incase you want to modify it later) [y/N]"
|
||||
[[ $REPLY == [yY] ]] && { mv zoneminder_$VERSION-$DISTRO-$SNAPSHOT.orig zoneminder_release; echo "The checked out copy is preserved in zoneminder_release"; } || { rm -fr zoneminder_$VERSION-$DISTRO-$SNAPSHOT.orig; echo "The checked out copy has been deleted"; }
|
||||
echo "Done!"
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -792,7 +792,7 @@ function getFormChanges( $values, $newValues, $types=false, $columns=false )
|
|||
{
|
||||
if ( !isset($values[$key]) || ($values[$key] != $value) )
|
||||
{
|
||||
$changes[$key] = "$key = ".dbEscape($value);
|
||||
$changes[$key] = "$key = ".dbEscape(trim($value));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
|
||||
<?php
|
||||
//
|
||||
// ZoneMinder web UK English language file, $Date$, $Revision$
|
||||
|
@ -50,7 +51,7 @@
|
|||
// do this by default, uncomment this if required.
|
||||
//
|
||||
// Example
|
||||
header( "Content-Type: text/html; charset=koi8-r" );
|
||||
header( "Content-Type: text/html; charset=utf-8" );
|
||||
|
||||
// You may need to change your locale here if your default one is incorrect for the
|
||||
// language described in this file, or if you have multiple languages supported.
|
||||
|
@ -71,60 +72,60 @@ header( "Content-Type: text/html; charset=koi8-r" );
|
|||
|
||||
// Simple String Replacements
|
||||
$SLANG = array(
|
||||
'24BitColour' => '24 битный цвет',
|
||||
'32BitColour' => '32 битный цвет', // Added - 2011-06-15
|
||||
'8BitGrey' => '256 оттенков серого',
|
||||
'24BitColour' => '24 битный цвет',
|
||||
'32BitColour' => '32 битный цвет', // Added - 2011-06-15
|
||||
'8BitGrey' => '256 оттенков серого',
|
||||
'Action' => 'Action',
|
||||
'Actual' => 'Действительный',
|
||||
'Actual' => 'Действительный',
|
||||
'AddNewControl' => 'Add New Control',
|
||||
'AddNewMonitor' => 'Добавить монитор',
|
||||
'AddNewUser' => 'Добавить пользователя',
|
||||
'AddNewZone' => 'Добавить зону',
|
||||
'Alarm' => 'Тревога',
|
||||
'AlarmBrFrames' => 'Кадры<br/>тревоги',
|
||||
'AlarmFrame' => 'Кадр тревоги',
|
||||
'AddNewMonitor' => 'Добавить монитор',
|
||||
'AddNewUser' => 'Добавить пользователя',
|
||||
'AddNewZone' => 'Добавить зону',
|
||||
'Alarm' => 'Тревога',
|
||||
'AlarmBrFrames' => 'Кадры<br/>тревоги',
|
||||
'AlarmFrame' => 'Кадр тревоги',
|
||||
'AlarmFrameCount' => 'Alarm Frame Count',
|
||||
'AlarmLimits' => 'Гран. зоны трев.',
|
||||
'AlarmLimits' => 'Гран. зоны трев.',
|
||||
'AlarmMaximumFPS' => 'Alarm Maximum FPS',
|
||||
'AlarmPx' => 'Пкс трев.',
|
||||
'AlarmPx' => 'Пкс трев.',
|
||||
'AlarmRGBUnset' => 'You must set an alarm RGB colour',
|
||||
'AlarmRefImageBlendPct'=> 'Alarm Reference Image Blend %ge', // Added - 2015-04-18
|
||||
'Alert' => 'Настороже',
|
||||
'All' => 'Все',
|
||||
'Alert' => 'Настороже',
|
||||
'All' => 'Все',
|
||||
'AnalysisFPS' => 'Analysis FPS', // Added - 2015-07-22
|
||||
'AnalysisUpdateDelay' => 'Analysis Update Delay', // Added - 2015-07-23
|
||||
'Apply' => 'Применить',
|
||||
'ApplyingStateChange' => 'Состояние сервиса изменяется',
|
||||
'ArchArchived' => 'Только в архиве',
|
||||
'ArchUnarchived' => 'Только не в архиве',
|
||||
'Archive' => 'Архив',
|
||||
'Apply' => 'Применить',
|
||||
'ApplyingStateChange' => 'Состояние сервиса изменяется',
|
||||
'ArchArchived' => 'Только в архиве',
|
||||
'ArchUnarchived' => 'Только не в архиве',
|
||||
'Archive' => 'Архив',
|
||||
'Archived' => 'Archived',
|
||||
'Area' => 'Area',
|
||||
'AreaUnits' => 'Area (px/%)',
|
||||
'AttrAlarmFrames' => 'Кол-во кадров тревоги',
|
||||
'AttrArchiveStatus' => 'Статус архивации',
|
||||
'AttrAvgScore' => 'Сред. оценка',
|
||||
'AttrAlarmFrames' => 'Кол-во кадров тревоги',
|
||||
'AttrArchiveStatus' => 'Статус архивации',
|
||||
'AttrAvgScore' => 'Сред. оценка',
|
||||
'AttrCause' => 'Cause',
|
||||
'AttrDate' => 'Дата',
|
||||
'AttrDateTime' => 'Дата/Время',
|
||||
'AttrDate' => 'Дата',
|
||||
'AttrDateTime' => 'Дата/Время',
|
||||
'AttrDiskBlocks' => 'Disk Blocks',
|
||||
'AttrDiskPercent' => 'Disk Percent',
|
||||
'AttrDuration' => 'Длительность',
|
||||
'AttrFrames' => 'Кол-во кадров',
|
||||
'AttrDuration' => 'Длительность',
|
||||
'AttrFrames' => 'Кол-во кадров',
|
||||
'AttrId' => 'Id',
|
||||
'AttrMaxScore' => 'Макс. оценка',
|
||||
'AttrMonitorId' => 'Id Монитора',
|
||||
'AttrMonitorName' => 'Название Монитора',
|
||||
'AttrMaxScore' => 'Макс. оценка',
|
||||
'AttrMonitorId' => 'Id Монитора',
|
||||
'AttrMonitorName' => 'Название Монитора',
|
||||
'AttrName' => 'Name',
|
||||
'AttrNotes' => 'Notes',
|
||||
'AttrSystemLoad' => 'System Load',
|
||||
'AttrTime' => 'Время',
|
||||
'AttrTotalScore' => 'Сумм. оценка',
|
||||
'AttrWeekday' => 'День недели',
|
||||
'AttrTime' => 'Время',
|
||||
'AttrTotalScore' => 'Сумм. оценка',
|
||||
'AttrWeekday' => 'День недели',
|
||||
'Auto' => 'Auto',
|
||||
'AutoStopTimeout' => 'Auto Stop Timeout',
|
||||
'Available' => 'Available', // Added - 2009-03-31
|
||||
'AvgBrScore' => 'Сред.<br/>оценка',
|
||||
'AvgBrScore' => 'Сред.<br/>оценка',
|
||||
'Background' => 'Background',
|
||||
'BackgroundFilter' => 'Run filter in background',
|
||||
'BadAlarmFrameCount' => 'Alarm frame count must be an integer of one or more',
|
||||
|
@ -157,14 +158,14 @@ $SLANG = array(
|
|||
'BadWarmupCount' => 'Warmup frames must be an integer of zero or more',
|
||||
'BadWebColour' => 'Web colour must be a valid web colour string',
|
||||
'BadWidth' => 'Width must be set to a valid value',
|
||||
'Bandwidth' => 'канал',
|
||||
'Bandwidth' => 'канал',
|
||||
'BandwidthHead' => 'Bandwidth', // This is the end of the bandwidth status on the top of the console, different in many language due to phrasing
|
||||
'BlobPx' => 'Пкс объекта',
|
||||
'BlobSizes' => 'Размер объектов',
|
||||
'Blobs' => 'Кол-во объектов',
|
||||
'Brightness' => 'Яркость',
|
||||
'BlobPx' => 'Пкс объекта',
|
||||
'BlobSizes' => 'Размер объектов',
|
||||
'Blobs' => 'Кол-во объектов',
|
||||
'Brightness' => 'Яркость',
|
||||
'Buffer' => 'Buffer', // Added - 2015-04-18
|
||||
'Buffers' => 'Буферы',
|
||||
'Buffers' => 'Буферы',
|
||||
'CSSDescription' => 'Change the default css for this computer', // Added - 2015-04-18
|
||||
'CanAutoFocus' => 'Can Auto Focus',
|
||||
'CanAutoGain' => 'Can Auto Gain',
|
||||
|
@ -204,35 +205,35 @@ $SLANG = array(
|
|||
'CanZoomAbs' => 'Can Zoom Absolute',
|
||||
'CanZoomCon' => 'Can Zoom Continuous',
|
||||
'CanZoomRel' => 'Can Zoom Relative',
|
||||
'Cancel' => 'Отменить',
|
||||
'CancelForcedAlarm' => 'Отменить форсированную тревогу',
|
||||
'CaptureHeight' => 'Размер по Y',
|
||||
'Cancel' => 'Отменить',
|
||||
'CancelForcedAlarm' => 'Отменить форсированную тревогу',
|
||||
'CaptureHeight' => 'Размер по Y',
|
||||
'CaptureMethod' => 'Capture Method', // Added - 2009-02-08
|
||||
'CapturePalette' => 'Режим захвата',
|
||||
'CapturePalette' => 'Режим захвата',
|
||||
'CaptureResolution' => 'Capture Resolution', // Added - 2015-04-18
|
||||
'CaptureWidth' => 'Размер по X',
|
||||
'CaptureWidth' => 'Размер по X',
|
||||
'Cause' => 'Cause',
|
||||
'CheckMethod' => 'Метод проверки тревоги',
|
||||
'CheckMethod' => 'Метод проверки тревоги',
|
||||
'ChooseDetectedCamera' => 'Choose Detected Camera', // Added - 2009-03-31
|
||||
'ChooseFilter' => 'Выбрать фильтр',
|
||||
'ChooseFilter' => 'Выбрать фильтр',
|
||||
'ChooseLogFormat' => 'Choose a log format', // Added - 2011-06-17
|
||||
'ChooseLogSelection' => 'Choose a log selection', // Added - 2011-06-17
|
||||
'ChoosePreset' => 'Choose Preset',
|
||||
'Clear' => 'Clear', // Added - 2011-06-16
|
||||
'Close' => 'Закрыть',
|
||||
'Colour' => 'Цвет',
|
||||
'Close' => 'Закрыть',
|
||||
'Colour' => 'Цвет',
|
||||
'Command' => 'Command',
|
||||
'Component' => 'Component', // Added - 2011-06-16
|
||||
'Config' => 'Config',
|
||||
'ConfiguredFor' => 'Настроен на',
|
||||
'ConfiguredFor' => 'Настроен на',
|
||||
'ConfirmDeleteEvents' => 'Are you sure you wish to delete the selected events?',
|
||||
'ConfirmPassword' => 'Подтвердите пароль',
|
||||
'ConjAnd' => 'и',
|
||||
'ConjOr' => 'или',
|
||||
'Console' => 'Сервер',
|
||||
'ContactAdmin' => 'Пожалуйста обратитесь к вашему администратору.',
|
||||
'ConfirmPassword' => 'Подтвердите пароль',
|
||||
'ConjAnd' => 'и',
|
||||
'ConjOr' => 'или',
|
||||
'Console' => 'Сервер',
|
||||
'ContactAdmin' => 'Пожалуйста обратитесь к вашему администратору.',
|
||||
'Continue' => 'Continue',
|
||||
'Contrast' => 'Контраст',
|
||||
'Contrast' => 'Контраст',
|
||||
'Control' => 'Control',
|
||||
'ControlAddress' => 'Control Address',
|
||||
'ControlCap' => 'Control Capability',
|
||||
|
@ -242,29 +243,29 @@ $SLANG = array(
|
|||
'Controllable' => 'Controllable',
|
||||
'Current' => 'Current', // Added - 2015-04-18
|
||||
'Cycle' => 'Cycle',
|
||||
'CycleWatch' => 'Циклический просмотр',
|
||||
'CycleWatch' => 'Циклический просмотр',
|
||||
'DateTime' => 'Date/Time', // Added - 2011-06-16
|
||||
'Day' => 'День',
|
||||
'Day' => 'День',
|
||||
'Debug' => 'Debug',
|
||||
'DefaultRate' => 'Default Rate',
|
||||
'DefaultScale' => 'Default Scale',
|
||||
'DefaultView' => 'Default View',
|
||||
'Deinterlacing' => 'Deinterlacing', // Added - 2015-04-18
|
||||
'Delay' => 'Delay', // Added - 2015-04-18
|
||||
'Delete' => 'Удалить',
|
||||
'DeleteAndNext' => 'Удалить & след.',
|
||||
'DeleteAndPrev' => 'Удалить & пред.',
|
||||
'DeleteSavedFilter' => 'Удалить сохраненный фильтр',
|
||||
'Description' => 'Описание',
|
||||
'Delete' => 'Удалить',
|
||||
'DeleteAndNext' => 'Удалить & след.',
|
||||
'DeleteAndPrev' => 'Удалить & пред.',
|
||||
'DeleteSavedFilter' => 'Удалить сохраненный фильтр',
|
||||
'Description' => 'Описание',
|
||||
'DetectedCameras' => 'Detected Cameras', // Added - 2009-03-31
|
||||
'DetectedProfiles' => 'Detected Profiles', // Added - 2015-04-18
|
||||
'Device' => 'Device', // Added - 2009-02-08
|
||||
'DeviceChannel' => 'Канал',
|
||||
'DeviceFormat' => 'Формат',
|
||||
'DeviceNumber' => 'Номер устройства',
|
||||
'DeviceChannel' => 'Канал',
|
||||
'DeviceFormat' => 'Формат',
|
||||
'DeviceNumber' => 'Номер устройства',
|
||||
'DevicePath' => 'Device Path',
|
||||
'Devices' => 'Devices',
|
||||
'Dimensions' => 'Размеры',
|
||||
'Dimensions' => 'Размеры',
|
||||
'DisableAlarms' => 'Disable Alarms',
|
||||
'Disk' => 'Disk',
|
||||
'Display' => 'Display', // Added - 2011-01-30
|
||||
|
@ -281,23 +282,23 @@ $SLANG = array(
|
|||
'DonateYes' => 'Yes, I\'d like to donate now',
|
||||
'Download' => 'Download',
|
||||
'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31
|
||||
'Duration' => 'Длительность',
|
||||
'Edit' => 'Редактирование',
|
||||
'Duration' => 'Длительность',
|
||||
'Edit' => 'Редактирование',
|
||||
'Email' => 'Email',
|
||||
'EnableAlarms' => 'Enable Alarms',
|
||||
'Enabled' => 'разрешен',
|
||||
'EnterNewFilterName' => 'Введите новое название фильтра',
|
||||
'Error' => 'Ошибка',
|
||||
'ErrorBrackets' => 'Ошибка: количество открывающих и закрывающих скобок должно быть одинаковым',
|
||||
'ErrorValidValue' => 'Ошибка: проверьте что все термы имеют действительное значение',
|
||||
'Etc' => 'и т.д.',
|
||||
'Event' => 'Событие',
|
||||
'EventFilter' => 'Фильтр событий',
|
||||
'Enabled' => 'разрешен',
|
||||
'EnterNewFilterName' => 'Введите новое название фильтра',
|
||||
'Error' => 'Ошибка',
|
||||
'ErrorBrackets' => 'Ошибка: количество открывающих и закрывающих скобок должно быть одинаковым',
|
||||
'ErrorValidValue' => 'Ошибка: проверьте что все термы имеют действительное значение',
|
||||
'Etc' => 'и т.д.',
|
||||
'Event' => 'Событие',
|
||||
'EventFilter' => 'Фильтр событий',
|
||||
'EventId' => 'Event Id',
|
||||
'EventName' => 'Event Name',
|
||||
'EventPrefix' => 'Event Prefix',
|
||||
'Events' => 'События',
|
||||
'Exclude' => 'Исключить',
|
||||
'Events' => 'События',
|
||||
'Exclude' => 'Исключить',
|
||||
'Execute' => 'Execute',
|
||||
'Export' => 'Export',
|
||||
'ExportDetails' => 'Export Event Details',
|
||||
|
@ -313,8 +314,8 @@ $SLANG = array(
|
|||
'ExportSucceeded' => 'Export Succeeded', // Added - 2009-02-08
|
||||
'ExportVideoFiles' => 'Export Video Files (if present)',
|
||||
'Exporting' => 'Exporting',
|
||||
'FPS' => 'к/c',
|
||||
'FPSReportInterval' => 'Период обновления индикации скорости',
|
||||
'FPS' => 'к/c',
|
||||
'FPSReportInterval' => 'Период обновления индикации скорости',
|
||||
'FTP' => 'FTP',
|
||||
'Far' => 'Far',
|
||||
'FastForward' => 'Fast Forward',
|
||||
|
@ -328,12 +329,12 @@ $SLANG = array(
|
|||
'FilterExecuteEvents' => 'Execute command on all matches',
|
||||
'FilterLog' => 'Filter log', // Added - 2015-04-18
|
||||
'FilterMessageEvents' => 'Message details of all matches',
|
||||
'FilterPx' => 'Пкс фильтра',
|
||||
'FilterPx' => 'Пкс фильтра',
|
||||
'FilterUnset' => 'You must specify a filter width and height',
|
||||
'FilterUploadEvents' => 'Upload all matches',
|
||||
'FilterVideoEvents' => 'Create video for all matches',
|
||||
'Filters' => 'Filters',
|
||||
'First' => 'Первый',
|
||||
'First' => 'Первый',
|
||||
'FlippedHori' => 'Flipped Horizontally',
|
||||
'FlippedVert' => 'Flipped Vertically',
|
||||
'FnMocord' => 'Mocord', // Added 2013.08.16.
|
||||
|
@ -343,21 +344,21 @@ $SLANG = array(
|
|||
'FnNone' => 'None', // Added 2013.08.16.
|
||||
'FnRecord' => 'Record', // Added 2013.08.16.
|
||||
'Focus' => 'Focus',
|
||||
'ForceAlarm' => 'Включить тревогу',
|
||||
'ForceAlarm' => 'Включить тревогу',
|
||||
'Format' => 'Format',
|
||||
'Frame' => 'Кадр',
|
||||
'FrameId' => 'Id кадра',
|
||||
'FrameRate' => 'Скорость',
|
||||
'FrameSkip' => 'Пропускать кадры',
|
||||
'Frames' => 'кадры',
|
||||
'Func' => 'Функ.',
|
||||
'Function' => 'Функция',
|
||||
'Frame' => 'Кадр',
|
||||
'FrameId' => 'Id кадра',
|
||||
'FrameRate' => 'Скорость',
|
||||
'FrameSkip' => 'Пропускать кадры',
|
||||
'Frames' => 'кадры',
|
||||
'Func' => 'Функ.',
|
||||
'Function' => 'Функция',
|
||||
'Gain' => 'Gain',
|
||||
'General' => 'General',
|
||||
'GenerateVideo' => 'Генерировать видео',
|
||||
'GeneratingVideo' => 'Генерируется видео',
|
||||
'GoToZoneMinder' => 'Перейти на ZoneMinder.com',
|
||||
'Grey' => 'ч/б',
|
||||
'GenerateVideo' => 'Генерировать видео',
|
||||
'GeneratingVideo' => 'Генерируется видео',
|
||||
'GoToZoneMinder' => 'Перейти на ZoneMinder.com',
|
||||
'Grey' => 'ч/б',
|
||||
'Group' => 'Group',
|
||||
'Groups' => 'Groups',
|
||||
'HasFocusSpeed' => 'Has Focus Speed',
|
||||
|
@ -371,25 +372,25 @@ $SLANG = array(
|
|||
'HasTurboTilt' => 'Has Turbo Tilt',
|
||||
'HasWhiteSpeed' => 'Has White Bal. Speed',
|
||||
'HasZoomSpeed' => 'Has Zoom Speed',
|
||||
'High' => 'широкий',
|
||||
'HighBW' => 'Широкий канал',
|
||||
'High' => 'широкий',
|
||||
'HighBW' => 'Широкий канал',
|
||||
'Home' => 'Home',
|
||||
'Hour' => 'Час',
|
||||
'Hue' => 'Оттенок',
|
||||
'Hour' => 'Час',
|
||||
'Hue' => 'Оттенок',
|
||||
'Id' => 'Id',
|
||||
'Idle' => 'Idle',
|
||||
'Ignore' => 'Игнорировать',
|
||||
'Image' => 'Изображение',
|
||||
'ImageBufferSize' => 'Размер буфера изображения',
|
||||
'Ignore' => 'Игнорировать',
|
||||
'Image' => 'Изображение',
|
||||
'ImageBufferSize' => 'Размер буфера изображения',
|
||||
'Images' => 'Images',
|
||||
'In' => 'In',
|
||||
'Include' => 'Включить',
|
||||
'Inverted' => 'Инвертировать',
|
||||
'Include' => 'Включить',
|
||||
'Inverted' => 'Инвертировать',
|
||||
'Iris' => 'Iris',
|
||||
'KeyString' => 'Key String',
|
||||
'Label' => 'Label',
|
||||
'Language' => 'Язык',
|
||||
'Last' => 'Последний',
|
||||
'Language' => 'Язык',
|
||||
'Last' => 'Последний',
|
||||
'Layout' => 'Layout', // Added - 2009-02-08
|
||||
'Level' => 'Level', // Added - 2011-06-16
|
||||
'Libvlc' => 'Libvlc',
|
||||
|
@ -399,23 +400,23 @@ $SLANG = array(
|
|||
'LinkedMonitors' => 'Linked Monitors',
|
||||
'List' => 'List',
|
||||
'Load' => 'Load',
|
||||
'Local' => 'Локальный',
|
||||
'Local' => 'Локальный',
|
||||
'Log' => 'Log', // Added - 2011-06-16
|
||||
'LoggedInAs' => 'Пользователь',
|
||||
'LoggedInAs' => 'Пользователь',
|
||||
'Logging' => 'Logging', // Added - 2011-06-16
|
||||
'LoggingIn' => 'Вход в систему',
|
||||
'Login' => 'Войти',
|
||||
'Logout' => 'Выйти',
|
||||
'LoggingIn' => 'Вход в систему',
|
||||
'Login' => 'Войти',
|
||||
'Logout' => 'Выйти',
|
||||
'Logs' => 'Logs', // Added - 2011-06-17
|
||||
'Low' => 'узкий',
|
||||
'LowBW' => 'Узкий канал',
|
||||
'Low' => 'узкий',
|
||||
'LowBW' => 'Узкий канал',
|
||||
'Main' => 'Main',
|
||||
'Man' => 'Man',
|
||||
'Manual' => 'Manual',
|
||||
'Mark' => 'Метка',
|
||||
'Max' => 'Макс.',
|
||||
'Mark' => 'Метка',
|
||||
'Max' => 'Макс.',
|
||||
'MaxBandwidth' => 'Max Bandwidth',
|
||||
'MaxBrScore' => 'Макс.<br/>оценка',
|
||||
'MaxBrScore' => 'Макс.<br/>оценка',
|
||||
'MaxFocusRange' => 'Max Focus Range',
|
||||
'MaxFocusSpeed' => 'Max Focus Speed',
|
||||
'MaxFocusStep' => 'Max Focus Step',
|
||||
|
@ -437,16 +438,16 @@ $SLANG = array(
|
|||
'MaxZoomRange' => 'Max Zoom Range',
|
||||
'MaxZoomSpeed' => 'Max Zoom Speed',
|
||||
'MaxZoomStep' => 'Max Zoom Step',
|
||||
'MaximumFPS' => 'Ограничение скорости записи (к/с)',
|
||||
'Medium' => 'средний',
|
||||
'MediumBW' => 'Обычный канал',
|
||||
'MaximumFPS' => 'Ограничение скорости записи (к/с)',
|
||||
'Medium' => 'средний',
|
||||
'MediumBW' => 'Обычный канал',
|
||||
'Message' => 'Message', // Added - 2011-06-16
|
||||
'MinAlarmAreaLtMax' => 'Minimum alarm area should be less than maximum',
|
||||
'MinAlarmAreaUnset' => 'You must specify the minimum alarm pixel count',
|
||||
'MinBlobAreaLtMax' => 'Минимальная площадь объекта должна быть меньше чем максимальная площадь объекта',
|
||||
'MinBlobAreaLtMax' => 'Минимальная площадь объекта должна быть меньше чем максимальная площадь объекта',
|
||||
'MinBlobAreaUnset' => 'You must specify the minimum blob pixel count',
|
||||
'MinBlobLtMinFilter' => 'Minimum blob area should be less than or equal to minimum filter area',
|
||||
'MinBlobsLtMax' => 'Минимальное число объектов должно быть меньше чем максимальное число объектов',
|
||||
'MinBlobsLtMax' => 'Минимальное число объектов должно быть меньше чем максимальное число объектов',
|
||||
'MinBlobsUnset' => 'You must specify the minimum blob count',
|
||||
'MinFilterAreaLtMax' => 'Minimum filter area should be less than maximum',
|
||||
'MinFilterAreaUnset' => 'You must specify the minimum filter pixel count',
|
||||
|
@ -463,7 +464,7 @@ $SLANG = array(
|
|||
'MinPanRange' => 'Min Pan Range',
|
||||
'MinPanSpeed' => 'Min Pan Speed',
|
||||
'MinPanStep' => 'Min Pan Step',
|
||||
'MinPixelThresLtMax' => 'Нижний порог кол-ва пикселей должен быть ниже верхнего порога кол-ва пикселей',
|
||||
'MinPixelThresLtMax' => 'Нижний порог кол-ва пикселей должен быть ниже верхнего порога кол-ва пикселей',
|
||||
'MinPixelThresUnset' => 'You must specify a minimum pixel threshold',
|
||||
'MinTiltRange' => 'Min Tilt Range',
|
||||
'MinTiltSpeed' => 'Min Tilt Speed',
|
||||
|
@ -474,17 +475,17 @@ $SLANG = array(
|
|||
'MinZoomRange' => 'Min Zoom Range',
|
||||
'MinZoomSpeed' => 'Min Zoom Speed',
|
||||
'MinZoomStep' => 'Min Zoom Step',
|
||||
'Misc' => 'Разное',
|
||||
'Misc' => 'Разное',
|
||||
'Mode' => 'Mode', // Added - 2015-04-18
|
||||
'Monitor' => 'Монитор',
|
||||
'MonitorIds' => 'Id Мониторов',
|
||||
'Monitor' => 'Монитор',
|
||||
'MonitorIds' => 'Id Мониторов',
|
||||
'MonitorPreset' => 'Monitor Preset',
|
||||
'MonitorPresetIntro' => 'Select an appropriate preset from the list below.<br><br>Please note that this may overwrite any values you already have configured for this monitor.<br><br>',
|
||||
'MonitorProbe' => 'Monitor Probe', // Added - 2009-03-31
|
||||
'MonitorProbeIntro' => 'The list below shows detected analog and network cameras and whether they are already being used or available for selection.<br/><br/>Select the desired entry from the list below.<br/><br/>Please note that not all cameras may be detected and that choosing a camera here may overwrite any values you already have configured for the current monitor.<br/><br/>', // Added - 2009-03-31
|
||||
'Monitors' => 'Мониторы',
|
||||
'Monitors' => 'Мониторы',
|
||||
'Montage' => 'Montage',
|
||||
'Month' => 'Месяц',
|
||||
'Month' => 'Месяц',
|
||||
'More' => 'More', // Added - 2011-06-16
|
||||
'MotionFrameSkip' => 'Motion Frame Skip',
|
||||
'Move' => 'Move',
|
||||
|
@ -493,30 +494,30 @@ $SLANG = array(
|
|||
'Mtg3widgrx' => '3-wide grid, scaled, enlarge on alarm', // Added 2013.08.15.
|
||||
'Mtg4widgrd' => '4-wide grid', // Added 2013.08.15.
|
||||
'MtgDefault' => 'Default', // Added 2013.08.15.
|
||||
'MustBeGe' => 'должно быть больше или равно',
|
||||
'MustBeLe' => 'должно быть меньше или равно',
|
||||
'MustConfirmPassword' => 'Вы должны подтвердить пароль',
|
||||
'MustSupplyPassword' => 'Вы должны ввести пароль',
|
||||
'MustSupplyUsername' => 'Вы должны ввести имя пользователя',
|
||||
'Name' => 'Имя',
|
||||
'MustBeGe' => 'должно быть больше или равно',
|
||||
'MustBeLe' => 'должно быть меньше или равно',
|
||||
'MustConfirmPassword' => 'Вы должны подтвердить пароль',
|
||||
'MustSupplyPassword' => 'Вы должны ввести пароль',
|
||||
'MustSupplyUsername' => 'Вы должны ввести имя пользователя',
|
||||
'Name' => 'Имя',
|
||||
'Near' => 'Near',
|
||||
'Network' => 'Сеть',
|
||||
'New' => 'Нов.',
|
||||
'Network' => 'Сеть',
|
||||
'New' => 'Нов.',
|
||||
'NewGroup' => 'New Group',
|
||||
'NewLabel' => 'New Label',
|
||||
'NewPassword' => 'Новый пароль',
|
||||
'NewState' => 'Новое состояние',
|
||||
'NewUser' => 'Новый пользователь',
|
||||
'Next' => 'След.',
|
||||
'No' => 'Нет',
|
||||
'NewPassword' => 'Новый пароль',
|
||||
'NewState' => 'Новое состояние',
|
||||
'NewUser' => 'Новый пользователь',
|
||||
'Next' => 'След.',
|
||||
'No' => 'Нет',
|
||||
'NoDetectedCameras' => 'No Detected Cameras', // Added - 2009-03-31
|
||||
'NoFramesRecorded' => 'Это событие не содежит кадров',
|
||||
'NoFramesRecorded' => 'Это событие не содежит кадров',
|
||||
'NoGroup' => 'No Group',
|
||||
'NoSavedFilters' => 'нет сохраненных фильтров',
|
||||
'NoStatisticsRecorded' => 'Статистика по этому событию/кадру не записана',
|
||||
'None' => 'отсутствует',
|
||||
'NoneAvailable' => 'не доступны',
|
||||
'Normal' => 'Нормальная',
|
||||
'NoSavedFilters' => 'нет сохраненных фильтров',
|
||||
'NoStatisticsRecorded' => 'Статистика по этому событию/кадру не записана',
|
||||
'None' => 'отсутствует',
|
||||
'NoneAvailable' => 'не доступны',
|
||||
'Normal' => 'Нормальная',
|
||||
'Notes' => 'Notes',
|
||||
'NumPresets' => 'Num Presets',
|
||||
'Off' => 'Off',
|
||||
|
@ -524,106 +525,106 @@ $SLANG = array(
|
|||
'OnvifCredentialsIntro'=> 'Please supply user name and password for the selected camera.<br/>If no user has been created for the camera then the user given here will be created with the given password.<br/><br/>', // Added - 2015-04-18
|
||||
'OnvifProbe' => 'ONVIF', // Added - 2015-04-18
|
||||
'OnvifProbeIntro' => 'The list below shows detected ONVIF cameras and whether they are already being used or available for selection.<br/><br/>Select the desired entry from the list below.<br/><br/>Please note that not all cameras may be detected and that choosing a camera here may overwrite any values you already have configured for the current monitor.<br/><br/>', // Added - 2015-04-18
|
||||
'OpEq' => 'равно',
|
||||
'OpGt' => 'больше',
|
||||
'OpGtEq' => 'больше либо равно',
|
||||
'OpIn' => 'в списке',
|
||||
'OpLt' => 'меньше',
|
||||
'OpLtEq' => 'меньше или равно',
|
||||
'OpMatches' => 'совпадает',
|
||||
'OpNe' => 'не равно',
|
||||
'OpNotIn' => 'не в списке',
|
||||
'OpNotMatches' => 'не совпадает',
|
||||
'OpEq' => 'равно',
|
||||
'OpGt' => 'больше',
|
||||
'OpGtEq' => 'больше либо равно',
|
||||
'OpIn' => 'в списке',
|
||||
'OpLt' => 'меньше',
|
||||
'OpLtEq' => 'меньше или равно',
|
||||
'OpMatches' => 'совпадает',
|
||||
'OpNe' => 'не равно',
|
||||
'OpNotIn' => 'не в списке',
|
||||
'OpNotMatches' => 'не совпадает',
|
||||
'Open' => 'Open',
|
||||
'OptionHelp' => 'OptionHelp',
|
||||
'OptionRestartWarning' => 'Эти изменения подействуют только после перезапуска программы.',
|
||||
'Options' => 'Опции',
|
||||
'OrEnterNewName' => 'или введите новое имя',
|
||||
'OptionRestartWarning' => 'Эти изменения подействуют только после перезапуска программы.',
|
||||
'Options' => 'Опции',
|
||||
'OrEnterNewName' => 'или введите новое имя',
|
||||
'Order' => 'Order',
|
||||
'Orientation' => 'Ориентация',
|
||||
'Orientation' => 'Ориентация',
|
||||
'Out' => 'Out',
|
||||
'OverwriteExisting' => 'Перезаписать существующее',
|
||||
'Paged' => 'По страницам',
|
||||
'OverwriteExisting' => 'Перезаписать существующее',
|
||||
'Paged' => 'По страницам',
|
||||
'Pan' => 'Pan',
|
||||
'PanLeft' => 'Pan Left',
|
||||
'PanRight' => 'Pan Right',
|
||||
'PanTilt' => 'Pan/Tilt',
|
||||
'Parameter' => 'Парамер',
|
||||
'Password' => 'Пароль',
|
||||
'PasswordsDifferent' => 'Пароли не совпадают',
|
||||
'Paths' => 'Пути',
|
||||
'Parameter' => 'Парамер',
|
||||
'Password' => 'Пароль',
|
||||
'PasswordsDifferent' => 'Пароли не совпадают',
|
||||
'Paths' => 'Пути',
|
||||
'Pause' => 'Pause',
|
||||
'Phone' => 'Phone',
|
||||
'PhoneBW' => 'Телефонная линия',
|
||||
'PhoneBW' => 'Телефонная линия',
|
||||
'Pid' => 'PID', // Added - 2011-06-16
|
||||
'PixelDiff' => 'Pixel Diff',
|
||||
'Pixels' => 'в пикселях',
|
||||
'Pixels' => 'в пикселях',
|
||||
'Play' => 'Play',
|
||||
'PlayAll' => 'Play All',
|
||||
'PleaseWait' => 'Пожалуйста подождите',
|
||||
'PleaseWait' => 'Пожалуйста подождите',
|
||||
'Plugins' => 'Plugins',
|
||||
'Point' => 'Point',
|
||||
'PostEventImageBuffer' => 'Буфер после события',
|
||||
'PreEventImageBuffer' => 'Буфер до события',
|
||||
'PostEventImageBuffer' => 'Буфер после события',
|
||||
'PreEventImageBuffer' => 'Буфер до события',
|
||||
'PreserveAspect' => 'Preserve Aspect Ratio',
|
||||
'Preset' => 'Preset',
|
||||
'Presets' => 'Presets',
|
||||
'Prev' => 'Пред.',
|
||||
'Prev' => 'Пред.',
|
||||
'Probe' => 'Probe', // Added - 2009-03-31
|
||||
'ProfileProbe' => 'Stream Probe', // Added - 2015-04-18
|
||||
'ProfileProbeIntro' => 'The list below shows the existing stream profiles of the selected camera .<br/><br/>Select the desired entry from the list below.<br/><br/>Please note that ZoneMinder cannot configure additional profiles and that choosing a camera here may overwrite any values you already have configured for the current monitor.<br/><br/>', // Added - 2015-04-18
|
||||
'Progress' => 'Progress', // Added - 2015-04-18
|
||||
'Protocol' => 'Protocol',
|
||||
'Rate' => 'Скорость',
|
||||
'Real' => 'Реальная',
|
||||
'Rate' => 'Скорость',
|
||||
'Real' => 'Реальная',
|
||||
'Record' => 'Record',
|
||||
'RefImageBlendPct' => 'Прозрачность опорного кадра, %',
|
||||
'Refresh' => 'Обновить',
|
||||
'Remote' => 'Удаленный',
|
||||
'RemoteHostName' => 'Имя удаленного хоста',
|
||||
'RemoteHostPath' => 'Путь на удаленном хосте',
|
||||
'RemoteHostPort' => 'удаленный порт',
|
||||
'RefImageBlendPct' => 'Прозрачность опорного кадра, %',
|
||||
'Refresh' => 'Обновить',
|
||||
'Remote' => 'Удаленный',
|
||||
'RemoteHostName' => 'Имя удаленного хоста',
|
||||
'RemoteHostPath' => 'Путь на удаленном хосте',
|
||||
'RemoteHostPort' => 'удаленный порт',
|
||||
'RemoteHostSubPath' => 'Remote Host SubPath', // Added - 2009-02-08
|
||||
'RemoteImageColours' => 'Цветность на удаленном хосте',
|
||||
'RemoteImageColours' => 'Цветность на удаленном хосте',
|
||||
'RemoteMethod' => 'Remote Method', // Added - 2009-02-08
|
||||
'RemoteProtocol' => 'Remote Protocol', // Added - 2009-02-08
|
||||
'Rename' => 'Переименовать',
|
||||
'Rename' => 'Переименовать',
|
||||
'Replay' => 'Replay',
|
||||
'ReplayAll' => 'All Events',
|
||||
'ReplayGapless' => 'Gapless Events',
|
||||
'ReplaySingle' => 'Single Event',
|
||||
'Reset' => 'Reset',
|
||||
'ResetEventCounts' => 'Обнулить счетчик событий',
|
||||
'Restart' => 'Перезапустить',
|
||||
'Restarting' => 'Перезапускается',
|
||||
'RestrictedCameraIds' => 'Id запрещенных камер',
|
||||
'ResetEventCounts' => 'Обнулить счетчик событий',
|
||||
'Restart' => 'Перезапустить',
|
||||
'Restarting' => 'Перезапускается',
|
||||
'RestrictedCameraIds' => 'Id запрещенных камер',
|
||||
'RestrictedMonitors' => 'Restricted Monitors',
|
||||
'ReturnDelay' => 'Return Delay',
|
||||
'ReturnLocation' => 'Return Location',
|
||||
'Rewind' => 'Rewind',
|
||||
'RotateLeft' => 'Повернуть влево',
|
||||
'RotateRight' => 'Повернуть вправо',
|
||||
'RotateLeft' => 'Повернуть влево',
|
||||
'RotateRight' => 'Повернуть вправо',
|
||||
'RunLocalUpdate' => 'Please run zmupdate.pl to update', // Added - 2011-05-25
|
||||
'RunMode' => 'Режим работы',
|
||||
'RunState' => 'Состояние',
|
||||
'Running' => 'Выполняется',
|
||||
'Save' => 'Сохранить',
|
||||
'SaveAs' => 'Сохранить как',
|
||||
'SaveFilter' => 'Сохранить фильтр',
|
||||
'Scale' => 'Масштаб',
|
||||
'Score' => 'Оценка',
|
||||
'Secs' => 'Сек.',
|
||||
'Sectionlength' => 'Длина секции (в кадрах)',
|
||||
'RunMode' => 'Режим работы',
|
||||
'RunState' => 'Состояние',
|
||||
'Running' => 'Выполняется',
|
||||
'Save' => 'Сохранить',
|
||||
'SaveAs' => 'Сохранить как',
|
||||
'SaveFilter' => 'Сохранить фильтр',
|
||||
'Scale' => 'Масштаб',
|
||||
'Score' => 'Оценка',
|
||||
'Secs' => 'Сек.',
|
||||
'Sectionlength' => 'Длина секции (в кадрах)',
|
||||
'Select' => 'Select',
|
||||
'SelectFormat' => 'Select Format', // Added - 2011-06-17
|
||||
'SelectLog' => 'Select Log', // Added - 2011-06-17
|
||||
'SelectMonitors' => 'Select Monitors',
|
||||
'SelfIntersecting' => 'Polygon edges must not intersect',
|
||||
'Set' => 'Set',
|
||||
'SetNewBandwidth' => 'Установка новой ширина канала',
|
||||
'SetNewBandwidth' => 'Установка новой ширина канала',
|
||||
'SetPreset' => 'Set Preset',
|
||||
'Settings' => 'Настройки',
|
||||
'ShowFilterWindow' => 'Показать окно фильтра',
|
||||
'Settings' => 'Настройки',
|
||||
'ShowFilterWindow' => 'Показать окно фильтра',
|
||||
'ShowTimeline' => 'Show Timeline',
|
||||
'SignalCheckColour' => 'Signal Check Colour',
|
||||
'Size' => 'Size',
|
||||
|
@ -632,19 +633,19 @@ $SLANG = array(
|
|||
'SortAsc' => 'Asc',
|
||||
'SortBy' => 'Sort by',
|
||||
'SortDesc' => 'Desc',
|
||||
'Source' => 'Источник',
|
||||
'Source' => 'Источник',
|
||||
'SourceColours' => 'Source Colours', // Added - 2009-02-08
|
||||
'SourcePath' => 'Source Path', // Added - 2009-02-08
|
||||
'SourceType' => 'Тип источника',
|
||||
'SourceType' => 'Тип источника',
|
||||
'Speed' => 'Speed',
|
||||
'SpeedHigh' => 'High Speed',
|
||||
'SpeedLow' => 'Low Speed',
|
||||
'SpeedMedium' => 'Medium Speed',
|
||||
'SpeedTurbo' => 'Turbo Speed',
|
||||
'Start' => 'Запустить',
|
||||
'State' => 'Состояние',
|
||||
'Stats' => 'Статистика',
|
||||
'Status' => 'Статус',
|
||||
'Start' => 'Запустить',
|
||||
'State' => 'Состояние',
|
||||
'Stats' => 'Статистика',
|
||||
'Status' => 'Статус',
|
||||
'Step' => 'Step',
|
||||
'StepBack' => 'Step Back',
|
||||
'StepForward' => 'Step Forward',
|
||||
|
@ -652,84 +653,84 @@ $SLANG = array(
|
|||
'StepMedium' => 'Medium Step',
|
||||
'StepNone' => 'No Step',
|
||||
'StepSmall' => 'Small Step',
|
||||
'Stills' => 'Стоп-кадры',
|
||||
'Stop' => 'Остановить',
|
||||
'Stopped' => 'Остановлен',
|
||||
'Stream' => 'Поток',
|
||||
'Stills' => 'Стоп-кадры',
|
||||
'Stop' => 'Остановить',
|
||||
'Stopped' => 'Остановлен',
|
||||
'Stream' => 'Поток',
|
||||
'StreamReplayBuffer' => 'Stream Replay Image Buffer',
|
||||
'Submit' => 'Submit',
|
||||
'System' => 'Система',
|
||||
'System' => 'Система',
|
||||
'SystemLog' => 'System Log', // Added - 2011-06-16
|
||||
'TargetColorspace' => 'Target colorspace', // Added - 2015-04-18
|
||||
'Tele' => 'Tele',
|
||||
'Thumbnail' => 'Thumbnail',
|
||||
'Tilt' => 'Tilt',
|
||||
'Time' => 'Время',
|
||||
'TimeDelta' => 'Относительное время',
|
||||
'TimeStamp' => 'Метка времени',
|
||||
'Time' => 'Время',
|
||||
'TimeDelta' => 'Относительное время',
|
||||
'TimeStamp' => 'Метка времени',
|
||||
'Timeline' => 'Timeline',
|
||||
'TimelineTip1' => 'Pass your mouse over the graph to view a snapshot image and event details.', // Added 2013.08.15.
|
||||
'TimelineTip2' => 'Click on the coloured sections of the graph, or the image, to view the event.', // Added 2013.08.15.
|
||||
'TimelineTip3' => 'Click on the background to zoom in to a smaller time period based around your click.', // Added 2013.08.15.
|
||||
'TimelineTip4' => 'Use the controls below to zoom out or navigate back and forward through the time range.', // Added 2013.08.15.
|
||||
'Timestamp' => 'Метка времени',
|
||||
'TimestampLabelFormat' => 'Формат метки',
|
||||
'TimestampLabelX' => 'X-координата метки',
|
||||
'TimestampLabelY' => 'Y-координата метки',
|
||||
'Timestamp' => 'Метка времени',
|
||||
'TimestampLabelFormat' => 'Формат метки',
|
||||
'TimestampLabelX' => 'X-координата метки',
|
||||
'TimestampLabelY' => 'Y-координата метки',
|
||||
'Today' => 'Today',
|
||||
'Tools' => 'Инструменты',
|
||||
'Tools' => 'Инструменты',
|
||||
'Total' => 'Total', // Added - 2011-06-16
|
||||
'TotalBrScore' => 'Сумм.<br/>оценка',
|
||||
'TotalBrScore' => 'Сумм.<br/>оценка',
|
||||
'TrackDelay' => 'Track Delay',
|
||||
'TrackMotion' => 'Track Motion',
|
||||
'Triggers' => 'Триггеры',
|
||||
'Triggers' => 'Триггеры',
|
||||
'TurboPanSpeed' => 'Turbo Pan Speed',
|
||||
'TurboTiltSpeed' => 'Turbo Tilt Speed',
|
||||
'Type' => 'Тип',
|
||||
'Unarchive' => 'Уд. из архива',
|
||||
'Type' => 'Тип',
|
||||
'Unarchive' => 'Уд. из архива',
|
||||
'Undefined' => 'Undefined', // Added - 2009-02-08
|
||||
'Units' => 'Ед. измерения',
|
||||
'Units' => 'Ед. измерения',
|
||||
'Unknown' => 'Unknown',
|
||||
'Update' => 'Update',
|
||||
'UpdateAvailable' => 'Доступно обновление ZoneMinder',
|
||||
'UpdateNotNecessary' => 'Обновление не требуется',
|
||||
'UpdateAvailable' => 'Доступно обновление ZoneMinder',
|
||||
'UpdateNotNecessary' => 'Обновление не требуется',
|
||||
'Updated' => 'Updated', // Added - 2011-06-16
|
||||
'Upload' => 'Upload', // Added - 2011-08-23
|
||||
'UseFilter' => 'Использовать фильтр',
|
||||
'UseFilterExprsPost' => ' выражений для фильтра', // This is used at the end of the phrase 'use N filter expressions'
|
||||
'UseFilterExprsPre' => 'Испол. ', // This is used at the beginning of the phrase 'use N filter expressions'
|
||||
'UseFilter' => 'Использовать фильтр',
|
||||
'UseFilterExprsPost' => ' выражений для фильтра', // This is used at the end of the phrase 'use N filter expressions'
|
||||
'UseFilterExprsPre' => 'Испол. ', // This is used at the beginning of the phrase 'use N filter expressions'
|
||||
'UsedPlugins' => 'Used Plugins',
|
||||
'User' => 'Пользователь',
|
||||
'Username' => 'Имя пользователя',
|
||||
'Users' => 'Пользователи',
|
||||
'User' => 'Пользователь',
|
||||
'Username' => 'Имя пользователя',
|
||||
'Users' => 'Пользователи',
|
||||
'V4L' => 'V4L', // Added - 2015-04-18
|
||||
'V4LCapturesPerFrame' => 'Captures Per Frame', // Added - 2015-04-18
|
||||
'V4LMultiBuffer' => 'Multi Buffering', // Added - 2015-04-18
|
||||
'Value' => 'Значение',
|
||||
'Version' => 'Версия',
|
||||
'VersionIgnore' => 'Игнорировать эту версию',
|
||||
'VersionRemindDay' => 'Напомнить через день',
|
||||
'VersionRemindHour' => 'Напомнить через час',
|
||||
'VersionRemindNever' => 'Не говорить о новых версиях',
|
||||
'VersionRemindWeek' => 'Напомнить через неделю',
|
||||
'Video' => 'Видео',
|
||||
'Value' => 'Значение',
|
||||
'Version' => 'Версия',
|
||||
'VersionIgnore' => 'Игнорировать эту версию',
|
||||
'VersionRemindDay' => 'Напомнить через день',
|
||||
'VersionRemindHour' => 'Напомнить через час',
|
||||
'VersionRemindNever' => 'Не говорить о новых версиях',
|
||||
'VersionRemindWeek' => 'Напомнить через неделю',
|
||||
'Video' => 'Видео',
|
||||
'VideoFormat' => 'Video Format',
|
||||
'VideoGenFailed' => 'Ошибка генерации видео!',
|
||||
'VideoGenFailed' => 'Ошибка генерации видео!',
|
||||
'VideoGenFiles' => 'Existing Video Files',
|
||||
'VideoGenNoFiles' => 'No Video Files Found',
|
||||
'VideoGenParms' => 'Параметры генерации видео',
|
||||
'VideoGenParms' => 'Параметры генерации видео',
|
||||
'VideoGenSucceeded' => 'Video Generation Succeeded!',
|
||||
'VideoSize' => 'Размер изображения',
|
||||
'View' => 'Просмотр',
|
||||
'ViewAll' => 'Просм. все',
|
||||
'VideoSize' => 'Размер изображения',
|
||||
'View' => 'Просмотр',
|
||||
'ViewAll' => 'Просм. все',
|
||||
'ViewEvent' => 'View Event',
|
||||
'ViewPaged' => 'Просм. постранично',
|
||||
'ViewPaged' => 'Просм. постранично',
|
||||
'Wake' => 'Wake',
|
||||
'WarmupFrames' => 'Кадры разогрева',
|
||||
'WarmupFrames' => 'Кадры разогрева',
|
||||
'Watch' => 'Watch',
|
||||
'Web' => 'Интерфейс',
|
||||
'Web' => 'Интерфейс',
|
||||
'WebColour' => 'Web Colour',
|
||||
'Week' => 'Неделя',
|
||||
'Week' => 'Неделя',
|
||||
'White' => 'White',
|
||||
'WhiteBalance' => 'White Balance',
|
||||
'Wide' => 'Wide',
|
||||
|
@ -739,10 +740,10 @@ $SLANG = array(
|
|||
'X10InputAlarmString' => 'X10 Input Alarm String',
|
||||
'X10OutputAlarmString' => 'X10 Output Alarm String',
|
||||
'Y' => 'Y',
|
||||
'Yes' => 'Да',
|
||||
'YouNoPerms' => 'У вас не достаточно прав для доступа к этому ресурсу.',
|
||||
'Zone' => 'Зона',
|
||||
'ZoneAlarmColour' => 'Цвет тревоги (Red/Green/Blue)',
|
||||
'Yes' => 'Да',
|
||||
'YouNoPerms' => 'У вас не достаточно прав для доступа к этому ресурсу.',
|
||||
'Zone' => 'Зона',
|
||||
'ZoneAlarmColour' => 'Цвет тревоги (Red/Green/Blue)',
|
||||
'ZoneArea' => 'Zone Area',
|
||||
'ZoneExtendAlarmFrames' => 'Extend Alarm Frame Count',
|
||||
'ZoneFilterSize' => 'Filter Width/Height (pixels)',
|
||||
|
@ -753,7 +754,7 @@ $SLANG = array(
|
|||
'ZoneMinMaxPixelThres' => 'Min/Max Pixel Threshold (0-255)',
|
||||
'ZoneMinderLog' => 'ZoneMinder Log', // Added - 2011-06-17
|
||||
'ZoneOverloadFrames' => 'Overload Frame Ignore Count',
|
||||
'Zones' => 'Зоны',
|
||||
'Zones' => 'Зоны',
|
||||
'Zoom' => 'Zoom',
|
||||
'ZoomIn' => 'Zoom In',
|
||||
'ZoomOut' => 'Zoom Out',
|
||||
|
@ -761,13 +762,13 @@ $SLANG = array(
|
|||
|
||||
// Complex replacements with formatting and/or placements, must be passed through sprintf
|
||||
$CLANG = array(
|
||||
'CurrentLogin' => 'Текущий пользователь: \'%1$s\'',
|
||||
'CurrentLogin' => 'Текущий пользователь: \'%1$s\'',
|
||||
'EventCount' => '%1$s %2$s', // For example '37 Events' (from Vlang below)
|
||||
'LastEvents' => 'Последние %1$s %2$s', // For example 'Last 37 Events' (from Vlang below)
|
||||
'LatestRelease' => 'Последняя версия: v%1$s, у Вас установлена: v%2$s.',
|
||||
'LastEvents' => 'Последние %1$s %2$s', // For example 'Last 37 Events' (from Vlang below)
|
||||
'LatestRelease' => 'Последняя версия: v%1$s, у Вас установлена: v%2$s.',
|
||||
'MonitorCount' => '%1$s %2$s', // For example '4 Monitors' (from Vlang below)
|
||||
'MonitorFunction' => 'Функция монитора %1$s',
|
||||
'RunningRecentVer' => 'У вас установлена новейшая версия ZoneMinder, v%s.',
|
||||
'MonitorFunction' => 'Функция монитора %1$s',
|
||||
'RunningRecentVer' => 'У вас установлена новейшая версия ZoneMinder, v%s.',
|
||||
'VersionMismatch' => 'Version mismatch, system is version %1$s, database is %2$s.', // Added - 2011-05-25
|
||||
);
|
||||
|
||||
|
@ -807,8 +808,8 @@ $CLANG = array(
|
|||
|
||||
// Variable arrays expressing plurality, see the zmVlang description above
|
||||
$VLANG = array(
|
||||
'Event' => array( 1=>'Событий', 2=>'Событие', 3=>'События' ),
|
||||
'Monitor' => array( 1=>'Мониторов', 2=>'Монитор', 3=>'Монитора' ),
|
||||
'Event' => array( 1=>'Событий', 2=>'Событие', 3=>'События' ),
|
||||
'Monitor' => array( 1=>'Мониторов', 2=>'Монитор', 3=>'Монитора' ),
|
||||
);
|
||||
|
||||
// You will need to choose or write a function that can correlate the plurality string arrays
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
body {
|
||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
||||
font-size:10px;
|
||||
font-weight: normal
|
||||
font-weight: normal;
|
||||
color: #333333;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
body {
|
||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
||||
font-size:10px;
|
||||
font-weight: normal
|
||||
font-weight: normal;
|
||||
color: #333333;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
body {
|
||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
||||
font-size:10px;
|
||||
font-weight: normal
|
||||
font-weight: normal;
|
||||
color: #333333;
|
||||
}
|
||||
|
||||
|
|
|
@ -21,11 +21,9 @@
|
|||
* Primary look and feel styles
|
||||
*/
|
||||
|
||||
@import url("https://fonts.googleapis.com/css?family=Open+Sans:200,200italic,300,300italic,400,400italic,600,600italic,700");
|
||||
|
||||
body {
|
||||
font-family: "Open Sans", Verdana, Arial, Helvetica, sans-serif;
|
||||
font-size: 16px;
|
||||
font-size: 13px;
|
||||
color: #333333;
|
||||
font-weight: 300;
|
||||
text-align: center;
|
||||
|
|
Loading…
Reference in New Issue