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

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

Реалізація управління системою зрошення через мобільний додаток

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

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

Rachio — один з небагатьох виробників з публічним REST API. OAuth 2.0 авторизація, область 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 {
        // тривалість в секундах
        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 тижнів. Вартість розраховується після уточнення обладнання та числа зон.