mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-02-01 01:09:47 +00:00
49_SSCAM: added function "move" for continuous PTZ action
git-svn-id: https://svn.fhem.de/fhem/trunk@10778 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
e45f7439b2
commit
c896fb45ec
@ -1,5 +1,6 @@
|
|||||||
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
|
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
|
||||||
# Do not insert empty lines here, update check depends on it.
|
# Do not insert empty lines here, update check depends on it.
|
||||||
|
- feature 49_SSCAM: added function "move" for continuous PTZ action
|
||||||
- feature: 02_RSS: continue image update sequence after error (HTML)
|
- feature: 02_RSS: continue image update sequence after error (HTML)
|
||||||
- feature: 98_rssFeed: Possibility to modfy feed data via a custom function.
|
- feature: 98_rssFeed: Possibility to modfy feed data via a custom function.
|
||||||
- change: 49_SSCAM: entries with loglevl "2" reviewed,changed to loglevl "3"
|
- change: 49_SSCAM: entries with loglevl "2" reviewed,changed to loglevl "3"
|
||||||
|
@ -27,7 +27,8 @@
|
|||||||
##########################################################################################################
|
##########################################################################################################
|
||||||
# Versions History:
|
# Versions History:
|
||||||
#
|
#
|
||||||
# 1.11.1 07.02.2016 entries with loglevel "2" to loglevel "3" changed
|
# 1.12 08.02.2016 added function "move" for continuous PTZ action
|
||||||
|
# 1.11.1 07.02.2016 entries with loglevel "2" reviewed, changed to loglevel "3"
|
||||||
# 1.11 05.02.2016 added function "goPreset" and "goAbsPTZ" to control the move of PTZ lense
|
# 1.11 05.02.2016 added function "goPreset" and "goAbsPTZ" to control the move of PTZ lense
|
||||||
# to absolute positions
|
# to absolute positions
|
||||||
# refere to commandref or have a look in forum at:
|
# refere to commandref or have a look in forum at:
|
||||||
@ -152,10 +153,10 @@ sub SSCam_Define {
|
|||||||
RemoveInternalTimer($hash); # alle Timer löschen
|
RemoveInternalTimer($hash); # alle Timer löschen
|
||||||
|
|
||||||
# Subroutine Watchdog-Timer starten (sollen Cam-Infos regelmäßig abgerufen werden ?), verzögerter zufälliger Start 0-60s
|
# Subroutine Watchdog-Timer starten (sollen Cam-Infos regelmäßig abgerufen werden ?), verzögerter zufälliger Start 0-60s
|
||||||
InternalTimer(gettimeofday()+int(rand(60)), "watchdogpollcaminfo", $hash, 0);
|
InternalTimer(gettimeofday()+int(srand(60)), "watchdogpollcaminfo", $hash, 0);
|
||||||
|
|
||||||
# initiale Rotinen nach Restart ausführen , verzögerter zufälliger Start
|
# initiale Rotinen nach Restart ausführen , verzögerter zufälliger Start
|
||||||
InternalTimer(gettimeofday()+int(rand(20)), "initonboot", $hash, 0);
|
InternalTimer(gettimeofday()+int(srand(10)), "initonboot", $hash, 0);
|
||||||
|
|
||||||
return undef;
|
return undef;
|
||||||
}
|
}
|
||||||
@ -211,7 +212,6 @@ sub SSCam_Set {
|
|||||||
my $logstr;
|
my $logstr;
|
||||||
my $setlist;
|
my $setlist;
|
||||||
my @prop;
|
my @prop;
|
||||||
my $ptzaction;
|
|
||||||
|
|
||||||
|
|
||||||
# my $list .= "on off snap enable disable on-for-timer";
|
# my $list .= "on off snap enable disable on-for-timer";
|
||||||
@ -227,7 +227,8 @@ sub SSCam_Set {
|
|||||||
"enable ".
|
"enable ".
|
||||||
"disable ".
|
"disable ".
|
||||||
((ReadingsVal("$name", "DeviceType", "Camera") eq "PTZ") ? "goPreset:".ReadingsVal("$name", "Presets", "")." " : "").
|
((ReadingsVal("$name", "DeviceType", "Camera") eq "PTZ") ? "goPreset:".ReadingsVal("$name", "Presets", "")." " : "").
|
||||||
((ReadingsVal("$name", "CapPTZAbs", "false") eq "true") ? "goAbsPTZ"." " : "");
|
((ReadingsVal("$name", "CapPTZAbs", "false") eq "true") ? "goAbsPTZ"." " : "").
|
||||||
|
((ReadingsVal("$name", "CapPTZDirections", "0") > 0) ? "move"." " : "");
|
||||||
|
|
||||||
|
|
||||||
if ($opt eq "on") {
|
if ($opt eq "on") {
|
||||||
@ -282,20 +283,21 @@ sub SSCam_Set {
|
|||||||
@prop = split(/,/, $prop);
|
@prop = split(/,/, $prop);
|
||||||
$prop = $prop[0];
|
$prop = $prop[0];
|
||||||
$hash->{HELPER}{GOPRESETNAME} = $prop;
|
$hash->{HELPER}{GOPRESETNAME} = $prop;
|
||||||
$ptzaction = "gopreset";
|
$hash->{HELPER}{PTZACTION} = "gopreset";
|
||||||
doptzaction($hash,$ptzaction);
|
doptzaction($hash);
|
||||||
}
|
}
|
||||||
elsif ($opt eq "goAbsPTZ")
|
elsif ($opt eq "goAbsPTZ")
|
||||||
{
|
{
|
||||||
if (!$hash->{CREDENTIALS}) {return "Credentials of $name are not set - make sure you've set it with \"set $name credentials username password\"";}
|
if (!$hash->{CREDENTIALS}) {return "Credentials of $name are not set - make sure you've set it with \"set $name credentials username password\"";}
|
||||||
|
|
||||||
if ($prop =~ /up/ || $prop =~ /down/ || $prop =~ /left/ || $prop =~ /right/) {
|
if ($prop eq "up" || $prop eq "down" || $prop eq "left" || $prop eq "right") {
|
||||||
if ($prop eq "up") {$hash->{HELPER}{GOPTZPOSX} = 320; $hash->{HELPER}{GOPTZPOSY} = 480;}
|
if ($prop eq "up") {$hash->{HELPER}{GOPTZPOSX} = 320; $hash->{HELPER}{GOPTZPOSY} = 480;}
|
||||||
if ($prop eq "down") {$hash->{HELPER}{GOPTZPOSX} = 320; $hash->{HELPER}{GOPTZPOSY} = 0;}
|
if ($prop eq "down") {$hash->{HELPER}{GOPTZPOSX} = 320; $hash->{HELPER}{GOPTZPOSY} = 0;}
|
||||||
if ($prop eq "left") {$hash->{HELPER}{GOPTZPOSX} = 0; $hash->{HELPER}{GOPTZPOSY} = 240;}
|
if ($prop eq "left") {$hash->{HELPER}{GOPTZPOSX} = 0; $hash->{HELPER}{GOPTZPOSY} = 240;}
|
||||||
if ($prop eq "right") {$hash->{HELPER}{GOPTZPOSX} = 640; $hash->{HELPER}{GOPTZPOSY} = 240;}
|
if ($prop eq "right") {$hash->{HELPER}{GOPTZPOSX} = 640; $hash->{HELPER}{GOPTZPOSY} = 240;}
|
||||||
$ptzaction = "goabsptz";
|
|
||||||
doptzaction($hash,$ptzaction);
|
$hash->{HELPER}{PTZACTION} = "goabsptz";
|
||||||
|
doptzaction($hash);
|
||||||
return undef;
|
return undef;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -306,8 +308,9 @@ sub SSCam_Set {
|
|||||||
|
|
||||||
$hash->{HELPER}{GOPTZPOSX} = abs($prop);
|
$hash->{HELPER}{GOPTZPOSX} = abs($prop);
|
||||||
$hash->{HELPER}{GOPTZPOSY} = abs($prop1);
|
$hash->{HELPER}{GOPTZPOSY} = abs($prop1);
|
||||||
$ptzaction = "goabsptz";
|
|
||||||
doptzaction($hash,$ptzaction);
|
$hash->{HELPER}{PTZACTION} = "goabsptz";
|
||||||
|
doptzaction($hash);
|
||||||
|
|
||||||
return undef;
|
return undef;
|
||||||
|
|
||||||
@ -315,6 +318,18 @@ sub SSCam_Set {
|
|||||||
return "Function \"goAbsPTZ\" needs two coordinates, posX=0-640 and posY=0-480, as arguments or use up, down, left, right instead";
|
return "Function \"goAbsPTZ\" needs two coordinates, posX=0-640 and posY=0-480, as arguments or use up, down, left, right instead";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
elsif ($opt eq "move")
|
||||||
|
{
|
||||||
|
if (!$hash->{CREDENTIALS}) {return "Credentials of $name are not set - make sure you've set it with \"set $name credentials username password\"";}
|
||||||
|
|
||||||
|
if (!defined($prop) || ($prop ne "up" && $prop ne "down" && $prop ne "left" && $prop ne "right" && $prop !~ m/dir_\d/)) {return "Function \"move\" needs an argument like up, down, left, right or dir_X (X = 0 to CapPTZDirections-1)";}
|
||||||
|
|
||||||
|
$hash->{HELPER}{GOMOVEDIR} = $prop;
|
||||||
|
$hash->{HELPER}{GOMOVETIME} = defined($prop1) ? $prop1 : 1;
|
||||||
|
|
||||||
|
$hash->{HELPER}{PTZACTION} = "movestart";
|
||||||
|
doptzaction($hash);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return $setlist;
|
return $setlist;
|
||||||
@ -323,7 +338,6 @@ return;
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
sub SSCam_Get {
|
sub SSCam_Get {
|
||||||
my ($hash, @a) = @_;
|
my ($hash, @a) = @_;
|
||||||
return "\"get X\" needs at least an argument" if ( @a < 2 );
|
return "\"get X\" needs at least an argument" if ( @a < 2 );
|
||||||
@ -396,7 +410,7 @@ sub initonboot ($) {
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
InternalTimer(gettimeofday()+0.1, "initonboot", $hash, 0);
|
InternalTimer(gettimeofday()+0.14, "initonboot", $hash, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
return undef;
|
return undef;
|
||||||
@ -513,7 +527,7 @@ sub watchdogpollcaminfo ($) {
|
|||||||
my $name = $hash->{NAME};
|
my $name = $hash->{NAME};
|
||||||
my $camname = $hash->{CAMNAME};
|
my $camname = $hash->{CAMNAME};
|
||||||
my $logstr;
|
my $logstr;
|
||||||
my $watchdogtimer = 90.035;
|
my $watchdogtimer = 90;
|
||||||
|
|
||||||
if (defined($attr{$name}{pollcaminfoall}) and $attr{$name}{pollcaminfoall} > 10 and ReadingsVal("$name", "PollState", "Active") eq "Inactive") {
|
if (defined($attr{$name}{pollcaminfoall}) and $attr{$name}{pollcaminfoall} > 10 and ReadingsVal("$name", "PollState", "Active") eq "Inactive") {
|
||||||
|
|
||||||
@ -527,7 +541,7 @@ sub watchdogpollcaminfo ($) {
|
|||||||
$hash->{HELPER}{OLDVALPOLL} = AttrVal($name, "pollcaminfoall", undef);
|
$hash->{HELPER}{OLDVALPOLL} = AttrVal($name, "pollcaminfoall", undef);
|
||||||
|
|
||||||
# Pollingroutine aufrufen
|
# Pollingroutine aufrufen
|
||||||
&getcaminfoall($hash);
|
getcaminfoall($hash);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (defined($hash->{HELPER}{OLDVALPOLL}) and defined($attr{$name}{pollcaminfoall}) and $attr{$name}{pollcaminfoall} > 10) {
|
if (defined($hash->{HELPER}{OLDVALPOLL}) and defined($attr{$name}{pollcaminfoall}) and $attr{$name}{pollcaminfoall} > 10) {
|
||||||
@ -537,7 +551,6 @@ sub watchdogpollcaminfo ($) {
|
|||||||
&printlog($hash,$logstr,"3");
|
&printlog($hash,$logstr,"3");
|
||||||
|
|
||||||
$hash->{HELPER}{OLDVALPOLL} = $attr{$name}{pollcaminfoall};
|
$hash->{HELPER}{OLDVALPOLL} = $attr{$name}{pollcaminfoall};
|
||||||
&getcaminfoall($hash);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -783,10 +796,10 @@ sub camsnap ($) {
|
|||||||
|
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
### PTZ-Kamera auf Presetposition fahren
|
### PTZ-Kamera auf Position fahren
|
||||||
|
|
||||||
sub doptzaction ($$) {
|
sub doptzaction ($) {
|
||||||
my ($hash, $ptzaction) = @_;
|
my ($hash) = @_;
|
||||||
my $camname = $hash->{CAMNAME};
|
my $camname = $hash->{CAMNAME};
|
||||||
my $name = $hash->{NAME};
|
my $name = $hash->{NAME};
|
||||||
my $logstr;
|
my $logstr;
|
||||||
@ -794,17 +807,22 @@ sub doptzaction ($$) {
|
|||||||
my $error;
|
my $error;
|
||||||
|
|
||||||
if (ReadingsVal("$name", "DeviceType", "Camera") ne "PTZ") {
|
if (ReadingsVal("$name", "DeviceType", "Camera") ne "PTZ") {
|
||||||
$logstr = "ERROR - Operation \"$ptzaction\" is only possible for cameras of DeviceType \"PTZ\" - please compare with device Readings" ;
|
$logstr = "ERROR - Operation \"$hash->{HELPER}{PTZACTION}\" is only possible for cameras of DeviceType \"PTZ\" - please compare with device Readings" ;
|
||||||
&printlog($hash,$logstr,"1");
|
&printlog($hash,$logstr,"1");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if ($ptzaction eq "goabsptz" && ReadingsVal("$name", "CapPTZAbs", "false") ne "true") {
|
if ($hash->{HELPER}{PTZACTION} eq "goabsptz" && ReadingsVal("$name", "CapPTZAbs", "false") ne "true") {
|
||||||
$logstr = "ERROR - Operation \"$ptzaction\" is only possible if camera supports absolute PTZ action - please compare with device Reading \"CapPTZAbs\"" ;
|
$logstr = "ERROR - Operation \"$hash->{HELPER}{PTZACTION}\" is only possible if camera supports absolute PTZ action - please compare with device Reading \"CapPTZAbs\"" ;
|
||||||
|
&printlog($hash,$logstr,"1");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if ( $hash->{HELPER}{PTZACTION} eq "movestart" && ReadingsVal("$name", "CapPTZDirections", "0") < 1) {
|
||||||
|
$logstr = "ERROR - Operation \"$hash->{HELPER}{PTZACTION}\" is only possible if camera supports \"Tilt\" and \"Pan\" operations - please compare with device Reading \"CapPTZDirections\"" ;
|
||||||
&printlog($hash,$logstr,"1");
|
&printlog($hash,$logstr,"1");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($ptzaction eq "gopreset") {
|
if ($hash->{HELPER}{PTZACTION} eq "gopreset") {
|
||||||
if (!defined($hash->{HELPER}{ALLPRESETS}{$hash->{HELPER}{GOPRESETNAME}})) {
|
if (!defined($hash->{HELPER}{ALLPRESETS}{$hash->{HELPER}{GOPRESETNAME}})) {
|
||||||
$errorcode = "600";
|
$errorcode = "600";
|
||||||
# Fehlertext zum Errorcode ermitteln
|
# Fehlertext zum Errorcode ermitteln
|
||||||
@ -839,27 +857,36 @@ sub doptzaction ($$) {
|
|||||||
readingsBulkUpdate($hash,"Error",$error);
|
readingsBulkUpdate($hash,"Error",$error);
|
||||||
readingsEndUpdate($hash, 1);
|
readingsEndUpdate($hash, 1);
|
||||||
|
|
||||||
$logstr = "ERROR - $ptzaction of Camera $camname can't be executed - $error" ;
|
$logstr = "ERROR - $hash->{HELPER}{PTZACTION} of Camera $camname can't be executed - $error" ;
|
||||||
&printlog($hash,$logstr,"1");
|
&printlog($hash,$logstr,"1");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($hash->{HELPER}{ACTIVE} eq "off") {
|
if ($hash->{HELPER}{ACTIVE} eq "off") {
|
||||||
|
|
||||||
if ($ptzaction eq "gopreset") {
|
if ($hash->{HELPER}{PTZACTION} eq "gopreset") {
|
||||||
$logstr = "Move Camera $camname to position \"$hash->{HELPER}{GOPRESETNAME}\" with ID \"$hash->{HELPER}{ALLPRESETS}{$hash->{HELPER}{GOPRESETNAME}}\" now";
|
$logstr = "Move Camera $camname to position \"$hash->{HELPER}{GOPRESETNAME}\" with ID \"$hash->{HELPER}{ALLPRESETS}{$hash->{HELPER}{GOPRESETNAME}}\" now";
|
||||||
&printlog($hash,$logstr,"4");
|
&printlog($hash,$logstr,"4");
|
||||||
|
|
||||||
$hash->{OPMODE} = $ptzaction;
|
$hash->{OPMODE} = $hash->{HELPER}{PTZACTION};
|
||||||
$hash->{HELPER}{ACTIVE} = "on";
|
$hash->{HELPER}{ACTIVE} = "on";
|
||||||
|
|
||||||
&getapisites_nonbl($hash);
|
&getapisites_nonbl($hash);
|
||||||
}
|
}
|
||||||
elsif ($ptzaction eq "goabsptz") {
|
elsif ($hash->{HELPER}{PTZACTION} eq "goabsptz") {
|
||||||
$logstr = "Move Camera $camname to position posX=\"$hash->{HELPER}{GOPTZPOSX}\" and posY=\"$hash->{HELPER}{GOPTZPOSY}\" now";
|
$logstr = "Start move Camera $camname to position posX=\"$hash->{HELPER}{GOPTZPOSX}\" and posY=\"$hash->{HELPER}{GOPTZPOSY}\" now";
|
||||||
&printlog($hash,$logstr,"4");
|
&printlog($hash,$logstr,"4");
|
||||||
|
|
||||||
$hash->{OPMODE} = $ptzaction;
|
$hash->{OPMODE} = $hash->{HELPER}{PTZACTION};
|
||||||
|
$hash->{HELPER}{ACTIVE} = "on";
|
||||||
|
|
||||||
|
&getapisites_nonbl($hash);
|
||||||
|
}
|
||||||
|
elsif ($hash->{HELPER}{PTZACTION} eq "movestart") {
|
||||||
|
$logstr = "Start move Camera $camname to direction \"$hash->{HELPER}{GOMOVEDIR}\" with duration of $hash->{HELPER}{GOMOVETIME} s";
|
||||||
|
&printlog($hash,$logstr,"4");
|
||||||
|
|
||||||
|
$hash->{OPMODE} = $hash->{HELPER}{PTZACTION};
|
||||||
$hash->{HELPER}{ACTIVE} = "on";
|
$hash->{HELPER}{ACTIVE} = "on";
|
||||||
|
|
||||||
&getapisites_nonbl($hash);
|
&getapisites_nonbl($hash);
|
||||||
@ -871,6 +898,30 @@ sub doptzaction ($$) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
### stoppen continue move
|
||||||
|
|
||||||
|
sub movestop ($) {
|
||||||
|
my ($hash) = @_;
|
||||||
|
my $camname = $hash->{CAMNAME};
|
||||||
|
my $name = $hash->{NAME};
|
||||||
|
my $logstr;
|
||||||
|
|
||||||
|
if ($hash->{HELPER}{ACTIVE} eq "off") {
|
||||||
|
$logstr = "Stop Camera $camname moving to direction \"$hash->{HELPER}{GOMOVEDIR}\" now";
|
||||||
|
&printlog($hash,$logstr,"4");
|
||||||
|
|
||||||
|
$hash->{OPMODE} = "movestop";
|
||||||
|
$hash->{HELPER}{ACTIVE} = "on";
|
||||||
|
|
||||||
|
&getapisites_nonbl($hash);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
InternalTimer(gettimeofday()+0.121, "movestop", $hash, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
### Kamera aktivieren
|
### Kamera aktivieren
|
||||||
|
|
||||||
@ -959,6 +1010,7 @@ sub getcaminfoall ($) {
|
|||||||
$logstr = "Polling of Camera $camname is deactivated now";
|
$logstr = "Polling of Camera $camname is deactivated now";
|
||||||
&printlog($hash,$logstr,"3");
|
&printlog($hash,$logstr,"3");
|
||||||
}
|
}
|
||||||
|
return undef;
|
||||||
}
|
}
|
||||||
|
|
||||||
###########################################################################
|
###########################################################################
|
||||||
@ -1717,11 +1769,17 @@ sub camop_nonbl ($) {
|
|||||||
}
|
}
|
||||||
elsif ($OpMode eq "goabsptz")
|
elsif ($OpMode eq "goabsptz")
|
||||||
{
|
{
|
||||||
# mal wieder Maxversion der API funktioniert nicht bei jedem !
|
|
||||||
# $apiptzmaxver -= 1;
|
|
||||||
$url = "http://$serveraddr:$serverport/webapi/$apiptzpath?api=\"$apiptz\"&version=\"$apiptzmaxver\"&method=\"AbsPtz\"&cameraId=\"$camid\"&posX=\"$hash->{HELPER}{GOPTZPOSX}\"&posY=\"$hash->{HELPER}{GOPTZPOSY}\"&_sid=\"$sid\"";
|
$url = "http://$serveraddr:$serverport/webapi/$apiptzpath?api=\"$apiptz\"&version=\"$apiptzmaxver\"&method=\"AbsPtz\"&cameraId=\"$camid\"&posX=\"$hash->{HELPER}{GOPTZPOSX}\"&posY=\"$hash->{HELPER}{GOPTZPOSY}\"&_sid=\"$sid\"";
|
||||||
readingsSingleUpdate($hash,"state", "moving", 0);
|
readingsSingleUpdate($hash,"state", "moving", 0);
|
||||||
}
|
}
|
||||||
|
elsif ($OpMode eq "movestart")
|
||||||
|
{
|
||||||
|
$url = "http://$serveraddr:$serverport/webapi/$apiptzpath?api=\"$apiptz\"&version=\"$apiptzmaxver\"&method=\"Move\"&cameraId=\"$camid\"&direction=\"$hash->{HELPER}{GOMOVEDIR}\"&speed=\"3\"&moveType=\"Start\"&_sid=\"$sid\"";
|
||||||
|
}
|
||||||
|
elsif ($OpMode eq "movestop")
|
||||||
|
{
|
||||||
|
$url = "http://$serveraddr:$serverport/webapi/$apiptzpath?api=\"$apiptz\"&version=\"$apiptzmaxver\"&method=\"Move\"&cameraId=\"$camid\"&direction=\"$hash->{HELPER}{GOMOVEDIR}\"&moveType=\"Stop\"&_sid=\"$sid\"";
|
||||||
|
}
|
||||||
elsif ($OpMode eq "Enable")
|
elsif ($OpMode eq "Enable")
|
||||||
{
|
{
|
||||||
# eine Kamera wird aktiviert, Rückkehr wird mit "camret_nonbl" verarbeitet
|
# eine Kamera wird aktiviert, Rückkehr wird mit "camret_nonbl" verarbeitet
|
||||||
@ -1808,6 +1866,7 @@ sub camret_nonbl ($) {
|
|||||||
my $camStatus;
|
my $camStatus;
|
||||||
my ($presetcnt,$cnt,$presid,$presname,@preskeys,$presetlist);
|
my ($presetcnt,$cnt,$presid,$presname,@preskeys,$presetlist);
|
||||||
my ($patrolcnt,$patrolid,$patrolname,@patrolkeys,$patrollist);
|
my ($patrolcnt,$patrolid,$patrolname,@patrolkeys,$patrollist);
|
||||||
|
my ($recStatus,$exposuremode);
|
||||||
my $userPriv;
|
my $userPriv;
|
||||||
my $verbose;
|
my $verbose;
|
||||||
my $httptimeout;
|
my $httptimeout;
|
||||||
@ -1993,6 +2052,50 @@ sub camret_nonbl ($) {
|
|||||||
$logstr = "--- End Function cam: $OpMode nonblocking ---";
|
$logstr = "--- End Function cam: $OpMode nonblocking ---";
|
||||||
&printlog($hash,$logstr,"4");
|
&printlog($hash,$logstr,"4");
|
||||||
}
|
}
|
||||||
|
elsif ($OpMode eq "movestart")
|
||||||
|
{
|
||||||
|
# ein "Move" in eine bestimmte Richtung wird durchgeführt
|
||||||
|
# Setreading
|
||||||
|
readingsBeginUpdate($hash);
|
||||||
|
readingsBulkUpdate($hash,"state","moving");
|
||||||
|
readingsBulkUpdate($hash,"Errorcode","none");
|
||||||
|
readingsBulkUpdate($hash,"Error","none");
|
||||||
|
readingsEndUpdate($hash, 1);
|
||||||
|
|
||||||
|
# Logausgabe
|
||||||
|
$logstr = "Camera $camname started move to direction \"$hash->{HELPER}{GOMOVEDIR}\" with duration of $hash->{HELPER}{GOMOVETIME} s";
|
||||||
|
&printlog($hash,$logstr,"3");
|
||||||
|
$logstr = "--- End Function cam: $OpMode nonblocking ---";
|
||||||
|
&printlog($hash,$logstr,"4");
|
||||||
|
|
||||||
|
InternalTimer(gettimeofday()+($hash->{HELPER}{GOMOVETIME}), "movestop", $hash, 0);
|
||||||
|
}
|
||||||
|
elsif ($OpMode eq "movestop")
|
||||||
|
{
|
||||||
|
# ein "Move" in eine bestimmte Richtung wurde durchgeführt
|
||||||
|
# falls Aufnahme noch läuft -> state = on setzen
|
||||||
|
|
||||||
|
if (ReadingsVal("$name", "Record", "Stop") eq "Start") {
|
||||||
|
readingsSingleUpdate($hash,"state", "on", 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
readingsSingleUpdate($hash,"state", "off", 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
# Setreading
|
||||||
|
readingsBeginUpdate($hash);
|
||||||
|
readingsBulkUpdate($hash,"Errorcode","none");
|
||||||
|
readingsBulkUpdate($hash,"Error","none");
|
||||||
|
readingsEndUpdate($hash, 1);
|
||||||
|
|
||||||
|
# Logausgabe
|
||||||
|
$logstr = "Camera $camname stopped move to direction \"$hash->{HELPER}{GOMOVEDIR}\"";
|
||||||
|
&printlog($hash,$logstr,"3");
|
||||||
|
$logstr = "--- End Function cam: $OpMode nonblocking ---";
|
||||||
|
&printlog($hash,$logstr,"4");
|
||||||
|
|
||||||
|
}
|
||||||
elsif ($OpMode eq "Enable")
|
elsif ($OpMode eq "Enable")
|
||||||
{
|
{
|
||||||
# Kamera wurde aktiviert, sonst kann nichts laufen -> "off"
|
# Kamera wurde aktiviert, sonst kann nichts laufen -> "off"
|
||||||
@ -2129,7 +2232,7 @@ sub camret_nonbl ($) {
|
|||||||
$camStatus = "other";
|
$camStatus = "other";
|
||||||
}
|
}
|
||||||
|
|
||||||
my $recStatus = $data->{'data'}->{'cameras'}->[0]->{'recStatus'};
|
$recStatus = $data->{'data'}->{'cameras'}->[0]->{'recStatus'};
|
||||||
if ($recStatus ne "0") {
|
if ($recStatus ne "0") {
|
||||||
$recStatus = "Start";
|
$recStatus = "Start";
|
||||||
}
|
}
|
||||||
@ -2137,9 +2240,27 @@ sub camret_nonbl ($) {
|
|||||||
$recStatus = "Stop";
|
$recStatus = "Stop";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$exposuremode = $data->{'data'}->{'cameras'}->[0]->{'exposure_mode'};
|
||||||
|
if ($exposuremode == 0) {
|
||||||
|
$exposuremode = "Auto";
|
||||||
|
}
|
||||||
|
elsif ($exposuremode == 1) {
|
||||||
|
$exposuremode = "Day";
|
||||||
|
}
|
||||||
|
elsif ($exposuremode == 2) {
|
||||||
|
$exposuremode = "Night";
|
||||||
|
}
|
||||||
|
elsif ($exposuremode == 3) {
|
||||||
|
$exposuremode = "Schedule";
|
||||||
|
}
|
||||||
|
elsif ($exposuremode == 4) {
|
||||||
|
$exposuremode = "Unknown";
|
||||||
|
}
|
||||||
|
|
||||||
# Setreading
|
# Setreading
|
||||||
readingsBeginUpdate($hash);
|
readingsBeginUpdate($hash);
|
||||||
readingsBulkUpdate($hash,"CamLiveMode",$camLiveMode);
|
readingsBulkUpdate($hash,"CamLiveMode",$camLiveMode);
|
||||||
|
readingsBulkUpdate($hash,"CamExposureMode",$exposuremode);
|
||||||
readingsBulkUpdate($hash,"CamModel",$data->{'data'}->{'cameras'}->[0]->{'detailInfo'}{'camModel'});
|
readingsBulkUpdate($hash,"CamModel",$data->{'data'}->{'cameras'}->[0]->{'detailInfo'}{'camModel'});
|
||||||
readingsBulkUpdate($hash,"CamRecShare",$data->{'data'}->{'cameras'}->[0]->{'camRecShare'});
|
readingsBulkUpdate($hash,"CamRecShare",$data->{'data'}->{'cameras'}->[0]->{'camRecShare'});
|
||||||
readingsBulkUpdate($hash,"CamRecVolume",$data->{'data'}->{'cameras'}->[0]->{'camRecVolume'});
|
readingsBulkUpdate($hash,"CamRecVolume",$data->{'data'}->{'cameras'}->[0]->{'camRecVolume'});
|
||||||
@ -2147,6 +2268,10 @@ sub camret_nonbl ($) {
|
|||||||
readingsBulkUpdate($hash,"CamVendor",$data->{'data'}->{'cameras'}->[0]->{'detailInfo'}{'camVendor'});
|
readingsBulkUpdate($hash,"CamVendor",$data->{'data'}->{'cameras'}->[0]->{'detailInfo'}{'camVendor'});
|
||||||
readingsBulkUpdate($hash,"CamPreRecTime",$data->{'data'}->{'cameras'}->[0]->{'detailInfo'}{'camPreRecTime'});
|
readingsBulkUpdate($hash,"CamPreRecTime",$data->{'data'}->{'cameras'}->[0]->{'detailInfo'}{'camPreRecTime'});
|
||||||
readingsBulkUpdate($hash,"CamPort",$data->{'data'}->{'cameras'}->[0]->{'port'});
|
readingsBulkUpdate($hash,"CamPort",$data->{'data'}->{'cameras'}->[0]->{'port'});
|
||||||
|
readingsBulkUpdate($hash,"CamPtSpeed",$data->{'data'}->{'cameras'}->[0]->{'ptSpeed'});
|
||||||
|
readingsBulkUpdate($hash,"CamblPresetSpeed",$data->{'data'}->{'cameras'}->[0]->{'blPresetSpeed'});
|
||||||
|
readingsBulkUpdate($hash,"CamVideoMirror",$data->{'data'}->{'cameras'}->[0]->{'video_mirror'});
|
||||||
|
readingsBulkUpdate($hash,"CamVideoFlip",$data->{'data'}->{'cameras'}->[0]->{'video_flip'});
|
||||||
readingsBulkUpdate($hash,"Availability",$camStatus);
|
readingsBulkUpdate($hash,"Availability",$camStatus);
|
||||||
readingsBulkUpdate($hash,"DeviceType",$deviceType);
|
readingsBulkUpdate($hash,"DeviceType",$deviceType);
|
||||||
readingsBulkUpdate($hash,"LastUpdateTime",$update_time);
|
readingsBulkUpdate($hash,"LastUpdateTime",$update_time);
|
||||||
@ -2636,7 +2761,8 @@ return;
|
|||||||
<li>Activate a Camera in Synology Surveillance Station</li>
|
<li>Activate a Camera in Synology Surveillance Station</li>
|
||||||
<li>Retrieval of Camera Properties (also by Polling) as well as informations about the installed SVS-package</li>
|
<li>Retrieval of Camera Properties (also by Polling) as well as informations about the installed SVS-package</li>
|
||||||
<li>Move to a predefined Preset-position (at PTZ-cameras) </li>
|
<li>Move to a predefined Preset-position (at PTZ-cameras) </li>
|
||||||
<li>Positioning of PTZ-cameras to absolute X/Y-coordinates </li><br>
|
<li>Positioning of PTZ-cameras to absolute X/Y-coordinates </li>
|
||||||
|
<li>continuous moving of PTZ-camera lense </li><br>
|
||||||
</ul>
|
</ul>
|
||||||
</ul>
|
</ul>
|
||||||
The recordings and snapshots will be stored in Synology Surveillance Station (SVS) and are managed like the other (normal) recordings / snapshots defined by Surveillance Station rules.<br>
|
The recordings and snapshots will be stored in Synology Surveillance Station (SVS) and are managed like the other (normal) recordings / snapshots defined by Surveillance Station rules.<br>
|
||||||
@ -2740,6 +2866,7 @@ return;
|
|||||||
<tr><td><li>set ... enable </td><td> session: ServeillanceStation - manager </li></td></tr>
|
<tr><td><li>set ... enable </td><td> session: ServeillanceStation - manager </li></td></tr>
|
||||||
<tr><td><li>set ... goPreset </td><td> session: ServeillanceStation - observer with privilege objective control of camera </li></td></tr>
|
<tr><td><li>set ... goPreset </td><td> session: ServeillanceStation - observer with privilege objective control of camera </li></td></tr>
|
||||||
<tr><td><li>set ... goAbsPTZ </td><td> session: ServeillanceStation - observer with privilege objective control of camera </li></td></tr>
|
<tr><td><li>set ... goAbsPTZ </td><td> session: ServeillanceStation - observer with privilege objective control of camera </li></td></tr>
|
||||||
|
<tr><td><li>set ... move </td><td> session: ServeillanceStation - observer with privilege objective control of camera </li></td></tr>
|
||||||
<tr><td><li>set ... credentials </td><td> - </li></td></tr>
|
<tr><td><li>set ... credentials </td><td> - </li></td></tr>
|
||||||
<tr><td><li>get ... caminfoall </td><td> session: ServeillanceStation - observer </li></td></tr>
|
<tr><td><li>get ... caminfoall </td><td> session: ServeillanceStation - observer </li></td></tr>
|
||||||
<tr><td><li>get ... svsinfo </td><td> session: ServeillanceStation - observer </li></td></tr>
|
<tr><td><li>get ... svsinfo </td><td> session: ServeillanceStation - observer </li></td></tr>
|
||||||
@ -2774,6 +2901,7 @@ return;
|
|||||||
<tr><td>"credentials <username> <password>": </td><td>save a set of credentils </td></tr>
|
<tr><td>"credentials <username> <password>": </td><td>save a set of credentils </td></tr>
|
||||||
<tr><td>"goPreset <Preset>": </td><td>moves a PTZ-camera to a predefinied Preset-position </td></tr>
|
<tr><td>"goPreset <Preset>": </td><td>moves a PTZ-camera to a predefinied Preset-position </td></tr>
|
||||||
<tr><td>"goAbsPTZ [ X Y | up | down | left | right ]": </td><td>moves a PTZ-camera to a absolute X/Y-coordinate or to direction up/down/left/right </td></tr>
|
<tr><td>"goAbsPTZ [ X Y | up | down | left | right ]": </td><td>moves a PTZ-camera to a absolute X/Y-coordinate or to direction up/down/left/right </td></tr>
|
||||||
|
<tr><td>"move [ up | down | left | right | dir_X ]": </td><td>starts a continuous move of PTZ-camera to direction up/down/left/right or dir_X </td></tr>
|
||||||
</table>
|
</table>
|
||||||
<br><br>
|
<br><br>
|
||||||
|
|
||||||
@ -2911,6 +3039,28 @@ return;
|
|||||||
|
|
||||||
<br><br><br>
|
<br><br><br>
|
||||||
|
|
||||||
|
<b> set <name> move [ up | down | left | right | dir_X ] [seconds] </b> <br><br>
|
||||||
|
|
||||||
|
With this command a continuous move of a PTZ-camera will be started. In addition to the four basic directions up/down/left/right is it possible to use angular dimensions
|
||||||
|
"dir_X". The grain size of graduation depends on properties of the camera and can be identified by the Reading "CapPTZDirections". <br><br>
|
||||||
|
|
||||||
|
The radian measure of 360 degrees will be devided by the value of "CapPTZDirections" and describes the move drections starting with "0=right" counterclockwise.
|
||||||
|
That means, if a camera Reading is "CapPTZDirections = 8" it starts with dir_0 = right, dir_2 = top, dir_4 = left, dir_6 = bottom and respectively dir_1, dir_3, dir_5 and dir_7
|
||||||
|
the appropriate directions between. The possible moving directions of cameras with "CapPTZDirections = 32" are correspondingly divided into smaller sections. <br><br>
|
||||||
|
|
||||||
|
In opposite to the "set <name> goAbsPTZ"-command starts "set <name> move" a continuous move until a stop-command will be received.
|
||||||
|
The stop-command will be generated after the optional assignable time of [seconds]. If that retention period wouldn't be set by the command, a time of 1 second will be set implicit. <br><br>
|
||||||
|
|
||||||
|
Examples: <br>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
set <name> move up 0.5 : moves PTZ 0,5 Sek. (plus processing time) to the top
|
||||||
|
set <name> move dir_1 1.5 : moves PTZ 1,5 Sek. (plus processing time) to top-right
|
||||||
|
set <name> move dir_20 0.7 : moves PTZ 1,5 Sek. (plus processing time) to left-bottom ("CapPTZDirections = 32)"
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<br><br><br>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
@ -2996,6 +3146,7 @@ return;
|
|||||||
<table>
|
<table>
|
||||||
<colgroup> <col width=5%> <col width=95%> </colgroup>
|
<colgroup> <col width=5%> <col width=95%> </colgroup>
|
||||||
<tr><td><li>Availability</li> </td><td>- Availability of Camera (disabled, enabled, disconnected, other) </td></tr>
|
<tr><td><li>Availability</li> </td><td>- Availability of Camera (disabled, enabled, disconnected, other) </td></tr>
|
||||||
|
<tr><td><li>CamExposureMode</li> </td><td>- current exposure mode (Day, Night, Auto, Schedule, Unknown) </td></tr>
|
||||||
<tr><td><li>CamIP</li> </td><td>- IP-Address of Camera </td></tr>
|
<tr><td><li>CamIP</li> </td><td>- IP-Address of Camera </td></tr>
|
||||||
<tr><td><li>CamLiveMode</li> </td><td>- Source of Live-View (DS, Camera) </td></tr>
|
<tr><td><li>CamLiveMode</li> </td><td>- Source of Live-View (DS, Camera) </td></tr>
|
||||||
<tr><td><li>CamModel</li> </td><td>- Model of camera </td></tr>
|
<tr><td><li>CamModel</li> </td><td>- Model of camera </td></tr>
|
||||||
@ -3004,6 +3155,8 @@ return;
|
|||||||
<tr><td><li>CamRecShare</li> </td><td>- shared folder on disk station for recordings </td></tr>
|
<tr><td><li>CamRecShare</li> </td><td>- shared folder on disk station for recordings </td></tr>
|
||||||
<tr><td><li>CamRecVolume</li> </td><td>- Volume on disk station for recordings </td></tr>
|
<tr><td><li>CamRecVolume</li> </td><td>- Volume on disk station for recordings </td></tr>
|
||||||
<tr><td><li>CamVendor</li> </td><td>- Identifier of camera producer </td></tr>
|
<tr><td><li>CamVendor</li> </td><td>- Identifier of camera producer </td></tr>
|
||||||
|
<tr><td><li>CamVideoFlip</li> </td><td>- Is the video flip </td></tr>
|
||||||
|
<tr><td><li>CamVideoMirror</li> </td><td>- Is the video mirror </td></tr>
|
||||||
<tr><td><li>CapAudioOut</li> </td><td>- Capability to Audio Out over Surveillance Station (false/true) </td></tr>
|
<tr><td><li>CapAudioOut</li> </td><td>- Capability to Audio Out over Surveillance Station (false/true) </td></tr>
|
||||||
<tr><td><li>CapChangeSpeed</li> </td><td>- Capability to various motion speed </td></tr>
|
<tr><td><li>CapChangeSpeed</li> </td><td>- Capability to various motion speed </td></tr>
|
||||||
<tr><td><li>CapPTZAbs</li> </td><td>- Capability to perform absolute PTZ action </td></tr>
|
<tr><td><li>CapPTZAbs</li> </td><td>- Capability to perform absolute PTZ action </td></tr>
|
||||||
@ -3096,8 +3249,8 @@ return;
|
|||||||
<li>Aktivieren einer Kamera in Synology Surveillance Station</li>
|
<li>Aktivieren einer Kamera in Synology Surveillance Station</li>
|
||||||
<li>Abfrage von Kameraeigenschaften (auch mit Polling) sowie den Eigenschaften des installierten SVS-Paketes</li>
|
<li>Abfrage von Kameraeigenschaften (auch mit Polling) sowie den Eigenschaften des installierten SVS-Paketes</li>
|
||||||
<li>Bewegen an eine vordefinierte Preset-Position (bei PTZ-Kameras) </li>
|
<li>Bewegen an eine vordefinierte Preset-Position (bei PTZ-Kameras) </li>
|
||||||
<li>Positionieren von PTZ-Kameras zu absoluten X/Y-Koordinaten </li><br>
|
<li>Positionieren von PTZ-Kameras zu absoluten X/Y-Koordinaten </li>
|
||||||
|
<li>kontinuierliche Bewegung von PTZ-Kameras </li><br>
|
||||||
</ul>
|
</ul>
|
||||||
</ul>
|
</ul>
|
||||||
Die Aufnahmen stehen in der Synology Surveillance Station (SVS) zur Verfügung und unterliegen, wie jede andere Aufnahme, den in der Synology Surveillance Station eingestellten Regeln. <br>
|
Die Aufnahmen stehen in der Synology Surveillance Station (SVS) zur Verfügung und unterliegen, wie jede andere Aufnahme, den in der Synology Surveillance Station eingestellten Regeln. <br>
|
||||||
@ -3197,6 +3350,7 @@ return;
|
|||||||
<tr><td><li>set ... enable </td><td> session: ServeillanceStation - Manager </li></td></tr>
|
<tr><td><li>set ... enable </td><td> session: ServeillanceStation - Manager </li></td></tr>
|
||||||
<tr><td><li>set ... goPreset </td><td> session: ServeillanceStation - Betrachter mit Privileg Objektivsteuerung der Kamera </li></td></tr>
|
<tr><td><li>set ... goPreset </td><td> session: ServeillanceStation - Betrachter mit Privileg Objektivsteuerung der Kamera </li></td></tr>
|
||||||
<tr><td><li>set ... goAbsPTZ </td><td> session: ServeillanceStation - Betrachter mit Privileg Objektivsteuerung der Kamera </li></td></tr>
|
<tr><td><li>set ... goAbsPTZ </td><td> session: ServeillanceStation - Betrachter mit Privileg Objektivsteuerung der Kamera </li></td></tr>
|
||||||
|
<tr><td><li>set ... move </td><td> session: ServeillanceStation - Betrachter mit Privileg Objektivsteuerung der Kamera </li></td></tr>
|
||||||
<tr><td><li>set ... credentials </td><td> - </li></td></tr>
|
<tr><td><li>set ... credentials </td><td> - </li></td></tr>
|
||||||
<tr><td><li>get ... caminfoall </td><td> session: ServeillanceStation - Betrachter </li></td></tr>
|
<tr><td><li>get ... caminfoall </td><td> session: ServeillanceStation - Betrachter </li></td></tr>
|
||||||
<tr><td><li>get ... svsinfo </td><td> session: ServeillanceStation - Betrachter </li></td></tr>
|
<tr><td><li>get ... svsinfo </td><td> session: ServeillanceStation - Betrachter </li></td></tr>
|
||||||
@ -3232,6 +3386,7 @@ return;
|
|||||||
<tr><td>"credentials <username> <password>": </td><td>speichert die Zugangsinformationen</td></tr>
|
<tr><td>"credentials <username> <password>": </td><td>speichert die Zugangsinformationen</td></tr>
|
||||||
<tr><td>"goPreset <Preset>": </td><td>bewegt eine PTZ-Kamera zu einer vordefinierten Preset-Position </td></tr>
|
<tr><td>"goPreset <Preset>": </td><td>bewegt eine PTZ-Kamera zu einer vordefinierten Preset-Position </td></tr>
|
||||||
<tr><td>"goAbsPTZ [ X Y | up | down | left | right ]": </td><td>positioniert eine PTZ-camera zu einer absoluten X/Y-Koordinate oder maximalen up/down/left/right-position </td></tr>
|
<tr><td>"goAbsPTZ [ X Y | up | down | left | right ]": </td><td>positioniert eine PTZ-camera zu einer absoluten X/Y-Koordinate oder maximalen up/down/left/right-position </td></tr>
|
||||||
|
<tr><td>"move [ up | down | left | right | dir_X ]": </td><td>startet kontinuerliche Bewegung einer PTZ-Kamera in Richtung up/down/left/right bzw. dir_X </td></tr>
|
||||||
</table>
|
</table>
|
||||||
<br><br>
|
<br><br>
|
||||||
|
|
||||||
@ -3332,7 +3487,7 @@ return;
|
|||||||
2016.02.04 15:02:44 2: CamFL - Camera Flur_Vorderhaus has moved to position "Home"
|
2016.02.04 15:02:44 2: CamFL - Camera Flur_Vorderhaus has moved to position "Home"
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<br><br>
|
<br>
|
||||||
|
|
||||||
<b> "set <name> goAbsPTZ [ X Y | up | down | left | right ]" </b> <br><br>
|
<b> "set <name> goAbsPTZ [ X Y | up | down | left | right ]" </b> <br><br>
|
||||||
|
|
||||||
@ -3368,6 +3523,28 @@ return;
|
|||||||
|
|
||||||
<br><br><br>
|
<br><br><br>
|
||||||
|
|
||||||
|
<b> set <name> move [ up | down | left | right | dir_X ] [Sekunden] </b> <br><br>
|
||||||
|
|
||||||
|
Mit diesem Kommando wird eine kontinuierliche Bewegung der PTZ-Kamera gestartet. Neben den vier Grundrichtungen up/down/left/right stehen auch
|
||||||
|
Zwischenwinkelmaße "dir_X" zur Verfügung. Die Feinheit dieser Graduierung ist von der Kamera abhängig und kann dem Reading "CapPTZDirections" entnommen werden. <br><br>
|
||||||
|
|
||||||
|
Das Bogenmaß von 360 Grad teilt sich durch den Wert von "CapPTZDirections" und beschreibt die Bewegungsrichtungen beginnend mit "0=rechts" entgegen dem
|
||||||
|
Uhrzeigersinn. D.h. bei einer Kamera mit "CapPTZDirections = 8" bedeutet dir_0 = rechts, dir_2 = oben, dir_4 = links, dir_6 = unten bzw. dir_1, dir_3, dir_5 und dir_7
|
||||||
|
die entsprechenden Zwischenrichtungen. Die möglichen Bewegungsrichtungen bei Kameras mit "CapPTZDirections = 32" sind dementsprechend kleinteliger. <br><br>
|
||||||
|
|
||||||
|
Im Gegensatz zum "set <name> goAbsPTZ"-Befehl startet der Befehl "set <name> move" eine kontinuierliche Bewegung bis ein Stop-Kommando empfangen wird.
|
||||||
|
Das Stop-Kommando wird nach Ablauf der optional anzugebenden Zeit [Sekunden] ausgelöst. Wird diese Laufzeit nicht angegeben, wird implizit Sekunde = 1 gesetzt. <br><br>
|
||||||
|
|
||||||
|
Beispiele: <br>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
set <name> move up 0.5 : bewegt PTZ 0,5 Sek. (zzgl. Prozesszeit) nach oben
|
||||||
|
set <name> move dir_1 1.5 : bewegt PTZ 1,5 Sek. (zzgl. Prozesszeit) nach rechts-oben
|
||||||
|
set <name> move dir_20 0.7 : bewegt PTZ 1,5 Sek. (zzgl. Prozesszeit) nach links-unten ("CapPTZDirections = 32)"
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<br><br><br>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
@ -3454,6 +3631,7 @@ return;
|
|||||||
<table>
|
<table>
|
||||||
<colgroup> <col width=5%> <col width=95%> </colgroup>
|
<colgroup> <col width=5%> <col width=95%> </colgroup>
|
||||||
<tr><td><li>Availability</li> </td><td>- Verfügbarkeit der Kamera (disabled, enabled, disconnected, other) </td></tr>
|
<tr><td><li>Availability</li> </td><td>- Verfügbarkeit der Kamera (disabled, enabled, disconnected, other) </td></tr>
|
||||||
|
<tr><td><li>CamExposureMode</li> </td><td>- aktueller Belichtungsmodus (Day, Night, Auto, Schedule, Unknown) </td></tr>
|
||||||
<tr><td><li>CamIP</li> </td><td>- IP-Adresse der Kamera </td></tr>
|
<tr><td><li>CamIP</li> </td><td>- IP-Adresse der Kamera </td></tr>
|
||||||
<tr><td><li>CamLiveMode</li> </td><td>- Quelle für Live-Ansicht (DS, Camera) </td></tr>
|
<tr><td><li>CamLiveMode</li> </td><td>- Quelle für Live-Ansicht (DS, Camera) </td></tr>
|
||||||
<tr><td><li>CamModel</li> </td><td>- Kameramodell </td></tr>
|
<tr><td><li>CamModel</li> </td><td>- Kameramodell </td></tr>
|
||||||
@ -3462,6 +3640,8 @@ return;
|
|||||||
<tr><td><li>CamRecShare</li> </td><td>- gemeinsamer Ordner auf der DS für Aufnahmen </td></tr>
|
<tr><td><li>CamRecShare</li> </td><td>- gemeinsamer Ordner auf der DS für Aufnahmen </td></tr>
|
||||||
<tr><td><li>CamRecVolume</li> </td><td>- Volume auf der DS für Aufnahmen </td></tr>
|
<tr><td><li>CamRecVolume</li> </td><td>- Volume auf der DS für Aufnahmen </td></tr>
|
||||||
<tr><td><li>CamVendor</li> </td><td>- Kamerahersteller Bezeichnung </td></tr>
|
<tr><td><li>CamVendor</li> </td><td>- Kamerahersteller Bezeichnung </td></tr>
|
||||||
|
<tr><td><li>CamVideoFlip</li> </td><td>- Ist das Video gedreht </td></tr>
|
||||||
|
<tr><td><li>CamVideoMirror</li> </td><td>- Ist das Video gespiegelt </td></tr>
|
||||||
<tr><td><li>CapAudioOut</li> </td><td>- Fähigkeit der Kamera zur Audioausgabe über Surveillance Station (false/true) </td></tr>
|
<tr><td><li>CapAudioOut</li> </td><td>- Fähigkeit der Kamera zur Audioausgabe über Surveillance Station (false/true) </td></tr>
|
||||||
<tr><td><li>CapChangeSpeed</li> </td><td>- Fähigkeit der Kamera verschiedene Bewegungsgeschwindigkeiten auszuführen </td></tr>
|
<tr><td><li>CapChangeSpeed</li> </td><td>- Fähigkeit der Kamera verschiedene Bewegungsgeschwindigkeiten auszuführen </td></tr>
|
||||||
<tr><td><li>CapPTZAbs</li> </td><td>- Fähigkeit der Kamera für absolute PTZ-Aktionen </td></tr>
|
<tr><td><li>CapPTZAbs</li> </td><td>- Fähigkeit der Kamera für absolute PTZ-Aktionen </td></tr>
|
||||||
|
Loading…
Reference in New Issue
Block a user