Yeni: Yapay zekâ güvenlik duvarı tüm platformu izliyor ve her olayı sade bir dille açıklıyor. Nasıl çalıştığını görün

Kendi web sayfamda canlı sıcaklık göstermek: MQTT websocket mi, yoksa başka yol mu?

Kendi web sayfamda canlı sıcaklık göstermek: MQTT websocket mi, yoksa başka yol mu?

Çözüldü 6 4

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?

♥ 0

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ı.

♥ 0

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.

♥ 1

Haklısınız, onu hiç düşünmemiştim. Sayfa zaten GitHub Pages’te duruyordu 😬 Token’ı sildim. O zaman nasıl yapacağım?

♥ 0

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.

Sahadan selamlar.
Kabul edilen çözüm♥ 9

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.

♥ 0

+1. Anahtarın varsayılan süresi 90 gün, takvime yaz, yoksa üç ay sonra sayfa sessizce boş gelir.

♥ 0
7 yazı görüntüleniyor – 1 ile 7 arası (toplam 7)
  • Bu konuyu yanıtlamak için giriş yapmış olmalısınız.

Sohbete katılın

Soru sormak ve yanıtlamak, yararlı gönderileri beğenmek ve sorununuzu çözen yanıtı işaretlemek için oturum açın. Her katkı puan ve seviye kazandırır.

Paylaş