Evolucionamos este código, ya que es "poco robusto":
PREVIO: En "Task Properties" aseguramos que el "Collision Handling" esta en "Abort New Task", lo que impedirá una doble ejecución de la tarea, y así no es necesario controlar este hecho.
1.- IF %WIFII !~ *CONNECTION*
[Comprobamos que no estamos conectados a una Wifi]
2.- IF %LOCN !~ %LOCFALLOWIFI
[Comprobamos que la ubicación actual no ha fallado antes, si es así, ni encendemos el Wifi, ahorrando bateria]
3.- Variable Set %WifiInteligente TO on
[Por si queremos saber que estamos en esta tarea en otro sitio]
4.- WiFi Set On
[Activamos el Wifi]
5.- Variable Set %III TO 60
[60 segundos para pillar red o apagamos...]
6.- Variable Subtract %III value 5
[5 segundos menos...]
7.- Variable Set %III TO 0 IF %WIFII ~ *CONNECTION*
[Salida cutre, si estamos conectados pongo el contador a 0...]
8.- Wait Seconds 5 IF %WIFII !~ *CONNECTION*
[Esperamos 5 segundos si no estamos conectados]
9.- GOTO Action 6 IF %III > 0
[Ojito a esto que el salto es POSICIONAL, es el bucle de espera, hay que saltar a la posición que resta 5 al contador]
10.- Wifi Set Off IF %WIFII !~ *CONNECTION*
[Apagamos WIFI si no estamos conectados]
11.- Variable Set %LOCFALLOWIFI TO %LOCN IF %WIFII !~ *CONNECTION*
[Si no hemos conseguido conexión guardo la posición para la próxima ejecución...]
12.- Variable Clear %LOCFALLOWIFI IF %WIFII ~ *CONNECTION*
[Si hemos conseguido conexión limpio la posición...]
13.- End If
[Cierra los IF de la posición 1 y 2]
14.- Mobile Data APN SET ON IF %WIFII !~ *CONNECTION*
[Enciendo los datos móviles si no tengo Wifi]
15.- Mobile Data SET ON IF %WIFII !~ *CONNECTION*
[Enciendo los datos móviles si no tengo Wifi]
16.- Variable Clear %WifiInteligente
Esta Tarea después debe ser invocada desde los perfiles en los que necesitemos acceder a conectividad utilizando un "Perform Task".
Saludos!
