diff --git a/apps/abs/forms.py b/apps/abs/forms.py index 514f9c2..5a3e0e5 100644 --- a/apps/abs/forms.py +++ b/apps/abs/forms.py @@ -17,7 +17,7 @@ class ABSConfigurationForm(forms.ModelForm): class Meta: model = ABSConfiguration - exclude = ('type', 'status', 'parameters', 'beams', 'module_status') + exclude = ('type', 'status', 'parameters', 'active_beam', 'module_status') class ABSBeamAddForm(forms.Form): diff --git a/apps/abs/models.py b/apps/abs/models.py index 77c4571..e3c045b 100644 --- a/apps/abs/models.py +++ b/apps/abs/models.py @@ -175,48 +175,8 @@ def fromChar2Binary(char): return bits -def change_beam_for_multiprocessing(module): - - for i in range (1,50): - beam_pos = 0 - module_address = ('192.168.1.'+str(module), 5500) - header = 'JROABSCeCnModCnMod0100000' - numbers = len(str(beam_pos)) - function = 'CHGB' - - message_tx = header+str(numbers)+function+str(beam_pos)+'0' - - # Create the datagram socket - sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - sock.connect(module_address) - - sock.send(message_tx) - #t = sock.recv(1024) - sock.close() - sock = None - - - time.sleep(0.2) - - - beam_pos = 1 - numbers = len(str(beam_pos)) - - message_tx = header+str(numbers)+function+str(beam_pos)+'0' - - # Create the datagram socket - sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - sock.connect(module_address) - sock.send(message_tx) - sock.close() - sock = None - - time.sleep(0.2) - - - class ABSConfiguration(Configuration): - beams = models.CharField(verbose_name='Beams', max_length=20000, default="{}") + active_beam = models.CharField(verbose_name='Active Beam', max_length=20000, default="{}") module_status = models.CharField(verbose_name='Module Status', max_length=10000, default=json.dumps(status_default)) class Meta: @@ -234,11 +194,11 @@ class ABSConfiguration(Configuration): parameters['name'] = self.name parameters['beams'] = {} - beams = ast.literal_eval(self.beams) + beams = ABSBeam.objects.get(pk=self.id) b=1 for beam in beams: - absbeam = ABSBeam.objects.get(pk=beams[beam]) - parameters['beams']['beam'+str(b)] = absbeam.parms_to_dict() + #absbeam = ABSBeam.objects.get(pk=beams[beam]) + parameters['beams']['beam'+str(b)] = beam.parms_to_dict()#absbeam.parms_to_dict() b+=1 return parameters @@ -336,6 +296,38 @@ class ABSConfiguration(Configuration): return module_bits + def status_device(self): + """ + This function gets the status of each abs module. It sends GET method to Web Application + in Python Bottle. + """ + ip_address = self.device.ip_address + ip_address = ip_address.split('.') + module_seq = (ip_address[0],ip_address[1],ip_address[2]) + dot = '.' + module_port = self.device.port_address + + modules_status = json.loads(self.module_status) + + for i in range(1,65): + module_ip = dot.join(module_seq)+'.'+str(i) + print module_ip + + route = 'http://'+module_ip+':'+str(module_port)+'/hello' + + try: + r = requests.get(route, timeout=0.7) + modules_status[str(i)] = 1 + except: + modules_status[str(i)] = 0 + pass + + self.message = 'ABS modules Status have been updated.' + self.module_status=json.dumps(modules_status) + self.save() + + return + def write_device(self): """ @@ -438,7 +430,7 @@ class ABSConfiguration(Configuration): #El indice del apunte debe ser menor que el numero total de apuntes #El servidor tcp en el embebido comienza a contar desde 0 - beams_list = ast.literal_eval(self.beams) + beams_list = ABSBeam.objects.filter(abs_conf=self) if len(beams_list) < beam_pos: return 0 @@ -496,7 +488,7 @@ class ABSConfiguration(Configuration): #El indice del apunte debe ser menor que el numero total de apuntes #El servidor tcp en el embebido comienza a contar desde 0 - beams_list = ast.literal_eval(self.beams) + beams_list = ABSBeam.objects.filter(abs_conf=self) if len(beams_list) < beam_pos: return 0 @@ -684,10 +676,6 @@ class ABSConfiguration(Configuration): return 1 - def status_device(self): - - return 1 - class ABSBeam(models.Model): @@ -758,74 +746,7 @@ class ABSBeam(models.Model): return self - def change_beam(self, beam_pos=0): - - module_63 = ('192.168.1.63', 5500) - header = 'JROABSCeCnModCnMod0100000' - numbers = len(str(beam_pos)) - function = 'CHGB' - - message_tx = header+str(numbers)+function+str(beam_pos)+'0' - - # Create the datagram socket - sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - sock.connect(module_63) - sock.send(message_tx) - sock.close() - return message_tx - - def change_module_beam(self, module=61,beam_pos=0): - - module_address = ('192.168.1.'+str(module), 5500) - header = 'JROABSCeCnModCnMod0100000' - numbers = len(str(beam_pos)) - function = 'CHGB' - - message_tx = header+str(numbers)+function+str(beam_pos)+'0' - - # Create the datagram socket - try: - sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - sock.connect(module_address) - sock.send(message_tx) - sock.close() - except: - return 0 - return message_tx - - def write_device(self): - - parameters = {} - - module_ip = '192.168.1.63' - write_route = 'http://192.168.1.63:8080/configure' - - header = 'JROABSCeCnModCnMod01000108SNDFexperimento1.ab1' - module = 'ABS_63' - beams = {1: '001000', 2: '010001', 3: '010010', 4: '000011', 5: '101100', 6: '101101', - 7: '110110', 8: '111111', 9: '000000', 10: '001001', 11: '010010', 12: '011011'} - - parameters['header'] = header - parameters['module'] = module - parameters['beams'] = json.dumps(beams) - - answer = '' - - try: - r_write = requests.post(write_route, parameters, timeout=0.5) - answer = r_write.json() - self.message = answer['message'] - except: - self.message = "Could not write ABS parameters" - return 0 - - - #self.device.status = int(answer['status']) - - return 1 - - - + def module_6bits(self, module): """ This function reads antenna pattern and choose 6bits (upbits-downbits) for one abs module @@ -862,44 +783,13 @@ class ABSBeam(models.Model): return self.modules_conf - def add_beam2list(self): - """ - This function adds a beam to the beams list of ABS Configuration. - """ - beams = ast.literal_eval(self.abs_conf.beams) - if any(beams): - for beam in beams: - if beams[beam] == self.id: - return - i = len(beams)+1 - beams['beam'+str(i)] = self.id - else: - beams['beam1'] = self.id - - self.abs_conf.beams = json.dumps(beams) - self.abs_conf.save() - - return - - def remove_beamfromlist(self): + + def active_beam(self): """ - This function removes current beam from the beams list of ABS Configuration. + This function set this beam as the active beam of its ABS Configuration. """ - beams = ast.literal_eval(self.abs_conf.beams) - dict_position = '' - - if any(beams): - for beam in beams: - if beams[beam] == self.id: - dict_position = beam - if dict_position != '': - beams.pop(str(dict_position),None) - else: - return - - self.abs_conf.beams = json.dumps(beams) + self.abs_conf.active_beam = json.dumps({'active_beam': self.id}) self.abs_conf.save() - return @property diff --git a/apps/abs/templates/abs_conf.html b/apps/abs/templates/abs_conf.html index 0f79f95..8a9d5f3 100644 --- a/apps/abs/templates/abs_conf.html +++ b/apps/abs/templates/abs_conf.html @@ -51,7 +51,7 @@ } .north tr{ border: 1px solid #ffffff; - background-color: #FF0000; + } .north td{ border: 2px solid #e2e2e7; @@ -71,14 +71,6 @@ border-bottom: 3px solid #e2e2e7; } -.north tr:nth-child(2) td:nth-child(2){ - background-color: #00cc00; -} - -.north tr:nth-child(2) td:nth-child(4){ - background-color: #ee902c; -} - .east { @@ -88,7 +80,6 @@ } .east tr{ border: 1px solid #ffffff; - background-color: #FF0000; } .east td{ border: 2px solid #e2e2e7; @@ -108,13 +99,7 @@ border-bottom: 3px solid #e2e2e7; } -.east tr:nth-child(2) td:nth-child(2){ - background-color: #00cc00; -} -.east tr:nth-child(2) td:nth-child(4){ - background-color: #ee902c; -} .west { @@ -124,7 +109,6 @@ } .west tr{ border: 1px solid #ffffff; - background-color: #FF0000; } .west td{ border: 2px solid #e2e2e7; @@ -144,13 +128,7 @@ border-bottom: 3px solid #e2e2e7; } -.west tr:nth-child(2) td:nth-child(2){ - background-color: #00cc00; -} -.west tr:nth-child(2) td:nth-child(4){ - background-color: #ee902c; -} .south { @@ -160,7 +138,6 @@ } .south tr{ border: 1px solid #ffffff; - background-color: #FF0000; } .south td{ border: 2px solid #e2e2e7; @@ -180,279 +157,373 @@ border-bottom: 3px solid #e2e2e7; } -.south tr:nth-child(2) td:nth-child(2){ - background-color: #00cc00; -} - -.south tr:nth-child(2) td:nth-child(4){ - background-color: #ee902c; -} -

