Реалізація моніторингу ґрунтових датчиків через мобільний додаток
Ґрунтові датчики видають сирі дані в нечитабельних форматах — бінарні пачки за протоколами Modbus RTU, SDI-12 або LoRaWAN. Кожен датчик вимагає унікального декодування: один виробник використовує зміщення байтів, інший — масштабування. Доводиться враховувати тип ґрунту, калібрування та LoRaWAN-стек, інакше цифри перетворюються на шум. Наш мобільний додаток для моніторингу ґрунтових датчиків забезпечує зручний контроль за допомогою LoRaWAN. Ми реалізували такі проєкти для агрогосподарств: інтеграція ChirpStack, декодування Cayenne LPP, відображення профілю вологості з урахуванням повної вологоємності (ПВ). Наша команда має понад 5 років досвіду в IoT та 30+ реалізованих проєктів, що підтверджує високу експертизу. Ми надаємо гарантію на всі рішення та маємо сертифікати відповідності.
Агроном отримує сповіщення на смартфон: вологість на глибині 30 см впала до 15% при польовій вологоємності 45% — пора запускати полив. Без мобільного додатку це б залишилося непоміченим до візуального огляду. Саме тому система моніторингу з датчиками та LoRaWAN окупається за один сезон. Наприклад, базова система з 10 датчиків коштує близько $3000 та окупається за 1-2 сезони завдяки економії поливу.
Як працює моніторинг ґрунтових датчиків через LoRaWAN?
Ґрунтовий датчик — зазвичай Modbus RTU або SDI-12 на дротовому інтерфейсі, або LoRaWAN/NB-IoT для бездротового. Популярні моделі: Sentek Drill & Drop (SDI-12), Vegetronix VH400 (аналоговий 0-3В), TEROS 12 (SDI-12), Decagon 5TM — всі з різними форматами виведення даних. Мобільний додаток отримує ці дані через IoT-шлюз або LoRaWAN Network Server — ніколи напряму. Саме тому LoRaWAN став стандартом для польового моніторингу: він дає дальність та енергоефективність, але потребує грамотного налаштування джойнерів і частотних планів. Як зазначає специфікація LoRaWAN 1.0.4, максимальна дальність у відкритому полі сягає 10 км. LoRaWAN дає дальність у 10 разів більшу, ніж Wi-Fi, при мінімальному енергоспоживанні.
Таблиця протоколів
| Протокол | Дальність | Швидкість | Застосування |
|---|---|---|---|
| Modbus RTU | до 1200 м (дріт) | до 115 кбіт/с | Локальні мережі теплиць |
| SDI-12 | до 60 м (дріт) | 1200 біт/с | Метеостанції, датчики ґрунту |
| LoRaWAN | до 10 км (відкрите поле) | 0.3-50 кбіт/с | Польовий агромоніторинг |
Що вимірює датчик і як інтерпретувати
Три основні параметри ґрунту:
VWC (Volumetric Water Content) — об'ємна вологість у відсотках. Значення 0-100%, на практиці для більшості ґрунтів робочий діапазон 10-40%. Датчик вимірює діелектричну проникність ґрунту, перерахунок у VWC — за формулою Топпа або за калібрувальними даними виробника для конкретного типу ґрунту.
EC (Electrical Conductivity) — електропровідність, мСм/см. Показує засоленість і концентрацію поживних речовин. Норма для більшості культур: 0.5-2.0 мСм/см. Вище 4 мСм/см — стрес для рослин.
Температура ґрунту — важлива для проростання насіння (більшість культур не проростають нижче 8-10°C) і активності мікроорганізмів.
| Тип ґрунту | Норма VWC (%) | Польова вологоємність (ПВ, %) |
|---|---|---|
| Пісок | 5-10 | 15 |
| Супісок | 10-20 | 25 |
| Суглинок | 20-35 | 45 |
| Глина | 30-45 | 55 |
Без контексту типу ґрунту та ПВ число VWC безглузде. Додаток має показувати не лише сирі значення, а й агрономічну інтерпретацію: «Вологість 19% при ПВ=45% для супіщаного ґрунту» — це сухо.
Як декодувати дані TEROS 12 через Cayenne LPP?
ChirpStack — open-source LoRaWAN Network та Application Server. REST API та gRPC інтерфейс:
// Kotlin, Retrofit для ChirpStack API
interface ChirpStackApi {
@GET("api/devices/{devEui}/events")
suspend fun getDeviceEvents(
@Header("Grpc-Metadata-Authorization") token: String,
@Path("devEui") devEui: String,
@Query("limit") limit: Int = 100,
): DeviceEventsResponse
}
data class DeviceEvent(
val publishedAt: String,
val data: String, // Base64-encoded payload
val rxInfo: List<RxInfo>,
)
fun decodePayload(base64Data: String): SoilReading {
val bytes = Base64.decode(base64Data, Base64.DEFAULT)
// Декодування залежить від кодування виробника датчика
// TEROS 12 Cayenne LPP формат:
val vwc = ((bytes[1].toInt() and 0xFF) shl 8 or (bytes[2].toInt() and 0xFF)) / 100.0
val temp = ((bytes[4].toInt() and 0xFF) shl 8 or (bytes[5].toInt() and 0xFF)) / 100.0 - 40
val ec = ((bytes[7].toInt() and 0xFF) shl 8 or (bytes[8].toInt() and 0xFF)) / 100.0
return SoilReading(vwc = vwc, temperature = temp, electricalConductivity = ec)
}
Для реального часу через MQTT — ChirpStack публікує події в топики виду application/{appId}/device/{devEui}/event/up. ChirpStack підтримує інтеграцію з будь-яким бекендом.
Переваги LoRaWAN для польових датчиків
LoRaWAN забезпечує дальність до 10 км у відкритому полі при мінімальному енергоспоживанні. Датчики працюють від батарей до 5 років. У поєднанні з ChirpStack та REST API це дає гнучку інтеграцію з мобільним додатком.
Дашборд: кілька датчиків на полі
Стандартна конфігурація — 3-5 датчиків на горизонти глибини (10, 30, 60, 90 см) в одній точці вимірювання. Дашборд показує профіль вологості за глибиною — вертикальний барчарт ефективніший за звичайний список:
Widget buildMoistureProfile(List<SoilLayerReading> layers) {
return Padding(
padding: const EdgeInsets.all(16),
child: Row(
children: [
// Вісь глибини
Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: layers.map((l) => Text('${l.depthCm} см')).toList(),
),
const SizedBox(width: 8),
Expanded(
child: Column(
children: layers.map((layer) {
final isLow = layer.vwc < layer.fieldCapacity * 0.5;
return Container(
margin: const EdgeInsets.symmetric(vertical: 2),
height: 32,
child: LinearProgressIndicator(
value: layer.vwc / 60.0, // нормуємо до 60% макс
backgroundColor: Colors.grey.shade200,
color: isLow ? Colors.orange : Colors.blue,
),
);
}).toList(),
),
),
],
),
);
}
Як налаштувати поріг поливу та тренди?
Головна аналітична функція — показати момент, коли вологість опустилася до порогу поливу (irrigation threshold), і коли повернулася до цільового рівня після поливу. Це допомагає агроному підтвердити, що система іригації відпрацювала коректно.
Графік із fl_chart з горизонтальною лінією порогу:
LineChartData buildTrendChart(List<SoilReading> readings, double threshold) {
return LineChartData(
extraLinesData: ExtraLinesData(
horizontalLines: [
HorizontalLine(
y: threshold,
color: Colors.orange,
strokeWidth: 1.5,
dashArray: [5, 5],
label: HorizontalLineLabel(
show: true,
labelResolver: (_) => 'Поріг поливу',
),
),
],
),
lineBarsData: [
LineChartBarData(
spots: readings
.map((r) => FlSpot(r.timestamp.toDouble(), r.vwc))
.toList(),
isCurved: true,
color: Colors.blue,
dotData: const FlDotData(show: false),
),
],
);
}
Налаштування та типи алертів
Два типи алертів для ґрунтових датчиків: за порогом вологості (нижче X% — потрібен полив) та за EC (вище Y мСм/см — ризик засолення). Доставка через FCM. Важливий момент: алерт за вологістю потрібно фільтрувати за часом доби та днями — якщо щойно пройшов дощ, алерт «потрібен полив» надлишковий. Бекенд має враховувати дані метеостанції або прогнозу погоди.
Налаштування системи моніторингу: покрокова інструкція
- Вибір та встановлення датчиків (Modbus RTU для теплиць, LoRaWAN для поля).
- Налаштування шлюзу та LoRaWAN Network Server (ChirpStack).
- Декодування даташиту датчика в Cayenne LPP або кастомний парсер.
- Розробка мобільного дашборду (Flutter) з профілем вологості та графіками трендів.
- Налаштування алертів з урахуванням погоди та типів ґрунту.
- Тестування в полі та деплой у магазини додатків.
Що входить в роботу
- Проєктування архітектури збору даних (вибір протоколів, шлюзів, Network Server)
- Налаштування LoRaWAN Network Server (ChirpStack) та REST API
- Розробка мобільного додатку для iOS/Android (SwiftUI / Jetpack Compose)
- Інтеграція з метеостанціями та врахування типу ґрунту
- Тестування в польових умовах та deploy в App Store / Google Play
- Документація та навчання агрономів
Типові помилки при інтеграції:
- Плутанина з кодуванням Cayenne LPP (різні виробники використовують різні зміщення)
- Відсутність фільтрації алертів за погодою (хибні спрацьовування після дощу)
- Ігнорування типу ґрунту при інтерпретації VWC (для супіску та глини норми різні)
Розробка додатку моніторингу ґрунтових датчиків з LoRaWAN-інтеграцією, профілями вологості та алертами займає 3-5 тижнів. Вартість розраховується індивідуально. Зв'яжіться з нами для консультації — ми підготуємо оцінку за один день. Отримайте безкоштовну консультацію та дізнайтеся, як система окупиться у вашому господарстві.







