Volle Kontrolle bei Stromausfall: USV Integration mit Home Assistant! [NUT]

1 „Gefällt mir“

Danke für das tolle Video
Läuft soweit bei mit mit APC USV 900.
Kannst du vielleicht erklären, wie eine Automation aussehen muß, die von dem Zustand der USV getriggert wird und z.b. mein QNAP NAS runterfährt bei 30 % und mein PC bei 50% Restenergie ?
Habe gerade keine Idee dazu.
Danke !

Danke für dein Feedback & kommt im wesentlichen drauf an, wie deine Geräte in HA integriert sind. Die QNAP kannst du ja vermutlich über ein Shell-Skript herunterfahren wie Daniel es im Video zeigt, für Windows wäre vermutlich Hass.Agent eine Option.

Die Trigger für die Automation sind ja selbsterkärend :wink:

1 „Gefällt mir“

Qnap läuft. Ist leider etwas anders als Daniel bei seinem NAS zeigt. Es gibt keine Power Schalter als Entität- Geht über ein script was aber auch iwi speziell ist. Vielleicht braucht es jemand:

shell_command:
  turn_off_qnap: ssh -m hmac-sha2-512 -i /config/ssh_keys/id_rsa_homeassistant -o StrictHostKeyChecking=no admin@xx.xx.xx.xx "sbin/poweroff"

Herunterfahren des PCs mit Hass.Agent funktioniert.- Hier auch ein kleiner Tipp. Achtet darauf, das ihr den Entitätstyp im UI vom Hass.Agent von default “Knopf” auf “Schalter” ändert.

1 „Gefällt mir“

Leider hab ich schon eine USV im Betrieb, konnte es also nicht nachbauen, aber von der angenehmen Stimme lass ich mich gern berieseln :laughing:

Bei einer Back-UPS von APC hats gefühlt 3000 Sensoren

Ich hab die USV bei mir im ServerManagement integriert, da ich den um 23:30 Herunter fahren lasse (via RPC Shutdown), morgens 6 Uhr wieder hochfahren lasse (via Shelly Plus Uni) und ebenso reagiert die Automation auf Events der USV.
Wenn die USV in den Battery-Modus wechselt für mehr als 30Sekunden ist es wohl keine Stromschwankung mehr und der Server fährt runter, somit bleibt der Akku länger für HA,Openwrt, DSL-Modem und die POE Wlan-Infrastuktur am Leben.

Als kleine Inspiration:

alias: _V3_System_Server_Management
description: ""
trigger:
  - platform: numeric_state
    entity_id:
      - sensor.voltmeter_server_onpower_voltmeter
    below: 0.2
    id: ServerOff
    for:
      hours: 0
      minutes: 0
      seconds: 15
  - platform: numeric_state
    entity_id:
      - sensor.voltmeter_server_onpower_voltmeter
    above: 4
    id: ServerOn
  - platform: state
    entity_id:
      - sensor.backupsrs1500g_status
    from: null
    to: On Battery Battery Discharging
    for:
      hours: 0
      minutes: 0
      seconds: 30
    id: OnBatteryDischarging
  - platform: state
    entity_id:
      - sensor.backupsrs1500g_status
    from: null
    to: Online Battery Charging
    for:
      hours: 0
      minutes: 0
      seconds: 0
    id: OnlineCharging
  - platform: time
    at: input_datetime.time_server_shutdown
    id: ServerAutoShutdown
  - platform: time
    at: input_datetime.time_server_start
    id: ServerAutoStart
condition: []
action:
  - choose:
      - conditions:
          - condition: trigger
            id:
              - ServerOn
        sequence:
          - service: input_boolean.turn_on
            metadata: {}
            data: {}
            target:
              entity_id: input_boolean.server_powerstate
        alias: ServerStatus On
      - conditions:
          - condition: trigger
            id:
              - ServerOff
        sequence:
          - service: input_boolean.turn_off
            metadata: {}
            data: {}
            target:
              entity_id: input_boolean.server_powerstate
        alias: ServerStatus Off
      - conditions:
          - condition: trigger
            id:
              - ServerAutoStart
          - condition: state
            entity_id: input_boolean.server_automgmt
            state: "on"
          - condition: state
            entity_id: input_boolean.server_powerstate
            state: "off"
        sequence:
          - service: switch.turn_on
            metadata: {}
            data: {}
            target:
              entity_id: switch.bo_itserver_powermgmt_power
          - delay:
              hours: 0
              minutes: 0
              seconds: 0
              milliseconds: 100
          - service: switch.turn_off
            metadata: {}
            data: {}
            target:
              entity_id: switch.bo_itserver_powermgmt_power
        alias: AutoStart
      - conditions:
          - condition: trigger
            id:
              - ServerAutoShutdown
          - condition: state
            entity_id: input_boolean.server_automgmt
            state: "on"
          - condition: state
            entity_id: input_boolean.server_powerstate
            state: "on"
        sequence:
          - service: notify.all_mobiledevices
            metadata: {}
            data:
              data:
                push:
                  interruption-level: time-sensitive
              title: Automatischer Server Shutdown
              message: >-
                Der Server wird in 30 Sekunden herunterfahren, der E-Mail
                Empfang und Versand ist dann nicht mehr möglich.
          - delay:
              hours: 0
              minutes: 0
              seconds: 30
              milliseconds: 0
          - service: hassio.addon_stdin
            data:
              addon: core_rpc_shutdown
              input: SRVHYPV2
          - wait_for_trigger:
              - platform: numeric_state
                entity_id:
                  - sensor.voltmeter_server_onpower_voltmeter
                below: 0.2
                for:
                  hours: 0
                  minutes: 0
                  seconds: 15
            timeout:
              hours: 0
              minutes: 0
              seconds: 0
              milliseconds: 0
            continue_on_timeout: true
          - service: notify.all_mobiledevices
            metadata: {}
            data:
              data:
                push:
                  interruption-level: time-sensitive
              title: Automatischer Server Shutdown
              message: Der Server ist aus.
        alias: AutoShutdown
      - conditions:
          - condition: trigger
            id:
              - OnlineCharging
          - condition: time
            after: input_datetime.time_server_start
            before: input_datetime.time_server_shutdown
        sequence:
          - service: switch.turn_on
            metadata: {}
            data: {}
            target:
              entity_id: switch.bo_itserver_powermgmt_power
          - delay:
              hours: 0
              minutes: 0
              seconds: 0
              milliseconds: 100
          - service: switch.turn_off
            metadata: {}
            data: {}
            target:
              entity_id: switch.bo_itserver_powermgmt_power
          - service: notify.all_mobiledevices
            metadata: {}
            data:
              data:
                push:
                  interruption-level: time-sensitive
              title: Stromausfall zu Ende
              message: >-
                Die Battery wird wieder geladen, weshalb der Server wieder
                gestartet wird.
        alias: BatteryFlow OnlineCharging
      - conditions:
          - condition: trigger
            id:
              - OnBatteryDischarging
          - condition: state
            entity_id: input_boolean.server_powerstate
            state: "on"
        sequence:
          - service: notify.all_devices
            metadata: {}
            data:
              title: Stromausfall IT-Schrank
              message: >-
                Die USV ist auf Batterie gewechselt! Der Server wird zur
                Sicherheit heruntergefahren, so lange ist kein E-Mail Verkehr
                möglich. Aktuelle RestZeit der Batterie noch
                {{as_datetime(states('sensor.backupsrs1500g_akkulaufzeit')).strftime('%Hh:%Mm:%Ss')
                }}.
              data:
                push:
                  sound:
                    name: default
                    critical: 1
                    volume: 1
          - service: hassio.addon_stdin
            data:
              addon: core_rpc_shutdown
              input: SRVHYPV2
          - wait_for_trigger:
              - platform: numeric_state
                entity_id:
                  - sensor.voltmeter_server_onpower_voltmeter
                below: 0.2
                for:
                  hours: 0
                  minutes: 0
                  seconds: 15
            continue_on_timeout: true
          - service: notify.all_devices
            metadata: {}
            data:
              title: Stromausfall IT-Schrank
              message: Der Server wurde heruntergefahren.
              data:
                push:
                  sound:
                    name: default
                    critical: 1
                    volume: 1
          - service: input_boolean.turn_off
            metadata: {}
            data: {}
            target:
              entity_id: input_boolean.server_automgmt
        alias: BatteryFlow BatteryDischarging
mode: parallel
max: 10

Je nach Trigger wird die passende Aktion in Gang gesetzt, funktioniert erstaunlich gut