Beams:

+ {% if beams %} -
- -
+

Beams:

+
+ + + +
+
+ + {% if active_beam %} +

Active Beam: {{active_beam.name}}

+ + + + + + + + + + +
North Quarter + + + + + + + + + + + + + + + + + + + + + + + + + +
{{active_beam.get_upvalues.0}} {{active_beam.get_upvalues.1}} {{active_beam.get_upvalues.2}} {{active_beam.get_upvalues.3}}
{{active_beam.get_downvalues.0}} {{active_beam.get_downvalues.1}} {{active_beam.get_downvalues.2}} {{active_beam.get_downvalues.3}}
{{active_beam.get_upvalues.8}} {{active_beam.get_upvalues.9}} {{active_beam.get_upvalues.10}} {{active_beam.get_upvalues.11}}
{{active_beam.get_downvalues.8}} {{active_beam.get_downvalues.9}} {{active_beam.get_downvalues.10}} {{active_beam.get_downvalues.11}}
{{active_beam.get_upvalues.16}} {{active_beam.get_upvalues.17}} {{active_beam.get_upvalues.18}} {{active_beam.get_upvalues.19}}
{{active_beam.get_downvalues.16}} {{active_beam.get_downvalues.17}} {{active_beam.get_downvalues.18}} {{active_beam.get_downvalues.19}}
{{active_beam.get_upvalues.24}} {{active_beam.get_upvalues.25}} {{active_beam.get_upvalues.26}} {{active_beam.get_upvalues.27}}
{{active_beam.get_downvalues.24}} {{active_beam.get_downvalues.25}} {{active_beam.get_downvalues.26}} {{active_beam.get_downvalues.27}}
+
East Quarter + + + + + + + + + + + + + + + + + + + + + + + + + +
{{active_beam.get_upvalues.4}} {{active_beam.get_upvalues.5}} {{active_beam.get_upvalues.6}} {{active_beam.get_upvalues.7}}
{{active_beam.get_downvalues.4}} {{active_beam.get_downvalues.5}} {{active_beam.get_downvalues.6}} {{active_beam.get_downvalues.7}}
{{active_beam.get_upvalues.12}} {{active_beam.get_upvalues.13}} {{active_beam.get_upvalues.14}} {{active_beam.get_upvalues.15}}
{{active_beam.get_downvalues.12}} {{active_beam.get_downvalues.13}} {{active_beam.get_downvalues.14}} {{active_beam.get_downvalues.15}}
{{active_beam.get_upvalues.20}} {{active_beam.get_upvalues.21}} {{active_beam.get_upvalues.22}} {{active_beam.get_upvalues.23}}
{{active_beam.get_downvalues.20}} {{active_beam.get_downvalues.21}} {{active_beam.get_downvalues.22}} {{active_beam.get_downvalues.23}}
{{active_beam.get_upvalues.28}} {{active_beam.get_upvalues.29}} {{active_beam.get_upvalues.30}} {{active_beam.get_upvalues.31}}
{{active_beam.get_downvalues.28}} {{active_beam.get_downvalues.29}} {{active_beam.get_downvalues.30}} {{active_beam.get_downvalues.31}}
+
West Quarter + + + + + + + + + + + + + + + + + + + + + + + + + +
{{active_beam.get_upvalues.32}} {{active_beam.get_upvalues.33}} {{active_beam.get_upvalues.34}} {{active_beam.get_upvalues.35}}
{{active_beam.get_downvalues.32}} {{active_beam.get_downvalues.33}} {{active_beam.get_downvalues.34}} {{active_beam.get_downvalues.35}}
{{active_beam.get_upvalues.40}} {{active_beam.get_upvalues.41}} {{active_beam.get_upvalues.42}} {{active_beam.get_upvalues.43}}
{{active_beam.get_downvalues.40}} {{active_beam.get_downvalues.41}} {{active_beam.get_downvalues.42}} {{active_beam.get_downvalues.43}}
{{active_beam.get_upvalues.48}} {{active_beam.get_upvalues.49}} {{active_beam.get_upvalues.50}} {{active_beam.get_upvalues.51}}
{{active_beam.get_downvalues.48}} {{active_beam.get_downvalues.49}} {{active_beam.get_downvalues.50}} {{active_beam.get_downvalues.51}}
{{active_beam.get_upvalues.56}} {{active_beam.get_upvalues.57}} {{active_beam.get_upvalues.58}} {{active_beam.get_upvalues.59}}
{{active_beam.get_downvalues.56}} {{active_beam.get_downvalues.57}} {{active_beam.get_downvalues.58}} {{active_beam.get_downvalues.59}}
+
South Quarter + + + + + + + + + + + + + + + + + + + + + + + + + +
{{active_beam.get_upvalues.36}} {{active_beam.get_upvalues.37}} {{active_beam.get_upvalues.38}} {{active_beam.get_upvalues.39}}
{{active_beam.get_downvalues.36}} {{active_beam.get_downvalues.37}} {{active_beam.get_downvalues.38}} {{active_beam.get_downvalues.39}}
{{active_beam.get_upvalues.44}} {{active_beam.get_upvalues.45}} {{active_beam.get_upvalues.46}} {{active_beam.get_upvalues.47}}
{{active_beam.get_downvalues.44}} {{active_beam.get_downvalues.45}} {{active_beam.get_downvalues.46}} {{active_beam.get_downvalues.47}}
{{active_beam.get_upvalues.52}} {{active_beam.get_upvalues.53}} {{active_beam.get_upvalues.54}} {{active_beam.get_upvalues.55}}
{{active_beam.get_downvalues.52}} {{active_beam.get_downvalues.53}} {{active_beam.get_downvalues.54}} {{active_beam.get_downvalues.55}}
{{active_beam.get_upvalues.60}} {{active_beam.get_upvalues.61}} {{active_beam.get_upvalues.62}} {{active_beam.get_upvalues.63}}
{{active_beam.get_downvalues.60}} {{active_beam.get_downvalues.61}} {{active_beam.get_downvalues.62}} {{active_beam.get_downvalues.63}}
+
+ + + + + + + + + + + + + + + + + +
Legend
REDDisconnected
ORANGEConnected
GREENRunning +
+ + + + + {% else %} +

