Add complete UPS monitoring system with monthly battery testing

This commit adds a comprehensive UPS monitoring and management system for
the Proxmox cluster with automated shutdown orchestration and monthly
battery health testing.

Features:
- NUT (Network UPS Tools) configuration for INNO TECH USB UPS
- Automated cluster shutdown on power failure (3-minute grace period)
- Monthly automated battery testing with health evaluation
- Email notifications via PVE::Notify system
- WinNUT monitoring client for Windows VM 201

Components added:
- config/: NUT configuration files (ups.conf, upsd.conf, upsmon.conf, etc.)
- scripts/ups-shutdown-cluster.sh: Orchestrated cluster shutdown
- scripts/ups-monthly-test.sh: Monthly battery test with email reports
- scripts/upssched-cmd: Event handler for UPS state changes
- docs/: Complete installation and usage documentation

Key findings:
- UPS battery.charge reporting has 10-40 second delay after test start
- Test must monitor voltage drop (1.5-2V) and charge drop (9-27%)
- Battery health evaluation: EXCELLENT/GOOD/FAIR/POOR based on discharge rate
- Email notifications use Handlebars templates without Unicode emojis for compatibility

Configuration:
- UPS: INNO TECH (Voltronic protocol, vendor 0665:5161)
- Primary node: pvemini (10.0.20.201) with USB connection
- Monthly test: cron 0 0 1 * * /opt/scripts/ups-monthly-test.sh
- Shutdown timer: 180 seconds on battery before cluster shutdown

Documentation includes complete installation guides for NUT server,
WinNUT client, and troubleshooting procedures.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Marius
2025-10-06 21:39:46 +03:00
parent 238c02fdf0
commit 87b9709a0d
14 changed files with 3292 additions and 0 deletions

View File

