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>
377 lines
10 KiB
Markdown
377 lines
10 KiB
Markdown
# 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!**
|