##// END OF EJS Templates
Se recuperó el avance de implementación mqtt para abs
Renato Huallpa -
r384:73e4c06d4db6
parent child
Show More
@@ -0,0 +1,44
1 import os
2 import paho.mqtt.client as mqtt
3 from radarsys import settings
4 from radarsys.socketconfig import sio as sio
5
6
7 lista_ack=[
8 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 )
9 ]
10
11 lista_ack_dismatching=[
12 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)
13 ]
14
15
16
17 def on_connect(mqtt_client, userdata, flags, rc):
18 if rc == 0:
19 print('Connected successfully')
20 mqtt_client.subscribe(os.environ.get('TOPIC_ABS_ACK','abs/beams_ack'))
21 else:
22 print('Bad connection. Code:', rc)
23
24 def on_message(mqtt_client, userdata, msg):
25 # print(f'Received message on topic: {msg.topic} with payload: {msg.payload}', flush=True)
26 # message= str(msg.payload)
27 # sio.emit('abs_ws',data={'msg':message})
28 print("HOLA",flush=True)
29 # message=msg.payload[1]
30 # print("HOLAAA ",message,flush=True)
31 # #lista_ack.remove(msg.payload)
32 # print("LISTA ",lista_ack)
33
34
35
36 client = mqtt.Client()
37 client.on_connect = on_connect
38 client.on_message = on_message
39 client.username_pw_set(os.environ.get('MQTT_USER', 'abs'), os.environ.get('MQTT_PASSWORD', 'abs'))
40 client.connect(
41 host=os.environ.get('MQTT_SERVER', '10.10.10.200'),
42 port=int(settings.os.environ.get('MQTT_PORT', 1883)),
43 keepalive=int(os.environ.get('MQTT_KEEPALIVE', 60000))
44 ) No newline at end of file
@@ -18,7 +18,7 TZ=America/Lima
18 DOCKER_DATA=/data/dockers/radarsys/
18 DOCKER_DATA=/data/dockers/radarsys/
19 LOCAL_IP=192.168.1.128
19 LOCAL_IP=192.168.1.128
20
20
21 MQTT_SERVER=10.10.10.102
21 MQTT_SERVER=10.10.10.200
22 #MQTT_SERVER = 0.0.0.0
22 #MQTT_SERVER = 0.0.0.0
23 MQTT_PORT = 1883
23 MQTT_PORT = 1883
24 MQTT_KEEPALIVE = 3660
24 MQTT_KEEPALIVE = 3660
@@ -30,3 +30,4 MQTT_PASSWORD = abs
30 MQTT_CLIENT_ID= abs_id
30 MQTT_CLIENT_ID= abs_id
31 TOPIC_ABS=abs/beams
31 TOPIC_ABS=abs/beams
32 TOPIC_ABS_ACK=abs/beams_ack
32 TOPIC_ABS_ACK=abs/beams_ack
33 TOPIC_ABS_CHANGE=abs/change_beam
@@ -33,7 +33,7 client.on_connect = on_connect
33 client.on_message = on_message
33 client.on_message = on_message
34 client.username_pw_set(os.environ.get('MQTT_USER_ATRAD', 'atrad'), os.environ.get('MQTT_PASSWORD_ATRAD', 'atrad'))
34 client.username_pw_set(os.environ.get('MQTT_USER_ATRAD', 'atrad'), os.environ.get('MQTT_PASSWORD_ATRAD', 'atrad'))
35 client.connect(
35 client.connect(
36 host=os.environ.get('MQTT_SERVER', '0.0.0.0'),
36 host=os.environ.get('MQTT_SERVER', '10.10.10.200'),
37 port=int(settings.os.environ.get('MQTT_PORT', 1883)),
37 port=int(settings.os.environ.get('MQTT_PORT', 1883)),
38 keepalive=int(os.environ.get('MQTT_KEEPALIVE', 36000))
38 keepalive=int(os.environ.get('MQTT_KEEPALIVE', 36000))
39 ) No newline at end of file
39 )
@@ -272,7 +272,7
272 function ligthStatus(div1,div2,status){
272 function ligthStatus(div1,div2,status){
273 if(status==='0000'){
273 if(status==='0000'){
274 document.getElementById(div1).style.backgroundColor = "green";
274 document.getElementById(div1).style.backgroundColor = "green";
275 document.getElementById(div2).innerHTML = "Desabilitado";
275 document.getElementById(div2).innerHTML = "Deshabilitado";
276 }
276 }
277 else if(status==='1111'){
277 else if(status==='1111'){
278 document.getElementById(div1).style.backgroundColor = "green";
278 document.getElementById(div1).style.backgroundColor = "green";
@@ -88,15 +88,15 def prueba(request):
88 return render(request, 'prueba.html', kwargs)
88 return render(request, 'prueba.html', kwargs)
89
89
90 @sio.on('connection-bind')
90 @sio.on('connection-bind')
91 def connection_bind(sid, data):
91 def atrad_connection_bind(sid, data):
92 print("sid:",sid,"data",data)
92 print("sid:",sid,"data",data)
93
93
94 @sio.on('disconnect')
94 @sio.on('disconnect')
95 def test_disconnect(sid):
95 def atrad_disconnect(sid):
96 print("Disconnected")
96 print("Disconnected")
97
97
98 @sio.event
98 @sio.event
99 def control_event(sid,message):
99 def atrad_control_event(sid,message):
100 mqtt_client.publish('test/data2',message['data'])
100 mqtt_client.publish('test/data2',message['data'])
101
101
102 def hello(data):
102 def hello(data):
@@ -0,0 +1,2
1 from . import mqtt
2 mqtt.client.loop_start() No newline at end of file
@@ -805,6 +805,9 class Configuration(PolymorphicModel):
805
805
806 def get_absolute_url_write(self):
806 def get_absolute_url_write(self):
807 return reverse('url_write_dev_conf', args=[str(self.id)])
807 return reverse('url_write_dev_conf', args=[str(self.id)])
808
809 def get_absolute_url_write_mqtt(self):
810 return reverse('url_write_mqtt_dev_conf', args=[str(self.id)])
808
811
809 def get_absolute_url_read(self):
812 def get_absolute_url_read(self):
810 return reverse('url_read_dev_conf', args=[str(self.id)])
813 return reverse('url_read_dev_conf', args=[str(self.id)])
@@ -26,6 +26,9
26 <li><a href="{{ dev_conf.get_absolute_url_stop }}"><span class="fas fa-stop" aria-hidden="true"></span> Stop</a></li>
26 <li><a href="{{ dev_conf.get_absolute_url_stop }}"><span class="fas fa-stop" aria-hidden="true"></span> Stop</a></li>
27 {% endif %}
27 {% endif %}
28 <li><a href="{{ dev_conf.get_absolute_url_write }}"><span class="fas fa-arrow-circle-down" aria-hidden="true"></span> Write</a></li>
28 <li><a href="{{ dev_conf.get_absolute_url_write }}"><span class="fas fa-arrow-circle-down" aria-hidden="true"></span> Write</a></li>
29 {% if dev_conf.device.device_type.name == 'abs' %}
30 <li><a href="{{ dev_conf.get_absolute_url_write_mqtt }}"><span class="fas fa-arrow-circle-down" aria-hidden="true"></span> Write MQTT</a></li>
31 {% endif %}
29 {% if dev_conf.device.device_type.name != 'abs' %}
32 {% if dev_conf.device.device_type.name != 'abs' %}
30 <li><a href="{{ dev_conf.get_absolute_url_read }}"><span class="fas fa-arrow-circle-up" aria-hidden="true"></span> Read</a></li>
33 <li><a href="{{ dev_conf.get_absolute_url_read }}"><span class="fas fa-arrow-circle-up" aria-hidden="true"></span> Read</a></li>
31 {% endif %}
34 {% endif %}
@@ -1,140 +1,4
1 <!-- {% load static %} {% load django_bootstrap5 %}
1 {% load static %} {% load django_bootstrap5 %}
2
3 <div id="igp-top">
4 <div class="container">
5 <nav class="navbar navbar-expand">
6 <div class="nav-social">
7 <ul class="navbar-nav mr-auto">
8 <li class="nav-item">
9 <a target="_blank" href="https://www.facebook.com/igp.peru" class="nav-link">
10 <i class="fab fa-facebook-f">
11 </i></a></li>
12 <li class="nav-item"><a target="_blank" href="https://twitter.com/igp_peru" class="nav-link">
13 <i class="fab fa-twitter">
14 </i></a></li>
15 <li class="nav-item"><a target="_blank"
16 href="https://www.linkedin.com/company/igpperu/" class="nav-link">
17 <i class="fab fa-linkedin-in">
18 </i></a></li>
19 <li class="nav-item"><a target="_blank"
20 href="https://www.instagram.com/igp.peru" class="nav-link">
21 <i class="fab fa-instagram">
22 </i></a></li>
23 <li class="nav-item"><a target="_blank"
24 href="https://www.youtube.com/igp_videos" class="nav-link">
25 <i class="fab fa-youtube">
26 </i></a></li>
27 </ul>
28 </div>
29 <div class="nav-contacto">
30 <ul class="navbar-nav ml-auto">
31 <li class="d-none d-lg-inline nav-item">
32 <span><i class="fa fa-phone"> </i> (511) 3172313</span>
33 </li>
34 <li class="d-none d-lg-inline nav-item">
35 <a href="mailto:roj@igp.gob.pe">
36 <span><i class="fa fa-envelope"> </i>&nbsp;roj@igp.gob.pe</span>
37 </a>
38 </li>
39 <li class="nav-divider"></li>
40 {% if user.is_authenticated %}
41 <li class="dropdown">
42 <a href="#" class="dropdown-toggle" data-toggle="dropdown">{{ user.first_name }}<span class="caret"></span></a>
43 <ul class="dropdown-menu" aria-labelledby="dropdownMenuButton">
44 <li><a class="dropdown-item" href="/admin">Control Panel</a></li>
45 <li><a class="dropdown-item" href="{% url 'url_logout' %}">Logout</a></li>
46 </ul>
47 </li>
48 {% else %}
49 <li class="nav-item">
50 <a href="{% url 'url_login' %}?next={{request.get_full_path}}">
51 <span><i class="fas fa-user"> </i>&nbsp;Login</span>
52 </a>
53 </li>
54 {% endif %}
55 </ul>
56 </div>
57 </nav>
58 </div>
59 </div>
60
61 <div class="container">
62 <nav class="navbar navbar-expand-md">
63 <ul class="navbar-nav mr-auto">
64 <a class="nav-link"
65 href="/">
66 <img class="logo img-fluid" src="{% static 'images/logo-minan.png' %}"
67 alt="Logo Minam IGP">
68 <img class="logo img-fluid" src="{% static 'images/logo_igp_normal.png' %}" alt="Logo IGP">
69 </a>
70 </ul>
71 <button class="navbar-toggler" type="button" data-toggle="collapse"
72 data-target="#navbar-main"
73 aria-controls="navbar-main" aria-expanded="false"
74 aria-label="Toggle navigation">
75 <span class="navbar-toggler-icon">
76 <i class="fas fa-ellipsis-v" style="color:#444"></i>
77 </span>
78 </button>
79 <div id="navbar-main" class="navbar-collapse collapse">
80 <div class="navbar-igp-1">
81 <ul class="navbar-nav ml-auto">
82 <li class="nav-item {{menu_operation}}">
83 <a class="nav-link" href="{% url 'url_operation'%}">Operation</a>
84 </li>
85 <li class="nav-item {{menu_campaigns}}">
86 <a class="nav-link" href="{% url 'url_campaigns'%}">Campaigns</a>
87 </li>
88 <li class="nav-item {{menu_experiments}}">
89 <a class="nav-link" href="{% url 'url_experiments'%}">Experiments</a>
90 </li>
91 <li class="nav-item {{menu_configurations}}">
92 <a class="nav-link" href="{% url 'url_dev_confs'%}">Configurations</a>
93 </li>
94 <li class="nav-item {{menu_devices}}">
95 <a class="nav-link" href="{% url 'url_devices'%}">Devices</a>
96 </li>
97 </ul>
98 </div>
99 </div>
100
101 </nav>
102 </div>
103
104 <div id="igp-bottom">
105 <div class="container">
106 <nav class="navbar navbar-expand">
107 <div class="navbar-igp-2">
108 <ul class="navbar-nav mr-auto">
109 <li class="nav-item active">
110 <a class="nav-link"
111 href="https://www.gob.pe/igp"><span><i class="fas fa-home"> </i>&nbsp; IGP portal</span></a>
112 </li>
113 {% if tag %}
114 <li class="nav-item">
115 <a class="nav-link" href="/">{{tag | title}}</a>
116 </li>
117 {% endif %}
118 {% if title != 'Home' %}
119 <li class="nav-item">
120 <a class="nav-link">{{title}}</a>
121 </li>
122 {% endif %}
123 </ul>
124 </div>
125 </nav>
126 </div>
127 </div>
128 <br>
129
130 -->
131
132
133
134
135
136
137 {% load static %} {% load django_bootstrap5 %}
138
2
139 <nav class="navbar fixed-top navbar-expand-md navbar-light bg-white igp-top">
3 <nav class="navbar fixed-top navbar-expand-md navbar-light bg-white igp-top">
140 <div class="container">
4 <div class="container">
@@ -53,6 +53,7 urlpatterns = (
53 path('dev_conf/<int:id_conf>/delete/', views.dev_conf_delete, name='url_delete_dev_conf'),
53 path('dev_conf/<int:id_conf>/delete/', views.dev_conf_delete, name='url_delete_dev_conf'),
54
54
55 path('dev_conf/<int:id_conf>/write/', views.dev_conf_write, name='url_write_dev_conf'),
55 path('dev_conf/<int:id_conf>/write/', views.dev_conf_write, name='url_write_dev_conf'),
56 path('dev_conf/<int:id_conf>/write_mqtt/', views.dev_conf_write_mqtt, name='url_write_mqtt_dev_conf'),
56 path('dev_conf/<int:id_conf>/read/', views.dev_conf_read, name='url_read_dev_conf'),
57 path('dev_conf/<int:id_conf>/read/', views.dev_conf_read, name='url_read_dev_conf'),
57 path('dev_conf/<int:id_conf>/import/', views.dev_conf_import, name='url_import_dev_conf'),
58 path('dev_conf/<int:id_conf>/import/', views.dev_conf_import, name='url_import_dev_conf'),
58 path('dev_conf/<int:id_conf>/export/', views.dev_conf_export, name='url_export_dev_conf'),
59 path('dev_conf/<int:id_conf>/export/', views.dev_conf_export, name='url_export_dev_conf'),
@@ -46,6 +46,10 from apps.atrad.models import ATRADConfiguration
46 #from .tasks import task_start
46 #from .tasks import task_start
47 from radarsys.celery import app
47 from radarsys.celery import app
48
48
49
50 from .mqtt import client as mqtt_client
51 from radarsys.socketconfig import sio as sio
52
49 #comentario test
53 #comentario test
50 CONF_FORMS = {
54 CONF_FORMS = {
51 'rc': RCConfigurationForm,
55 'rc': RCConfigurationForm,
@@ -1509,6 +1513,7 def dev_conf_write(request, id_conf):
1509
1513
1510 if request.method == 'POST':
1514 if request.method == 'POST':
1511 if conf.write_device():
1515 if conf.write_device():
1516 mqtt_client.publish('abs/beams_up', 'Write normal')
1512 conf.device.conf_active = conf.pk
1517 conf.device.conf_active = conf.pk
1513 conf.device.save()
1518 conf.device.save()
1514 messages.success(request, conf.message)
1519 messages.success(request, conf.message)
@@ -1531,6 +1536,37 def dev_conf_write(request, id_conf):
1531
1536
1532
1537
1533 @login_required
1538 @login_required
1539 def dev_conf_write_mqtt(request,id_conf):
1540
1541 conf = get_object_or_404(Configuration, pk=id_conf)
1542
1543 if request.method == 'POST':
1544 if conf.write_device_mqtt():
1545 mqtt_client.publish('abs/beams_up', 'Mqtt')
1546 #mqtt_client.publish('abs/beams_down', 'Hola down')
1547
1548 conf.device.conf_active = conf.pk
1549 conf.device.save()
1550 messages.success(request, conf.message)
1551 if has_been_modified(conf):
1552 conf.clone(type=1, template=False)
1553 else:
1554 messages.error(request, conf.message)
1555
1556 return redirect(get_object_or_404(Configuration, pk=id_conf).get_absolute_url())
1557
1558 kwargs = {
1559 'title': 'MQTT Write Configuration',
1560 'suptitle': conf.label,
1561 'message': 'Are you sure yo want to write through MQTT this {} configuration?'.format(conf.device),
1562 'delete': False
1563 }
1564 kwargs['menu_configurations'] = 'active'
1565
1566 return render(request, 'confirm.html', kwargs)
1567
1568
1569 @login_required
1534 def dev_conf_read(request, id_conf):
1570 def dev_conf_read(request, id_conf):
1535
1571
1536 conf = get_object_or_404(Configuration, pk=id_conf)
1572 conf = get_object_or_404(Configuration, pk=id_conf)
@@ -169,9 +169,3 django.utils.encoding.force_text = force_str
169
169
170 # choose of auto-created primary keys
170 # choose of auto-created primary keys
171 DEFAULT_AUTO_FIELD='django.db.models.AutoField'
171 DEFAULT_AUTO_FIELD='django.db.models.AutoField'
172
173 MQTT_SERVER = '10.10.10.200'
174 MQTT_PORT = 1883
175 MQTT_KEEPALIVE = 60
176 MQTT_USER = ''
177 MQTT_PASSWORD = '' No newline at end of file
General Comments 0
You need to be logged in to leave comments. Login now