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

Подробности: Это, честно говоря, вопрос для новичка (сразу извиняюсь), но мой поиск в интернете только частично решил проблему, и, надеюсь, какой-нибудь опытный пользователь подскажет, куда копать дальше.

Суть такая. У меня есть отдельный WLAN для устройств детей, который сейчас я вручную отключаю и включаю через GUI контроллера, потому что функция расписания слишком жёсткая для моего случая (время отключения слишком часто меняется). Хотелось бы автоматизировать только включение этого WLAN. Хотя я видел упоминания про «Controller API», найти гайд или инструкции мне не удалось. Зато наткнулся на набор команд, которые выглядят многообещающе:

unifi_api /upd/wlanconf/<Id> '{"enabled": false}'

unifi_api /upd/wlanconf/<Id> '{"enabled": true}'

Я хочу проверить, правильно ли понял, как это использовать (и исправьте, если нет). Моя версия: я

- вхожу в контроллер под админом

- использую вторую команду для включения WLAN

Если это так — тогда можно будет написать скрипт, который будет запускать эту команду в нужное время каждый день, и проблема решена. Пока проверить не удалось, потому что я ещё не могу зайти по ssh в контроллер, который у меня запущен как docker-контейнер на Synology NAS.

Вопросы: Это та команда, которую нужно использовать (и в правильных ли условиях)? И как тогда получить доступ к CLI контроллера, если он в docker-контейнере (порт веба очевидно не подойдёт, а порт 22 дает доступ только к NAS)?
 
После того, как всё отлично работало целый год, я сменил сервер на Raspberry Pi (с использованием Raspbian). Установка контроллера прошла без проблем, и всё, что не связано с автоматикой, работает отлично, но вдруг мой автоматический скрипт перестал работать. Я проверил всё, что казалось очевидным (по крайней мере, на мой взгляд): все файлы исполняемые и свойство _id, которое я использую, осталось таким же (а как иначе, ведь я брал бэкап при установке контроллера в новом окружении). Но теперь я получаю ту же ошибку, что и когда не использовал свойство id, а в командной строке подставлял имя 'KidsWifi':

unifi_api /upd/wlanconf/KidsWifi '{"enabled": false}'

то есть:

{"meta":{"rc":"error","msg":"api.err.LoginRequired"},"data":[]}

Что я упускаю? @slooffmaster, есть мысли?
 
@knyckis

Рад это слышать!😀
 
Сэр, вы спасли мой день — всё сработало как по волшебству (и при этом выдало кучу вывода в терминал ;-)! Автоматизация, я иду!
 
@knyckis

Параметром, который нужно передавать в API маршрут, является не имя WLAN, а свойство «_id». Его можно найти либо, просмотрев вывод API через инструменты разработчика в браузере, либо используя мой инструмент для просмотра API.
 
Я так и не получил никаких ответов или советов, возможно, потому что был слишком новичком и не знал, что спрашивать. Но теперь я вернулся к этому вопросу, немного покопался, и, может быть, теперь смогу задать более конкретный вопрос и, надеюсь, получить подсказки от вас, профи.

Похоже, что «команды», которые я нашёл в вышеупомянутой ветке, — это вызов функции в shell-скрипте unifi api под названием «unifi_sh_api». Я скачал этот скрипт на сервер, сделал его исполняемым и попытался запустить. Но, похоже, ничего не работает.

Вот что я делаю:

Сначала определяю переменные окружения, которые были закомментированы в api shell-скрипте:  
$ username=_my_username  
$ password=_my_password  
$ baseurl=https://unifi:8443  
$ site=default  
$ [ -f ./unifi_sh_env ] && . ./unifi_sh_env

Потом я «источникую» (source) скрипт:  
$ source /directory_for_the_script/unifi_sh_api  

Думал, теперь всё готово, чтобы вызывать функцию и решать задачи. Но когда я пишу:  
$ unifi_api /upd/wlanconf/KidsWifi '{ "enabled": false }'  

(«KidsWifi» — имя Wi-Fi сети моих детей), получаю только сообщение об ошибке:  
{ "meta": { "rc": "error", "msg": "api.err.LoginRequired" }, "data": [] }

Похоже, что система думает, что я не вошёл в систему. Окей, подумал я, тогда надо сначала вызвать функцию логина. Но и это не сработало.  

Если выполнить ту же последовательность, что и выше, но перед вызовом unifi_api вызвать unifi_login, происходит следующее:  
$ unifi_login  
{ "meta": { "rc": "ok" }, "data": [] }
$ unifi_api /upd/wlanconf/KidsWifi '{ "enabled": false }'  
{ "meta": { "rc": "error", "msg": "api.err.Invalid" }, "data": [] }

Первый вывод в терминале выглядит нормально, если считать, что «rc":"ok"» — это ответ «всё хорошо», как и предполагалось.  

Но даже после этого вызов unifi_api не меняет состояние Wi-Fi (в данном случае не выключает его), а просто возвращает новую ошибку.  

Есть идеи, где я тут ошибаюсь и что с этим делать?
Страницы: 1
Читают тему (гостей: 1)