LEGACY_FEATURES.md 44 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 данные, пользователи
    • Таблицы: 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 (Пятёрочка, Перекрёсток)