This ABS Configuration does not have a current active ABS Beam...
+ Please send Beam List to ABS modules.

+ + {% endif %} + + +
+ + + + {% for beam in beams %} + + + + {% endfor %} + + + +
+
+ + -
- - - - - - - - - - -
North Quarter - - - - - - - - - - - - - - - - - - - - - - - - - -
{{beams.0.get_upvalues.0}} {{beams.0.get_upvalues.1}} {{beams.0.get_upvalues.2}} {{beams.0.get_upvalues.3}}
{{beams.0.get_downvalues.0}} {{beams.0.get_downvalues.1}} {{beams.0.get_downvalues.2}} {{beams.0.get_downvalues.3}}
{{beams.0.get_upvalues.8}} {{beams.0.get_upvalues.9}} {{beams.0.get_upvalues.10}} {{beams.0.get_upvalues.11}}
{{beams.0.get_downvalues.8}} {{beams.0.get_downvalues.9}} {{beams.0.get_downvalues.10}} {{beams.0.get_downvalues.11}}
{{beams.0.get_upvalues.16}} {{beams.0.get_upvalues.17}} {{beams.0.get_upvalues.18}} {{beams.0.get_upvalues.19}}
{{beams.0.get_downvalues.16}} {{beams.0.get_downvalues.17}} {{beams.0.get_downvalues.18}} {{beams.0.get_downvalues.19}}
{{beams.0.get_upvalues.24}} {{beams.0.get_upvalues.25}} {{beams.0.get_upvalues.26}} {{beams.0.get_upvalues.27}}
{{beams.0.get_downvalues.24}} {{beams.0.get_downvalues.25}} {{beams.0.get_downvalues.26}} {{beams.0.get_downvalues.27}}
-
East Quarter - - - - - - - - - - - - - - - - - - - - - - - - - -
{{beams.0.get_upvalues.4}} {{beams.0.get_upvalues.5}} {{beams.0.get_upvalues.6}} {{beams.0.get_upvalues.7}}
{{beams.0.get_downvalues.4}} {{beams.0.get_downvalues.5}} {{beams.0.get_downvalues.6}} {{beams.0.get_downvalues.7}}
{{beams.0.get_upvalues.12}} {{beams.0.get_upvalues.13}} {{beams.0.get_upvalues.14}} {{beams.0.get_upvalues.15}}
{{beams.0.get_downvalues.12}} {{beams.0.get_downvalues.13}} {{beams.0.get_downvalues.14}} {{beams.0.get_downvalues.15}}
{{beams.0.get_upvalues.20}} {{beams.0.get_upvalues.21}} {{beams.0.get_upvalues.22}} {{beams.0.get_upvalues.23}}
{{beams.0.get_downvalues.20}} {{beams.0.get_downvalues.21}} {{beams.0.get_downvalues.22}} {{beams.0.get_downvalues.23}}
{{beams.0.get_upvalues.28}} {{beams.0.get_upvalues.29}} {{beams.0.get_upvalues.30}} {{beams.0.get_upvalues.31}}
{{beams.0.get_downvalues.28}} {{beams.0.get_downvalues.29}} {{beams.0.get_downvalues.30}} {{beams.0.get_downvalues.31}}
-
West Quarter - - - - - - - - - - - - - - - - - - - - - - - - - -
{{beams.0.get_upvalues.32}} {{beams.0.get_upvalues.33}} {{beams.0.get_upvalues.34}} {{beams.0.get_upvalues.35}}
{{beams.0.get_downvalues.32}} {{beams.0.get_downvalues.33}} {{beams.0.get_downvalues.34}} {{beams.0.get_downvalues.35}}
{{beams.0.get_upvalues.40}} {{beams.0.get_upvalues.41}} {{beams.0.get_upvalues.42}} {{beams.0.get_upvalues.43}}
{{beams.0.get_downvalues.40}} {{beams.0.get_downvalues.41}} {{beams.0.get_downvalues.42}} {{beams.0.get_downvalues.43}}
{{beams.0.get_upvalues.48}} {{beams.0.get_upvalues.49}} {{beams.0.get_upvalues.50}} {{beams.0.get_upvalues.51}}
{{beams.0.get_downvalues.48}} {{beams.0.get_downvalues.49}} {{beams.0.get_downvalues.50}} {{beams.0.get_downvalues.51}}
{{beams.0.get_upvalues.56}} {{beams.0.get_upvalues.57}} {{beams.0.get_upvalues.58}} {{beams.0.get_upvalues.59}}
{{beams.0.get_downvalues.56}} {{beams.0.get_downvalues.57}} {{beams.0.get_downvalues.58}} {{beams.0.get_downvalues.59}}
-
South Quarter - - - - - - - - - - - - - - - - - - - - - - - - - -
{{beams.0.get_upvalues.36}} {{beams.0.get_upvalues.37}} {{beams.0.get_upvalues.38}} {{beams.0.get_upvalues.39}}
{{beams.0.get_downvalues.36}} {{beams.0.get_downvalues.37}} {{beams.0.get_downvalues.38}} {{beams.0.get_downvalues.39}}
{{beams.0.get_upvalues.44}} {{beams.0.get_upvalues.45}} {{beams.0.get_upvalues.46}} {{beams.0.get_upvalues.47}}
{{beams.0.get_downvalues.44}} {{beams.0.get_downvalues.45}} {{beams.0.get_downvalues.46}} {{beams.0.get_downvalues.47}}
{{beams.0.get_upvalues.52}} {{beams.0.get_upvalues.53}} {{beams.0.get_upvalues.54}} {{beams.0.get_upvalues.55}}
{{beams.0.get_downvalues.52}} {{beams.0.get_downvalues.53}} {{beams.0.get_downvalues.54}} {{beams.0.get_downvalues.55}}
{{beams.0.get_upvalues.60}} {{beams.0.get_upvalues.61}} {{beams.0.get_upvalues.62}} {{beams.0.get_upvalues.63}}
{{beams.0.get_downvalues.60}} {{beams.0.get_downvalues.61}} {{beams.0.get_downvalues.62}} {{beams.0.get_downvalues.63}}
-
- - - - - - - - - - - - - - -
Legend
REDDisconnected
ORANGEConnected
GREENRunning
+ + {% else %}

