Nedir?
Bahçem basit bir merakla başladı: fidelerim bu gece yeterince sıcak mı? Bunu rafın başına gitmeden, tahminle değil gerçek bir ölçümle bilmek istedim.
Bitkilerin yanına DHT22 sensörlü ve küçük OLED ekranlı bir ESP32 koydum. Kart 30 saniyede bir ölçüm alıyor, değerleri ekranda gösteriyor ve beş dakikalık ortalamayı yazdığım FastAPI sunucusuna yolluyor. alicanzade.com/mygarden adresindeki panelde anlık sıcaklık ve nem, son gün, hafta ya da ayın grafikleri, raflardaki bitkiler (biri filizlenme, biri çiçeklenme ve meyve için) ve her bitkinin kendi notları var.
Isıtıcı, temkinle
İşin ikinci yarısı sıcaklık. Küçük bir ısıtıcıyı bir Tuya akıllı priz çalıştırıyor; ne zaman çalışabileceğine ise ayrı bir servis karar veriyor. Gündüz (06.00–19.00) 23 °C’nin altında ısıtma istiyor, 25 °C’de duruyor. Gece aralık 19–22 °C.
Yazılımla ısıtıcı açıp kapatmayı hafife almak istemedim. O yüzden kodun büyük kısmı aslında “hayır” demek üzerine:
- Yalnızca sensörün kendi anahtarıyla gelen ölçümler sayılıyor; anahtar sabit sürede karşılaştırılıyor.
- Sekiz dakikadan eski ölçüm geçersiz kabul ediliyor.
- Her yeni ölçüm en fazla bir 35 saniyelik ısıtma başlatabiliyor. Üst sınıra ulaşmak ya da hatalı bir ölçüm bunu erkenden bitiriyor.
- Canlı moda izin verilmeden önce servis, Tuya API’si üzerinden prizin 35 saniyede kendini kapattığını ve elektrik kesilip gelince kapalı kaldığını doğruluyor. Sunucum susarsa priz yine kendi kendine kapanıyor.
Isıtıcı mantığının birim testleri var; röledeki her değişiklik de panelde sayfa sayfa gezilebilen ısıtıcı geçmişine yazılıyor.
Ne öğrendim?
Asıl ders kendi notlarımda duruyor: akıllı priz ve bir betik, termostat değildir. İnternet ya da bulut kesilirse “kapat” komutu prize hiç ulaşmayabilir. Gözlem modu bu yüzden var, prizin kendi zamanlayıcısı bu yüzden açık. Gözetimsiz ısıtmayı da kendi sıcaklık kesicisi olan uygun bir ısıtıcı gerektiren bir iş olarak görüyorum.
Şu an nerede?
Raflarımda her gün çalışıyor. ESP32’nin anlık sıcaklığı ortalamalardan ayrı gösteriliyor, röle durumu beş saniyede bir yenileniyor; yayına alma ise GitHub Actions üzerinden nginx ve systemd servislerine yapılıyor.