odoo/addons/point_of_sale/tools/posbox/configuration/connect_to_wifi.sh

71 lines
2.2 KiB
Bash
Executable File

#!/usr/bin/env bash
# call with ESSID and optionally a password
# when called without an ESSID, it will attempt
# to reconnect to a previously chosen network
function connect () {
WPA_PASS_FILE="/tmp/wpa_pass.txt"
PERSISTENT_WIFI_NETWORK_FILE="/home/pi/wifi_network.txt"
CURRENT_WIFI_NETWORK_FILE="/tmp/current_wifi_network.txt" # used to repair connection when we lose it
ESSID="${1}"
PASSWORD="${2}"
PERSIST="${3}"
NO_AP="${4}"
sleep 3
sudo pkill -f keep_wifi_alive.sh
# make network choice persistent
if [ -n "${ESSID}" ] ; then
if [ -n "${PERSIST}" ] ; then
logger -t posbox_connect_to_wifi "Making network selection permanent"
sudo mount -o remount,rw /
echo "${ESSID}" > ${PERSISTENT_WIFI_NETWORK_FILE}
echo "${PASSWORD}" >> ${PERSISTENT_WIFI_NETWORK_FILE}
sudo mount -o remount,ro /
fi
else
logger -t posbox_connect_to_wifi "Reading configuration from ${PERSISTENT_WIFI_NETWORK_FILE}"
ESSID=$(head -n 1 "${PERSISTENT_WIFI_NETWORK_FILE}" | tr -d '\n')
PASSWORD=$(tail -n 1 "${PERSISTENT_WIFI_NETWORK_FILE}" | tr -d '\n')
fi
echo "${ESSID}" > ${CURRENT_WIFI_NETWORK_FILE}
echo "${PASSWORD}" >> ${CURRENT_WIFI_NETWORK_FILE}
logger -t posbox_connect_to_wifi "Connecting to ${ESSID}"
sudo service hostapd stop
sudo service isc-dhcp-server stop
sudo pkill wpa_supplicant
sudo ifconfig wlan0 down
sudo ifconfig wlan0 0.0.0.0 # this is how you clear the interface's configuration
sudo ifconfig wlan0 up
if [ -z "${PASSWORD}" ] ; then
sudo iwconfig wlan0 essid "${ESSID}"
else
sudo wpa_passphrase "${ESSID}" "${PASSWORD}" > "${WPA_PASS_FILE}"
sudo wpa_supplicant -B -i wlan0 -c "${WPA_PASS_FILE}"
fi
sudo service dhcpcd restart
# give dhcp some time
timeout 30 sh -c 'until ifconfig wlan0 | grep "inet addr:" ; do sleep 0.1 ; done'
if [ $? -eq 124 ] && [ -z "${NO_AP}" ] ; then
logger -t posbox_connect_to_wifi "Failed to connect, forcing Posbox AP"
sudo /home/pi/odoo/addons/point_of_sale/tools/posbox/configuration/wireless_ap.sh "force" &
else
logger -t posbox_connect_to_wifi "Restarting odoo"
sudo service odoo restart
logger -t posbox_connect_to_wifi "Starting wifi keep alive script"
/home/pi/odoo/addons/point_of_sale/tools/posbox/configuration/keep_wifi_alive.sh &
fi
}
connect "${1}" "${2}" "${3}" "${4}" &