RisalDash RisalDash

Loyiha · Iqlim · Avtomatlashtirish

Isitadigan ham sovutadigan termostat

Aksariyat DIY-termostatlar «isitgich yon/oʻch»da toʻxtaydi. Chindan qulay xonaga ikkinchi yarim ham kerak: harorat oshib ketganda oʻzi yonadigan sovutish ventilyatori va isitgich relesi yopishib qolgan kun uchun qizib ketish alerti. Bitta DHT22, ikkita rele va ESP32 uchchalasini ham qiladi — ustavka, tarix grafigi va jurnal chip oʻzi beradigan dashboardda.

LoyihaIqlimDHT22ReleESP32
ESP32 aqlli termostat loyihasi: DHT22, gisterezis, avto-ventilyator va qizib ketish alertlari

Nega oddiy chegara emas, gisterezis

Isitgichni aynan ustavkada almashtiring — u chegara atrofida har necha soniyada yon/oʻch deb tirilaydi; relelar buni yomon koʻradi. Gisterezis polosasi (−0.3 °C dan past isit, +0.3 °C dan yuqori toʻxtat) har tsiklni uzun va sokin qiladi. Avto-sovutish — narigi tomondagi kengroq polosa: ustavkadan +1.5 °C oshganda ventilyator, tiklanishda oʻchadi. Qizib ketish alerti undan ham nariroqda va Hold rejimida ham ishlaydi — yopishib qolgan relega avtomatikangiz qiziq emas:

if (!hold) {
  // Heating hysteresis: heat below setpoint-0.3, stop above setpoint+0.3.
  if (roomT < setpoint - 0.3f) heating = true;
  else if (roomT > setpoint + 0.3f) heating = false;
  // Auto-cooling: fan on when the room runs 1.5 C past the setpoint, off on recovery.
  if (roomT > setpoint + 1.5f) { if (!fan && evlog) evlog->print("Overshoot - fan ON"); fan = true; }
  else if (roomT < setpoint + 0.5f) fan = false;
}
// Overheat alert regardless of hold: something is wrong (sun on the sensor, heater stuck).
bool hot = roomT > setpoint + 4.0f;
if (hot && !overheat && evlog) evlog->print("OVERHEAT - check the heater");
overheat = hot;

Dashboard

Jonli ustavka (number vidjeti), ikkala rele holati, alert-LED va trend grafigi — butun boshqaruv paneli oʻnlab eʼlonda:

dash.layout("Climate", RICON_THERMOMETER);
dash.gauge("Room temp", &roomT, 0, 40, "C");
dash.gauge("Humidity", &roomH, 0, 100, "%").variant("semi");
dash.chart("Trend", &roomT, "C");            // the history everyone wants

dash.layout("Control", RICON_POWER);
dash.number("Setpoint", &setpoint, 5, 35, 1);
dash.led("Heating", &heating);               // relay 1
dash.led("Cooling fan", &fan);               // relay 2 — auto-cooling
dash.led("Overheat!", &overheat);            // buzzer + red LED
dash.toggle("Hold", &hold);
dash.beginAP("RisalDash-Thermostat", "12345678");

Kutubxonadagi namuna (examples/04_Templates/Thermostat) RisalFakeEnv’ning kun/tun fake xonasida ishlaydi — gisterezisning ikkala tomoni koʻz oldingizda ishlaydi: ertalab isitadi, kunduzi oshirib yuboradi va ventilyator aylanadi. Polosalar maʼqul boʻlgach, bitta qatorni haqiqiy dht.readTemperature() ga almashtirib, ikkita rele ulaysiz.

Mahsulotga aylantirish

Ustavkani NVS’da saqlang — reboot’dan omon qoladi; MQTT + Home Assistant discovery qoʻshing — termostat climate-obyekt sifatida chiqadi; yoki AI-agent xonani oʻqib, MCP orqali ustavkani sursin. Harakat va gaz bilan toʻliq xona versiyasi — xona monitori.

Gisterezis polosalarini bugun fake xonada sozlang — relelarni keyin ulaysiz.