En esta ocasión vamos a montar un punto de acceso en caso de que no se tenga conexión y poder configurar una red wifi , esto va muy bien cuando movemos la placa de ubicación y no tenemos configurada la nueva red , de la forma habitual necesitaríamos un teclado y un monitor para cambiar el fichero /etc/wpa_supplicant/wpa_supplicant.conf , de esta forma si al arrancar no se puede conectar creara un punto de acceso al que nos podemos conectar y poner las credenciales de la nueva red.
Instalaremos balena-os/wifi-connect .
bash <(curl -L https://github.com/balena-io/wifi-connect/raw/master/scripts/raspbian-install.sh)
Este es el proceso de funcionamiento de wifi-connect
Tuve que añadir un par de pausas y forzar un escaneo ya que si no me aparecían en blanco la lista de redes
sleep 15
iwlist scan
sleep 15
Crearemos el script sudo nano /home/antonio/scripts/wifiactiva.sh
#!/usr/bin/env bash export DBUS_SYSTEM_BUS_ADDRESS=unix:path=/host/run/dbus/system_bus_socket # Optional step - it takes couple of seconds (or longer) to establish a WiFi connection # sometimes. In this case, following checks will fail and wifi-connect # will be launched even if the device will be able to connect to a WiFi network. # If this is your case, you can wait for a while and then check for the connection. sleep 15 iwlist scan sleep 15 # Choose a condition for running WiFi Connect according to your use case: # 1. Is there a default gateway? # ip route | grep default # 2. Is there Internet connectivity? #nmcli -t g | grep full # 3. Is there Internet connectivity via a google ping? #wget --spider http://google.com 2>&1 # 4. Is there an active WiFi connection? iwgetid -r if [ $? -eq 0 ]; then printf 'Skipping WiFi Connect\n' else printf 'Starting WiFi Connect\n' # sudo nmcli connection delete id `hostname`_wifi # sleep 5 sudo /usr/local/sbin/wifi-connect -s `hostname`_wifi -i wlan0 -p 123454321 fi # Start your application here. sleep infinity
Y lo añadiremos en crontab
#Modo AP si no hay conexion @reboot /bin/sh /home/antonio/scripts/wifiactiva.sh
Una vez arrancada si no detecta conexión llamara a wifi-connect , creara el AP y ya nos aparecerá en el móvil
En la pantalla de inicio o si no en la url http://192.168.42.1/ podremos elegir la red y la contraseña
Si todo es correcto ya nos deberá aparecer dentro de nuestra red
Y podremos conectarnos al dispositivo
Después de varias pruebas con el script que recomiendan en github me fallaba bastante por lo que decidí adaptar un script que utilizaba para otros tema y funciona correctamente.
Este seria el script definitivo , donde ponemos el nombre de la wifi en función del hostname y le ponemos una contraseña por defecto
#!/usr/bin/env bash export DBUS_SYSTEM_BUS_ADDRESS=unix:path=/host/run/dbus/system_bus_socket # Un log, porque la vida sin logs no es nada RUTA_LOG="/home/antonio/scripts/log_conexion.txt" echo "#################################################################" >> $RUTA_LOG echo "INICIO DEL SCRIPT CONTROL CONEXION" >> $RUTA_LOG echo "#################################################################" >> $RUTA_LOG echo `date` >> $RUTA_LOG echo `uptime` | sed -e 's/^[ \t]*//' >> $RUTA_LOG echo "#################################################################" >> $RUTA_LOG #################### # Configurations #################### # The interval [sec] to check the pingable destination for connectivity. check_interval=150 # The public or local resource to ping. ping_destination="www.google.com" # The number of ping packets to send. ping_count=5 # The consecutive max ping failure count. When reached a reboot is invoked. max_ping_failures=1 #################### # Main #################### sleep 15 iwlist scan sleep 15 failure_count=0 while true do # test the pingable resource wget -q --tries=10 --timeout=20 --spider http://google.com # check exit status of ping command if [[ $? -eq 0 ]]; then failure_count=0 else failure_count=$((failure_count+1)) echo `date +"%T"` "fallo de conexión ..." >> $RUTA_LOG if ((failure_count >= max_ping_failures)); then echo "#################################################################" >> $RUTA_LOG echo `date +"%T"` "llamada a wifi-connect" >> $RUTA_LOG echo "#################################################################" >> $RUTA_LOG sudo /usr/local/sbin/wifi-connect -s `hostname`_wifi -i wlan0 -p 123454321 failure_count=0 check_interval=300 #sudo /sbin/shutdown -r +1 break fi fi sleep $check_interval done
Lo añadimos a nuestro querido cron
#Modo AP si no hay conexion @reboot /bin/bash /home/antonio/scripts/wifiactiva.sh
los ficheros de conexión que se van creando se guardan en /etc/NetworkManager/system-connections/
Y con esto y un bizcocho ………..