Por quanto tempo o wlan é desabilitado no evento 'CTRL-EVENT-SSID-TEMP-DISABLED'?

1

De vez em quando meu roteador vai desligar (às vezes a partir de atualizações de firmware), e durante esse tempo, por vezes, meu Raspberry Pi também será reiniciado e eu vou pegar algo assim no log:

Jul 25 10:00:49 raspberrypi wpa_supplicant[536]: wlan0: Trying to associate with 80:3f:5d:99:b7:63 (SSID='X' freq=2462 MHz)
Jul 25 10:00:49 raspberrypi wpa_supplicant[536]: wlan0: CTRL-EVENT-ASSOC-REJECT status_code=16
Jul 25 10:00:49 raspberrypi wpa_supplicant[536]: wlan0: CTRL-EVENT-SSID-TEMP-DISABLED id=0 ssid="X" auth_failures=1 duration=10 reason=CONN_FAILED

Isso é bom já que o WiFi naquele momento não estava disponível, no entanto, o WiFi volta em poucos minutos. Neste momento, a única 'correção' que posso encontrar é reiniciar o Pi.

No entanto, se eu não estiver em casa, gostaria de tentar novamente. Eu deixei por 3 horas e nunca tentei novamente, então eu estou querendo que ele tente de novo? Existe alguma maneira eu posso fazer isso lidar com este caso?

    
por automaton 25.07.2017 / 18:52

1 resposta

1

Automatically Reconnecting WiFi on a RaspberryPi

In this post, I’m going to cover writing a short script that automatically reconnects a RaspberryPi to a WiFi network. The script will check to see if the Pi has network connectivity and, if it’s offline, will restart the wireless interface to bring it back online. We’ll use cron to schedule the execution of this script at a regular interval.

There are a few ways to determine if the RaspberryPi has network connectivity. For this script, we’ll be using ping.

Writing the script

To get started, we’ll need to determine if the RaspberryPi is connected to the network. To do this, we’ll attempt to ping a server and see if we get a response. If the command succeeds (RaspberryPi receives a response from the server), we have network connectivity. If the command fails, we’ll turn wlan0 off and back on.

#!/bin/bash

# The IP for the server you wish to ping (8.8.8.8 is a public Google DNS server)
SERVER=8.8.8.8

# Only send two pings, sending output to /dev/null
ping -c2 ${SERVER} > /dev/null

# If the return code from ping ($?) is not 0 (meaning there was an error)
if [ $? != 0 ]
then
    # Restart the wireless interface
    ifdown --force wlan0
    ifup wlan0
fi

Name the script something memorable (wifi_rebooter.sh), and place this script in /usr/local/bin. Make sure it’s executable by running:

chmod +x /usr/local/bin/wifi_rebooter.sh

Scheduling regular execution

To ensure the script runs automatically, we’ll use cron. The frequency that you run this script is a matter of personal preference - I chose to run the script every five minutes.

To schedule the script, open /etc/crontab for editing and add this line to the bottom:

*/5 *   * * *   root    /usr/local/bin/wifi_rebooter.sh

This will ensure that the script is run, as root, every 5 minutes. If you’re unfamiliar with cron syntax, take a look at the cron format.

Testing

To test that the script works as expected, we are going to take down the wlan0 interface and wait for the script to bring it back up. Before taking down wlan0, you may want to adjust the interval in /etc/crontab to 1 minute. Also, note that this will immediately disconnect you from your shell session.

To take down wlan0 to confirm the script works, run:

ifdown --force wlan0

After waiting patiently for ~1 minute, try SSHing back into your RaspberryPi. Assuming everything worked, your RaspberryPi should have automatically reconnected to WiFi. Don’t forget to adjust the interval in /etc/crontab back to a more appropriate value, if you set it to one minute for testing.

source

    
por 25.07.2017 / 21:05