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; + @@ -3004,6 +3155,8 @@ return; + + @@ -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; + @@ -3223,15 +3377,16 @@ 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
  • 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
  • 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
    - - - - - - - - - + + + + + + + + + +
    "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; + @@ -3462,6 +3640,8 @@ 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
  • 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