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