diff --git a/.env b/.env index 9d4911e..696b718 100644 --- a/.env +++ b/.env @@ -18,16 +18,18 @@ 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 -MQTT_USER_ATRAD=atrad -MQTT_PASSWORD_ATRAD = atrad +MQTT_USER_ATRAD='' +MQTT_PASSWORD_ATRAD = '' +MQTT_TOPIC_ATRAD_RECIEVE = "atrad/test4" + MQTT_USER = abs MQTT_PASSWORD = abs -MQTT_CLIENT_ID= abs_id + TOPIC_ABS=abs/beams TOPIC_ABS_ACK=abs/beams_ack TOPIC_ABS_CHANGE=abs/change_beam diff --git a/.gitignore b/.gitignore index c0aaafc..933ad78 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ pipLibraries/ .env remove_migrations.py migrations/ +builder diff --git a/apps/abs/models.py b/apps/abs/models.py index a1c17f9..b88d9a0 100644 --- a/apps/abs/models.py +++ b/apps/abs/models.py @@ -339,7 +339,7 @@ class ABSConfiguration(Configuration): try: #self.write_device() send_task('task_change_beam', [self.id],) - print("*************************RUNNING ABS**************************",flush=True) + # print("*************************RUNNING ABS**************************",flush=True) self.message = 'ABS running' except Exception as e: @@ -357,7 +357,6 @@ class ABSConfiguration(Configuration): self.device.status = 2 self.device.save() self.message = 'ABS has been stopped.' - print("*************************STOPPED ABS**************************",flush=True) self.save() return True @@ -379,7 +378,6 @@ class ABSConfiguration(Configuration): This function sends the beams list to every abs module. It needs 'module_conf' function """ - print("Write 3") beams = ABSBeam.objects.filter(abs_conf=self) nbeams = len(beams) @@ -429,8 +427,6 @@ class ABSConfiguration(Configuration): status = ['0'] * 64 n = 0 - print("Llega una antes entrar a multicast4") - sock = self.send_multicast(message) while True: @@ -453,7 +449,7 @@ class ABSConfiguration(Configuration): sock.close() else: self.message = "ABS Configuration does not have beams" - print('No beams') + # print('No beams') #Start DDS-RC-JARS if confdds: confdds.start_device() @@ -469,7 +465,7 @@ class ABSConfiguration(Configuration): self.device.status = 0 self.module_status = ''.join(status) self.save() - print('Could not write ABS') + # print('Could not write ABS') #Start DDS-RC-JARS if confdds: confdds.start_device() @@ -493,12 +489,12 @@ class ABSConfiguration(Configuration): if confjars: confjars.start_device() - print('Inicia intento de salvar device.status') + # print('Inicia intento de salvar device.status') self.device.status = 3 self.module_status = ''.join(status) #print(status) self.save() - print('Estatus salvado') + # print('Estatus salvado') conf_active, __ = ABSActive.objects.get_or_create(pk=1) conf_active.conf = self conf_active.save() diff --git a/apps/atrad/admin.py b/apps/atrad/admin.py index 4e2323f..953f98f 100644 --- a/apps/atrad/admin.py +++ b/apps/atrad/admin.py @@ -1,6 +1,7 @@ from django.contrib import admin -from .models import ATRADConfiguration +from .models import ATRADConfiguration, ATRADData # Register your models here. admin.site.register(ATRADConfiguration) +admin.site.register(ATRADData) \ No newline at end of file diff --git a/apps/atrad/forms.py b/apps/atrad/forms.py index 7929874..e3c95eb 100644 --- a/apps/atrad/forms.py +++ b/apps/atrad/forms.py @@ -24,4 +24,4 @@ class ATRADConfigurationForm(forms.ModelForm): class UploadFileForm(forms.Form): title = forms.CharField(label='Extension Type', widget=forms.TextInput(attrs={'readonly':'readonly'})) - file = forms.FileField() + file = forms.FileField() \ No newline at end of file diff --git a/apps/atrad/models.py b/apps/atrad/models.py index 8157708..8864f76 100644 --- a/apps/atrad/models.py +++ b/apps/atrad/models.py @@ -5,16 +5,49 @@ from django.core.validators import MinValueValidator, MaxValueValidator from .files import read_json_file import requests -# Create your models here. validators=[MinValueValidator(62.5e6), MaxValueValidator(450e6)] -class ATRADConfiguration(Configuration): +class ATRADData(models.Model): + datetime = models.DateTimeField() + + nstx = models.SmallIntegerField() + status = models.SmallIntegerField() + temp_cll = models.SmallIntegerField() + nboards = models.SmallIntegerField() + + tempdvr = models.SmallIntegerField() + potincdvr = models.SmallIntegerField() + potretdvr = models.SmallIntegerField() + + temp1 = models.SmallIntegerField() + potinc1 = models.SmallIntegerField() + potret1 = models.SmallIntegerField() + temp2 = models.SmallIntegerField() + potinc2 = models.SmallIntegerField() + potret2 = models.SmallIntegerField() + temp3 = models.SmallIntegerField() + potinc3 = models.SmallIntegerField() + potret3 = models.SmallIntegerField() + temp4 = models.SmallIntegerField() + potinc4 = models.SmallIntegerField() + potret4 = models.SmallIntegerField() + temp5 = models.SmallIntegerField() + potinc5 = models.SmallIntegerField() + potret5 = models.SmallIntegerField() + temp6 = models.SmallIntegerField() + potinc6 = models.SmallIntegerField() + potret6 = models.SmallIntegerField() - topic = models.PositiveIntegerField(verbose_name='Topic',validators=[MaxValueValidator(10)], default = 0) - def verify_frequencies(self): - return True + class Meta: + db_table = 'atrad_datas' + + def __unicode__(self): + return u'%s' % (self.name) +class ATRADConfiguration(Configuration): + + topic = models.PositiveIntegerField(verbose_name='Topic',validators=[MaxValueValidator(10)], default = 0) def status_device(self): diff --git a/apps/atrad/mqtt.py b/apps/atrad/mqtt.py index 050242e..6d6903c 100644 --- a/apps/atrad/mqtt.py +++ b/apps/atrad/mqtt.py @@ -1,39 +1,105 @@ -import os import paho.mqtt.client as mqtt from radarsys import settings from radarsys.socketconfig import sio as sio import numpy as np +import psycopg2 +import os + +def insert(time,data): + sql = """INSERT INTO atrad_datas( + datetime,nstx,status,temp_cll,nboards,tempdvr,potincdvr,potretdvr, + temp1,potinc1,potret1,temp2,potinc2,potret2,temp3,potinc3,potret3, + temp4,potinc4,potret4,temp5,potinc5,potret5,temp6,potinc6,potret6) + VALUES(%s,%s,%s,%s,%s,%s,%s,%s, + %s,%s,%s,%s,%s,%s,%s,%s,%s, + %s,%s,%s,%s,%s,%s,%s,%s,%s);""" + try: + # connect to the PostgreSQL database + conn = psycopg2.connect(database="radarsys", user='docker', password='docker', host='radarsys-postgres', port= '5432') + # create a new cursor + cur = conn.cursor() + # execute the INSERT statement + #data_tuple = [tuple(i[:]) for i in a] + values = (time,) + tuple(data[0][:25]) + cur.execute(sql, values) + + # get the generated id back + #vendor_id = cur.fetchone()[0] + + # commit the changes to the database + conn.commit() + # close communication with the database + cur.close() + except (Exception, psycopg2.DatabaseError) as error: + print(error) + finally: + if conn is not None: + conn.close() + +def maxTemperature(trs): + temps = GetTemperatures(trs) + maxT_STX = [max(i) for i in temps] + maxT = max(maxT_STX) + STXnum = maxT_STX.index(maxT) + STXloc = temps[STXnum].index(maxT) + maxT_loc = 'Amp ' + str(STXnum+1) + + if STXloc == 0: + maxT_loc = maxT_loc + " Controller" + elif STXloc<7: + maxT_loc = maxT_loc + " PA " + str(STXloc+1) + else: + maxT_loc = maxT_loc + " Combiners" + + return maxT,maxT_loc,temps + +def dataConvert(msg): + msgStr = str(msg.payload) + msgClean = [i for i in msgStr[21:-1].split("*")] + dataSTX = [[],[],[],[]] + for trs,i in zip(msgClean,[0,1,2,3]) : + dataSTX[i]= [int(i) for i in trs[1:-1].split(",")] + # Data to database + insert(msgStr[2:21],dataSTX) + # Data to send by socket + id_STX = dataSTX[0][0] // 4 + status = ''.join([msgClean[i][3] for i in [0,1,2,3]]) + powers = [dataSTX[0][34],dataSTX[0][36],dataSTX[2][32],dataSTX[2][34]] + tmax,index,tempData = maxTemperature(dataSTX) + #Json to send + data = {'time':msgStr[2:21],'num':id_STX,'pow':powers,'tmax':[str(tmax),index],'status':status} + data_temp = {'time':msgStr[2:21],'temp':tempData} + return data, data_temp + +def GetTemperatures(data): + np_data = [np.array(i) for i in data] + temps = [i[i<40] for i in np_data] + return [i[i>15].tolist() for i in temps] def on_connect(mqtt_client, userdata, flags, rc): if rc == 0: - # print('Connected successfully') - mqtt_client.subscribe('atrad/test3') + print('Connected successfullyasdss') + mqtt_client.subscribe("atrad/test4") + print("Exito") else: print('Bad connection. Code:', rc) -def maxima_temp(trs): - np_array = [np.array(i) for i in trs] - temps = [max(i[i<40]) for i in np_array] - return max(temps) - def on_message(mqtt_client, userdata, msg): - # print(f'Received message on topic: {msg.topic} with payload: {msg.payload}', flush=True) - trsi = [[],[],[],[]] - mensaje = str(msg.payload) - datos = [i for i in mensaje[21:-1].split("*")] - status=''.join([datos[i][3] for i in range(3)]) - for trs,i in zip(datos,[0,1,2,3]) : - trsi[i]= [int(i) for i in trs[1:-1].split(",")] - potencias = [trsi[0][34],trsi[0][36],trsi[2][32],trsi[2][34]] - tmax = maxima_temp(trsi) - sio.emit('test', data={'time':mensaje[2:21],'num':trsi[0][0],'pow':potencias,'tmax':str(tmax),'status':status}) + print('Received message on topic: {} with payload: {}'.format(msg.topic,msg.payload), flush=True) + mainData, tempData = dataConvert(msg) + # print("Recibi : {}".format(msg.payload),flush=True) + #socket fot general data + sio.emit('test',data = mainData) + print(mainData) + #socket for temperature details + sio.emit('temptx'+str(mainData['num'] + 1),data = tempData) client = mqtt.Client() client.on_connect = on_connect client.on_message = on_message -client.username_pw_set(os.environ.get('MQTT_USER_ATRAD', 'atrad'), os.environ.get('MQTT_PASSWORD_ATRAD', 'atrad')) +client.username_pw_set( '','') client.connect( host=os.environ.get('MQTT_SERVER', '10.10.10.200'), port=int(settings.os.environ.get('MQTT_PORT', 1883)), - keepalive=int(os.environ.get('MQTT_KEEPALIVE', 36000)) + keepalive=int(os.environ.get('MQTT_KEEPALIVE', 60)) ) \ No newline at end of file diff --git a/apps/atrad/templates/atrad_conf.html b/apps/atrad/templates/atrad_conf.html index 0cb7d14..a5f12f9 100644 --- a/apps/atrad/templates/atrad_conf.html +++ b/apps/atrad/templates/atrad_conf.html @@ -1,4 +1,5 @@ {% extends "dev_conf.html" %} +{% load static %} {% block extra-head %} + {% endblock %} -{% block extra-content %} +{% block content-graph %}
-
-
-

