2024-11-21

Кто работал с Unifi, особенно со старыми точками, знает, что периодически они начинают глючить (плавает уровень сигнала, точка начинает тупить и  т.д.). Решение простое, их надо ребутить. Если кто-то знает штатный метод перезагрузки по расписанию – просьба написать в комментах.

Т.к. в небольших компаниях зачастую из постоянно работающего бывают только Windows, решено было написать универсальную программку под эту ОС.

Краткая инструкция:

Качаем файл unifi_reboot.exe и запускаем. Возникнет ошибка об отсутствии файла конфигурации после чего окно закроется. В той же директории создастся 2 дополнительных файла: логи и конфигурация

Открываем блокнотом unifi_reboot.conf

Заполняем согласно своим настройкам:

#   List addresses for request:

Вводим любое количество ip адресов точек через запятую,  но не менее одного

#   Hostname in the same order:

Понятное имя точек через запятую, количество имен должно совпадать с количеством ip

#   Username

ssh логин от точки

#   Password

ssh пароль от точки

#   TokenBot telegram (False if not required):

Токен бота телеграм, если оповещение в телеграм не используется пишем False или оставляем как есть

#   Id user telegram or chat for alerting (False if not required):

Девятизначный id пользователя телеграм или id чата с дефисом, если оповещение в телеграм не используется пишем False или оставляем как есть

#   Time-out icmp request

Максимальное время ожидание ответа на пинг от точек в секундах

#   Time-out reboot

Время через которое программа снова проверит доступность точки после перезагрузки

Логика работы следующая: программа поочередно опросит точки, если доступны – попытается подключиться и перезапустить, через заданное время снова попытается опросить точку, если после перезагрузки точка доступна, то пришлет сообщение в телеграм об успешной операции, если на каком-то этапе возникнут проблемы, придет соответствующее сообщение с ошибкой. Все шаги подробно логируются в файл unifi_reboot_log.log

Далее можно создать задание в планировщике Windows

Создаем простую задачу, указываем любое понятное имя, задаем время и периодичность выполнения. В запуске программы указываем путь до unifi_reboot.exe и  обязательно в поле Рабочая папка указываем полный путь до папки где лежим exeшник

После подтверждения настройка окончена

Скачать программу можно по ссылке https://imaxis.ru/downloads/unifi_reboot_1.1.exe

Версия с открытием консольного окна https://imaxis.ru/downloads/unifi_reboot_1.1_ConsoleWindow.exe

5 комментариев для “Автоматическая перезагрузка WiFi точек Unifi по расписанию в Windows с оповещением в Telegram

  1. Добрый день, можете, пожалуйста, подсказать как правильно составить конфигурационный файл для работы с несколькими точками?

    Сейчас проверяю на двух точках с одинаковыми логинами/паролями. Если всё ввести как в примере выше, где логин и пароль указаны один раз, то происходит перезагрузка только первой точки, после этого выполнение программы прекращается. Если указать логины/пароли через запятую и пробел(как это сделано с ip и именами), то программа пытается подключиться уже к обеим точкам, но в обоих случаях выдаёт “Authentication (password) failed”.

    1. Добрый день, к сожалению, не реализовывал возможность подключаться к точкам с разными логинами и паролями.
      Логин и пароль задаются по одному в строке
      Рабочий конфиг:
      # List addresses for request:
      192.168.20.22, 192.168.20.23, 192.168.20.24
      # Hostname in the same order:
      Unifi-1, Unifi-2, Unifi-3
      # Username
      admin
      # Password
      MySuperPassword
      # TokenBot telegram (False if not required):
      False
      # Id user telegram or chat for alerting (False if not required):
      False
      # Time-out icmp request
      5
      # Time-out reboot
      40
      # Instruction: https://imaxis.ru/?p=302

      Важно не менять порядок строк

      Нужен лог, там где логин и пароль заполнен один раз

      1. Ещё раз проверил конфиг, всё сделано как в вашем примере.
        Лог, там где логин и пароль заполнен один раз(ip адресов в конфиге 3):
        2024-05-16 08:37:13,397 INFO 2024-05-16 08:37:13.397540 Script start
        2024-05-16 08:37:13,398 WARNING 2024-05-16 08:37:13.397540 Error length TokenBot
        2024-05-16 08:37:16,399 WARNING 2024-05-16 08:37:16.399096 Error length ID Telegram
        2024-05-16 08:37:19,402 INFO Unifi-1 192.168.20.22 avalaible
        2024-05-16 08:37:19,519 INFO Connected (version 2.0, client dropbear)
        2024-05-16 08:37:20,579 INFO Authentication (password) successful!
        2024-05-16 08:37:20,582 INFO Connected to Unifi-1 192.168.20.22 successfull
        2024-05-16 08:38:00,582 INFO Unifi-1 192.168.20.22 reboot successfull

        Программа перестаёт работать после первой успешной перезагрузки устройства.
        Провел эксперимент, в конфиге 3 адреса, если указать неправильный пароль программа попытается соединиться с каждой из точек и для каждой выдаст в лог “Authentication (password) failed”.
        А если указать пароль от второго по порядку устройства, то программа попытается соединиться с первой точкой, выдаст “Authentication (password) failed”, потом успешно соединится со второй, перезагрузит её и закончит свою работу, не пытаясь соединиться с третьей.

        1. Перепроверил, все должно работать
          В конце статьи добавил версию с открытием консольного окна для наблюдения происходящего
          Попробуйте скачать, запустить, дождаться закрытия (10 секунд), ничего не меняя запустить еще раз, должен перебрать адреса по дефолту: 192.168.22.1, 192.168.22.2, 192.168.22.3 (ВАЖНО: если с этими адресами есть реальные хосты с линуксом или построенных на линуксе устройств, то на них не должен быть логин/пароль root/password)

          1. Большое вам спасибо, теперь работает, последовательно перезагружает все точки доступа.

            Ещё небольшую ошибку нашёл, если в конфиге в Id user telegram написать просто “False”, то выдаст unhandled exception in script:
            “Traceback (most recent call last):
            File “unifyreboot.py”, line 72, in
            ValueError: invalid literal for int() with base 10: ‘False’

            Если всё оставить в конфиге как изначально то работает, или если написать “-False”, то работает. По сути можно просто в описании поправить что эта строка должна начинаться с “-“.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *