Wie kann ich die WiFi-Verbindung automatisch wiederherstellen?

Ich verwende meinen Pi zur Überwachung meiner Leistungsmesser. Die Daten werden über eine WiFi-Verbindung mit dem Edimax EW-7811UN USB-Adapter auf den PC übertragen. Wenn die WiFi-Verbindung abbricht (über Nacht ausgeschaltet oder wackelige Verbindung), bleibt der USB-Adapter deaktiviert.

Gibt es eine Möglichkeit, die WiFi-Verbindung automatisch neu zu starten, ohne den WiFi-Adapter erneut anzustecken?

Nun, es gibt eine sehr einfache Lösung:

  1. Gehen Sie zu /etc/ifplugd/action.d/ und benennen Sie die Datei ifupdown in ifupdown.original um
  2. Dann machen Sie: cp /etc/wpa_supplicant/ifupdown.sh ./ifupdown
  3. Zum Schluss: sudo reboot

Das ist alles. Testen Sie dies, indem Sie Ihren AP aus- und wieder einschalten; Sie sollten sehen, dass Ihr Raspberry Pi sich wieder ordnungsgemäß verbindet.

Kommentare (10)
Lösung

Ich ziehe es vor, die meisten der Netzwerk-Autokonfiguration und Verbindungsmanagement-Daemon Sachen zu deaktivieren und mich selbst darum zu kümmern. Hier ist ein (Bash-)Skript, das die Verbindung aufrecht erhält, solange das Netzwerk vorhanden ist und Sie keinen fehlerhaften WLAN-Treiber oder Stromprobleme haben; die Idee ist, den Router alle N Sekunden anzupingen, und wenn das fehlschlägt, erneut zu verbinden:

#!/bin/bash    

# make sure we aren't running already
what=`basename $0`
for p in `ps h -o pid -C $what`; do
        if [ $p != $$ ]; then
                exit 0
        fi
done

# source configuration
. /etc/wifi.conf

exec 1> /dev/null
exec 2>> $log
echo $(date) > $log
# without check_interval set, we risk a 0 sleep = busy loop
if [ ! "$check_interval" ]; then
        echo "No check interval set!" >> $log
        exit 1
fi

startWifi () {
        dhclient -v -r
    # make really sure
        killall dhclient
        iwconfig $wlan essid $essid
        dhclient -v $wlan
}

ifconfig $eth down
ifconfig $wlan up
startWifi

while [ 1 ]; do
        ping -c 1 $router_ip & wait $!
        if [ $? != 0 ]; then
                echo $(date)" attempting restart..." >> $log
                startWifi
                sleep 1
        else sleep $check_interval
        fi
done

Also könnte /etc/wifi.conf in diesem Fall enthalten:

router_ip=192.168.0.1
log=/var/log/wifi.log
wlan=wlan0
eth=eth0
essid=someNetwork
check_interval=5

Dies alles setzt ein offenes, unverschlüsseltes Netzwerk voraus (falls nicht, müssen Sie die entsprechenden Befehle hinzufügen). Ich habe diesen Ansatz auf verschiedenen Linux-Maschinen verwendet, einschließlich des Pi, und er funktioniert einwandfrei; er hält ein System auf unbestimmte Zeit online, selbst wenn es regelmäßig in den Ruhezustand geht (was der Pi sowieso nicht kann).

Ein angemessenes Überprüfungsintervall ist 3-5 Sekunden; diese Aktivität wird die Systemressourcen nicht wesentlich beeinträchtigen.

Sie müssen auf jeden Fall zuerst die automatische Netzwerkkonfiguration deaktivieren, einschließlich ifplugd und andere Netzwerk-Daemons, oder dies wird Ihre Bemühungen behindern:

Wie kann ich die automatische Netzwerkkonfiguration unter Raspbian deaktivieren?

Ich habe in der Tat apt-get remove ifplugd benutzt.

Um das Netzwerk beim Booten zu starten (da ich den Pi ohne Kopfhörer verwende), habe ich dies so eingestellt, dass es auf Raspbian in /etc/rc.local läuft:

wifi_mod=`lsmod | grep 8192cu`
if [ "$wifi_mod" ]; then
        echo "Starting wifi..."
        /usr/bin/nice -n -10 /usr/local/bin/wifi &
else
        echo "Starting ethernet..."
        /sbin/ifconfig eth0 up
        /sbin/dhclient eth0
fi

/usr/local/bin/wifi ist das Skript. Wenn Sie nicht wissen, wofür nice ist, lesen Sie man nice.

Der Sinn des if ist, dass, wenn mein Wifi-Dongle in den Pi eingesteckt ist, das 8192cu-Modul vom Kernel an diesem Punkt geladen wird - also sollte Wifi starten. Wenn nicht, dann wird davon ausgegangen, dass das Ethernet eingesteckt ist und verwendet werden sollte (wenn nicht, wird dhclient einfach abspringen und es gibt keinen Netzwerkzugang).

Damit dies funktioniert, müssen Sie wahrscheinlich

Damit wird ein headless pi beim Booten ins Netzwerk gebracht und dort gehalten. Wenn man eine Möglichkeit haben möchte, während des Betriebs auf eth zu wechseln, ohne sich einzuloggen, könnte man etwas mit udev rules machen, um den WLAN-Dongle herauszuziehen.

Kommentare (5)

netcfg

Versuchen Sie netcfg. Ohne weitere Details darüber, welche Distribution Sie verwenden, kann ich nicht viel mehr Details liefern, aber es sollte tun, was Sie wollen.

Kommentare (1)