LEGACY_FEATURES.md 28 KB

MyBeacon Legacy - Полный функционал

Архитектура системы

Три основных компонента:

  1. WiFi Analytics (/beacon/wifi-radar2/) - панель аналитики для клиентов
  2. BLE Tracking (/beacon/ble/) - система indoor позиционирования
  3. Device Management (/my-wifi/panel/) - админка для управления устройствами

WiFi Analytics - Клиентская панель

1. Онлайн мониторинг (index.php)

Что видит клиент:

  • Календарь для выбора даты
  • Список своих WiFi-радаров с last seen временем
  • Таблица детектированных устройств в реальном времени

Таблица "Онлайн":

  • # - порядковый номер
  • Радар - MAC-адрес радара который поймал
  • Время - когда засечен
  • MAC - MAC-адрес телефона/устройства
  • Сохраненная сеть - SSID который искал телефон
  • Уровень сигнала - RSSI (dBm)

Лимит: Последние 100 записей за выбранный день

Интерактив:

  • Клик на дату → фильтр по дате
  • Клик на радар → показать только его данные
  • DataTables поиск по всем полям

2. Список уникальных MAC-адресов (index2.php)

Функционал:

  • Календарь для выбора даты
  • Список WiFi-радаров с last seen
  • Таблица УНИКАЛЬНЫХ устройств (без дубликатов)

Таблица "Список MAC":

  • Те же колонки что в "Онлайн"
  • Но каждый MAC показан только один раз
  • Query: SELECT DISTINCT source, ssid, time, rssi, dev FROM clients

Лимит: Первые 100 уникальных за день

Use case: Понять сколько РАЗНЫХ людей прошло, а не общее количество детекций


3. Отчеты и аналитика (index3.php)

Отчет "Конверсия клиентов"

Метрики:

  1. Всего клиентов за день

    • Уникальные MAC-адреса
    • Query: COUNT(DISTINCT source)
  2. Зашли в магазин

    • Фильтр: rssi > -80 (близко к радару)
    • Логика: сильный сигнал = внутри помещения
  3. Провели более 20 минут

    • Фильтр: rssi > -90 (очень близко, долго)
    • Логика: очень сильный сигнал = задержался

Визуализация:

  • Круговая диаграмма (Pie chart) с 3 сегментами:
    • Прошли мимо
    • Зашли в магазин
    • Провели более 20 мин

Математика:

Прошли мимо = Всего - Зашли
Зашли (без долгих) = Зашли - Провели_20мин
Провели 20 мин = как есть

Экспорт в Excel

Форма:

  • Выбор устройств - мультиселект радаров
  • Период - от (datepicker) до (datepicker)
  • Кнопка "Скачать"

Формат: Excel файл (.xlsx)

Use case:

  • Скачать все детекции за месяц
  • Анализ в Excel/Power BI
  • Отчеты руководству

4. Экспорт MAC для ретаргетинга (goodmac.php)

Заголовок: "Выгрузка MAC в системы контекстной рекламы"

Форма:

  • Выбор устройств - мультиселект радаров
  • Период - от (datepicker) до (datepicker)
  • Кнопка "Выгрузить mac-адреса"

Назначение:

  • Экспорт MAC-адресов для Яндекс.Аудитории
  • Экспорт MAC-адресов для myTarget

Use case:

  1. Радары засекли 1000 человек в магазине
  2. Выгрузить их MAC в Яндекс.Аудиторию
  3. Настроить ретаргетинг рекламу на этих людей
  4. Они увидят рекламу магазина в мобильных приложениях

Формат выгрузки: TXT файл с MAC-адресами (по одному на строку)


BLE Tracking - Indoor позиционирование

Источники данных

1. Мобильные приложения (Android/iOS)

Endpoint: /beacon/ble/get4.php

Типы событий:

a) Status (статус телефона)

  • GPS координаты (lat, lon, alt, accuracy)
  • Разрешения приложения (permissions)
  • Уровень батареи телефона
  • GPS provider (GPS/Network/Fused)
  • Разрешения на энергосбережение