Atrad Monitor

-
-
+

ATRAD Monitoring

-
- -
-
-
-
-

Potencia

-
-
-
-
-
-
-
-
- -
+ +
+
+
+

Control

+ + + + + + + + + + + +
Tx1 + + +
Tx2 + + +
-
-
-
-

Status

-
-
- + + + +
+
+
+
+

Status

+
- + - + + + +
Tx1

Sin envio de datos

No data

Tx2

Sin envio de datos

No data

+
+
+
+
+

High Temperature Alerts

+ + + + + + + + + + +

+
+
+

Power Alerts

+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Tempora quisquam cupiditate sunt eaque distinctio explicabo aliquam blanditiis illo eligendi eveniet culpa, vel laboriosam! Facilis dolores assumenda autem. Maiores, quibusdam eum. +
+
- -
-
-
-
-

Temperatura

-
-
-
-
-
+ +
+
+
+

Power graph

+
+
+
+
+
+
+ + + + + + + + + + + + + + + +
# TxPower (kW)
1

2

+
+
+ +
- -
- -
-
-
-

Control

-
-
-
-
-
-
- -
-
-
-
- -
-
+ +
+
+
+

Temperature graph

+
+
+
+
+
+
+ + + + + + + + + + + + + + + +
# TxTemperature (°C)
1

2

- -
-
-
-
-
-
-