diff --git a/.env b/.env index 696b718..ff07766 100644 --- a/.env +++ b/.env @@ -18,8 +18,8 @@ TZ=America/Lima DOCKER_DATA=/data/dockers/radarsys/ LOCAL_IP=192.168.1.128 -MQTT_SERVER=10.10.10.200 -# MQTT_SERVER = 192.168.100.5 +# MQTT_SERVER=10.10.10.200 +MQTT_SERVER = 192.168.100.5 MQTT_PORT = 1883 MQTT_KEEPALIVE = 3660 diff --git a/apps/abs/models.py b/apps/abs/models.py index b88d9a0..1b2d09e 100644 --- a/apps/abs/models.py +++ b/apps/abs/models.py @@ -355,6 +355,7 @@ class ABSConfiguration(Configuration): def stop_device(self): self.device.status = 2 + self.active_beam = 0 self.device.save() self.message = 'ABS has been stopped.' self.save() @@ -364,6 +365,9 @@ class ABSConfiguration(Configuration): def stop_device_mqtt(self): self.device.status = 2 + self.active_beam = 0 + # conf_active = None + # conf_active.save() self.device.save() self.message = 'ABS has been stopped.' self.save() @@ -426,7 +430,7 @@ class ABSConfiguration(Configuration): message += ''.join([fromBinary2Char(beam.module_6bits(i)) for beam in beams]) status = ['0'] * 64 n = 0 - + print("Estoy en write_device normal",flush=True) sock = self.send_multicast(message) while True: @@ -500,6 +504,16 @@ class ABSConfiguration(Configuration): conf_active.save() return True + +# DEV_STATES = ( +# (0, 'No connected'), +# (1, 'Connected'), +# (2, 'Configured'), +# (3, 'Running'), +# (4, 'Unknown'), +# (5, 'Busy') +# ) + def write_device_mqtt(self): if self.experiment is None: @@ -545,6 +559,8 @@ class ABSConfiguration(Configuration): apuntes_up_down=inicializacion+ apuntes_up_down+finalizacion mqtt_client.publish(os.environ.get('TOPIC_ABS', 'abs/beams'),apuntes_up_down) + self.active_beam = beams[0].pk + #Start DDS-RC-JARS if confdds: confdds.start_device() @@ -554,6 +570,12 @@ class ABSConfiguration(Configuration): if confjars: confjars.start_device() + self.device.status = 3 + self.save() + + conf_active, __ = ABSActive.objects.get_or_create(pk=1) + conf_active.conf = self + conf_active.save() return True def read_module(self, module): @@ -657,6 +679,7 @@ class ABSConfiguration(Configuration): return False sock = self.send_multicast('MNTR') + print("Estoy en status_deice",flush=True) n = 0 status = ['0'] * 64 @@ -777,6 +800,7 @@ class ABSConfiguration(Configuration): status = ['0'] * 64 message = 'CHGB{}'.format(beam_pos) sock = self.send_multicast(message) + print("Estoy en send_beam ",flush=True) while True: #for i in range(32): try: @@ -810,6 +834,93 @@ class ABSConfiguration(Configuration): self.save() return True + def change_beam_mqtt(self, beam_pos): + """ + This function connects to a multicast group and sends the beam number + to all abs modules. + """ + print ('Send beam') + print (self.active_beam) + beams = ABSBeam.objects.filter(abs_conf=self) + #print beams[self.active_beam-1].module_6bits(0) + active = ABSActive.objects.get(pk=1) + if active.conf != self: + self.message = 'La configuracion actual es la del siguiente enlace %s.' % active.conf.get_absolute_url() + self.message += "\n" + self.message += 'Se debe realizar un write en esta configuracion para luego obtener un status valido.' + + return False + + # Se manda a cero RC para poder realizar cambio de beam + if self.experiment is None: + confs = [] + else: + confs = Configuration.objects.filter(experiment = self.experiment).filter(type=0) + confdds = '' + confjars = '' + confrc = '' + #TO STOP DEVICES: DDS-JARS-RC + for i in range(0,len(confs)): + if i==0: + for conf in confs: + if conf.device.device_type.name == 'dds': + confdds = conf + confdds.stop_device() + break + if i==1: + for conf in confs: + if conf.device.device_type.name == 'jars': + confjars = conf + confjars.stop_device() + break + if i==2: + for conf in confs: + if conf.device.device_type.name == 'rc': + confrc = conf + confrc.stop_device() + break + if beam_pos > 0: + beam_pos = beam_pos - 1 + else: + beam_pos = 0 + + #El indice del apunte debe ser menor que el numero total de apuntes + #El servidor tcp en el embebido comienza a contar desde 0 + # status = ['0'] * 64 + # message = 'CHGB{}'.format(beam_pos) + # sock = self.send_multicast(message) + # while True: + # #for i in range(32): + # try: + # data, address = sock.recvfrom(1024) + # print (address, data) + # data = data.decode() + # if data == '1': + # status[int(address[0][10:])-1] = '3' + # elif data == '0': + # status[int(address[0][10:])-1] = '1' + # except socket.timeout: + # print('Timeout') + # break + # except Exception as e: + # print ('Error {}'.format(e)) + # pass + + # sock.close() + + #Start DDS-RC-JARS + if confdds: + confdds.start_device() + if confrc: + #print confrc + confrc.start_device() + if confjars: + confjars.start_device() + + self.message = "ABS Beam has been changed" + self.module_status = ''.join(status) + self.save() + return True def get_absolute_url_import(self): return reverse('url_import_abs_conf', args=[str(self.id)]) diff --git a/apps/abs/templates/abs_conf_mqtt.html b/apps/abs/templates/abs_conf_mqtt.html index 8244661..abf8c17 100644 --- a/apps/abs/templates/abs_conf_mqtt.html +++ b/apps/abs/templates/abs_conf_mqtt.html @@ -406,10 +406,11 @@ document.location = "{% url 'url_send_beam' dev_conf.id beam.id %}"; }); - a=$("#change_beam_mqtt{{forloop.counter}}") - a.click(function () { + change_beam_mqtt_btn=$("#change_beam_mqtt{{forloop.counter}}") + change_beam_mqtt_btn.click(function () { info="change_beam_mqtt{{forloop.counter}}" - socket.emit('change_beam',{data:info}) + socket.emit('change_beam',{data:info}); + document.location = "{% url 'url_send_beam_mqtt' dev_conf.id beam.id %}"; }); {% endif %} diff --git a/apps/abs/urls.py b/apps/abs/urls.py index 7134aaa..edf4cb4 100644 --- a/apps/abs/urls.py +++ b/apps/abs/urls.py @@ -9,6 +9,7 @@ urlpatterns = ( path('/import/', views.import_file, name='url_import_abs_conf'), #url(r'^(?P-?\d+)/status/', views.abs_conf, {'status_request':True},name='url_status_abs_conf'), path('/change_beam//', views.send_beam, name='url_send_beam'), + path('/change_beam//', views.change_beam_mqtt, name='url_send_beam_mqtt'), path('/plot/', views.plot_patterns, name='url_plot_abs_patterns'), path('/plot//', views.plot_patterns, name='url_plot_abs_patterns2'), path('/plot///pattern.png/', views.plot_pattern, name='url_plot_beam'), diff --git a/apps/abs/views.py b/apps/abs/views.py index 39b7616..fd4d1e5 100644 --- a/apps/abs/views.py +++ b/apps/abs/views.py @@ -287,7 +287,7 @@ def send_beam(request, id_conf, id_beam): else: i += 1 beam_pos = i + 1 #Estandarizar - print ('%s Position: %s') % (beam.name, str(beam_pos)) + print('{} Position {}'.format(beam.name,str(beam_pos))) conf.send_beam(beam_pos) return redirect('url_abs_conf', conf.id) @@ -302,6 +302,81 @@ def send_beam(request, id_conf, id_beam): return render(request, 'confirm.html', kwargs) +def change_beam_mqtt(request, id_conf, id_beam): + + conf = get_object_or_404(ABSConfiguration, pk=id_conf) + + abs = Configuration.objects.filter(pk=conf.device.conf_active).first() + if abs!=conf: + url = '#' if abs is None else abs.get_absolute_url() + label = 'None' if abs is None else abs.label + messages.warning( + request, + mark_safe('The current configuration has not been written in the modules, the active configuration is {}'.format( + url, + label + )) + ) + return redirect(conf.get_absolute_url()) + + beams = ABSBeam.objects.filter(abs_conf=conf) + beam = get_object_or_404(ABSBeam, pk=id_beam) + + if request.method == 'POST': + + beams_list = ABSBeam.objects.filter(abs_conf=conf) + conf.active_beam = id_beam + + i = 0 + for b in beams_list: + if b.id == int(id_beam): + break + else: + i += 1 + beam_pos = i + 1 #Estandarizar + + print('{} Position {}'.format(beam.name,str(beam_pos))) + conf.change_beam_mqtt(beam_pos) + + module_messages = json.loads(conf.module_messages) + kwargs = {} + kwargs['connected_modules'] = str(conf.connected_modules())+'/64' + kwargs['dev_conf'] = conf + + if conf.operation_mode == 0: + kwargs['dev_conf_keys'] = ['label', 'operation_mode'] + else: + kwargs['dev_conf_keys'] = ['label', 'operation_mode', 'operation_value'] + + kwargs['title'] = 'ABS Configuration' + kwargs['suptitle'] = 'Details' + kwargs['button'] = 'Edit Configuration' + if conf.active_beam != 0: + kwargs['active_beam'] = int(conf.active_beam) + + + kwargs['beams'] = beams + # kwargs['modules_status'] = all_status + # kwargs['color_status'] = color_status + + + kwargs['module_messages'] = module_messages + + ###### SIDEBAR ###### + kwargs.update(sidebar(conf=conf)) + + # return redirect('url_abs_conf', conf.id) + return render(request, 'abs_conf_mqtt.html',kwargs) + + kwargs = { + 'title': 'ABS', + 'suptitle': conf.label, + 'message': 'Are you sure you want to change ABS Beam through MQTT to: {}?'.format(beam.name), + 'delete': False + } + kwargs['menu_configurations'] = 'active' + + return render(request, 'confirm.html', kwargs) def add_beam(request, id_conf): diff --git a/apps/atrad/mqtt.py b/apps/atrad/mqtt.py index 6d6903c..e567014 100644 --- a/apps/atrad/mqtt.py +++ b/apps/atrad/mqtt.py @@ -78,9 +78,8 @@ def GetTemperatures(data): def on_connect(mqtt_client, userdata, flags, rc): if rc == 0: - print('Connected successfullyasdss') + # print('Connected successfullyasdss') mqtt_client.subscribe("atrad/test4") - print("Exito") else: print('Bad connection. Code:', rc) diff --git a/apps/main/models.py b/apps/main/models.py index 4406b5b..cdd5868 100644 --- a/apps/main/models.py +++ b/apps/main/models.py @@ -442,6 +442,7 @@ class Experiment(models.Model): for conf in confs: + print("conf->",conf) print(conf.device) print(conf.device.status) print("--------------",flush=True) diff --git a/apps/main/templates/base.html b/apps/main/templates/base.html index b1909e1..eeacf4c 100644 --- a/apps/main/templates/base.html +++ b/apps/main/templates/base.html @@ -60,9 +60,9 @@ {% else %} {% block content-graph %} {% endblock %} diff --git a/apps/main/templates/base_list.html b/apps/main/templates/base_list.html index 45bd582..a9f3f11 100644 --- a/apps/main/templates/base_list.html +++ b/apps/main/templates/base_list.html @@ -40,8 +40,6 @@ {% endfor%} {% for object in objects %} -

