Może taki mały offtop - kiedyś (parę lat temu) miałem podobną sytuację: miałem jakiegoś starego UPS'a, który podtrzymywał serwer. UPS dawał radę, ale nie było komunikacji (teraz nie pamiętam, czy to kwestia sterowników, tego że w ogóle nie miał USB, czy może coś było uszkodzone). W każdym razie - zrobiłem sobie na Arduino (wtedy jeszcze nie znałem ESP32) takie urządzenie, które miało jakieś 2 piny podpięte do portu RS w serwerze, a na 2 innych był podpięty jakiś stycznik na 230V.
Kiedy było zasilanie w sieci to stycznik/przekaźnik był zamknięty. Jak zasilanie padało to się rozwierał (albo odwrotnie, nieważne) i Arduino dostawało sygnał, że obwód jest przerwany (czyli że nie ma napięcia w sieci). Czekał jakiś określony czas (żeby nie wywalać serwera po 2-sekundowym skoku zasilania/przepięciu wtyczki) i przez RS dawał sygnał do serwera, że czas się wyłączyć. Nie pamiętam, czy do obsługi tego RS'a korzystałem z czegoś istniejącego w systemie, czy napisałem jakiś własny skrypt/apkę, ale jest to zadanie dość proste i jeśli masz jakieś pojęcie o linuksach to ogarniesz to w chwilę.
Plus jest taki, że takim rozwiązaniem jesteś uniezależniony od konkretnego dostawcy UPS'a - możesz sobie dowolnie zasilacze przekładać i zmieniać, a mechanizm wyłączania serwera pozostaje bez zmian.