Каталог Поиск 0 Сравнить 0 Закладки 0 Корзина Войти
Каталог
105082, Москва, ул. Фридриха Энгельса, 75с21, БЦ Бауманский ИТКОЛ
Пн - Пт: с 09-00 до 18-00 Сб: с 10-00 до 18-00 Вс: выходной
Страницы: 1
RSS
Unifi API, пожалуйста, обнови статистику., UniFi Network
 
Всем привет! Недавно я начал использовать unifi API, чтобы получить /api/s/<site>/stat/sta — этот запрос возвращает мне JSON-массив со всеми подключёнными устройствами. Но тут есть основная проблема: данные могут быть устаревшими. Я обращаюсь к этим данным, чтобы понять, когда устройства подключаются к сети (чтобы проверить, не кто ли-то не подделывает строку запроса site), и в большинстве случаев устройство просто не находится в /sta, потому что unifi ещё не обновил информацию. Есть ли способ гарантировать, что запрос статистики unifi отдаст актуальные и свежие данные?
 
Я знал о этом классе, когда впервые начал использовать Unifi три года назад, но тогда у него было очень мало функций (базовые данные в формате JSON и некоторые настройки для гостей). Приятно знать, что его обновили и теперь он гораздо универсальнее! Там даже есть классные радио-настройки. Скорее всего, я всё равно продолжу использовать cURL, ведь зачем изобретать велосипед дважды.
 
@angi_g

Не заметил, что твой исходный пост был настолько старым... Ты прав насчёт пути API, но ещё проще получить данные из API, используя класс клиента API, который входит в комплект моего инструмента Unifi API browser. Вот этот класс: https://github.com/malle-pietje/Unifi-API-browser/blob/master/phpapi/class.unifi.php
 
Забавно, как мои старые посты постоянно «оживают». В итоге решение было простым: я с помощью инструментов анализа сети в Chrome разобрал API-запрос. Оказалось, что /api/s/default/stat/guest содержит все данные о гостях с их текущим использованием на момент анализа. Естественно, пришлось увеличить промежуток между выполнениями cron с 1 минуты до 5, что, кстати, лучше для сервера.

Для тех, кто интересуется, как делать PHP curl-запросы к Unifi API, вот пример кода:

```php
$username = 'YOUR UNIFI USERNAME';
$password = 'YOUR UNIFI PASSWORD';
$baseurl = 'https://yourwebsite.com:8443'; // Если используете AWS, держите этот порт открытым для внутренних вызовов
$minutes = 60;

$ch = curl_init();
$cookie_file_path = "unifi_cookie.txt";

$fp = fopen($cookie_file_path, "wb");
fclose($fp);

curl_setopt($ch, CURLOPT_URL, $baseurl . '/api/login');
$data = json_encode(array("username" => $username, "password" => $password));
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSLVERSION, 1); // Убедитесь, что стоит V1, потому что V3 имеет проблемы с безопасностью
curl_setopt($ch, CURLOPT_POST, 1);
$contents = curl_exec($ch);

curl_setopt($ch, CURLOPT_URL, $baseurl . 'YOUR API CALL'); // Если хотите узнать API-вызовы, ищите Unifi API или разбирайте их через инструменты анализа сети браузера
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Cache-Control: no-cache'));
$contents = curl_exec($ch);

curl_setopt($ch, CURLOPT_URL, $baseurl . '/logout');
curl_setopt($ch, CURLOPT_POST, 1);
curl_exec($ch);

// Внимание: переменная $contents содержит ответ сервера!
curl_close($ch);
```
 
@angi_g  

Статистика никогда не бывает полностью в реальном времени. Лучше всего посмотреть другие конечные точки API или наборы данных, чтобы понять, где ещё можно найти эту информацию. По моему мнению, стоит проверить события или сессии.
 
Можешь подробнее рассказать, что именно ты делаешь или отправляешь, чтобы получить эту json-информацию?
Страницы: 1
Читают тему (гостей: 1)