#!/bin/bash
# Checks for Internet connectivity and changes to an alternative wifi network if
# it detects a problem.
# Needs to have a wpa_supplicant file for each network:
# wpa_supplicant_1 for SSID! and wpa_supplicant_2 for SSID2
# Can easily be extended to more than 2 possible networks
# function to bring down wireless interface, stop wpa_supplicant service and
# then bring up wlan0 again
reset_wifi(){
/sbin/ifconfig wlan0 down
sleep 1
killall wpa_supplicant
sleep 1
/sbin/ifconfig wlan0 up
sleep 1
}
# Logging information saved to a file
# useful for testing and debugging
echo "START" >> /home/pi/wifi.log
echo "Date:" `date` >> /home/pi/wifi.log
echo "WLAN:" `/sbin/iwgetid` >> /home/pi/wifi.log
if /sbin/iwgetid | grep SSID1 > /dev/null; then
echo "SSID1" >> /home/pi/wifi.log
SSID="SSID1"
elif /sbin/iwgetid | grep SSID2 > /dev/null; then
echo "SSID2"
echo "SSID2" >> /home/pi/wifi.log
SSID="SSID2"
else
echo "unknown SSID"
echo "unknown SSID" >> /home/pi/wifi.log
SSID="UN"
fi
echo "$SSID" >> /home/pi/wifi.log
if ping -q -c 1 -W 1 8.8.8.8 >/dev/null; then
echo "Net is up"
echo "Net is up" >> /home/pi/wifi.log
else
if ping -q -c 1 -W 1 8.8.8.8 >/dev/null; then
echo "Net is up (after retry)"
echo "Net is up (after retry)" >> /home/pi/wifi.log
else
echo "Net is down (after retry)"
echo "Net is down (after retry)" >> /home/pi/wifi.log
if [ "$SSID" = "SSID1" ]; then
echo "trying SSID2"
echo "trying SSID2" >> /home/pi/wifi.log
reset_wifi
cp /etc/wpa_supplicant/wpa_supplicant_2.conf /etc/wpa_supplicant/wpa_supplicant.conf
/sbin/wpa_supplicant -B -c/etc/wpa_supplicant/wpa_supplicant.conf -iwlan0
elif [ "$SSID" = "SSID2" ]; then
echo "trying SSID1"
echo "trying SSID1" >> /home/pi/wifi.log
reset_wifi
cp /etc/wpa_supplicant/wpa_supplicant_1.conf /etc/wpa_supplicant/wpa_supplicant.conf
/sbin/wpa_supplicant -B -c/etc/wpa_supplicant/wpa_supplicant.conf -iwlan0
else
echo "dunno" >> /home/pi/wifi.log
echo "dunno"
if [ `date +%M` = 10 ] || [ `date +%M` = 30 ] || [ `date +%M` = 50 ] ; then
echo "yep"
echo "trying SSID1 anyway"
echo "trying SSID1 anayway" >> /home/pi/wifi.log
reset_wifi
cp /etc/wpa_supplicant/wpa_supplicant_1.conf /etc/wpa_supplicant/wpa_supplicant.conf
/sbin/wpa_supplicant -B -c/etc/wpa_supplicant/wpa_supplicant.conf -iwlan0
else
echo "trying SSID2 anyway"
echo "trying SSID2 anyway" >> /home/pi/wifi.log
reset_wifi
cp /etc/wpa_supplicant/wpa_supplicant_2.conf /etc/wpa_supplicant/wpa_supplicant.conf
/sbin/wpa_supplicant -B -c/etc/wpa_supplicant/wpa_supplicant.conf -iwlan0
fi
fi
fi
fi
echo "END" >> /home/pi/wifi.log
Last active
August 21, 2018 13:37
-
-
Save topshed/93f12c270e1f23c9cf58d6629519720a to your computer and use it in GitHub Desktop.
Raspbian bash script for wifi network switching if Internet drops
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment