Появилась у меня задача небольшая. Удаленно перезагрузить точки доступа, которые запитаны от PoE коммутатора Mikrotik CSS106-1G-4P-1S. Через веб-интерфейс это сделать не сложно, хоть и не очень удобно реализовано. В RouterOS есть опция blink, которая передергивает питание. В SwitchOS Lite, которая установлена на этом коммутаторе, можно только отдельно выключить и включить порт.
Вроде ничего сложного нет, но есть подвох. Произошло это именно во время поездки в другой город. Учитывая ситуацию с мобильным интернетом в 2026 году, вышел тот ещё квест. После звонка я только минут через 10 въехал в зону с работающим интернетом, где смог подключиться по SSH до работы и зайти в коммутатор. Но зайти мало, надо ещё дать команду на выключение порта, выждать время, дать команду на включение порта. Умножить на количество точек доступа. И это в пути, когда мобильный интернет может пропасть.
Решение — заскриптовать процедуру. Оно хоть и не часто требуется, но лучше предусмотреть на будущее. Обратился к нейронке на эту тему, но готового решения не нашлось. Вроде есть библиотеки для Python, но они у меня не заработали. Никакого SSH в SwitchOS нет, по SNMP записать ничего не выйдет, так как в SwitchOS Lite SNMP работает в режиме ReadOnly. Выходить нужно реверсить HTTP API.
Открываем отладчик браузера и смотрим обмен. Вроде все понятно, но самому лень это делать. В итоге за 13 запросов DeepSeek мне набросал скрипт на Bash, который умеет управлять состоянием PoE портов коммутатора. Для работы потребуется только curl.
Скрипт выводит подсказки при запуске, но продублирую их тут.
Использование: ./mikrotik_swos.sh [OPTIONS] {status|reboot|set|monitor|raw}
OPTIONS:
-h <ip> IP адрес коммутатора (по умолчанию: 192.168.1.1)
-u <user> Логин (по умолчанию: admin)
-p <pass> Пароль
-t <sec> Таймаут перезагрузки в секундах (по умолчанию: 5)
-T <sec> Таймаут curl соединения (по умолчанию: 5)
Команды:
status - показать статус всех портов
reboot <port> - перезагрузить PoE на порту
set <port> <state> - установить состояние PoE (off, auto, on)
monitor - непрерывный мониторинг (Ctrl+C для выхода)
raw - показать сырой ответ API
Состояния PoE:
off - PoE выключен (0x00)
auto - PoE в режиме AUTO (0x01)
on - PoE принудительно включен (0x02)
Примеры:
./mikrotik_swos.sh status
./mikrotik_swos.sh -h 10.0.0.100 -p mypass reboot 4
./mikrotik_swos.sh -t 3 reboot 2
./mikrotik_swos.sh set 5 auto