b) Beacon (BLE beacon детекция)

  • UUID beacon'а
  • Major, Minor (идентификаторы)
  • RSSI (уровень сигнала)
  • MAC-адрес beacon'а
  • Timestamp

c) Accel (акселерометр)

  • X, Y, Z (координаты)
  • Температура датчика
  • Батарея датчика
  • BT MAC устройства
  • RSSI

d) NFC (NFC метки)

  • NFC ID метки
  • Timestamp чек-ина

Формат приема: JSON с gzip сжатием

Хранение: ClickHouse таблица phones2

Use cases:

  • Indoor navigation (по BLE beacons)
  • Outdoor navigation (по GPS)
  • Трекинг активности (акселерометр)
  • Чек-ины в зоны (NFC)
  • Мониторинг батареи устройств

2. WiFi/BLE радары (Luckfox устройства)

Endpoint: /beacon/newfilebeacon.php

Типы устройств:

a) iBeacon (iOS/Android)

  • UUID, Major, Minor
  • RSSI
  • Timestamp

b) my-beacon_acc (кастомные устройства с акселерометром)

  • BT MAC
  • RSSI
  • X, Y, Z (акселерометр)
  • Батарея
  • Timestamp

c) bracelet_acc (браслеты с акселерометром)

  • BT MAC
  • RSSI
  • X, Y, Z
  • Timestamp

d) bracelet_bat (браслеты с батареей)

  • BT MAC
  • RSSI
  • Батарея
  • Timestamp

Формат приема: Текстовый через разделитель ;

Пример строки:

ibeacon_android;ac:15:a2:3f:ee:26;FDA50693-A4E2-4FB1-AFCF-C6EB07647825;1565183706;-75;0;1000;10

Хранение: ClickHouse таблица blex5

Use cases:

  • Отслеживание сотрудников (браслеты)
  • Трекинг активов (метки на оборудовании)
  • Мониторинг батареи IoT устройств
  • Детекция падений (акселерометр)

Device Management - Админская панель

Навигация:

  1. Устройства (index.php) - список радаров с конфигурацией
  2. Добавление (adddev.php) - добавить клиента с устройствами
  3. Клиенты (clients.php) - список клиентов
  4. Инструкция (info.php) - документация
  5. VPN - сканер VPN подключений (внешняя ссылка)

1. Устройства (index.php)

Таблица устройств:

Колонки (все РЕДАКТИРУЕМЫЕ inline):

  1. # - порядковый номер
  2. MAC-адрес - не редактируется
  3. время - last seen, не редактируется
  4. wf_ssid - WiFi SSID для подключения радара к сети ✏️
  5. wf_psk - WiFi пароль ✏️
  6. ovpn_flag - OpenVPN включен (0/1) ✏️
  7. ovpn_addr - URL для получения VPN конфига ✏️
  8. wf_flag - WiFi сбор включен (0/1) ✏️
  9. wf_addr - URL для отправки WiFi данных ✏️
  10. bt_flag - BLE сбор включен (0/1) ✏️
  11. bt_addr - URL для отправки BLE данных ✏️
  12. fw_flag - Firmware update включен (0/1) ✏️
  13. fw_addr - URL для получения прошивки ✏️
  14. reboot_flag - Флаг перезагрузки (0/1) ✏️
  15. ip - IP адрес устройства ✏️

Функционал:

Inline Editing (jEditable):

  • Клик на ячейку → превращается в input
  • Кнопки "Ok" / "Cancel"
  • При "Ok" → AJAX сохранение → обновление в БД
  • Индикатор загрузки (spinner)

DataTables:

  • Поиск по всем колонкам (глобальное поле поиска)
  • Сортировка по любой колонке
  • Pagination (если много устройств)

Use cases:

  • Настроить WiFi для нового радара
  • Включить/выключить модули (WiFi/BLE/VPN)
  • Обновить URL endpoints
  • Перезагрузить радар (reboot_flag = 1)
  • Проверить IP адрес устройства
  • Найти радар по MAC

2. Клиенты (clients.php)

Таблица клиентов:

