Home Guide Raspberry in wi-fi irraggiungibile: fix definitivo

Raspberry in wi-fi irraggiungibile: fix definitivo

319
0
ripristino-wifi-raspberry

Se anche voi avete il Raspberry collegato in rete tramite wi-fi, vi sarà sicuramente capitato qualche volta di non riuscire a raggiungere il vostro Home Assistant ne da indirizzo remoto (esempio: https://lamiacasa.duckdns.org:8123) e neppure direttamente da rete locale (esempio: https://192.168.1.5:8123) dando per scontato che fosse un problema di Home Assistant.

Quindi vi sarete detti: “Mi collego in SSH e faccio un sudo reboot“.

A questo punto l’amara sorpresa… non riuscite a collegarvi nemmeno in SSH… il vostro Raspberry è sparito dalla rete locale!! Andate a controllare i dispositivi collegati in tempo reale direttamente dal pannello admin del vostro router…. niente… il Raspberry non c’è.

La soluzione? Staccare e riattaccare la spina! Ed ecco che dopo pochi minuti di avvio il tutto è tornato alla normalità.

Ma cosa è successo? C’è da sapere che il firmware del Raspberry soffre di un bug ancora irrisolto ad oggi che non gli permette di riconnettersi una volta che la connessione viene persa per qualche motivo. Questo non si verifica sempre, succede a random e quando succede dovete essere lì pronti a staccare la spina per ripristinare il corretto funzionamento.

Per fortuna esistono soluzioni alternative e automatizzate per rimediare al problema.

SOLUZIONE 1

Collegare il Raspberry tramite cavo ethernet. Ovviamente questa soluzione non è adatta a tutti, ma se ne avete la possibilità di farlo è la soluzione migliore!

SOLUZIONE 2

Molti utenti sul web dicono di disattivare il Power Management del wi-fi del proprio Raspberry per risolvere. Personalmente l’ho provato ma non ho risolto il problema. In ogni caso la procedura è questa.

Collegarsi tramite SSH e una volta loggati digitare il comando:

sudo cp /etc/network/interfaces /etc/network/interfaces.backup

per effettuare il backup di sicurezza.

Andiamo quindi a modificare il file con:

sudo nano /etc/network/interfaces

Se non avete mai customizzato questo file prima d’ora, potete tranquillamente sostituire il contenuto con questo blocco:

auto lo

iface lo inet loopback
iface eth0 inet dhcp

auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
wireless-power off
iface default inet dhcp

Ad ogni modo, nel caso aveste già modificato in precedenza tale file con altre impostazioni, il blocco fondamentale da aggiungere è questo:

auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
wireless-power off
iface default inet dhcp

Ora salvate ed uscite dall’editor con CTRL-X, Y, INVIO e riavviate:

sudo reboot

Una volta riavviato, eseguite il comando:

iwconfig

ed assicuratevi che a schermo appaia, tra le altre, la stringa Power Management:off

 

SOLUZIONE 3

Questa è la soluzione che personalmente uso. E’ un semplice script che controlla ogni 10 minuti che il router sia raggiungibile tramite ping e nel caso il check fallisce, il wifi viene ripristinato in automatico.

Scarichiamo lo script da qui: NetReconnector oppure creiamo un file sul nostro PC denominato NetReconnector.sh e carichiamolo tramite SAMBA nel percorso del nostro Raspberry: /home/pi

Il file è così formato:

#!/bin/bash
# by nickwang wxlcat@gmail.com

NetCard=wlan0	 		# the netcard connected to the internet
PingTarget=www.baidu.com	# the ping target, router ip or website, etc: 192.168.1.1, www.baidu.com
LogFile=~/NetReconnector.log	# log file
LogAll=false			# log msg no matter whether the net is connected, used to be check whether the script is running.

test -e $LogFile || touch $LogFile

time=$(date "+%Y/%m/%d %H:%M:%S")

ret=$(ping -c 2 -W 1 -I $NetCard $PingTarget | grep 'received' | cut -d ',' -f 2 | cut -d ' ' -f 2)

if [ "$ret" == "0" ]; then
    sudo ifdown wlan0 && sudo ifup wlan0
    echo "Try Reconnect: $?, $time" | tee -a $LogFile
else
    if [ "$LogAll" == "true" ]; then
        echo "Network is ok, ret = $ret, $time" | tee -a $LogFile
    fi
fi

exit 0

Colleghiamoci tramite SSH e spostiamoci nella directory:

cd /home/pi

e successivamente digitiamo il comando:

vim NetReconnector.sh

Andiamo ora a modificare solo i campi NetCard e PingTarget

Assegnamo a NetCard il valore wlan0, mentre a PingTarget possiamo dargli un valore di un dominio, ad esempio www.google.it, ma più semplicemente l’IP del nostro router

Assegnato ora i permessi di esecuzione allo script:

chmod +x NetReconnector.sh

e successivamente il comando:

crontab -e

e inseriamo questa riga:

*/10 * * * * ~/NetReconnector.sh

la quale farà sì che il check sullo stato di connessione wifi venga eseguito ogni 10 minuti.