# 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 через `
` (визуально столбиком) 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):** ```json [ { "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