Skip to content

Commit 6b9e74f

Browse files
committed
something something wifi
1 parent 213dcd5 commit 6b9e74f

File tree

5 files changed

+181
-37
lines changed

5 files changed

+181
-37
lines changed

scripts/hotspot.sh

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
#!/usr/bin/env bash
2+
#version 0.95-4-N/HS-I
3+
#heavily revised: 2019-05-04 by Baris Kurtlutepe
4+
5+
#You may share this script on the condition a reference to RaspberryConnect.com
6+
#must be included in copies or derivatives of this script.
7+
8+
#Network Wifi & Hotspot with Internet
9+
#A script to switch between a wifi network and an Internet routed Hotspot
10+
#A Raspberry Pi with a network port required for Internet in hotspot mode.
11+
#Works at startup or with a seperate timer or manually without a reboot
12+
#Other setup required find out more at
13+
#http://www.raspberryconnect.com
14+
15+
CreateHotSpot()
16+
{
17+
echo "Killing wifi client"
18+
wpa_cli terminate ${WLAN_INTERFACE} >/dev/null 2>&1
19+
echo "Creating HotSpot"
20+
systemctl stop dnsmasq > /dev/null 2>&1
21+
systemctl stop hostapd > /dev/null 2>&1
22+
ifconfig ${WLAN_INTERFACE} down
23+
ifconfig ${WLAN_INTERFACE} up
24+
ip link set dev ${WLAN_INTERFACE} down
25+
ip a add 10.0.34.1/24 brd + dev ${WLAN_INTERFACE}
26+
ip link set dev ${WLAN_INTERFACE} up
27+
dhcpcd -k ${WLAN_INTERFACE} >/dev/null 2>&1
28+
systemctl start dnsmasq
29+
systemctl start hostapd
30+
}
31+
32+
KillHotSpot()
33+
{
34+
echo "Shutting Down HotSpot"
35+
ip link set dev ${WLAN_INTERFACE} down
36+
ifconfig ${WLAN_INTERFACE} down
37+
ifconfig ${WLAN_INTERFACE} up
38+
39+
systemctl stop hostapd
40+
systemctl stop dnsmasq
41+
ip addr flush dev ${WLAN_INTERFACE}
42+
ip link set dev ${WLAN_INTERFACE} up
43+
dhcpcd -n ${WLAN_INTERFACE} >/dev/null 2>&1
44+
}
45+
46+
CreateWifiClient()
47+
{
48+
echo "Starting WiFi connection"
49+
wpa_supplicant -B -i ${WLAN_INTERFACE} -c /etc/wpa_supplicant/wpa_supplicant.conf >/dev/null 2>&1
50+
echo "Waiting 20 seconds"
51+
sleep 20 #give time for connection to be completed to router
52+
}
53+
54+
IsWifiConnected()
55+
{
56+
wpa_cli -i ${WLAN_INTERFACE} status | grep 'ip_address' >/dev/null 2>&1
57+
return $?
58+
}
59+
60+
areKnownNetworksNearBy()
61+
{
62+
SSID_LIST=$(awk '/ssid="/{ print $0 }' /etc/wpa_supplicant/wpa_supplicant.conf | awk -F'ssid=' '{ print $2 }' ORS=',' | sed 's/\"/''/g' | sed 's/,$//')
63+
IFS=","
64+
65+
SSID_REPLY=`iw dev "$wifidev" scan ap-force | egrep "^BSS|SSID:"`
66+
67+
for SSID in ${SSID_LIST}
68+
do
69+
SSID_CLEAN=$(echo ${SSID} | tr -d '\r')
70+
if [[ -z `echo ${SSID_REPLY} | grep ${SSID_CLEAN}` ]]
71+
then
72+
return 1
73+
fi
74+
done
75+
return 0
76+
}
77+
78+
WLAN_INTERFACE=wlan0
79+
iw dev ${WLAN_INTERFACE} set power_save off
80+
ACTIVE_MODE=
81+
82+
while true;
83+
do
84+
if [[ ${ACTIVE_MODE} eq "ap" ]]; then
85+
sleep 300
86+
if [[ areKnownNetworksNearBy ]]; then
87+
systemctl stop omnipy.service
88+
KillHotspot
89+
echo "Hotspot Deactivated, Bringing Wifi Up"
90+
CreateWifiClient
91+
if [[ ! IsWifiConnected ]]; then
92+
echo "Failed to connect to wifi, going back into hotspot mode"
93+
CreateHotSpot
94+
ACTIVE_MODE="ap"
95+
else
96+
ACTIVE_MODE="client"
97+
fi
98+
systemctl start omnipy.service
99+
fi
100+
elif [[ ${ACTIVE_MODE} eq "client" ]]; then
101+
sleep 60
102+
if [[ ! IsWifiConnected ]]; then
103+
systemctl stop omnipy.service
104+
echo "Wi-fi disconnected, retrying"
105+
CreateWifiClient
106+
if [[ ! IsWifiConnected ]]; then
107+
echo "No wi-fi connection, creating hot-spot"
108+
CreateHotSpot
109+
ACTIVE_MODE="ap"
110+
else
111+
echo "Wi-fi connection re-established"
112+
fi
113+
systemctl start omnipy.service
114+
fi
115+
else
116+
if [[ areKnownNetworksNearBy ]]; then
117+
CreateWifiClient
118+
fi
119+
120+
if [[ ! IsWifiConnected ]]; then
121+
echo "No wi-fi connection, creating hotspot"
122+
CreateHotSpot
123+
ACTIVE_MODE="ap"
124+
else
125+
ACTIVE_MODE="client"
126+
fi
127+
fi
128+
done