@@ -0,0 +1,376 @@
# Instalare și Configurare WinNUT pe Windows 11 (VM 201)
## Despre
WinNUT este un client NUT (Network UPS Tools) pentru Windows care permite monitorizarea vizuală a unui UPS conectat la un server NUT remote (în cazul nostru, pvemini).
**IMPORTANT:** WinNUT este folosit DOAR pentru monitorizare vizuală. Shutdown-ul automat este gestionat de scripturile de pe Proxmox.
## Prerequisite
- Windows 11 (VM 201 pe pvemini)
- Server NUT funcțional pe pvemini (10.0.20.201)
- Conectivitate rețea către serverul NUT (port 3493)
## 1. Descărcare WinNUT
### Opțiunea 1: GitHub Releases (Recomandat)
1. Deschide browser în VM 201
2. Accesează: https://github.com/gawindx/WinNUT-V2/releases
3. Descarcă ultima versiune (ex: `WinNUT-v2.x.x-Setup.exe`)
### Opțiunea 2: Build from source (Opțional)
```powershell
# Clonează repository
git clone https://github.com/gawindx/WinNUT-V2.git
cd WinNUT-V2
# Urmează instrucțiunile de build din README
```
## 2. Instalare WinNUT
### 2.1. Rulare instalator
1. Rulează `WinNUT-v2.x.x-Setup.exe` ca Administrator
2. Acceptă UAC prompt
3. Alege directorul de instalare (implicit: `C:\Program Files\WinNUT`)
4. Finalizează instalarea
### 2.2. Verificare instalare
WinNUT ar trebui să pornească automat după instalare. Icon-ul va apărea în system tray.
## 3. Configurare WinNUT
### 3.1. Deschidere fereastră Options
- Click dreapta pe icon-ul WinNUT din system tray
- Selectează **"Options"** sau dublu-click pe icon
### 3.2. Tab Connection
Configurează următoarele:
| Câmp | Valoare | Descriere |
|------|---------|-----------|
| **NUT host** | `10.0.20.201` | IP-ul serverului NUT (pvemini) |
| **NUT Port** | `3493` | Portul default NUT |
| **UPS Name** | `nutdev1` | Numele UPS-ului (din ups.conf) |
| **Polling Interval** | `15` | Interval de polling în secunde (NU pune 0!) |
| **Login** | `admin` | Username (din upsd.users) |
| **Password** | `parola99` | Parola (din upsd.users) |
| **Re-establish connection** | ☑ Checked | Reconectare automată |
**IMPORTANT:**
- **Polling Interval** trebuie să fie > 0 (recomandat: 15)
- Dacă Polling Interval = 0, WinNUT nu se va conecta!
### 3.3. Tab Calibration
Lasă valorile default sau ajustează după preferințe pentru afișarea gauge-urilor.
### 3.4. Tab Miscellaneous
Configurări opționale:
-**Start with Windows** - Pornire automată
-**Minimize to tray** - Minimizare în system tray
-**Sound alerts** - Alerte sonore (opțional)
### 3.5. Tab Shutdown Options
**⚠️ IMPORTANT:** NU configura shutdown options în WinNUT!
Shutdown-ul este gestionat automat de scripturile de pe Proxmox. WinNUT este doar pentru monitorizare.
Lasă toate opțiunile de shutdown dezactivate:
- ☐ Shutdown on battery
- ☐ Shutdown on low battery
- ☐ Force shutdown
### 3.6. Salvare configurație
1. Click **OK** pentru a salva
2. WinNUT se va reconecta automat la serverul NUT
3. În câteva secunde, ar trebui să vezi datele UPS-ului
## 4. Verificare Funcționare
### 4.1. Fereastră principală
După conectare cu succes, ar trebui să vezi:
**Gauge-uri (indicatoare circulare):**
- **Input Voltage** (Tensiune intrare): ~230V
- **Output Voltage** (Tensiune ieșire): ~230V
- **Frequency** (Frecvență): ~50Hz
- **Battery Charge** (Încărcare baterie): 0-100%
- **Battery Voltage** (Tensiune baterie): ~24V (depinde de UPS)
- **UPS Load** (Sarcină UPS): 0-100%
**Status checkboxes:**
-**UPS On Line** - UPS pe curent electric (normal)
-**UPS On Battery** - UPS pe baterie (întrerupere curent)
-**UPS Overload** - UPS supraîncărcat
-**UPS Battery Low** - Baterie scăzută
**Informații suplimentare:**
- **Manufacturer:** (producător UPS)
- **Name:** nutdev1
- **Serial:** (număr serie)
- **Firmware:** (versiune firmware)
### 4.2. System tray icon
- **Verde:** UPS On Line (normal)
- **Galben:** UPS On Battery (atenție)
- **Roșu:** UPS Battery Low (critic)
### 4.3. Mesaj reconectare
În partea de jos a ferestrei vezi:
```
[id 4: 10/6/2025 7:56:48 PM] Try Reconnect 1 / 30
```
Dacă vezi acest mesaj constant:
1. Verifică configurația Connection (mai ales Polling Interval)
2. Verifică conectivitatea rețea (ping 10.0.20.201)
3. Verifică că serverul NUT rulează pe pvemini
## 5. Testare
### 5.1. Test conectivitate din PowerShell
```powershell
# Test ping
Test-NetConnection -ComputerName 10.0.20.201 -Port 3493
# Ar trebui să vezi:
# TcpTestSucceeded : True
```
### 5.2. Test simulare UPS pe baterie
1. Deconectează fizic UPS-ul de la priză (pe pvemini)
2. Observă în WinNUT:
- Checkbox **"UPS On Battery"** devine ☑
- Icon în system tray devine galben
- Input voltage scade
- Battery charge începe să scadă
3. Reconectează UPS-ul
4. Observă că status revine la **"UPS On Line"**
**NU lăsa UPS-ul pe baterie mai mult de 3 minute** - se va declanșa shutdown automat!
## 6. Troubleshooting
### 6.1. WinNUT nu se conectează
**Verificări:**
1. **Polling Interval = 0?**
- Schimbă la 15 secunde
- Click OK și așteaptă 10-20 secunde
2. **Firewall blochează portul 3493?**
```powershell
# Test port
Test-NetConnection -ComputerName 10.0.20.201 -Port 3493
```
3. **Server NUT nu rulează?**
- SSH pe pvemini:
```bash
systemctl status nut-server
ss -tulpn | grep 3493
```
4. **Date de autentificare greșite?**
- Verifică username/password din Options
- Compară cu `/etc/nut/upsd.users` de pe pvemini
5. **Nume UPS greșit?**
- Verifică că UPS Name = `nutdev1`
- Listează UPS-uri disponibile:
```bash
ssh root@10.0.20.201 "upsc -l"
```
### 6.2. WinNUT se conectează dar nu afișează date
1. **Restart WinNUT:**
- Click dreapta → Exit
- Pornește WinNUT din nou
2. **Verifică permisiuni:**
- Username `admin` trebuie să existe în `/etc/nut/upsd.users`
3. **Verifică logs pe server:**
```bash
ssh root@10.0.20.201 "journalctl -u nut-server -n 50"
```
### 6.3. Icon-ul lipsește din system tray
1. Deschide **Settings → Personalization → Taskbar**
2. Click pe **"Taskbar corner overflow"**
3. Activează **WinNUT**
### 6.4. Eroare "Connection refused"
**Pe pvemini, verifică:**
```bash
# Server ascultă pe IP-ul corect?
ss -tulpn | grep 3493
# Firewall permite trafic?
iptables -L INPUT -n | grep 3493
# Restart server
systemctl restart nut-server
```
## 7. Configurare Avansată
### 7.1. Monitorizare multiple UPS-uri
WinNUT poate monitoriza un singur UPS. Pentru multiple UPS-uri:
- Rulează multiple instanțe WinNUT (necesită build custom)
- Folosește alte tool-uri (NUT-Monitor, upsc via SSH)
### 7.2. Export date UPS
WinNUT nu are funcție de export built-in. Pentru logging:
**Opțiunea 1: PowerShell script**
```powershell
# Script simplu de logging UPS via SSH
while ($true) {
$status = ssh root@10.0.20.201 "upsc nutdev1 ups.status battery.charge input.voltage"
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
"$timestamp - $status" | Out-File -Append C:\UPS-Logs\ups-log.txt
Start-Sleep -Seconds 60
}
```
**Opțiunea 2: Monitoring tools**
- Prometheus + NUT Exporter
- Grafana + InfluxDB
- Zabbix
### 7.3. Notificări personalizate
Pentru notificări Windows când UPS trece pe baterie:
**PowerShell monitoring script:**
```powershell
# Rulează continuu, verifică status UPS
$lastStatus = "OL"
while ($true) {
try {
$currentStatus = ssh root@10.0.20.201 "upsc nutdev1 ups.status"
if ($currentStatus -match "OB" -and $lastStatus -eq "OL") {
# Notificare Windows
[System.Windows.Forms.MessageBox]::Show(
"UPS a trecut pe baterie!",
"ALERT UPS",
[System.Windows.Forms.MessageBoxButtons]::OK,
[System.Windows.Forms.MessageBoxIcon]::Warning
)
}
$lastStatus = $currentStatus
} catch {
Write-Host "Error: $_"
}
Start-Sleep -Seconds 10
}
```
## 8. Alternative la WinNUT
Dacă WinNUT nu funcționează satisfăcător:
### 8.1. NUT-Monitor (Java)
- Cross-platform (Windows, Linux, macOS)
- Interfață mai modernă
- Download: https://github.com/networkupstools/nut/wiki/NUT-Monitor
### 8.2. upsc via SSH
Folosește direct comanda `upsc` prin SSH:
```powershell
# PowerShell - Status UPS
ssh root@10.0.20.201 "upsc nutdev1"
# Doar câmpuri specifice
ssh root@10.0.20.201 "upsc nutdev1 ups.status battery.charge input.voltage"
# Monitoring continuu
while ($true) {
Clear-Host
ssh root@10.0.20.201 "upsc nutdev1 ups.status battery.charge input.voltage"
Start-Sleep -Seconds 5
}
```
### 8.3. Web UI pe server
Instalează web UI pe pvemini:
```bash
# Instalare NUT CGI scripts
apt install -y nut-cgi apache2
# Configurare
# Accesează: http://10.0.20.201/cgi-bin/nut/upsstats.cgi
```
## 9. Pornire Automată WinNUT
### 9.1. Via Task Scheduler
1. Deschide **Task Scheduler**
2. Create Task:
- **General:**
- Name: WinNUT Auto Start
- Run whether user is logged on or not
- **Triggers:**
- At startup
- **Actions:**
- Start a program: `C:\Program Files\WinNUT\WinNUT.exe`
- **Conditions:**
- Start only if network available
### 9.2. Via Startup Folder
1. `Win + R` → `shell:startup`
2. Crează shortcut către `WinNUT.exe`
## 10. Documentație și Suport
- **WinNUT GitHub:** https://github.com/gawindx/WinNUT-V2
- **NUT Documentation:** https://networkupstools.org/
- **Issues:** Raportează probleme pe GitHub Issues
## Rezumat Configurare Rapidă
```
NUT host: 10.0.20.201
NUT Port: 3493
UPS Name: nutdev1
Polling Interval: 15
Login: admin
Password: parola99
Re-establish conn: ✓ Checked
```
**Click OK → Așteaptă 10-20 secunde → Vezi date UPS!**