Моніторинг ґрунтових датчиків: мобільний додаток з LoRaWAN

TRUETECH займається розробкою, підтримкою та обслуговуванням мобільних додатків iOS, Android, PWA. Маємо великий досвід та експертизу для публікації мобільних додатків до популярних маркетів Google Play, App Store, Amazon, AppGallery та інші.

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Моніторинг ґрунтових датчиків: мобільний додаток з LoRaWAN
Середній
від 4 годин до 2 днів
Часті запитання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    860
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    746
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1163
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    1035
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    970
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    563

Реалізація моніторингу ґрунтових датчиків через мобільний додаток

Ґрунтові датчики видають сирі дані в нечитабельних форматах — бінарні пачки за протоколами 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. Важливий момент: алерт за вологістю потрібно фільтрувати за часом доби та днями — якщо щойно пройшов дощ, алерт «потрібен полив» надлишковий. Бекенд має враховувати дані метеостанції або прогнозу погоди.

Налаштування системи моніторингу: покрокова інструкція

  1. Вибір та встановлення датчиків (Modbus RTU для теплиць, LoRaWAN для поля).
  2. Налаштування шлюзу та LoRaWAN Network Server (ChirpStack).
  3. Декодування даташиту датчика в Cayenne LPP або кастомний парсер.
  4. Розробка мобільного дашборду (Flutter) з профілем вологості та графіками трендів.
  5. Налаштування алертів з урахуванням погоди та типів ґрунту.
  6. Тестування в полі та деплой у магазини додатків.

Що входить в роботу

  • Проєктування архітектури збору даних (вибір протоколів, шлюзів, Network Server)
  • Налаштування LoRaWAN Network Server (ChirpStack) та REST API
  • Розробка мобільного додатку для iOS/Android (SwiftUI / Jetpack Compose)
  • Інтеграція з метеостанціями та врахування типу ґрунту
  • Тестування в польових умовах та deploy в App Store / Google Play
  • Документація та навчання агрономів

Типові помилки при інтеграції:

  • Плутанина з кодуванням Cayenne LPP (різні виробники використовують різні зміщення)
  • Відсутність фільтрації алертів за погодою (хибні спрацьовування після дощу)
  • Ігнорування типу ґрунту при інтерпретації VWC (для супіску та глини норми різні)

Розробка додатку моніторингу ґрунтових датчиків з LoRaWAN-інтеграцією, профілями вологості та алертами займає 3-5 тижнів. Вартість розраховується індивідуально. Зв'яжіться з нами для консультації — ми підготуємо оцінку за один день. Отримайте безкоштовну консультацію та дізнайтеся, як система окупиться у вашому господарстві.

Інтеграція з залізом: BLE, NFC, IoT та HomeKit у мобільних додатках

Коли задача — зв’язати смартфон з фізичним пристроєм, половина проблем знаходиться не в коді, а в прошивці заліза, характеристиках BLE-сервісів та затримках протоколу. Ми, як мобільні розробники, працюємо на стику з firmware-командою, і без розуміння стеку знизу вгору результат непередбачуваний. Ось чому ми завжди починаємо з HCI-логу та специфікації GATT — Apple Developer: Core Bluetooth Framework — це єдиний спосіб уникнути реверс-інжинірингу в польових умовах.

Чому BLE-інтеграція — найчастіша точка відмови?

Bluetooth Low Energy — основний протокол для носимих, медичних пристроїв, розумних замків та промислових датчиків. Core Bluetooth на iOS та BluetoothGatt на Android реалізують одну специфікацію, але поводяться по-різному в крайніх випадках. Статистика наших проектів: більше 70% звернень у підтримку по BLE пов’язані саме з низькорівневими помилками GATT, а не з логікою додатку.

Сценарій iOS (Core Bluetooth) Android (BluetoothGatt)
Управління підключенням CBCentralManager потребує сильного посилання протягом всієї сесії; втрата об’єкта → розрив з’єднання disconnect() та close() викликаються окремо; close() без disconnect() → пристрій позначається зайнятим
Типова помилка Немає попередження при втраті посилання — з’єднання мовчки розривається Помилка 133 (GATT_ERROR) — виникає при переповненні черги GATT або некоректному закритті попередньої сесії
Сканування NSBluetoothAlwaysUsageDescription обов’язковий у Info.plist (з iOS 13); без нього сканування не стартує BLUETOOTH_SCAN потребує neverForLocation (Android 12+), інакше користувач бачить запит геолокації

Що робити з помилкою 133 в Android?

Помилка 133 — найчастіша в Android BLE-розробці. Це не «щось пішло не так», а конкретний індикатор переповнення черги GATT або некоректного закриття попереднього з’єднання. Ми лікуємо її двома прийомами: використовуємо чергу операцій над GATT (write, read, notification subscribe строго послідовно через операційну чергу) та завжди викликаємо disconnect() перед close(). Наша черга GATT-операцій у 3 рази знижує кількість помилок ATT_INSUFFICIENT_RESOURCES порівняно з конкурентними запитами. MTU за замовчуванням — 23 байти. Запит на збільшення (MTU exchange) обов’язковий для передачі даних об’ємом понад 20 байт. На iOS MTU запитується автоматично при підключенні, на Android потрібно явно викликати requestMtu(). Без цього ви не зможете передати, наприклад, зображення або лог через характеристику.

NFC: CoreNFC та Android NFC API

