Mostrar la temperatura en vivo en mi propia página web: ¿MQTT por WebSocket o de otra forma?
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?
Merhaba, ilk defa yazıyorum, uzun süredir okuyorum sadece. Serada ESP32 ile sıcaklık ve nem ölçüyorum, Hermetry’ye MQTT ile gidiyor, dashboard’da güzel görünüyor. Ama annemle babam için telefonda açılacak çok basit bir sayfa yapmak istiyorum, tek sayı: «sera kaç derece».
Daha önce evde Mosquitto kurmuştum, orada websocket listener açıp MQTT.js ile tarayıcıdan direkt bağlanıyordum, çok kolaydı. Aynısını Hermetry ile denedim, sayfaya cihazın token’ını koydum, şöyle bağlanmaya çalışıyorum:
const client = mqtt.connect('wss://<broker host>:8883/mqtt', {
username: 'cihaz_tokeni',
password: ''
});
Konsolda şu hata çıkıyor:
WebSocket connection to 'wss://<broker host>:8883/mqtt' failed
Port mu yanlış, yoksa websocket mi açmam gerekiyor bir yerden? Yoksa tarayıcıdan direkt bağlanmak mı yanlış fikir?
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.
Tarayıcı düz TCP MQTT konuşamaz, websocket şart. 8883 normal MQTT/TLS portu, orada websocket yok bence. Hermetry’de ayrı bir ws portu var mı bilmiyorum açıkçası.
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í.
Port bir yana, cihaz token’ını sayfaya koyarsan sayfanın kaynağına bakan herkes o token ile senin cihazın adına veri basabilir. Sera sıcaklığı 80 derece görünür, annen panik olur 🙂 Token’ı oradan çıkar.
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?
Haklısınız, onu hiç düşünmemiştim. Sayfa zaten GitHub Pages’te duruyordu 😬 Token’ı sildim. O zaman nasıl yapacağım?
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.
Dokümanda cihazlar için MQTT 3.1.1 (8883 TLS, profil izin verirse 1883) ve HTTPS var, websocket üzerinden MQTT yok. Yani tarayıcıdan broker’a bağlanma yolu kapalı, bence iyi ki de kapalı, çünkü cihaz token’ı cihazın kimliği, okuyucu kimliği değil.
Okumak için REST API kullanılıyor. Son değerler için şu uç var:
GET /tenant/<tenantId>/api/telemetry/latest?kind=iot_device&entityId=<cihazId>&keys=temperature,humidity
Authorization: Bearer sk_live_...
Ama buradaki API anahtarını da tarayıcıya koymamalısın, aynı sorun. Ben kendi evde şöyle yaptım: evdeki Raspberry Pi’da 20 satırlık bir Flask uygulaması var, anahtar onun ortam değişkeninde duruyor. Sayfa Flask’a /sera diye soruyor, Flask Hermetry’ye soruyor, sadece iki sayıyı döndürüyor.
Anahtarı oluştururken API Keys sayfasında sadece telemetri okuma iznini ver (modüllerde Read only hazır ayarı var), IP allowlist’e de evin dış IP’sini yaz. Anahtar sadece bir kere gösteriliyor, kopyalamayı unutma.
Ayrıntılar: Geçmiş API’si ve kimlik doğrulama sayfası. Daha da basiti, Hermetry’de küçük bir dashboard yapıp annenleri organizasyona kullanıcı olarak davet etmek, ama telefon için tek sayılık sayfa istiyorsan Flask yolu rahat.
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.
Yaptım! Pi’da Flask çalışıyor, sayfa 30 saniyede bir soruyor. Önce 401 aldım, anahtarın başına «Bearer » yazmayı unutmuşum. Bir de evin IP’si değişken, allowlist’e yazdığım IP ertesi gün değişti, şimdilik boş bıraktım, modemden sabit IP isteyeceğim.
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.
+1. Anahtarın varsayılan süresi 90 gün, takvime yaz, yoksa üç ay sonra sayfa sessizce boş gelir.
- 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.

