IPC-1002: Difference between revisions
Appearance
| Line 24: | Line 24: | ||
More features can be found at the above link. | More features can be found at the above link. | ||
= Ruby Code = | |||
<pre> | |||
RCODE: | RCODE: | ||
0:require 'Ruby_Generic_Serial_Device' | 0:require 'Ruby_Generic_Serial_Device' | ||
1:class Command < Ruby_Generic_Serial_Device::RubyCommandWrapper | 1:class Command < Ruby_Generic_Serial_Device::RubyCommandWrapper | ||
2:end | 2:end | ||
3:class | 3:class Device_95 < Ruby_Generic_Serial_Device::RubySerialIOWrapper | ||
4:#### 84 #################################################################### | 4:#### 84 #################################################################### | ||
5:def cmd_84(data, format, disable_aspect_lock, streamid, width, height, cmd=nil) | 5:def cmd_84(data, format, disable_aspect_lock, streamid, width, height, cmd=nil) | ||
| Line 37: | Line 39: | ||
10:auth_s.each{|c| auth_a.push(c)} | 10:auth_s.each{|c| auth_a.push(c)} | ||
11: | 11: | ||
12: | 12:fix_path=device_.devdata_[2]; | ||
13: | 13:fix_path='/'+fix_path if(fix_path[0]!='/'[0]); | ||
14:s | 14: | ||
15:s = "GET "+fix_path+" HTTP/1.0\r\n" | |||
16:s+= "Accept: */*\r\n" | |||
17: | 17:s+= "Authorization: Basic "+auth_a.pack("m").chop+"\r\n" | ||
18:s+= "\r\n" | |||
19: | |||
20: | 20:conn_.Send(s) | ||
21: | 21:recv="" | ||
22: | 22:while(true) | ||
23: | 23: buff=conn_.Recv(16384, 5000) | ||
24: if(buff.length() == 0) | |||
25: | 25: break | ||
26: | 26: end | ||
27: recv = recv + buff | |||
28:end | |||
29:if (recv=~ /^HTTP[^\r\n]+200\sOK.+?\r\n\r\n(.+)$/m) | |||
30: fileName="/tmp/ip_camera_img"+device_.devid_.to_s | |||
31: imageFile=File.new(fileName+".jpg",'w') | |||
32: imageFile.print $1 | |||
33: imageFile.close() | |||
34: system("/usr/bin/convert "+fileName+".jpg "+fileName+".png"); | |||
35: size=File.stat(fileName+".png").size | |||
36: imageFile=File.new(fileName+".png",'r') | |||
37: img = imageFile.read(size); | |||
38: imageFile.close() | |||
39: data_set(img) | |||
40: format_set('png') | |||
41:end | |||
42:return @returnParamArray | |||
43:end | |||
44:#### 200 #################################################################### | |||
45:def cmd_200(cmd=nil) | |||
46:@returnParamArray.clear | |||
47:conn_.Reconnect() | |||
48:auth_s=device_.devdata_[114]+":"+device_.devdata_[115] | |||
49:auth_a=Array.new; | |||
50:auth_s.each{|c| auth_a.push(c)} | |||
51:s = "GET /cgi-bin/action?action=cam_mv&diretion=cam_up&lang=eng HTTP/1.0\r\n" | |||
52:s+= "Accept: */*\r\n" | |||
53:s+= "Authorization: Basic "+auth_a.pack("m").chop+"\r\n" | |||
54:s+= "\r\n" | |||
55: | |||
56:conn_.Send(s) | |||
57:recv="" | |||
58:while(true) | |||
59:buff=conn_.Recv(256, 5000) | |||
60:if(buff.length() == 0) | |||
61:break | |||
62:end | |||
63:recv = recv + buff | |||
64:end | |||
65:return @returnParamArray | |||
66:end | |||
67:#### 201 #################################################################### | |||
68:def cmd_201(cmd=nil) | |||
69:@returnParamArray.clear | |||
70:conn_.Reconnect() | |||
71:auth_s=device_.devdata_[114]+":"+device_.devdata_[115] | |||
72:auth_a=Array.new; | |||
73:auth_s.each{|c| auth_a.push(c)} | |||
74:s = "GET /cgi-bin/action?action=cam_mv&diretion=cam_down&lang=eng HTTP/1.0\r\n" | |||
75:s+= "Accept: */*\r\n" | |||
76:s+= "Authorization: Basic "+auth_a.pack("m").chop+"\r\n" | |||
77:s+= "\r\n" | |||
78: | |||
79:conn_.Send(s) | |||
80:recv="" | |||
81:while(true) | |||
82:buff=conn_.Recv(256, 5000) | |||
83:if(buff.length() == 0) | |||
84:break | |||
85:end | |||
86:recv = recv + buff | |||
87:end | |||
88:return @returnParamArray | |||
89:end | |||
90:#### 202 #################################################################### | |||
91:def cmd_202(cmd=nil) | |||
92:@returnParamArray.clear | |||
93:conn_.Reconnect() | |||
94:auth_s=device_.devdata_[114]+":"+device_.devdata_[115] | |||
95:auth_a=Array.new; | |||
96:auth_s.each{|c| auth_a.push(c)} | |||
97:s = "GET /cgi-bin/action?action=cam_mv&diretion=cam_left&lang=eng HTTP/1.0\r\n" | |||
98:s+= "Accept: */*\r\n" | |||
99:s+= "Authorization: Basic "+auth_a.pack("m").chop+"\r\n" | |||
100:s+= "\r\n" | |||
101: | |||
102:conn_.Send(s) | |||
103:recv="" | |||
104:while(true) | |||
105:buff=conn_.Recv(256, 5000) | |||
106:if(buff.length() == 0) | |||
107:break | |||
108:end | |||
109:recv = recv + buff | |||
110:end | |||
111:return @returnParamArray | |||
112:end | |||
113:#### 203 #################################################################### | |||
114:def cmd_203(cmd=nil) | |||
115:@returnParamArray.clear | |||
116:conn_.Reconnect() | |||
117:auth_s=device_.devdata_[114]+":"+device_.devdata_[115] | |||
118:auth_a=Array.new; | |||
119:auth_s.each{|c| auth_a.push(c)} | |||
120:s = "GET /cgi-bin/action?action=cam_mv&diretion=cam_right&lang=eng HTTP/1.0\r\n" | |||
121:s+= "Accept: */*\r\n" | |||
122:s+= "Authorization: Basic "+auth_a.pack("m").chop+"\r\n" | |||
123:s+= "\r\n" | |||
124: | |||
125:conn_.Send(s) | |||
126:recv="" | |||
127:while(true) | |||
128: buff=conn_.Recv(256, 5000) | |||
129: if(buff.length() == 0) | |||
130: break | |||
131: end | |||
132: recv = recv + buff | |||
133:end | |||
134:return @returnParamArray | |||
135:end | |||
136:#### START SETTERS #################################################################### | |||
137:def initialize() | |||
138:super | |||
139:@returnParamArray=Array.new | |||
140:end | |||
141:def data_set(value) | |||
142:@returnParamArray[19]=value | |||
143:end | 143:end | ||
144:def | 144:def format_set(value) | ||
145:@returnParamArray[ | 145:@returnParamArray[20]=value | ||
146:end | 146:end | ||
147 | 147:#### END SETTERS #################################################################### | ||
148:end | |||
</pre> | |||
Revision as of 11:55, 2 January 2010

Status
The IPC-1002 device template can be derived from the Panasonic IP Camera. A template for this Camera has been submitted (Plug and Play doesn't quiet work however). Pan and Tilt support. This camera is a cheap camera and can be found at http://www.dealextreme.com/details.dx/sku.14272
Features
- Browser based
- PAN Range +/- 180°, TILT Range 120°
- 10/100mbit LAN
- LCD display the IP address /Network mask/gateway IP etc
- 6 infrared LED, automatic operate in dark environment
- 30fps max
- External sensor & alarm interface
- MPEG4 compression
- UPnP, DynDNS
More features can be found at the above link.
Ruby Code
RCODE:
0:require 'Ruby_Generic_Serial_Device'
1:class Command < Ruby_Generic_Serial_Device::RubyCommandWrapper
2:end
3:class Device_95 < Ruby_Generic_Serial_Device::RubySerialIOWrapper
4:#### 84 ####################################################################
5:def cmd_84(data, format, disable_aspect_lock, streamid, width, height, cmd=nil)
6:@returnParamArray.clear
7:conn_.Reconnect()
8:auth_s=device_.devdata_[114]+":"+device_.devdata_[115]
9:auth_a=Array.new;
10:auth_s.each{|c| auth_a.push(c)}
11:
12:fix_path=device_.devdata_[2];
13:fix_path='/'+fix_path if(fix_path[0]!='/'[0]);
14:
15:s = "GET "+fix_path+" HTTP/1.0\r\n"
16:s+= "Accept: */*\r\n"
17:s+= "Authorization: Basic "+auth_a.pack("m").chop+"\r\n"
18:s+= "\r\n"
19:
20:conn_.Send(s)
21:recv=""
22:while(true)
23: buff=conn_.Recv(16384, 5000)
24: if(buff.length() == 0)
25: break
26: end
27: recv = recv + buff
28:end
29:if (recv=~ /^HTTP[^\r\n]+200\sOK.+?\r\n\r\n(.+)$/m)
30: fileName="/tmp/ip_camera_img"+device_.devid_.to_s
31: imageFile=File.new(fileName+".jpg",'w')
32: imageFile.print $1
33: imageFile.close()
34: system("/usr/bin/convert "+fileName+".jpg "+fileName+".png");
35: size=File.stat(fileName+".png").size
36: imageFile=File.new(fileName+".png",'r')
37: img = imageFile.read(size);
38: imageFile.close()
39: data_set(img)
40: format_set('png')
41:end
42:return @returnParamArray
43:end
44:#### 200 ####################################################################
45:def cmd_200(cmd=nil)
46:@returnParamArray.clear
47:conn_.Reconnect()
48:auth_s=device_.devdata_[114]+":"+device_.devdata_[115]
49:auth_a=Array.new;
50:auth_s.each{|c| auth_a.push(c)}
51:s = "GET /cgi-bin/action?action=cam_mv&diretion=cam_up&lang=eng HTTP/1.0\r\n"
52:s+= "Accept: */*\r\n"
53:s+= "Authorization: Basic "+auth_a.pack("m").chop+"\r\n"
54:s+= "\r\n"
55:
56:conn_.Send(s)
57:recv=""
58:while(true)
59:buff=conn_.Recv(256, 5000)
60:if(buff.length() == 0)
61:break
62:end
63:recv = recv + buff
64:end
65:return @returnParamArray
66:end
67:#### 201 ####################################################################
68:def cmd_201(cmd=nil)
69:@returnParamArray.clear
70:conn_.Reconnect()
71:auth_s=device_.devdata_[114]+":"+device_.devdata_[115]
72:auth_a=Array.new;
73:auth_s.each{|c| auth_a.push(c)}
74:s = "GET /cgi-bin/action?action=cam_mv&diretion=cam_down&lang=eng HTTP/1.0\r\n"
75:s+= "Accept: */*\r\n"
76:s+= "Authorization: Basic "+auth_a.pack("m").chop+"\r\n"
77:s+= "\r\n"
78:
79:conn_.Send(s)
80:recv=""
81:while(true)
82:buff=conn_.Recv(256, 5000)
83:if(buff.length() == 0)
84:break
85:end
86:recv = recv + buff
87:end
88:return @returnParamArray
89:end
90:#### 202 ####################################################################
91:def cmd_202(cmd=nil)
92:@returnParamArray.clear
93:conn_.Reconnect()
94:auth_s=device_.devdata_[114]+":"+device_.devdata_[115]
95:auth_a=Array.new;
96:auth_s.each{|c| auth_a.push(c)}
97:s = "GET /cgi-bin/action?action=cam_mv&diretion=cam_left&lang=eng HTTP/1.0\r\n"
98:s+= "Accept: */*\r\n"
99:s+= "Authorization: Basic "+auth_a.pack("m").chop+"\r\n"
100:s+= "\r\n"
101:
102:conn_.Send(s)
103:recv=""
104:while(true)
105:buff=conn_.Recv(256, 5000)
106:if(buff.length() == 0)
107:break
108:end
109:recv = recv + buff
110:end
111:return @returnParamArray
112:end
113:#### 203 ####################################################################
114:def cmd_203(cmd=nil)
115:@returnParamArray.clear
116:conn_.Reconnect()
117:auth_s=device_.devdata_[114]+":"+device_.devdata_[115]
118:auth_a=Array.new;
119:auth_s.each{|c| auth_a.push(c)}
120:s = "GET /cgi-bin/action?action=cam_mv&diretion=cam_right&lang=eng HTTP/1.0\r\n"
121:s+= "Accept: */*\r\n"
122:s+= "Authorization: Basic "+auth_a.pack("m").chop+"\r\n"
123:s+= "\r\n"
124:
125:conn_.Send(s)
126:recv=""
127:while(true)
128: buff=conn_.Recv(256, 5000)
129: if(buff.length() == 0)
130: break
131: end
132: recv = recv + buff
133:end
134:return @returnParamArray
135:end
136:#### START SETTERS ####################################################################
137:def initialize()
138:super
139:@returnParamArray=Array.new
140:end
141:def data_set(value)
142:@returnParamArray[19]=value
143:end
144:def format_set(value)
145:@returnParamArray[20]=value
146:end
147:#### END SETTERS ####################################################################
148:end