Реалізація моніторингу активності питомця через мобільний додаток
Трекери активності для питомців — Whistle Go Explore, Tractive GPS, Fi Collar — вирішують дві задачі: геолокація та моніторинг здоров'я. Якщо геолокація зрозуміла (LTE-M/GPS-трекер з сервером), то моніторинг активності — це обробка IMU-даних з акселерометра на ошийнику та класифікація поведінки: сон, ходьба, біг, гра, їжа. Вот тут починається справжня розробка.
Класифікація активності по IMU
Трекер на ошийнику містить 3-осьовий акселерометр (ADXL345, MPU-6050 або аналог). Дані з частотою 50 Гц — це 50 векторів прискорення в секунду. Класифікація на пристрої економить батарею (не потрібно стримити сирові дані), але потребує ML-моделі в прошивці або на мобільному додатку.
На iOS — Core ML з моделлю, обученою на розмічених даних активності. Модель конвертується з TensorFlow Lite або PyTorch через coremltools. Вхідний тензор: вікно 2.5 секунди × 50 Гц = 125 семплів × 3 осі. Вихід: softmax по класах {sleep, rest, walk, run, play, eat}.
class PetActivityClassifier {
private let model: PetActivityMLModel
private var window: [[Double]] = []
private let windowSize = 125
private let strideSize = 25 // 50% перекриття
func processSample(x: Double, y: Double, z: Double) -> ActivityClass? {
window.append([x, y, z])
guard window.count >= windowSize else { return nil }
let input = try? MLMultiArray(shape: [1, NSNumber(value: windowSize), 3], dataType: .double)
for (i, sample) in window.enumerated() {
input?[i * 3] = NSNumber(value: sample[0])
input?[i * 3 + 1] = NSNumber(value: sample[1])
input?[i * 3 + 2] = NSNumber(value: sample[2])
}
window.removeFirst(strideSize)
guard let modelInput = input,
let prediction = try? model.prediction(input: modelInput) else { return nil }
return ActivityClass(rawValue: prediction.classLabel)
}
}
На Android — TensorFlow Lite з делегатом NNAPI для апаратного прискорення. Модель упакована в assets, загружається через Interpreter. Логіка вікна аналогічна.
Синхронізація даних з трекера
Трекер накопичує агрегати активності (хвилинні зводки) та синхронізує по BLE при приближенні телефону. Протокол: GATT з Indicate Characteristic — трекер сповіщає про готовність даних, додаток читає пакетами по 20 байт (MTU за умовчанням). Для прискорення запитуємо MTU 512: gatt.requestMtu(512) на Android, peripheral.maximumWriteValueLength(for: .withResponse) на iOS.
GPS-трекери з LTE-M (Tractive, Fi) синхронізуються через хмару. Мобільний додаток — клієнт до REST API. Геофенсинг реалізований на сервері: зони «дім», «двір», пуш-сповіщення коли питомець вийшов за периметр.
Дашборд здоров'я та активності
Суточна статистика активності — основний екран. Кільцева діаграма активності за день: sleep/rest/walk/run/play. Трендові графіки по тижнях та місяцях. На iOS — інтеграція з HealthKit через HKWorkout (питомці не в стандартних типах, але HealthKit можна не використовувати — достатньо власного сховища).
Метрики, які цікавлять власників:
- Хвилини активного руху за день
- Дистанція (розраховується по кроках з акселерометра або GPS)
- Калорії (груба оцінка по ваге питомця та активності)
- Якість сну (рухливість вночі)
- Порівняння з попередньою тижнем
Пуші про аномалії: «Барсик сьогодні активний на 80% менше звичайного» — Firebase Cloud Messaging з серверной аналітикою по baseline активності за попередні 7 днів.
Геолокація: GPS + геофенсинг
Для GPS-трекерів з сотовою зв'язком — періодичні позиції через API (кожні 1-5 хвилин в режимі економії батареї, кожні 10-30 секунд в режимі слідження). Карта — MapKit (iOS) або Google Maps SDK (Android) з історичним треком питомця за день.
Геофенсинг на рівні додатку: CLRegion/CLCircularRegion на iOS для невеликих зон через CLLocationManager — але це працює тільки коли телефон в зоні. Надійніше — серверний геофенсинг з пушами.
Розробка мобільного додатку для BLE-трекера активності питомця з класифікацією поведінки та дашбордом: 6-10 тижнів. З GPS-інтеграцією та серверним геофенсингом: 3-4 місяці. Вартість розраховується індивідуально після уточнення протоколу трекера та вимог до платформ.







