Реалізація логування подій IoT-пристроїв у мобільному додатку
Журнал подій IoT — не просто таблиця з датою та текстом. Це інструмент розбору інцидентів: коли пристрій втратив зв'язок, коли сработав датчик, хто та коли відправив команду. Без фільтрування та швидкого пошуку по сотнях тисяч записів журнал марний.
Структура події та зберігання
Мінімальний набір полів события:
data class DeviceEvent(
val id: Long,
val deviceId: String,
val timestamp: Instant,
val severity: Severity, // DEBUG, INFO, WARNING, ERROR, CRITICAL
val category: String, // "connection", "sensor", "command", "firmware"
val message: String,
val metadata: Map<String, Any?>, // payload залежить від категорії
)
На бекенді — TimescaleDB (PostgreSQL extension) або ClickHouse для зберігання часових рядів подій з швидкими range-запитами. У мобільному клієнті — сторінкова загрузка з фільтрами.
Фільтрування та пошук
Future<List<DeviceEvent>> fetchEvents({
required String deviceId,
DateTime? from,
DateTime? to,
List<Severity>? severities,
String? searchQuery,
int page = 0,
int pageSize = 50,
}) async {
return _api.getEvents(
deviceId: deviceId,
from: from?.toIso8601String(),
to: to?.toIso8601String(),
severities: severities?.map((s) => s.name).toList(),
q: searchQuery,
offset: page * pageSize,
limit: pageSize,
);
}
Кольорова кодування по severity: сірий (DEBUG), білий (INFO), жовтий (WARNING), червоний (ERROR/CRITICAL). Критичні события — вище в списку незалежно від часу, решта — по спаданню часу.
Локальний кеш та офлайн
Останні 500 подій кешуємо в SQLite (drift) — журнал доступен без інтернету. При відновленні з'єднання дозагружаємо нові записи з моменту останньої синхронізації через параметр API since.
Реалізація журналу подій IoT з фільтруванням, пошуком, кольоровою кодуванням та офлайн-кешем: 1–2 тижні. Вартість розраховується індивідуально.