Колонки (только чтение):

  1. # - порядковый номер
  2. Логин - email клиента
  3. Пароль - plain text (!)
  4. Устройства - список MAC через <br> (визуально столбиком)
  5. Оплачено до - ссылка на редактирование даты
  6. Информация - контакты, юрлицо, телефон
  7. Оплата - текстовый статус оплаты

Функционал:

  • Просмотр всех клиентов
  • Клик на дату → редактирование срока оплаты (tilledit.php)
  • DataTables поиск/сортировка

Use case:

  • Проверить какие устройства у клиента
  • Посмотреть статус оплаты
  • Продлить срок действия

3. Добавление устройств (adddev.php)

Форма создания клиента:

Поля:

  1. Логин - required, уникальный email
  2. Пароль - required, plain text
  3. Список устройств - textarea, MAC через ;

    Пример ввода:
    d8:0d:17:5e:07:94;ac:84:c6:42:17:90;
    
  4. Информация о клиенте - textarea

    Юрлицо, имя, телефон, email
    
  5. Оплата - textarea (текст)

    До какого числа оплачены устройства
    
  6. Оплачен - checkbox

    • ✅ Checked → max1000 = 0 (полный доступ)
    • ❌ Unchecked → max1000 = 1 (лимит 1000)

Логика создания:

  1. Валидация:

    • Логин, пароль, устройства - обязательны
    • Проверка: логин уже занят?
  2. Создание пользователя:

    • INSERT в таблицу users
    • till = текущая дата
  3. Создание связей устройств:

    • Парсинг MAC через ;
    • Для каждого MAC → INSERT в user_devices
    • name = MAC (копия)
    • segment = 0 (для Yandex.Аудитории)

Use case:

  • Новый клиент купил 3 радара
  • Админ создает учетную запись
  • Вводит MAC-адреса радаров через ;
  • Клиент получает доступ к панели аналитики

WiFi Analytics - Детальная логика

Календарь

Функционал:

  • Навигация по месяцам (◀◀◀ / ▶▶▶)
  • Текущая дата подсвечена
  • Клик на дату → фильтр данных

Параметры URL:

?date=2024-12-27   → выбранная дата
?y=2024&m=12       → месяц/год навигации
?mac=ac:84:c6...   → выбранный радар

Выбор радара

Интерфейс:

Список WiFi-радаров:
ac:84:c6:42:17:90  был на связи 2024-12-27 15:30:45
d8:0d:17:5e:07:94  был на связи 2024-12-27 15:28:12

Логика:

  • Для каждого радара клиента → последняя запись в БД
  • Клик на MAC → SESSION['mac'] = выбранный радар
  • Фильтр таблицы по этому радару

Use case:

  • У клиента 5 магазинов (5 радаров)
  • Выбирает конкретный магазин
  • Видит только его статистику

RSSI логика (определение локации)

Градации сигнала:

RSSI Расстояние Категория
> -50 0-2м Очень близко
-50 to -80 2-10м В помещении
-80 to -90 10-20м У входа
< -90 >20м На улице

Применение в отчетах:

  1. Зашли в магазин: rssi > -80

    • Телефон близко к радару
    • Скорее всего внутри помещения
  2. Провели более 20 минут: rssi > -90

    • Очень близко, долго в радиусе
    • Не просто прошел, а задержался

Ограничения:

  • Время не измеряется напрямую
  • Используется эвристика через силу сигнала
  • Работает только если радар ВНУТРИ магазина

Системы ретаргетинга

Яндекс.Аудитория

Как работает:

  1. Выгрузка MAC:

    • Админ выбирает период (например, за месяц)
    • Система генерирует файл с уникальными MAC
    • Формат: один MAC на строку
  2. Загрузка в Яндекс.Аудиторию:

    • Создание нового сегмента
    • Upload файла с MAC
    • Яндекс матчит MAC → GAID/IDFA
  3. Настройка рекламы:

    • Создание кампании в Яндекс.Директ
    • Таргетинг на этот сегмент
    • Показ рекламы на мобильных устройствах

Use case:

