LEGACY_FEATURES.md 56 KB

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

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

Legacy система включает 3 отдельных независимых проекта и общую административную панель:

ПРОЕКТ 1: WiFi Analytics

Назначение: Аналитика посетителей через WiFi Probe Requests Целевая аудитория: Торговые центры, магазины, общественные места Техника: Сбор probe requests от устройств подключенных к WiFi сетям Локация кода: /beacon/wifi-radar2/

ПРОЕКТ 2: BLE Indoor Tracking

Назначение: Позиционирование внутри помещений с радарами Целевая аудитория: Склады, торговые центры, больницы Техника: BLE beacons + радары Luckfox для триангуляции Локация кода: /beacon/ble/ (endpoint для радаров)

ПРОЕКТ 3: Construction Crew Tracking App

Назначение: Отслеживание строительных бригад на объектах Целевая аудитория: Строительные компании, подрядчики Техника: Android приложение с NFC авторизацией + BLE маяки + GPS Локация кода: /beacon/ble/get4.php (endpoint для мобильных приложений)

Общая инфраструктура:

Device Management (/my-wifi/panel/) - админка для управления всеми типами устройств (WiFi радары, BLE радары, конфигурация)


ПРОЕКТ 1: WiFi Analytics

Описание: Система аналитики посетителей через сбор WiFi Probe Requests от устройств. Позволяет клиентам (владельцам торговых точек) видеть статистику посещаемости, конверсию, время пребывания.

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

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-адресами (по одному на строку)


ПРОЕКТ 2: BLE Indoor Tracking

Описание: Система позиционирования внутри помещений с использованием BLE beacons и радаров Luckfox. Триангуляция по RSSI от нескольких beacon'ов позволяет определить точное местоположение объектов/людей.

Целевые сценарии:

  • Склады: отслеживание сотрудников и оборудования
  • Торговые центры: навигация посетителей, heatmaps
  • Больницы: отслеживание пациентов, контроль доступа

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

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)
  • Маршруты движения персонала

ПРОЕКТ 3: Construction Crew Tracking App

Описание: Мобильное приложение (Android) для отслеживания строительных бригад на объектах. Решает задачу контроля присутствия рабочих, их локации и перемещений в течение рабочего дня.

Целевая аудитория: Строительные компании, подрядчики, управляющие объектами

Архитектура решения

Роли:

  1. Бригадир - носит смартфон с приложением (Android)
  2. Рабочие - имеют персональные NFC карты
  3. Объект - оснащен BLE маяками (iBeacon) в разных зонах

Рабочий процесс

Утро: Авторизация рабочих (NFC)

Сценарий:

  1. Рабочий приходит на объект (например, 8:00)
  2. Бригадир открывает приложение
  3. Рабочий прикладывает свою NFC карту к смартфону
  4. Приложение читает NFC_ID (уникальный идентификатор карты)
  5. Отправляет событие на сервер:

    {
     "TYPE": "nfc",
     "PHONE_UUID": "foreman_001",
     "NFC_ID": "worker_12345",
     "TIME": 1565169600000
    }
    
  6. Сервер региструет: "Рабочий #12345 начал смену в 8:00"

Польза:

  • Учет рабочего времени (кто когда пришел)
  • Автоматическая табельная
  • Замена бумажных журналов

День: Отслеживание перемещений (BLE + GPS)

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

1. GPS координаты (continuous)

  • Latitude, Longitude, Altitude
  • Accuracy (HDOP)
  • Provider (GPS/Network/Fused)
  • Частота: каждые 30-60 секунд

2. BLE маяки (continuous scanning)

  • Сканирование iBeacon форматов в зоне видимости
  • UUID, Major, Minor (идентификация зоны)
  • RSSI измерение (расстояние до маяка)
  • Частота: каждые 10-30 секунд

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

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

Пример BLE маяков на объекте:

Beacon #1: UUID=xxx, Major=1, Minor=1 → "Западное крыло, 1 этаж"
Beacon #2: UUID=xxx, Major=1, Minor=2 → "Восточное крыло, 1 этаж"
Beacon #3: UUID=xxx, Major=2, Minor=1 → "Западное крыло, 2 этаж"
Beacon #4: UUID=xxx, Major=3, Minor=1 → "Подвал"
Beacon #5: UUID=xxx, Major=4, Minor=1 → "Кровля"

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

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
  }
]

Сохранение: ClickHouse таблица phones2

Серверная аналитика

1. Аналитика на карте (Geographic View)

Что видит менеджер:

  • Карта объекта (Google Maps / OpenStreetMap)
  • GPS-маркеры с позициями бригад в реальном времени
  • Иконки бригадиров разного цвета (каждый PHONE_UUID свой цвет)
  • Последнее обновление локации (timestamp)

Интерактив:

  • Клик на маркер → показать:
    • Бригадир: Иван Иванов (PHONE_UUID: foreman_001)
    • Последняя локация: 55.7558, 37.6173
    • Время: 14:35:22
    • Ближайший beacon: "Западное крыло, 1 этаж" (Major=1, Minor=1, RSSI=-55)
    • Батарея телефона: 67%
    • Рабочие в бригаде: 5 человек (список NFC_ID)

Use case:

  • Менеджер видит что бригада №3 находится в "Западном крыле, 2 этаж"
  • Координаты GPS подтверждают что они на объекте
  • BLE маяк показывает точную зону
  • Можно позвонить бригадиру если нужно

2. Текстовая аналитика (Reports)

Табель рабочего времени:

Дата: 2025-12-28
Объект: ЖК "Новый город"
Бригадир: Иван Иванов (foreman_001)

Рабочие:
┌──────────────┬───────────┬───────────┬────────┐
│ NFC_ID       │ Пришел    │ Ушел      │ Часы   │
├──────────────┼───────────┼───────────┼────────┤
│ worker_12345 │ 08:05     │ 18:12     │ 10:07  │
│ worker_12346 │ 08:02     │ 18:15     │ 10:13  │
│ worker_12347 │ 08:45     │ 17:50     │ 09:05  │ ← опоздал
│ worker_12348 │ 08:00     │ 18:20     │ 10:20  │
│ worker_12349 │ -         │ -         │ -      │ ← не пришел
└──────────────┴───────────┴───────────┴────────┘

Перемещения по зонам:

Бригадир: Иван Иванов
Дата: 2025-12-28

08:00-09:30 → Западное крыло, 1 этаж (beacon Major=1, Minor=1)
09:30-12:00 → Восточное крыло, 1 этаж (beacon Major=1, Minor=2)
12:00-13:00 → [Нет beacon] GPS: 55.7558, 37.6173 (обед?)
13:00-15:30 → Западное крыло, 2 этаж (beacon Major=2, Minor=1)
15:30-18:00 → Кровля (beacon Major=4, Minor=1)

Аномалии:

⚠ Бригадир foreman_002 вне объекта 14:20-15:45 (GPS: 55.8000, 37.7000)
⚠ Бригадир foreman_003 не обновлял локацию 2 часа (батарея?)
⚠ Рабочий worker_12350 отсканирован в 8:00, но в 14:00 больше нет beacon-событий

Excel-экспорт:

  • Табель за месяц (все бригады)
  • Перемещения по зонам
  • Рабочие часы по дням
  • Аномалии и опоздания

Преимущества перед бумажным журналом

Было (бумага):

  1. Бригадир вручную пишет кто пришел
  2. Может подделать (вписать за отсутствующего)
  3. Нет контроля где бригада находится
  4. Нет данных о перемещениях
  5. Сложно сводить статистику

Стало (приложение):

  1. NFC карта - невозможно подделать
  2. GPS + BLE - точная локация в реальном времени
  3. Автоматический табель в ClickHouse
  4. Карта с позициями всех бригад
  5. Отчеты одной кнопкой

Техника сбора данных: WiFi Probe Requests

Принцип работы:

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

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

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

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

Важно про MAC-адреса:

  • ✅ Современные устройства (iOS/Android) рандомизируют MAC в probe requests
  • ✅ НО! Устройства подключенные к точке доступа отправляют probe requests с честным MAC-адресом
  • ✅ Поэтому WiFi Analytics остается актуальным для локаций с собственными WiFi сетями
  • ✅ Клиенты (магазины, ТЦ) предоставляют бесплатный WiFi → посетители подключаются → получаем честные MAC

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

