Benutzer-Werkzeuge

Webseiten-Werkzeuge


synology:bash_script_fuer_snmp_zugriff_auf_usv_daten

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
synology:bash_script_fuer_snmp_zugriff_auf_usv_daten [2025/02/04 15:03] dokuwikiadminsynology:bash_script_fuer_snmp_zugriff_auf_usv_daten [2026/01/28 14:27] (aktuell) dokuwikiadmin
Zeile 1: Zeile 1:
 Wenn die USV über ein USB Kabel an das Synology NAS angeschlossen ist, kann über SNMP der Status der USV, wie zum Beispiel die Restlaufzeit in Sekunden abgefragt werden. Wenn die USV über ein USB Kabel an das Synology NAS angeschlossen ist, kann über SNMP der Status der USV, wie zum Beispiel die Restlaufzeit in Sekunden abgefragt werden.
-Dieses BASH Script kann auf macOS oder Linux Umgebung alle Minuten laufen und die Restlaufzeit prüfen. Wird diese Unterschritten wird ein Shutdown des Computers an der USV durchgeführt.+Dieses BASH Script kann auf macOS oder Linux Umgebung alle Minuten laufen und die Restlaufzeit prüfen. Wird diese unterschritten wird ein Shutdown des Computers an der USV durchgeführt.
  
 +**Hinweis: Diese Anleitung funktioniert nur wenn der User angemeldet ist.** 
 +
 +**Alle Daten in geschwungenen Klammern {} müssen angepasst werden!**
 +
 +Dateiname im Home Verzeichnis des angemeldeten Users erstellen:
 +<code>nano ~/check_ups_runtime.sh</code>
 +Diesen Inhalt kopieren und anpassen:
 <code> <code>
 #!/bin/bash #!/bin/bash
  
 # SNMPv3 Authentifizierungsdetails # SNMPv3 Authentifizierungsdetails
-USERNAME="{Synology Username mit der entsprechenden Berechtigung" +USERNAME="{Synology Username mit der entsprechenden Berechtigung}
-AUTH_PASSWORD="{Passwort}" +AUTH_PASSWORD="{Authentication Key}" 
-PRIV_PASSWORD="{Passwort}"+PRIV_PASSWORD="{Private Key}"
 IP_ADDRESS="{IP Adresse der Synology Diskstation}" IP_ADDRESS="{IP Adresse der Synology Diskstation}"
  
-OID für die verbleibende Batterielaufzeit in Sekunden +Datei zum Zwischenspeichern der letzten Restlaufzeit 
-OID=".1.3.6.1.4.1.6574.4.3.6.1.0"+RUNTIME_FILE="/Users/{User Name}/ups_last_runtime.dat" 
 +LOG_FILE="/Users/{User Name}//ups_shutdown.log"
  
 # Schwellwert in Sekunden # Schwellwert in Sekunden
 THRESHOLD=300 THRESHOLD=300
 +
 +# OID für die verbleibende Batterielaufzeit in Sekunden
 +OID=".1.3.6.1.4.1.6574.4.3.6.1.0"
  
 # Restlaufzeit abfragen # Restlaufzeit abfragen
 REMAINING_RUNTIME=$(snmpget -v3 -l authPriv -u "$USERNAME" -a SHA -A "$AUTH_PASSWORD" -x AES -X "$PRIV_PASSWORD" "$IP_ADDRESS" "$OID" | awk '{print $NF}') REMAINING_RUNTIME=$(snmpget -v3 -l authPriv -u "$USERNAME" -a SHA -A "$AUTH_PASSWORD" -x AES -X "$PRIV_PASSWORD" "$IP_ADDRESS" "$OID" | awk '{print $NF}')
  
-Prüfen, ob die Restlaufzeit unter dem Schwellwert liegt +Falls SNMP fehlschlägt → abbrechen 
-if [ "$REMAINING_RUNTIME" -lt "$THRESHOLD" ]; then +if ! [[ "$REMAINING_RUNTIME" =~ ^[0-9]+]]; then 
-    echo "$(date): UPS remaining runtime is below threshold ($REMAINING_RUNTIME seconds) - shutting down" >> /var/log/ups_shutdown.log +    echo "$(date): ERROR: Invalid SNMP value: $REMAINING_RUNTIME" >> "$LOG_FILE" 
-    # Shutdown Befehl je nach Betriebssystem. Für macOS z.B. mit einem Shortcut: shortcuts run "Ausschalten"+    exit 1 
 +fi 
 + 
 +Letzte gespeicherte Restlaufzeit lesen (falls vorhanden) 
 +if [ -f "$RUNTIME_FILE]; then 
 +    LAST_RUNTIME=$(cat "$RUNTIME_FILE")
 else else
- echo "$REMAINING_RUNTIME seconds"+    LAST_RUNTIME=$REMAINING_RUNTIME
 fi fi
  
 +# Aktuelle Restlaufzeit speichern
 +echo "$REMAINING_RUNTIME" > "$RUNTIME_FILE"
 +
 +# Entscheidungslogik
 +if [ "$REMAINING_RUNTIME" -lt "$THRESHOLD" ] && [ "$REMAINING_RUNTIME" -lt "$LAST_RUNTIME" ]; then
 +    echo "$(date): UPS runtime decreasing below threshold ($REMAINING_RUNTIME s < $LAST_RUNTIME s) → shutdown" >> "$LOG_FILE"
 +    shortcuts run "Shut Down" -i "UPS remaining runtime ($REMAINING_RUNTIME seconds)."
 +else
 +    echo "$(date): UPS runtime OK ($REMAINING_RUNTIME s, last $LAST_RUNTIME s)" >> "$LOG_FILE"
 +fi
 +</code>
 +
 +Datei ausführbar machen:
 +<code>chmod +x ~/check_ups_runtime.sh</code>
 +
 +In macOS kann dann launchd zum regelmäßigen Ausführen verwendet werden:
 +<code>nano ~/Library/LaunchAgents/com.{User}.check_ups_runtime.plist</code>
 +
 +Diesen Inhalt eintragen und entsprechend anpassen. In diesem Beispiel wird das Script alle 60 Sekunden ausgeführt:
 +<code>
 +<?xml version="1.0" encoding="UTF-8"?>
 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 +<plist version="1.0">
 +<dict>
 + <key>Label</key>
 + <string>com.{User}.check_ups_runtime</string>
 + <key>ProgramArguments</key>
 + <array>
 + <string>/bin/bash</string>
 + <string>/Users/{User}/check_ups_runtime.sh</string>
 + </array>
 + <key>StartInterval</key>
 + <integer>60</integer>
 +</dict>
 +</plist>
 </code> </code>
  
 +Shortcut in macOS erstellen:
 +  - Suche nach **Show Notification**
 +  - //Hello, World!// mit **Shortcut Input** ersetzen
 +  - Title: UPS Battery low!
 +  - Play Sound: ☑️
 +  - Attachment: Shortcut Input (Type: Text / Get: Text)
 +  - Suche nach "Shut Down"
 +  - Name des Shortcuts ändern in "Shut Down"
 +  - Icon und Farbe nach Bedarf anpassen
  
synology/bash_script_fuer_snmp_zugriff_auf_usv_daten.1738677826.txt.gz · Zuletzt geändert: von dokuwikiadmin

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki