MyBeacon Legacy - Полный функционал
Архитектура системы
Три основных компонента:
- WiFi Analytics (
/beacon/wifi-radar2/) - панель аналитики для клиентов
- BLE Tracking (
/beacon/ble/) - система indoor позиционирования
- 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)
Отчет "Конверсия клиентов"
Метрики:
Всего клиентов за день
- Уникальные MAC-адреса
- Query:
COUNT(DISTINCT source)
Зашли в магазин
- Фильтр:
rssi > -80 (близко к радару)
- Логика: сильный сигнал = внутри помещения
Провели более 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:
- Радары засекли 1000 человек в магазине
- Выгрузить их MAC в Яндекс.Аудиторию
- Настроить ретаргетинг рекламу на этих людей
- Они увидят рекламу магазина в мобильных приложениях
Формат выгрузки: 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 - Админская панель
Навигация:
- Устройства (index.php) - список радаров с конфигурацией
- Добавление (adddev.php) - добавить клиента с устройствами
- Клиенты (clients.php) - список клиентов
- Инструкция (info.php) - документация
- VPN - сканер VPN подключений (внешняя ссылка)
1. Устройства (index.php)
Таблица устройств:
Колонки (все РЕДАКТИРУЕМЫЕ inline):
- # - порядковый номер
- MAC-адрес - не редактируется
- время - last seen, не редактируется
- wf_ssid - WiFi SSID для подключения радара к сети ✏️
- wf_psk - WiFi пароль ✏️
- ovpn_flag - OpenVPN включен (0/1) ✏️
- ovpn_addr - URL для получения VPN конфига ✏️
- wf_flag - WiFi сбор включен (0/1) ✏️
- wf_addr - URL для отправки WiFi данных ✏️
- bt_flag - BLE сбор включен (0/1) ✏️
- bt_addr - URL для отправки BLE данных ✏️
- fw_flag - Firmware update включен (0/1) ✏️
- fw_addr - URL для получения прошивки ✏️
- reboot_flag - Флаг перезагрузки (0/1) ✏️
- 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)
Таблица клиентов:
Колонки (только чтение):
- # - порядковый номер
- Логин - email клиента
- Пароль - plain text (!)
- Устройства - список MAC через
<br> (визуально столбиком)
- Оплачено до - ссылка на редактирование даты
- Информация - контакты, юрлицо, телефон
- Оплата - текстовый статус оплаты
Функционал:
- Просмотр всех клиентов
- Клик на дату → редактирование срока оплаты (
tilledit.php)
- DataTables поиск/сортировка
Use case:
- Проверить какие устройства у клиента
- Посмотреть статус оплаты
- Продлить срок действия
3. Добавление устройств (adddev.php)
Форма создания клиента:
Поля:
- Логин - required, уникальный email
- Пароль - required, plain text
Список устройств - textarea, MAC через ;
Пример ввода:
d8:0d:17:5e:07:94;ac:84:c6:42:17:90;
Информация о клиенте - textarea
Юрлицо, имя, телефон, email
Оплата - textarea (текст)
До какого числа оплачены устройства
Оплачен - checkbox
- ✅ Checked → max1000 = 0 (полный доступ)
- ❌ Unchecked → max1000 = 1 (лимит 1000)
Логика создания:
Валидация:
- Логин, пароль, устройства - обязательны
- Проверка: логин уже занят?
Создание пользователя:
- INSERT в таблицу
users
- till = текущая дата
Создание связей устройств:
- Парсинг 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м |
На улице |
Применение в отчетах:
Зашли в магазин: rssi > -80
- Телефон близко к радару
- Скорее всего внутри помещения
Провели более 20 минут: rssi > -90
- Очень близко, долго в радиусе
- Не просто прошел, а задержался
Ограничения:
- Время не измеряется напрямую
- Используется эвристика через силу сигнала
- Работает только если радар ВНУТРИ магазина
Системы ретаргетинга
Яндекс.Аудитория
Как работает:
Выгрузка MAC:
- Админ выбирает период (например, за месяц)
- Система генерирует файл с уникальными MAC
- Формат: один MAC на строку
Загрузка в Яндекс.Аудиторию:
- Создание нового сегмента
- Upload файла с MAC
- Яндекс матчит MAC → GAID/IDFA
Настройка рекламы:
- Создание кампании в Яндекс.Директ
- Таргетинг на этот сегмент
- Показ рекламы на мобильных устройствах
Use case:
День 1: Радар засек 500 человек в магазине
День 2: Выгрузить 500 MAC в Яндекс
День 3: Запустить рекламу "Скидка 20% только сегодня!"
День 4: Эти 500 человек видят рекламу в Яндекс.Браузере
myTarget
То же самое, но для:
- VK.com
- Одноклассники
- Mail.ru приложения
Формат: Аналогичный (файл с MAC)
BLE Indoor Positioning - Use Cases
Торговый центр
Сценарий:
- Посетитель заходит в ТЦ
- Открывает мобильное приложение ТЦ
- Приложение сканирует BLE beacons
- Система определяет:
- Этаж (по 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)
Склад / Логистика
Сценарий:
- Сотрудник носит браслет с акселерометром
- Оборудование помечено BLE метками
- Радары отслеживают всё в реальном времени
Данные:
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)
Больница / Клиника
Сценарий:
- Пациенты носят браслеты
- NFC метки на дверях палат/процедурных
- 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
Устройство парсит и применяет конфиг:
- Подключается к WiFi (wf_client_ssid + wf_client_psk)
- Если ovpn_flag=1 → скачать VPN конфиг
- Если wf_flag=1 → начать отправку WiFi данных на wf_addr
- Если bt_flag=1 → начать отправку BLE данных на bt_addr
- Если reboot_flag=1 → перезагрузиться
- Если 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
Логика:
- Устройство проверяет
fw_flag в конфиге
- Если
fw_flag=1 → GET запрос на fw_addr
- Сервер отдает
.bin файл (прошивка)
- Устройство проверяет MD5
- Записывает прошивку в flash
- Перезагружается
Файлы прошивок:
/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:
- ✅ WiFi Probe Requests аналитика - основная фича
- ✅ Отчеты с конверсией (прошли мимо / зашли / задержались)
- ✅ Экспорт для ретаргетинга (Яндекс, myTarget)
- ✅ BLE indoor positioning с мобильными приложениями
- ✅ Акселерометр tracking (падения, активность)
- ✅ NFC чек-ины (зоны, комнаты)
- ✅ GPS outdoor tracking
- ✅ OpenVPN туннели для удаленного доступа
- ✅ OTA firmware updates
- ✅ Inline editing конфигов устройств
- ✅ Excel export детекций
- ✅ ClickHouse для BLE данных
- ✅ MySQL для WiFi данных и конфигов
Что УБИРАЕМ в новом:
- ❌ OpenVPN туннели - не требуется по ТЗ
- ❌ Inline editing - опасно, заменить на модальные окна
- ❌ Ретаргетинг экспорты - неактуально (GDPR, устаревшая техника)
- ❌ WiFi Probe Requests - современные iOS/Android рандомизируют MAC
Что ОСТАВЛЯЕМ/УЛУЧШАЕМ:
- ✅ BLE indoor tracking - актуально
- ✅ GPS + BLE гибрид - indoor + outdoor
- ✅ Акселерометр - для wearables
- ✅ NFC чек-ины - для access control
- ✅ ClickHouse - для аналитики событий
- ✅ Device management - с RBAC и multi-tenant
- ✅ OTA updates - но через защищенный API
- ✅ Отчеты и дашборды - улучшенные визуализации
Итого: Полный список фич Legacy проекта
WiFi Analytics (4 страницы):
- Онлайн мониторинг детекций
- Список уникальных MAC-адресов
- Отчеты с конверсией (воронка клиентов)
- Экспорт MAC для ретаргетинга
BLE Tracking:
- Indoor позиционирование (UUID/Major/Minor)
- GPS outdoor трекинг
- Акселерометр мониторинг
- NFC чек-ины
- Статус батареи устройств
- Разрешения приложений
- Комбинированные события (status+beacon+accel+nfc)
Device Management (3 страницы):
- Список устройств с inline редактированием (15 полей)
- Управление клиентами и оплатой
- Добавление клиентов с устройствами
API для устройств:
- Получение конфигурации
- Отправка WiFi детекций
- Отправка BLE событий
- Получение VPN конфига
- Скачивание firmware
- Heartbeat/статус
Аналитика:
- Календарь для выбора периода
- Фильтр по устройствам
- Круговые диаграммы (pie charts)
- Excel экспорт с фильтрами
- Поиск/сортировка DataTables
- RSSI-based геолокация (близко/далеко)
Инфраструктура:
- MySQL для конфигов и WiFi данных
- ClickHouse для BLE событий (phones2, blex5)
- Redis (упоминался, не видел использования)
- OpenVPN сервер
- Nginx reverse proxy
- PHP 7.x backend
- jQuery + DataTables + jEditable frontend