Use case:

  1. Магазин развернул бесплатный WiFi "Shop_Free_WiFi"
  2. Посетители подключаются к сети
  3. Их устройства шлют probe requests с честным MAC
  4. Радары собирают данные
  5. Магазин видит статистику: сколько людей, конверсия, время пребывания

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, устаревшая техника)

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

  1. WiFi Probe Requests - АКТУАЛЬНО! Устройства подключенные к WiFi сети отправляют probe с честным MAC
  2. BLE indoor tracking - актуально
  3. GPS + BLE гибрид - indoor + outdoor (приложение для бригад)
  4. Акселерометр - для wearables
  5. NFC чек-ины - для access control (авторизация рабочих)
  6. ClickHouse - для аналитики событий
  7. Device management - с RBAC и multi-tenant
  8. OTA updates - но через защищенный API
  9. Отчеты и дашборды - улучшенные визуализации
  10. Карта с геолокацией - для отслеживания бригад

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

ПРОЕКТ 1: WiFi Analytics

Клиентская панель (4 страницы):

  1. Онлайн мониторинг детекций (последние 100)
  2. Список уникальных MAC-адресов
  3. Отчеты с конверсией (воронка: прошли мимо / зашли / задержались 20+ мин)
  4. Excel экспорт детекций за период
  5. Экспорт MAC для ретаргетинга (Яндекс.Аудитория, myTarget)

Технология:

  • WiFi Probe Requests от устройств подключенных к WiFi
  • RSSI-based логика определения "зашли" vs "прошли мимо"
  • MySQL таблица clients для хранения
  • ClickHouse clients2 для дубликатов (долгосрочное хранение)

ПРОЕКТ 2: BLE Indoor Tracking

Функционал:

  1. Indoor позиционирование (UUID/Major/Minor trilateration)
  2. Мониторинг браслетов с акселерометром (fall detection)
  3. Трекинг активов (asset tracking)
  4. Мониторинг батареи IoT устройств
  5. Отслеживание перемещений в реальном времени

Технология:

  • Радары Luckfox собирают BLE beacons
  • ClickHouse таблица blex5 для хранения
  • iBeacon протокол (UUID/Major/Minor)
  • RSSI для расчета расстояния

ПРОЕКТ 3: Construction Crew Tracking App

Функционал:

  1. NFC авторизация рабочих (табель начала смены)
  2. GPS трекинг бригадиров в реальном времени
  3. BLE маяки для определения зоны на объекте
  4. Карта с позициями всех бригад (Geographic View)
  5. Текстовая аналитика:
    • Табель рабочего времени (кто пришел/ушел/опоздал)
    • Перемещения по зонам (timeline)
    • Аномалии (вне объекта, нет связи, и т.д.)
  6. Excel экспорт табеля за месяц

Технология:

  • Android приложение с NFC reader
  • GPS + BLE hybrid positioning
  • ClickHouse таблица phones2 для хранения
  • 4 типа событий: status (GPS), beacon (BLE), 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 данные, пользователи
    • Таблицы: users, configs, clients, user_devices
  2. ClickHouse (2 инстанса):
    • Порт 8123 → таблица phones2 (мобильные приложения)
    • Порт 8124 → таблица blex5 (BLE радары), clients2 (WiFi дубликаты)
  3. OpenVPN сервер - туннели для удаленного доступа к радарам
  4. Nginx - reverse proxy для всех сервисов
  5. PHP 7.x - backend для всех эндпоинтов
  6. jQuery + DataTables + jEditable - фронтенд клиентской панели

Дополнительный функционал (детальный анализ)

1. Мобильное приложение - WebView интерфейс

Файл: webview.php

Назначение: Тестовая страница для WebView в мобильных приложениях

JavaScript Bridge:

mobile.setBootFlag()    // Установить флаг первого запуска
mobile.getId()          // Получить IMEI/Device ID

Use case:

  • Гибридное приложение (нативный код + WebView)
  • Взаимодействие между JS и Android/iOS
  • Передача Device ID с устройства

2. Видео-прокси для соцсетей

Файл: getmp4.php

Функционал:

  • Проксирование видео с Instagram/социальных сетей
  • Поддержка byte ranges (streaming)
  • Частичная загрузка (HTTP 206 Partial Content)
  • User-Agent spoofing
  • Опциональный proxy для обхода блокировок

Параметр: ?video=https://instagram.com/...video.mp4

Use case:

  • Воспроизведение видео из соцсетей в мобильном приложении
  • Обход CORS restrictions
  • Обход geo-блокировок

3. Конфигурация устройств - эволюция форматов

Формат v1 (хардкод switch-case)

Файл: ib-config.php

Формат ответа:

MAC;wifi_flag;bt_flag;bt_addr;wifi_addr;

Пример:

d8:0d:17:5e:14:de;0;1;http://192.168.200.12/gw.php;http://my-beacon.ru/wifi.php;

