diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Control/onvif.pm b/scripts/ZoneMinder/lib/ZoneMinder/Control/onvif.pm index d8006dde9..c8cf84712 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/Control/onvif.pm +++ b/scripts/ZoneMinder/lib/ZoneMinder/Control/onvif.pm @@ -1,6 +1,6 @@ # ========================================================================== # -# ZoneMinder ONVIF Control Protocol Module, $Date: 2021-02-25 22:07:00 +0000 (Thu, 25 Feb 2021) $, $Revision: 0001 $ +# ZoneMinder ONVIF Control Protocol Module # Based on the Netcat onvif script by Andrew Bauer (knnniggett@users.sourceforge.net) # # This program is free software; you can redistribute it and/or @@ -182,6 +182,7 @@ sub sendCmd { $req->header('connection' => 'Close'); $req->content($msg); + my $res = $self->{ua}->request($req); if ( $res->is_success ) { @@ -235,22 +236,39 @@ sub getCamParams { sub autoStop { my $self = shift; my $autostop = shift; + my $iszoom = shift; if ( $autostop ) { Debug('Auto Stop'); my $cmd = $controlUri; - my $msg_body = ' - - - '.$profileToken.' - - true - - - false - - - '; + my $msg_body; + if( $iszoom) { + $msg_body = ' + + + '.$profileToken.' + + false + + + true + + + '; + } else { + $msg_body = ' + + + '.$profileToken.' + + true + + + false + + + '; + } my $content_type = 'application/soap+xml; charset=utf-8; action="http://www.onvif.org/ver20/ptz/wsdl/ContinuousMove"'; usleep($autostop); @@ -342,7 +360,7 @@ sub moveCamera { my $y = shift; my $msg_move_body = ''; - if ( $type eq 'move' ){ + if ( $type eq 'move' ) { $msg_move_body = ' @@ -381,7 +399,7 @@ sub moveConUp { my $msg_body = moveCamera("move", "0","0.5"); my $content_type = 'application/soap+xml; charset=utf-8; action="http://www.onvif.org/ver20/ptz/wsdl/ContinuousMove"'; $self->sendCmd($cmd, $msg_body, $content_type); - $self->autoStop($self->{Monitor}->{AutoStopTimeout}); + $self->autoStop($self->{Monitor}->{AutoStopTimeout},0); } @@ -393,7 +411,7 @@ sub moveConDown { my $msg_body = moveCamera("move","0","-0.5"); my $content_type = 'application/soap+xml; charset=utf-8; action="http://www.onvif.org/ver20/ptz/wsdl/ContinuousMove"'; $self->sendCmd($cmd, $msg_body, $content_type); - $self->autoStop($self->{Monitor}->{AutoStopTimeout}); + $self->autoStop($self->{Monitor}->{AutoStopTimeout},0); } #Left Arrow @@ -404,7 +422,7 @@ sub moveConLeft { my $msg_body = moveCamera("move","-0.49","0"); my $content_type = 'application/soap+xml; charset=utf-8; action="http://www.onvif.org/ver20/ptz/wsdl/ContinuousMove"'; $self->sendCmd($cmd, $msg_body, $content_type); - $self->autoStop($self->{Monitor}->{AutoStopTimeout}); + $self->autoStop($self->{Monitor}->{AutoStopTimeout},0); } #Right Arrow @@ -415,7 +433,7 @@ sub moveConRight { my $msg_body = moveCamera("move","0.49","0"); my $content_type = 'application/soap+xml; charset=utf-8; action="http://www.onvif.org/ver20/ptz/wsdl/ContinuousMove"'; $self->sendCmd($cmd, $msg_body, $content_type); - $self->autoStop($self->{Monitor}->{AutoStopTimeout}); + $self->autoStop($self->{Monitor}->{AutoStopTimeout},0); } #Zoom In @@ -426,7 +444,7 @@ sub zoomConTele { my $msg_body = moveCamera("zoom","0.49","0"); my $content_type = 'application/soap+xml; charset=utf-8; action="http://www.onvif.org/ver20/ptz/wsdl/ContinuousMove"'; $self->sendCmd($cmd, $msg_body, $content_type); - $self->autoStop($self->{Monitor}->{AutoStopTimeout}); + $self->autoStop($self->{Monitor}->{AutoStopTimeout},1); } #Zoom Out @@ -437,9 +455,19 @@ sub zoomConWide { my $msg_body = moveCamera("zoom","-0.49","0"); my $content_type = 'application/soap+xml; charset=utf-8; action="http://www.onvif.org/ver20/ptz/wsdl/ContinuousMove"'; $self->sendCmd($cmd, $msg_body, $content_type); - $self->autoStop($self->{Monitor}->{AutoStopTimeout}); + $self->autoStop($self->{Monitor}->{AutoStopTimeout},1); } +sub zoomStop { + Debug('Zoom Stop'); + my $self = shift; + my $cmd = $controlUri; + $self->autoStop($self->{Monitor}->{AutoStopTimeout},1); + Error('Zoom Stop not implemented'); +} + + + #Diagonally Up Right Arrow #This camera does not have builtin diagonal commands so we emulate them sub moveConUpRight { @@ -449,7 +477,7 @@ sub moveConUpRight { my $msg_body = moveCamera("move","0.5","0.5"); my $content_type = 'application/soap+xml; charset=utf-8; action="http://www.onvif.org/ver20/ptz/wsdl/ContinuousMove"'; $self->sendCmd($cmd, $msg_body, $content_type); - $self->autoStop($self->{Monitor}->{AutoStopTimeout}); + $self->autoStop($self->{Monitor}->{AutoStopTimeout},0); } #Diagonally Down Right Arrow @@ -461,7 +489,7 @@ sub moveConDownRight { my $msg_body = moveCamera("move","0.5","-0.5"); my $content_type = 'application/soap+xml; charset=utf-8; action="http://www.onvif.org/ver20/ptz/wsdl/ContinuousMove"'; $self->sendCmd($cmd, $msg_body, $content_type); - $self->autoStop($self->{Monitor}->{AutoStopTimeout}); + $self->autoStop($self->{Monitor}->{AutoStopTimeout},0); } #Diagonally Up Left Arrow @@ -473,7 +501,7 @@ sub moveConUpLeft { my $msg_body = moveCamera("move","-0.5","0.5"); my $content_type = 'application/soap+xml; charset=utf-8; action="http://www.onvif.org/ver20/ptz/wsdl/ContinuousMove"'; $self->sendCmd($cmd, $msg_body, $content_type); - $self->autoStop($self->{Monitor}->{AutoStopTimeout}); + $self->autoStop($self->{Monitor}->{AutoStopTimeout},0); } #Diagonally Down Left Arrow @@ -485,7 +513,7 @@ sub moveConDownLeft { my $msg_body = moveCamera("move","-0.5","-0.5"); my $content_type = 'application/soap+xml; charset=utf-8; action="http://www.onvif.org/ver20/ptz/wsdl/ContinuousMove"'; $self->sendCmd($cmd, $msg_body, $content_type); - $self->autoStop($self->{Monitor}->{AutoStopTimeout}); + $self->autoStop($self->{Monitor}->{AutoStopTimeout},0); } #Stop @@ -498,7 +526,7 @@ sub moveStop { '.$profileToken.' true - false + true '; my $content_type = 'application/soap+xml; charset=utf-8; action="http://www.onvif.org/ver20/ptz/wsdl/ContinuousMove"';