Hallo zusammen,
Steh gerade was auf dem Schlauch,
wie kann man den NUT netserver auch anderen NUT Clients auf anderen Servern zur Verfügung stellen? Im HA klappt das natürlich über den Docker Hostname.
Beste Grüße
Averall

Ip Adresse von Home Assistant und den Port den Du in den Einstellungen des NUT Addons festgelegt hast.

Gruß
Osorkon

Hi,
Danke für die Rückmeldung, richtig. Mein Denkfehler liegt also nicht an mir.
In der NUT App von meinem Unraid Server kann ich die ip nur ohne Port eingeben. Mal sehen ob ich da ne eigene config bauen kann. Oder mal auf anderes NAS Betriebssystem umsteige.
Beste Grüße
Averall

@der_Mirco
eine tolle Automation die du da gemacht hast. Mich interessiert vorallem der Teil in dem du

notify.all_devices

und

notify.all_mobiledevices

nutzt.
wie hast du die definiert ?

Danke !

@all

neues kleine Problem. Wollte den Piepser wieder einschalten. Bekomme die Meldung:

Error running command beeper.enable, Error running: INSTCMD APC beeper.enable: ERR ACCESS-DENIED

add on Instanz löschen und neuen Nutzer anlegen half leider auch nicht…

@simon42 ich habe Dir mal was gebastelt :wink:

Wurde ja vor einer Weile durch Dich angefixed, mich nochmal mit dem Thema USV zu beschäftigen. :smiley: Inzwischen habe ich 3 davon.

Und zwar eine alternative Lösung, wie man die Daten der USV per MQTT an Home Assistant übertragen kann. Hintergrund war, dass das Update-Intervall der NUT-Integration zu groß ist, sodass es mir zu lange gedauert hat, bis sich der Status ändert. Bei Ausfällen von z. B. 5 Sekunden hat Home Assistant gar nicht mitbekommen, dass die USV auf Batterie war.

Btw die Eaton USV auf Deinem Blog-Beitrag hatte ich auch kurz, die stirbt leider wenn sie leer läuft. (steht auch u.a. in den Bewertungen) Umtausch / Rückgabe war trotz Amazon dann ein Graus gewesen.

Moin,
ich beschäftige mich auch gerade mit dem Thema… Nur habe ich aktuell das Problem, dass meine USV nicht gefunden wird.

Ich habe auf einer Synology DS1621+ in einer VM Homeassistant-OS und darauf aktuell Homeassistant 2025.12.5 am Start.

Wie kann ich der Konfiguration in NUT nun mitteilen, wo er die USV findet? Ich stehe da gerade auf dem Schlauch…

im Protokoll finde ich sowas:

Add-on version: 0.17.0
 You are running the latest version of this add-on.
 System: Home Assistant OS 16.3  (amd64 / qemux86-64)
 Home Assistant Core: 2025.12.5
 Home Assistant Supervisor: 2026.01.0
-----------------------------------------------------------
 Please, share the above information when looking for help
 or support in, e.g., GitHub, forums or the Discord chat.
-----------------------------------------------------------
s6-rc: info: service base-addon-banner successfully started
s6-rc: info: service fix-attrs: starting
s6-rc: info: service base-addon-timezone: starting
s6-rc: info: service base-addon-log-level: starting
s6-rc: info: service fix-attrs successfully started
[15:14:17] INFO: Configuring timezone (Europe/Berlin)...
s6-rc: info: service base-addon-log-level successfully started
s6-rc: info: service base-addon-timezone successfully started
s6-rc: info: service legacy-cont-init: starting
cont-init: info: running /etc/cont-init.d/nut.sh
[15:14:17] INFO: Setting mode to netserver...
[15:14:17] INFO: Generating /etc/nut/upsd.users...
[15:14:17] INFO: Configuring user: NuTTy
[15:14:18] INFO: Password is NOT in the Have I Been Pwned database! Nice!
[15:14:18] INFO: Configuring Device named myups aps 700...
[15:14:18] INFO: Starting the UPS drivers...
Error: no UPS definitions found in ups.conf
Network UPS Tools - UPS driver controller 2.8.1
cont-init: info: /etc/cont-init.d/nut.sh exited 1
cont-init: info: running /etc/cont-init.d/nutclient.sh
cont-init: info: /etc/cont-init.d/nutclient.sh exited 0
cont-init: warning: some scripts exited nonzero
s6-rc: warning: unable to start service legacy-cont-init: command exited 1
/run/s6/basedir/scripts/rc.init: warning: s6-rc failed to properly bring all the services up! Check your logs (in /run/uncaught-logs/current if you have in-container logging) for more information.
/run/s6/basedir/scripts/rc.init: fatal: stopping the container.
s6-rc: info: service fix-attrs: stopping

Und in der Synology ist das hier eingetragen:

Was muss ich tun, damit das funkioniert? Für´s Feedback vielen Dank im Voraus.

HG

Rolf

Ganz einfach:

  1. Bei den zugelassenen Synology NAS-Geräten bei der DS die IP von Deiner HA VM eintragen. Was Du lt. Deinem Screenshot wohl schon gemacht hast.
  2. Bei der HA NUT Integration bei Host die IP von Deiner DS eintragen, den Port 3493, Benutzername: monuser und als Passwort dann secret.

    Dann sollte das funktionieren und HA Deine USV an der DS auch finden.

VG Jim

1 „Gefällt mir“

Hej @Jim_OS ,
ganz lieben Dank für Deine Info… Leider kann ich das so gar nicht umsetzen, denn bei mir sieht das anders aus?

Wo finde ich wohl “Deine” Maske?

Moin

Vermutlich weil Du nicht die HA NUT Integration nutzt

sondern vielleicht das NUT Addon

Was Du aber gar nicht brauchst.

Einstellungen —> Geräte & Dienste —> Integration hinzufügen —> NUT auswählen


und installieren. Dann kommt die im Screenshot gezeigte Konfiguration

und da trägst Du dann die Daten ein. Fertig. :slightly_smiling_face:

VG Jim

1 „Gefällt mir“

Ich habe das zwar auch so in den HA integriert (DS718+, Eaton Eclipse Pro 650), aber eigentlich ist das ja gar nicht notwendig, denn die Diskstation kommuniziert ja eh direkt über USB mit der USV. Und viel anzeigen tut das Teil auch nicht unbedingt, wenn es normal am Strom hängt. So wirklich fehlt mir da die Idee für die Notwendigkeit zur Einbindung in den HA. Oder hab ich was übersehen?

Was hat die Kommunikation der DS mit der USV per USB mit der Einbindung der USV per DS NUT-Server als NUT-Client bei HA zu tun?

Du meinst die Installation der HA NUT-Client Integration unter HA, oder was? Wenn Du den HA Host über den NUT-Server der DS bei Stromausausfall entsprechend steuern willst brauchst Du nun mal auf dem HA Host eine NUT-Client-Software die das dann kann und macht.

VG Jim

Okay, so macht das natürlich Sinn. Bei mir läuft HA in einer VM auf der DS718+. Da regelt das die Diskstation das ja selbst.

An meinem USV hängen ansonsten noch die FRITZ!Box, die CCU3, der Dirigera Hub und die HomeBase von eufy. Wenn Strom weg, dann Strom weg. Wie oft habe ich in den letzten 10 bis 15 Jahren da schon einfach den Stecker gezogen, ohne dass jemals was passiert wäre. :face_with_peeking_eye:

Vor Kurzem hatte der Akku meiner USV mal wieder schlapp gemacht. Da gab‘s über einige Wochen jeden Montag ein abruptes Aus- und Einschalten der USV. Hat mich etwas Nerven gekostet, die Ursache zu finden.

Jepp - wenn der HA Host eine HA VM unter dem VMM ist dann sollte der auf der DS laufende NUT-Server die per VMM laufenden VMs und somit auch die HA VM, eigentlich per HA QEMU Guest Agent auch korrekt herunterfahren.

Da konntest Du über die Sensoren für die USV unter HA dann auch nichts erkennen? D.h. eigentlich müsste man so etwas ja z.B. (halbwegs) an der verfügbaren Batterielaufzeit erkennen können.


Meine aktuell unter HA eingebundene CyperPower USV ist erst rund 2 1/2 Jahre alt und zumindest anhand der Sensoren konnte ich da noch keinen großartigen Verschleiß, oder eben evtl. bevorstehenden Ausfall des Akkus erkennen. Aber ich habe eben auch noch keine Erfahrungswerte ob und was ich dann wann und wie über die NUT-Sensoren bei HA erkennen könnte. War bisher halt noch kein Thema für mich, weil die CyperPower USV eben noch nicht so alt ist. :slightly_smiling_face:

VG Jim