Benutzer-Werkzeuge

Webseiten-Werkzeuge


synology:bash_script_fuer_snmp_zugriff_auf_usv_daten

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.

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:

nano ~/check_ups_runtime.sh

Diesen Inhalt kopieren und anpassen:

#!/bin/bash

# SNMPv3 Authentifizierungsdetails
USERNAME="{Synology Username mit der entsprechenden Berechtigung}"
AUTH_PASSWORD="{Authentication Key}"
PRIV_PASSWORD="{Private Key}"
IP_ADDRESS="{IP Adresse der Synology Diskstation}"

# Datei zum Zwischenspeichern der letzten Restlaufzeit
RUNTIME_FILE="/Users/{User Name}/ups_last_runtime.dat"
LOG_FILE="/Users/{User Name}//ups_shutdown.log"

# Schwellwert in Sekunden
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
REMAINING_RUNTIME=$(snmpget -v3 -l authPriv -u "$USERNAME" -a SHA -A "$AUTH_PASSWORD" -x AES -X "$PRIV_PASSWORD" "$IP_ADDRESS" "$OID" | awk '{print $NF}')

# Falls SNMP fehlschlägt → abbrechen
if ! [[ "$REMAINING_RUNTIME" =~ ^[0-9]+$ ]]; then
    echo "$(date): ERROR: Invalid SNMP value: $REMAINING_RUNTIME" >> "$LOG_FILE"
    exit 1
fi

# Letzte gespeicherte Restlaufzeit lesen (falls vorhanden)
if [ -f "$RUNTIME_FILE" ]; then
    LAST_RUNTIME=$(cat "$RUNTIME_FILE")
else
    LAST_RUNTIME=$REMAINING_RUNTIME
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

Datei ausführbar machen:

chmod +x ~/check_ups_runtime.sh

In macOS kann dann launchd zum regelmäßigen Ausführen verwendet werden:

nano ~/Library/LaunchAgents/com.{User}.check_ups_runtime.plist

Diesen Inhalt eintragen und entsprechend anpassen. In diesem Beispiel wird das Script alle 60 Sekunden ausgeführt:

<?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>

Shortcut in macOS erstellen:

  1. Suche nach Show Notification
  2. Hello, World! mit Shortcut Input ersetzen
  3. Title: UPS Battery low!
  4. Play Sound: ☑️
  5. Attachment: Shortcut Input (Type: Text / Get: Text)
  6. Suche nach „Shut Down“
  7. Name des Shortcuts ändern in „Shut Down“
  8. Icon und Farbe nach Bedarf anpassen
synology/bash_script_fuer_snmp_zugriff_auf_usv_daten.txt · Zuletzt geändert: von dokuwikiadmin

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki