
Smart UPS W150: https://ali.click/x5hnc18?erid=2SDnjc2kp4S
Попали мне тут в руки эти умные ИБП и захотелось такой пристроить к своему серверу Home Assistant.
UPS подключается по USB к серверу и отдаёт все по NUT.
Network UPS Tools (NUT) — набор программных компонентов, разработанный для мониторинга и управления источниками бесперебойного питания (ИБП) в сетевой инфраструктуре. Система объединяет драйверы, серверную и клиентскую части, что позволяет контролировать состояние ИБП и автоматизировать важные действия, например, корректное завершение работы компьютеров при потере электропитания.
Addon Network UPS Tools:
В Home Assistant есть прям Аддон с NUT сервером. Он в Магазине аддонов есть по умолчанию. Устанавливаем его.

Переходим на Вкладку Конфигурация и тут нужно пользователю задать пароль (он должен быть сложным, простой пароль не примет). И обязательно нужно поставить в пункте upsmon параметр “secondary”.

Devices тоже нужно поправить так как показано на скрине:

Обратите внимание на параметр productid=D005 и vendorid=04D8 – эти параметры тоже обязательны их вписывать вручную.
И чтоб удалённо можно было подключаться к нашему серверу NUT, нужно прописать порт 3493 в пункте “СЕТЬ”:

После этого сохраняем все это дело и запускаем аддон. Удостоверяемся, что ошибок нет и идём дальше настраивать интеграцию.
Интеграция Network UPS Tools (NUT):
Интеграция стандартная, она есть в Home Assistant по умолчанию.
При добавлении интеграции попросит ip адрес, порт логин и пароль. ip адрес у нас локальный, по этому можно оставить localhost, но это у меня не заработало, мне пришлось имя аддона указывать. Его можно найти прям на главной странице аддона и у меня это имя a0d7b954-nut

После добавления, добавляется UPS со всеми сенсорами которые у него есть:

Ну а дальше дело техники, чтоб эти параметры использовать в своих автоматизациях.
Настройка Proxmox сервера:
Home Assistant у меня в виртуалке и смысла нет выключать к примеру виртуалку, когда уровень заряда ИБП опустится ниже 10%. Нужно выключать сам сервер proxmox и все виртуалки.
ЧТоб это сделать, нужно на сервер proxmox установить клиент NUT.
apt install nut-client -y
Далее редактируем файл:
nano /etc/nut/nut.conf
тут внутри одну строчку оставляем:
MODE=netclient

Далее редактируем следующий файл:
nano /etc/nut/upsmon.conf
Добавляем в него строчку:
MONITOR "myups@192.168.31.104:3493" 1 "admin" "141аыфафf" slave
Где 192.168.31.104 ip адрес nut сервера, в нашем случае это сервер Home Assistant. Логин и пароль еще указываем.

после этого добавляем службу в автозагрузку:
systemctl enable nut-monitor
Запускаем её:
systemctl start nut-monitor
Проверяем чтоб ошибок не было:
systemctl status nut-monitor

Если что, вот эти connection failure – это старые сообщения, я тогда сервер перезапускал.
И еще есть команда, чтоб запросить данные с ИБП:
upsc myups@192.168.31.104:3493
И вывод должны получить примерно такой:

Клиент настроили, он работает, теперь давайте настроим скрипт, который будет при отключении питания выключать не важные виртуальные машины, а когда заряда ИБП останется меньше 10%, потушит остальные виртуальные машины и выключит сервер сам.
Скачиваем скрипт:
curl -o /usr/local/sbin/proxmox-shutdown.sh https://raw.githubusercontent.com/jordanmack/proxmox-ups-shutdown/refs/heads/main/proxmox-shutdown.sh
Делаем файл исполняемым:
chmod +x /usr/local/sbin/proxmox-shutdown.sh
Редактируем его:
nano /usr/local/sbin/proxmox-shutdown.sh
Тут обращаем внимание на 3 параметра:
POWER_FAILURE_WAIT_TIME=300 # Время в секундах, после отключения питания производить проверку восстановления питания каждые 300 секунд.
UPS_IDENTIFIER="myups@192.168.31.104:3493" # Адрес NUT сервера
DEFAULT_ACTION="shutdown" # Команда на выключение сервера.
Далее идём редактировать еще один файл:
nano /etc/nut/upssched.conf
В нём должно быть такое содержимое:
CMDSCRIPT /etc/nut/upssched-cmd.sh
PIPEFN /run/nut/upssched.pipe
LOCKFN /run/nut/upssched.lock
# При переходе на батарею запускаем таймер на 60 секунд
AT ONBATT * START-TIMER onbatt_noncrit 60
# Если питание вернулось — отменяем таймер
AT ONLINE * CANCEL-TIMER onbatt_noncrit
# При низком заряде — немедленно выключаем всё
AT LOWBATT * EXECUTE lowbatt

Создаём скрипт, который будет выключать не важные виртуальные машины:
nano /etc/nut/upssched-cmd.sh
Содержимое файла:
#!/bin/bash
case $1 in
onbatt_noncrit)
logger "UPS on battery for 60 seconds, stopping non-critical VMs"
# Здесь можно добавить выключение конкретных ВМ по ID
for vm in 100 101 102; do # ID ваших некритичных ВМ
qm status $vm | grep -q running && qm shutdown $vm
done
;;
lowbatt)
logger "UPS battery low (≈10%), shutting down all VMs and Proxmox"
# Выключаем все ВМ
pvenode stopall
sleep 30
# Выключаем сам Proxmox
/sbin/shutdown -h now
;;
esac

делаем исполняемый файл:
chmod +x /etc/nut/upssched-cmd.sh
В скрипте перечисляем виртуальные машины которые не критичные и их можно сразу выключать.
Ну и еще раз идём в файл:
nano /etc/nut/upsmon.conf
И тут добавим еще одну строчку:
NOTIFYCMD /usr/local/sbin/proxmox-shutdown.sh
Это путь к скрипту. Выглядит это так:

На этом настройка завершена.
Теперь в случае отключения питания, скрипт сразу отработает и подаст команду на выключение не критичных виртуальных машин. Это с экономит потребление заряда.
Далее если процент заряда опустится ниже 10%, то сервер начнёт выключать оставшиеся виртуальные машины и выключится самостоятельно.