iOS підтримує NFC-читання через CoreNFC з версії iOS 11, запис — з iOS 13. Важливе обмеження: сесія сканування активна лише поки живий об’єкт NFCNDEFReaderSession і показує системний UI. Фонове сканування доступне лише для додатків з entitlement com.apple.developer.nfc.readersession.formats і лише для ISO 14443 (банківські картки, паспорти) — і цей entitlement видається не всім. На Android все простіше: NfcAdapter.enableForegroundDispatch() ловить теги у foreground без системного UI. Фоновий запуск додатку по NFC-тегу реалізується через intent-filter з ACTION_NDEF_DISCOVERED. Порівняння платформ по NFC:

Функція iOS (CoreNFC) Android (NfcAdapter)
Фонове читання Тільки з entitlement та ISO 14443 Через intent-filter ACTION_NDEF_DISCOVERED
Запис З iOS 13 (NDEF) З коробки (API 10+)
Сесія Триває до 5 хвилин з системним UI Необмежено у foreground, background по тегу
Запуск додатку Тільки foreground Автоматично при виявленні тегу

HomeKit та Matter

HomeKit — екосистема Apple для розумного дому. Для інтеграції пристрій повинен мати MFi-сертифікацію (або працювати через Software Authentication для Matter). Мобільний додаток використовує HomeKit framework: HMHomeManager → HMHome → HMRoom → HMAccessory → HMService → HMCharacteristic. Matter (раніше CHIP) — крос-платформний стандарт, який підтримують Apple, Google, Amazon та Samsung. На iOS Matter-пристрої додаються через MTRDeviceController, на Android — через Google Home SDK або Matter SDK безпосередньо. Перевага Matter: один пристрій працює з HomeKit, Google Home та Alexa без перепрошивки, а конфігурація налаштовується в 4 рази швидше порівняно з власним HAP-протоколом.

Параметр HomeKit Matter
Сертифікація MFi — апаратний чіп Software Authentication (ключі)
Підтримка платформ Тільки Apple Apple, Google, Amazon, Samsung
Додавання пристрою HMHomeManager MTRDeviceController / Google Home SDK
Протокол HAP (IP, BLE) IP-based (Wi-Fi, Thread)

Для Flutter та React Native використовуємо flutter_blue_plus та react-native-ble-plx відповідно — обидва активно підтримуються і покривають 90% сценаріїв, але для роботи з GATT-нотифікаціями у background на Android все одно потрібен foreground service. Переконайтеся, що deep linking (Universal Links на iOS, App Links на Android) налаштовані для коректного пробудження додатку при скануванні NFC-тегу або отриманні push-повідомлення від IoT-пристрою. Вимоги ATT (App Tracking Transparency) для інтеграції з залізом зазвичай не застосовуються, але якщо додаток збирає анонімну аналітику — додайте запит. Отримайте консультацію нашого інженера — він розбере вашу специфікацію за 2 дні.

Як ми інтегруємо BLE та NFC?

  1. Аналітика — отримуємо від firmware-команди повну специфікацію BLE GATT (список сервісів, характеристик, формати даних) або HCI-лог. Без цього розробка перетворюється на реверс-інжиніринг через nRF Connect або Wireshark over HCI.
  2. Проектування — визначаємо архітектуру підключень: чергу GATT-операцій, фонові сервіси для Android, перепідключення при втраті зв’язку. Враховуємо MTU-узгодження та обробку помилок ATT_INSUFFICIENT_RESOURCES.
  3. Реалізація — кодимо на Swift/Kotlin з урахуванням особливостей платформ (Universal Links, App Links, push-повідомлення через APNs/FCM для тригерів). Для захисту Android-коду використовуємо ProGuard / R8 (shrink).
  4. Тестування — на реальних пристроях з першого дня. Емулятор BLE в симуляторах не відтворює edge cases перепідключення, втрати сигналу, зміни MTU. Використовуємо автоматизацію на базі XCTest та Espresso.
  5. Деплой — завантаження в App Store Connect / Google Play Console з правильним code signing та provisioning profile. Для iOS — TestFlight, для Android — Firebase App Distribution.

Що входить в роботу (deliverables)

  • Вихідний код мобільного додатку з інтеграцією BLE, NFC або IoT (Swift / Kotlin / Flutter / React Native)
  • Документація по протоколу GATT (карта сервісів та характеристик)
  • Навантажувальне тестування на 10+ реальних пристроях (помилка 133, перепідключення, MTU-узгодження)
  • Аналіз та усунення edge cases (помилка ATT_INSUFFICIENT_RESOURCES, втрата з’єднання на фоні, конфлікт з background fetch)
  • Інструкція зі збірки та деплою (code signing, TestFlight, Firebase App Distribution)
  • Місяць підтримки після релізу

Строки та орієнтовна вартість

Проста інтеграція з одним BLE-периферійним пристроєм (показання + команди керування) — від 2 до 4 тижнів. Типова вартість такої задачі розраховується індивідуально, включаючи налагодження GATT-профілю та обробку edge cases. Повноцінний IoT-додаток з декількома типами пристроїв, firmware OTA-оновленнями та HomeKit-підтримкою — від 2 місяців. Вартість розраховується індивідуально під ваш проект.

Ми займаємося мобільною розробкою кілька років — досвід 45+ проектів з BLE/NFC/HomeKit. Наші інженери сертифіковані Apple та Google, а кожен етап роботи фіксується в issue tracker з прив’язкою до комітів. Ми гарантуємо прозорість процесу та дотримання строків. Використовуємо підхід «інженер клієнту»: без маркетингових пауз, з прямим доступом до розробника.

Закажіть оцінку — отримайте консультацію інженера з розбором вашої специфікації. Замовте інтеграцію під ключ: ми проаналізуємо HCI-лог, перевіримо GATT-характеристики та запропонуємо архітектуру за 2 дні.