diff --git a/.env b/.env index ff5aefa..9747704 100644 --- a/.env +++ b/.env @@ -16,4 +16,17 @@ PGDATA=/var/lib/postgresql/data LC_ALL=C.UTF-8 TZ=America/Lima DOCKER_DATA=/data/dockers/radarsys/ -LOCAL_IP=192.168.1.128 \ No newline at end of file +LOCAL_IP=192.168.1.128 + +MQTT_SERVER=10.10.10.102 +#MQTT_SERVER = 0.0.0.0 +MQTT_PORT = 1883 +MQTT_KEEPALIVE = 3660 + +MQTT_USER_ATRAD=atrad +MQTT_PASSWORD_ATRAD = atrad +MQTT_USER = abs +MQTT_PASSWORD = abs +MQTT_CLIENT_ID= abs_id +TOPIC_ABS=abs/beams +TOPIC_ABS_ACK=abs/beams_ack diff --git a/apps/abs/models.py b/apps/abs/models.py index 70bb3da..e087d42 100644 --- a/apps/abs/models.py +++ b/apps/abs/models.py @@ -10,6 +10,10 @@ import requests import struct import os, sys, time +from .mqtt import client as mqtt_client +from radarsys.socketconfig import sio as sio +import json + antenna_default = json.dumps({ "antenna_up": [[0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5], [0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5], @@ -488,7 +492,28 @@ class ABSConfiguration(Configuration): conf_active.conf = self conf_active.save() return True + + def write_device_mqtt(self): + apuntes_up_down='' + beams = ABSBeam.objects.filter(abs_conf=self) + inicializacion="{\"beams\":[" + finalizacion="]}" + + for beam in beams: + beam.antenna=beam.antenna[1:] + info="{\"id\":"+str(beam.id)+","+beam.antenna + "," + apuntes_up_down=apuntes_up_down+info + + apuntes_up_down=apuntes_up_down[:len(apuntes_up_down)-1] + + apuntes_up_down=inicializacion+ apuntes_up_down+finalizacion + + #print(apuntes_up_down,flush=True) + + mqtt_client.publish(os.environ.get('TOPIC_ABS', 'abs/beams'),apuntes_up_down) + + return True def read_module(self, module): diff --git a/apps/abs/mqtt.py b/apps/abs/mqtt.py new file mode 100644 index 0000000..c0de75d --- /dev/null +++ b/apps/abs/mqtt.py @@ -0,0 +1,39 @@ +import os +import paho.mqtt.client as mqtt +from radarsys import settings +from radarsys.socketconfig import sio as sio + +lista_ack=[ + chr( 33 ), chr( 34 ), chr( 35 ), chr( 36 ), chr( 37 ), chr( 38 ), chr( 39 ), chr( 40 ), chr( 41 ), chr( 42 ), chr( 43 ), chr( 44 ), chr( 45 ), chr( 46 ), chr( 47 ), chr( 48 ), chr( 49 ), chr( 50 ), chr( 51 ), chr( 52 ), chr( 53 ), chr( 54 ), chr( 55 ), chr( 56 ), chr( 57 ), chr( 58 ), chr( 59 ), chr( 60 ), chr( 61 ), chr( 62 ), chr( 63 ), chr( 64 ), chr( 65 ), chr( 66 ), chr( 67 ), chr( 68 ), chr( 69 ), chr( 70 ), chr( 71 ), chr( 72 ), chr( 73 ), chr( 74 ), chr( 75 ), chr( 76 ), chr( 77 ), chr( 78 ), chr( 79 ), chr( 80 ), chr( 81 ), chr( 82 ), chr( 83 ), chr( 84 ), chr( 85 ), chr( 86 ), chr( 87 ), chr( 88 ), chr( 89 ), chr( 90 ), chr( 91 ), chr( 92 ), chr( 93 ), chr( 94 ), chr( 95 ), chr( 96 ) + ] + +lista_ack_dismatching=[ + chr( 97 ), chr( 98 ), chr( 99 ), chr( 100 ), chr( 101 ), chr( 102 ), chr( 103 ), chr( 104 ), chr( 105 ), chr( 106 ), chr( 107 ), chr( 108 ), chr( 109 ), chr( 110 ), chr( 111 ), chr( 112 ), chr( 113 ), chr( 114 ), chr( 115 ), chr( 116 ), chr( 117 ), chr( 118 ), chr( 119 ), chr( 120 ), chr( 121 ), chr( 122 ), chr( 123 ), chr( 124 ), chr( 125 ), chr( 126 ), chr( 127 ), chr( 128 ), chr( 129 ), chr( 130 ), chr( 131 ), chr( 132 ), chr( 133 ), chr( 134 ), chr( 135 ), chr( 136 ), chr( 137 ), chr( 138 ), chr( 139 ), chr( 140 ), chr( 141 ), chr( 142 ), chr( 143 ), chr( 144 ), chr( 145 ), chr( 146 ), chr( 147 ), chr( 148 ), chr( 149 ), chr( 150 ), chr( 151 ), chr( 152 ), chr( 153 ), chr( 154 ), chr( 155 ), chr( 156 ), chr( 157 ), chr( 158 ), chr( 159 ), chr(160) +] + +def on_connect(mqtt_client, userdata, flags, rc): + if rc == 0: + print('Connected successfully') + mqtt_client.subscribe(os.environ.get('TOPIC_ABS_ACK','abs/beams_ack')) + else: + print('Bad connection. Code:', rc) + +def on_message(mqtt_client, userdata, msg): + # print(f'Received message on topic: {msg.topic} with payload: {msg.payload}', flush=True) + # message= str(msg.payload) + # sio.emit('abs_ws',data={'msg':message}) + #message=str(msg.payload) + #lista_ack.pop(message) + print("Mientras" ,flush=True) + + + +client = mqtt.Client() +client.on_connect = on_connect +client.on_message = on_message +client.username_pw_set(os.environ.get('MQTT_USER', 'abs'), os.environ.get('MQTT_PASSWORD', 'abs')) +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)) +) \ No newline at end of file diff --git a/apps/abs/templates/abs_conf.html b/apps/abs/templates/abs_conf.html index 9757811..2278ba1 100644 --- a/apps/abs/templates/abs_conf.html +++ b/apps/abs/templates/abs_conf.html @@ -39,13 +39,22 @@ {% endblock %} + + {% block extra-menu-actions %}
  • View Patterns
  • {% endblock %} + + {% block extra-content %} + + + + {% if beams %}

    Beams:

    @@ -280,6 +289,10 @@ + + {% if beam.id == active_beam %} @@ -301,8 +314,12 @@ {% else %}
    + + Change Beam +


    +
    {% endif %} @@ -317,23 +334,51 @@

    {% endif %} {% endblock extra-content %} + {% block extra-js%} + + {% endblock %} diff --git a/apps/abs/views.py b/apps/abs/views.py index 002b20c..70a5b0c 100644 --- a/apps/abs/views.py +++ b/apps/abs/views.py @@ -24,6 +24,8 @@ from .utils.overJroShow import overJroShow #Create your views here. import json, ast +from .mqtt import client as mqtt_client +from radarsys.socketconfig import sio as sio def get_values_from_form(form_data): @@ -246,6 +248,41 @@ def import_file(request, id_conf): return render(request, 'abs_import.html', kwargs) +# def send_mqtt(request,id_conf): + +# # conf = get_object_or_404(ABSConfiguration, pk=id_conf) + +# # abs_mqtt = Configuration.objects.filter(pk=conf.device.conf_active).first() +# # if abs_mqtt!=conf: +# # url_mqtt = '#' if abs is None else abs.get_absolute_url() +# # label_mqtt = '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_mqtt, +# # label_mqtt +# # )) +# # ) +# # return redirect(conf.get_absolute_url()) + +# # beam = get_object_or_404(ABSBeam, pk=id_beam) + +# conf = get_object_or_404(ABSConfiguration, pk=id_conf) + +# mqtt_client.publish('abs/beams_up', 'Hola up') +# mqtt_client.publish('abs/beams_down', 'Hola down') + +# kwargs = { +# 'title': 'ABS', +# 'suptitle': conf.label, +# 'message': 'Are you sure you want to write ABS Beam?', +# 'delete': False +# } +# kwargs['menu_configurations'] = 'active' + +# return render(request, 'confirm.html', kwargs) + + def send_beam(request, id_conf, id_beam): conf = get_object_or_404(ABSConfiguration, pk=id_conf) @@ -443,3 +480,33 @@ def plot_pattern(request, id_conf, id_beam, antenna): response = HttpResponse(buf.getvalue(), content_type='image/png') return response +import os +from django.http import HttpResponse + +@sio.on('connection-bind') +def abs_connection_bind(sid, data): + print("sid:",sid,"data",data) + +@sio.on('disconnect') +def abs_test_disconnect(sid): + print("Disconnected") + +@sio.event +def abs_send_beam_up(sid, message): + mqtt_client.publish('abs/beams_up', message['data']) + +@sio.event +def abs_send_beam_down(sid, message): + mqtt_client.publish('abs/beams_down', message['data']) + +@sio.event +def change_beam(sid,message): + data=str(message['data']) + data=data[16] + mqtt_client.publish('abs/change_beam',data) + + + + + + diff --git a/apps/atrad/mqtt.py b/apps/atrad/mqtt.py index 0e80604..89dcbe0 100644 --- a/apps/atrad/mqtt.py +++ b/apps/atrad/mqtt.py @@ -1,3 +1,4 @@ +import os import paho.mqtt.client as mqtt from radarsys import settings from radarsys.socketconfig import sio as sio @@ -16,11 +17,11 @@ def maxima_temp(trs): return max(temps) def on_message(mqtt_client, userdata, msg): - print(f'Received message on topic: {msg.topic} with payload: {msg.payload}', flush=True) + # 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 [0,1,2,3]]) + 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]] @@ -30,9 +31,9 @@ def on_message(mqtt_client, userdata, msg): client = mqtt.Client() client.on_connect = on_connect client.on_message = on_message -client.username_pw_set(settings.MQTT_USER, settings.MQTT_PASSWORD) +client.username_pw_set(os.environ.get('MQTT_USER_ATRAD', 'atrad'), os.environ.get('MQTT_PASSWORD_ATRAD', 'atrad')) client.connect( - host=settings.MQTT_SERVER, - port=settings.MQTT_PORT, - keepalive=settings.MQTT_KEEPALIVE + host=os.environ.get('MQTT_SERVER', '0.0.0.0'), + port=int(settings.os.environ.get('MQTT_PORT', 1883)), + keepalive=int(os.environ.get('MQTT_KEEPALIVE', 36000)) ) \ No newline at end of file diff --git a/radarsys/settings.py b/radarsys/settings.py index b057210..2b1d4a0 100644 --- a/radarsys/settings.py +++ b/radarsys/settings.py @@ -170,7 +170,7 @@ django.utils.encoding.force_text = force_str # choose of auto-created primary keys DEFAULT_AUTO_FIELD='django.db.models.AutoField' -MQTT_SERVER = '10.10.10.99' +MQTT_SERVER = '10.10.10.200' MQTT_PORT = 1883 MQTT_KEEPALIVE = 60 MQTT_USER = ''