День 1: Радар засек 500 человек в магазине
День 2: Выгрузить 500 MAC в Яндекс
День 3: Запустить рекламу "Скидка 20% только сегодня!"
День 4: Эти 500 человек видят рекламу в Яндекс.Браузере

myTarget

То же самое, но для:

  • VK.com
  • Одноклассники
  • Mail.ru приложения

Формат: Аналогичный (файл с MAC)


BLE Indoor Positioning - Use Cases

Торговый центр

Сценарий:

  1. Посетитель заходит в ТЦ
  2. Открывает мобильное приложение ТЦ
  3. Приложение сканирует BLE beacons
  4. Система определяет:
    • Этаж (по UUID beacon'ов)
    • Зона (по Major: electronics, clothes, food court)
    • Точная позиция (по Minor + RSSI трилатерация)

Данные в ClickHouse:

PHONE_UUID: abc123...
BEACON_UUID: FDA50693-A4E2-4FB1-AFCF-C6EB07647825
BEACON_MAJOR: 1 (electronics)
BEACON_MINOR: 15 (specific location)
BEACON_RSSI: -65
BEACON_TIME: 1565183706000

Возможности:

  • Навигация по ТЦ (показать путь до магазина)
  • Push уведомления при входе в зону (geofencing)
  • Аналитика трафика (heatmaps)
  • Время в зонах (dwell time)

Склад / Логистика

Сценарий:

  1. Сотрудник носит браслет с акселерометром
  2. Оборудование помечено BLE метками
  3. Радары отслеживают всё в реальном времени

Данные:

Type: bracelet_acc
BT_MAC: ac:15:a2:3f:ee:26
RSSI: -55
ACC_X: 0.5, ACC_Y: -0.3, ACC_Z: 9.8
ACC_BAT: 85%
TIME: 1565183706

Возможности:

  • Трекинг местоположения сотрудников
  • Детекция падений (акселерометр)
  • Мониторинг батареи браслетов
  • Контроль рабочего времени
  • Поиск оборудования (asset tracking)

Больница / Клиника

Сценарий:

  1. Пациенты носят браслеты
  2. NFC метки на дверях палат/процедурных
  3. BLE beacons в коридорах

События:

Type: nfc
NFC_ID: room_301
PHONE_UUID: patient_12345
TIME: 1565183706000

Type: beacon
BEACON_UUID: ward_A
BEACON_MAJOR: 3 (floor)
BEACON_MINOR: 1 (room)
RSSI: -70

Возможности:

  • Чек-ины в палаты/процедурные (NFC)
  • Отслеживание перемещений пациентов
  • Контроль доступа (кто где был)
  • Тревожная кнопка (через приложение → GPS)
  • Маршруты движения персонала

Мобильное приложение - Функционал

Что собирает приложение:

1. GPS (continuous)

  • Latitude, Longitude, Altitude
  • Accuracy (HDOP)
  • Provider (GPS/Network/Fused)
  • Частота: каждые N секунд (настраиваемо)

2. BLE Scanning (continuous)

  • Сканирование iBeacon форматов
  • UUID, Major, Minor
  • RSSI измерение
  • Частота: каждые N секунд

3. Акселерометр (on change)

  • X, Y, Z значения
  • Температура сенсора
  • Батарея устройства (если метка)
  • Событие: при движении

4. NFC (on tap)

  • Чтение NFC меток
  • NFC_ID (уникальный идентификатор)
  • Событие: при поднесении телефона

5. Системная информация

  • Разрешения приложения (location, bluetooth, etc)
  • Уровень батареи телефона
  • Настройки энергосбережения

Формат отправки:

HTTP POST на /beacon/ble/get4.php

Headers:

Content-Type: application/json
Content-Encoding: gzip  (опционально)

Body (JSON array):

[
  {
    "TYPE": "status",
    "PHONE_UUID": "abc-123-def-456",
    "LOCATION_LATITUDE": 55.7558,
    "LOCATION_LONGITUDE": 37.6173,
    "LOCATION_ALTITUDE": 120.5,
    "LOCATION_ACCURACY": 15.0,
    "LOCATION_PROVIDER": "fused",
    "APP_PERMISSIONS": "location,bluetooth",
    "APP_POWER_PERMISSIONS": "unrestricted",
    "PHONE_BAT": 85,
    "TIME": 1565183706000
  },
  {
    "TYPE": "beacon",
    "PHONE_UUID": "abc-123-def-456",
    "BT_MAC": "ac:15:a2:3f:ee:26",
    "BEACON_UUID": "FDA50693-A4E2-4FB1-AFCF-C6EB07647825",
    "BEACON_MAJOR": 1,
    "BEACON_MINOR": 15,
    "BEACON_RSSI": -65,
    "BEACON_TIME": 1565183706000
  },
  {
    "TYPE": "accel",
    "PHONE_UUID": "abc-123-def-456",
    "BT_MAC": "ac:15:a2:3f:ee:26",
    "BEACON_RSSI": -60,
    "ACC_X": 0.5,
    "ACC_Y": -0.3,
    "ACC_Z": 9.8,
    "ACC_TEMP": 28.5,
    "ACC_BAT": 90,
    "BEACON_TIME": 1565183706000
  },
  {
    "TYPE": "nfc",
    "PHONE_UUID": "abc-123-def-456",
    "NFC_ID": "room_301",
    "TIME": 1565183706000
  }
]

WiFi Probe Requests - Техника сбора

Что ловят радары:

WiFi устройство постоянно ищет знакомые сети:

Телефон: "Есть тут 'Home WiFi'?"
Телефон: "Есть тут 'Office WiFi'?"
Телефон: "Есть тут 'Starbucks'?"

Радар слышит эти запросы:

  • MAC-адрес телефона (source)
  • SSID который ищет
  • Уровень сигнала (RSSI)
  • Время детекции

Endpoint для радаров: /beacon/wifi_receiver.php

Формат данных (текстовый):

dev=ac:84:c6:42:17:90&source=d8:0d:17:5e:07:94&ssid=Home_WiFi&rssi=-75&time=1565183706

Сохранение: MySQL таблица clients


Device Configuration API

Получение конфига устройством

Endpoint: /beacon/getfile_v2.php?mac=ac:84:c6:42:17:90

Ответ (текстовый):

wf_client_ssid=Office_WiFi
wf_client_psk=password123
ovpn_flag=1
ovpn_addr=https://beacon.e-bash.ru/get-vpn.php?mac=
wf_flag=1
wf_addr=https://beacon.e-bash.ru/wifi_receiver.php
bt_flag=1
bt_addr=https://beacon.e-bash.ru/newfilebeacon.php
fw_flag=0
fw_addr=https://beacon.e-bash.ru/fw_update.php?mac=
reboot_flag=0
ip=192.168.5.244

Устройство парсит и применяет конфиг:

  1. Подключается к WiFi (wf_client_ssid + wf_client_psk)
  2. Если ovpn_flag=1 → скачать VPN конфиг
  3. Если wf_flag=1 → начать отправку WiFi данных на wf_addr
  4. Если bt_flag=1 → начать отправку BLE данных на bt_addr
  5. Если reboot_flag=1 → перезагрузиться
  6. Если fw_flag=1 → скачать firmware с fw_addr

Частота проверки: Каждые N минут (например, каждые 5 минут)


VPN Туннели

Назначение:

Проблема:

  • Радар за NAT, нет белого IP
  • Админ не может зайти на устройство напрямую
  • Нужен доступ для отладки/настройки

Решение: OpenVPN туннель

Схема:

Радар (192.168.5.244)
  ↓ VPN Client
  ↓ Туннель
  ↓
VPN Server (beacon.e-bash.ru)
  ↓ VPN адрес: 10.42.61.115
  ↓
Админ может SSH на 10.42.61.115

Endpoint для получения VPN конфига:

GET /beacon/get-vpn.php?mac=ac:84:c6:42:17:90

Ответ: .ovpn файл (конфигурация OpenVPN)

Сканер VPN подключений:

  • Страница /beacon/scanvpn.php
  • Показывает какие радары сейчас в VPN
  • VPN адреса устройств
  • Статус подключения

Firmware Update

OTA обновления прошивки

Endpoint: /beacon/fw_update.php?mac=ac:84:c6:42:17:90

Логика:

  1. Устройство проверяет fw_flag в конфиге
  2. Если fw_flag=1 → GET запрос на fw_addr
  3. Сервер отдает .bin файл (прошивка)
  4. Устройство проверяет MD5
  5. Записывает прошивку в flash
  6. Перезагружается

Файлы прошивок:

/beacon/fw.bin              - текущая версия
/beacon/fw_rt.bin           - для роутеров
/beacon/fw_gw_upgrade.bin   - для gateway
/beacon/cudy_tr1200.bin     - для Cudy TR1200

Use case:

  • Админ выкладывает новую прошивку
  • Устанавливает fw_flag=1 для нужных устройств
  • Радары автоматически обновляются при следующей проверке
  • После обновления fw_flag=0 (вручную)

Ключевые отличия от нового проекта

Что БЫЛО в Legacy:

  1. WiFi Probe Requests аналитика - основная фича
  2. Отчеты с конверсией (прошли мимо / зашли / задержались)
  3. Экспорт для ретаргетинга (Яндекс, myTarget)
  4. BLE indoor positioning с мобильными приложениями
  5. Акселерометр tracking (падения, активность)
  6. NFC чек-ины (зоны, комнаты)
  7. GPS outdoor tracking
  8. OpenVPN туннели для удаленного доступа
  9. OTA firmware updates
  10. Inline editing конфигов устройств
  11. Excel export детекций
  12. ClickHouse для BLE данных
  13. MySQL для WiFi данных и конфигов

Что УБИРАЕМ в новом:

  1. OpenVPN туннели - не требуется по ТЗ
  2. Inline editing - опасно, заменить на модальные окна
  3. Ретаргетинг экспорты - неактуально (GDPR, устаревшая техника)
  4. WiFi Probe Requests - современные iOS/Android рандомизируют MAC

Что ОСТАВЛЯЕМ/УЛУЧШАЕМ:

  1. BLE indoor tracking - актуально
  2. GPS + BLE гибрид - indoor + outdoor
  3. Акселерометр - для wearables
  4. NFC чек-ины - для access control
  5. ClickHouse - для аналитики событий
  6. Device management - с RBAC и multi-tenant
  7. OTA updates - но через защищенный API
  8. Отчеты и дашборды - улучшенные визуализации

Итого: Полный список фич Legacy проекта

WiFi Analytics (4 страницы):

  1. Онлайн мониторинг детекций
  2. Список уникальных MAC-адресов
  3. Отчеты с конверсией (воронка клиентов)
  4. Экспорт MAC для ретаргетинга

BLE Tracking:

  1. Indoor позиционирование (UUID/Major/Minor)
  2. GPS outdoor трекинг
  3. Акселерометр мониторинг
  4. NFC чек-ины
  5. Статус батареи устройств
  6. Разрешения приложений
  7. Комбинированные события (status+beacon+accel+nfc)

Device Management (3 страницы):

  1. Список устройств с inline редактированием (15 полей)
  2. Управление клиентами и оплатой
  3. Добавление клиентов с устройствами

API для устройств:

  1. Получение конфигурации
  2. Отправка WiFi детекций
  3. Отправка BLE событий
  4. Получение VPN конфига
  5. Скачивание firmware
  6. Heartbeat/статус

Аналитика:

  1. Календарь для выбора периода
  2. Фильтр по устройствам
  3. Круговые диаграммы (pie charts)
  4. Excel экспорт с фильтрами
  5. Поиск/сортировка DataTables
  6. RSSI-based геолокация (близко/далеко)

Инфраструктура:

  1. MySQL для конфигов и WiFi данных
  2. ClickHouse для BLE событий (phones2, blex5)
  3. Redis (упоминался, не видел использования)
  4. OpenVPN сервер
  5. Nginx reverse proxy
  6. PHP 7.x backend
  7. jQuery + DataTables + jEditable frontend