##// END OF EJS Templates
Estandarizacion de write_device (True/False)...
Fiorella Quino -
r201:69bacf3f9cf6
parent child
Show More
@@ -1,1069 +1,1103
1 from django.db import models
1 from django.db import models
2 from apps.main.models import Configuration
2 from apps.main.models import Configuration
3 from django.core.urlresolvers import reverse
3 from django.core.urlresolvers import reverse
4 # Create your models here.
4 # Create your models here.
5
5
6 import ast
6 import ast
7 import socket
7 import socket
8 import json
8 import json
9 import requests
9 import requests
10 import struct
10 import struct
11 import sys, time
11 import sys, time
12
12
13 import multiprocessing
13 import multiprocessing
14
14
15
15
16 antenna_default = json.dumps({
16 antenna_default = json.dumps({
17 "antenna_up": [[0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5],
17 "antenna_up": [[0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5],
18 [0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5],
18 [0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5],
19 [0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5],
19 [0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5],
20 [0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5],
20 [0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5],
21 [0.5,0.5,0.5,0.5,1.0,1.0,1.0,1.0],
21 [0.5,0.5,0.5,0.5,1.0,1.0,1.0,1.0],
22 [0.5,0.5,0.5,0.5,1.0,1.0,1.0,1.0],
22 [0.5,0.5,0.5,0.5,1.0,1.0,1.0,1.0],
23 [0.5,0.5,0.5,0.5,1.0,1.0,1.0,1.0],
23 [0.5,0.5,0.5,0.5,1.0,1.0,1.0,1.0],
24 [0.5,0.5,0.5,0.5,1.0,1.0,1.0,1.0]
24 [0.5,0.5,0.5,0.5,1.0,1.0,1.0,1.0]
25 ]
25 ]
26 ,
26 ,
27 "antenna_down": [[0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5],
27 "antenna_down": [[0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5],
28 [0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5],
28 [0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5],
29 [0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5],
29 [0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5],
30 [0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5],
30 [0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5],
31 [0.5,0.5,0.5,0.5,3.0,3.0,3.0,3.0],
31 [0.5,0.5,0.5,0.5,3.0,3.0,3.0,3.0],
32 [0.5,0.5,0.5,0.5,3.0,3.0,3.0,3.0],
32 [0.5,0.5,0.5,0.5,3.0,3.0,3.0,3.0],
33 [0.5,0.5,0.5,0.5,3.0,3.0,3.0,3.0],
33 [0.5,0.5,0.5,0.5,3.0,3.0,3.0,3.0],
34 [0.5,0.5,0.5,0.5,3.0,3.0,3.0,3.0]],
34 [0.5,0.5,0.5,0.5,3.0,3.0,3.0,3.0]],
35 })
35 })
36
36
37
37
38 tx_default = json.dumps({
38 tx_default = json.dumps({
39 "up": [[1,1,1,1,0,0,0,0],
39 "up": [[1,1,1,1,0,0,0,0],
40 [1,1,1,1,0,0,0,0],
40 [1,1,1,1,0,0,0,0],
41 [1,1,1,1,0,0,0,0],
41 [1,1,1,1,0,0,0,0],
42 [1,1,1,1,0,0,0,0],
42 [1,1,1,1,0,0,0,0],
43 [0,0,0,0,1,1,1,1],
43 [0,0,0,0,1,1,1,1],
44 [0,0,0,0,1,1,1,1],
44 [0,0,0,0,1,1,1,1],
45 [0,0,0,0,1,1,1,1],
45 [0,0,0,0,1,1,1,1],
46 [0,0,0,0,1,1,1,1]],
46 [0,0,0,0,1,1,1,1]],
47
47
48 "down": [[1,1,1,1,0,0,0,0],
48 "down": [[1,1,1,1,0,0,0,0],
49 [1,1,1,1,0,0,0,0],
49 [1,1,1,1,0,0,0,0],
50 [1,1,1,1,0,0,0,0],
50 [1,1,1,1,0,0,0,0],
51 [1,1,1,1,0,0,0,0],
51 [1,1,1,1,0,0,0,0],
52 [0,0,0,0,1,1,1,1],
52 [0,0,0,0,1,1,1,1],
53 [0,0,0,0,1,1,1,1],
53 [0,0,0,0,1,1,1,1],
54 [0,0,0,0,1,1,1,1],
54 [0,0,0,0,1,1,1,1],
55 [0,0,0,0,1,1,1,1]],
55 [0,0,0,0,1,1,1,1]],
56 })
56 })
57
57
58 rx_default = json.dumps({
58 rx_default = json.dumps({
59 "up": [[1,1,1,1,0,0,0,0],
59 "up": [[1,1,1,1,0,0,0,0],
60 [1,1,1,1,0,0,0,0],
60 [1,1,1,1,0,0,0,0],
61 [1,1,1,1,0,0,0,0],
61 [1,1,1,1,0,0,0,0],
62 [1,1,1,1,0,0,0,0],
62 [1,1,1,1,0,0,0,0],
63 [0,0,0,0,1,1,1,1],
63 [0,0,0,0,1,1,1,1],
64 [0,0,0,0,1,1,1,1],
64 [0,0,0,0,1,1,1,1],
65 [0,0,0,0,1,1,1,1],
65 [0,0,0,0,1,1,1,1],
66 [0,0,0,0,1,1,1,1]],
66 [0,0,0,0,1,1,1,1]],
67
67
68 "down": [[1,1,1,1,0,0,0,0],
68 "down": [[1,1,1,1,0,0,0,0],
69 [1,1,1,1,0,0,0,0],
69 [1,1,1,1,0,0,0,0],
70 [1,1,1,1,0,0,0,0],
70 [1,1,1,1,0,0,0,0],
71 [1,1,1,1,0,0,0,0],
71 [1,1,1,1,0,0,0,0],
72 [0,0,0,0,1,1,1,1],
72 [0,0,0,0,1,1,1,1],
73 [0,0,0,0,1,1,1,1],
73 [0,0,0,0,1,1,1,1],
74 [0,0,0,0,1,1,1,1],
74 [0,0,0,0,1,1,1,1],
75 [0,0,0,0,1,1,1,1]],
75 [0,0,0,0,1,1,1,1]],
76 })
76 })
77
77
78 conf_default = {}
78 conf_default = {}
79 status_default = {}
79 status_default = {}
80 for i in range(1,65):
80 for i in range(1,65):
81 conf_default[str(i)] = ""
81 conf_default[str(i)] = ""
82 status_default[str(i)] = 0
82 status_default[str(i)] = 0
83
83
84 ues_default = json.dumps({
84 ues_default = json.dumps({
85 "up": [0.533333,0.00000,1.06667,0.00000],
85 "up": [0.533333,0.00000,1.06667,0.00000],
86 "down": [0.533333,0.00000,1.06667,0.00000]
86 "down": [0.533333,0.00000,1.06667,0.00000]
87 })
87 })
88
88
89 onlyrx_default = json.dumps({
89 onlyrx_default = json.dumps({
90 "up": False,
90 "up": False,
91 "down": False
91 "down": False
92 })
92 })
93
93
94 def up_convertion(cadena):
94 def up_convertion(cadena):
95 valores = []
95 valores = []
96 for c in cadena:
96 for c in cadena:
97 if c == 1.0: valores=valores+['000']
97 if c == 1.0: valores=valores+['000']
98 if c == 2.0: valores=valores+['001']
98 if c == 2.0: valores=valores+['001']
99 if c == 3.0: valores=valores+['010']
99 if c == 3.0: valores=valores+['010']
100 if c == 0.0: valores=valores+['011']
100 if c == 0.0: valores=valores+['011']
101 if c == 0.5: valores=valores+['100']
101 if c == 0.5: valores=valores+['100']
102 if c == 1.5: valores=valores+['101']
102 if c == 1.5: valores=valores+['101']
103 if c == 2.5: valores=valores+['110']
103 if c == 2.5: valores=valores+['110']
104 if c == 3.5: valores=valores+['111']
104 if c == 3.5: valores=valores+['111']
105
105
106 return valores
106 return valores
107
107
108 def up_conv_bits(value):
108 def up_conv_bits(value):
109
109
110 if value == 1.0: bits="000"
110 if value == 1.0: bits="000"
111 if value == 2.0: bits="001"
111 if value == 2.0: bits="001"
112 if value == 3.0: bits="010"
112 if value == 3.0: bits="010"
113 if value == 0.0: bits="011"
113 if value == 0.0: bits="011"
114 if value == 0.5: bits="100"
114 if value == 0.5: bits="100"
115 if value == 1.5: bits="101"
115 if value == 1.5: bits="101"
116 if value == 2.5: bits="110"
116 if value == 2.5: bits="110"
117 if value == 3.5: bits="111"
117 if value == 3.5: bits="111"
118
118
119 return bits
119 return bits
120
120
121 def down_convertion(cadena):
121 def down_convertion(cadena):
122 valores = []
122 valores = []
123 for c in cadena:
123 for c in cadena:
124 if c == 1.0: valores=valores+['000']
124 if c == 1.0: valores=valores+['000']
125 if c == 2.0: valores=valores+['001']
125 if c == 2.0: valores=valores+['001']
126 if c == 3.0: valores=valores+['010']
126 if c == 3.0: valores=valores+['010']
127 if c == 0.0: valores=valores+['011']
127 if c == 0.0: valores=valores+['011']
128 if c == 0.5: valores=valores+['100']
128 if c == 0.5: valores=valores+['100']
129 if c == 1.5: valores=valores+['101']
129 if c == 1.5: valores=valores+['101']
130 if c == 2.5: valores=valores+['110']
130 if c == 2.5: valores=valores+['110']
131 if c == 3.5: valores=valores+['111']
131 if c == 3.5: valores=valores+['111']
132
132
133 return valores
133 return valores
134
134
135 def down_conv_bits(value):
135 def down_conv_bits(value):
136
136
137 if value == 1.0: bits="000"
137 if value == 1.0: bits="000"
138 if value == 2.0: bits="001"
138 if value == 2.0: bits="001"
139 if value == 3.0: bits="010"
139 if value == 3.0: bits="010"
140 if value == 0.0: bits="011"
140 if value == 0.0: bits="011"
141 if value == 0.5: bits="100"
141 if value == 0.5: bits="100"
142 if value == 1.5: bits="101"
142 if value == 1.5: bits="101"
143 if value == 2.5: bits="110"
143 if value == 2.5: bits="110"
144 if value == 3.5: bits="111"
144 if value == 3.5: bits="111"
145
145
146 return bits
146 return bits
147
147
148 def ip2position(module_number):
148 def ip2position(module_number):
149 j=0
149 j=0
150 i=0
150 i=0
151 for x in range(0,module_number-1):
151 for x in range(0,module_number-1):
152 j=j+1
152 j=j+1
153 if j==8:
153 if j==8:
154 i=i+1
154 i=i+1
155 j=0
155 j=0
156
156
157 pos = [i,j]
157 pos = [i,j]
158 return pos
158 return pos
159
159
160
160
161 def fromBinary2Char(binary_string):
161 def fromBinary2Char(binary_string):
162 number = int(binary_string, 2)
162 number = int(binary_string, 2)
163 #Plus 33 to avoid more than 1 characters values such as: '\x01'-'\x1f'
163 #Plus 33 to avoid more than 1 characters values such as: '\x01'-'\x1f'
164 number = number + 33
164 number = number + 33
165 char = chr(number)
165 char = chr(number)
166 return char
166 return char
167
167
168 def fromChar2Binary(char):
168 def fromChar2Binary(char):
169 number = ord(char) - 33
169 number = ord(char) - 33
170 #Minus 33 to get the real value
170 #Minus 33 to get the real value
171 bits = bin(number)[2:]
171 bits = bin(number)[2:]
172 #To ensure we have a string with 6bits
172 #To ensure we have a string with 6bits
173 if len(bits) < 6:
173 if len(bits) < 6:
174 bits = bits.zfill(6)
174 bits = bits.zfill(6)
175 return bits
175 return bits
176
176
177 OPERATION_MODES = (
177 OPERATION_MODES = (
178 (0, 'Manual'),
178 (0, 'Manual'),
179 (1, 'Automatic'),
179 (1, 'Automatic'),
180 )
180 )
181
181
182
182
183 class ABSConfiguration(Configuration):
183 class ABSConfiguration(Configuration):
184 active_beam = models.CharField(verbose_name='Active Beam', max_length=20000, default="{}")
184 active_beam = models.CharField(verbose_name='Active Beam', max_length=20000, default="{}")
185 module_status = models.CharField(verbose_name='Module Status', max_length=10000, default=json.dumps(status_default))
185 module_status = models.CharField(verbose_name='Module Status', max_length=10000, default=json.dumps(status_default))
186 operation_mode = models.PositiveSmallIntegerField(verbose_name='Operation Mode', choices=OPERATION_MODES, default = 0)
186 operation_mode = models.PositiveSmallIntegerField(verbose_name='Operation Mode', choices=OPERATION_MODES, default = 0)
187 operation_value = models.FloatField(verbose_name='Periodic (seconds)', default="10", null=True, blank=True)
187 operation_value = models.FloatField(verbose_name='Periodic (seconds)', default="10", null=True, blank=True)
188
188
189 class Meta:
189 class Meta:
190 db_table = 'abs_configurations'
190 db_table = 'abs_configurations'
191
191
192 def get_absolute_url_plot(self):
192 def get_absolute_url_plot(self):
193 return reverse('url_plot_abs_patterns', args=[str(self.id)])
193 return reverse('url_plot_abs_patterns', args=[str(self.id)])
194
194
195
195
196 def parms_to_dict(self):
196 def parms_to_dict(self):
197
197
198 parameters = {}
198 parameters = {}
199
199
200 parameters['device_id'] = self.device.id
200 parameters['device_id'] = self.device.id
201 parameters['name'] = self.name
201 parameters['name'] = self.name
202 parameters['beams'] = {}
202 parameters['beams'] = {}
203
203
204 beams = ABSBeam.objects.filter(abs_conf=self)
204 beams = ABSBeam.objects.filter(abs_conf=self)
205 b=1
205 b=1
206 for beam in beams:
206 for beam in beams:
207 #absbeam = ABSBeam.objects.get(pk=beams[beam])
207 #absbeam = ABSBeam.objects.get(pk=beams[beam])
208 parameters['beams']['beam'+str(b)] = beam.parms_to_dict()#absbeam.parms_to_dict()
208 parameters['beams']['beam'+str(b)] = beam.parms_to_dict()#absbeam.parms_to_dict()
209 b+=1
209 b+=1
210
210
211 return parameters
211 return parameters
212
212
213 def dict_to_parms(self, parameters):
213 def dict_to_parms(self, parameters):
214
214
215 self.name = parameters['name']
215 self.name = parameters['name']
216
216
217 absbeams = ABSBeam.objects.filter(abs_conf=self)
217 absbeams = ABSBeam.objects.filter(abs_conf=self)
218 beams = parameters['beams']
218 beams = parameters['beams']
219
219
220 if absbeams:
220 if absbeams:
221 beams_number = len(beams)
221 beams_number = len(beams)
222 absbeams_number = len(absbeams)
222 absbeams_number = len(absbeams)
223 if beams_number==absbeams_number:
223 if beams_number==absbeams_number:
224 i = 1
224 i = 1
225 for absbeam in absbeams:
225 for absbeam in absbeams:
226 absbeam.dict_to_parms(beams['beam'+str(i)])
226 absbeam.dict_to_parms(beams['beam'+str(i)])
227 i = i+1
227 i = i+1
228 elif beams_number > absbeams_number:
228 elif beams_number > absbeams_number:
229 i = 1
229 i = 1
230 for absbeam in absbeams:
230 for absbeam in absbeams:
231 absbeam.dict_to_parms(beams['beam'+str(i)])
231 absbeam.dict_to_parms(beams['beam'+str(i)])
232 i=i+1
232 i=i+1
233 for x in range(i,beams_number+1):
233 for x in range(i,beams_number+1):
234 new_beam = ABSBeam(
234 new_beam = ABSBeam(
235 name =beams['beam'+str(i)]['name'],
235 name =beams['beam'+str(i)]['name'],
236 antenna =json.dumps(beams['beam'+str(i)]['antenna']),
236 antenna =json.dumps(beams['beam'+str(i)]['antenna']),
237 abs_conf = self,
237 abs_conf = self,
238 tx =json.dumps(beams['beam'+str(i)]['tx']),
238 tx =json.dumps(beams['beam'+str(i)]['tx']),
239 rx =json.dumps(beams['beam'+str(i)]['rx']),
239 rx =json.dumps(beams['beam'+str(i)]['rx']),
240 ues =json.dumps(beams['beam'+str(i)]['ues']),
240 ues =json.dumps(beams['beam'+str(i)]['ues']),
241 only_rx =json.dumps(beams['beam'+str(i)]['only_rx'])
241 only_rx =json.dumps(beams['beam'+str(i)]['only_rx'])
242 )
242 )
243 new_beam.save()
243 new_beam.save()
244 i=i+1
244 i=i+1
245 else: #beams_number < absbeams_number:
245 else: #beams_number < absbeams_number:
246 i = 1
246 i = 1
247 for absbeam in absbeams:
247 for absbeam in absbeams:
248 if i <= beams_number:
248 if i <= beams_number:
249 absbeam.dict_to_parms(beams['beam'+str(i)])
249 absbeam.dict_to_parms(beams['beam'+str(i)])
250 i=i+1
250 i=i+1
251 else:
251 else:
252 absbeam.delete()
252 absbeam.delete()
253 else:
253 else:
254 for beam in beams:
254 for beam in beams:
255 new_beam = ABSBeam(
255 new_beam = ABSBeam(
256 name =beams[beam]['name'],
256 name =beams[beam]['name'],
257 antenna =json.dumps(beams[beam]['antenna']),
257 antenna =json.dumps(beams[beam]['antenna']),
258 abs_conf = self,
258 abs_conf = self,
259 tx =json.dumps(beams[beam]['tx']),
259 tx =json.dumps(beams[beam]['tx']),
260 rx =json.dumps(beams[beam]['rx']),
260 rx =json.dumps(beams[beam]['rx']),
261 ues =json.dumps(beams[beam]['ues']),
261 ues =json.dumps(beams[beam]['ues']),
262 only_rx =json.dumps(beams[beam]['only_rx'])
262 only_rx =json.dumps(beams[beam]['only_rx'])
263 )
263 )
264 new_beam.save()
264 new_beam.save()
265
265
266
266
267
267
268 def update_from_file(self, parameters):
268 def update_from_file(self, parameters):
269
269
270 self.dict_to_parms(parameters)
270 self.dict_to_parms(parameters)
271 self.save()
271 self.save()
272
272
273
273
274 def get_beams(self, **kwargs):
274 def get_beams(self, **kwargs):
275 '''
275 '''
276 This function returns ABS Configuration beams
276 This function returns ABS Configuration beams
277 '''
277 '''
278 return ABSBeam.objects.filter(abs_conf=self.pk, **kwargs)
278 return ABSBeam.objects.filter(abs_conf=self.pk, **kwargs)
279
279
280 def clone(self, **kwargs):
280 def clone(self, **kwargs):
281
281
282 beams = self.get_beams()
282 beams = self.get_beams()
283 self.pk = None
283 self.pk = None
284 self.id = None
284 self.id = None
285 for attr, value in kwargs.items():
285 for attr, value in kwargs.items():
286 setattr(self, attr, value)
286 setattr(self, attr, value)
287 self.save()
287 self.save()
288
288
289 for beam in beams:
289 for beam in beams:
290 beam.clone(abs_conf=self)
290 beam.clone(abs_conf=self)
291
291
292 #-----For Active Beam-----
293 active_beam = json.loads(self.active_beam)
294 new_beams = ABSBeam.objects.filter(abs_conf=self)
295 active_beam['active_beam'] = new_beams[0].id
296 self.active_beam = json.dumps(active_beam)
297 self.save()
298 #-----For Active Beam-----
299
292 return self
300 return self
293
301
294
302
295 def module_conf(self, module_num, beams):
303 def module_conf(self, module_num, beams):
296 """
304 """
297 This function creates beam configurations for one abs module.
305 This function creates beam configurations for one abs module.
298 """
306 """
299 ip_address = self.device.ip_address
307 ip_address = self.device.ip_address
300 ip_address = ip_address.split('.')
308 ip_address = ip_address.split('.')
301 module_seq = (ip_address[0],ip_address[1],ip_address[2])
309 module_seq = (ip_address[0],ip_address[1],ip_address[2])
302 dot = '.'
310 dot = '.'
303 module_ip = dot.join(module_seq)+'.'+str(module_num)
311 module_ip = dot.join(module_seq)+'.'+str(module_num)
304 module_port = self.device.port_address
312 module_port = self.device.port_address
305 write_route = 'http://'+module_ip+':'+str(module_port)+'/write'
313 write_route = 'http://'+module_ip+':'+str(module_port)+'/write'
306
314
307 header = 'JROABSCeCnModCnMod01000108SNDFexperimento1.ab1'
315 #header = 'JROABSCeCnModCnMod01000108SNDFexperimento1.ab1'
308 module = 'ABS_'+str(module_num)
316 #module = 'ABS_'+str(module_num)
309 bs = '' #{}
317 bs = '' #{}
310 i=1
318 i=1
311
319
312 for beam in beams:
320 for beam in beams:
313 #bs[i] = fromBinary2Char(beam.module_6bits(module_num))
321 #bs[i] = fromBinary2Char(beam.module_6bits(module_num))
314 bs = bs + fromBinary2Char(beam.module_6bits(module_num))
322 bs = bs + fromBinary2Char(beam.module_6bits(module_num))
315 i=i+1
323 i=i+1
316
324
317 beams = bs
325 beams = bs
318
326
319 parameters = {}
327 parameters = {}
320 #parameters['header'] = header
321 #parameters['module'] = module
322 parameters['beams'] = beams #json.dumps(beams)
328 parameters['beams'] = beams #json.dumps(beams)
323 #print beams
324 #print parameters['beams']
325 print parameters
329 print parameters
326 answer = ''
330 answer = ''
327
331
328 try:
332 try:
329 #r_write = requests.post(write_route, parameters, timeout=0.5)
333 #r_write = requests.post(write_route, parameters, timeout=0.5)
330 r_write = requests.post(write_route, json = parameters, timeout=0.5)
334 r_write = requests.post(write_route, json = parameters, timeout=0.5)
331 answer = r_write.json()
335 answer = r_write.json()
332 self.message = answer['message']
336 #self.message = answer['message']
333 except:
337 except:
334 self.message = "Could not write ABS parameters"
338 #self.message = "Could not write ABS parameters"
335 return 0
339 return False
336 return 1
340
341 return answer
337
342
338
343
339
344
340 def write_device(self):
345 def write_device(self):
341 """
346 """
342 This function sends the beams list to every abs module.
347 This function sends the beams list to every abs module.
343 It needs 'module_conf' function
348 It needs 'module_conf' function
344 """
349 """
345
350
346 beams = ABSBeam.objects.filter(abs_conf=self)
351 beams = ABSBeam.objects.filter(abs_conf=self)
347
352
348 #-------------Write each abs module-----------
353 #-------------Write each abs module-----------
349 if beams:
354 if beams:
350 beams_status = ast.literal_eval(self.module_status)
355 beams_status = ast.literal_eval(self.module_status)
351 for i in range(61,64): #(62,65)
356 disconnected_modules = 0
352 try:
357 for i in range(1,65): #(62,65)
353 answer = self.module_conf(i, beams)
358 #--------------JUEVES-------------
354 beams_status[str(i)] = 1
359 if beams_status[str(i)] != 0:
355 self.module_status = json.dumps(beams_status)
360 try:
356 self.save()
361 answer = self.module_conf(i,beams)
357
362 if answer:
358 except:
363 if answer['status']:
359 beams_status[str(i)] = 0
364 beams_status[str(i)] = 3
360 self.module_status = json.dumps(beams_status)
365
361 self.save()
366 except:
362 answer = 0
367 beams_status[str(i)] = 1
363 return 0
368
369 pass
370 else:
371 disconnected_modules += 1
372 #--------------JUEVES-------------
373 #try:
374 # answer = self.module_conf(i, beams)
375 # beams_status[str(i)] = 1
376 # self.module_status = json.dumps(beams_status)
377 # self.save()
378
379 #except:
380 # beams_status[str(i)] = 0
381 # self.module_status = json.dumps(beams_status)
382 # self.save()
383 # answer = 0
384 # return 0
364 else:
385 else:
365 self.message = "ABS Configuration does not have beams"
386 self.message = "ABS Configuration does not have beams"
366 return 0
387 return False
367
388
368 #self.device.status = 1
389 #self.device.status = 1
369 ##
390 ##
370 if answer==1:
391 #-------------Jueves-------------
392 if disconnected_modules == 64:
393 self.message = "Could not write ABS Modules"
394 return False
395 else:
371 self.message = "ABS Beams List have been sent to ABS Modules"
396 self.message = "ABS Beams List have been sent to ABS Modules"
372 beams[0].set_as_activebeam()
397 beams[0].set_as_activebeam()
373 else:
398
374 self.message = "Could not read ABS parameters"
399 self.module_status = json.dumps(beams_status)
400 self.save()
401
402 #-------------Jueves-------------
403 #if answer==1:
404 # self.message = "ABS Beams List have been sent to ABS Modules"
405 # beams[0].set_as_activebeam()
406 #else:
407 # self.message = "Could not read ABS parameters"
375 ##
408 ##
376 self.save()
409 self.save()
377 return 1
410 return True
378
411
379
412
380
413
381
414
382 def read_module(self, module):
415 def read_module(self, module):
383
416
384 """
417 """
385 Read out-bits (up-down) of 1 abs module NOT for Configuration
418 Read out-bits (up-down) of 1 abs module NOT for Configuration
386 """
419 """
387
420
388 parameters = {}
421 parameters = {}
389 ip_address = self.device.ip_address
422 ip_address = self.device.ip_address
390 ip_address = ip_address.split('.')
423 ip_address = ip_address.split('.')
391 module_seq = (ip_address[0],ip_address[1],ip_address[2])
424 module_seq = (ip_address[0],ip_address[1],ip_address[2])
392 dot = '.'
425 dot = '.'
393 module_ip = dot.join(module_seq)+'.'+str(module)
426 module_ip = dot.join(module_seq)+'.'+str(module)
394 module_port = self.device.port_address
427 module_port = self.device.port_address
395 read_route = 'http://'+module_ip+':'+str(module_port)+'/read'
428 read_route = 'http://'+module_ip+':'+str(module_port)+'/read'
396
429
397 print(read_route)
430 print(read_route)
398
431
399 answer = ''
432 answer = ''
400 module_bits = ''
433 module_bits = ''
401
434
402 try:
435 try:
403 r_write = requests.get(read_route, timeout=0.7)
436 r_write = requests.get(read_route, timeout=0.7)
404 answer = r_write.json()
437 answer = r_write.json()
405 self.message = answer['message']
438 self.message = answer['message']
406 module_bits = answer['allbits']
439 module_bits = answer['allbits']
407 except:
440 except:
408 #message = "Could not read ABS parameters"
441 #message = "Could not read ABS parameters"
409 answer = r_write.json()
442 answer = r_write.json()
410 return 0
443 return 0
411
444
412 return module_bits
445 return module_bits
413
446
414
447
415 def absmodule_status(self):
448 def absmodule_status(self):
416 """
449 """
417 This function gets the status of each abs module. It sends GET method to Web Application
450 This function gets the status of each abs module. It sends GET method to Web Application
418 in Python Bottle.
451 in Python Bottle.
419 This function updates "module_status" field from ABSconfiguration.
452 This function updates "module_status" field from ABSconfiguration.
420 """
453 """
421 ip_address = self.device.ip_address
454 ip_address = self.device.ip_address
422 ip_address = ip_address.split('.')
455 ip_address = ip_address.split('.')
423 module_seq = (ip_address[0],ip_address[1],ip_address[2])
456 module_seq = (ip_address[0],ip_address[1],ip_address[2])
424 dot = '.'
457 dot = '.'
425 module_port = self.device.port_address
458 module_port = self.device.port_address
426
459
427 modules_status = json.loads(self.module_status)
460 modules_status = json.loads(self.module_status)
428
461
429 for i in range(1,65):
462 for i in range(1,65):
430 module_ip = dot.join(module_seq)+'.'+str(i)
463 module_ip = dot.join(module_seq)+'.'+str(i)
431 print module_ip
464 print module_ip
432
465
433 route = 'http://'+module_ip+':'+str(module_port)+'/hello'
466 route = 'http://'+module_ip+':'+str(module_port)+'/hello'
434
467
435 try:
468 try:
436 r = requests.get(route, timeout=0.7)
469 r = requests.get(route, timeout=0.7)
437 modules_status[str(i)] = 1
470 modules_status[str(i)] = 1
438 except:
471 except:
439 modules_status[str(i)] = 0
472 modules_status[str(i)] = 0
440 pass
473 pass
441
474
442
475
443 self.module_status=json.dumps(modules_status)
476 self.module_status=json.dumps(modules_status)
444 self.save()
477 self.save()
445
478
446 return
479 return
447
480
448
481
449 def connected_modules(self):
482 def connected_modules(self):
450 """
483 """
451 This function returns the number of connected abs-modules without updating.
484 This function returns the number of connected abs-modules without updating.
452 """
485 """
453 modules_status = json.loads(self.module_status)
486 modules_status = json.loads(self.module_status)
454 num = 0
487 num = 0
455 for status in modules_status:
488 for status in modules_status:
456 num = num +modules_status[status]
489 if modules_status[status] != 0:
490 num += 1
457
491
458 return num
492 return num
459
493
460
494
461 def status_device(self):
495 def status_device(self):
462 """
496 """
463 This function returns the status of all abs-modules as one.
497 This function returns the status of all abs-modules as one.
464 If at least one module is connected, its answer is "1"
498 If at least one module is connected, its answer is "1"
465 """
499 """
466 self.absmodule_status()
500 self.absmodule_status()
467 connected_modules = self.connected_modules()
501 connected_modules = self.connected_modules()
468 if connected_modules>0:
502 if connected_modules>0:
469 self.message = 'ABS modules Status have been updated.'
503 self.message = 'ABS modules Status have been updated.'
470 return 1
504 return 1
471 self.message = 'No ABS module is connected.'
505 self.message = 'No ABS module is connected.'
472 return 0
506 return 0
473
507
474
508
475
509
476 def write_module(self, module):
510 def write_module(self, module):
477
511
478 """
512 """
479 Send configuration to one abs module
513 Send configuration to one abs module
480 """
514 """
481
515
482 parameters = {}
516 parameters = {}
483 ip_address = self.abs_conf.device.ip_address
517 ip_address = self.abs_conf.device.ip_address
484 ip_address = ip_address.split('.')
518 ip_address = ip_address.split('.')
485 module_seq = (ip_address[0],ip_address[1],ip_address[2])
519 module_seq = (ip_address[0],ip_address[1],ip_address[2])
486 dot = '.'
520 dot = '.'
487 module_ip = dot.join(module_seq)+'.'+str(module)
521 module_ip = dot.join(module_seq)+'.'+str(module)
488 module_port = self.abs_conf.device.port_address
522 module_port = self.abs_conf.device.port_address
489 write_route = 'http://'+module_ip+':'+str(module_port)+'/write'
523 write_route = 'http://'+module_ip+':'+str(module_port)+'/write'
490
524
491 #print write_route
525 #print write_route
492
526
493 header = 'JROABSCeCnModCnMod01000108SNDFexperimento1.ab1'
527 header = 'JROABSCeCnModCnMod01000108SNDFexperimento1.ab1'
494 module = 'ABS_'+str(module)
528 module = 'ABS_'+str(module)
495 beams = {1: '001000', 2: '010001', 3: '010010', 4: '000011', 5: '101100', 6: '101101',
529 beams = {1: '001000', 2: '010001', 3: '010010', 4: '000011', 5: '101100', 6: '101101',
496 7: '110110', 8: '111111', 9: '000000', 10: '001001', 11: '010010', 12: '011011'}
530 7: '110110', 8: '111111', 9: '000000', 10: '001001', 11: '010010', 12: '011011'}
497
531
498 parameters['header'] = header
532 parameters['header'] = header
499 parameters['module'] = module
533 parameters['module'] = module
500 parameters['beams'] = json.dumps(beams)
534 parameters['beams'] = json.dumps(beams)
501
535
502 answer = ''
536 answer = ''
503
537
504 try:
538 try:
505 r_write = requests.post(write_route, parameters, timeout=0.5)
539 r_write = requests.post(write_route, parameters, timeout=0.5)
506 answer = r_write.json()
540 answer = r_write.json()
507 self.message = answer['message']
541 self.message = answer['message']
508 except:
542 except:
509 self.message = "Could not write ABS parameters"
543 self.message = "Could not write ABS parameters"
510 return 0
544 return 0
511
545
512
546
513 #self.device.status = int(answer['status'])
547 #self.device.status = int(answer['status'])
514
548
515 return 1
549 return 1
516
550
517
551
518 def beam_selector(self, module, beam_pos):
552 def beam_selector(self, module, beam_pos):
519 """
553 """
520 This function selects the beam number for one absmodule.
554 This function selects the beam number for one absmodule.
521 """
555 """
522
556
523 if beam_pos > 0:
557 if beam_pos > 0:
524 beam_pos = beam_pos - 1
558 beam_pos = beam_pos - 1
525 else:
559 else:
526 beam_pos = 0
560 beam_pos = 0
527
561
528 #El indice del apunte debe ser menor que el numero total de apuntes
562 #El indice del apunte debe ser menor que el numero total de apuntes
529 #El servidor tcp en el embebido comienza a contar desde 0
563 #El servidor tcp en el embebido comienza a contar desde 0
530 beams_list = ABSBeam.objects.filter(abs_conf=self)
564 beams_list = ABSBeam.objects.filter(abs_conf=self)
531 if len(beams_list) < beam_pos:
565 if len(beams_list) < beam_pos:
532 return 0
566 return 0
533
567
534 flag = 1
568 flag = 1
535 if beam_pos>9:
569 if beam_pos>9:
536 flag = 2
570 flag = 2
537
571
538 module_address = ('192.168.1.'+str(module), 5500)
572 module_address = ('192.168.1.'+str(module), 5500)
539 header = 'JROABSCeCnModCnMod0100000'
573 header = 'JROABSCeCnModCnMod0100000'
540 numbers = len(str(beam_pos))
574 numbers = len(str(beam_pos))
541 function = 'CHGB'
575 function = 'CHGB'
542
576
543 message_tx = header+str(numbers)+function+str(beam_pos)+'0'
577 message_tx = header+str(numbers)+function+str(beam_pos)+'0'
544
578
545 # Create the datagram socket
579 # Create the datagram socket
546 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
580 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
547 #sock.connect(module_address)
581 #sock.connect(module_address)
548 try:
582 try:
549 sock.connect(module_address)
583 sock.connect(module_address)
550 sock.send(message_tx)
584 sock.send(message_tx)
551 sock.close()
585 sock.close()
552 print("Writing abs module:"+module_address[0]+"...")
586 print("Writing abs module:"+module_address[0]+"...")
553 except:
587 except:
554 sock = None
588 sock = None
555 print("Problem writing abs module:"+module_address[0])
589 print("Problem writing abs module:"+module_address[0])
556 return 0
590 return 0
557
591
558 return 1
592 return 1
559
593
560
594
561 def change_beam(self, beam_pos):
595 def change_beam(self, beam_pos):
562 """
596 """
563 This function selects the beam number for all absmodules.
597 This function selects the beam number for all absmodules.
564 """
598 """
565 for i in range(1,65):
599 for i in range(1,65):
566 try:
600 try:
567 self.beam_selector(i,beam_pos)
601 self.beam_selector(i,beam_pos)
568 except:
602 except:
569 print("Problem with module: 192.168.1."+str(i))
603 print("Problem with module: 192.168.1."+str(i))
570 self.message = "Problem with module: 192.168.1."+str(i)
604 self.message = "Problem with module: 192.168.1."+str(i)
571 #return 0
605 #return 0
572 return 1
606 return 1
573
607
574
608
575 def send_beam_num(self, beam_pos):
609 def send_beam_num(self, beam_pos):
576 """
610 """
577 This function connects to a multicast group and sends the beam number
611 This function connects to a multicast group and sends the beam number
578 to all abs modules.
612 to all abs modules.
579 """
613 """
580
614
581 if beam_pos > 0:
615 if beam_pos > 0:
582 beam_pos = beam_pos - 1
616 beam_pos = beam_pos - 1
583 else:
617 else:
584 beam_pos = 0
618 beam_pos = 0
585
619
586 #El indice del apunte debe ser menor que el numero total de apuntes
620 #El indice del apunte debe ser menor que el numero total de apuntes
587 #El servidor tcp en el embebido comienza a contar desde 0
621 #El servidor tcp en el embebido comienza a contar desde 0
588 beams_list = ABSBeam.objects.filter(abs_conf=self)
622 beams_list = ABSBeam.objects.filter(abs_conf=self)
589 if len(beams_list) < beam_pos:
623 if len(beams_list) < beam_pos:
590 return 0
624 return 0
591
625
592 flag = 1
626 flag = 1
593 if beam_pos>9:
627 if beam_pos>9:
594 flag = 2
628 flag = 2
595
629
596 header = 'JROABSCeCnModCnMod0100000'
630 header = 'JROABSCeCnModCnMod0100000'
597 flag = str(flag)
631 flag = str(flag)
598 function = 'CHGB'
632 function = 'CHGB'
599 message_tx = header+flag+function+str(beam_pos)+'0'
633 message_tx = header+flag+function+str(beam_pos)+'0'
600
634
601 multicast_group = '224.3.29.71'
635 multicast_group = '224.3.29.71'
602 server_address = ('',10000)
636 server_address = ('',10000)
603
637
604 # Create the socket
638 # Create the socket
605 sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
639 sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
606 # Bind to the server address
640 # Bind to the server address
607 sock.bind(server_address)
641 sock.bind(server_address)
608 # Telling the OS add the socket to the multicast on all interfaces
642 # Telling the OS add the socket to the multicast on all interfaces
609 group = socket.inet_aton(multicast_group)
643 group = socket.inet_aton(multicast_group)
610 mreq = struct.pack('4sL', group, socket.INADDR_ANY)
644 mreq = struct.pack('4sL', group, socket.INADDR_ANY)
611 sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
645 sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
612
646
613 #print 'sending acknowledgement to all: \n' + message_tx
647 #print 'sending acknowledgement to all: \n' + message_tx
614 sock.sendto(message_tx, (multicast_group, 10000))
648 sock.sendto(message_tx, (multicast_group, 10000))
615 sock.close()
649 sock.close()
616 sock = None
650 sock = None
617
651
618 return 1
652 return 1
619
653
620 def test1(self):
654 def test1(self):
621 t1 = time.time()
655 t1 = time.time()
622 t2 = 0
656 t2 = 0
623 while (t2-t1)<100:#300
657 while (t2-t1)<100:#300
624 t2 = time.time()
658 t2 = time.time()
625 self.send_beam_num(2)
659 self.send_beam_num(2)
626 time.sleep(0.04)
660 time.sleep(0.04)
627 self.send_beam_num(1)
661 self.send_beam_num(1)
628 time.sleep(0.04)
662 time.sleep(0.04)
629 return
663 return
630
664
631 def change_procs_test1(self, module):
665 def change_procs_test1(self, module):
632
666
633 for i in range (1,300):#300
667 for i in range (1,300):#300
634 beam_pos = 1
668 beam_pos = 1
635 module_address = ('192.168.1.'+str(module), 5500)
669 module_address = ('192.168.1.'+str(module), 5500)
636 header = 'JROABSCeCnModCnMod0100000'
670 header = 'JROABSCeCnModCnMod0100000'
637 numbers = len(str(beam_pos))
671 numbers = len(str(beam_pos))
638 function = 'CHGB'
672 function = 'CHGB'
639
673
640 message_tx = header+str(numbers)+function+str(beam_pos)+'0'
674 message_tx = header+str(numbers)+function+str(beam_pos)+'0'
641
675
642 # Create the datagram socket
676 # Create the datagram socket
643 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
677 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
644 sock.connect(module_address)
678 sock.connect(module_address)
645
679
646 sock.send(message_tx)
680 sock.send(message_tx)
647 #t = sock.recv(1024)
681 #t = sock.recv(1024)
648 sock.close()
682 sock.close()
649 sock = None
683 sock = None
650
684
651
685
652 time.sleep(0.04)
686 time.sleep(0.04)
653
687
654
688
655 beam_pos = 0
689 beam_pos = 0
656 numbers = len(str(beam_pos))
690 numbers = len(str(beam_pos))
657
691
658 message_tx = header+str(numbers)+function+str(beam_pos)+'0'
692 message_tx = header+str(numbers)+function+str(beam_pos)+'0'
659
693
660 # Create the datagram socket
694 # Create the datagram socket
661 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
695 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
662 sock.connect(module_address)
696 sock.connect(module_address)
663 sock.send(message_tx)
697 sock.send(message_tx)
664 sock.close()
698 sock.close()
665 sock = None
699 sock = None
666
700
667 time.sleep(0.04)
701 time.sleep(0.04)
668
702
669
703
670 def multi_procs_test1(self):
704 def multi_procs_test1(self):
671
705
672 """
706 """
673 This function sends the beam number to all abs modules using multiprocessing.
707 This function sends the beam number to all abs modules using multiprocessing.
674 """
708 """
675
709
676 #if __name__ == "__main__":
710 #if __name__ == "__main__":
677 size = 10000000 # Number of random numbers to add
711 size = 10000000 # Number of random numbers to add
678 procs = 65 # (Number-1) of processes to create (absmodule)
712 procs = 65 # (Number-1) of processes to create (absmodule)
679
713
680 # Create a list of jobs and then iterate through
714 # Create a list of jobs and then iterate through
681 # the number of processes appending each process to
715 # the number of processes appending each process to
682 # the job list
716 # the job list
683 jobs = []
717 jobs = []
684 for i in range(1, procs):
718 for i in range(1, procs):
685
719
686 process = multiprocessing.Process(target=self.change_procs_test1,args=(i,))
720 process = multiprocessing.Process(target=self.change_procs_test1,args=(i,))
687 jobs.append(process)
721 jobs.append(process)
688 #print jobs
722 #print jobs
689
723
690 # Start the processes (i.e. calculate the random number lists)
724 # Start the processes (i.e. calculate the random number lists)
691 for j in jobs:
725 for j in jobs:
692 #time.sleep(0.4)
726 #time.sleep(0.4)
693 #print j
727 #print j
694 j.start()
728 j.start()
695
729
696 # Ensure all of the processes have finished
730 # Ensure all of the processes have finished
697 for j in jobs:
731 for j in jobs:
698 j.join()
732 j.join()
699
733
700 print("List processing complete.")
734 print("List processing complete.")
701 return 1
735 return 1
702
736
703
737
704
738
705 def multi_procs_test2(self):
739 def multi_procs_test2(self):
706 """
740 """
707 This function use multiprocessing python library. Importing Pool we can select
741 This function use multiprocessing python library. Importing Pool we can select
708 the number of cores we want to use
742 the number of cores we want to use
709 After 'nproc' linux command, we know how many cores computer has.
743 After 'nproc' linux command, we know how many cores computer has.
710 NOT WORKING
744 NOT WORKING
711 """
745 """
712 import multiprocessing
746 import multiprocessing
713 pool = multiprocessing.Pool(3) # cores
747 pool = multiprocessing.Pool(3) # cores
714
748
715 tasks = []
749 tasks = []
716 procs = 65
750 procs = 65
717 for i in range(62, procs):
751 for i in range(62, procs):
718 tasks.append( (i,))
752 tasks.append( (i,))
719 #print tasks
753 #print tasks
720 #pool.apply_async(self.change_procs_test1, 62)
754 #pool.apply_async(self.change_procs_test1, 62)
721 results = [pool.apply( self.change_procs_test1, t ) for t in tasks]
755 results = [pool.apply( self.change_procs_test1, t ) for t in tasks]
722 #for result in results:
756 #for result in results:
723 #result.get()
757 #result.get()
724 #(plotNum, plotFilename) = result.get()
758 #(plotNum, plotFilename) = result.get()
725 #print("Result: plot %d written to %s" % (plotNum, plotFilename) )
759 #print("Result: plot %d written to %s" % (plotNum, plotFilename) )
726
760
727 return 1
761 return 1
728
762
729
763
730 def multi_procs_test3(self):
764 def multi_procs_test3(self):
731 """
765 """
732 This function use multiprocessing python library. Importing Pool we can select
766 This function use multiprocessing python library. Importing Pool we can select
733 the number of cores we want to use
767 the number of cores we want to use
734 After 'nproc' linux command, we know how many cores computer has.
768 After 'nproc' linux command, we know how many cores computer has.
735 """
769 """
736 from multiprocessing import Pool
770 from multiprocessing import Pool
737 import time
771 import time
738
772
739 def f(x):
773 def f(x):
740 return x*x
774 return x*x
741
775
742 tasks = []
776 tasks = []
743 procs = 65
777 procs = 65
744 pool = Pool(processes=4)
778 pool = Pool(processes=4)
745
779
746 #for i in range(62, procs):
780 #for i in range(62, procs):
747 #result = pool.map(f, range(62,65))
781 #result = pool.map(f, range(62,65))
748 it = pool.imap(self.change_procs_test1, range(62,65))
782 it = pool.imap(self.change_procs_test1, range(62,65))
749 #result.get(timeout=5)
783 #result.get(timeout=5)
750
784
751 return 1
785 return 1
752
786
753
787
754 def f(x):
788 def f(x):
755 print x
789 print x
756 return
790 return
757
791
758 def multi_procs_test4(self):
792 def multi_procs_test4(self):
759 import multiprocessing as mp
793 import multiprocessing as mp
760
794
761
795
762 num_workers = mp.cpu_count()
796 num_workers = mp.cpu_count()
763
797
764 pool = mp.Pool(num_workers)
798 pool = mp.Pool(num_workers)
765 procs = 65
799 procs = 65
766 for i in range(62, procs):
800 for i in range(62, procs):
767 #for task in tasks:
801 #for task in tasks:
768 pool.apply_async(self.f, args = (i,))
802 pool.apply_async(self.f, args = (i,))
769
803
770 pool.close()
804 pool.close()
771 pool.join()
805 pool.join()
772
806
773 return 1
807 return 1
774
808
775
809
776 def get_absolute_url_import(self):
810 def get_absolute_url_import(self):
777 return reverse('url_import_abs_conf', args=[str(self.id)])
811 return reverse('url_import_abs_conf', args=[str(self.id)])
778
812
779
813
780
814
781
815
782 class ABSBeam(models.Model):
816 class ABSBeam(models.Model):
783
817
784 name = models.CharField(max_length=60, default='Beam')
818 name = models.CharField(max_length=60, default='Beam')
785 antenna = models.CharField(verbose_name='Antenna', max_length=1000, default=antenna_default)
819 antenna = models.CharField(verbose_name='Antenna', max_length=1000, default=antenna_default)
786 abs_conf = models.ForeignKey(ABSConfiguration, null=True, verbose_name='ABS Configuration')
820 abs_conf = models.ForeignKey(ABSConfiguration, null=True, verbose_name='ABS Configuration')
787 tx = models.CharField(verbose_name='Tx', max_length=1000, default=tx_default)
821 tx = models.CharField(verbose_name='Tx', max_length=1000, default=tx_default)
788 rx = models.CharField(verbose_name='Rx', max_length=1000, default=rx_default)
822 rx = models.CharField(verbose_name='Rx', max_length=1000, default=rx_default)
789 s_time = models.TimeField(verbose_name='Star Time', default='00:00:00')
823 s_time = models.TimeField(verbose_name='Star Time', default='00:00:00')
790 e_time = models.TimeField(verbose_name='End Time', default='23:59:59')
824 e_time = models.TimeField(verbose_name='End Time', default='23:59:59')
791 modules_conf = models.CharField(verbose_name='Modules', max_length=2000, default=json.dumps(conf_default))
825 modules_conf = models.CharField(verbose_name='Modules', max_length=2000, default=json.dumps(conf_default))
792 ues = models.CharField(verbose_name='Ues', max_length=100, default=ues_default)
826 ues = models.CharField(verbose_name='Ues', max_length=100, default=ues_default)
793 only_rx = models.CharField(verbose_name='Only RX', max_length=40, default=onlyrx_default)
827 only_rx = models.CharField(verbose_name='Only RX', max_length=40, default=onlyrx_default)
794
828
795 class Meta:
829 class Meta:
796 db_table = 'abs_beams'
830 db_table = 'abs_beams'
797
831
798 def __unicode__(self):
832 def __unicode__(self):
799 return u'%s' % (self.name)
833 return u'%s' % (self.name)
800
834
801 def parms_to_dict(self):
835 def parms_to_dict(self):
802
836
803 #Update data
837 #Update data
804 self.modules_6bits()
838 self.modules_6bits()
805
839
806 parameters = {}
840 parameters = {}
807
841
808 parameters['name'] = self.name
842 parameters['name'] = self.name
809 parameters['antenna'] = ast.literal_eval(self.antenna)
843 parameters['antenna'] = ast.literal_eval(self.antenna)
810 parameters['abs_conf'] = self.abs_conf.name
844 parameters['abs_conf'] = self.abs_conf.name
811 parameters['tx'] = ast.literal_eval(self.tx)
845 parameters['tx'] = ast.literal_eval(self.tx)
812 parameters['rx'] = ast.literal_eval(self.rx)
846 parameters['rx'] = ast.literal_eval(self.rx)
813 parameters['s_time'] = self.s_time.strftime("%H:%M:%S")
847 parameters['s_time'] = self.s_time.strftime("%H:%M:%S")
814 parameters['e_time'] = self.e_time.strftime("%H:%M:%S")
848 parameters['e_time'] = self.e_time.strftime("%H:%M:%S")
815 parameters['configuration'] = ast.literal_eval(self.modules_conf)
849 parameters['configuration'] = ast.literal_eval(self.modules_conf)
816 parameters['ues'] = ast.literal_eval(self.ues)
850 parameters['ues'] = ast.literal_eval(self.ues)
817 parameters['only_rx'] = json.loads(self.only_rx)
851 parameters['only_rx'] = json.loads(self.only_rx)
818
852
819 return parameters
853 return parameters
820
854
821 def dict_to_parms(self, parameters):
855 def dict_to_parms(self, parameters):
822
856
823 self.name = parameters['name']
857 self.name = parameters['name']
824 self.antenna = json.dumps(parameters['antenna'])
858 self.antenna = json.dumps(parameters['antenna'])
825 #self.abs_conf = parameters['abs_conf']
859 #self.abs_conf = parameters['abs_conf']
826 self.tx = json.dumps(parameters['tx'])
860 self.tx = json.dumps(parameters['tx'])
827 self.rx = json.dumps(parameters['rx'])
861 self.rx = json.dumps(parameters['rx'])
828 #self.s_time = parameters['s_time']
862 #self.s_time = parameters['s_time']
829 #self.e_time = parameters['e_time']
863 #self.e_time = parameters['e_time']
830 self.ues = json.dumps(parameters['ues'])
864 self.ues = json.dumps(parameters['ues'])
831 self.only_rx = json.dumps(parameters['only_rx'])
865 self.only_rx = json.dumps(parameters['only_rx'])
832
866
833 self.modules_6bits()
867 self.modules_6bits()
834 self.save()
868 self.save()
835
869
836
870
837 def clone(self, **kwargs):
871 def clone(self, **kwargs):
838
872
839 self.pk = None
873 self.pk = None
840 self.id = None
874 self.id = None
841 for attr, value in kwargs.items():
875 for attr, value in kwargs.items():
842 setattr(self, attr, value)
876 setattr(self, attr, value)
843
877
844 self.save()
878 self.save()
845
879
846 return self
880 return self
847
881
848
882
849
883
850 def module_6bits(self, module):
884 def module_6bits(self, module):
851 """
885 """
852 This function reads antenna pattern and choose 6bits (upbits-downbits) for one abs module
886 This function reads antenna pattern and choose 6bits (upbits-downbits) for one abs module
853 """
887 """
854 if module > 64:
888 if module > 64:
855 beam_bits = ""
889 beam_bits = ""
856 return beam_bits
890 return beam_bits
857
891
858 data = ast.literal_eval(self.antenna)
892 data = ast.literal_eval(self.antenna)
859 up_data = data['antenna_up']
893 up_data = data['antenna_up']
860 down_data = data['antenna_down']
894 down_data = data['antenna_down']
861
895
862 pos = ip2position(module)
896 pos = ip2position(module)
863 up_value = up_data[pos[0]][pos[1]]
897 up_value = up_data[pos[0]][pos[1]]
864 down_value = down_data[pos[0]][pos[1]]
898 down_value = down_data[pos[0]][pos[1]]
865
899
866 up_bits = up_conv_bits(up_value)
900 up_bits = up_conv_bits(up_value)
867 down_bits = down_conv_bits(down_value)
901 down_bits = down_conv_bits(down_value)
868 beam_bits = up_bits+down_bits
902 beam_bits = up_bits+down_bits
869
903
870 return beam_bits
904 return beam_bits
871
905
872 def modules_6bits(self):
906 def modules_6bits(self):
873 """
907 """
874 This function returns 6bits from every abs module (1-64) in a dict
908 This function returns 6bits from every abs module (1-64) in a dict
875 """
909 """
876 modules_configuration = ast.literal_eval(self.modules_conf)
910 modules_configuration = ast.literal_eval(self.modules_conf)
877
911
878 for i in range(1,65):
912 for i in range(1,65):
879 modules_configuration[str(i)] = self.module_6bits(i)
913 modules_configuration[str(i)] = self.module_6bits(i)
880
914
881 self.modules_conf = json.dumps(modules_configuration)
915 self.modules_conf = json.dumps(modules_configuration)
882 self.save()
916 self.save()
883
917
884 return self.modules_conf
918 return self.modules_conf
885
919
886
920
887 def set_as_activebeam(self):
921 def set_as_activebeam(self):
888 """
922 """
889 This function set this beam as the active beam of its ABS Configuration.
923 This function set this beam as the active beam of its ABS Configuration.
890 """
924 """
891 self.abs_conf.active_beam = json.dumps({'active_beam': self.id})
925 self.abs_conf.active_beam = json.dumps({'active_beam': self.id})
892 self.abs_conf.save()
926 self.abs_conf.save()
893
927
894 return
928 return
895
929
896
930
897 @property
931 @property
898 def get_upvalues(self):
932 def get_upvalues(self):
899 """
933 """
900 This function reads antenna pattern and show the up-value of one abs module
934 This function reads antenna pattern and show the up-value of one abs module
901 """
935 """
902
936
903 data = ast.literal_eval(self.antenna)
937 data = ast.literal_eval(self.antenna)
904 up_data = data['antenna_up']
938 up_data = data['antenna_up']
905
939
906 up_values = []
940 up_values = []
907 for data in up_data:
941 for data in up_data:
908 for i in range(0,8):
942 for i in range(0,8):
909 up_values.append(data[i])
943 up_values.append(data[i])
910
944
911 return up_values
945 return up_values
912
946
913 @property
947 @property
914 def antenna_upvalues(self):
948 def antenna_upvalues(self):
915 """
949 """
916 This function reads antenna pattern and show the up - values of one abs beam
950 This function reads antenna pattern and show the up - values of one abs beam
917 in a particular order
951 in a particular order
918 """
952 """
919 data = ast.literal_eval(self.antenna)
953 data = ast.literal_eval(self.antenna)
920 up_data = data['antenna_up']
954 up_data = data['antenna_up']
921
955
922 return up_data
956 return up_data
923
957
924 @property
958 @property
925 def antenna_downvalues(self):
959 def antenna_downvalues(self):
926 """
960 """
927 This function reads antenna pattern and show the down - values of one abs beam
961 This function reads antenna pattern and show the down - values of one abs beam
928 in a particular order
962 in a particular order
929 """
963 """
930 data = ast.literal_eval(self.antenna)
964 data = ast.literal_eval(self.antenna)
931 down_data = data['antenna_down']
965 down_data = data['antenna_down']
932
966
933 return down_data
967 return down_data
934
968
935 @property
969 @property
936 def get_downvalues(self):
970 def get_downvalues(self):
937 """
971 """
938 This function reads antenna pattern and show the down-value of one abs module
972 This function reads antenna pattern and show the down-value of one abs module
939 """
973 """
940
974
941 data = ast.literal_eval(self.antenna)
975 data = ast.literal_eval(self.antenna)
942 down_data = data['antenna_down']
976 down_data = data['antenna_down']
943
977
944 down_values = []
978 down_values = []
945 for data in down_data:
979 for data in down_data:
946 for i in range(0,8):
980 for i in range(0,8):
947 down_values.append(data[i])
981 down_values.append(data[i])
948
982
949 return down_values
983 return down_values
950
984
951 @property
985 @property
952 def get_up_ues(self):
986 def get_up_ues(self):
953 """
987 """
954 This function shows the up-ues-value of one beam
988 This function shows the up-ues-value of one beam
955 """
989 """
956 data = ast.literal_eval(self.ues)
990 data = ast.literal_eval(self.ues)
957 up_ues = data['up']
991 up_ues = data['up']
958
992
959 return up_ues
993 return up_ues
960
994
961 @property
995 @property
962 def get_down_ues(self):
996 def get_down_ues(self):
963 """
997 """
964 This function shows the down-ues-value of one beam
998 This function shows the down-ues-value of one beam
965 """
999 """
966 data = ast.literal_eval(self.ues)
1000 data = ast.literal_eval(self.ues)
967 down_ues = data['down']
1001 down_ues = data['down']
968
1002
969 return down_ues
1003 return down_ues
970
1004
971 @property
1005 @property
972 def get_up_onlyrx(self):
1006 def get_up_onlyrx(self):
973 """
1007 """
974 This function shows the up-onlyrx-value of one beam
1008 This function shows the up-onlyrx-value of one beam
975 """
1009 """
976 data = json.loads(self.only_rx)
1010 data = json.loads(self.only_rx)
977 up_onlyrx = data['up']
1011 up_onlyrx = data['up']
978
1012
979 return up_onlyrx
1013 return up_onlyrx
980
1014
981 @property
1015 @property
982 def get_down_onlyrx(self):
1016 def get_down_onlyrx(self):
983 """
1017 """
984 This function shows the down-onlyrx-value of one beam
1018 This function shows the down-onlyrx-value of one beam
985 """
1019 """
986 data = json.loads(self.only_rx)
1020 data = json.loads(self.only_rx)
987 down_onlyrx = data['down']
1021 down_onlyrx = data['down']
988
1022
989 return down_onlyrx
1023 return down_onlyrx
990
1024
991 @property
1025 @property
992 def get_tx(self):
1026 def get_tx(self):
993 """
1027 """
994 This function shows the tx-values of one beam
1028 This function shows the tx-values of one beam
995 """
1029 """
996 data = json.loads(self.tx)
1030 data = json.loads(self.tx)
997
1031
998 return data
1032 return data
999
1033
1000 @property
1034 @property
1001 def get_uptx(self):
1035 def get_uptx(self):
1002 """
1036 """
1003 This function shows the up-tx-values of one beam
1037 This function shows the up-tx-values of one beam
1004 """
1038 """
1005 data = json.loads(self.tx)
1039 data = json.loads(self.tx)
1006 up_data = data['up']
1040 up_data = data['up']
1007
1041
1008 up_values = []
1042 up_values = []
1009 for data in up_data:
1043 for data in up_data:
1010 for i in range(0,8):
1044 for i in range(0,8):
1011 up_values.append(data[i])
1045 up_values.append(data[i])
1012
1046
1013 return up_values
1047 return up_values
1014
1048
1015 @property
1049 @property
1016 def get_downtx(self):
1050 def get_downtx(self):
1017 """
1051 """
1018 This function shows the down-tx-values of one beam
1052 This function shows the down-tx-values of one beam
1019 """
1053 """
1020 data = json.loads(self.tx)
1054 data = json.loads(self.tx)
1021 down_data = data['down']
1055 down_data = data['down']
1022
1056
1023 down_values = []
1057 down_values = []
1024 for data in down_data:
1058 for data in down_data:
1025 for i in range(0,8):
1059 for i in range(0,8):
1026 down_values.append(data[i])
1060 down_values.append(data[i])
1027
1061
1028 return down_values
1062 return down_values
1029
1063
1030
1064
1031
1065
1032 @property
1066 @property
1033 def get_rx(self):
1067 def get_rx(self):
1034 """
1068 """
1035 This function shows the rx-values of one beam
1069 This function shows the rx-values of one beam
1036 """
1070 """
1037 data = json.loads(self.rx)
1071 data = json.loads(self.rx)
1038
1072
1039 return data
1073 return data
1040
1074
1041 @property
1075 @property
1042 def get_uprx(self):
1076 def get_uprx(self):
1043 """
1077 """
1044 This function shows the up-rx-values of one beam
1078 This function shows the up-rx-values of one beam
1045 """
1079 """
1046 data = json.loads(self.rx)
1080 data = json.loads(self.rx)
1047 up_data = data['up']
1081 up_data = data['up']
1048
1082
1049 up_values = []
1083 up_values = []
1050 for data in up_data:
1084 for data in up_data:
1051 for i in range(0,8):
1085 for i in range(0,8):
1052 up_values.append(data[i])
1086 up_values.append(data[i])
1053
1087
1054 return up_values
1088 return up_values
1055
1089
1056 @property
1090 @property
1057 def get_downrx(self):
1091 def get_downrx(self):
1058 """
1092 """
1059 This function shows the down-rx-values of one beam
1093 This function shows the down-rx-values of one beam
1060 """
1094 """
1061 data = json.loads(self.rx)
1095 data = json.loads(self.rx)
1062 down_data = data['down']
1096 down_data = data['down']
1063
1097
1064 down_values = []
1098 down_values = []
1065 for data in down_data:
1099 for data in down_data:
1066 for i in range(0,8):
1100 for i in range(0,8):
1067 down_values.append(data[i])
1101 down_values.append(data[i])
1068
1102
1069 return down_values
1103 return down_values
@@ -1,424 +1,424
1 from django.shortcuts import render_to_response
1 from django.shortcuts import render_to_response
2 from django.template import RequestContext
2 from django.template import RequestContext
3 from django.shortcuts import redirect, render, get_object_or_404
3 from django.shortcuts import redirect, render, get_object_or_404
4 from django.contrib import messages
4 from django.contrib import messages
5 from django.conf import settings
5 from django.conf import settings
6 from django.http import HttpResponse
6 from django.http import HttpResponse
7 from django.core.urlresolvers import reverse
7 from django.core.urlresolvers import reverse
8
8
9 from datetime import datetime
9 from datetime import datetime
10 from time import sleep
10 from time import sleep
11 import os
11 import os
12
12
13 from apps.main.models import Device, Configuration
13 from apps.main.models import Device, Configuration
14 from apps.main.views import sidebar
14 from apps.main.views import sidebar
15
15
16 from .models import ABSConfiguration, ABSBeam
16 from .models import ABSConfiguration, ABSBeam
17 from .forms import ABSConfigurationForm, ABSBeamEditForm, ABSBeamAddForm, ABSImportForm
17 from .forms import ABSConfigurationForm, ABSBeamEditForm, ABSBeamAddForm, ABSImportForm
18
18
19 from .utils.overJroShow import overJroShow
19 from .utils.overJroShow import overJroShow
20 from .utils.OverJRO import OverJRO
20 from .utils.OverJRO import OverJRO
21 # Create your views here.
21 # Create your views here.
22 import json, ast
22 import json, ast
23
23
24
24
25 def get_values_from_form(form_data):
25 def get_values_from_form(form_data):
26
26
27 sublistup = []
27 sublistup = []
28 sublistdown = []
28 sublistdown = []
29 subtxlistup = []
29 subtxlistup = []
30 subtxlistdown = []
30 subtxlistdown = []
31 subrxlistup = []
31 subrxlistup = []
32 subrxlistdown = []
32 subrxlistdown = []
33
33
34 up_values_list = []
34 up_values_list = []
35 down_values_list = []
35 down_values_list = []
36 up_txvalues_list = []
36 up_txvalues_list = []
37 down_txvalues_list = []
37 down_txvalues_list = []
38 up_rxvalues_list = []
38 up_rxvalues_list = []
39 down_rxvalues_list = []
39 down_rxvalues_list = []
40
40
41 values_list = {}
41 values_list = {}
42 cont = 1
42 cont = 1
43
43
44 for i in range(1,65):
44 for i in range(1,65):
45 x = float(form_data['abs_up'+str(i)])
45 x = float(form_data['abs_up'+str(i)])
46 y = float(form_data['abs_down'+str(i)])
46 y = float(form_data['abs_down'+str(i)])
47 sublistup.append(x)
47 sublistup.append(x)
48 sublistdown.append(y)
48 sublistdown.append(y)
49
49
50 if str(i) in form_data.getlist('uptx_checks'):
50 if str(i) in form_data.getlist('uptx_checks'):
51 subtxlistup.append(1)
51 subtxlistup.append(1)
52 else:
52 else:
53 subtxlistup.append(0)
53 subtxlistup.append(0)
54 if str(i) in form_data.getlist('downtx_checks'):
54 if str(i) in form_data.getlist('downtx_checks'):
55 subtxlistdown.append(1)
55 subtxlistdown.append(1)
56 else:
56 else:
57 subtxlistdown.append(0)
57 subtxlistdown.append(0)
58
58
59 if str(i) in form_data.getlist('uprx_checks'):
59 if str(i) in form_data.getlist('uprx_checks'):
60 subrxlistup.append(1)
60 subrxlistup.append(1)
61 else:
61 else:
62 subrxlistup.append(0)
62 subrxlistup.append(0)
63 if str(i) in form_data.getlist('downrx_checks'):
63 if str(i) in form_data.getlist('downrx_checks'):
64 subrxlistdown.append(1)
64 subrxlistdown.append(1)
65 else:
65 else:
66 subrxlistdown.append(0)
66 subrxlistdown.append(0)
67
67
68 cont = cont+1
68 cont = cont+1
69
69
70 if cont == 9:
70 if cont == 9:
71 up_values_list.append(sublistup)
71 up_values_list.append(sublistup)
72 down_values_list.append(sublistdown)
72 down_values_list.append(sublistdown)
73 sublistup = []
73 sublistup = []
74 sublistdown = []
74 sublistdown = []
75
75
76 up_txvalues_list.append(subtxlistup)
76 up_txvalues_list.append(subtxlistup)
77 down_txvalues_list.append(subtxlistdown)
77 down_txvalues_list.append(subtxlistdown)
78 subtxlistup = []
78 subtxlistup = []
79 subtxlistdown = []
79 subtxlistdown = []
80 up_rxvalues_list.append(subrxlistup)
80 up_rxvalues_list.append(subrxlistup)
81 down_rxvalues_list.append(subrxlistdown)
81 down_rxvalues_list.append(subrxlistdown)
82 subrxlistup = []
82 subrxlistup = []
83 subrxlistdown = []
83 subrxlistdown = []
84 cont = 1
84 cont = 1
85
85
86
86
87 list_uesup = []
87 list_uesup = []
88 list_uesdown = []
88 list_uesdown = []
89 for i in range(1,5):
89 for i in range(1,5):
90 if form_data['ues_up'+str(i)] == '':
90 if form_data['ues_up'+str(i)] == '':
91 list_uesup.append(0.0)
91 list_uesup.append(0.0)
92 else:
92 else:
93 list_uesup.append(float(form_data['ues_up'+str(i)]))
93 list_uesup.append(float(form_data['ues_up'+str(i)]))
94
94
95 if form_data['ues_down'+str(i)] == '':
95 if form_data['ues_down'+str(i)] == '':
96 list_uesdown.append(0.0)
96 list_uesdown.append(0.0)
97 else:
97 else:
98 list_uesdown.append(float(form_data['ues_down'+str(i)]))
98 list_uesdown.append(float(form_data['ues_down'+str(i)]))
99
99
100 onlyrx_list = form_data.getlist('onlyrx')
100 onlyrx_list = form_data.getlist('onlyrx')
101 only_rx = {}
101 only_rx = {}
102 if '1' in onlyrx_list:
102 if '1' in onlyrx_list:
103 only_rx['up'] = True
103 only_rx['up'] = True
104 else:
104 else:
105 only_rx['up'] = False
105 only_rx['up'] = False
106 if '2' in onlyrx_list:
106 if '2' in onlyrx_list:
107 only_rx['down'] = True
107 only_rx['down'] = True
108 else:
108 else:
109 only_rx['down'] = False
109 only_rx['down'] = False
110
110
111 antenna = {'antenna_up': up_values_list, 'antenna_down': down_values_list}
111 antenna = {'antenna_up': up_values_list, 'antenna_down': down_values_list}
112 tx = {'up': up_txvalues_list, 'down': down_txvalues_list}
112 tx = {'up': up_txvalues_list, 'down': down_txvalues_list}
113 rx = {'up': up_rxvalues_list, 'down': down_rxvalues_list}
113 rx = {'up': up_rxvalues_list, 'down': down_rxvalues_list}
114 ues = {'up': list_uesup, 'down': list_uesdown}
114 ues = {'up': list_uesup, 'down': list_uesdown}
115 name = str(form_data['beam_name'])
115 name = str(form_data['beam_name'])
116
116
117 beam_data = {'name': name, 'antenna': antenna, 'tx': tx, 'rx': rx, 'ues': ues, 'only_rx': only_rx}
117 beam_data = {'name': name, 'antenna': antenna, 'tx': tx, 'rx': rx, 'ues': ues, 'only_rx': only_rx}
118
118
119 return beam_data
119 return beam_data
120
120
121
121
122
122
123 def abs_conf(request, id_conf):
123 def abs_conf(request, id_conf):
124
124
125 conf = get_object_or_404(ABSConfiguration, pk=id_conf)
125 conf = get_object_or_404(ABSConfiguration, pk=id_conf)
126 beams = ABSBeam.objects.filter(abs_conf=conf)
126 beams = ABSBeam.objects.filter(abs_conf=conf)
127 active_beam_id = json.loads(conf.active_beam)
127 active_beam_id = json.loads(conf.active_beam)
128
128
129 #------------Colors for Active Beam:-------------
129 #------------Colors for Active Beam:-------------
130 modules_status = json.loads(conf.module_status)
130 modules_status = json.loads(conf.module_status)
131
131
132 color_status = {}
132 color_status = {}
133 for status in modules_status:
133 for status in modules_status:
134 if modules_status[status] == 2: #Running background-color: #00cc00;
134 if modules_status[status] == 3: #Running background-color: #00cc00;
135 color_status[status] = 'class=text-success'#'bgcolor=#00cc00'
135 color_status[status] = 'class=text-success'#'bgcolor=#00cc00'
136 elif modules_status[status] == 1: #Connected background-color: #ee902c;
136 elif modules_status[status] == 1: #Connected background-color: #ee902c;
137 color_status[status] = 'class=text-warning'#'bgcolor=#ee902c'
137 color_status[status] = 'class=text-warning'#'bgcolor=#ee902c'
138 else: #Disconnected background-color: #ff0000;
138 else: #Disconnected background-color: #ff0000;
139 color_status[status] = 'class=text-danger'#'bgcolor=#FF0000'
139 color_status[status] = 'class=text-danger'#'bgcolor=#FF0000'
140 #------------------------------------------------
140 #------------------------------------------------
141
141
142 kwargs = {}
142 kwargs = {}
143 #kwargs['status'] = conf.device.get_status_display()
143 #kwargs['status'] = conf.device.get_status_display()
144 kwargs['connected_modules'] = str(conf.connected_modules())+'/64'
144 kwargs['connected_modules'] = str(conf.connected_modules())+'/64'
145
145
146 kwargs['dev_conf'] = conf
146 kwargs['dev_conf'] = conf
147 kwargs['dev_conf_keys'] = ['name',]
147 kwargs['dev_conf_keys'] = ['name',]
148
148
149 kwargs['title'] = 'ABS Configuration'
149 kwargs['title'] = 'ABS Configuration'
150 kwargs['suptitle'] = 'Details'
150 kwargs['suptitle'] = 'Details'
151 kwargs['no_play'] = True
151 kwargs['no_play'] = True
152
152
153 kwargs['button'] = 'Edit Configuration'
153 kwargs['button'] = 'Edit Configuration'
154 #------------------Active Beam-----------------------
154 #------------------Active Beam-----------------------
155 try:
155 try:
156 active_beam_id = active_beam_id['active_beam']
156 active_beam_id = active_beam_id['active_beam']
157 active_beam = ABSBeam.objects.get(pk=active_beam_id)
157 active_beam = ABSBeam.objects.get(pk=active_beam_id)
158 kwargs['active_beam'] = active_beam
158 kwargs['active_beam'] = active_beam
159 for beam in beams:
159 for beam in beams:
160 if beam.id == active_beam.id:
160 if beam.id == active_beam.id:
161 beam.color_status=color_status
161 beam.color_status=color_status
162 except:
162 except:
163 active_beam = ''
163 active_beam = ''
164 #----------------------------------------------------
164 #----------------------------------------------------
165 kwargs['beams'] = beams
165 kwargs['beams'] = beams
166 kwargs['modules_status'] = modules_status
166 kwargs['modules_status'] = modules_status
167 kwargs['color_status'] = color_status
167 kwargs['color_status'] = color_status
168
168
169 kwargs['only_stop'] = True
169 kwargs['only_stop'] = True
170
170
171 ###### SIDEBAR ######
171 ###### SIDEBAR ######
172 kwargs.update(sidebar(conf=conf))
172 kwargs.update(sidebar(conf=conf))
173
173
174 return render(request, 'abs_conf.html', kwargs)
174 return render(request, 'abs_conf.html', kwargs)
175
175
176 def abs_conf_edit(request, id_conf):
176 def abs_conf_edit(request, id_conf):
177
177
178 conf = get_object_or_404(ABSConfiguration, pk=id_conf)
178 conf = get_object_or_404(ABSConfiguration, pk=id_conf)
179
179
180 beams = ABSBeam.objects.filter(abs_conf=conf)
180 beams = ABSBeam.objects.filter(abs_conf=conf)
181 print beams
181 print beams
182
182
183 if request.method=='GET':
183 if request.method=='GET':
184 form = ABSConfigurationForm(instance=conf)
184 form = ABSConfigurationForm(instance=conf)
185
185
186 if request.method=='POST':
186 if request.method=='POST':
187 form = ABSConfigurationForm(request.POST, instance=conf)
187 form = ABSConfigurationForm(request.POST, instance=conf)
188
188
189 if form.is_valid():
189 if form.is_valid():
190 conf = form.save(commit=False)
190 conf = form.save(commit=False)
191 conf.save()
191 conf.save()
192 return redirect('url_abs_conf', id_conf=conf.id)
192 return redirect('url_abs_conf', id_conf=conf.id)
193
193
194 ###### SIDEBAR ######
194 ###### SIDEBAR ######
195 kwargs = {}
195 kwargs = {}
196
196
197 kwargs['dev_conf'] = conf
197 kwargs['dev_conf'] = conf
198 #kwargs['id_dev'] = conf.id
198 #kwargs['id_dev'] = conf.id
199 kwargs['id_conf'] = conf.id
199 kwargs['id_conf'] = conf.id
200 kwargs['form'] = form
200 kwargs['form'] = form
201 kwargs['abs_beams'] = beams
201 kwargs['abs_beams'] = beams
202 kwargs['title'] = 'Device Configuration'
202 kwargs['title'] = 'Device Configuration'
203 kwargs['suptitle'] = 'Edit'
203 kwargs['suptitle'] = 'Edit'
204 kwargs['button'] = 'Save'
204 kwargs['button'] = 'Save'
205
205
206 kwargs['edit'] = True
206 kwargs['edit'] = True
207
207
208 return render(request, 'abs_conf_edit.html', kwargs)
208 return render(request, 'abs_conf_edit.html', kwargs)
209
209
210
210
211 def import_file(request, id_conf):
211 def import_file(request, id_conf):
212
212
213 conf = get_object_or_404(ABSConfiguration, pk=id_conf)
213 conf = get_object_or_404(ABSConfiguration, pk=id_conf)
214 if request.method=='POST':
214 if request.method=='POST':
215 form = ABSImportForm(request.POST, request.FILES)
215 form = ABSImportForm(request.POST, request.FILES)
216 if form.is_valid():
216 if form.is_valid():
217 try:
217 try:
218 parms = conf.import_from_file(request.FILES['file_name'])
218 parms = conf.import_from_file(request.FILES['file_name'])
219
219
220 if parms:
220 if parms:
221 conf.update_from_file(parms)
221 conf.update_from_file(parms)
222 messages.success(request, 'Configuration "%s" loaded succesfully' % request.FILES['file_name'])
222 messages.success(request, 'Configuration "%s" loaded succesfully' % request.FILES['file_name'])
223 return redirect(conf.get_absolute_url_edit())
223 return redirect(conf.get_absolute_url_edit())
224
224
225 except Exception as e:
225 except Exception as e:
226 messages.error(request, 'Error parsing file: "%s" - %s' % (request.FILES['file_name'], e))
226 messages.error(request, 'Error parsing file: "%s" - %s' % (request.FILES['file_name'], e))
227
227
228 else:
228 else:
229 messages.warning(request, 'Your current configuration will be replaced')
229 messages.warning(request, 'Your current configuration will be replaced')
230 form = ABSImportForm()
230 form = ABSImportForm()
231
231
232 kwargs = {}
232 kwargs = {}
233 kwargs['form'] = form
233 kwargs['form'] = form
234 kwargs['title'] = 'ABS Configuration'
234 kwargs['title'] = 'ABS Configuration'
235 kwargs['suptitle'] = 'Import file'
235 kwargs['suptitle'] = 'Import file'
236 kwargs['button'] = 'Upload'
236 kwargs['button'] = 'Upload'
237 kwargs['previous'] = conf.get_absolute_url()
237 kwargs['previous'] = conf.get_absolute_url()
238
238
239 return render(request, 'abs_import.html', kwargs)
239 return render(request, 'abs_import.html', kwargs)
240
240
241
241
242 def send_beam(request, id_conf, id_beam):
242 def send_beam(request, id_conf, id_beam):
243
243
244 conf = get_object_or_404(ABSConfiguration, pk=id_conf)
244 conf = get_object_or_404(ABSConfiguration, pk=id_conf)
245 beam = get_object_or_404(ABSBeam, pk=id_beam)
245 beam = get_object_or_404(ABSBeam, pk=id_beam)
246 beams_list = ABSBeam.objects.filter(abs_conf=conf)
246 beams_list = ABSBeam.objects.filter(abs_conf=conf)
247 #To set this beam as an Active Beam
247 #To set this beam as an Active Beam
248 beam.set_as_activebeam()
248 beam.set_as_activebeam()
249 #To send beam position to abs-modules
249 #To send beam position to abs-modules
250 i = 0
250 i = 0
251 for b in beams_list:
251 for b in beams_list:
252 if b.id == int(id_beam):
252 if b.id == int(id_beam):
253 break
253 break
254 else:
254 else:
255 i += 1
255 i += 1
256 beam_pos = i + 1 #Estandarizar
256 beam_pos = i + 1 #Estandarizar
257 print 'Position: ',beam_pos
257 print 'Position: ',beam_pos
258 conf.send_beam_num(beam_pos)
258 conf.send_beam_num(beam_pos)
259
259
260 return redirect('url_abs_conf', conf.id)
260 return redirect('url_abs_conf', conf.id)
261
261
262
262
263 def add_beam(request, id_conf):
263 def add_beam(request, id_conf):
264
264
265 conf = get_object_or_404(ABSConfiguration, pk=id_conf)
265 conf = get_object_or_404(ABSConfiguration, pk=id_conf)
266 confs = Configuration.objects.all()
266 confs = Configuration.objects.all()
267
267
268 if request.method=='GET':
268 if request.method=='GET':
269 #form = ABSBeamEditForm()
269 #form = ABSBeamEditForm()
270 form = ABSBeamAddForm()
270 form = ABSBeamAddForm()
271
271
272 if request.method=='POST':
272 if request.method=='POST':
273 form = ABSBeamAddForm(request.POST)
273 form = ABSBeamAddForm(request.POST)
274
274
275 beam_data = get_values_from_form(request.POST)
275 beam_data = get_values_from_form(request.POST)
276
276
277 new_beam = ABSBeam(
277 new_beam = ABSBeam(
278 name =beam_data['name'],
278 name =beam_data['name'],
279 antenna =json.dumps(beam_data['antenna']),
279 antenna =json.dumps(beam_data['antenna']),
280 abs_conf=conf,
280 abs_conf=conf,
281 tx =json.dumps(beam_data['tx']),
281 tx =json.dumps(beam_data['tx']),
282 rx =json.dumps(beam_data['rx']),
282 rx =json.dumps(beam_data['rx']),
283 ues =json.dumps(beam_data['ues']),
283 ues =json.dumps(beam_data['ues']),
284 only_rx =json.dumps(beam_data['only_rx'])
284 only_rx =json.dumps(beam_data['only_rx'])
285 )
285 )
286 new_beam.save()
286 new_beam.save()
287 #---Update 6bits configuration and add beam to abs configuration beams list.
287 #---Update 6bits configuration and add beam to abs configuration beams list.
288 new_beam.modules_6bits()
288 new_beam.modules_6bits()
289 #new_beam.add_beam2list()
289 #new_beam.add_beam2list()
290 messages.success(request, 'Beam: "%s" has been added.' % new_beam.name)
290 messages.success(request, 'Beam: "%s" has been added.' % new_beam.name)
291
291
292 return redirect('url_edit_abs_conf', conf.id)
292 return redirect('url_edit_abs_conf', conf.id)
293
293
294 ###### SIDEBAR ######
294 ###### SIDEBAR ######
295 kwargs = {}
295 kwargs = {}
296
296
297 #kwargs['dev_conf'] = conf.device
297 #kwargs['dev_conf'] = conf.device
298 #kwargs['id_dev'] = conf.device
298 #kwargs['id_dev'] = conf.device
299 kwargs['id_conf'] = conf.id
299 kwargs['id_conf'] = conf.id
300 kwargs['form'] = form
300 kwargs['form'] = form
301 kwargs['title'] = 'ABS Beams'
301 kwargs['title'] = 'ABS Beams'
302 kwargs['suptitle'] = 'Add Beam'
302 kwargs['suptitle'] = 'Add Beam'
303 kwargs['button'] = 'Add'
303 kwargs['button'] = 'Add'
304 kwargs['no_sidebar'] = True
304 kwargs['no_sidebar'] = True
305
305
306 #kwargs['previous'] = conf.get_absolute_url_edit()
306 #kwargs['previous'] = conf.get_absolute_url_edit()
307 kwargs['edit'] = True
307 kwargs['edit'] = True
308
308
309 return render(request, 'abs_add_beam.html', kwargs)
309 return render(request, 'abs_add_beam.html', kwargs)
310
310
311
311
312 def edit_beam(request, id_conf, id_beam):
312 def edit_beam(request, id_conf, id_beam):
313
313
314 conf = get_object_or_404(ABSConfiguration, pk=id_conf)
314 conf = get_object_or_404(ABSConfiguration, pk=id_conf)
315 beam = get_object_or_404(ABSBeam, pk=id_beam)
315 beam = get_object_or_404(ABSBeam, pk=id_beam)
316
316
317 if request.method=='GET':
317 if request.method=='GET':
318 form = ABSBeamEditForm(initial={'beam': beam})
318 form = ABSBeamEditForm(initial={'beam': beam})
319
319
320 if request.method=='POST':
320 if request.method=='POST':
321 form = ABSBeamEditForm(request.POST)
321 form = ABSBeamEditForm(request.POST)
322
322
323 beam_data = get_values_from_form(request.POST)
323 beam_data = get_values_from_form(request.POST)
324
324
325 beam.dict_to_parms(beam_data)
325 beam.dict_to_parms(beam_data)
326 beam.save()
326 beam.save()
327
327
328 messages.success(request, 'Beam: "%s" has been updated.' % beam.name)
328 messages.success(request, 'Beam: "%s" has been updated.' % beam.name)
329
329
330 return redirect('url_edit_abs_conf', conf.id)
330 return redirect('url_edit_abs_conf', conf.id)
331
331
332 ###### SIDEBAR ######
332 ###### SIDEBAR ######
333 kwargs = {}
333 kwargs = {}
334
334
335 kwargs['id_conf'] = conf.id
335 kwargs['id_conf'] = conf.id
336 kwargs['form'] = form
336 kwargs['form'] = form
337 kwargs['title'] = 'ABS Beams'
337 kwargs['title'] = 'ABS Beams'
338 kwargs['suptitle'] = 'Edit Beam'
338 kwargs['suptitle'] = 'Edit Beam'
339 kwargs['button'] = 'Save'
339 kwargs['button'] = 'Save'
340 kwargs['no_sidebar'] = True
340 kwargs['no_sidebar'] = True
341
341
342 #kwargs['previous'] = conf.get_absolute_url_edit()
342 #kwargs['previous'] = conf.get_absolute_url_edit()
343 kwargs['edit'] = True
343 kwargs['edit'] = True
344
344
345 return render(request, 'abs_edit_beam.html', kwargs)
345 return render(request, 'abs_edit_beam.html', kwargs)
346
346
347
347
348
348
349 def remove_beam(request, id_conf, id_beam):
349 def remove_beam(request, id_conf, id_beam):
350
350
351 conf = get_object_or_404(ABSConfiguration, pk=id_conf)
351 conf = get_object_or_404(ABSConfiguration, pk=id_conf)
352 beam = get_object_or_404(ABSBeam, pk=id_beam)
352 beam = get_object_or_404(ABSBeam, pk=id_beam)
353
353
354 if request.method=='POST':
354 if request.method=='POST':
355 if beam:
355 if beam:
356 try:
356 try:
357 beam.remove_beamfromlist()
357 beam.remove_beamfromlist()
358 beam.delete()
358 beam.delete()
359 messages.success(request, 'Beam: "%s" has been deleted.' % beam)
359 messages.success(request, 'Beam: "%s" has been deleted.' % beam)
360 except:
360 except:
361 messages.error(request, 'Unable to delete beam: "%s".' % beam)
361 messages.error(request, 'Unable to delete beam: "%s".' % beam)
362
362
363 return redirect('url_edit_abs_conf', conf.id)
363 return redirect('url_edit_abs_conf', conf.id)
364
364
365 ###### SIDEBAR ######
365 ###### SIDEBAR ######
366 kwargs = {}
366 kwargs = {}
367
367
368 kwargs['object'] = beam
368 kwargs['object'] = beam
369 kwargs['delete'] = True
369 kwargs['delete'] = True
370 kwargs['title'] = 'Delete'
370 kwargs['title'] = 'Delete'
371 kwargs['suptitle'] = 'Beam'
371 kwargs['suptitle'] = 'Beam'
372 kwargs['previous'] = conf.get_absolute_url_edit()
372 kwargs['previous'] = conf.get_absolute_url_edit()
373 return render(request, 'confirm.html', kwargs)
373 return render(request, 'confirm.html', kwargs)
374
374
375
375
376
376
377 def plot_patterns(request, id_conf, id_beam=None):
377 def plot_patterns(request, id_conf, id_beam=None):
378
378
379 kwargs = {}
379 kwargs = {}
380 conf = get_object_or_404(ABSConfiguration, pk=id_conf)
380 conf = get_object_or_404(ABSConfiguration, pk=id_conf)
381 beams = ABSBeam.objects.filter(abs_conf=conf)
381 beams = ABSBeam.objects.filter(abs_conf=conf)
382
382
383 if id_beam:
383 if id_beam:
384 beam = get_object_or_404(ABSBeam, pk=id_beam)
384 beam = get_object_or_404(ABSBeam, pk=id_beam)
385 kwargs['beam'] = beam
385 kwargs['beam'] = beam
386
386
387
387
388 ###### SIDEBAR ######
388 ###### SIDEBAR ######
389
389
390 kwargs['dev_conf'] = conf.device
390 kwargs['dev_conf'] = conf.device
391 kwargs['id_dev'] = conf.device
391 kwargs['id_dev'] = conf.device
392 kwargs['id_conf'] = conf.id
392 kwargs['id_conf'] = conf.id
393 kwargs['abs_beams'] = beams
393 kwargs['abs_beams'] = beams
394 kwargs['title'] = 'ABS Patterns'
394 kwargs['title'] = 'ABS Patterns'
395 kwargs['suptitle'] = conf.name
395 kwargs['suptitle'] = conf.name
396 kwargs['no_sidebar'] = True
396 kwargs['no_sidebar'] = True
397
397
398 return render(request, 'abs_patterns.html', kwargs)
398 return render(request, 'abs_patterns.html', kwargs)
399
399
400
400
401 def plot_pattern(request, id_conf, id_beam, antenna):
401 def plot_pattern(request, id_conf, id_beam, antenna):
402
402
403 if antenna=='down':
403 if antenna=='down':
404 sleep(3)
404 sleep(3)
405
405
406 conf = get_object_or_404(ABSConfiguration, pk=id_conf)
406 conf = get_object_or_404(ABSConfiguration, pk=id_conf)
407 beam = get_object_or_404(ABSBeam, pk=id_beam)
407 beam = get_object_or_404(ABSBeam, pk=id_beam)
408
408
409 name = conf.experiment.name
409 name = conf.experiment.name
410
410
411 just_rx = 1 if json.loads(beam.only_rx)[antenna] else 0
411 just_rx = 1 if json.loads(beam.only_rx)[antenna] else 0
412 phases = json.loads(beam.antenna)['antenna_{}'.format(antenna)]
412 phases = json.loads(beam.antenna)['antenna_{}'.format(antenna)]
413 gain_tx = json.loads(beam.tx)[antenna]
413 gain_tx = json.loads(beam.tx)[antenna]
414 gain_rx = json.loads(beam.rx)[antenna]
414 gain_rx = json.loads(beam.rx)[antenna]
415 ues = json.loads(beam.ues)[antenna]
415 ues = json.loads(beam.ues)[antenna]
416
416
417 newOverJro = overJroShow(name)
417 newOverJro = overJroShow(name)
418 fig = newOverJro.plotPattern2(datetime.today(), phases, gain_tx, gain_rx, ues, just_rx)
418 fig = newOverJro.plotPattern2(datetime.today(), phases, gain_tx, gain_rx, ues, just_rx)
419
419
420 response=HttpResponse(content_type='image/png')
420 response=HttpResponse(content_type='image/png')
421
421
422 fig.canvas.print_png(response)
422 fig.canvas.print_png(response)
423
423
424 return response
424 return response
General Comments 0
You need to be logged in to leave comments. Login now