Забавно, как мои старые посты постоянно «оживают». В итоге решение было простым: я с помощью инструментов анализа сети в 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);
```