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.
Riavvio di Fritz!OS via bash
Attenzione
Aggiornamento del 1/11/20: con FRITZ!OS 7.20 nulla di quanto raccontato qui di seguito è più in grado di funzionare. Il nuovo Sistema Operativo di AVM necessita infatti di un’applicazione regolarmente registrata a bordo dell’OS per permettere di lanciare operazioni di vario tipo, riavvio da bash compreso. Provandoci è pressoché certo che potrai notare nei log di sistema una dicitura simile alla seguente:
Accesso da parte di una App con nome di registrazione sconosciuto dall'indirizzo IP 192.168.XXX.XXX fallito.
Sto cercando di documentarmi (con scarsi risultati attualmente) per capire come registrare l’eventuale script bash e permettergli di tornare a funzionare correttamente.
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“:
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
L'articolo potrebbe non essere aggiornato
Questo post è stato scritto più di 5 mesi fa, potrebbe non essere aggiornato. Per qualsiasi dubbio ti invito a lasciare un commento per chiedere ulteriori informazioni! :-)