Проблема: Хардкод для каждого устройства в switch-case


Формат v2 (БД configs)

Файл: getfile_v2.php

Формат ответа: key=value (plain text)

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

Преимущество: Гибкая настройка через БД


4. WiFi Data Processing Pipeline

Шаг 1: Прием данных от радара

Endpoint: POST /beacon/wifi_receiver.php

Формат входных данных:

MAC радара
timestamp1 -75dBm SA:source_mac1 "SSID_name1"
timestamp2 -68dBm SA:source_mac2 "SSID_name2"
...

Пример:

ac:84:c6:42:17:90
1565183706 -75dBm SA:d8:0d:17:5e:07:94 "Home_WiFi"
1565183710 -68dBm SA:ac:15:a2:3f:ee:26 "Office_WiFi"

Шаг 2: Парсинг и валидация

  1. Разбор построчно:

    • Первая строка = MAC радара
    • Остальные = детекции
  2. Парсинг детекции:

    • timestamp - Unix timestamp
    • rssi - уровень сигнала (dBm)
    • SA:source - Source Address (MAC телефона)
    • ssid - название сети
  3. Фильтрация:

    • Проверка валидности MAC радара
    • Фильтр locally administered MAC (второй символ: 2,3,6,7,a,b,e,f)
    • Очистка SSID от спецсимволов

Логика фильтра LA bit:

$bb = $source[1];  // Второй символ MAC
if ($bb=='2' || $bb=='3' || $bb=='6' || $bb=='7' ||
    $bb=='a' || $bb=='b' || $bb=='e' || $bb=='f') {
    // Пропустить - это рандомизированный MAC
} else {
    // Сохранить - это реальный MAC
}

Назначение: iOS/Android рандомизируют MAC при сканировании WiFi для приватности

Шаг 3: Сохранение данных (dual write)

a) MySQL → таблица clients:

INSERT INTO clients (dev, ssid, source, rssi, time)
VALUES ('ac:84:c6:42:17:90', 'Home_WiFi', 'd8:0d:17:5e:07:94', '-75dBm', '2024-12-27 15:30:45')

Назначение: Краткосрочное хранение для клиентской панели (последние 100 записей)

b) ClickHouse → таблица clients2:

INSERT INTO clients2 (dev, ssid, source, devtime, rssi)
VALUES (MACStringToNum('ac:84:c6:42:17:90'), 'Home_WiFi', MACStringToNum('d8:0d:17:5e:07:94'), '2024-12-27 15:30:45', -75)

Назначение:

  • Долгосрочное хранение (годы данных)
  • Аналитика больших объемов
  • Экспорты в Excel за месяцы

MACStringToNum:

  • Конвертирует ac:84:c6:42:17:90 → число
  • Экономия места в ClickHouse
  • Быстрые сравнения

Шаг 4: Обновление Last Seen

UPDATE user_devices SET lastevent = '2024-12-27 15:30:45' WHERE mac='ac:84:c6:42:17:90'

Назначение:

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

5. BLE Data Processing Pipeline

Форматы данных от радаров

a) Text format (старые устройства):

Разделитель ;

Примеры:

ibeacon_android;ac:15:a2:3f:ee:26;FDA50693-A4E2-4FB1-AFCF-C6EB07647825;1565183706;-75;0;1000;10
my-beacon_acc;ac:15:a2:3f:ee:26;FDA50693-A4E2-4FB1-AFCF-C6EB07647825;1565183706;-65;90;0.5;-0.3;9.8;28
bracelet_acc;ac:15:a2:3f:ee:26;FDA50693-A4E2-4FB1-AFCF-C6EB07647825;1565183706;-60;0.1;-0.2;9.7
bracelet_bat;ac:15:a2:3f:ee:26;FDA50693-A4E2-4FB1-AFCF-C6EB07647825;1565183706;-55;85

Структура:

type;radio_mac;bt_mac;timestamp;rssi;field1;field2;...;majorN;minorN

Endpoint: POST /beacon/newfilebeacon.php

Таблица: ClickHouse blex5 (mac, btmac, major, minor, rssi, bat, x, y, z, time)


b) JSON format (мобильные приложения):

Endpoint: POST /beacon/ble/get4.php

Headers:

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

Обработка gzip:

$encoding = $_SERVER['HTTP_CONTENT_ENCODING'];
if ($encoding === 'gzip') {
    $data = gzdecode($rawBody);
} elseif ($encoding === 'deflate') {
    $data = zlib_decode($rawBody);
}