scripts/omnipy-hotspot.service

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
[Unit]
2+
Description=Omnipy WiFi Hotspot service
3+
After=multi-user.target
4+
5+
[Service]
6+
ExecStart=/bin/bash /home/pi/omnipy/scripts/hotspot.sh
7+
WorkingDirectory=/home/pi/omnipy/scripts/
8+
StandardOutput=inherit
9+
StandardError=inherit
10+
TimeoutStopSec=10
11+
Restart=on-abort
12+
User=root
13+
14+
[Install]
15+
WantedBy=multi-user.target

scripts/omnipy.service

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[Unit]
22
Description=Omnipy Rest API
3-
After=network.target
3+
After=network.target omnipy-beacon.service omnipy-hotspot.service omnipy-pan.service
44

55
[Service]
66
ExecStart=/usr/bin/python3 -u /home/pi/omnipy/restapi.py

scripts/pi-update-finalize.sh

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,13 @@ sudo chown -R pi.pi /home/pi
3434
sudo cp /home/pi/omnipy/scripts/omnipy-pan.service /etc/systemd/system/
3535
sudo cp /home/pi/omnipy/scripts/omnipy.service /etc/systemd/system/
3636
sudo cp /home/pi/omnipy/scripts/omnipy-beacon.service /etc/systemd/system/
37+
sudo cp /home/pi/omnipy/scripts/omnipy-hotspot.service /etc/systemd/system/
3738

3839
sudo systemctl enable omnipy.service
3940
sudo systemctl enable omnipy-beacon.service
4041
sudo systemctl enable omnipy-pan.service
42+
sudo systemctl enable omnipy-hotspot.service
43+
sudo systemctl start omnipy-hotspot.service
4144
sudo systemctl start omnipy.service
4245
sudo systemctl start omnipy-beacon.service
4346
sudo systemctl start omnipy-pan.service

scripts/recovery.sh

Lines changed: 34 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
#FW_UPDATE_FILE=/boot/omnipy-fwupdate
33
PW_RESET_FILE=/boot/omnipy-pwreset
44
BT_RESET_FILE=/boot/omnipy-btreset
5-
HOT_SPOT_FILE=/boot/omnipy-hotspot
5+
#HOT_SPOT_FILE=/boot/omnipy-hotspot
66
EXPAND_FS=/boot/omnipy-expandfs
77
WLAN_INTERFACE=wlan0
88

@@ -20,8 +20,6 @@ fi
2020
# shutdown -r now
2121
#fi
2222

23-
iw dev ${WLAN_INTERFACE} set power_save off
24-
2523
if [[ -f ${PW_RESET_FILE} ]]; then
2624

