@@ -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. |
|
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 |
|
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): |
@@ -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 |
|
|
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> 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> 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> 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