RisalDash RisalDash

Qoʻllanma · MQTT · IoT

ESP32 da MQTT: noldan Home Assistant’gacha

Bitta datchik bir vaqtda uchta ilovaga yetishi kerak boʻlsa, har juftni qoʻlda ulash tez parchalanadi. MQTT buni agʻdaradi: qurilma topic’ga publish qiladi, qiziqqan hamma esa subscribe qiladi — oʻrtada broker bilan. Mana nega bu IoT’ga mos, sizga aslida kerak boʻlgan uchta soʻz (topic, QoS, retain) va Home Assistant bilan gaplashuvchi ESP32 kodi.

MQTTHome AssistantPubSubClientESP32IoT
MQTT pub/sub: ESP32 home/temp ni Mosquitto brokerga publish qiladi; Home Assistant, telefon ilovasi va logger subscribe qilgan
Topic’ga bir marta publish — qiziqqan har bir subscriber oladi. Polling yoʻq, har juftni ulash yoʻq.

Nega MQTT HTTP-pollingdan yaxshi

Oddiy HTTP’da dashboard qurilmadan taymer boʻyicha «yangilik bormi?» deb soʻraydi — isrofgar, kechikadi va bir-ikki mijozdan nariga kengaymaydi. MQTT oqimni agʻdaradi: qurilma qiymat oʻzgargan zahoti push qiladi, broker esa uni barcha subscriberlarga tarqatadi. U beqaror, kam quvvatli kanallar orqali koʻplab kichik xabarlar uchun qurilgan — aynan IoT. Umuman transport tanlayotgan boʻlsang, avval Wi-Fi va boshqalarga qara; MQTT bu yerda Wi-Fi ustidan yuradi.

Topic, QoS va retain — oddiy soʻzlarda

Topic — shunchaki home/livingroom/temp kabi yoʻl; publisher va subscriber unda uchrashadi (maskalar bilan obuna: home/+/temp). QoS — yetkazish kafolati, retain esa brokerga oxirgi qiymatni saqlashni aytadi, shunda yangi subscriber uni keyingi yangilanishni kutmasdan darhol oladi.

TushunchaNimani anglatadiNima uchun
QoS 0koʻpi bilan bir marta (kafolatsiz)tez-tez datchik oʻqishlari
QoS 1hech boʻlmasa bir marta (dubl boʻlishi mumkin)buyruqlar, holat oʻzgarishi
QoS 2aynan bir marta (sekin)kamdan-kam — kritik, bir martalik
Retainbroker oxirgi xabarni saqlaydiulanishda joriy holat
Last Willuzilib qolsang broker publish qiladi«oflayn» aniqlash

Besh daqiqada broker

MQTT’ga oʻrtada broker kerak — pochta. Standart — Mosquitto: uni Raspberry Pi’ga, NAS’ga yoki Home Assistant turgan mashinaga oʻrnat (u yerda bir bosishda add-on sifatida oʻrnatiladi), tamom. Bulutli broker (HiveMQ, EMQX Cloud) ham mos, agar lokal hech narsa xohlamasang. Har bir qurilmani broker IP’si va 1883 portiga yoʻnaltir — ular bir-birini topadi.

ESP32 tomoni: PubSubClient

Qurilmada klassik tanlov — PubSubClient kutubxonasi. Shakli doim bir xil: ulanasan, boshqaradiganingga obuna boʻlasan, sezganingni publish qilasan va Wi-Fi uzilganda qayta ulanasan:

connect:    client.connect("esp32-kitchen")        // brokerga
subscribe:  client.subscribe("home/relay/set")     // bu yerga broker buyruq yuboradi
publish:    client.publish("home/temp", "24.1")    // yuborasan; subscriberlar oladi
callback:   xabar keldi  →  releni almashtirish     // pollingsiz reaksiya

loop() ichida kichik reconnect siklini tut — uzilgan kanal oʻzini tiklaydi, va datchik qiymatlarini faqat haqiqatan oʻzgarganda publish qil — shunda trafik (va quvvat) past qoladi, batareyada chuqur uyqu bilan bir xil intizom.

Home Assistant — qoʻlda sozlashsiz

Sehr — MQTT discovery: maxsus homeassistant/…/config topic’ga bitta kichik JSON publish qilasan (retain bilan), Home Assistant esa entity’ni oʻzi yaratadi — YAML tahrirsiz, datchik yoki vyklyuchatel shunchaki paydo boʻladi. Oʻqishlarni state topic’ga yuborasan, boshqaruv command topic’ga qaytadi. Keyin — dashboardlar, avtomatlashtirishlar va ovoz, bepul. Umuman kodsiz xohlaysanmi? ESPHome MQTT/discovery’ni YAML’dan qiladi.

Qurilma oʻz UI’sini ham bersinmi? Bir necha qator C++ dan toʻliq dashboard.