Таблица: ClickHouse phones2


6. File Storage System

Uploads директории:

Директория Содержимое Формат Назначение
uploads/ WiFi данные .tar.gz, .wdata.gz Архив WiFi детекций
uploads2/ WiFi данные (старые) .tar.gz Исторические данные
uploadsbeacon/ BLE данные .tar.gz, .bdata.gz Архив BLE событий
uploadsbeacon2/ BLE данные (версия 2) .bdata.gz
uploadsbeacon4/ BLE данные (версия 4) .bdata.gz
uploadsbeacon49999/ BLE данные (тест) .bdata.gz Тестовые данные
uploadsbeacon5/ BLE данные (текущая) .bdata.gz Актуальная версия

Схема работы:

  1. Радар создает локальный файл:

    • WiFi: 2024-12-27_15-30.wdata
    • BLE: 1703686200.bdata (Unix timestamp)
  2. Сжатие: gzip filename

  3. Упаковка в tar (WiFi): tar -czf archive.tar.gz file.wdata

  4. Upload на сервер: POST /beacon/upload.php

  5. Распаковка и импорт в БД:

    • Распаковать tar.gz
    • Прочитать .wdata / .bdata
    • Парсинг и INSERT в ClickHouse

Use case:

  • Offline режим радара (нет интернета)
  • Batch upload при восстановлении связи
  • Backup исторических данных

7. VPN Infrastructure

VPN Сервер

Файлы конфигов:

/beacon/vpn/      - VPN v1
/beacon/vpn2/     - VPN v2
/beacon/vpn3/     - VPN v3 (текущий)
/beacon/vpn4/     - VPN v4 (production)
/beacon/vpn5/     - VPN v5
/beacon/vpn6/     - VPN v6 (latest)
/beacon/x5vpn/    - VPN для X5 проекта

Пример конфига: 1c:3b:f3:41:a2:be.ovpn

  • Имя файла = MAC радара
  • Уникальный .ovpn для каждого устройства

Endpoint для получения VPN

Файлы:

  • get-vpn.php - основной
  • get-vpn2.php - версия 2
  • get-vpn4.php - версия 4
  • get-vpn-x5.php - для X5 проекта
  • work_get-vpn.php - рабочая версия

Запрос: GET /beacon/get-vpn.php?mac=ac:84:c6:42:17:90

Ответ: .ovpn файл (OpenVPN config)

Содержимое .ovpn:

client
dev tun
proto udp
remote beacon.e-bash.ru 1194
ca ca.crt
cert client_ac-84-c6-42-17-90.crt
key client_ac-84-c6-42-17-90.key
...

VPN Мониторинг

Файлы:

  • scanvpn.php - сканер VPN для обычных радаров
  • scanx5.php - сканер VPN для X5 проекта

Функционал:

  • Список подключенных радаров
  • VPN IP адреса (10.42.x.x)
  • Время подключения
  • Статус (online/offline)

Use case:

  • Админ видит какие радары в VPN
  • Может SSH на 10.42.61.115
  • Отладка устройства удаленно

8. REST API для iBeacon

Endpoint: ib-get-rest.php

Формат: REST API для получения BLE данных

Назначение: Альтернативный API для сторонних систем


9. Debug/Testing Features

Debug endpoints:

  1. post_debug.php - логирование POST запросов
  2. testfile.php - тестовый upload файлов
  3. test.php - общие тесты
  4. test3.php - специфичные тесты
  5. testt.php - дополнительные тесты
  6. tt.php - быстрые тесты

Лог файлы:

  • incoming_raw_data.log - сырые данные от устройств
  • incoming_raw_data2.log - backup лог
  • clickhouse_bulk.log - ошибки ClickHouse
  • foreach_debug.log - дебаг циклов обработки
  • step_log.log - пошаговое логирование
  • post.log - POST запросы
  • count.log - счетчики

10. Data Import/Export

Import в БД:

Файл: file2db.php

Назначение:

  • Импорт исторических данных
  • Миграция между версиями
  • Восстановление из backup

Export MAC addresses:

Файл: macsend.php

Назначение:

  • Генерация файла для Яндекс.Аудитории
  • Генерация файла для myTarget
  • Формат: один MAC на строку

Процесс:

  1. Выбор периода (от-до)
  2. Выбор радаров
  3. Выборка DISTINCT MAC
  4. Генерация TXT файла
  5. Download

11. Excel Export System

Файл: exel/index2.php

Библиотека: PHPExcel-1.8

Функционал:

  • Экспорт WiFi детекций в .xlsx
  • Фильтр по устройствам (мультиселект)
  • Фильтр по периоду (datepicker от-до)
  • Форматирование таблицы
  • Headers с названиями колонок

Колонки в Excel:

  1. № п/п
  2. Радар (MAC)
  3. Время детекции
  4. MAC устройства
  5. SSID (сеть которую искал)
  6. RSSI (уровень сигнала)

Use case:

  • Скачать за месяц все детекции
  • Анализ в Excel (сводные таблицы, графики)
  • Отчеты руководству
  • Аудит данных

12. Дополнительные фичи

a) Календарь с подсветкой активных дат

Функция: my_calendar($fill)

Параметр: Массив дат с данными

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

  • Даты с данными → желтый фон
  • Текущая дата → жирный шрифт
  • Клик на дату → фильтр данных

b) Выбор радара

Интерфейс:

Список 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

SESSION переменные:

  • $_SESSION['mac'] - выбранный радар
  • $_SESSION['login-email'] - текущий пользователь
  • $_SESSION['login-password'] - пароль (!)

c) Множественные версии endpoints

Причина наличия версий:

  • Разные версии прошивок радаров
  • Эволюция протоколов
  • Backward compatibility
  • A/B тестирование

Примеры:

  • getfile.php, getfile_v2.php, getfile_v22.php
  • getfilebeacon.php → v2 → v3 → v5 → v6 → v7
  • newfilebeacon.php → newfilebeacon2 → newfilebeacon3
  • get-vpn.php → get-vpn2 → get-vpn4

Полный список таблиц БД

MySQL (база wifi)

  1. users - клиенты системы

    • login, password (plain text)
    • device (MAC через ;)
    • till (дата оплаты до)
    • dopinfo, paidTill
  2. configs - конфигурация радаров

    • mac (уникальный)
    • wf_client_ssid, wf_client_psk
    • ovpn_flag, ovpn_addr
    • wf_flag, wf_addr
    • bt_flag, bt_addr
    • fw_flag, fw_addr
    • reboot_flag, ip
    • time (last update)
  3. clients - WiFi детекции (краткосрочные)

    • dev (MAC радара)
    • source (MAC телефона)
    • ssid (название сети)
    • rssi (уровень сигнала)
    • time (timestamp)
  4. user_devices - связь users ↔ devices

    • mac (MAC радара)
    • name (название)
    • user_id (FK → users)
    • max1000 (лимит: 0=нет, 1=1000 записей)
    • segment (для Yandex.Аудитории)
    • lastevent (последнее событие)

ClickHouse

База: wifi_analytics

  1. clients2 - WiFi детекции (долгосрочные)
    • dev (UInt64 - MAC радара как число)
    • source (UInt64 - MAC телефона)
    • ssid (String)
    • devtime (DateTime)
    • rssi (Int8)

База: ble_tracking

  1. blex5 - BLE события от радаров

    • mac (UInt64 - MAC радара)
    • btmac (String - BT MAC устройства)
    • major (UInt16)
    • minor (UInt16)
    • rssi (Int8)
    • bat (UInt8 - батарея)
    • x, y, z (Float32 - акселерометр)
    • time (UInt32 - Unix timestamp)
  2. phones2 - события от мобильных приложений

    • mac (String - PHONE_UUID)
    • nfc_id (String)
    • type (Enum: status, beacon, accel, nfc)
    • btmac (String - BT устройства)
    • major, minor (UInt16)
    • rssi (Int8)
    • btuid (String - beacon UUID)
    • lat, lon, alt, hdop (Float64 - GPS)
    • perm (String - разрешения)
    • bat (UInt8)
    • x, y, z (Float32 - акселерометр)
    • acc_temp (Float32)
    • acc_bat (UInt8)
    • provider (String - GPS provider)
    • power_perm (String)
    • time (UInt32)

Специфичные проекты внутри Legacy

X5 Retail Group Integration

Файлы:

  • get-vpn-x5.php
  • scanx5.php
  • x5vpn/ (директория)

Специфика:

  • Отдельная VPN сеть для X5
  • Специальные конфиги
  • Изолированный мониторинг

Назначение: Крупный ритейлер - торговые сети X5 (Пятёрочка, Перекрёсток)