<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://wiki.staging.zoneminder.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Arhi</id>
	<title>ZoneMinder Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.staging.zoneminder.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Arhi"/>
	<link rel="alternate" type="text/html" href="http://wiki.staging.zoneminder.com/Special:Contributions/Arhi"/>
	<updated>2026-04-20T06:27:59Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>http://wiki.staging.zoneminder.com/index.php?title=7Links&amp;diff=6192</id>
		<title>7Links</title>
		<link rel="alternate" type="text/html" href="http://wiki.staging.zoneminder.com/index.php?title=7Links&amp;diff=6192"/>
		<updated>2014-05-28T14:43:28Z</updated>

		<summary type="html">&lt;p&gt;Arhi: added control script for 7LINKS SPX3615&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;7Links WLAN-IP-Camera&amp;#039;&amp;#039;&amp;#039; with IR-nightview &amp;amp; motion dedection&lt;br /&gt;
&lt;br /&gt;
I&amp;#039;m using this cheap model now for 3 weeks. Working fine so far, even at -8°C, no fault.&lt;br /&gt;
&lt;br /&gt;
Picture here:http://ecx.images-amazon.com/images/I/41GZi-upRuL._SL500_AA300_.jpg&lt;br /&gt;
&lt;br /&gt;
Working with following settings:&lt;br /&gt;
&lt;br /&gt;
Remote Protocol -&amp;gt; HTTP&lt;br /&gt;
&lt;br /&gt;
Remote Method -&amp;gt; Simple&lt;br /&gt;
&lt;br /&gt;
Remote Host Name -&amp;gt; username:password@192.168.xxx.xxx&lt;br /&gt;
&lt;br /&gt;
Remote Host Port -&amp;gt; 80&lt;br /&gt;
&lt;br /&gt;
Remote Host Path -&amp;gt; /videostream.cgi&lt;br /&gt;
&lt;br /&gt;
Remote Image Colors -&amp;gt; 24 bit color&lt;br /&gt;
&lt;br /&gt;
Capture Width (pixels) -&amp;gt; 320&lt;br /&gt;
&lt;br /&gt;
Capture Height (pixels) -&amp;gt; 240&lt;br /&gt;
&lt;br /&gt;
Preserve Aspect Ratio -&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Orientation -&amp;gt; 		Normal&lt;br /&gt;
&lt;br /&gt;
Also working with 640 x 480. I had to adjust the shared memory.&lt;br /&gt;
&lt;br /&gt;
Nice Video how to do this, for normal users (not linux 	specialists :-)&lt;br /&gt;
&lt;br /&gt;
Here: http://www.youtube.com/watch?v=o9PyV4wkFZM&amp;amp;feature=related&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For SPX-3615 you can enable pan-tilt:&lt;br /&gt;
&lt;br /&gt;
 +++&lt;br /&gt;
 package ZoneMinder::Control::7LINKSPX3615;&lt;br /&gt;
  &lt;br /&gt;
 use 5.006;&lt;br /&gt;
 use strict;&lt;br /&gt;
 use warnings; &lt;br /&gt;
 &lt;br /&gt;
 require ZoneMinder::Base;&lt;br /&gt;
 require ZoneMinder::Control;&lt;br /&gt;
 &lt;br /&gt;
 our @ISA = qw(ZoneMinder::Control);&lt;br /&gt;
 &lt;br /&gt;
 # ==========================================================================&lt;br /&gt;
 #&lt;br /&gt;
 # 7LINKS SPX3615&lt;br /&gt;
 # Author: Bogdan Kecman &amp;lt;bogdan.kecman at gmail&amp;gt;&lt;br /&gt;
 # Tested with SPX-3615 only&lt;br /&gt;
 #&lt;br /&gt;
 # /decoder_control.cgi?command=COMMAND&lt;br /&gt;
 #&lt;br /&gt;
 # COMMAND:&lt;br /&gt;
 # 0: up&lt;br /&gt;
 # 1: stop&lt;br /&gt;
 # 2: down&lt;br /&gt;
 # 4: left&lt;br /&gt;
 # 6: right&lt;br /&gt;
 # 92: down-left&lt;br /&gt;
 # 93: down-right&lt;br /&gt;
 # 91: up-right&lt;br /&gt;
 # 90: up-left&lt;br /&gt;
 #&lt;br /&gt;
 # 25: patrol all around&lt;br /&gt;
 # 26: vertical patrol&lt;br /&gt;
 # 27: vertical patrol stop&lt;br /&gt;
 # 28: horisontal patrol&lt;br /&gt;
 # 29: horisontal patrol stop&lt;br /&gt;
 #&lt;br /&gt;
 # 94 led off&lt;br /&gt;
 # 95 led on&lt;br /&gt;
 #&lt;br /&gt;
 # CALL PRESET&lt;br /&gt;
 # 31: 1&lt;br /&gt;
 # 33: 2&lt;br /&gt;
 # 35: 3&lt;br /&gt;
 # 37: 4&lt;br /&gt;
 # 39: 5&lt;br /&gt;
 # 41: 6&lt;br /&gt;
 # 43: 7&lt;br /&gt;
 # 45: 8&lt;br /&gt;
 # 47: 9&lt;br /&gt;
 # 49: 10&lt;br /&gt;
 # 51: 11&lt;br /&gt;
 # 53: 12&lt;br /&gt;
 # 55: 13&lt;br /&gt;
 # 57: 14&lt;br /&gt;
 # 59: 15&lt;br /&gt;
 #&lt;br /&gt;
 # SAVE PRESET&lt;br /&gt;
 # 30: 1&lt;br /&gt;
 # 32: 2&lt;br /&gt;
 # 34: 3&lt;br /&gt;
 # 36: 4&lt;br /&gt;
 # 38: 5&lt;br /&gt;
 # 40: 6&lt;br /&gt;
 # 42: 7&lt;br /&gt;
 # 44: 8&lt;br /&gt;
 # 46: 9&lt;br /&gt;
 # 48: 10&lt;br /&gt;
 # 50: 11&lt;br /&gt;
 # 52: 12&lt;br /&gt;
 # 54: 13&lt;br /&gt;
 # 56: 14&lt;br /&gt;
 # 58: 15&lt;br /&gt;
 #&lt;br /&gt;
 #&lt;br /&gt;
 #&lt;br /&gt;
 # 640x480&lt;br /&gt;
 # /camera_control.cgi?param=0&amp;amp;value=32&lt;br /&gt;
 #&lt;br /&gt;
 # 320x240&lt;br /&gt;
 # /camera_control.cgi?param=0&amp;amp;value=8&lt;br /&gt;
 #&lt;br /&gt;
 # 160x120&lt;br /&gt;
 # /camera_control.cgi?param=0&amp;amp;value=2&lt;br /&gt;
 #&lt;br /&gt;
 # 50Hz&lt;br /&gt;
 # /camera_control.cgi?param=3&amp;amp;value=0&lt;br /&gt;
 #&lt;br /&gt;
 # 60Hz&lt;br /&gt;
 # /camera_control.cgi?param=3&amp;amp;value=1&lt;br /&gt;
 #&lt;br /&gt;
 # outdoor&lt;br /&gt;
 # /camera_control.cgi?param=3&amp;amp;value=2&lt;br /&gt;
 #&lt;br /&gt;
 # brightness&lt;br /&gt;
 # /camera_control.cgi?param=1&amp;amp;value=112  (value: 0-240)&lt;br /&gt;
 #&lt;br /&gt;
 # contrast&lt;br /&gt;
 # /camera_control.cgi?param=2&amp;amp;value=0 (value 0-6)&lt;br /&gt;
 #&lt;br /&gt;
 # default all&lt;br /&gt;
 # /camera_control.cgi?param=0&amp;amp;value=8&lt;br /&gt;
 #&lt;br /&gt;
 # ==========================================================================&lt;br /&gt;
 &lt;br /&gt;
 use ZoneMinder::Logger qw(:all);&lt;br /&gt;
 use ZoneMinder::Config qw(:all);&lt;br /&gt;
 use Data::Dumper;&lt;br /&gt;
 use Time::HiRes qw( usleep );&lt;br /&gt;
 &lt;br /&gt;
 sub new&lt;br /&gt;
 {&lt;br /&gt;
         my $class = shift;&lt;br /&gt;
         my $id = shift;&lt;br /&gt;
         my $self = ZoneMinder::Control-&amp;gt;new( $id );&lt;br /&gt;
         bless( $self, $class );&lt;br /&gt;
         srand( time() );&lt;br /&gt;
         return $self;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 our $AUTOLOAD;&lt;br /&gt;
 &lt;br /&gt;
 sub AUTOLOAD&lt;br /&gt;
 {&lt;br /&gt;
         my $self = shift;&lt;br /&gt;
         my $class = ref($self) || croak( &amp;quot;$self not object&amp;quot; );&lt;br /&gt;
         my $name = $AUTOLOAD;&lt;br /&gt;
         $name =~ s/.*://;&lt;br /&gt;
 &lt;br /&gt;
         if ( exists($self-&amp;gt;{$name}) )&lt;br /&gt;
         {&lt;br /&gt;
                 return( $self-&amp;gt;{$name} );&lt;br /&gt;
         }&lt;br /&gt;
         Fatal( &amp;quot;Can&amp;#039;t access $name member of object of class $class&amp;quot; );&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 sub open&lt;br /&gt;
 {&lt;br /&gt;
         my $self = shift;&lt;br /&gt;
 &lt;br /&gt;
         $self-&amp;gt;loadMonitor();&lt;br /&gt;
 &lt;br /&gt;
         use LWP::UserAgent;&lt;br /&gt;
         $self-&amp;gt;{ua} = LWP::UserAgent-&amp;gt;new;&lt;br /&gt;
         $self-&amp;gt;{ua}-&amp;gt;agent( &amp;quot;ZoneMinder Control Agent/&amp;quot;.ZoneMinder::Base::ZM_VERSION );&lt;br /&gt;
 &lt;br /&gt;
         $self-&amp;gt;{state} = &amp;#039;open&amp;#039;;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 sub close&lt;br /&gt;
 {&lt;br /&gt;
         my $self = shift;&lt;br /&gt;
         $self-&amp;gt;{state} = &amp;#039;closed&amp;#039;;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 sub printMsg&lt;br /&gt;
 {&lt;br /&gt;
         my $self = shift;&lt;br /&gt;
         my $msg = shift;&lt;br /&gt;
         my $msg_len = length($msg);&lt;br /&gt;
 &lt;br /&gt;
         Debug( $msg.&amp;quot;[&amp;quot;.$msg_len.&amp;quot;]&amp;quot; );&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 sub sendCmd&lt;br /&gt;
 {&lt;br /&gt;
         my $self = shift;&lt;br /&gt;
         my $cmd = shift;&lt;br /&gt;
         my $result = undef;&lt;br /&gt;
 &lt;br /&gt;
         printMsg( $cmd, &amp;quot;Tx&amp;quot; );&lt;br /&gt;
 &lt;br /&gt;
         my $req = HTTP::Request-&amp;gt;new( GET=&amp;gt;&amp;quot;http://&amp;quot;.$self-&amp;gt;{Monitor}-&amp;gt;{ControlAddress}.&amp;quot;/$cmd&amp;quot; );&lt;br /&gt;
         my $res = $self-&amp;gt;{ua}-&amp;gt;request($req);&lt;br /&gt;
 &lt;br /&gt;
         if ( $res-&amp;gt;is_success )&lt;br /&gt;
         {&lt;br /&gt;
                 $result = !undef;&lt;br /&gt;
         }&lt;br /&gt;
         else&lt;br /&gt;
         {&lt;br /&gt;
                 Error( &amp;quot;Error check failed: &amp;#039;&amp;quot;.$res-&amp;gt;status_line().&amp;quot;&amp;#039; for URL &amp;quot;.$req-&amp;gt;uri() );&lt;br /&gt;
         }&lt;br /&gt;
 &lt;br /&gt;
         return( $result );&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 sub reset&lt;br /&gt;
 {&lt;br /&gt;
         my $self = shift;&lt;br /&gt;
         Debug( &amp;quot;Camera Reset&amp;quot; );&lt;br /&gt;
         $self-&amp;gt;sendCmd( &amp;#039;reboot.cgi?&amp;#039; );&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 #Up Arrow&lt;br /&gt;
 sub moveConUp&lt;br /&gt;
 {&lt;br /&gt;
         my $self = shift;&lt;br /&gt;
         Debug( &amp;quot;Move Up&amp;quot; );&lt;br /&gt;
         $self-&amp;gt;sendCmd( &amp;#039;decoder_control.cgi?command=0&amp;amp;&amp;#039; );&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 #Down Arrow&lt;br /&gt;
 sub moveConDown&lt;br /&gt;
 {&lt;br /&gt;
         my $self = shift;&lt;br /&gt;
         Debug( &amp;quot;Move Down&amp;quot; );&lt;br /&gt;
         $self-&amp;gt;sendCmd( &amp;#039;decoder_control.cgi?command=2&amp;amp;&amp;#039; );&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 #Left Arrow&lt;br /&gt;
 sub moveConLeft&lt;br /&gt;
 {&lt;br /&gt;
         my $self = shift;&lt;br /&gt;
         Debug( &amp;quot;Move Left&amp;quot; );&lt;br /&gt;
         $self-&amp;gt;sendCmd( &amp;#039;decoder_control.cgi?command=4&amp;amp;&amp;#039; );&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 #Right Arrow&lt;br /&gt;
 sub moveConRight&lt;br /&gt;
 {&lt;br /&gt;
         my $self = shift;&lt;br /&gt;
         Debug( &amp;quot;Move Right&amp;quot; );&lt;br /&gt;
         $self-&amp;gt;sendCmd( &amp;#039;decoder_control.cgi?command=6&amp;amp;&amp;#039; );&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 #Diagonally Up Right Arrow&lt;br /&gt;
 sub moveConUpRight&lt;br /&gt;
 {&lt;br /&gt;
         my $self = shift;&lt;br /&gt;
         Debug( &amp;quot;Move Diagonally Up Right&amp;quot; );&lt;br /&gt;
         $self-&amp;gt;sendCmd( &amp;#039;decoder_control.cgi?command=91&amp;amp;&amp;#039; );&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 #Diagonally Down Right Arrow&lt;br /&gt;
 sub moveConDownRight&lt;br /&gt;
 {&lt;br /&gt;
         my $self = shift;&lt;br /&gt;
         Debug( &amp;quot;Move Diagonally Down Right&amp;quot; );&lt;br /&gt;
         $self-&amp;gt;sendCmd( &amp;#039;decoder_control.cgi?command=93&amp;amp;&amp;#039; );&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 #Diagonally Up Left Arrow&lt;br /&gt;
 sub moveConUpLeft&lt;br /&gt;
 {&lt;br /&gt;
         my $self = shift;&lt;br /&gt;
         Debug( &amp;quot;Move Diagonally Up Left&amp;quot; );&lt;br /&gt;
         $self-&amp;gt;sendCmd( &amp;#039;decoder_control.cgi?command=90&amp;amp;&amp;#039; );&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 #Diagonally Down Left Arrow&lt;br /&gt;
 sub moveConDownLeft&lt;br /&gt;
 {&lt;br /&gt;
         my $self = shift;&lt;br /&gt;
         Debug( &amp;quot;Move Diagonally Down Left&amp;quot; );&lt;br /&gt;
         $self-&amp;gt;sendCmd( &amp;#039;decoder_control.cgi?command=92&amp;amp;&amp;#039; );&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 #Stop&lt;br /&gt;
 sub moveStop&lt;br /&gt;
 {&lt;br /&gt;
         my $self = shift;&lt;br /&gt;
         Debug( &amp;quot;Move Stop&amp;quot; );&lt;br /&gt;
         $self-&amp;gt;sendCmd( &amp;#039;decoder_control.cgi?command=1&amp;amp;&amp;#039; );&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 #Move Camera to Home Position&lt;br /&gt;
 sub presetHome&lt;br /&gt;
 {&lt;br /&gt;
         my $self = shift;&lt;br /&gt;
         Debug( &amp;quot;Home Preset&amp;quot; );&lt;br /&gt;
         $self-&amp;gt;sendCmd( &amp;#039;decoder_control.cgi?command=25&amp;amp;&amp;#039; );&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 sub presetGoto&lt;br /&gt;
 {&lt;br /&gt;
         my $self = shift;&lt;br /&gt;
         my $params = shift;&lt;br /&gt;
         my $preset = $self-&amp;gt;getParam( $params, &amp;#039;preset&amp;#039; );&lt;br /&gt;
         Debug( &amp;quot;Goto Preset $preset&amp;quot; );&lt;br /&gt;
         my $cmd = &amp;quot;decoder_control.cgi?command=&amp;quot; . ($preset *2 + 29 );&lt;br /&gt;
         $self-&amp;gt;sendCmd( $cmd );&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 sub presetSet&lt;br /&gt;
 {&lt;br /&gt;
         my $self = shift;&lt;br /&gt;
         my $params = shift;&lt;br /&gt;
         my $preset = $self-&amp;gt;getParam( $params, &amp;#039;preset&amp;#039; );&lt;br /&gt;
         Debug( &amp;quot;Set Preset $preset&amp;quot; );&lt;br /&gt;
         my $cmd = &amp;quot;decoder_control.cgi?command=&amp;quot; . ($preset *2 + 28);&lt;br /&gt;
         $self-&amp;gt;sendCmd( $cmd );&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 1;&lt;br /&gt;
 &lt;br /&gt;
 __END__&lt;br /&gt;
 =pod&lt;br /&gt;
 &lt;br /&gt;
 =head1 DESCRIPTION&lt;br /&gt;
 &lt;br /&gt;
 This module contains the implementation of the 7LINKS PX-3615 IP camera control protocol.&lt;br /&gt;
 &lt;br /&gt;
 =cut&lt;br /&gt;
 &lt;br /&gt;
 +++&lt;/div&gt;</summary>
		<author><name>Arhi</name></author>
	</entry>
</feed>