# 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 через `
` (визуально столбиком) 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. **Рабочие** - носят персональные бейджи (в каске или на одежде) **Бейдж рабочего (производство MyBeacon):** - **NFC метка** - для авторизации в начале смены - **iBeacon** - постоянная трансляция BLE сигнала - **UUID/Major/Minor** - уникальная идентификация каждого рабочего - **Батарея** - автономная работа несколько месяцев - **Форм-фактор** - карточка-бейдж или модуль для каски ### Рабочий процесс #### Утро: Авторизация рабочих (NFC) **Сценарий:** 1. Рабочий приходит на объект (например, 8:00) 2. Бригадир открывает приложение на смартфоне 3. Рабочий прикладывает свой **бейдж** к смартфону (NFC tap) 4. Приложение читает NFC_ID с бейджа 5. Отправляет событие на сервер: ```json { "TYPE": "nfc", "PHONE_UUID": "foreman_001", "NFC_ID": "worker_12345", "TIME": 1565169600000 } ``` 6. Сервер регистрирует: "Рабочий #12345 начал смену в 8:00" **Польза:** - Учет рабочего времени (кто когда пришел) - Автоматическая табельная - Замена бумажных журналов - Бейдж невозможно передать другому (привязан к человеку) #### День: Отслеживание перемещений (BLE + GPS) **Принцип работы:** 1. **Рабочие носят бейджи** - каждый бейдж постоянно транслирует iBeacon сигнал 2. **Смартфон бригадира** сканирует BLE → ловит beacons от бейджей рабочих 3. **Смартфон также собирает** свою GPS позицию 4. **Отправка на сервер** - GPS бригадира + список обнаруженных beacons **Что собирает приложение:** **1. GPS координаты бригадира (continuous)** - Latitude, Longitude, Altitude - Accuracy (HDOP) - Provider (GPS/Network/Fused) - Частота: каждые 30-60 секунд **2. BLE beacons от рабочих (continuous scanning)** - Сканирование iBeacon от бейджей рабочих в зоне видимости - UUID (общий для всех MyBeacon бейджей) - Major (ID объекта/бригады) - Minor (ID конкретного рабочего) - RSSI (расстояние до рабочего: -40 = очень близко, -80 = далеко) - Частота сканирования: каждые 10-30 секунд **3. Системная информация** - Разрешения приложения (location, bluetooth) - Уровень батареи телефона - Настройки энергосбережения **Пример бейджей рабочих на объекте:** ``` Бейдж #1: UUID=FDA50693-A4E2-4FB1-AFCF-C6EB07647825, Major=1 (бригада), Minor=1 (Иванов И.И.) Бейдж #2: UUID=FDA50693-A4E2-4FB1-AFCF-C6EB07647825, Major=1 (бригада), Minor=2 (Петров П.П.) Бейдж #3: UUID=FDA50693-A4E2-4FB1-AFCF-C6EB07647825, Major=1 (бригада), Minor=3 (Сидоров С.С.) Бейдж #4: UUID=FDA50693-A4E2-4FB1-AFCF-C6EB07647825, Major=1 (бригада), Minor=4 (Козлов К.К.) Бейдж #5: UUID=FDA50693-A4E2-4FB1-AFCF-C6EB07647825, Major=1 (бригада), Minor=5 (Смирнов А.А.) ``` **Логика отслеживания:** - Смартфон бригадира ловит beacons от рабочих рядом с ним - RSSI показывает расстояние: - RSSI > -50 → рабочий очень близко (в пределах 2-5 метров) - RSSI -50..-70 → рабочий рядом (5-15 метров) - RSSI < -70 → рабочий далеко (15+ метров) - Если beacon перестал ловиться → рабочий ушел далеко или покинул объект ### Формат отправки: **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 } ] ``` **Сохранение:** ClickHouse таблица `phones2` ### Серверная аналитика #### 1. Аналитика на карте (Geographic View) **Что видит менеджер:** - Карта объекта (Google Maps / OpenStreetMap) - GPS-маркеры с позициями **бригадиров** в реальном времени - Иконки бригадиров разного цвета (каждый PHONE_UUID свой цвет) - Размер иконки зависит от количества рабочих рядом - Последнее обновление локации (timestamp) **Интерактив:** - Клик на маркер (бригадир) → показать: - **Бригадир:** Иван Иванов (PHONE_UUID: foreman_001) - **GPS позиция:** 55.7558, 37.6173 (ЖК "Новый город", стройплощадка) - **Время:** 14:35:22 - **Батарея телефона:** 67% - **Рабочие рядом с бригадиром (по BLE):** - ✅ Петров П.П. (Minor=2, RSSI=-45, 3м) - очень близко - ✅ Сидоров С.С. (Minor=3, RSSI=-62, 10м) - рядом - ✅ Козлов К.К. (Minor=4, RSSI=-75, 18м) - далеко - ❌ Смирнов А.А. (Minor=5) - НЕ ВИДЕН (ушел?) - **Статус:** 3 из 4 рабочих в зоне видимости **Use case:** - Менеджер видит что бригадир №1 находится по GPS на объекте - Рядом с ним (по BLE) 3 рабочих из 4 - Один рабочий (Смирнов) не виден → возможно ушел - Можно позвонить бригадиру или проверить в табеле когда Смирнов в последний раз сканировался **Логика определения "рядом":** - GPS показывает где **бригадир** - BLE beacons показывают каких **рабочих** бригадир "видит" - Все рабочие носят бейджи с iBeacon - Смартфон бригадира сканирует beacons → шлет на сервер список - На карте видим: "Бригадир здесь (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 │ - │ - │ - │ ← не пришел └──────────────┴───────────┴───────────┴────────┘ ``` **Перемещения бригадира и состав бригады:** ``` Бригадир: Иван Иванов (foreman_001) Дата: 2025-12-28 08:00-09:30 → GPS: 55.7558, 37.6173 (Корпус А) Рабочие рядом: Петров (RSSI -45), Сидоров (RSSI -50), Козлов (RSSI -55), Смирнов (RSSI -60) 09:30-12:00 → GPS: 55.7560, 37.6180 (Корпус Б) Рабочие рядом: Петров (RSSI -40), Сидоров (RSSI -48), Козлов (RSSI -70) ⚠ Смирнов не виден с 10:15 12:00-13:00 → GPS: 55.7555, 37.6175 (Бытовка) Рабочие рядом: Петров (RSSI -35), Сидоров (RSSI -38) (обед) ⚠ Козлов не виден ⚠ Смирнов не виден 13:00-15:30 → GPS: 55.7562, 37.6185 (Кровля) Рабочие рядом: Петров (RSSI -42), Сидоров (RSSI -55), Козлов (RSSI -58) ⚠ Смирнов не виден (ушел с объекта?) 15:30-18:00 → GPS: 55.7558, 37.6173 (Корпус А) Рабочие рядом: Петров (RSSI -45), Сидоров (RSSI -52), Козлов (RSSI -60) ⚠ Смирнов не виден весь день с 10:15 ``` **Аномалии:** ``` ⚠ Бригадир foreman_002 вне объекта 14:20-15:45 (GPS: 55.8000, 37.7000 - 5км от объекта) ⚠ Бригадир foreman_003 не обновлял локацию 2 часа (батарея разрядилась? приложение закрыто?) ⚠ Рабочий Смирнов А.А. (Minor=5): NFC сканирован в 8:00, но beacon не виден с 10:15 → либо ушел с объекта, либо бейдж разрядился ⚠ Рабочий Козлов К.К. (Minor=4): не виден с 12:00 до 13:00 (возможно обед отдельно) ⚠ Бригадир foreman_005: видит 7 рабочих, но по NFC зарегистрировано только 5 → возможно чужие бейджи (другая бригада рядом) ``` **Excel-экспорт:** - Табель за месяц (все бригады) - Перемещения по зонам - Рабочие часы по дням - Аномалии и опоздания ### Преимущества перед бумажным журналом **Было (бумага):** 1. Бригадир вручную пишет кто пришел 2. Может подделать (вписать за отсутствующего) 3. Нет контроля где бригада находится 4. Нет данных о перемещениях рабочих 5. Нет контроля присутствия в течение дня (пришел → ушел незаметно) 6. Сложно сводить статистику **Стало (приложение + бейджи):** 1. **NFC бейдж** - невозможно подделать, физическая привязка к человеку 2. **GPS бригадира** - точная локация на карте в реальном времени 3. **BLE beacons от бейджей** - контроль присутствия рабочих рядом с бригадиром 4. **Автоматический табель** в ClickHouse (кто пришел/ушел/опоздал) 5. **Контроль в течение дня** - если рабочий ушел, его beacon перестанет ловиться 6. **Карта с позициями всех бригад** - менеджер видит всю картину 7. **Отчеты одной кнопкой** - табель, перемещения, аномалии ### Ключевые преимущества бейджа MyBeacon: **Двойная функция (NFC + iBeacon):** 1. **NFC** - авторизация утром (tap на смартфон) 2. **iBeacon** - постоянное отслеживание присутствия (BLE сигнал) **Автономность:** - Батарея CR2032 (или CR2477) - Работа 6-12 месяцев без замены - Индикация низкого заряда (опционально) **Надежность:** - Защита от воды/пыли (IP65+) - Ударопрочный корпус - Работа при -20°C до +60°C **Форм-факторы:** - Карточка-бейдж (носится на шнурке) - Модуль для каски (крепление на липучке/клипсе) - Браслет (для условий где бейдж неудобен) --- ### Техника сбора данных: 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. **Бейджи MyBeacon** (NFC + iBeacon) для каждого рабочего 2. **NFC авторизация** рабочих утром (tap бейджа на смартфон бригадира) 3. **GPS трекинг бригадиров** в реальном времени (позиция на карте) 4. **BLE сканирование** бейджей рабочих (контроль присутствия рядом с бригадиром) 5. **Карта с позициями всех бригад** (Geographic View): - GPS маркеры бригадиров - Список рабочих рядом с каждым бригадиром (по BLE) - RSSI-based расстояние до каждого рабочего 6. **Текстовая аналитика:** - Табель рабочего времени (кто пришел/ушел/опоздал) - Перемещения бригадира (GPS timeline) - Состав бригады в каждый момент (кто был рядом по BLE) - Аномалии (вне объекта, рабочий исчез, чужие бейджи) 7. **Excel экспорт** табеля за месяц **Технология:** - **Бейджи рабочих:** NFC (NTAG213/215) + iBeacon (Nordic nRF51/nRF52) - **Android приложение** бригадира с NFC reader + BLE scanner - **GPS позиция** бригадира → видим где бригада - **BLE beacons от бейджей** → видим каких рабочих бригадир "видит" - **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:** ```javascript 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:** ```php $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`:** ```sql 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`:** ```sql 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 ```sql 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:** ```php $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 2. **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) 3. **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 (Пятёрочка, Перекрёсток)