{{ object }}

-

{{ objects }}

{{ forloop.counter|add:offset }} {% for key in keys %} diff --git a/apps/main/templates/dev_conf.html b/apps/main/templates/dev_conf.html index d2bd053..921de49 100644 --- a/apps/main/templates/dev_conf.html +++ b/apps/main/templates/dev_conf.html @@ -46,7 +46,7 @@ {% else %} Connected {% endif %} - + {% for key in dev_conf_keys %} diff --git a/apps/main/views.py b/apps/main/views.py index 4679a4a..a8f3960 100644 --- a/apps/main/views.py +++ b/apps/main/views.py @@ -1579,6 +1579,7 @@ def dev_conf_write_mqtt(request,id_conf): kwargs['suptitle'] = 'Details' kwargs['button'] = 'Edit Configuration' + print("conf.active_beam: {}".format(conf.active_beam)) if conf.active_beam != 0: kwargs['active_beam'] = int(conf.active_beam) diff --git a/apps/rc/models.py b/apps/rc/models.py index a1acb65..9f4f621 100644 --- a/apps/rc/models.py +++ b/apps/rc/models.py @@ -199,7 +199,7 @@ class RCConfiguration(Configuration): 'params': json.dumps(line_data['params']) } ) - print(line,flush=True) + # print(line,flush=True) for i, line in enumerate(self.get_lines()): line_params = json.loads(line.params) @@ -563,10 +563,10 @@ class RCConfiguration(Configuration): else: data = {'manual': [clock.multiplier, clock.divisor, clock.reference]} payload = self.request('setfreq', 'post', data=json.dumps(data)) - print(payload) + # print(payload) if payload['command'] != 'ok': self.message = 'RC write: {}'.format(payload['command']) - print('RC write: {}'.format(payload['command'])) + # print('RC write: {}'.format(payload['command'])) else: self.message = payload['programming'] if payload['programming'] == 'fail': @@ -620,12 +620,12 @@ class RCConfiguration(Configuration): self.device.status = 3 self.device.save() self.message = 'RC configured and started' - print('RC configured and started') + # print('RC configured and started') else: self.device.status = 1 self.device.save() self.message = 'RC write: {}'.format(payload['write']) - print('RC write: {}'.format(payload['write'])) + # print('RC write: {}'.format(payload['write'])) return False #payload = self.request('start', 'post') @@ -688,11 +688,11 @@ class RCLine(models.Model): ordering = ['channel'] def __str__(self): - print("AAAA: ",self.rc_configuration,flush=True) - ret = u'{}|{} - {}'.format(self.pk, self.get_name(),self.rc_configuration.name) - return ret - # if self.rc_configuration: - # return u'{}|{} - {}'.format(self.pk, self.get_name(), self.rc_configuration.name) + # print("AAAA: ",self.rc_configuration,flush=True) + # ret = u'{}|{} - {}'.format(self.pk, self.get_name(),self.rc_configuration.name) + # return ret + if self.rc_configuration: + return u'{}|{} - {}'.format(self.pk, self.get_name(), self.rc_configuration.name) def jsonify(self): diff --git a/apps/rc/views.py b/apps/rc/views.py index dc1163c..607f641 100644 --- a/apps/rc/views.py +++ b/apps/rc/views.py @@ -355,22 +355,22 @@ def update_lines_position(request, conf_id): def import_file(request, conf_id): - print("HOLA",flush=True) + # print("HOLA",flush=True) conf = get_object_or_404(RCConfiguration, pk=conf_id) - print("HOLA2",flush=True) + # print("HOLA2",flush=True) if request.method=='POST': form = RCImportForm(request.POST, request.FILES) - print("HOLA3",flush=True) + # print("HOLA3",flush=True) if form.is_valid(): - print("HOLA4",flush=True) + #print("HOLA4",flush=True) # try: - print("HOLA5",flush=True) + #print("HOLA5",flush=True) data = conf.import_from_file(request.FILES['file_name']) - print("HOLA6",flush=True) + #print("HOLA6",flush=True) conf.dict_to_parms(data) - print("1",flush=True) + #print("1",flush=True) conf.update_pulses() - print("2",flush=True) + #print("2",flush=True) messages.success(request, 'Configuration "%s" loaded succesfully' % request.FILES['file_name']) return redirect(conf.get_absolute_url_edit())