Hardware
Mini PC con processore Intel N100, progettato per carichi leggeri e funzionamento continuo. Consumo misurato direttamente sull'EcoFlow: ~19W a riposo, circa 55 pesos MXN al mese.
| Componente | Specifiche |
|---|---|
| CPU | Intel N100 — 4C/4T, fino a 3.4 GHz, 6W TDP |
| RAM | 16 GB DDR4 |
| Disco sistema | NVMe 256 GB — sistema operativo |
| Disco dati | SSD 500 GB — tutti i dati in /data · ext4 |
| Disco backup | HDD USB 2 TB — backup notturno, montato solo durante il backup |
| Rete | Ethernet cablata — connesso al router di casa |
| UPS | EcoFlow River 3 Plus — 286 Wh · 600W AC · sub-10ms · USB HID |
| Consumo | ~19W a riposo · ~55 pesos MXN/mese (a 4 pesos/kWh) |
Struttura /data:
/data/ ├── scripts/ ← tutti gli script + config.env ├── config/ ← snapshot config di sistema ├── www/ ← root Nginx (sito gamedite.com) ├── samba/ ← file condivisi in LAN ├── trilium/ ← knowledge base TriliumNext ├── calibre/ ← libreria ebook (metadata + file) ├── calibre-web/ ← config runtime Calibre-Web ├── gitea/ ← repository Git e database Gitea ├── minecraft/ ← server Minecraft Forge (dati live) ├── backup_minecraft/ ← snapshot backup Minecraft └── assistant/ ← dati runtime bot Telegram
Rete
La rete di casa ha due livelli: connessione ISP e rete locale gestita da un router GL-MT3000 con OpenWrt, che fa anche da access point WiFi e adblock per tutti i dispositivi.
VPN peer-to-peer senza apertura di porte. Il server, la VPS Hetzner, il PC e i cellulari sono tutti nella stessa rete ZeroTier — SSH, WebUI Minecraft e gli altri servizi sono raggiungibili da qualsiasi luogo. Samba è visibile solo in LAN fisica.
Router ISP, router GL-MT3000 e OUMAX sono tutti alimentati dall'EcoFlow River 3 Plus. In caso di blackout la connettività e il server rimangono operativi.
Servizi attivi
15+ servizi systemd in esecuzione continua.
Accesso remoto SSH. Notifica Telegram automatica ad ogni login via PAM.
Samba — condivisione file in LAN. Share data e www. Solo rete locale, accesso senza password.
Server web locale. Document root: /data/www/. Copia locale del sito gamedite.com, accessibile in LAN e via ZeroTier.
VPN peer-to-peer per accesso remoto sicuro da qualsiasi luogo, senza port forwarding sul router.
TriliumNext Notes — knowledge base personale self-hosted. Dati in /data/trilium/, sincronizzati su MEGA.
Libreria ebook familiare. Accesso LAN e ZeroTier. Import via Samba, lettura da qualsiasi dispositivo.
Server Git locale per script, sito web, giochi e tool vari. Non esposto su internet.
Driver usbhid-ups per EcoFlow River 3 Plus via USB HID. NUT 2.8.5 compilato dai sorgenti.
upsd espone i dati UPS in rete. upsmon gestisce lo spegnimento ordinato al 20% di carica.
Forge 1.20.1 · OpenJDK 21 · 4 GB RAM · max 3 giocatori · RCON abilitato.
Interfaccia web Python per backup, ripristino e stato del server Minecraft, senza SSH.
Bot Telegram Python — monitoraggio sistema, reminder, avvio backup, notifiche automatiche.
Notifica Telegram all'avvio del server e al ripristino della connessione internet.
NUT 2.8.5 — Gestione UPS EcoFlow
Debian 13 fornisce NUT 2.8.1. Il subdriver EcoFlow HID 0.01 — necessario per il River 3 Plus — è stato introdotto nella 2.8.4. Soluzione: compilazione da sorgenti in /usr/local.
| Parametro | Valore |
|---|---|
| Driver | usbhid-ups |
| Subdriver | EcoFlow HID 0.01 |
| Modello | EcoFlow River 3 Plus |
| Capacità | 286 Wh · 600W AC |
| Soglia spegnimento | 20% di carica |
| Porta upsd | 3493 |
Comandi utili:
upsc ecoflow # tutti i parametri upsc ecoflow battery.charge # carica % upsc ecoflow ups.status # OL = rete · OB = batteria upsc ecoflow battery.runtime # autonomia residua (secondi)
Bot Telegram — Homelab Assistant
Bot Python per monitoraggio e controllo remoto. Risponde solo all'utente autorizzato. Stack: python-telegram-bot + APScheduler.
| Comando | Funzione |
|---|---|
| /start | Lista di tutti i comandi disponibili |
| /stato | CPU, RAM, spazio disco, uptime, data/ora ultimo backup |
| /backup | Avvia il backup USB in background |
| /log | Ultime 20 righe del log di backup USB |
| /backup_mega | Avvia il backup cloud su MEGA in background |
| /log_mega | Ultime 20 righe del log di backup cloud |
| /ricorda [min] [msg] | Reminder tra X minuti |
| /promemoria [GG/MM/AAAA] [HH:MM] [msg] | Reminder a data/ora specifica |
| /lista | Tutti i reminder attivi con ID |
| /cancella [ID] | Cancella un reminder per ID |
Notifiche automatiche: avvio server 🟢, ripristino internet 🌐, login SSH 🔐.
Il bot espone anche un endpoint HTTP interno (POST /send), autenticato con token, che permette agli altri servizi della rete di inviare messaggi Telegram senza conoscere il token del bot. Gira nello stesso processo, avviato come task asyncio. Lo script notify-telegram lo usa da qualsiasi macchina della rete.
Backup
Doppia copertura: backup locale incrementale su HDD USB e backup cloud su MEGA. Ogni esito viene notificato via bot Telegram.
| Backup locale (USB) | Backup cloud (MEGA) | |
|---|---|---|
| Strumento | rsync | rclone |
| Sorgente | Tutto /data/ | Trilium · Scan Samba · Gitea |
| Destinazione | HDD USB 2 TB (montato solo durante il backup) | Account MEGA (gratuito) |
| Frequenza | Ogni notte alle 03:00 | Prima esecuzione 3:30, retry ogni 30 min |
| Log | /var/log/backup.log | /var/log/backup-cloud.log |
| Backup server Minecraft | |
|---|---|
| Script | /data/scripts/minecraft-backup.sh |
| Destinazione | /data/backup_minecraft/ — snapshot con data/ora |
| Frequenza | Ogni lunedì alle 04:00 (cron) |
| Sicurezza | Verifica giocatori via RCON prima di procedere — salta se ci sono giocatori online |
Server Minecraft Forge 1.20.1
| Parametro | Valore |
|---|---|
| Versione Minecraft | 1.20.1 |
| Versione Forge | 47.3.x |
| Java | OpenJDK 21 |
| RAM allocata | 4 GB |
| Giocatori massimi | 3 |
| Modalità | Offline — permette client non ufficiali e bot |
| RCON | Abilitato — usato dagli script di backup |
| Chunk loading | Mod LoadMyChunks — blocco fisico nel mondo |
Interfaccia Python per backup e ripristino senza SSH. Barra di progresso in tempo reale, lista backup con data/ora, eliminazione con conferma, stato server e giocatori connessi. Il ripristino è bloccato se ci sono giocatori online.
Gitea — Server Git locale
Server Git self-hosted per tenere tutto sotto versione senza dipendere da servizi esterni. Non esposto su internet — solo LAN e ZeroTier. Dati in /data/gitea/, inclusi nel backup cloud MEGA.
| Repository | Contenuto |
|---|---|
| oumax-scripts | Script e configurazioni del server (/data/scripts/) |
| oumax-www | Sito web statico Gamedite (/data/www/) |
| questlog | App QuestLog — FastAPI + React |
| clash | Clash of Emperors — gioco di carte online |
| merchant | Merchant — gioco gestionale RPG |
| gd-asteroid | Asteroid Touch (Godot) |
Calibre-Web — Libreria Ebook
Libreria ebook familiare self-hosted. Accesso da qualsiasi dispositivo in LAN o via ZeroTier. Utente unico admin, porta 8083.
| Componente | Dettaglio |
|---|---|
| Libreria | /data/calibre/ — metadata.db + file ebook |
| Formati supportati | epub, pdf, mobi, azw, cbz, cbr, fb2 |
| Import | Copia ebook in /data/samba/libri/ via Samba, poi lancia calibre-import.sh |
Script di Sistema
Tutti gli script leggono le credenziali da /data/scripts/config.env — un solo file da modificare per aggiornare token, password e percorsi.
/data/scripts/backup.sh — Backup dati su USB con rsync incrementale
#!/bin/bash source /data/scripts/config.env # Monta disco USB se non montato if ! mountpoint -q $BACKUP_DIR; then mount UUID=$BACKUP_UUID $BACKUP_DIR fi # Backup incrementale con storico modifiche rsync -a --delete --backup \ --backup-dir="$OLD_DIR" \ --exclude="old" --exclude="logs" \ "/data/" "$BACKUP_DIR/" umount $BACKUP_DIR
/data/scripts/minecraft-backup.sh — Snapshot Minecraft con verifica giocatori via RCON
#!/bin/bash source /data/scripts/config.env # Verifica giocatori connessi via RCON PLAYERS=$(python3 -c " from mcrcon import MCRcon try: with MCRcon('localhost', '$RCON_PASSWORD') as m: print(m.command('list')) except: print(-1) ") if [ "$PLAYERS" -gt 0 ]; then echo "Giocatori online — backup saltato"; exit 1 fi # Stop · Snapshot · Start systemctl stop minecraft rsync -a --exclude="logs/" --exclude="crash-reports/" \ /data/minecraft/ /data/backup_minecraft/$(date +%Y-%m-%d_%H-%M)/ systemctl start minecraft
/data/scripts/notify.sh — Notifiche boot e ripristino internet
#!/bin/bash source /data/scripts/config.env send() { curl -s -X POST "https://api.telegram.org/bot$TELEGRAM_TOKEN/sendMessage" \ -d "chat_id=$TELEGRAM_CHAT_ID" -d "text=$1" -d "parse_mode=Markdown" } case "$1" in boot) # Attende connessione poi notifica for i in $(seq 1 30); do curl -s --max-time 3 https://api.telegram.org > /dev/null && break sleep 5 done send "🟢 *Server OUMAX Online* — $(date '+%d/%m/%Y %H:%M')" ;; check) # Notifica solo al ripristino connessione if ping -c 1 -W 3 8.8.8.8 > /dev/null 2>&1; then [ "$(cat /tmp/inet-state 2>/dev/null)" = "offline" ] && \ send "🌐 *Internet ripristinato su OUMAX*" echo online > /tmp/inet-state else echo offline > /tmp/inet-state fi ;; esac
/data/scripts/notify-ssh.sh — Alert Telegram ad ogni login SSH (via PAM)
#!/bin/bash source /data/scripts/config.env if [ "$PAM_TYPE" = "open_session" ]; then curl -s -X POST "https://api.telegram.org/bot$TELEGRAM_TOKEN/sendMessage" \ -d "chat_id=$TELEGRAM_CHAT_ID" \ -d "parse_mode=Markdown" \ -d "text=🔐 *Login SSH su OUMAX* 👤 $PAM_USER · 🌐 $PAM_RHOST · 🕐 $(date '+%d/%m %H:%M')" fi
/data/scripts/notify-telegram — Invia messaggi Telegram via relay HTTP (funziona su tutta la rete ZeroTier)
#!/bin/bash # Uso: notify-telegram "messaggio" # Token da $TELEGRAM_RELAY_TOKEN o da config.env (solo su OUMAX) OUMAX_RELAY="http://192.168.191.2:9977/send" TEXT="${1:?Uso: notify-telegram \"messaggio\"}" if [ -z "$TELEGRAM_RELAY_TOKEN" ]; then TELEGRAM_RELAY_TOKEN=$(grep '^TELEGRAM_RELAY_TOKEN=' /data/scripts/config.env 2>/dev/null | cut -d= -f2) fi curl -s -X POST "$OUMAX_RELAY" \ -H "Authorization: Bearer $TELEGRAM_RELAY_TOKEN" \ -H "Content-Type: application/json" \ -d "{\"text\": $(python3 -c "import json,sys; print(json.dumps(sys.argv[1]))" "$TEXT")}"
/data/scripts/config.env — Credenziali centralizzate (non versionato)
TELEGRAM_TOKEN=... TELEGRAM_CHAT_ID=... ECOFLOW_EMAIL=... ECOFLOW_PASSWORD=... RCON_PASSWORD=... BACKUP_UUID=... FTP_HOST=... FTP_USER=... FTP_PASS=... TELEGRAM_RELAY_TOKEN=...
Sviluppi futuri
- Shelly Plug US Gen4 — misurazione watt in tempo reale, storico consumi e comando
/wattnel bot Telegram. Codice pronto, in attesa del dispositivo fisico. - Notifiche UPS via bot — alert automatici al cambio di stato EcoFlow (passaggio a batteria, carica bassa, ripristino rete).
- Agente AI locale — hardware dedicato per LLM locali, separato dall'OUMAX per non impattare i servizi già attivi.