I'm using my pi to monitor my power meters. Data is transferred to PC by WiFi connection using Edimax EW-7811UN USB adapter. When the Wifi connection drops (switched off over night, or shaky connection), the USB adapter remains disabled.

Is there a way to restart the WiFi connection automatically without re-plugging the WiFi adapter?

4 Answers
4

I prefer to disable most of the network auto configuration and connection management daemon stuff and deal with it myself. Here's a (bash) script that will keep the connection up as long as the network is there and you do not have a glitchy wifi driver or power issues; the idea is to ping the router every N seconds, and if that fails, re-connect:

This all presumes an open unencrypted network (if otherwise, you will have to add the appropriate commands). I've used this approach on various linux machines, including the pi, and it works flawlessly; it will keep a system online indefinitely, even if it periodically goes to sleep (which the pi cannot anyway).

A decent check interval is 3-5 seconds; this activity will not significantly impact system resources at all.

You absolutely do need to disable the network auto-configuration first, or this will interfere with your efforts. The easiest way to do this is to comment out everything in /etc/network/interfacesexcept:

auto lo
iface lo inet loopback

To start networking at boot (since I use the pi headless), I have this set to run on raspbian from /etc/rc.local thusly:

/usr/local/bin/wifi is the script. If you don't know what nice is for, read man nice.

The point of the if is that if my wifi dongle is plugged into the pi, the 8192cu module will be loaded by the kernel at this point -- so wifi should start. If not, then it's assumed that the ethernet is plugged in and should be used (if it is isn't, dhclient will just crap out and there is no network access). Note that I removed ifplugd from the system, which if you do leave an ethernet cable plugged in for some reason, you will have to do the same thing (as in apt-get remove and not just disable the ifplugd service, since something else seems to start it anyway -- or else you could read up on ifplugd configuration, I did not bother).

So, this gets a headless pi onto the network at boot and keeps it there. If you wanted a way to switch to eth while running without logging in, you could do something with udev rules for pulling the wifi dongle out.

Sounds worth testing. Not being a linux pro- how would I set the script to run on startup- put into cron? Would it be possible/required to add log rotation as well?
–
andigFeb 26 '13 at 16:09

@andig : I added a few paragraphs about start-up via rc.local. WRT log rotation, that is a separate question that relates to log files in general (but see man logrotate). Right now that script will clobber (overwrite) any previous log if it exists with the same path, not append. For debugging I've sometimes used wifi.$$.log in the wifi.conf file, so that the last log is (unlikely) to get clobbered and I can compare one session to another after I've tweaked something. $$ is the pid of the "wifi" process.
–
goldilocks♦Feb 26 '13 at 18:10

I worry that sometimes shell scripts can be fragile and break in hard to see ways when there are updates or if other networking software is installed. Just a note of caution on this approach.
–
jeremiahAug 29 '13 at 8:56

1

@jeremiah : That's a good fear. I wrote the script, tweaked it over years, and feel I have some understanding of general context in which it operates and therefore what I need to watch out for. However, it is probably harder to pass on understanding than code snippets. To me it is just an alternative approach to trying to work with NetworkManager, by reducing the situation to some very basic elements. This is something to offer people with a similar perspective as "this is what's worked for me" across the linux distro spectrum in the circumstance of a simple stand-alone system.
–
goldilocks♦Aug 29 '13 at 9:28

I updated the answer because there is a step where you have to check connect automatically. Also in preferences you should scroll all the way down. The last option is off screen. It also says Automatically try to connect to networks for Wifi(it is ON by default). I can even take out the WiFi adapter plug in back in and it will reconnect within 2 minutes.(I did this without LAN plugged in) This is really the best way I have found to configure and manage wireless. You also get the GUI version just called wicd
–
ppumkinSep 25 '13 at 18:54

there's a typo in the command "sudo wicd-cruses" 'u' and 'r' are exchanged
–
GawcioNov 14 '14 at 23:38