diff --git a/fhem/CHANGED b/fhem/CHANGED
index d52a624d6..dba751cae 100644
--- a/fhem/CHANGED
+++ b/fhem/CHANGED
@@ -1,5 +1,6 @@
# 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.
+ - feature 49_SSCAM: added function "move" for continuous PTZ action
- feature: 02_RSS: continue image update sequence after error (HTML)
- feature: 98_rssFeed: Possibility to modfy feed data via a custom function.
- change: 49_SSCAM: entries with loglevl "2" reviewed,changed to loglevl "3"
diff --git a/fhem/FHEM/49_SSCam.pm b/fhem/FHEM/49_SSCam.pm
index 7176733bc..ce2ff9dd0 100644
--- a/fhem/FHEM/49_SSCam.pm
+++ b/fhem/FHEM/49_SSCam.pm
@@ -27,7 +27,8 @@
##########################################################################################################
# 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
# to absolute positions
# refere to commandref or have a look in forum at:
@@ -152,10 +153,10 @@ sub SSCam_Define {
RemoveInternalTimer($hash); # alle Timer löschen
# 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
- InternalTimer(gettimeofday()+int(rand(20)), "initonboot", $hash, 0);
+ InternalTimer(gettimeofday()+int(srand(10)), "initonboot", $hash, 0);
return undef;
}
@@ -211,7 +212,6 @@ sub SSCam_Set {
my $logstr;
my $setlist;
my @prop;
- my $ptzaction;
# my $list .= "on off snap enable disable on-for-timer";
@@ -227,7 +227,8 @@ sub SSCam_Set {
"enable ".
"disable ".
((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") {
@@ -282,20 +283,21 @@ sub SSCam_Set {
@prop = split(/,/, $prop);
$prop = $prop[0];
$hash->{HELPER}{GOPRESETNAME} = $prop;
- $ptzaction = "gopreset";
- doptzaction($hash,$ptzaction);
+ $hash->{HELPER}{PTZACTION} = "gopreset";
+ doptzaction($hash);
}
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 ($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 "down") {$hash->{HELPER}{GOPTZPOSX} = 320; $hash->{HELPER}{GOPTZPOSY} = 0;}
if ($prop eq "left") {$hash->{HELPER}{GOPTZPOSX} = 0; $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;
}
else
@@ -306,8 +308,9 @@ sub SSCam_Set {
$hash->{HELPER}{GOPTZPOSX} = abs($prop);
$hash->{HELPER}{GOPTZPOSY} = abs($prop1);
- $ptzaction = "goabsptz";
- doptzaction($hash,$ptzaction);
+
+ $hash->{HELPER}{PTZACTION} = "goabsptz";
+ doptzaction($hash);
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";
}
+ 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
{
return $setlist;
@@ -323,7 +338,6 @@ return;
}
-
sub SSCam_Get {
my ($hash, @a) = @_;
return "\"get X\" needs at least an argument" if ( @a < 2 );
@@ -396,7 +410,7 @@ sub initonboot ($) {
}
else
{
- InternalTimer(gettimeofday()+0.1, "initonboot", $hash, 0);
+ InternalTimer(gettimeofday()+0.14, "initonboot", $hash, 0);
}
return undef;
@@ -513,7 +527,7 @@ sub watchdogpollcaminfo ($) {
my $name = $hash->{NAME};
my $camname = $hash->{CAMNAME};
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") {
@@ -527,7 +541,7 @@ sub watchdogpollcaminfo ($) {
$hash->{HELPER}{OLDVALPOLL} = AttrVal($name, "pollcaminfoall", undef);
# Pollingroutine aufrufen
- &getcaminfoall($hash);
+ getcaminfoall($hash);
}
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");
$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 ($$) {
- my ($hash, $ptzaction) = @_;
+sub doptzaction ($) {
+ my ($hash) = @_;
my $camname = $hash->{CAMNAME};
my $name = $hash->{NAME};
my $logstr;
@@ -794,17 +807,22 @@ sub doptzaction ($$) {
my $error;
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");
return;
}
- if ($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\"" ;
+ if ($hash->{HELPER}{PTZACTION} eq "goabsptz" && ReadingsVal("$name", "CapPTZAbs", "false") ne "true") {
+ $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");
return;
}
- if ($ptzaction eq "gopreset") {
+ if ($hash->{HELPER}{PTZACTION} eq "gopreset") {
if (!defined($hash->{HELPER}{ALLPRESETS}{$hash->{HELPER}{GOPRESETNAME}})) {
$errorcode = "600";
# Fehlertext zum Errorcode ermitteln
@@ -839,27 +857,36 @@ sub doptzaction ($$) {
readingsBulkUpdate($hash,"Error",$error);
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");
return;
}
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";
&printlog($hash,$logstr,"4");
- $hash->{OPMODE} = $ptzaction;
+ $hash->{OPMODE} = $hash->{HELPER}{PTZACTION};
$hash->{HELPER}{ACTIVE} = "on";
&getapisites_nonbl($hash);
}
- elsif ($ptzaction eq "goabsptz") {
- $logstr = "Move Camera $camname to position posX=\"$hash->{HELPER}{GOPTZPOSX}\" and posY=\"$hash->{HELPER}{GOPTZPOSY}\" now";
+ elsif ($hash->{HELPER}{PTZACTION} eq "goabsptz") {
+ $logstr = "Start move Camera $camname to position posX=\"$hash->{HELPER}{GOPTZPOSX}\" and posY=\"$hash->{HELPER}{GOPTZPOSY}\" now";
&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";
&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
@@ -959,6 +1010,7 @@ sub getcaminfoall ($) {
$logstr = "Polling of Camera $camname is deactivated now";
&printlog($hash,$logstr,"3");
}
+return undef;
}
###########################################################################
@@ -1717,11 +1769,17 @@ sub camop_nonbl ($) {
}
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\"";
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")
{
# eine Kamera wird aktiviert, Rückkehr wird mit "camret_nonbl" verarbeitet
@@ -1808,6 +1866,7 @@ sub camret_nonbl ($) {
my $camStatus;
my ($presetcnt,$cnt,$presid,$presname,@preskeys,$presetlist);
my ($patrolcnt,$patrolid,$patrolname,@patrolkeys,$patrollist);
+ my ($recStatus,$exposuremode);
my $userPriv;
my $verbose;
my $httptimeout;
@@ -1993,6 +2052,50 @@ sub camret_nonbl ($) {
$logstr = "--- End Function cam: $OpMode nonblocking ---";
&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")
{
# Kamera wurde aktiviert, sonst kann nichts laufen -> "off"
@@ -2129,7 +2232,7 @@ sub camret_nonbl ($) {
$camStatus = "other";
}
- my $recStatus = $data->{'data'}->{'cameras'}->[0]->{'recStatus'};
+ $recStatus = $data->{'data'}->{'cameras'}->[0]->{'recStatus'};
if ($recStatus ne "0") {
$recStatus = "Start";
}
@@ -2137,9 +2240,27 @@ sub camret_nonbl ($) {
$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
readingsBeginUpdate($hash);
readingsBulkUpdate($hash,"CamLiveMode",$camLiveMode);
+ readingsBulkUpdate($hash,"CamExposureMode",$exposuremode);
readingsBulkUpdate($hash,"CamModel",$data->{'data'}->{'cameras'}->[0]->{'detailInfo'}{'camModel'});
readingsBulkUpdate($hash,"CamRecShare",$data->{'data'}->{'cameras'}->[0]->{'camRecShare'});
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,"CamPreRecTime",$data->{'data'}->{'cameras'}->[0]->{'detailInfo'}{'camPreRecTime'});
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,"DeviceType",$deviceType);
readingsBulkUpdate($hash,"LastUpdateTime",$update_time);
@@ -2636,7 +2761,8 @@ return;
Activate a Camera in Synology Surveillance Station
Retrieval of Camera Properties (also by Polling) as well as informations about the installed SVS-package
Move to a predefined Preset-position (at PTZ-cameras)
- Positioning of PTZ-cameras to absolute X/Y-coordinates
+ Positioning of PTZ-cameras to absolute X/Y-coordinates
+ continuous moving of PTZ-camera lense
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.
@@ -2740,6 +2866,7 @@ return;
set ... enable | session: ServeillanceStation - manager |
set ... goPreset | session: ServeillanceStation - observer with privilege objective control of camera |
set ... goAbsPTZ | session: ServeillanceStation - observer with privilege objective control of camera |
+ set ... move | session: ServeillanceStation - observer with privilege objective control of camera |
set ... credentials | - |
get ... caminfoall | session: ServeillanceStation - observer |
get ... svsinfo | session: ServeillanceStation - observer |
@@ -2774,6 +2901,7 @@ return;
"credentials <username> <password>": | save a set of credentils |
"goPreset <Preset>": | moves a PTZ-camera to a predefinied Preset-position |
"goAbsPTZ [ X Y | up | down | left | right ]": | moves a PTZ-camera to a absolute X/Y-coordinate or to direction up/down/left/right |
+ "move [ up | down | left | right | dir_X ]": | starts a continuous move of PTZ-camera to direction up/down/left/right or dir_X |
@@ -2911,6 +3039,28 @@ return;
+ set <name> move [ up | down | left | right | dir_X ] [seconds]
+
+ 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".
+
+ 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.
+
+ 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.
+
+ Examples:
+
+
+ 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)"
+
+
+
+
@@ -2996,6 +3146,7 @@ return;
Availability | - Availability of Camera (disabled, enabled, disconnected, other) |
+ CamExposureMode | - current exposure mode (Day, Night, Auto, Schedule, Unknown) |
CamIP | - IP-Address of Camera |
CamLiveMode | - Source of Live-View (DS, Camera) |
CamModel | - Model of camera |
@@ -3004,6 +3155,8 @@ return;
CamRecShare | - shared folder on disk station for recordings |
CamRecVolume | - Volume on disk station for recordings |
CamVendor | - Identifier of camera producer |
+ CamVideoFlip | - Is the video flip |
+ CamVideoMirror | - Is the video mirror |
CapAudioOut | - Capability to Audio Out over Surveillance Station (false/true) |
CapChangeSpeed | - Capability to various motion speed |
CapPTZAbs | - Capability to perform absolute PTZ action |
@@ -3096,8 +3249,8 @@ return;
Aktivieren einer Kamera in Synology Surveillance Station
Abfrage von Kameraeigenschaften (auch mit Polling) sowie den Eigenschaften des installierten SVS-Paketes
Bewegen an eine vordefinierte Preset-Position (bei PTZ-Kameras)
- Positionieren von PTZ-Kameras zu absoluten X/Y-Koordinaten
-
+ Positionieren von PTZ-Kameras zu absoluten X/Y-Koordinaten
+ kontinuierliche Bewegung von PTZ-Kameras
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.
@@ -3197,6 +3350,7 @@ return;
set ... enable | session: ServeillanceStation - Manager |
set ... goPreset | session: ServeillanceStation - Betrachter mit Privileg Objektivsteuerung der Kamera |
set ... goAbsPTZ | session: ServeillanceStation - Betrachter mit Privileg Objektivsteuerung der Kamera |
+ set ... move | session: ServeillanceStation - Betrachter mit Privileg Objektivsteuerung der Kamera |
set ... credentials | - |
get ... caminfoall | session: ServeillanceStation - Betrachter |
get ... svsinfo | session: ServeillanceStation - Betrachter |
@@ -3223,15 +3377,16 @@ return;
- "on [rectime]": | startet eine Aufnahme. Die Aufnahme wird automatisch nach Ablauf der Zeit [rectime] gestoppt. |
- | Mit rectime = 0 wird eine Daueraufnahme gestartet die durch "set <name> off" wieder gestoppt werden muß. |
- "off" : | stoppt eine laufende Aufnahme manuell oder durch die Nutzung anderer Events (z.B. über at, notify) |
- "snap": | löst einen Schnappschuß der entsprechenden Kamera aus und speichert ihn in der Synology Surveillance Station |
- "disable": | deaktiviert eine Kamera in der Synology Surveillance Station |
- "enable": | aktiviert eine Kamera in der Synology Surveillance Station |
- "credentials <username> <password>": | speichert die Zugangsinformationen |
- "goPreset <Preset>": | bewegt eine PTZ-Kamera zu einer vordefinierten Preset-Position |
- "goAbsPTZ [ X Y | up | down | left | right ]": | positioniert eine PTZ-camera zu einer absoluten X/Y-Koordinate oder maximalen up/down/left/right-position |
+ "on [rectime]": | startet eine Aufnahme. Die Aufnahme wird automatisch nach Ablauf der Zeit [rectime] gestoppt. |
+ | Mit rectime = 0 wird eine Daueraufnahme gestartet die durch "set <name> off" wieder gestoppt werden muß. |
+ "off" : | stoppt eine laufende Aufnahme manuell oder durch die Nutzung anderer Events (z.B. über at, notify) |
+ "snap": | löst einen Schnappschuß der entsprechenden Kamera aus und speichert ihn in der Synology Surveillance Station |
+ "disable": | deaktiviert eine Kamera in der Synology Surveillance Station |
+ "enable": | aktiviert eine Kamera in der Synology Surveillance Station |
+ "credentials <username> <password>": | speichert die Zugangsinformationen |
+ "goPreset <Preset>": | bewegt eine PTZ-Kamera zu einer vordefinierten Preset-Position |
+ "goAbsPTZ [ X Y | up | down | left | right ]": | positioniert eine PTZ-camera zu einer absoluten X/Y-Koordinate oder maximalen up/down/left/right-position |
+ "move [ up | down | left | right | dir_X ]": | startet kontinuerliche Bewegung einer PTZ-Kamera in Richtung up/down/left/right bzw. dir_X |
@@ -3332,7 +3487,7 @@ return;
2016.02.04 15:02:44 2: CamFL - Camera Flur_Vorderhaus has moved to position "Home"
-
+
"set <name> goAbsPTZ [ X Y | up | down | left | right ]"
@@ -3364,7 +3519,29 @@ return;
verwendet werden. Die Optik wird in diesem Fall mit der größt möglichen Schrittweite zur Absolutposition in der angegebenen Richtung bewegt.
- Auch in diesem Fall muß der Vorgang ggf. mehrfach wiederholt werden um die Kameralinse in die gewünschte Position zu bringen.
+ Auch in diesem Fall muß der Vorgang ggf. mehrfach wiederholt werden um die Kameralinse in die gewünschte Position zu bringen.
+
+
+
+ set <name> move [ up | down | left | right | dir_X ] [Sekunden]
+
+ 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.
+
+ 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.
+
+ 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.
+
+ Beispiele:
+
+
+ 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)"
+
@@ -3454,6 +3631,7 @@ return;
Availability | - Verfügbarkeit der Kamera (disabled, enabled, disconnected, other) |
+ CamExposureMode | - aktueller Belichtungsmodus (Day, Night, Auto, Schedule, Unknown) |
CamIP | - IP-Adresse der Kamera |
CamLiveMode | - Quelle für Live-Ansicht (DS, Camera) |
CamModel | - Kameramodell |
@@ -3462,6 +3640,8 @@ return;
CamRecShare | - gemeinsamer Ordner auf der DS für Aufnahmen |
CamRecVolume | - Volume auf der DS für Aufnahmen |
CamVendor | - Kamerahersteller Bezeichnung |
+ CamVideoFlip | - Ist das Video gedreht |
+ CamVideoMirror | - Ist das Video gespiegelt |
CapAudioOut | - Fähigkeit der Kamera zur Audioausgabe über Surveillance Station (false/true) |
CapChangeSpeed | - Fähigkeit der Kamera verschiedene Bewegungsgeschwindigkeiten auszuführen |
CapPTZAbs | - Fähigkeit der Kamera für absolute PTZ-Aktionen |