|
|
@@ -0,0 +1,852 @@
|
|
|
+# 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):**
|
|
|
+```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
|