Реалізація моніторингу теплиць через мобільний IoT-додаток
Тепличне господарство на 10 гектарів втратило 80% урожаю томатів через те, що мобільний додаток не показав відмову нагрівача вночі. Диспетчер побачив сповіщення лише вранці — на той момент температура впала до 5°C. Як уникнути таких сценаріїв? Наш мобільний IoT-додаток вирішує це завдання через надійний стек MQTT, критичних алертів та автоматичного керування. За 7 років роботи ми запустили понад 20 проєктів в агросекторі, і кожен вимагав індивідуальної архітектури.
Теплиця — замкнене середовище, в якому кожен параметр впливає на врожайність. Коливання температури навіть на 2°C можуть знизити врожайність на 10-15%. Вологість, CO₂, освітленість, вологість ґрунту, pH та EC поживного розчину — всі ці величини необхідно відстежувати в реальному часі. На відміну від відкритого поля, в теплиці хороша зв'язність (Wi-Fi, Zigbee), але жорсткі вимоги до надійності: критичне падіння температури вночі або відмова зволожувача можуть знищити врожай за кілька годин.
Ми використовуємо промислові датчики з інтерфейсами I²C, UART та SDI-12, підключені до ESP32. Дані публікуються в MQTT-брокер з QoS 1, що гарантує доставку без дублювання. Мобільний додаток підписується на відповідні топіки та відображає актуальну інформацію на дашборді. Для керування кліматом використовуються команди на реле через MQTT. Наша компетенція — повний цикл розробки додатку для теплиці.
Які датчики та протоколи використовуємо?
Стандартний набір для однієї секції теплиці:
- Температура/вологість повітря: 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 на бекенді.
Чому MQTT кращий за HTTP для IoT?
MQTT забезпечує асиметричний push з мінімальною затримкою. На відміну від HTTP polling, навантаження на мережу в 10–15 разів нижче. Для теплиць з 50+ секціями це критично: кожен пристрій надсилає дані раз на 30 секунд. MQTT QoS 1 гарантує доставку без дублювання. Ми використовуємо його для всіх сценаріїв реального часу.
Докладніше про протокол можна прочитати в Wikipedia.
Порівняння MQTT та HTTP для IoT:
| Критерій | MQTT | HTTP |
|---|---|---|
| Модель | Publish-Subscribe | Request-Response |
| Затримка | <10 мс (push) | >100 мс (polling) |
| Навантаження на мережу | Низька (persistent connection) | Висока (кожен запит) |
| Гарантія доставки | 3 рівні QoS | N/A (потрібні ретраї) |
| Масштабування | Топіки, автоматичне балансування | Обмежено сервером |
Реальний час через 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 |
Конфігурацію порогів зберігає бекенд, мобільний додаток завантажує при старті та кешує в 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) логіка може бути і на бекенді (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 — вимога більшості промислових клієнтів для документування умов вирощування. Формується на бекенді, мобільний додаток завантажує та відкриває через Share Sheet (iOS) або FileProvider (Android).
Процес розробки
Ми працюємо за наступним планом:
- Аналітика: вивчаємо ваші теплиці, датчики, сценарії. Готуємо архітектурну документацію.
- Проєктування: прототип UI/UX, специфікація API та MQTT топіків.
- Реалізація: пишемо код додатку (iOS/Android), бекенду та прошивок ESP32.
- Тестування: інтеграційне тестування з вашими датчиками, навантажувальне тестування.
- Деплой: завантаження в App Store та Google Play, налаштування MQTT-брокера, пусконалагодження.
- Підтримка: 3 місяці технічної підтримки після запуску, навчання вашої команди.
Приклад конфігурації MQTT топіків: кожна секція теплиці використовує ієрархію топіків — greenhouse/{sectionId}/temperature, greenhouse/{sectionId}/humidity, greenhouse/{sectionId}/co2, greenhouse/{sectionId}/vent/command, greenhouse/{sectionId}/heater/status. Це спрощує фільтрацію на стороні додатку та бекенду.
Що входить в розробку
Ми надаємо повний пакет:
- Архітектурна документація (діаграми, специфікація API)
- Вихідний код додатку (iOS/Android) та бекенду
- Налаштування MQTT-брокера та інтеграція з датчиками
- Завантаження в App Store та Google Play (акаунти ваші)
- Технічна підтримка 3 місяці після запуску
- Навчання вашої команди роботі з системою
Строки та гарантія
Базова версія з моніторингом та сповіщеннями — від 5 тижнів. Багатосекційна теплиця з повним журналюванням та експортом — до 3 місяців. Вартість розраховується індивідуально. На весь код надаємо 12 місяців гарантії. Замовте розробку — зв'яжіться з нами для оцінки вашого проєкту.
Оцінимо проєкт безкоштовно — напишіть нам, і ми підготуємо комерційну пропозицію протягом 2 днів.







