E. index.html

1<!DOCTYPE html>
2<html lang="es">
3
4<head>
5
6 <meta charset="utf-8">
7 <meta name="viewport" content="width=device-width">
8
9 <title>IoT</title>
10
11 <script src="paho.javascript-1.0.3/paho-mqtt-min.js"></script>
12
13</head>
14
15<body>
16
17 <h1>IoT</h1>
18
19 <p>
20 <output id="salida">
21 <progress max="100">Cargando…</progress>
22 </output>
23 </p>
24
25 <p>
26 <button type="button" onclick="clicEnBoton()">
27 Enviar
28 </button>
29 </p>
30
31 <script type="module">
32
33 import { exportaAHtml } from "./lib/js/exportaAHtml.js"
34 import { creaIdCliente } from "./lib/js/creaIdCliente.js"
35 import { falloEnLaConexionMqtt } from "./lib/js/falloEnLaConexionMqtt.js"
36 import { conexionMqttPerdida } from "./lib/js/conexionMqttPerdida.js"
37 import { muestraError } from "./lib/js/muestraError.js"
38
39 // A cada control le corresponde un tópico diferente.
40 const TOPICO_FOCO = "gilpgdm/IoT/foco"
41
42 let valor = "0"
43
44 // Cambia por una raíz para tu proyecto.
45 const clientId = creaIdCliente("gilpgdmIoT-")
46
47 // Si usas un servidor de MQTT diferente, necesitas cambiar los parámetros.
48 const cliente = new Paho.MQTT.Client("test.mosquitto.org", 8081, clientId)
49
50 function clicEnBoton() {
51 try {
52 enviaMensajeMqtt(valor === '1' ? '0' : '1', TOPICO_FOCO)
53 } catch (error) {
54 muestraError(error)
55 }
56 }
57 exportaAHtml(clicEnBoton)
58
59 // Acciones al recibir un mensaje.
60 cliente.onMessageArrived = mensaje => {
61 if (mensaje.destinationName === TOPICO_FOCO) {
62 valor = mensaje.payloadString
63 salida.value = valor === "1" ? "🔴" : "⚪"
64 }
65 }
66
67 // Acciones al perder la conexión.
68 cliente.onConnectionLost = conexionMqttPerdida
69
70 // Configura el cliente.
71 cliente.connect({
72
73 keepAliveInterval: 10,
74
75 useSSL: true,
76
77 // Acciones al fallar la conexión.
78 onFailure: falloEnLaConexionMqtt,
79
80 // Acciones al lograr la conexión.
81 onSuccess: () => {
82 console.log("Conectado")
83 // Se suscribe a uno o más tópicos.
84 cliente.subscribe(TOPICO_FOCO)
85 // Envía el valor inicial al tópico.
86 enviaMensajeMqtt(valor, TOPICO_FOCO)
87 },
88
89 })
90
91 /**
92 * Envá un valor al servidor de MQTT y es reenviado a todos los dispositivos
93 * suscritos al tópico indicado
94 * @param {string} mensaje
95 * @param {string} topico
96 */
97 function enviaMensajeMqtt(mensaje, topico) {
98 const mensajeMqtt = new Paho.MQTT.Message(mensaje)
99 mensajeMqtt.destinationName = topico
100 cliente.send(mensajeMqtt)
101 }
102
103 </script>
104
105</body>
106
107</html>
skip_previous skip_next