Реалізація сповіщень про критичні показники IoT-датчиків у мобільному додатку

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

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

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

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

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1735 послуг
Реалізація сповіщень про критичні показники IoT-датчиків у мобільному додатку
Середній
~2-3 дні
Часті запитання

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

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

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

  • 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

Реалізація сповіщень про критичні показники IoT-датчиків у мобільному додатку

Температура в серверній кімнаті піднялася до 45°C о 3 ночі. Push-сповіщення прийшло о 9 ранку — коли смартфон підключився до Wi-Fi. За цей час обладнання перегрілось. IoT-алерти — це завдання, де «сповіщення з затримкою» гірше, ніж відсутність сповіщення.

Чому стандартний FCM не підходить для критичних IoT-алертів

FCM нормальний приоритет (normal) буферизує доставку, коли пристрій у Doze Mode. Для некритичних сповіщень нормально. Для IoT-алертів — ні.

Потрібен "priority": "high" у FCM payload + на iOS apns-priority: 10 з interruption-level: critical. Останнє — особливий випадок: UNNotificationInterruptionLevel.critical відтворює звук навіть у режимі «Не турбувати» та при включеному беззвучному режимі. Потрібен спеціальний дозвіл com.apple.developer.usernotifications.critical-alerts, який слід окремо запросити у Apple.

Запит дозволу на критичні сповіщення — окремий проміпт, відрізняється від стандартного:

UNUserNotificationCenter.current().requestAuthorization(
    options: [.alert, .sound, .badge, .criticalAlert]
) { granted, error in ... }

Користувач повинен явно дозволити критичні сповіщення — неможливо увімкнути без згоди.

Архітектура IoT pipeline

Датчики → MQTT-брокер (Mosquitto або AWS IoT Core) → серверний обробник → FCM/APNs.

MQTT — де-факто стандарт для IoT: легкий протокол, працює при нестабільному з'єднанні, підтримує QoS 0/1/2. Датчики публікують дані в топік sensors/{device_id}/temperature, сервер підписується на всі топіки пристроїв користувача.

Серверний обробник при отриманні повідомлення перевіряє значення проти порогових правил:

const rules = await getRulesForDevice(deviceId);
for (const rule of rules) {
  if (rule.condition(value)) {
    await sendCriticalAlert(userId, {
      sensor: deviceId,
      metric: rule.metric,
      value,
      threshold: rule.threshold,
      severity: rule.severity
    });
  }
}

Дедупліка обов'язкова. Якщо датчик надсилає дані кожні 10 секунд і температура тримається вище порога 30 хвилин — це не 180 сповіщень, а одне з оновленням статусу. Redis: SET alert:{device}:{metric}:active 1 EX 1800 — поки ключ існує, нові алерти за цією умовою не відправляємо.

Багаторівнева система алертів

Рівень Приклад FCM priority iOS level Дія
Info Батарея датчика 20% normal passive У штормі
Warning Температура >35°C high active Пробуджує екран
Critical Температура >45°C high critical Звук у беззвучному
Emergency Датчик CO >200 ppm high critical Звук + вібрація

На Android аналогічно через notification channels з різним importance: IMPORTANCE_DEFAULT, IMPORTANCE_HIGH, IMPORTANCE_MAX.

Мобільний додаток: екран моніторингу

Dashboard з live-даними датчиків — реалізуємо через WebSocket з'єднання (не polling, щоб бачити оновлення в реальному часі при відкритому додатку). На Flutter: пакет web_socket_channel, дані в Riverpod StreamProvider.

Історичні графіки — fl_chart або syncfusion_flutter_charts. Зберігання історії на сервері в InfluxDB або TimescaleDB (розширення PostgreSQL) — обидва оптимізовані для часових рядів.

Налаштування порогових правил в додатку: користувач вибирає датчик, метрику, оператор (>, <, ==), значення, рівень критичності. Правила зберігаються на сервері.

Процес розробки

  1. Вибір MQTT-брокера та схеми топіків
  2. Розробка серверного обробника з дедупліцированням
  3. Налаштування FCM + APNs critical alerts дозволу
  4. Розробка мобільного клієнта (dashboard, налаштування алертів)
  5. Тестування доставки у Doze Mode і режимі «Не турбувати»
  6. Навантажувальне тестування (багато датчиків одночасно)

Терміни: від 4 тижнів (інтеграція з існуючою IoT-інфраструктурою) до 10–12 тижнів (повний стек з MQTT-брокером, серверною частиною та мобільним клієнтом).