Каталог Поиск 0 Сравнить 0 Закладки 0 Корзина Войти
Каталог
105082, Москва, ул. Фридриха Энгельса, 75с21, БЦ Бауманский ИТКОЛ
Пн - Пт: с 09-00 до 18-00 Сб: с 10-00 до 18-00 Вс: выходной
Страницы: 1
RSS
Смена имени устройства с помощью PHP и MongoDB, UniFi Network
 
Я хотел видеть всех пользователей по их настоящим именам, а не по этим глупым названиям устройств. PHP-скрипты для MongoDB приходят на помощь.  
Примечание: у вас должен быть установлен плагин mongodb для PHP, да, это значит, что придется менять php.ini в Apache.

Как я это делаю: когда пользователь завершает покупку, его перенаправляют на скрипт, который записывает его MAC-адрес, имя устройства и ID чека о покупке. Потом я запускаю функцию, которая получает имя устройства и добавляет к нему псевдоним (его настоящее имя).

<?php  
   $m = new MongoClient("mongodb://localhost:27117"); // подключаемся и выбираем нужную БД  
   $db = $m->ace;  
   $collection = $db->user;  
   $cursor = $collection->find();  

   $newdata = array('$set' => array("name" => "NEW NAME")); // Имя, на которое хотите изменить псевдоним  
   $collection->update(array("hostname" => "DEVICE NAME"), $newdata); // Если у вас есть hostname или MAC устройства, так и меняете псевдоним  

   foreach($cursor as $document){ // Выводит все данные, можно закомментировать, когда надо  
       print_r($document);  
   }  
?>

Удачной охоты!
 
Ух, я перестал пользоваться Robomongo, так как теперь работаю с удалённой мульти-серверной конфигурацией (так что не могу сказать). Очень советую использовать администратора genghis mongodb-php.
 
Привет, Pitchdown. Извини, я думал, ты посмотрел мой код. Я редактирую значение name в коллекции user. Но смена алиаса устройства не решит проблему, с которой сталкиваются все.

Похоже, баг возникает из-за того, что некоторые записи в базе событий не содержат значение hostname. Это значит, что Unifi не всегда передаёт hostname для целей логирования. Предлагаю сделать следующее, чтобы исправить ситуацию (замечу, я этого не тестировал, поэтому не могу гарантировать эффективность):

- Написать PHP-скрипт
- Сделать mongocursor с условием ("hostname" => array('$exists' => false))
- Пройтись по всем элементам курсора и для каждого сделать findOne, сравнивая event ap с подключённым ap
- Обновить массив event
- Запустить это в cronjob, как php-скрипт или через lynx, если хочешь поострее.
 
Хотя было бы вполне возможно исправить это с помощью скрипта и проверки через регулярное выражение в каком-нибудь архиве статистики, честно говоря, мне плевать на такие вещи. Я сделал свою собственную систему администрирования, которая гораздо лучше подходит под мои нужды, чем система Unifi.
 
Странная вещь, которую я вижу в MongoDB — переменной с именем «name» нет. В этой базе есть «user». Ты имеешь в виду «user» вместо «name»? (см. вложение)
 
Чтобы было яснее. У меня те же проблемы, что описаны в этой теме: https://community.ui.com/questions/0a9104ca-6853-4411-a2d5-dbe8b6caf816#comment/3024d0a8-8dc5-4a5f-bd0d-a40799a265aa. Можно ли исправить это изменение в mongodb так, как вы описали? Спасибо.
 
Привет, Angi, спасибо за твои ответы. Можно ли также вручную изменить переменную name через robomongo? Нужно ли менять именно переменную «name» или эту? Спасибо.
 
И ещё небольшое предупреждение: последний mongo-driver не умеет правильно работать с длинными целыми числами в длинном формате (теперь он их усечёт), поэтому советую пока принудительно инициализировать их с помощью нативных mongo-long int, пока это не исправят.
 
Привет, pitchdown! Выполнить это очень просто — просто используй скрипт с любым веб-сервером (например, apache).

Вопрос: Подробное описание?  
Ответ: Это просто скрипт, который изменяет записи в базе данных Unifi, а именно имя устройства. То есть, когда кто-то подключается к интернету, вместо отображения «Android-sd7df8t72yui3uy8d6782ygh3gruydts» показывается «John Smith». Я часто использую такие скрипты.

Вопрос: Исправит ли это изменение в Mongo имя устройства, когда клиент отключается?  
Ответ: Сейчас я уже не изменяю hostname, так как смена hostname устарела начиная с версии >v4 (имя теперь обновляется при изменении статуса устройства, как ты и говорил). Сейчас можно менять переменную name (которая похожа на псевдоним), поэтому я бы изменил следующую строку:

$collection->update(array("hostname" => "DEVICE NAME"),$newdata);

на

$collection->update(array("name" => "DEVICE NAME"),$newdata);

Обрати внимание, что "DEVICE NAME" — это строковая переменная.
 
Это изменение в Mongo также исправит смену имени при отключении клиента?
 
Привет, angi, у тебя есть для меня более подробное описание? Спасибо!
 
Привет, Анги, у тебя есть более подробное описание того, как пользоваться этим скриптом? Он будет работать и на Windows-системе? Спасибо.
 
Очень полезно и предельно просто! Спасибо, что поделились.
Страницы: 1
Читают тему (гостей: 1)