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 infinityY 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 ………..