Реалізація групування 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-пристроїв за зонами/кімнатами у мобільному додатку

Коли пристроїв у системі більше двадцяти — без групування додаток перетворюється на плоский список ламп, датчиків та реле вперемішку. Користувач не знаходить потрібний пристрій, управління замедлюється, скарги ростуть. Групування за зонами та кімнатами — не косметика, а обов'язковий архітектурний елемент для будь-якого IoT-додатка від середнього масштабу.

Де повинні жити дані про групування

Перше питання, яке визначає всю архітектуру: де зберігається відповідність «пристрій → кімната → зона»? Два варіанти — на сервері або локально на пристрої.

Локальне зберігання (SharedPreferences, AsyncStorage, Hive) працює до моменту, коли користувач встановить другий телефон або передасть управління іншому члену сім'ї. Групування теряется. Синхронізація через iCloud/Google Drive — окрема біль з конфліктами версій.

Правильний варіант: іерархія на бекенді. Структура: home → floor → zone → room → device. Кожен рівень — окремий запис у БД з parent_id та position (для сортування). Пристрій може бути прив'язаний лише до однієї кімнати, але кімнати можна об'єднувати в довільні зони (наприклад, «Перший поверх» та «Зона дитини» можуть перетинатися).

CREATE TABLE locations (
  id UUID PRIMARY KEY,
  home_id UUID NOT NULL,
  parent_id UUID REFERENCES locations(id),
  type VARCHAR(20) CHECK (type IN ('floor','zone','room')),
  name VARCHAR(100),
  position INTEGER DEFAULT 0
);

CREATE TABLE device_locations (
  device_id UUID NOT NULL,
  location_id UUID NOT NULL,
  PRIMARY KEY (device_id, location_id)
);

Зв'язок many-to-many між пристроєм та локаціями для сценаріїв вроде «датчик руху вважається частиною та коридора, та зони безпеки».

UI групування: Що працює на практиці

На Flutter використовуємо SliverList з SliverAppBar для кожної групи — це дає плавний scroll з прилипаючими заголовками кімнат без втрати продуктивності. ExpansionTile для приховування/розкриття кімнат. Drag-and-drop для переназначення пристроїв — через ReorderableListView або пакет flutter_reorderable_list.

На React Native — SectionList з stickySectionHeadersEnabled. Для DnD використовуємо react-native-draggable-flatlist або Reanimated 3 з жестами через GestureHandler. Не використовуємо стандартний ScrollView з ручним вичисленням позицій — це гарантований перформанс-кошмар на Android.

Важливий UX-момент: статус групи (все включено / частково / все вимкнено) повинен агрегуватися на клієнті з кешу станів пристроїв, а не запрошуватися окремим API-вик​ликом. Інакше при відкритті екрану «Гостиная» — 20 паралельних запитів, 200ms lag, видимий джиттер на iOS.

Агрегацію робимо через Riverpod StateProvider (Flutter) або Zustand selector (React Native): пересчет статусу групи відбувається реактивно при оновленні будь-якого пристрою з групи.

Синхронізація у реальному часі

Користувач переіменував кімнату або переместив пристрій — змина повинна відобразитися на всіх залогінених пристроях. Реалізуємо через WebSocket-канал з повідомленнями типу:

{ "event": "location_updated", "location_id": "...", "changes": { "name": "Спальня 2" } }
{ "event": "device_moved", "device_id": "...", "from_location": "...", "to_location": "..." }

Клієнт оновлює локальний кеш (flutter_riverpod Notifier / Zustand store) без повної перезагрузки списку. Критично для многопользовательских сценаріїв — сім'я управляє одним домом з різних телефонів.

Що ще варто врахувати

Іконки та кольори кімнат — користувацькі, зберігаються у locations.metadata (JSONB). Швидкий доступ до улюблених пристроїв — окремий разділ favorites зі своїм порядком, незалежне від кімнатної іерархії. Пошук за іменем пристрою — індекс на devices.name + розширення pg_trgm для нечіткого пошуку.

Процес та терміни

Проектування іерархії та API — 3–5 днів. UI з групуванням та базовим DnD — 2 тижні. Реалтайм-синхронізація, мультипользовательские сценарії, пошук — ще 1.5–2 тижні. Усього базова функціональність — 4–6 тижнів залежно від платформи та складності іерархії.