diff --git a/scripts/pi2-backup/auto-git-backup.sh b/scripts/pi2-backup/auto-git-backup.sh new file mode 100755 index 0000000..ac77e35 --- /dev/null +++ b/scripts/pi2-backup/auto-git-backup.sh @@ -0,0 +1,94 @@ +#!/bin/bash + +# ============================================================================== +# πŸ’Ύ AUTO GIT BACKUP - DINAMICO +# Sincronizza automaticamente tutti gli script .sh e .py dal Pi2 e dal Pi1 +# verso il repository Gitea locale, poi esegue il push. +# ============================================================================== + +# --- CONFIGURAZIONE --- +REPO_DIR="/home/daniely/loogle-repo" +LOG_FILE="/var/log/git-backup.log" +DATE=$(date +"%Y-%m-%d %H:%M") + +# IP del Pi1 (Master) da cui prelevare i file remoti +PI1_IP="192.168.128.80" +PI1_USER="daniely" + +# Redirige tutto l'output (stdout e stderr) nel log +exec >> $LOG_FILE 2>&1 + +echo "=== Inizio Backup Git: $DATE ===" + +# 1. PREPARAZIONE REPOSITORY +# -------------------------- +if [ -d "$REPO_DIR" ]; then + cd "$REPO_DIR" || { echo "❌ Errore: Impossibile entrare in $REPO_DIR"; exit 1; } +else + echo "❌ Errore: La cartella $REPO_DIR non esiste."; exit 1; +fi + +# Aggiorna il repository locale (pull) per evitare conflitti +echo "πŸ”„ Eseguo Git Pull..." +git pull origin main + +# Assicuriamoci che le cartelle di destinazione esistano +mkdir -p ./scripts/pi2-backup +mkdir -p ./services/telegram-bot +mkdir -p ./scripts/pi1-master +mkdir -p ./configs + +# 2. RACCOLTA FILE DAL PI-2 (LOCALE) +# ---------------------------------- +echo "πŸ“‚ Raccolta dinamica file locali (Pi-2)..." + +# A. Script nella Home (solo .sh) -> scripts/pi2-backup +# --include='*.sh' prende gli script, --exclude='*' ignora tutto il resto +rsync -av --include='*.sh' --exclude='*' /home/daniely/ "$REPO_DIR/scripts/pi2-backup/" + +# B. Script del Bot (tutti .py e .sh) -> services/telegram-bot +rsync -av --include='*.py' --include='*.sh' --exclude='*' /home/daniely/docker/telegram-bot/ "$REPO_DIR/services/telegram-bot/" + +# C. File di Configurazione specifici (Keepalived) +if [ -f "/etc/keepalived/keepalived.conf" ]; then + sudo cp /etc/keepalived/keepalived.conf ./configs/keepalived_pi2.conf + sudo chown daniely:daniely ./configs/keepalived_pi2.conf + echo "βœ… Configurazione Keepalived Pi2 copiata." +fi + +# 3. RACCOLTA FILE DAL PI-1 (REMOTO) +# ---------------------------------- +echo "πŸ“‘ Raccolta dinamica file remoti (Pi-1)..." + +# A. Script nella Home remota (.sh e .py) -> scripts/pi1-master +# Nota: Richiede che le chiavi SSH siano configurate per non chiedere password +rsync -av -e "ssh -q" --include='*.sh' --include='*.py' --exclude='*' $PI1_USER@$PI1_IP:/home/daniely/ "$REPO_DIR/scripts/pi1-master/" + +# B. Recupero file specifici fuori dalla home (Legacy da vecchio script) +# Se dhcp-alert.sh esiste ancora in /usr/local/bin, lo prendiamo +scp -q $PI1_USER@$PI1_IP:/usr/local/bin/dhcp-alert.sh ./scripts/pi1-master/ 2>/dev/null || echo "⚠️ dhcp-alert.sh non trovato su Pi1 (ignorato)" + +# C. Configurazione Keepalived Remota +scp -q $PI1_USER@$PI1_IP:/etc/keepalived/keepalived.conf ./configs/keepalived_pi1.conf 2>/dev/null +if [ $? -eq 0 ]; then + echo "βœ… Configurazione Keepalived Pi1 scaricata." +else + echo "⚠️ Impossibile scaricare Keepalived conf da Pi1." +fi + +# 4. GIT PUSH +# ----------- +# Verifica se ci sono cambiamenti reali +if [[ `git status --porcelain` ]]; then + echo "πŸ“ Rilevati cambiamenti. Eseguo Commit e Push..." + + git add . + git commit -m "Backup automatico script del $DATE" + git push -u origin main + + echo "βœ… Push completato con successo." +else + echo "ℹ️ Nessun cambiamento rilevato. Repository giΓ  aggiornato." +fi + +echo "=== Fine Backup Git ===" diff --git a/scripts/pi2-backup/super_watchdog.sh b/scripts/pi2-backup/super_watchdog.sh new file mode 100644 index 0000000..2e84d81 --- /dev/null +++ b/scripts/pi2-backup/super_watchdog.sh @@ -0,0 +1,120 @@ +#!/bin/bash + +# ================================================ +# πŸ” SUPER WATCHDOG DI RETE (Gira su Pi-2) +# ================================================ + +# --- CONFIGURAZIONE TELEGRAM --- +# Legge il token dal file sicuro invece che averlo in chiaro +TOKEN_FILE="/etc/telegram_dpc_bot_token" + +if [ -f "$TOKEN_FILE" ]; then + # Legge il file e rimuove spazi o 'a capo' accidentali + BOT_TOKEN=$(cat "$TOKEN_FILE" | tr -d '\n' | tr -d '\r') +else + echo "ERRORE CRITICO: Token file non trovato in $TOKEN_FILE" + exit 1 +fi + +CHAT_ID="64463169" +# πŸ‘†πŸ‘† FINE MODIFICHE πŸ‘†πŸ‘† + +# Cartella dove salvare lo stato di ogni dispositivo +STATE_DIR="/tmp/watchdog_states" +mkdir -p "$STATE_DIR" + +# --- LISTA DEI BERSAGLI --- +# Formato: "Nome Amichevole|Indirizzo IP" +# Usa icone diverse per capire subito la gravitΓ . +TARGETS=( + # CRITICI 🚨 + "πŸ“ Pi-1 (Master)|192.168.128.80" + "πŸ—„οΈ NAS DS920+|192.168.128.100" + "🌍 Internet (Google)|8.8.8.8" + "πŸ“‘ Router Main|192.168.128.1" + + # INFRASTRUTTURA πŸ”Œ + "πŸ—„οΈ NAS DS214|192.168.128.90" + "πŸ”Œ Switch Sala (.105)|192.168.128.105" + "πŸ”Œ Switch Main (.106)|192.168.128.106" + "πŸ”Œ Switch Lavanderia (.107)|192.168.128.107" + "πŸ”Œ Switch Taverna (.108)|192.168.128.108" + + # WIFI πŸ“Ά + "πŸ“Ά WiFi Sala (.101)|192.168.128.101" + "πŸ“Ά WiFi Luca (.102)|192.168.128.102" + "πŸ“Ά WiFi Taverna (.103)|192.168.128.103" + "πŸ“Ά WiFi Dado (.104)|192.168.128.104" + + # CAMERE πŸ“· (Sottorete .135) + "πŸ“· Cam Matrimoniale|192.168.135.2" + "πŸ“· Cam Luca|192.168.135.3" + "πŸ“· Cam Ingresso|192.168.135.4" + "πŸ“· Cam Sala|192.168.135.5" + "πŸ“· Cam Taverna|192.168.135.6" + "πŸ“· Cam Retro|192.168.135.7" +) + +# Funzione per inviare messaggi Telegram +send_telegram() { + MSG="$1" + # Usa un timeout breve per curl per non bloccare lo script se Telegram non va + curl -s --max-time 5 -X POST "https://api.telegram.org/bot$BOT_TOKEN/sendMessage" -d chat_id="$CHAT_ID" -d text="$MSG" -d parse_mode="Markdown" > /dev/null 2>&1 +} + +# ================================================ +# CICLO DI CONTROLLO PRINCIPALE +# ================================================ + +echo "--- Inizio controllo $(date) ---" + +# Loop attraverso ogni dispositivo nella lista +for target_line in "${TARGETS[@]}"; do + # Estrai Nome e IP separati dal simbolo "|" + NAME=$(echo "$target_line" | cut -d'|' -f1) + IP=$(echo "$target_line" | cut -d'|' -f2) + + # Crea un nome file sicuro per lo stato usando l'IP (es. 192_168_1_1.state) + SAFE_IP="${IP//./_}" + STATE_FILE="$STATE_DIR/${SAFE_IP}.state" + + # Leggi lo stato precedente (default UP se non esiste) + if [ -f "$STATE_FILE" ]; then + LAST_STATE=$(cat "$STATE_FILE") + else + LAST_STATE="UP" + echo "UP" > "$STATE_FILE" # Inizializza + fi + + # --- IL PING --- + # Tenta 2 ping, con timeout di 1 secondo l'uno. + # È un controllo rapido. Se fallisce 2 volte di fila, Γ¨ giΓΉ. + ping -c 2 -W 1 "$IP" > /dev/null 2>&1 + PING_RESULT=$? # 0 = Successo, altro = Fallimento + + if [ $PING_RESULT -eq 0 ]; then + # === ORA È ONLINE === + if [ "$LAST_STATE" == "DOWN" ]; then + # Era giΓΉ, ora Γ¨ su: NOTIFICA DI RISOLUZIONE + send_telegram "βœ… **RISOLTO: $NAME Γ¨ tornato ONLINE!**%0AIP: \`$IP\`" + echo "UP" > "$STATE_FILE" + echo "--> $NAME tornato UP. Notifica inviata." + fi + else + # === ORA È OFFLINE === + if [ "$LAST_STATE" == "UP" ]; then + # Era su, ora Γ¨ giΓΉ: NOTIFICA DI ALLARME + # Scegli l'icona in base al tipo di dispositivo per l'allarme + ICON="⚠️" + if [[ "$NAME" == *"🚨"* || "$NAME" == *"🌍"* ]]; then ICON="🚨 CRITICO:"; fi + + send_telegram "$ICON **ALLARME: $NAME Γ¨ OFFLINE!**%0AIP: \`$IP\` non risponde." + echo "DOWN" > "$STATE_FILE" + echo "--> $NAME andato DOWN. Notifica inviata." + else + echo "$NAME ancora DOWN. Nessuna notifica." + fi + fi +done + +echo "--- Fine controllo ---" diff --git a/sync_loogle_bot.cron.log b/sync_loogle_bot.cron.log new file mode 100644 index 0000000..a4ea3ee --- /dev/null +++ b/sync_loogle_bot.cron.log @@ -0,0 +1,16 @@ +2025-12-27 09:00:01 [START] Sync Loogle Bot +2025-12-27 09:00:01 [RSYNC] /home/daniely/docker/telegram-bot/ -> /home/daniely/loogle-repo/services/telegram-bot/ +sending incremental file list +./ +nowcast_120m_alert.py + +sent 11.968 bytes received 38 bytes 24.012,00 bytes/sec +total size is 160.755 speedup is 13,39 +[main 91189e0] Sync Loogle Bot 2025-12-27 09:00 + 1 file changed, 379 insertions(+) + create mode 100644 services/telegram-bot/nowcast_120m_alert.py +remote: . Processing 1 references +remote: Processed 1 references in total +To gitea-local:daniele/loogle-scripts.git + aa5386b..91189e0 main -> main +2025-12-27 09:00:02 [OK] Push completato.