No Beams...

diff --git a/apps/abs/views.py b/apps/abs/views.py index 3f3f1e8..6dc27c8 100644 --- a/apps/abs/views.py +++ b/apps/abs/views.py @@ -121,18 +121,22 @@ def get_values_from_form(form_data): def abs_conf(request, id_conf): - conf = get_object_or_404(ABSConfiguration, pk=id_conf) - beams = ABSBeam.objects.filter(abs_conf=conf) - #beams_dict = ast.literal_eval(conf.beams) - #beams = [] - #for beam_id in range(1,len(beams_dict)+1): - # beam = ABSBeam.objects.get(pk=beams_dict['beam'+str(beam_id)]) - # beams.append(beam) - - #beams_id = ast.literal_eval(conf.beams) - - ip=conf.device.ip_address - port=conf.device.port_address + conf = get_object_or_404(ABSConfiguration, pk=id_conf) + beams = ABSBeam.objects.filter(abs_conf=conf) + active_beam_id = json.loads(conf.active_beam) + + #------------Colors for Active Beam:------------- + modules_status = json.loads(conf.module_status) + + color_status = {} + for status in modules_status: + if modules_status[status] == 2: #Running background-color: #ff0000; + color_status[status] = 'bgcolor=#00cc00' + elif modules_status[status] == 1: #Connected background-color: #ee902c; + color_status[status] = 'bgcolor=#ee902c' + else: #Disconnected background-color: #00cc00; + color_status[status] = 'bgcolor=#FF0000' + #------------------------------------------------ kwargs = {} kwargs['status'] = conf.device.get_status_display() @@ -146,12 +150,20 @@ def abs_conf(request, id_conf): kwargs['no_play'] = True kwargs['button'] = 'Edit Configuration' - - #kwargs['no_play'] = True - #kwargs['beams_id'] = beams_id + #------------------Active Beam----------------------- + try: + active_beam_id = active_beam_id['active_beam'] + active_beam = ABSBeam.objects.get(pk=active_beam_id) + kwargs['active_beam'] = active_beam + for beam in beams: + if beam.id == active_beam.id: + beam.color_status=color_status + except: + active_beam = '' + #---------------------------------------------------- kwargs['beams'] = beams - kwargs['beam_selector'] = 0 - #kwargs['my_data'] = simplejson.dumps(beams) + kwargs['modules_status'] = modules_status + kwargs['color_status'] = color_status kwargs['only_stop'] = True @@ -163,14 +175,7 @@ def abs_conf(request, id_conf): def abs_conf_edit(request, id_conf): conf = get_object_or_404(ABSConfiguration, pk=id_conf) - #beams_list = ast.literal_eval(conf.beams) - #i = 1 - #beams = [] - #for b in beams_list: - # beam = ABSBeam.objects.get(pk=beams_list['beam'+str(i)]) - # beams.append(beam) - # i=i+1 - + beams = ABSBeam.objects.filter(abs_conf=conf) print beams @@ -230,7 +235,7 @@ def add_beam(request, id_conf): new_beam.save() #---Update 6bits configuration and add beam to abs configuration beams list. new_beam.modules_6bits() - new_beam.add_beam2list() + #new_beam.add_beam2list() messages.success(request, 'Beam: "%s" has been added.' % new_beam.name) return redirect('url_edit_abs_conf', conf.id)