Riavvio automatico di Fritz!Box e Repeater con script bash

| |

Sul perché dovresti riavviare un prodotto Fritz in maniera automatica via script bash sorvolerei. Personalmente mi sono ritrovato una tabella ARP (vedi it.wikipedia.org/wiki/Address_Resolution_Protocol) un pelo piena e barcollante sul mio Repeater 3000 (AVM FRITZ! Repeater 3000 sul banco prova, ecco com’è andata) che negli ultimi mesi è diventato protagonista molto più del dovuto dell’area “notte” dell’appartamento dove io e Ilaria continuiamo a lavorare per le nostre rispettive aziende. La conseguenza figlia di ciò è stata una perdita di pacchetti secca durante un meeting Zoom e una qualità in generale della connessione non esattamente al top, nulla che riguardasse il mio 7590 e più in generale la mia linea Fastweb. Riavvio il repeater e tutto riprende a funzionare alla perfezione.

raspberry pi, pi, computer
Photo by planet_fox on Pixabay

Riavvio di Fritz!OS via bash

Fondamentalmente la soluzione che ti sto per proporre funziona con qualsiasi dispositivo che ha Fritz!OS a bordo. Potrei pensare di riavviare il router o uno qualsiasi dei Repeater o dei Powerline, uno script che si collega e lancia un’operazione certamente stupida ma che manca in via ufficiale all’interno di un sistema pensato bene e sviluppato meglio (una pecca che spero e credo verrà risolta in un futuro prossimo direttamente da AVM). Tutto ciò che ti serve è un’utenza con accessi amministrativi al prodotto AVM e qualcosa che ti permetta di programmare l’esecuzione dello script, nel mio caso l’ho dato in pasto al mio Raspberry Pi e al suo Crontab.

Come al solito la Germania è terra ricca di soluzioni e buonissimi suggerimenti che riguardano il mondo AVM, ho infatti incontrato il nulla più totale nelle community italiane ma ho avuto immediati riscontri non appena ho provato a mettere il naso poco fuori dai nostri confini, nella fattispecie parlo di questo articolo che mi ha messo sulla giusta via: andysblog.de/avm-fritzbox-automatisch-neu-starten-lassen (ti agevolo la traduzione in inglese: translate.google.com/translate?sl=auto&tl=en&u=https%3A%2F%2Fwww.andysblog.de%2Favm-fritzbox-automatisch-neu-starten-lassen). È grazie a Andy se sono riuscito ad approdare a una soluzione funzionante su GitHub (github.com/nicoh88/cron_fritzbox-reboot) che viene discussa in un altro blog tedesco (loggn.de/fritzbox-oder-repeater-automatisch-neustarten-lassen-linux-bash-skript) e che ho leggermente adattato alle mie esigenze.

Partendo dal presupposto che conosci bene l’IP del tuo dispositivo AVM (nel mio caso ha una reservation DHCP, non ci si può sbagliare) e l’utenza amministrativa con la quale collegarti, lo script consiste davvero in poche righe:

#!/bin/bash
IP="192.168.1.1"
FRITZUSER="Utente-FritzOS"
FRITZPW="Password-FritzOS"
location="/upnp/control/deviceconfig"
uri="urn:dslforum-org:service:DeviceConfig:1"
action='Reboot'
curl -k -m 5 --anyauth -u "$FRITZUSER:$FRITZPW" http://$IP:49000$location -H 'Content-Type: text/xml; charset="utf-8"' -H "SoapAction:$uri#$action" -d "<?xml version='1.0' encoding='utf-8'?><s:Envelope s:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'><s:Body><u:$action xmlns:u='$uri'></u:$action></s:Body></s:Envelope>" -s > /dev/null

Sostituisci Utente-FritzOS con l’utente reale e chiaramente Password-FritzOS con la giusta password dell’account. Al posto del 192.168.1.1 metti l’indirizzo IP del dispositivo che intendi riavviare e il gioco è pressoché fatto. Fai in modo che lo script possa essere eseguite dalla Bash (chmod +x cron_fritzrepeater-reboot.sh dove cron_fritzrepeater-reboot.sh è il nome che ho dato al file contenente lo script) e lancialo così da verificare che tutto funzioni.

Non sai che utente utilizzare perché non sei solito inserirlo nella schermata amministrativa del tuo prodotto AVM? Poco male, collegati al tuo prodotto AVM, autenticati, spostati in Utenti FRITZ!Box e creane uno nuovo che abbia poteri sulle “Impostazioni FRITZ!Box“:

Riavvio automatico di Fritz!Box e Repeater con script bash

Hai lanciato lo script? Il tuo dispositivo si è riavviato? Fantastico. A questo punto non ti resta che decidere se e quando ripetere l’operazione in maniera automatica senza che sia necessario il tuo intervento. Su Raspbian (ma vale qualsiasi altro sistema Linux) puoi lanciare un crontab -e e inserire ciò che serve in base alla tua esigenza, nel mio caso ho scelto di eseguire lo script il lunedì mattina alle 5:00:

# Reboot Fritz!Repeater 3000
0 5 * * 1 /home/pi/Scripts/Fritz/cron_fritzrepeater-reboot.sh

Ti ricordo che se hai bisogno di “costruire” un intervallo temporale di Crontab puoi sempre appoggiarti all’ottimo servizio messo a disposizione di Crontab Guru, la traduzione del mio 0 5 * * 1 è disponibile all’indirizzo crontab.guru/#0_5_*_*_1, le 5:00 del mattino di qualsiasi mese, di qualsiasi anno, di tutti i lunedì.

Ti serve qualcosa di funzionante su Windows? Andy, di cui ti ho parlato a inizio articolo dandoti il riferimento diretto al suo articolo, ha messo a disposizione già un’equivalente per il sistema di Redmond:

@echo off

set IP=192.168.1.1
set FRITZUSER=Utente-FritzOS
set FRITZPW=Password-FritzOS
set location=/upnp/control/deviceconfig
set uri=urn:dslforum-org:service:DeviceConfig:1
set action=Reboot

curl -k -m 5 --anyauth -u "%FRITZUSER%:%FRITZPW%" http://%IP%:49000%location% -H "Content-Type: text/xml; charset="utf-8"" -H "SoapAction:%uri%#%action%" -d "<?xml version='1.0' encoding='utf-8'?><s:Envelope s:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'><s:Body><u:Reboot xmlns:u='urn:dslforum-org:service:DeviceConfig:1'></u:Reboot></s:Body></s:Envelope>" -s > output.log 2>&1

Anche nel batch poco sopra dovrai modificare utente, password e IP del dispositivo.

Un trucco molto semplice che fa esattamente ciò che gli si chiede.

#StaySafe

Gioxx's Wall

Se hai correzioni o suggerimenti puoi lasciare un commento nell'apposita area qui di seguito o contattarmi privatamente.
Ti è piaciuto l'articolo? Offrimi un caffè! Satispay / PayPal / Buy Me A Coffee / Patreon

Condividi l'articolo con i tuoi contatti: