Реализация мониторинга теплиц через мобильное 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 на бэкенде.
Реальное время через 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).
Разработка приложения мониторинга теплицы с реальным временем, управлением климатом и критическими алертами: 5-8 недель. Многосекционная теплица с полным журналированием и экспортом: 2-3 месяца. Стоимость рассчитывается индивидуально.







