Реализация управления системой ирригации через мобильное приложение

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
    756
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    624
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1054
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    947
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    874
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    445

Реализация управления системой ирригации через мобильное приложение

Контроллер ирригации в поле — устройство с реле, которое открывает и закрывает электромагнитные клапаны на зонах. Rain Bird, Hunter, Orbit — самые известные имена. Большинство из них обмениваются с «умными» хабами по проприетарному протоколу. Для кастомной интеграции в мобильное приложение используют или API производителя (если есть), или замену контроллера на IoT-совместимый (ESP32 с MQTT, Raspberry Pi с GPIO), или промежуточный шлюз.

Rachio API: облачная интеграция

Rachio — один из немногих производителей с публичным REST API. OAuth 2.0 авторизация, scope full_control:

// iOS, async/await
class RachioClient {
    let baseURL = "https://api.rach.io/1/public"
    var accessToken: String

    func getPersonInfo() async throws -> PersonInfo {
        return try await get("/person/info")
    }

    func startZone(zoneId: String, duration: Int) async throws {
        // duration в секундах
        try await put("/zone/start", body: [
            "id": zoneId,
            "duration": duration
        ])
    }

    func stopDevice(deviceId: String) async throws {
        try await put("/device/stop_water", body: ["id": deviceId])
    }

    func createScheduleRule(deviceId: String, zones: [ZoneSchedule]) async throws -> ScheduleRule {
        return try await post("/schedulerule", body: [
            "device": ["id": deviceId],
            "name": zones.first?.name ?? "Schedule",
            "zones": zones.map { ["id": $0.id, "duration": $0.durationSeconds] },
            "startTime": 21600, // секунды от полуночи = 6:00
            "type": "FIXED_SCHEDULE"
        ])
    }
}

Rachio Webhook позволяет получать события в реальном времени: начало и конец полива, ошибки клапанов, детекция дождя. Регистрация webhook через API, события приходят POST-запросами на сервер разработчика, который форвардит их в мобильное приложение через WebSocket или FCM.

MQTT-контроллер: собственное железо

Для кастомных инсталляций — контроллер на ESP32 с MQTT. Топики:

irrigation/zone/1/command   → {"action": "open", "duration": 300}
irrigation/zone/1/state     → {"isOpen": true, "openedAt": "2024-07-15T06:00:00Z"}
irrigation/system/status    → {"activeZones": [1,3], "waterFlow": 12.5, "pressure": 2.8}

Мобильное приложение подписывается на irrigation/+/state и irrigation/system/status. Управление — публикация в irrigation/zone/+/command.

Для Flutter:

class IrrigationRepository {
  late MqttServerClient _client;
  final StreamController<ZoneState> _zoneStateController = StreamController.broadcast();

  Stream<ZoneState> get zoneStates => _zoneStateController.stream;

  Future<void> connect(MqttConfig config) async {
    _client = MqttServerClient(config.host, config.clientId)
      ..port = config.port
      ..secure = true
      ..securityContext = config.sslContext
      ..keepAlivePeriod = 30
      ..onDisconnected = _onDisconnected;

    await _client.connect(config.username, config.password);
    _client.subscribe('irrigation/+/state', MqttQos.atLeastOnce);

    _client.updates!.listen((messages) {
      for (final message in messages) {
        final payload = MqttPublishPayload.bytesToStringAsString(
          (message.payload as MqttPublishMessage).payload.message,
        );
        final zoneId = _extractZoneId(message.topic);
        _zoneStateController.add(ZoneState.fromJson(zoneId, jsonDecode(payload)));
      }
    });
  }

  Future<void> startZone(int zoneId, Duration duration) async {
    final builder = MqttClientPayloadBuilder();
    builder.addString(jsonEncode({
      'action': 'open',
      'duration': duration.inSeconds,
    }));
    _client.publishMessage(
      'irrigation/zone/$zoneId/command',
      MqttQos.atLeastOnce,
      builder.payload!,
    );
  }
}

Расписание и автоматизация

Расписание ирригации — отдельный экран с возможностью задать зоны, продолжительность и повторение. Сложность: расписание должно учитывать прогноз погоды (пропустить полив если ожидается дождь) и данные почвенных датчиков.

Интеграция с прогнозом погоды через Open-Meteo API (бесплатно, без ключа):

Future<bool> shouldSkipIrrigation(double lat, double lon) async {
  final url = Uri.parse(
    'https://api.open-meteo.com/v1/forecast'
    '?latitude=$lat&longitude=$lon'
    '&daily=precipitation_sum'
    '&forecast_days=2'
    '&timezone=auto'
  );
  final response = await http.get(url);
  final data = jsonDecode(response.body);
  final todayRain = data['daily']['precipitation_sum'][0] as double;
  final tomorrowRain = data['daily']['precipitation_sum'][1] as double;
  // Пропустить если сегодня или завтра более 5мм осадков
  return todayRain > 5.0 || tomorrowRain > 5.0;
}

UX управления зонами

Экран управления зонами — карта или схематичный план с цветовой индикацией: зелёный — активная зона, серый — не активна, красный — ошибка клапана. Длинный тап на зону — запуск ручного полива с выбором времени (слайдер 1-60 минут).

Кнопка «Стоп всё» должна быть всегда доступна на одно действие — не прятать в меню.

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