Реалізація моніторингу теплиць через мобільне IoT-приложение
Теплиця — замкнене середовище, у якому кожен параметр впливає на врожайність. Температура, вологість повітря, CO₂, освітленість, вологість ґрунту, pH та EC поживного розчину — все це потрібно відслідковувати в реальному часі. На відміну від відкритого поля, у теплиці хорошою зв'язністю (Wi-Fi, Zigbee), але жорсткі вимоги до надійності: критичне падіння температури ночі або відмова зволожувача можуть знищити урожай за кілька годин.
Датчики та протоколи
Стандартний набір для однієї секції теплиці:
- Температура/вологість повітря: SHT40 (I²C), DHT22 (One-Wire) — на вузлах на базі ESP32
- CO₂: MH-Z19B (UART) або SenseAir S8 (Modbus)
- Освітленість: VEML7700 (I²C), люкси та фотосинтетично активна радіація (PAR)
- Вологість ґрунту: TEROS 12 (SDI-12)
- EC/pH поживного розчину: Atlas Scientific EZO-EC та EZO-pH (I²C UART)
Вузли на ESP32 з прошивкою ESPHome або Tasmota публікують дані в MQTT. Home Assistant або кастомний MQTT-брокер (Mosquitto) агрегує. Мобільний додаток — через REST API або WebSocket на backend.
Реальний час через MQTT: Android
class GreenhouseMonitorService : Service(), MqttCallbackExtended {
private lateinit var mqttClient: MqttAndroidClient
private val sectionData = ConcurrentHashMap<String, GreenhouseSectionState>()
fun startMonitoring(sections: List<String>) {
sections.forEach { sectionId ->
mqttClient.subscribe("greenhouse/$sectionId/+", 1)
}
}
override fun messageArrived(topic: String, message: MqttMessage) {
val parts = topic.split("/")
val sectionId = parts[1]
val parameter = parts[2]
val value = String(message.payload).toDoubleOrNull() ?: return
val current = sectionData.getOrPut(sectionId) { GreenhouseSectionState(sectionId) }
val updated = when (parameter) {
"temperature" -> current.copy(temperatureC = value)
"humidity" -> current.copy(humidityPercent = value)
"co2" -> current.copy(co2Ppm = value.toInt())
"light_lux" -> current.copy(lightLux = value.toInt())
"soil_moisture" -> current.copy(soilMoistureVwc = value)
"ec" -> current.copy(nutrientEc = value)
"ph" -> current.copy(nutrientPh = value)
else -> current
}
sectionData[sectionId] = updated
broadcastUpdate(updated)
}
}
Дашборд секцій
Для теплиці з кількома секціями — горизонтальний PageView або TabBar з дашбордом кожної секції. На кожній картці секції — кольорові індикатори параметрів: зелений (норма), жовтий (увага), червоний (критично).
Пороговані діапазони для томатів як приклад:
| Параметр | Критично мало | Норма | Критично много |
|---|---|---|---|
| Температура ніч | < 12°C | 15-18°C | > 25°C |
| Температура день | < 18°C | 22-28°C | > 35°C |
| Вологість | < 50% | 65-80% | > 90% |
| CO₂ | < 400 ppm | 800-1200 ppm | > 1500 ppm |
| EC розчину | < 1,5 | 2,0-3,5 | > 5,0 |
| pH розчину | < 5,5 | 5,8-6,5 | > 7,0 |
Backend зберігає конфігурацію порогів; мобільний додаток скачує при старту та кешує у SharedPreferences.
Клімат-контроль: управління виконавчими пристроями
Теплиця — не тільки моніторинг. Форточки, обігрівачі, зволожувачі, CO₂-генератори керуються з додатка. MQTT команди на реле:
Future<void> setVentilation(String sectionId, bool open) async {
_mqttClient.publishMessage(
'greenhouse/$sectionId/vent/command',
MqttQos.exactlyOnce,
(MqttClientPayloadBuilder()..addString(open ? 'OPEN' : 'CLOSE')).payload!,
);
}
Для автоматичних сценаріїв (відкрити форточку якщо температура > 28°C) логіка може бути на backend (Node-RED, Home Assistant automation) або в додатку як локальні правила.
Алерти: критичні события
Алерти теплиці — це не просто уведомлення. Температура нижче нуля ночі — значить нагрівник відказав, потрібно негайне дію.
На Android: FCM з PRIORITY_HIGH + Foreground Service з Wake Lock для надійної доставки у нічному режимі. На iOS: Critical Alerts через entitlement com.apple.developer.usernotifications.critical-alerts — відтворюються на повній гучності незалежно від режиму Не турбувати.
Додатково — голосовий виклик через Twilio Voice API для відповідальних осіб якщо алерт не підтверджений за 10 хвилин.
Журнал событій та звіти
Агроном дивиться не тільки поточні дані, але й історію: коли включився нагрівник, коли відкривалися форточки, яка температура була о 2 ночи. Журнал событій з фільтрацією за типом та періодом — важлива функція.
Експорт звітів у Excel/CSV — вимога більшості промислових клієнтів для документування умов вирощування. Формується на backend, мобільний додаток скачує та відкриває через Share Sheet (iOS) або FileProvider (Android).
Розробка додатка моніторингу теплиці з реальним часом, управлінням клімату та критичними алертами: 5-8 тижнів. Багатосекційна теплиця з повним журналюванням та експортом: 2-3 місяці. Вартість розраховується індивідуально.







