2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-01-31 18:59:33 +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:
nasseeder1 2016-02-08 22:27:48 +00:00
parent e45f7439b2
commit c896fb45ec
2 changed files with 228 additions and 47 deletions

View File

@ -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"

View File

@ -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;
<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>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>
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 ... 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 ... 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>get ... caminfoall </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 &lt;username&gt; &lt;password&gt;": </td><td>save a set of credentils </td></tr>
<tr><td>"goPreset &lt;Preset&gt;": </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>"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>
<br><br>
@ -2911,6 +3039,28 @@ return;
<br><br><br>
<b> set &lt;name&gt; 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 &lt;name&gt; goAbsPTZ"-command starts "set &lt;name&gt; 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 &lt;name&gt; move up 0.5 : moves PTZ 0,5 Sek. (plus processing time) to the top
set &lt;name&gt; move dir_1 1.5 : moves PTZ 1,5 Sek. (plus processing time) to top-right
set &lt;name&gt; move dir_20 0.7 : moves PTZ 1,5 Sek. (plus processing time) to left-bottom ("CapPTZDirections = 32)"
</pre>
<br><br><br>
</ul>
<br>
@ -2996,6 +3146,7 @@ return;
<table>
<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>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>CamLiveMode</li> </td><td>- Source of Live-View (DS, 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>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>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>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>
@ -3096,8 +3249,8 @@ return;
<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>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>
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 ... 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 ... 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>get ... caminfoall </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 &lt;username&gt; &lt;password&gt;": </td><td>speichert die Zugangsinformationen</td></tr>
<tr><td>"goPreset &lt;Preset&gt;": </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>"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>
<br><br>
@ -3332,7 +3487,7 @@ return;
2016.02.04 15:02:44 2: CamFL - Camera Flur_Vorderhaus has moved to position "Home"
</pre>
<br><br>
<br>
<b> "set &lt;name&gt; goAbsPTZ [ X Y | up | down | left | right ]" </b> <br><br>
@ -3368,6 +3523,28 @@ return;
<br><br><br>
<b> set &lt;name&gt; 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 &lt;name&gt; goAbsPTZ"-Befehl startet der Befehl "set &lt;name&gt; 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 &lt;name&gt; move up 0.5 : bewegt PTZ 0,5 Sek. (zzgl. Prozesszeit) nach oben
set &lt;name&gt; move dir_1 1.5 : bewegt PTZ 1,5 Sek. (zzgl. Prozesszeit) nach rechts-oben
set &lt;name&gt; move dir_20 0.7 : bewegt PTZ 1,5 Sek. (zzgl. Prozesszeit) nach links-unten ("CapPTZDirections = 32)"
</pre>
<br><br><br>
</ul>
<br>
@ -3454,6 +3631,7 @@ return;
<table>
<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>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>CamLiveMode</li> </td><td>- Quelle für Live-Ansicht (DS, Camera) </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>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>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>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>