2725
echo "pi:omnipy" | chpasswd
@@ -39,36 +37,36 @@ if [[ -f ${BT_RESET_FILE} ]]; then
3937
/bin/rm ${BT_RESET_FILE}
4038
fi
4139

42-
if [[ -f ${HOT_SPOT_FILE} ]]; then
43-
44-
mkdir -p /home/pi/omnipy/data
45-
chown -R pi.pi /home/pi
46-
47-
wpa_cli terminate >/dev/null 2>&1
48-
ip addr flush dev ${WLAN_INTERFACE}
49-
ip link set dev ${WLAN_INTERFACE} down
50-
rm -r /var/run/wpa_supplicant >/dev/null 2>&1
51-
52-
ifconfig ${WLAN_INTERFACE} down
53-
ifconfig ${WLAN_INTERFACE} up
54-
ip link set dev ${WLAN_INTERFACE} down
55-
ip a add 10.0.34.1/24 brd + dev ${WLAN_INTERFACE}
56-
ip link set dev ${WLAN_INTERFACE} up
57-
dhcpcd -k ${WLAN_INTERFACE} > /dev/null 2>&1
58-
systemctl start hostapd
59-
systemctl start dnsmasq
60-
61-
#shellinaboxd -t --service /:pi:pi:/home/pi/omnipy:/home/pi/omnipy/scripts/console-ui.sh -p 80 -b
62-
63-
#/bin/rm ${HOT_SPOT_FILE}
64-
else
65-
ip link set dev ${WLAN_INTERFACE} down
66-
ifconfig ${WLAN_INTERFACE} down
67-
ifconfig ${WLAN_INTERFACE} up
68-
systemctl stop hostapd
69-
systemctl stop dnsmasq
70-
ip addr flush dev ${WLAN_INTERFACE}
71-
ip link set dev ${WLAN_INTERFACE} up
72-
dhcpcd -n ${WLAN_INTERFACE} >/dev/null 2>&1
73-
wpa_supplicant -B -i ${WLAN_INTERFACE} -c /etc/wpa_supplicant/wpa_supplicant.conf >/dev/null 2>&1
74-
fi
40+
#if [[ -f ${HOT_SPOT_FILE} ]]; then
41+
#
42+
# mkdir -p /home/pi/omnipy/data
43+
# chown -R pi.pi /home/pi
44+
#
45+
# wpa_cli terminate >/dev/null 2>&1
46+
# ip addr flush dev ${WLAN_INTERFACE}
47+
# ip link set dev ${WLAN_INTERFACE} down
48+
# rm -r /var/run/wpa_supplicant >/dev/null 2>&1
49+
#
50+
# ifconfig ${WLAN_INTERFACE} down
51+
# ifconfig ${WLAN_INTERFACE} up
52+
# ip link set dev ${WLAN_INTERFACE} down
53+
# ip a add 10.0.34.1/24 brd + dev ${WLAN_INTERFACE}
54+
# ip link set dev ${WLAN_INTERFACE} up
55+
# dhcpcd -k ${WLAN_INTERFACE} > /dev/null 2>&1
56+
# systemctl start hostapd
57+
# systemctl start dnsmasq
58+
#
59+
# #shellinaboxd -t --service /:pi:pi:/home/pi/omnipy:/home/pi/omnipy/scripts/console-ui.sh -p 80 -b
60+
#
61+
# #/bin/rm ${HOT_SPOT_FILE}
62+
#else
63+
# ip link set dev ${WLAN_INTERFACE} down
64+
# ifconfig ${WLAN_INTERFACE} down
65+
# ifconfig ${WLAN_INTERFACE} up
66+
# systemctl stop hostapd
67+
# systemctl stop dnsmasq
68+
# ip addr flush dev ${WLAN_INTERFACE}
69+
# ip link set dev ${WLAN_INTERFACE} up
70+
# dhcpcd -n ${WLAN_INTERFACE} >/dev/null 2>&1
71+
# wpa_supplicant -B -i ${WLAN_INTERFACE} -c /etc/wpa_supplicant/wpa_supplicant.conf >/dev/null 2>&1
72+
#fi

0 commit comments

Comments
 (0)