Novedad: el cortafuegos de IA supervisa toda la plataforma y explica cada incidente con palabras sencillas. Vea cómo funciona

Mostrar la temperatura en vivo en mi propia página web: ¿MQTT por WebSocket o de otra forma?

Mostrar la temperatura en vivo en mi propia página web: ¿MQTT por WebSocket o de otra forma?

Resuelto 6 4

Traducido del Türkçe por IA ·

Hola, es mi primera vez escribiendo, llevo mucho tiempo solo leyendo. En el invernadero mido temperatura y humedad con un ESP32, los datos van a Hermetry por MQTT y se ven bien en el panel. Pero quiero hacer una página muy sencilla que se abra en el teléfono de mis padres, con un solo número: «cuántos grados hay en el invernadero».Antes había instalado Mosquitto en casa, donde abrí un listener de WebSocket y me conectaba directamente desde el navegador con MQTT.js, era muy fácil. Probé lo mismo con Hermetry, puse el token del dispositivo en la página y estoy intentando conectar así:

const client = mqtt.connect('wss://<broker host>:8883/mqtt', {
  username: 'cihaz_tokeni',
  password: ''
});

En la consola aparece este error:

WebSocket connection to 'wss://<broker host>:8883/mqtt' failed

¿El puerto está mal, o tengo que habilitar WebSocket en algún lugar? ¿O es mala idea conectarse directamente desde el navegador?

♥ 0

Traducido del Türkçe por IA ·

Un navegador no puede hablar MQTT sobre TCP plano, así que WebSocket es imprescindible. 8883 es el puerto normal de MQTT/TLS, y creo que allí no hay WebSocket. Sinceramente, no sé si Hermetry tiene un puerto ws aparte.

♥ 0

Traducido del Türkçe por IA ·

Dejando de lado el puerto: si pones el token del dispositivo en la página, cualquiera que mire el código fuente de la página puede publicar datos en nombre de tu dispositivo con ese token. La temperatura del invernadero marca 80 grados, tu madre se va a asustar 🙂 Saca el token de ahí.

♥ 1

Traducido del Türkçe por IA ·

Tiene razón, no lo había pensado. La página ya estaba alojada en GitHub Pages 😬 Eliminé el token. ¿Entonces, cómo debo hacerlo?

♥ 0

Traducido del Türkçe por IA ·

En la documentación aparecen para los dispositivos MQTT 3.1.1 (8883 TLS, 1883 si el perfil lo permite) y HTTPS, pero no MQTT sobre websocket. Así que la vía desde el navegador hacia el broker está cerrada, y creo que es lo mejor, porque el token del dispositivo es la identidad del dispositivo, no la del lector.Para leer se usa la API REST. Para los últimos valores existe este endpoint:

GET /tenant/<tenantId>/api/telemetry/latest?kind=iot_device&entityId=<cihazId>&keys=temperature,humidity
Authorization: Bearer sk_live_...

Pero tampoco deberías poner la clave de API en el navegador, es el mismo problema. Yo lo hice así en casa: en una Raspberry Pi hay una aplicación Flask de 20 líneas, y la clave está guardada en su variable de entorno. La página le pide datos a Flask en /sera, Flask consulta a Hermetry y devuelve solo dos números.Al crear la clave, en la página API Keys da solo permiso de lectura de telemetría (en los módulos hay un preajuste listo llamado Read only) y escribe la IP externa de la casa en la lista de IP permitidas. La clave solo se muestra una vez, así que no olvides copiarla.Detalles: API de histórico y la página de autenticación. Aún más sencillo: hacer un pequeño dashboard en Hermetry e invitar a tu madre a la organización como usuaria, pero si quieres una página de un solo número para el teléfono, la vía Flask es cómoda.

Sahadan selamlar.
Solución aceptada♥ 9

Traducido del Türkçe por IA ·

¡Hecho! Flask está funcionando en la Pi, y la página consulta los datos cada 30 segundos. Al principio recibí un 401, se me había olvidado escribir «Bearer » delante de la clave. Además, la IP de la casa es dinámica: la IP que escribí en la lista de permitidos cambió al día siguiente, así que por ahora la dejé vacía. Pediré una IP fija al módem.

♥ 0

Traducido del Türkçe por IA ·

+1. La duración predeterminada de la clave es de 90 días, anótalo en el calendario; si no, después de tres meses la página aparecerá vacía sin avisar.

♥ 0
Viendo 7 entradas – de la 1 a la 7 (de un total de 7)
  • Debes estar registrado para responder a este debate.

Únete a la conversación

Inicia sesión para preguntar y responder, dar me gusta a las publicaciones útiles y marcar la respuesta que resolvió tu problema. Cada aportación suma puntos y niveles.

Compartir