Реализация мониторинга почвенных датчиков через мобильное приложение

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

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Услуги, которые мы предлагаем
Показано 1 из 1Все 1735 услуг
Реализация мониторинга почвенных датчиков через мобильное приложение
Средний
от 4 часов до 2 дней
Часто задаваемые вопросы

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

Этапы разработки

Последние работы

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    792
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    495

Реализация мониторинга почвенных датчиков через мобильное приложение

Почвенный датчик — обычно 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 — никогда напрямую.

Что измеряет датчик и как интерпретировать

Три основных параметра почвы:

VWC (Volumetric Water Content) — объёмная влажность в процентах. Значение 0-100%, на практике для большинства почв рабочий диапазон 10-40%. Датчик меряет диэлектрическую проницаемость почвы, пересчёт в VWC — по формуле Топпа или по калибровочным данным производителя для конкретного типа почвы.

EC (Electrical Conductivity) — электропроводность, мСм/см. Показывает засоленность и концентрацию питательных веществ. Норма для большинства культур: 0.5-2.0 мСм/см. Выше 4 мСм/см — стресс для растений.

Температура почвы — важна для прорастания семян (большинство культур не прорастают ниже 8-10°C) и активности микроорганизмов.

Приложение должно показывать не только сырые значения, но и их агрономическую интерпретацию. «Влажность 19% при ПВ=45% для супесчаной почвы» — это сухо. Без контекста типа почвы и полной влагоёмкости (ПВ) число бессмысленно.

Получение данных: LoRaWAN через ChirpStack

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.

Дашборд: несколько датчиков на поле

Стандартная конфигурация — 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. Важный момент: алерт по влажности нужно фильтровать по времени суток и дням — если только что прошёл дождь, алерт «нужен полив» избыточен. Бэкенд должен учитывать данные метеостанции или прогноза погоды.

Разработка приложения мониторинга почвенных датчиков с LoRaWAN-интеграцией, профилями влажности и алертами: 3-5 недель. Стоимость рассчитывается индивидуально.