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:
/etc/ifplugd/action.d/
und benennen Sie die Datei ifupdown
in ifupdown.original
umcp /etc/wpa_supplicant/ifupdown.sh ./ifupdown
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.
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.
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.